@kirkchinese/dsh-citeciter 0.9.0-beta.2 → 0.9.0-beta.4

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.
Files changed (78) hide show
  1. package/README.md +17 -10
  2. package/README.zh.md +17 -10
  3. package/assets/citeciter-mascot.png +0 -0
  4. package/assets/locale/en.json +6 -0
  5. package/assets/locale/zh.json +6 -0
  6. package/lib/client.js +6111 -3495
  7. package/lib/index.js +1769 -314
  8. package/lib/{typert-common-g1lnIG8u.js → typert-common-BtQUArWP.js} +1 -1
  9. package/lib/typert.host.js +2 -2
  10. package/lib/typert.remote-client.js +1 -1
  11. package/lib/types/actions.d.ts +15 -0
  12. package/lib/types/blackboard-tool.d.ts +6 -0
  13. package/lib/types/board-animation.d.ts +278 -0
  14. package/lib/types/board-capture-protocol.d.ts +61 -1
  15. package/lib/types/board-capture.d.ts +2 -0
  16. package/lib/types/board.d.ts +62 -3
  17. package/lib/types/client/action-controller.d.ts +14 -1
  18. package/lib/types/client/action-executor.d.ts +3 -1
  19. package/lib/types/client/board-citation.d.ts +2 -0
  20. package/lib/types/client/board-timeline.d.ts +33 -0
  21. package/lib/types/client/components/BoardCaptureSurface.d.ts +3 -1
  22. package/lib/types/client/components/BoardView.d.ts +5 -1
  23. package/lib/types/client/components/CiteCiterSettings.d.ts +13 -2
  24. package/lib/types/client/components/CitePanel.d.ts +14 -1
  25. package/lib/types/client/components/CiterTab.d.ts +15 -0
  26. package/lib/types/client/components/ContextRow.d.ts +7 -0
  27. package/lib/types/client/components/PermissionControl.d.ts +1 -1
  28. package/lib/types/client/components/SelectionToolbar.d.ts +2 -0
  29. package/lib/types/client/components/ToolMessage.d.ts +10 -5
  30. package/lib/types/client/components/TopicActions.d.ts +4 -1
  31. package/lib/types/client/components/TopicHeader.d.ts +4 -3
  32. package/lib/types/client/components/TopicModelControls.d.ts +1 -1
  33. package/lib/types/client/components/TopicUsage.d.ts +5 -0
  34. package/lib/types/client/components/UserMessageBody.d.ts +7 -2
  35. package/lib/types/client/conversation-dom.d.ts +2 -0
  36. package/lib/types/client/copy.d.ts +16 -4
  37. package/lib/types/client/draft-references.d.ts +3 -1
  38. package/lib/types/client/entries.d.ts +3 -0
  39. package/lib/types/client/i18n.d.ts +23 -0
  40. package/lib/types/client/locales/board.d.ts +51 -0
  41. package/lib/types/client/locales/common.d.ts +7 -0
  42. package/lib/types/client/locales/index.d.ts +564 -0
  43. package/lib/types/client/locales/panel.d.ts +215 -0
  44. package/lib/types/client/locales/settings.d.ts +179 -0
  45. package/lib/types/client/locales/transcript.d.ts +127 -0
  46. package/lib/types/client/main-quote.d.ts +16 -0
  47. package/lib/types/client/native-file-link.d.ts +10 -0
  48. package/lib/types/client/request-guard.d.ts +2 -1
  49. package/lib/types/client/rich-content.d.ts +7 -0
  50. package/lib/types/client/selection-references.d.ts +1 -1
  51. package/lib/types/client/tool-cards.d.ts +84 -0
  52. package/lib/types/client/tool-presentation.d.ts +1 -4
  53. package/lib/types/client/topic-presentation.d.ts +8 -3
  54. package/lib/types/client/types.d.ts +12 -0
  55. package/lib/types/client/view-actions.d.ts +1 -1
  56. package/lib/types/evidence-text.d.ts +8 -0
  57. package/lib/types/host-agent-modules.d.ts +4 -1
  58. package/lib/types/line-diff.d.ts +12 -0
  59. package/lib/types/message-projection.d.ts +25 -7
  60. package/lib/types/model-admission.d.ts +1 -1
  61. package/lib/types/observer.d.ts +0 -30
  62. package/lib/types/owned-session-cleanup.d.ts +7 -1
  63. package/lib/types/source-read-tool.d.ts +3 -3
  64. package/lib/types/source-session.d.ts +11 -2
  65. package/lib/types/source-transcript.d.ts +58 -0
  66. package/lib/types/tool-events.d.ts +2 -0
  67. package/lib/types/topic-context.d.ts +80 -0
  68. package/lib/types/topic-log.d.ts +5 -1
  69. package/lib/types/topic-prompts.d.ts +4 -0
  70. package/lib/types/topic-runtime.d.ts +5 -1
  71. package/lib/types/topic.d.ts +273 -15
  72. package/lib/types/typert-common.d.ts +148 -5
  73. package/lib/types/typert.host.d.ts +383 -14
  74. package/lib/types/workspace-changes.d.ts +90 -0
  75. package/lib/{update-B_0nN1_f.js → update-D-jnLTb5.js} +681 -5
  76. package/package.json +70 -65
  77. package/lib/types/client/board-capture-target.d.ts +0 -8
  78. package/lib/types/client/components/ChoicePopover.d.ts +0 -8
@@ -4,13 +4,24 @@ import type { SettingsDocumentSnapshot } from '../settings-document.ts';
4
4
  import type { CompanionSnapshot } from '../companion-controller.ts';
5
5
  import type { CompanionActions, UpdateActions, SettingsDocumentActions } from '../view-actions.ts';
6
6
  import type { SettingsSectionOwnerProps } from '@deepseek-ai/dsh-client-ui-settings/client';
7
- export interface CiteCiterSettingsProps extends SettingsSectionOwnerProps {
7
+ import type { CiteOverlaySnapshot } from '../types.ts';
8
+ /** What the settings page needs; the host's settings and plugin pages each add their own owner props. */
9
+ export interface CiteCiterSettingsProps extends Partial<SettingsSectionOwnerProps> {
8
10
  readonly useCompanion: SnapshotSelectorHook<CompanionSnapshot>;
9
11
  readonly useDocument: SnapshotSelectorHook<SettingsDocumentSnapshot>;
10
12
  readonly useUpdate: SnapshotSelectorHook<UpdateNoticeSnapshot>;
11
13
  readonly companion: CompanionActions;
12
14
  readonly settingsDocument: SettingsDocumentActions;
13
15
  readonly updateController: UpdateActions;
16
+ /** Where the workspace lives; the width setting applies only to Citer's own overlay. */
17
+ readonly useOverlay?: SnapshotSelectorHook<CiteOverlaySnapshot> | undefined;
14
18
  }
19
+ /**
20
+ * Citer's entry on DSH's plugin page: a one-line summary in the list, the full settings on its page.
21
+ * @param view - `summary` for the bundle row, `page` for the bundle's own page.
22
+ */
23
+ export declare function CiterPluginConfig(props: CiteCiterSettingsProps & {
24
+ readonly view: 'summary' | 'page';
25
+ }): import("react").JSX.Element;
15
26
  /** Native DSH settings page for Citer preferences. */
16
- export declare function CiteCiterSettings({ useCompanion, useDocument, useUpdate, companion, settingsDocument, updateController }: CiteCiterSettingsProps): import("react").JSX.Element;
27
+ export declare function CiteCiterSettings({ useCompanion, useDocument, useUpdate, useOverlay, companion, settingsDocument, updateController }: CiteCiterSettingsProps): import("react").JSX.Element;
@@ -4,6 +4,8 @@ import type { InteractionSnapshot } from '../host-ui-adapter.ts';
4
4
  import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-store';
5
5
  import type { UseSessions } from '@deepseek-ai/dsh-client-ui-session/client';
6
6
  import type { CiteOverlaySnapshot } from '../types.ts';
7
+ import type { SelectionSurfaces } from '../wheel-gesture.ts';
8
+ import type { FileOpener } from '../native-file-link.ts';
7
9
  import type { CompanionSnapshot } from '../companion-controller.ts';
8
10
  import type { CompanionActions, OverlayActions } from '../view-actions.ts';
9
11
  export interface CitePanelProps {
@@ -21,10 +23,21 @@ export interface CitePanelProps {
21
23
  readonly reportParseError: (messageId: string) => void;
22
24
  /** Host standard prop: the session list, used to show source titles on reference chips. */
23
25
  readonly useSessions?: UseSessions;
26
+ /** Makes text selected in the transcript a Citer action source that continues this Topic. */
27
+ readonly registerSurface?: SelectionSurfaces['register'];
28
+ /** Opens a source-workspace file in DSH's right sidebar. */
29
+ readonly openFile?: FileOpener;
30
+ /**
31
+ * `tab` renders inside a DSH right-sidebar tab, which owns placement, size, splitting,
32
+ * floating and closing; `overlay` is Citer's own dock for hosts without that sidebar.
33
+ */
34
+ readonly host?: 'overlay' | 'tab';
35
+ /** In a sidebar tab: whether the tab is on screen. */
36
+ readonly tabVisible?: boolean;
24
37
  }
25
38
  /**
26
39
  * Render the independent Topic workspace on the right edge of the shell.
27
40
  * @param props - shared panel bus, Topic controller, and host callbacks.
28
41
  * @returns the responsive Topic dock and its dialogs, or null while closed.
29
42
  */
30
- export declare function CitePanel({ nativeComposer, drafts, useDrafts, useCompanion, useOverlay, useInteractions, useSubmission, useSessions, bus, companion, closePanel, openReader, reportParseError }: CitePanelProps): import("react").JSX.Element | null;
43
+ export declare function CitePanel({ nativeComposer, drafts, useDrafts, useCompanion, useOverlay, useInteractions, useSubmission, useSessions, bus, companion, closePanel, openReader, reportParseError, registerSurface, openFile, host, tabVisible }: CitePanelProps): import("react").JSX.Element | null;
@@ -0,0 +1,15 @@
1
+ import type { UseSidebarRightTabInfo } from '@deepseek-ai/dsh-client-ui-sidebar-right/client';
2
+ import { type CitePanelProps } from './CitePanel.tsx';
3
+ /**
4
+ * Citer's workspace as a DSH right-sidebar tab. The sidebar owns placement, splitting, floating,
5
+ * fullscreen and closing; while the tab is on screen Citer counts as open, so the desktop pet
6
+ * steps aside and finished answers are not marked unread.
7
+ */
8
+ export declare function CiterTab(props: CitePanelProps & {
9
+ readonly useTabInfo: UseSidebarRightTabInfo;
10
+ }): import("react").JSX.Element;
11
+ /** The mascot as the guide card and tab icon, at the size DSH draws icons. */
12
+ export declare function CiterIcon({ size, className }: {
13
+ readonly size?: number | undefined;
14
+ readonly className?: string | undefined;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { TopicMessage } from '../../topic.ts';
2
+ /** One logged context row; only known Host presentation copy is localized, never its model-visible body. */
3
+ export declare function ContextRow({ message }: {
4
+ readonly message: Extract<TopicMessage, {
5
+ role: 'context';
6
+ }>;
7
+ }): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import type { CiteCiterSettings } from '../../topic.ts';
2
2
  export type PermissionMode = NonNullable<CiteCiterSettings['defaultPermission']>;
3
- /** Explicit permission selection; receives the Host's effective value. */
3
+ /** Explicit permission selection in the host's menu; receives the Host's effective value. */
4
4
  export declare function PermissionControl({ value, onChange }: {
5
5
  readonly value: PermissionMode;
6
6
  readonly onChange: (mode: PermissionMode) => void;
@@ -3,10 +3,12 @@ import { type CiteAction } from '../../actions.ts';
3
3
  import type { ActionSource } from '../action-controller.ts';
4
4
  import type { CompanionSnapshot } from '../companion-controller.ts';
5
5
  import type { SelectionToolbarSnapshot } from '../selection-toolbar.ts';
6
+ /** The explicit way to start a separate Topic: the user's own question about the selection. */
6
7
  /** Toolbar callbacks; the controllers stay with the Client plugin. */
7
8
  export interface SelectionToolbarActions {
8
9
  readonly dismiss: () => void;
9
10
  readonly run: (source: ActionSource, action: CiteAction, x: number, y: number, newTopic?: boolean) => void;
11
+ readonly quote: (source: ActionSource) => Promise<void>;
10
12
  }
11
13
  /**
12
14
  * Actions for the current selection: the first configured actions inline, the rest and
@@ -1,10 +1,15 @@
1
1
  import type { TopicMessage } from '../../topic.ts';
2
2
  import type { NativeComposer } from '../native-composer.ts';
3
- /** Show returned files immediately; the readable title and summary expand to the exact arguments and result. */
4
- export declare function ToolRow({ message, sessionId, load }: {
5
- readonly message: Extract<TopicMessage, {
6
- role: 'tool';
7
- }>;
3
+ type ToolMessage = Extract<TopicMessage, {
4
+ role: 'tool';
5
+ }>;
6
+ /** Keep a tool tree inside the parent's disclosure; absent metadata uses the original lossless inspector. */
7
+ export declare function ToolRow({ message, childCalls, sessionId, load, openFile }: {
8
+ readonly message: ToolMessage;
9
+ readonly childCalls: readonly ToolMessage[];
8
10
  readonly sessionId: string;
9
11
  readonly load: NativeComposer['attachment'];
12
+ /** Open a source-workspace file in DSH's right sidebar; absent when the host has none. */
13
+ readonly openFile?: ((path: string, line?: number) => boolean) | undefined;
10
14
  }): import("react").JSX.Element;
15
+ export {};
@@ -5,13 +5,16 @@ export interface TopicMenu {
5
5
  } | undefined;
6
6
  readonly busy: boolean;
7
7
  readonly learningRoute: boolean;
8
+ /** Whether ordinary context (runtime, time, skills, system prompt) is listed in the transcript. */
9
+ readonly allContext: boolean;
10
+ readonly onAllContext: (shown: boolean) => void;
8
11
  readonly onRename: () => void;
9
12
  readonly onLearningRoute: (enabled: boolean) => void;
10
13
  readonly onReader: () => void;
11
14
  readonly onArchive: (archived: boolean) => void;
12
15
  readonly onDelete: () => void;
13
16
  }
14
- /** The "⋯" menu: rename, learning route, document reader, archive and permanent deletion. */
17
+ /** The "⋯" menu in the host's menu: rename, learning route, document reader, context visibility, archive and permanent deletion. */
15
18
  export declare function TopicActions({ menu }: {
16
19
  readonly menu: TopicMenu;
17
20
  }): import("react").JSX.Element;
@@ -1,14 +1,15 @@
1
1
  import type { PointerEventHandler, ReactNode } from 'react';
2
2
  /**
3
3
  * Layout-only header. The Citer mark identifies the panel; dragging the header floats it.
4
- * Navigation, title and closing are supplied by their own controllers.
4
+ * Navigation, title and closing are supplied by their own controllers. In DSH's right sidebar
5
+ * the tab chip owns closing and moving, so `onClose` and `onDrag` are omitted there.
5
6
  * @param status - shown only while something is happening or needs attention.
6
7
  */
7
8
  export declare function TopicHeader({ compact, onBack, onClose, onDrag, title, status, children }: {
8
9
  readonly compact: boolean;
9
10
  readonly onBack: () => void;
10
- readonly onClose: () => void;
11
- readonly onDrag: PointerEventHandler<HTMLElement>;
11
+ readonly onClose?: (() => void) | undefined;
12
+ readonly onDrag?: PointerEventHandler<HTMLElement> | undefined;
12
13
  readonly title: ReactNode;
13
14
  readonly status: string | null;
14
15
  readonly children: ReactNode;
@@ -1,5 +1,5 @@
1
1
  import type { ProviderOption, TopicModelConfig } from '../../topic.ts';
2
- /** Model and reasoning hierarchy. Route changes are committed by the injected controller. */
2
+ /** Model and reasoning choices in the host's menu. Route changes are committed by the injected controller. */
3
3
  export declare function TopicModelControls({ providers, route, saving, onModel, onReasoning }: {
4
4
  readonly providers: readonly ProviderOption[];
5
5
  readonly route: TopicModelConfig;
@@ -0,0 +1,5 @@
1
+ import type { TopicUsage as TopicUsageValue } from '../../topic.ts';
2
+ /** Present Topic-owned token totals without fetching state or mutating the panel. */
3
+ export declare function TopicUsage({ usage }: {
4
+ readonly usage?: TopicUsageValue;
5
+ }): import("react").JSX.Element | null;
@@ -1,7 +1,12 @@
1
1
  import type { QuestionReply } from '../../question-reply.ts';
2
- /** Read-only presentation of a committed user message. Attachments remain inspectable and formulas are rendered without mutating the durable prompt. */
3
- export declare function UserMessageBody({ text, questionReply, sourceTitle }: {
2
+ /**
3
+ * Read-only presentation of a committed user message. Attachments remain inspectable as reference
4
+ * chips and formulas are rendered without mutating the durable prompt. A learning-stage prompt
5
+ * collapses to its stage line and the user's own question.
6
+ */
7
+ export declare function UserMessageBody({ text, questionReply, sourceTitle, stageClassName }: {
4
8
  readonly text: string;
5
9
  readonly questionReply?: QuestionReply | undefined;
6
10
  readonly sourceTitle?: ((sessionId: string) => string | undefined) | undefined;
11
+ readonly stageClassName?: string | undefined;
7
12
  }): import("react").JSX.Element;
@@ -10,6 +10,8 @@ export interface DshAssistantAnchor {
10
10
  readonly element: HTMLElement;
11
11
  readonly anchorKey: string;
12
12
  }
13
+ /** A committed ordinary user message in the native DSH chat. */
14
+ export declare function dshUserAnchorForTarget(target: EventTarget | null): DshAssistantAnchor | null;
13
15
  /** Best-effort Read Frog selection classification. */
14
16
  export type ReadFrogSelection = {
15
17
  readonly kind: 'none';
@@ -1,6 +1,18 @@
1
- /** Chinese presentation copy owned by CiteCiter, including shared primitive chrome. */
2
- import type { JsonTreeLabels, MarkdownLabels } from '@deepseek-ai/dsh-client-ui-primitives';
3
- /** Localized labels supplied to the Cordis-free Markdown renderer. */
1
+ /** Presentation copy for shared UI primitives. */
2
+ import type { CodeToolbarLabels, DiffBlockLabels, JsonTreeLabels, MarkdownLabels, ReadBlockLabels, SearchBlockLabels, TerminalBlockLabels } from '@deepseek-ai/dsh-client-ui-primitives';
3
+ /** Live getters keep consumers outside the transcript slice localized without changing their API. */
4
4
  export declare const markdownLabels: MarkdownLabels;
5
5
  /** Localized labels supplied to the Cordis-free JSON inspector. */
6
- export declare const jsonTreeLabels: JsonTreeLabels;
6
+ export declare function jsonTreeLabels(): JsonTreeLabels;
7
+ /** Shared toolbar copy for read and diff code surfaces. */
8
+ export declare function codeToolbarLabels(): CodeToolbarLabels;
9
+ /** DSH-style labels for numbered file reads. */
10
+ export declare function readBlockLabels(): ReadBlockLabels;
11
+ /** DSH-style labels for applied file differences. */
12
+ export declare function diffBlockLabels(): DiffBlockLabels;
13
+ /** Terminal status and output controls. */
14
+ export declare function terminalBlockLabels(): TerminalBlockLabels & {
15
+ commandLine: (line: number) => string;
16
+ };
17
+ /** Result-count labels for grouped grep matches and glob paths. */
18
+ export declare function searchBlockLabels(): SearchBlockLabels;
@@ -6,7 +6,9 @@ export type DraftReference = DraftContent['references'][number];
6
6
  export declare function mergeDraftReferences(current: readonly DraftReference[], incoming: readonly DraftReference[]): readonly DraftReference[];
7
7
  /** Build initial references without submitting them. Stable Topic-scoped IDs preserve menu focus during live snapshot refreshes. */
8
8
  export declare function topicDraftReferences(topic: TopicSummary, documentTitle?: string): readonly DraftReference[];
9
- /** Display a document filename while retaining the full title/path in its serialized content. Legacy ID-only references keep their generic label. */
9
+ /** Translate only the visible chip kind; reference.label remains the serialized Chinese marker. */
10
+ export declare function draftReferenceLabel(reference: DraftReference): string;
11
+ /** Display a document filename while retaining the full title/path in its serialized content. */
10
12
  export declare function draftReferenceName(reference: DraftReference): string;
11
13
  /**
12
14
  * Chip text that shows what a reference contains instead of its kind. Serialized labels
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import type { SessionId } from '@deepseek-ai/dsh-session/types';
8
8
  import type { ChatSnapshot } from '@deepseek-ai/dsh-client-ui-chat/client';
9
+ import type { ActionSource } from './action-controller.ts';
9
10
  import type { CiteSelection } from './types.ts';
10
11
  /** Live browser facts an entry needs to resolve one selection. */
11
12
  export interface CiteCiterEntryContext {
@@ -51,6 +52,8 @@ export declare function createCiteCiterEntryRegistry(): CiteCiterEntryRegistry;
51
52
  * @returns the entry contribution; register it on the shared registry.
52
53
  */
53
54
  export declare function createAssistantEntry(): CiteCiterEntry;
55
+ /** Capture a committed user-message excerpt without inventing a host-verified citation claim. */
56
+ export declare function readUserMessageQuote(event: MouseEvent, context: CiteCiterEntryContext): ActionSource | null;
54
57
  /**
55
58
  * Built-in tool evidence entry: claims a whole-card tool result from its
56
59
  * `call:<callId>` row and the enclosing `tool-call` chat flow. Terminal and
@@ -0,0 +1,23 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { type CiterKey } from './locales/index.ts';
3
+ export type { CiterKey } from './locales/index.ts';
4
+ /** DSH locale namespace that holds Citer's dictionaries. */
5
+ export declare const CITER_LOCALE_NAMESPACE = "citeciter";
6
+ /** Fill `{name}` placeholders, as DSH's own dictionaries do. */
7
+ export declare function formatText(template: string, params?: Record<string, unknown>): string;
8
+ /**
9
+ * Translate one Citer key in the active DSH language.
10
+ * @param key - dictionary key.
11
+ * @param params - `{name}` placeholder values.
12
+ */
13
+ export declare function t(key: CiterKey, params?: Record<string, unknown>): string;
14
+ /** Whether DSH currently shows Chinese; picks localized defaults such as preset action prompts. */
15
+ export declare function isChinese(): boolean;
16
+ /** Re-render on DSH language changes; returns a revision usable as a memo dependency. */
17
+ export declare function useLocale(): number;
18
+ /**
19
+ * Register Citer's dictionaries and follow the active language for the lifetime of `ctx`.
20
+ * Without DSH's locale service, text stays Chinese.
21
+ * @param ctx - Client root context.
22
+ */
23
+ export declare function installLocale(ctx: Context): void;
@@ -0,0 +1,51 @@
1
+ /** The blackboard, its animation player, learning cards and the learning route. */
2
+ export declare const zh: {
3
+ 'board.title': string;
4
+ 'board.workspace.label': string;
5
+ 'board.workspace.empty': string;
6
+ 'board.svg.alt': string;
7
+ 'board.html.title': string;
8
+ 'board.image.invalid': string;
9
+ 'board.image.alt': string;
10
+ 'board.label': string;
11
+ 'board.subtitle': string;
12
+ 'board.waiting': string;
13
+ 'board.revision': string;
14
+ 'board.view.canvas': string;
15
+ 'board.view.notes': string;
16
+ 'board.warning.invalid': string;
17
+ 'board.empty': string;
18
+ 'board.quote.label': string;
19
+ 'board.quote.action': string;
20
+ 'board.animation.label': string;
21
+ 'board.animation.pause': string;
22
+ 'board.animation.play': string;
23
+ 'board.animation.replay': string;
24
+ 'board.animation.progress': string;
25
+ 'board.animation.step': string;
26
+ 'board.cards.label': string;
27
+ 'board.cards.eyebrow': string;
28
+ 'board.cards.question': string;
29
+ 'board.cards.example': string;
30
+ 'board.cards.answer': string;
31
+ 'board.cards.reveal': string;
32
+ 'board.cards.kicker': string;
33
+ 'board.cards.title': string;
34
+ 'board.cards.recall': string;
35
+ 'board.cards.recallOn': string;
36
+ 'board.cards.recallOff': string;
37
+ 'board.cards.invalid': string;
38
+ 'board.cards.empty.title': string;
39
+ 'board.cards.empty.description': string;
40
+ 'board.cards.prepare': string;
41
+ 'board.cards.export': string;
42
+ 'board.cards.revise': string;
43
+ 'board.cards.provenance': string;
44
+ 'board.cards.saved': string;
45
+ 'board.cards.markdown.source': string;
46
+ 'board.cards.markdown.example': string;
47
+ 'board.cards.markdown.selfTest': string;
48
+ 'board.route.progress': string;
49
+ 'board.route.completed': string;
50
+ };
51
+ export declare const en: Record<keyof typeof zh, string>;
@@ -0,0 +1,7 @@
1
+ /** Shared words used across Citer's interface. */
2
+ export declare const zh: {
3
+ 'common.name': string;
4
+ 'common.cancel': string;
5
+ 'common.close': string;
6
+ };
7
+ export declare const en: Record<keyof typeof zh, string>;