@chengxianglibra/dsh-data-analysis 0.1.2 → 0.2.1
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.en.md +135 -0
- package/README.md +105 -98
- package/cordis.patch.yml +1 -1
- package/lib/bin/environment.js +8 -6
- package/lib/client/credentials/changes.js +74 -0
- package/lib/client/credentials/create-datasource.js +126 -22
- package/lib/client/credentials/credential-draft.js +42 -0
- package/lib/client/credentials/defaults.js +11 -0
- package/lib/client/credentials/descriptions.js +46 -0
- package/lib/client/credentials/install.js +209 -81
- package/lib/client/credentials/model.js +323 -51
- package/lib/client/credentials/report-publishing.js +96 -0
- package/lib/client/credentials/styles.js +13 -9
- package/lib/client/i18n/context.js +22 -0
- package/lib/client/i18n/copy.js +60 -0
- package/lib/client/i18n/credentials.js +475 -0
- package/lib/client/i18n/host.js +28 -0
- package/lib/client/i18n/navigation.js +41 -0
- package/lib/client/i18n/presentation.js +577 -0
- package/lib/client/i18n/python.js +36 -0
- package/lib/client/i18n/semantic.js +441 -0
- package/lib/client/i18n/settings.js +30 -0
- package/lib/client/input-context.js +21 -0
- package/lib/client/python-tool/card.js +35 -0
- package/lib/client/python-tool/execution-error.js +35 -0
- package/lib/client/python-tool/install.js +9 -0
- package/lib/client/python-tool/model.js +101 -0
- package/lib/client/right-tabs/install.js +535 -0
- package/lib/client/right-tabs/live-delivery.js +58 -0
- package/lib/client/right-tabs/navigation.js +47 -0
- package/lib/client/right-tabs/page.js +178 -0
- package/lib/client/right-tabs/styles.js +11 -0
- package/lib/client/rpc.js +5 -0
- package/lib/client/semantic-reference.js +10 -0
- package/lib/client/settings/card.js +90 -0
- package/lib/client/settings/install.js +10 -0
- package/lib/client/workspace-header-action.js +14 -1
- package/lib/client/workspace-shortcuts.js +26 -0
- package/lib/client.js +388 -242
- package/lib/compatibility.js +1 -1
- package/lib/datasource/authoring.js +43 -4
- package/lib/datasource/bridge-programs.js +23 -20
- package/lib/datasource/bridge.js +46 -3
- package/lib/datasource/changes-contract.js +41 -0
- package/lib/datasource/changes.js +49 -0
- package/lib/datasource/configure.js +39 -0
- package/lib/datasource/defaults.js +25 -0
- package/lib/datasource/index.js +2 -1
- package/lib/datasource/python-options.js +15 -0
- package/lib/datasource/python.js +119 -25
- package/lib/datasource/rpc.js +75 -13
- package/lib/datasource/service.js +286 -11
- package/lib/datasource/test.js +3 -2
- package/lib/disclosure/activation.js +19 -7
- package/lib/disclosure/execution-guidance.js +49 -0
- package/lib/disclosure/help.js +4 -1
- package/lib/environment/runtime.js +35 -34
- package/lib/environment/workspace.js +18 -1
- package/lib/lifecycle.js +33 -0
- package/lib/plugin-agents.js +154 -0
- package/lib/plugin.js +98 -172
- package/lib/presentation/asset.js +34 -0
- package/lib/presentation/assets/portable.js +14 -14
- package/lib/presentation/assets/static.js +344 -73
- package/lib/presentation/build/index.js +3 -2
- package/lib/presentation/commit.js +19 -12
- package/lib/presentation/contracts/asset-path.js +9 -0
- package/lib/presentation/contracts/catalog.js +62 -0
- package/lib/presentation/contracts/charts.js +0 -23
- package/lib/presentation/contracts/index.js +17 -5
- package/lib/presentation/contracts/types.js +1 -1
- package/lib/presentation/delivery.js +45 -30
- package/lib/presentation/export-html.js +214 -0
- package/lib/presentation/files.js +4 -5
- package/lib/presentation/projection/index.js +2 -1
- package/lib/presentation/projection/program.js +2 -9
- package/lib/presentation/projection/sql-code.js +13 -13
- package/lib/presentation/reports.js +114 -17
- package/lib/presentation/rpc.js +96 -58
- package/lib/presentation/tool.js +6 -10
- package/lib/report-publishing/adapters.js +111 -0
- package/lib/report-publishing/config.js +69 -0
- package/lib/report-publishing/service.js +180 -0
- package/lib/rpc.js +49 -0
- package/lib/semantic-browser/contracts.js +17 -0
- package/lib/semantic-browser/program.js +10 -0
- package/lib/semantic-browser/service.js +40 -6
- package/lib/semantic-reference/bridge.js +10 -1
- package/lib/semantic-reference/contracts.js +20 -6
- package/lib/semantic-reference/environment.js +56 -0
- package/lib/semantic-reference/labels.js +16 -0
- package/lib/semantic-reference/rpc.js +39 -18
- package/lib/semantic-reference/search.js +5 -4
- package/lib/semantic-reference/usage.js +12 -3
- package/lib/settings.js +21 -0
- package/lib/tool-lifecycle.js +22 -0
- package/lib/types/client/credentials/changes.d.ts +9 -0
- package/lib/types/client/credentials/create-datasource.d.ts +3 -1
- package/lib/types/client/credentials/credential-draft.d.ts +14 -0
- package/lib/types/client/credentials/defaults.d.ts +2 -0
- package/lib/types/client/credentials/descriptions.d.ts +1 -0
- package/lib/types/client/credentials/install.d.ts +19 -1
- package/lib/types/client/credentials/model.d.ts +31 -11
- package/lib/types/client/credentials/report-publishing.d.ts +5 -0
- package/lib/types/client/credentials/styles.d.ts +1 -1
- package/lib/types/client/i18n/context.d.ts +17 -0
- package/lib/types/client/i18n/copy.d.ts +821 -0
- package/lib/types/client/i18n/credentials.d.ts +475 -0
- package/lib/types/client/i18n/host.d.ts +17 -0
- package/lib/types/client/i18n/navigation.d.ts +41 -0
- package/lib/types/client/i18n/presentation.d.ts +577 -0
- package/lib/types/client/i18n/python.d.ts +19 -0
- package/lib/types/client/i18n/semantic.d.ts +441 -0
- package/lib/types/client/i18n/settings.d.ts +16 -0
- package/lib/types/client/input-context.d.ts +19 -0
- package/lib/types/client/presentation/ask-dsh.d.ts +4 -8
- package/lib/types/client/presentation/catalog-model.d.ts +24 -0
- package/lib/types/client/presentation/catalog.d.ts +20 -0
- package/lib/types/client/presentation/chart-tooltip.d.ts +2 -2
- package/lib/types/client/presentation/context-reference.d.ts +12 -0
- package/lib/types/client/presentation/copy-context.d.ts +2 -2
- package/lib/types/client/presentation/delivery-model.d.ts +27 -6
- package/lib/types/client/presentation/delivery.d.ts +8 -7
- package/lib/types/client/presentation/download.d.ts +2 -0
- package/lib/types/client/presentation/export-menu.d.ts +26 -0
- package/lib/types/client/presentation/export-view.d.ts +63 -0
- package/lib/types/client/presentation/host-entry.d.ts +8 -2
- package/lib/types/client/presentation/icons.d.ts +1 -1
- package/lib/types/client/presentation/model.d.ts +14 -15
- package/lib/types/client/presentation/reader.d.ts +15 -2
- package/lib/types/client/presentation/reference-source.d.ts +9 -0
- package/lib/types/client/presentation/source-code-model.d.ts +2 -1
- package/lib/types/client/presentation/source-code.d.ts +0 -5
- package/lib/types/client/presentation/source-dialog.d.ts +1 -2
- package/lib/types/client/presentation/sources.d.ts +5 -5
- package/lib/types/client/presentation/styles.d.ts +1 -1
- package/lib/types/client/presentation/table.d.ts +5 -1
- package/lib/types/client/python-tool/card.d.ts +2 -0
- package/lib/types/client/python-tool/execution-error.d.ts +3 -0
- package/lib/types/client/python-tool/install.d.ts +2 -0
- package/lib/types/client/python-tool/model.d.ts +20 -0
- package/lib/types/client/right-tabs/install.d.ts +18 -0
- package/lib/types/client/right-tabs/live-delivery.d.ts +8 -0
- package/lib/types/client/right-tabs/navigation.d.ts +17 -0
- package/lib/types/client/right-tabs/page.d.ts +36 -0
- package/lib/types/client/right-tabs/styles.d.ts +2 -0
- package/lib/types/client/rpc.d.ts +3 -0
- package/lib/types/client/semantic-reference.d.ts +4 -0
- package/lib/types/client/settings/card.d.ts +9 -0
- package/lib/types/client/settings/install.d.ts +2 -0
- package/lib/types/client/workspace-header-action.d.ts +1 -1
- package/lib/types/client/workspace-shortcuts.d.ts +15 -0
- package/lib/types/client.d.ts +5 -2
- package/lib/types/compatibility.d.ts +1 -1
- package/lib/types/datasource/authoring.d.ts +10 -0
- package/lib/types/datasource/bridge.d.ts +23 -2
- package/lib/types/datasource/changes-contract.d.ts +18 -0
- package/lib/types/datasource/changes.d.ts +15 -0
- package/lib/types/datasource/configure.d.ts +7 -0
- package/lib/types/datasource/defaults.d.ts +7 -0
- package/lib/types/datasource/index.d.ts +6 -1
- package/lib/types/datasource/python-options.d.ts +8 -0
- package/lib/types/datasource/python.d.ts +17 -2
- package/lib/types/datasource/rpc.d.ts +2 -1
- package/lib/types/datasource/service.d.ts +48 -5
- package/lib/types/datasource/test.d.ts +1 -1
- package/lib/types/disclosure/activation.d.ts +2 -1
- package/lib/types/disclosure/execution-guidance.d.ts +6 -0
- package/lib/types/disclosure/help.d.ts +1 -1
- package/lib/types/environment/types.d.ts +2 -1
- package/lib/types/environment/workspace.d.ts +1 -0
- package/lib/types/lifecycle.d.ts +8 -0
- package/lib/types/plugin-agents.d.ts +29 -0
- package/lib/types/plugin.d.ts +12 -28
- package/lib/types/presentation/asset.d.ts +6 -0
- package/lib/types/presentation/build/index.d.ts +7 -2
- package/lib/types/presentation/commit.d.ts +1 -1
- package/lib/types/presentation/contracts/asset-path.d.ts +2 -0
- package/lib/types/presentation/contracts/catalog.d.ts +27 -0
- package/lib/types/presentation/contracts/charts.d.ts +0 -2
- package/lib/types/presentation/contracts/types.d.ts +7 -4
- package/lib/types/presentation/delivery.d.ts +1 -1
- package/lib/types/presentation/export-html.d.ts +13 -0
- package/lib/types/presentation/reports.d.ts +6 -1
- package/lib/types/presentation/rpc.d.ts +3 -2
- package/lib/types/presentation/tool.d.ts +2 -2
- package/lib/types/report-publishing/adapters.d.ts +6 -0
- package/lib/types/report-publishing/config.d.ts +22 -0
- package/lib/types/report-publishing/service.d.ts +68 -0
- package/lib/types/rpc.d.ts +3 -0
- package/lib/types/semantic-browser/contracts.d.ts +7 -0
- package/lib/types/semantic-browser/service.d.ts +7 -1
- package/lib/types/semantic-reference/bridge.d.ts +1 -0
- package/lib/types/semantic-reference/contracts.d.ts +5 -2
- package/lib/types/semantic-reference/environment.d.ts +22 -0
- package/lib/types/semantic-reference/labels.d.ts +16 -0
- package/lib/types/semantic-reference/rpc.d.ts +1 -1
- package/lib/types/semantic-reference/search.d.ts +1 -1
- package/lib/types/settings.d.ts +14 -0
- package/lib/types/tool-lifecycle.d.ts +4 -0
- package/lib/types/workspace-identity.d.ts +6 -0
- package/lib/workspace-identity.js +9 -0
- package/package.json +93 -61
- package/python/presentation-kit/dist/dsh_data_analysis_presentation_kit-1.1.0-py3-none-any.whl +0 -0
- package/skills/dsh-data-analysis-files/SKILL.md +44 -0
- package/skills/dsh-data-analysis-files/references/delivery.md +15 -0
- package/skills/dsh-data-analysis-files/references/examples.md +93 -0
- package/skills/dsh-data-analysis-presentation/SKILL.md +15 -15
- package/skills/dsh-data-analysis-presentation/references/examples/artifact.draft.json +13 -4
- package/skills/dsh-data-analysis-presentation/references/examples/charts.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/comparison.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/computed-sources.draft.json +12 -5
- package/skills/dsh-data-analysis-presentation/references/examples/computed.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/interaction.draft.json +3 -2
- package/skills/dsh-data-analysis-presentation/references/examples/source-only.draft.json +12 -4
- package/skills/dsh-data-analysis-presentation/references/examples.md +3 -1
- package/skills/dsh-data-analysis-presentation/references/export-html.md +7 -0
- package/skills/dsh-data-analysis-presentation/references/interaction.md +1 -1
- package/skills/dsh-data-analysis-presentation/references/narrative.md +1 -1
- package/skills/dsh-data-analysis-presentation/references/publishing.md +3 -0
- package/skills/dsh-data-analysis-presentation/references/schema.md +29 -2
- package/lib/types/client/presentation/install.d.ts +0 -15
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { savePresentationHtml } from './download.ts';
|
|
2
|
+
import { type ReportHistory } from '../../presentation/contracts/catalog.ts';
|
|
1
3
|
import { type PresentationEdits } from '../../presentation/contracts/editing.ts';
|
|
2
4
|
import { type PresentationDocument, type PresentationReceipt } from '../../presentation/contracts/index.ts';
|
|
3
5
|
import { type PresentationDelivery } from '../../presentation/receipt.ts';
|
|
@@ -5,8 +7,22 @@ export interface PresentationRpc {
|
|
|
5
7
|
call(channel: string, endpoint: string, payload: unknown, signal: AbortSignal): Promise<unknown>;
|
|
6
8
|
}
|
|
7
9
|
export type PresentationAsset = 'presentation.json' | 'index.html';
|
|
10
|
+
export interface WorkspaceReportTarget {
|
|
11
|
+
workspaceId: string;
|
|
12
|
+
reportId: string;
|
|
13
|
+
}
|
|
8
14
|
export interface PresentationDeliveryState {
|
|
9
|
-
readonly
|
|
15
|
+
readonly publishingConfigId?: string;
|
|
16
|
+
readonly publishingName?: string;
|
|
17
|
+
readonly publishingUnavailable?: boolean;
|
|
18
|
+
readonly publishingLoading?: boolean;
|
|
19
|
+
readonly publicationUrl?: string;
|
|
20
|
+
readonly reportTarget?: WorkspaceReportTarget;
|
|
21
|
+
readonly history?: ReportHistory;
|
|
22
|
+
readonly historyOpen?: boolean;
|
|
23
|
+
readonly historyLoading?: boolean;
|
|
24
|
+
readonly historyError?: string;
|
|
25
|
+
readonly historical?: boolean;
|
|
10
26
|
readonly resolvedReceipt?: PresentationReceipt;
|
|
11
27
|
readonly editing?: {
|
|
12
28
|
edits: PresentationEdits;
|
|
@@ -25,20 +41,22 @@ export interface PresentationDeliveryState {
|
|
|
25
41
|
readonly notice?: string;
|
|
26
42
|
}
|
|
27
43
|
export type SavePresentationHtml = (bytes: Uint8Array, filename: string) => void;
|
|
28
|
-
/** Download verified bytes as an attachment; never insert generated HTML in the Host DOM. */
|
|
29
|
-
export declare function savePresentationHtml(bytes: Uint8Array, filename: string): void;
|
|
30
44
|
/** Check the exact receipt-bound bytes before either parsing JSON or downloading HTML. */
|
|
31
45
|
export declare function verifyPresentationAsset(value: unknown, receipt: PresentationReceipt, asset: PresentationAsset): Promise<Uint8Array>;
|
|
32
|
-
export declare
|
|
46
|
+
export declare function errorMessage(error: unknown): string;
|
|
33
47
|
/** Host file actions and editor state; never an Agent or data-source execution path. */
|
|
34
48
|
export declare class PresentationDeliveryModel {
|
|
35
49
|
#private;
|
|
36
50
|
constructor(rpc: PresentationRpc, save?: SavePresentationHtml);
|
|
37
51
|
getSnapshot: () => PresentationDeliveryState;
|
|
38
52
|
subscribe: (listener: () => void) => () => void;
|
|
39
|
-
preview(delivery: PresentationDelivery, sessionId: string, workspaceId: string): Promise<void>;
|
|
40
53
|
show(delivery: PresentationDelivery, sessionId: string, workspaceId: string): Promise<void>;
|
|
54
|
+
showReport(workspaceId: string, reportId: string): Promise<void>;
|
|
55
|
+
/** Open a fixed published Build without first displaying the current pointer. */
|
|
56
|
+
showBuild(workspaceId: string, reportId: string, buildId: string): Promise<void>;
|
|
41
57
|
get dirty(): boolean;
|
|
58
|
+
/** Recheck the current pointer without replacing the displayed document or its view state. */
|
|
59
|
+
beginCurrentEdit(validate?: () => void): Promise<void>;
|
|
42
60
|
beginEdit(): void;
|
|
43
61
|
changeEdits(edits: PresentationEdits): void;
|
|
44
62
|
undoEdit(): void;
|
|
@@ -46,7 +64,10 @@ export declare class PresentationDeliveryModel {
|
|
|
46
64
|
cancelEdit(): void;
|
|
47
65
|
saveEdit(): Promise<void>;
|
|
48
66
|
download(delivery: PresentationDelivery, sessionId: string, workspaceId: string, displayed?: boolean): Promise<void>;
|
|
49
|
-
|
|
67
|
+
publishDisplayed(viewBytes?: Uint8Array): Promise<void>;
|
|
68
|
+
downloadDisplayed(): Promise<void>;
|
|
69
|
+
toggleHistory(refresh?: boolean): Promise<void>;
|
|
70
|
+
selectVersion(buildId?: string): Promise<void>;
|
|
50
71
|
unavailable(message?: string): void;
|
|
51
72
|
close(): void;
|
|
52
73
|
resetConnection(): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ChatConversationViewNode
|
|
1
|
+
import type { ChatConversationViewNode } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
2
|
+
import type { ConversationNodeContext } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
2
3
|
import { type PresentationDelivery } from '../../presentation/receipt.ts';
|
|
3
4
|
export declare const PRESENTATION_TURN_DATA_KEY = "marivo-presentation-delivery";
|
|
4
5
|
export interface PresentationTurnDelivery {
|
|
@@ -12,12 +13,12 @@ interface PresentationTurnState extends PresentationTurnData {
|
|
|
12
13
|
readonly turn: number;
|
|
13
14
|
readonly calls: ReadonlyMap<string, string>;
|
|
14
15
|
}
|
|
15
|
-
declare module '@deepseek-ai/dsh-client-
|
|
16
|
+
declare module '@deepseek-ai/dsh-client-ui-conversation/client' {
|
|
16
17
|
interface ConversationTurnDataMap {
|
|
17
18
|
'marivo-presentation-delivery': PresentationTurnData;
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
declare module '@deepseek-ai/dsh-client-ui-
|
|
21
|
+
declare module '@deepseek-ai/dsh-client-ui-chat/client' {
|
|
21
22
|
interface ChatNodeDataMap {
|
|
22
23
|
'marivo-presentation-delivery': PresentationTurnData;
|
|
23
24
|
}
|
|
@@ -32,7 +33,7 @@ export declare const marivoPresentationDeliveryDefinition: {
|
|
|
32
33
|
target: string;
|
|
33
34
|
match(value: unknown): {
|
|
34
35
|
id: string;
|
|
35
|
-
role: "
|
|
36
|
+
role: "update" | "start";
|
|
36
37
|
} | null;
|
|
37
38
|
start(_context: unknown, match: {
|
|
38
39
|
event: any;
|
|
@@ -60,11 +61,11 @@ export declare const marivoPresentationDeliveryDefinition: {
|
|
|
60
61
|
anchorSeq: number;
|
|
61
62
|
location: {
|
|
62
63
|
readonly kind: "turn";
|
|
63
|
-
readonly turn: import("@deepseek-ai/dsh-client-
|
|
64
|
+
readonly turn: import("@deepseek-ai/dsh-client-ui-conversation/client").TurnLocation;
|
|
64
65
|
} | {
|
|
65
66
|
readonly kind: "step";
|
|
66
|
-
readonly turn: import("@deepseek-ai/dsh-client-
|
|
67
|
-
readonly step: import("@deepseek-ai/dsh-client-
|
|
67
|
+
readonly turn: import("@deepseek-ai/dsh-client-ui-conversation/client").TurnLocation;
|
|
68
|
+
readonly step: import("@deepseek-ai/dsh-client-ui-conversation/client").StepLocation;
|
|
68
69
|
};
|
|
69
70
|
visibility: "visible";
|
|
70
71
|
data: Readonly<{
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ReaderExportActions {
|
|
2
|
+
downloadFullReport: () => void;
|
|
3
|
+
publishing?: {
|
|
4
|
+
name: string;
|
|
5
|
+
publish: () => void;
|
|
6
|
+
publishView: (bytes: Uint8Array) => Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
publishingUnavailable?: boolean;
|
|
9
|
+
publishingLoading?: boolean;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
downloading?: boolean;
|
|
12
|
+
report?: {
|
|
13
|
+
version: string;
|
|
14
|
+
refresh: () => void;
|
|
15
|
+
edit: () => void;
|
|
16
|
+
history: () => void;
|
|
17
|
+
historical?: boolean;
|
|
18
|
+
historyLoading?: boolean;
|
|
19
|
+
busy?: boolean;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare function ExportMenu({ actions, editing, onExport, }: {
|
|
23
|
+
actions: ReaderExportActions;
|
|
24
|
+
editing: boolean;
|
|
25
|
+
onExport: () => void;
|
|
26
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { PresentationDocument } from '../../presentation/contracts/types.ts';
|
|
2
|
+
import { type ChartExploration } from './chart-view.ts';
|
|
3
|
+
export interface TableSort {
|
|
4
|
+
columnId: string;
|
|
5
|
+
direction: 'ascending' | 'descending';
|
|
6
|
+
}
|
|
7
|
+
export interface CurrentViewState {
|
|
8
|
+
selection: Record<string, string>;
|
|
9
|
+
explorations: Record<string, ChartExploration>;
|
|
10
|
+
tableSorts: Record<string, TableSort | undefined>;
|
|
11
|
+
}
|
|
12
|
+
/** Resolve only existing rows. Sorting never changes values or precomputed chart semantics. */
|
|
13
|
+
export declare function currentViewBlocks(document: PresentationDocument, state: CurrentViewState): ({
|
|
14
|
+
block: {
|
|
15
|
+
id: string;
|
|
16
|
+
kind: "markdown";
|
|
17
|
+
text: string;
|
|
18
|
+
} | {
|
|
19
|
+
id: string;
|
|
20
|
+
kind: "source";
|
|
21
|
+
sourceIds: string[];
|
|
22
|
+
};
|
|
23
|
+
dataset?: undefined;
|
|
24
|
+
rowIndices?: undefined;
|
|
25
|
+
sort?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
block: ({
|
|
28
|
+
id: string;
|
|
29
|
+
kind: "metric";
|
|
30
|
+
datasetId: string;
|
|
31
|
+
columnId: string;
|
|
32
|
+
label: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
comparisons?: import("../../presentation/contracts/types.ts").MetricComparison[];
|
|
35
|
+
} & {
|
|
36
|
+
rowIndex: number;
|
|
37
|
+
rowSelection?: never;
|
|
38
|
+
}) | ({
|
|
39
|
+
id: string;
|
|
40
|
+
kind: "metric";
|
|
41
|
+
datasetId: string;
|
|
42
|
+
columnId: string;
|
|
43
|
+
label: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
comparisons?: import("../../presentation/contracts/types.ts").MetricComparison[];
|
|
46
|
+
} & {
|
|
47
|
+
rowSelection: "slice";
|
|
48
|
+
rowIndex?: never;
|
|
49
|
+
}) | {
|
|
50
|
+
id: string;
|
|
51
|
+
kind: "table";
|
|
52
|
+
datasetId: string;
|
|
53
|
+
columns?: string[];
|
|
54
|
+
} | import("./model.ts").ChartBlock;
|
|
55
|
+
dataset: import("../../presentation/contracts/types.ts").DocumentDataset;
|
|
56
|
+
rowIndices: number[];
|
|
57
|
+
sort: TableSort | undefined;
|
|
58
|
+
})[];
|
|
59
|
+
/** Freeze rendered SVGs synchronously; no query, saved-document rewrite or hidden dataset payload. */
|
|
60
|
+
export declare function exportCurrentView(root: HTMLElement, document: PresentationDocument, state: CurrentViewState, exportedAt?: string): {
|
|
61
|
+
bytes: Uint8Array<ArrayBuffer>;
|
|
62
|
+
filename: string;
|
|
63
|
+
};
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { PresentationDocument } from '../../presentation/contracts/types.ts';
|
|
3
|
+
import type { PresentationContext } from './context-reference.ts';
|
|
3
4
|
import type { ReaderEditing } from './editor-controls.tsx';
|
|
5
|
+
import type { ReaderExportActions } from './export-menu.tsx';
|
|
6
|
+
import { type ReaderViewMemory } from './reader.tsx';
|
|
4
7
|
import type { OpenSemanticRef } from './source-facts.ts';
|
|
5
8
|
/** Host integrations supply only outer actions; document interpretation stays shared. */
|
|
6
|
-
export declare function HostPresentationReader({ document, actions, editing, onOpenSemanticRef, onAskDsh, }: {
|
|
9
|
+
export declare function HostPresentationReader({ document, actions, editing, onOpenSemanticRef, onAskDsh, exportActions, viewMemory, closeSourceOnNavigate, }: {
|
|
7
10
|
document: PresentationDocument;
|
|
8
11
|
editing?: ReaderEditing;
|
|
9
12
|
actions?: ReactNode;
|
|
10
13
|
onOpenSemanticRef?: OpenSemanticRef;
|
|
11
|
-
onAskDsh?: (context:
|
|
14
|
+
onAskDsh?: (context: PresentationContext) => void;
|
|
15
|
+
exportActions?: ReaderExportActions;
|
|
16
|
+
viewMemory?: ReaderViewMemory;
|
|
17
|
+
closeSourceOnNavigate?: boolean;
|
|
12
18
|
}): import("react").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { SVGProps } from 'react';
|
|
2
|
-
export declare function CopyIcon(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
|
|
3
2
|
export declare function MoreIcon(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
|
|
3
|
+
export declare function ExportIcon(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
|
|
4
4
|
export declare function CloseIcon(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Cell, DatasetColumn, DocumentDataset, PresentationBlock, PresentationDocument, SourceSnapshot, TypedDataset } from '../../presentation/contracts/types.ts';
|
|
3
|
-
import type { ChartExploration } from './chart-view.ts';
|
|
1
|
+
import type { ChartView } from '../../presentation/contracts/charts.ts';
|
|
2
|
+
import type { Cell, DatasetColumn, DocumentDataset, PresentationBlock, PresentationDocument, PresentationLocale, SourceSnapshot, TypedDataset } from '../../presentation/contracts/types.ts';
|
|
4
3
|
export type ReaderMode = 'interactive' | 'static';
|
|
5
4
|
export type ChartBlock = Extract<PresentationBlock, {
|
|
6
5
|
kind: 'chart';
|
|
@@ -9,19 +8,19 @@ export type MetricBlock = Extract<PresentationBlock, {
|
|
|
9
8
|
kind: 'metric';
|
|
10
9
|
}>;
|
|
11
10
|
export declare const TABLE_PAGE_SIZE = 20;
|
|
12
|
-
export declare function cellText(value: Cell, column: DatasetColumn): string;
|
|
13
|
-
export declare function valueWithUnit(value: Cell, column: DatasetColumn): string;
|
|
14
|
-
/**
|
|
15
|
-
export declare function metricText(value: Cell, column: DatasetColumn): string;
|
|
11
|
+
export declare function cellText(locale: PresentationLocale, value: Cell, column: DatasetColumn): string;
|
|
12
|
+
export declare function valueWithUnit(locale: PresentationLocale, value: Cell, column: DatasetColumn): string;
|
|
13
|
+
/** Round floating KPI values for display; preserve exact decimal and integer text. */
|
|
14
|
+
export declare function metricText(locale: PresentationLocale, value: Cell, column: DatasetColumn): string;
|
|
16
15
|
/** A stable explicit timezone keeps portable and Host metadata equally readable. */
|
|
17
|
-
export declare function snapshotDate(value: string): string;
|
|
16
|
+
export declare function snapshotDate(locale: PresentationLocale, value: string): string;
|
|
18
17
|
export declare function columnLabel(column: DatasetColumn): string;
|
|
19
18
|
/** Axis labels are compact coordinates; tooltips and tables retain exact source text. */
|
|
20
|
-
export declare function formatAxisTick(value: number): string;
|
|
19
|
+
export declare function formatAxisTick(locale: PresentationLocale, value: number): string;
|
|
21
20
|
export declare function formatCategoryTick(value: string): string;
|
|
22
21
|
export declare function datasetById(document: PresentationDocument, id: string): DocumentDataset;
|
|
23
22
|
export declare function columnIndex(dataset: TypedDataset, id: string): number;
|
|
24
|
-
export declare function selectMetric(dataset: TypedDataset, block: MetricBlock, rowIndices?: readonly number[]): {
|
|
23
|
+
export declare function selectMetric(locale: PresentationLocale, dataset: TypedDataset, block: MetricBlock, rowIndices?: readonly number[]): {
|
|
25
24
|
column: DatasetColumn;
|
|
26
25
|
value: string | number | boolean;
|
|
27
26
|
comparisons: {
|
|
@@ -46,17 +45,17 @@ export declare function selectMetric(dataset: TypedDataset, block: MetricBlock,
|
|
|
46
45
|
}[];
|
|
47
46
|
};
|
|
48
47
|
export declare function compareDecimalText(first: string, second: string): number;
|
|
49
|
-
export declare function sortedRowIndices(dataset: TypedDataset, sort?: {
|
|
48
|
+
export declare function sortedRowIndices(locale: PresentationLocale, dataset: TypedDataset, sort?: {
|
|
50
49
|
columnId: string;
|
|
51
50
|
direction: 'ascending' | 'descending';
|
|
52
51
|
}): number[];
|
|
53
|
-
export declare function datasetScope(dataset: TypedDataset): string;
|
|
52
|
+
export declare function datasetScope(locale: PresentationLocale, dataset: TypedDataset): string;
|
|
54
53
|
export interface ChartRow {
|
|
55
54
|
rowIndex: number;
|
|
56
55
|
xLabel: string;
|
|
57
56
|
[key: string]: number | string | null;
|
|
58
57
|
}
|
|
59
|
-
export declare function chartRows(dataset: TypedDataset, block: ChartView, rowIndices?: readonly number[]): ChartRow[];
|
|
60
|
-
export declare function chartTitle(dataset: TypedDataset, block: ChartView): string;
|
|
58
|
+
export declare function chartRows(locale: PresentationLocale, dataset: TypedDataset, block: ChartView, rowIndices?: readonly number[]): ChartRow[];
|
|
59
|
+
export declare function chartTitle(locale: PresentationLocale, dataset: TypedDataset, block: ChartView): string;
|
|
61
60
|
export declare function selectedSources(document: PresentationDocument, ids: string[]): SourceSnapshot[];
|
|
62
|
-
export
|
|
61
|
+
export { followUpContext } from './context-reference.ts';
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import type { PresentationDocument } from '../../presentation/contracts/types.ts';
|
|
2
|
+
import { type ChartExploration } from './chart-view.ts';
|
|
3
|
+
import { type PresentationContext } from './context-reference.ts';
|
|
2
4
|
import { type ReaderEditing } from './editor-controls.tsx';
|
|
5
|
+
import { type ReaderExportActions } from './export-menu.tsx';
|
|
6
|
+
import { type TableSort } from './export-view.ts';
|
|
3
7
|
import { type ReaderMode } from './model.ts';
|
|
4
8
|
import type { OpenSemanticRef } from './source-facts.ts';
|
|
5
|
-
export
|
|
9
|
+
export interface ReaderViewState {
|
|
10
|
+
chosen: Record<string, string>;
|
|
11
|
+
tableSorts: Record<string, TableSort | undefined>;
|
|
12
|
+
explorations: Record<string, ChartExploration>;
|
|
13
|
+
}
|
|
14
|
+
export type ReaderViewMemory = Map<string, ReaderViewState>;
|
|
15
|
+
export declare function PresentationReader({ document, mode, editing, onOpenSemanticRef, onAskDsh, exportActions, viewMemory, closeSourceOnNavigate, }: {
|
|
6
16
|
document: PresentationDocument;
|
|
7
17
|
mode?: ReaderMode;
|
|
8
18
|
editing?: ReaderEditing;
|
|
9
19
|
onOpenSemanticRef?: OpenSemanticRef;
|
|
10
|
-
onAskDsh?: (context:
|
|
20
|
+
onAskDsh?: (context: PresentationContext) => void;
|
|
21
|
+
exportActions?: ReaderExportActions;
|
|
22
|
+
viewMemory?: ReaderViewMemory;
|
|
23
|
+
closeSourceOnNavigate?: boolean;
|
|
11
24
|
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { ReferenceInsert } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
3
|
+
import type { InputTriggerSource } from '@deepseek-ai/dsh-client-ui-input-trigger/client';
|
|
4
|
+
import { type InputContextHost } from '../input-context.ts';
|
|
5
|
+
import { type PresentationContext } from './context-reference.ts';
|
|
6
|
+
export declare const PRESENTATION_REFERENCE_SOURCE = "marivo-report-cell";
|
|
7
|
+
export declare function presentationReference(sessionId: string, workspaceId: string, payload: PresentationContext, append: boolean): ReferenceInsert;
|
|
8
|
+
export declare function createPresentationReferenceSource(host: InputContextHost, lifetime?: AbortSignal): InputTriggerSource;
|
|
9
|
+
export declare function installPresentationReferenceSource(ctx: Context & InputContextHost): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PresentationBlock, PresentationDocument } from '../../presentation/contracts/types.ts';
|
|
2
|
+
import { type Notice } from './../i18n/copy.ts';
|
|
2
3
|
export type SourceTab = 'overview' | 'preview' | 'code';
|
|
3
4
|
export declare function sourceTabs(hasDataset: boolean): SourceTab[];
|
|
4
5
|
export declare function sourceTabForKey(tabs: readonly SourceTab[], current: SourceTab, key: string): SourceTab | undefined;
|
|
@@ -11,6 +12,6 @@ interface CodeEntry {
|
|
|
11
12
|
/** Read only the selected cell binding; prepared views are separate, unselected bindings. */
|
|
12
13
|
export declare function sourceCodeFacts(document: PresentationDocument, block?: PresentationBlock): {
|
|
13
14
|
entries: CodeEntry[];
|
|
14
|
-
notices:
|
|
15
|
+
notices: Notice[];
|
|
15
16
|
};
|
|
16
17
|
export {};
|
|
@@ -4,8 +4,3 @@ export declare function SourceCode({ document, block, interactive, }: {
|
|
|
4
4
|
block?: PresentationBlock;
|
|
5
5
|
interactive?: boolean;
|
|
6
6
|
}): import("react").JSX.Element;
|
|
7
|
-
/** Native disclosures remain usable in saved HTML with JavaScript disabled. */
|
|
8
|
-
export declare function SourceCodeSummary({ document, block, }: {
|
|
9
|
-
document: PresentationDocument;
|
|
10
|
-
block?: PresentationBlock;
|
|
11
|
-
}): import("react").JSX.Element | import("react").JSX.Element[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PresentationBlock, PresentationDocument } from '../../presentation/contracts/types.ts';
|
|
2
2
|
import type { OpenSemanticRef } from './source-facts.ts';
|
|
3
|
-
export declare function SourceDialog({ document, block, onClose, restoreFocusTo, rowIndices, filterKey, filterSummary,
|
|
3
|
+
export declare function SourceDialog({ document, block, onClose, restoreFocusTo, rowIndices, filterKey, filterSummary, onOpenSemanticRef, }: {
|
|
4
4
|
document: PresentationDocument;
|
|
5
5
|
block: PresentationBlock;
|
|
6
6
|
onClose: () => void;
|
|
@@ -8,6 +8,5 @@ export declare function SourceDialog({ document, block, onClose, restoreFocusTo,
|
|
|
8
8
|
rowIndices?: readonly number[];
|
|
9
9
|
filterKey?: string;
|
|
10
10
|
filterSummary?: string;
|
|
11
|
-
explored?: boolean;
|
|
12
11
|
onOpenSemanticRef?: OpenSemanticRef;
|
|
13
12
|
}): import("react").JSX.Element;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { PresentationBlock, PresentationDocument, SourceSnapshot } from '../../presentation/contracts/types.ts';
|
|
2
2
|
import { type OpenSemanticRef } from './source-facts.ts';
|
|
3
3
|
export declare function blockSources(document: PresentationDocument, block?: PresentationBlock): SourceSnapshot[];
|
|
4
|
+
/** Reading summary; saved timestamps remain in the source dialog. */
|
|
5
|
+
export declare function SourceList({ document, block, }: {
|
|
6
|
+
document: PresentationDocument;
|
|
7
|
+
block: PresentationBlock;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
4
9
|
export declare function SourceOverview({ document, block, onOpenSemanticRef, }: {
|
|
5
10
|
document: PresentationDocument;
|
|
6
11
|
block?: PresentationBlock;
|
|
7
12
|
onOpenSemanticRef?: OpenSemanticRef;
|
|
8
13
|
}): import("react").JSX.Element;
|
|
9
|
-
/** Compact native disclosure for reading the saved report without JavaScript. */
|
|
10
|
-
export declare function SourceSummary({ document, block, }: {
|
|
11
|
-
document: PresentationDocument;
|
|
12
|
-
block?: PresentationBlock;
|
|
13
|
-
}): import("react").JSX.Element | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PRESENTATION_STYLES = "\n.pr-reader {\n --pr-bg:#fff; --pr-soft:#f7f7f8; --pr-text:#242424; --pr-muted:#666;\n --pr-code-keyword:#8a3294; --pr-code-string:#216b43; --pr-code-number:#995119; --pr-code-function:#285d9e;\n --pr-border:#e5e5e7; --pr-accent:#3567b7; --pr-warning:#805b20;\n --pr-chart-1:#286dee; --pr-chart-2:#ba7039; --pr-chart-3:#548878;\n --pr-chart-muted:#96969b; --pr-chart-grid:rgba(13,13,13,.06); --pr-chart-hover:rgba(13,13,13,.03); --pr-chart-4:#8d6cb0; --pr-chart-5:#b46379; --pr-chart-6:#727c38;\n box-sizing:border-box; margin:0 auto; padding:48px clamp(20px,4%,64px); width:100%; max-width:none; min-width:0;\n color:var(--pr-text); background:var(--pr-bg); font:16px/1.65 system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n overflow-wrap:anywhere; color-scheme:light;\n}\n.pr-reader * { box-sizing:border-box }\n.pr-reader h1,.pr-reader h2,.pr-reader h3,.pr-reader h4 { line-height:1.4; font-weight:600; text-wrap:balance }\n.pr-reader h1 { font-size:30px; margin:0 0 12px; letter-spacing:-.025em }\n.pr-reader h2 { font-size:21px; margin:0 0 16px }\n.pr-reader h3 { font-size:17px; margin:0 0 12px }\n.pr-reader p { margin:10px 0 }\n.pr-reader button,.pr-reader select,.pr-reader textarea { font:inherit; color:inherit }\n.pr-reader button,.pr-reader select { border:1px solid var(--pr-border); border-radius:8px; background:var(--pr-bg); padding:6px 10px; max-width:100% }\n.pr-reader button { cursor:pointer }\n.pr-reader button:hover { background:var(--pr-soft) }\n.pr-reader button:disabled { opacity:.45; cursor:default }\n.pr-reader :focus-visible { outline:3px solid var(--pr-accent); outline-offset:3px }\n.pr-reader a { color:var(--pr-accent); text-decoration:underline; text-underline-offset:3px }\n.pr-reader summary { cursor:pointer; color:var(--pr-muted); padding:8px 0; font-size:13px }\n.pr-reader summary:hover { color:var(--pr-text) }\n.pr-reader details[open]>summary { margin-bottom:8px }\n.pr-muted { color:var(--pr-muted); font-size:13px }\n.pr-header { padding-bottom:28px; margin-bottom:32px; border-bottom:1px solid var(--pr-border) }\n.pr-blocks { display:flex; flex-direction:column; gap:32px }\n.pr-block { min-width:0; position:relative }\n.pr-block-markdown { padding:0; width:100% }\n.pr-block-chart { padding:0; border:0; border-radius:0 }\n.pr-block-chart>h2 { font-size:17px }\n.pr-chart-row { display:flex; flex-direction:column; gap:32px; min-width:0 }\n.pr-chart-row>.pr-block-chart { width:100% }\n.pr-reader[data-mode=interactive] .pr-chart-row { flex-direction:row; flex-wrap:wrap; align-items:flex-start }\n.pr-reader[data-mode=interactive] .pr-chart-row>.pr-block-chart { flex:1 1 calc((100% - 32px)/2); min-width:min(100%,560px); max-width:100% }\n.pr-reader[data-mode=interactive] .pr-chart-row>.pr-block-chart[data-chart-layout=wide] { min-width:min(100%,720px) }\n.pr-metric-group { display:flex; flex-wrap:wrap; gap:16px; min-width:0 }\n.pr-metric-group>.pr-block-metric { flex:1 1 240px; min-width:min(100%,240px); max-width:min(100%,480px) }\n.pr-block-metric { border:1px solid var(--pr-border); border-radius:14px; padding:20px; display:flex; flex-direction:column; gap:4px }\n.pr-block-metric h2 { font-size:13px; font-weight:500; color:var(--pr-muted); margin:0 }\n.pr-metric-value { font-size:clamp(24px,3vw,32px); font-variant-numeric:tabular-nums; font-weight:600; line-height:1.35; letter-spacing:-.025em }\n.pr-metric-value { white-space:nowrap; overflow-x:auto; max-width:100% }\n.pr-metric-comparisons { display:grid; gap:12px; margin-top:auto; padding-top:12px }\n.pr-metric-comparison { display:flex; flex-wrap:wrap; gap:4px 10px; border-top:1px solid var(--pr-border); padding-top:10px; font-size:13px; font-variant-numeric:tabular-nums }\n.pr-metric-comparison>.pr-muted { flex-basis:100% }\n.pr-metric-change { display:flex; flex-wrap:wrap; gap:4px 8px }\n.pr-metric-change-positive { color:#167044 }\n.pr-metric-change-negative { color:#b42318 }\n.pr-metric-change-neutral { color:var(--pr-muted) }\n.pr-notice { color:var(--pr-warning); font-size:13px; border-left:2px solid currentColor; padding-left:12px }\n.pr-empty { padding:24px; text-align:center; color:var(--pr-muted); background:var(--pr-soft); border-radius:8px }\n.pr-markdown p { white-space:pre-wrap }\n.pr-markdown pre { max-width:100%; overflow:auto; background:var(--pr-soft); padding:16px; border-radius:8px; font:13px/1.65 ui-monospace,monospace }\n.pr-markdown code { font-family:ui-monospace,monospace; font-size:.9em; background:var(--pr-soft); padding:2px 4px; border-radius:3px }\n.pr-markdown pre code { padding:0 }\n.pr-markdown blockquote { border-left:3px solid var(--pr-border); padding-left:18px; margin:16px 0; color:var(--pr-muted) }\n.pr-markdown hr { border:0; border-top:1px solid var(--pr-border); margin:24px 0 }\n.pr-markdown ul,.pr-markdown ol { padding-left:24px }\n.pr-markdown li+li { margin-top:6px }\n.pr-table-scroll { max-width:100%; overflow:auto }\n.pr-table table { border-collapse:collapse; min-width:100%; font-size:13px }\n.pr-table caption { text-align:left; font-size:12px; color:var(--pr-muted); padding:8px 12px }\n.pr-table th,.pr-table td { padding:12px; text-align:left; border-bottom:1px solid var(--pr-border); vertical-align:top; white-space:pre-wrap; overflow-wrap:anywhere; min-width:90px; max-width:400px }\n.pr-table th { font-weight:500; color:var(--pr-muted) }\n.pr-table th button { position:relative; font-weight:500; padding:0; text-align:inherit; border:0; background:transparent; border-radius:0 }\n.pr-table th.pr-numeric { text-align:right }\n.pr-sort-indicator { position:absolute; left:calc(100% + 3px); top:0; font-size:11px; line-height:inherit }\n.pr-table tbody tr:hover { background:var(--pr-soft) }\n.pr-table td.pr-numeric { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap }\n.pr-table td[data-cell-null=true] { color:var(--pr-muted) }\n.pr-pagination { display:flex; gap:12px; align-items:center; justify-content:flex-end; flex-wrap:wrap; margin-top:12px; font-size:12px }\n.pr-diagnostics { margin:0 0 28px; padding:16px; background:var(--pr-soft); border-radius:10px; font-size:13px }\n.pr-diagnostics h2 { font-size:14px; margin:0 }\n.pr-diagnostics ul { padding-left:20px }\n.pr-legend { display:flex; flex-wrap:wrap; gap:8px 16px; margin:8px 0 0; justify-content:center }\n.pr-legend button { display:flex; align-items:center; gap:7px; font-size:12px; border:0; padding:4px 0; background:transparent }\n.pr-legend button[aria-pressed=false] { opacity:.5; text-decoration:line-through }\n.pr-swatch { display:inline-block; width:9px; height:9px; border-radius:50%; flex-shrink:0 }\n.pr-chart { margin:0; width:100%; min-width:0; height:320px }\n.pr-chart svg { overflow:visible }\n.pr-chart-group+.pr-chart-group { margin-top:24px }\n.pr-chart .recharts-cartesian-axis-tick-value { font-variant-numeric:tabular-nums }\n.pr-tooltip { padding:10px 13px; border:1px solid var(--pr-border); border-radius:10px; background:var(--pr-bg); color:var(--pr-text); font-size:12px; box-shadow:0 4px 18px #0001; max-width:min(420px,80vw) }\n.pr-tooltip dl { margin:5px 0 0 }\n.pr-tooltip dl>div { display:flex; flex-wrap:wrap; justify-content:space-between; gap:6px 20px }\n.pr-tooltip dt { color:var(--pr-muted) }\n.pr-tooltip dd { margin:0; font-variant-numeric:tabular-nums; overflow-wrap:anywhere }\n\n.pr-cell-toolbar { position:absolute; top:0; right:0; display:flex; align-items:center; gap:4px; z-index:2 }\n.pr-block-metric>.pr-cell-toolbar { top:12px; right:12px }\n.pr-block-metric>h2,.pr-block-chart>h2 { padding-right:32px }\n.pr-block-markdown .pr-markdown>:first-child { padding-right:40px }\n.pr-reader[data-mode=interactive] .pr-block-table { padding-top:30px }\n.pr-block-source>h2 { padding-right:40px }\n.pr-reader .pr-icon-button { display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; padding:5px; border:0; background:transparent; color:var(--pr-muted); border-radius:6px; flex-shrink:0 }\n.pr-reader .pr-icon-button:hover { background:var(--pr-soft); color:var(--pr-text) }\n.pr-icon-button svg { width:18px; height:18px; display:block }\n.pr-copy,.pr-cell-menu { position:relative; display:inline-flex; align-items:center }\n.pr-copy-status { position:absolute; right:0; top:calc(100% + 4px); white-space:nowrap; font-size:12px; background:var(--pr-bg); color:var(--pr-text); border-radius:5px }\n.pr-copy-status:not(:empty) { padding:4px 8px; border:1px solid var(--pr-border); box-shadow:0 2px 8px #0001 }\n.pr-cell-menu-popup { position:absolute; right:0; top:calc(100% + 4px); min-width:136px; padding:4px; background:var(--pr-bg); border:1px solid var(--pr-border); border-radius:10px; box-shadow:0 6px 24px #0002; z-index:3 }\n.pr-cell-menu-popup>button { display:block; width:100%; border:0; border-radius:6px; text-align:left; font-size:13px; padding:8px 12px; white-space:nowrap }\n.pr-cell-menu-popup>button[aria-disabled=true] { color:var(--pr-muted); cursor:not-allowed }\n.pr-cell-menu-popup>button small { display:block; font-size:12px; font-weight:normal }\n.pr-source-dialog,.pr-dialog { color:var(--pr-text); background:var(--pr-bg); border:1px solid var(--pr-border); border-radius:24px; width:min(800px,calc(100vw - 48px)); max-width:none; max-height:min(760px,calc(100dvh - 48px)); margin:auto; padding:0; box-shadow:0 18px 70px #0003; font:14px/1.6 system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif; overflow:hidden }\n.pr-source-dialog[open],.pr-dialog[open] { display:flex; flex-direction:column }\n.pr-source-dialog-shell { display:flex; flex-direction:column; min-height:0; width:100% }\n.pr-reader .pr-source-dialog-context { font-size:13px; color:var(--pr-muted); margin:4px 0 0 }\n.pr-source-dialog::backdrop,.pr-dialog::backdrop { background:#0005 }\n.pr-source-dialog-header,.pr-dialog-header { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:20px 24px 4px; flex-shrink:0 }\n.pr-source-dialog .pr-source-dialog-title,.pr-dialog-header h2 { font-size:24px; font-weight:500; margin:0 }\n.pr-reader .pr-source-dialog-close { width:32px; height:32px; border:0; padding:6px; background:transparent; color:var(--pr-muted); flex-shrink:0 }\n.pr-source-dialog-close svg { width:18px; height:18px }\n.pr-source-tabs { display:flex; gap:28px; padding:0 24px; border-bottom:1px solid var(--pr-border); flex-shrink:0 }\n.pr-reader .pr-source-tab { padding:14px 0; border:0; border-bottom:2px solid transparent; border-radius:0; background:transparent; color:var(--pr-muted); font-size:14px }\n.pr-reader .pr-source-tab[aria-selected=true] { color:var(--pr-text); border-bottom-color:var(--pr-text) }\n.pr-source-dialog-body { padding:20px 24px 24px; overflow:auto; min-height:0; overscroll-behavior:contain }\n.pr-source-overview { font-size:14px; min-width:0 }\n.pr-source-overview-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px 24px; margin:0 0 24px }\n.pr-source-overview-grid>div { min-width:0 }\n.pr-source-overview-grid dt { color:var(--pr-muted); font-size:13px; margin:0 0 4px }\n.pr-source-overview-label { color:var(--pr-muted); font-size:13px; font-weight:400; margin:0 0 4px }\n.pr-source-overview dd { margin:0; overflow-wrap:anywhere }\n.pr-source-fields { display:flex; flex-wrap:wrap; gap:4px 10px; list-style:none; padding:0; margin:0 }\n.pr-source-list { display:flex; flex-direction:column; gap:24px }\n.pr-source-card { min-width:0 }\n.pr-source-card+.pr-source-card { border-top:1px solid var(--pr-border); padding-top:20px }\n.pr-source-card h3 { font-size:14px; margin:0 0 12px; font-weight:500 }\n.pr-source-semantic-group { margin-top:16px }\n.pr-source-semantic-list { display:flex; flex-wrap:wrap; gap:6px; list-style:none; padding:0; margin:4px 0 16px }\n.pr-source-semantic-list>li { border:1px solid var(--pr-border); border-radius:14px; padding:2px 8px; overflow-wrap:anywhere; max-width:100%; font-size:13px }\n.pr-reader .pr-semantic-link { font:inherit; color:var(--pr-accent); background:none; border:0; padding:0; cursor:pointer; text-align:left; overflow-wrap:anywhere; text-decoration:underline; text-underline-offset:3px }\n.pr-reader .pr-semantic-link:focus-visible { outline:2px solid var(--pr-accent); outline-offset:3px; border-radius:3px }\n.pr-source-issues { margin:12px 0 0; color:var(--pr-warning); font-size:13px }\n.pr-source-summary { margin-top:32px; padding-top:16px; border-top:1px solid var(--pr-border) }\n.pr-source-summary>summary { font-size:14px }\n.pr-source-code { display:flex; flex-direction:column; gap:20px; min-width:0 }\n.pr-source-code-snippet { min-width:0 }\n.pr-source-code-header { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:8px; margin-bottom:8px }\n.pr-source-code-header h3 { margin:0; font-size:14px; font-weight:500 }\n.pr-source-code-copy { display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size:12px; color:var(--pr-muted) }\n.pr-reader .pr-source-code-note { margin:0 0 8px; font-size:12px; color:var(--pr-muted) }\n.pr-source-code-copy button { font-size:12px }\n.pr-source-code pre { margin:0; padding:14px 16px; border:1px solid var(--pr-border); border-radius:10px; background:var(--pr-soft); max-height:420px; overflow:auto; white-space:pre; tab-size:4; user-select:text; font:12px/1.7 ui-monospace,SFMono-Regular,Consolas,monospace }\n.pr-source-code-summary { margin-top:20px }\n.pr-source-code-summary>summary { margin-bottom:12px; font-size:14px }\n.pr-copy-dialog { max-width:640px; padding-bottom:24px; overflow:auto }\n.pr-copy-dialog>p,.pr-copy-dialog>label { margin:16px 24px }\n.pr-copy-dialog textarea { display:block; width:calc(100% - 48px); min-height:220px; max-height:50vh; margin:16px 24px 0; padding:12px; background:var(--pr-soft); color:var(--pr-text); border:1px solid var(--pr-border); border-radius:8px; font:13px/1.65 ui-monospace,monospace; resize:vertical }\n\n.pr-chart-explorer { margin:18px 0; padding:20px; border:1px solid var(--pr-border); border-radius:12px; background:var(--pr-soft); font-size:13px; min-width:0 }\n.pr-explorer-header { display:flex; justify-content:space-between; gap:12px; align-items:flex-start }\n.pr-explorer-header h3 { margin:0 }\n.pr-explorer-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr)); gap:14px; margin:14px 0 }\n.pr-explorer-grid>label { display:flex; flex-direction:column; gap:6px; min-width:0 }\n.pr-explorer-grid select { width:100%; min-width:0 }\n.pr-explorer-fields { border:0; border-top:1px solid var(--pr-border); padding:12px 0 0; margin:16px 0 0; min-width:0 }\n.pr-explorer-fields legend { font-weight:600; padding:0 8px 0 0 }\n.pr-explorer-series { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin:8px 0 }\n.pr-explorer-series label { display:flex; align-items:center; gap:6px }\n.pr-explorer-series input { accent-color:var(--pr-accent); min-width:16px; min-height:16px }\n.pr-explorer-visible { color:var(--pr-muted) }\n.pr-explorer-footer { margin-top:16px; display:flex; justify-content:flex-end }\n.pr-host-print { display:none }\n\n.pr-host { min-width:0 }\n.pr-host-actions { display:flex; gap:10px; justify-content:flex-end; padding:12px }\nbody[data-presentation-portable] { margin:0; background:#fff }\nhtml[data-presentation-ready=true] body[data-presentation-portable] #presentation-fallback { display:none }\n@media(prefers-color-scheme:dark) {\n body[data-presentation-portable] { background:#1c1c1f }\n .pr-reader { --pr-code-keyword:#d9a0e5; --pr-code-string:#99cda7; --pr-code-number:#ebbb8a; --pr-code-function:#9bbef3; --pr-bg:#1c1c1f; --pr-soft:#262629; --pr-text:#ededed; --pr-muted:#aaa; --pr-border:#39393e; --pr-accent:#91b7f3; --pr-warning:#e3bb70; --pr-chart-1:#8cb0ed; --pr-chart-2:#dbab7f; --pr-chart-3:#8ec0a9; --pr-chart-muted:#a0a0a6; --pr-chart-grid:rgba(255,255,255,.08); --pr-chart-hover:rgba(255,255,255,.04); --pr-chart-4:#b7a0d6; --pr-chart-5:#d99bb0; --pr-chart-6:#b8be86; color-scheme:dark }\n}\n.dark .pr-reader,[data-theme=dark] .pr-reader { --pr-code-keyword:#d9a0e5; --pr-code-string:#99cda7; --pr-code-number:#ebbb8a; --pr-code-function:#9bbef3; --pr-bg:#1c1c1f; --pr-soft:#262629; --pr-text:#ededed; --pr-muted:#aaa; --pr-border:#39393e; --pr-accent:#91b7f3; --pr-warning:#e3bb70; --pr-chart-1:#8cb0ed; --pr-chart-2:#dbab7f; --pr-chart-3:#8ec0a9; --pr-chart-muted:#a0a0a6; --pr-chart-grid:rgba(255,255,255,.08); --pr-chart-hover:rgba(255,255,255,.04); --pr-chart-4:#b7a0d6; --pr-chart-5:#d99bb0; --pr-chart-6:#b8be86; color-scheme:dark }\n.light .pr-reader,[data-theme=light] .pr-reader { --pr-bg:#fff; --pr-soft:#f7f7f8; --pr-text:#242424; --pr-muted:#666; --pr-border:#e5e5e7; --pr-accent:#3567b7; --pr-warning:#805b20; --pr-chart-1:#286dee; --pr-chart-2:#ba7039; --pr-chart-3:#548878; --pr-chart-muted:#96969b; --pr-chart-grid:rgba(13,13,13,.06); --pr-chart-hover:rgba(13,13,13,.03); --pr-chart-4:#8d6cb0; --pr-chart-5:#b46379; --pr-chart-6:#727c38; color-scheme:light }\n@media(max-width:640px) {\n .pr-reader { padding:28px 20px; font-size:15px }\n .pr-reader h1 { font-size:26px }\n .pr-block-markdown h2 { font-size:20px }\n .pr-blocks { gap:26px }\n .pr-source-dialog,.pr-dialog { width:calc(100vw - 24px); max-height:calc(100dvh - 24px); border-radius:18px }\n .pr-source-dialog-header,.pr-dialog-header { padding:16px 18px 4px }\n .pr-source-tabs { padding:0 18px }\n .pr-source-dialog-body { padding:18px }\n .pr-source-overview-grid { grid-template-columns:1fr; gap:16px }\n .pr-metric-group { gap:12px }\n .pr-block-metric { padding:16px }\n .pr-metric-value { font-size:25px }\n .pr-pagination { justify-content:space-between; gap:8px }\n .pr-tooltip { max-width:80vw }\n}\n@media(pointer:coarse) { .pr-reader summary,.pr-reader button { min-height:44px } .pr-reader .pr-icon-button { width:36px } .pr-block-metric>h2,.pr-block-chart>h2 { padding-right:44px } .pr-reader select,.pr-reader textarea { font-size:16px } }\n@media print {\n .pr-host-live { display:none!important }\n .pr-host-print { display:block!important }\n html[data-presentation-ready=true] body[data-presentation-portable] #presentation-fallback,body[data-presentation-portable] #presentation-fallback { display:block!important }\n body[data-presentation-portable] #reader,.pr-interactive { display:none!important }\n .pr-reader { --pr-bg:#fff; --pr-soft:#fff; --pr-text:#111; --pr-muted:#444; --pr-border:#bbb; --pr-accent:#222; --pr-warning:#333; max-width:none; padding:0; font-size:10pt; color-scheme:light }\n .pr-blocks { display:block }\n .pr-block { border:0; padding:12px 0; border-radius:0 }\n .pr-block-markdown { max-width:none }\n .pr-block-metric>h2,.pr-block-chart>h2,.pr-block-markdown .pr-markdown>:first-child { padding-right:0 }\n .pr-source-summary::details-content { content-visibility:visible }\n .pr-source-summary>* { display:block }\n .pr-source-code-summary { display:none!important }\n .pr-source-dialog,.pr-dialog { display:none!important }\n .pr-metric-group { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)) }\n .pr-metric-group>.pr-block-metric { min-width:0; max-width:none }\n .pr-reader[data-mode] .pr-chart-row { display:block }\n .pr-reader[data-mode] .pr-chart-row>.pr-block-chart { min-width:0; max-width:none }\n .pr-header { break-after:avoid }\n .pr-reader h1,.pr-reader h2,.pr-reader h3 { break-after:avoid }\n .pr-table-scroll { overflow:visible }\n .pr-table table { table-layout:fixed; width:100%; font-size:8pt }\n .pr-table caption { padding-left:5px; padding-right:5px }\n .pr-table th,.pr-table td { min-width:0; padding:5px; white-space:pre-wrap!important; overflow-wrap:anywhere }\n .pr-table tr { break-inside:avoid }\n .pr-table thead { display:table-header-group }\n .pr-reader pre { white-space:pre-wrap }\n}\n.pr-region-label{color:var(--pr-muted);font-size:12px;letter-spacing:.02em;margin:0!important}\n.pr-interaction-region{min-width:0}\n.pr-region-divider{border:0;border-top:1px solid var(--pr-border);margin:0;width:100%}\n@media print{.pr-region-divider{margin:20px 0}}\n.pr-interaction-header{margin-bottom:28px}.pr-interaction-header h2{margin-bottom:4px}.pr-interaction-header>.pr-muted{margin:4px 0 16px}\n.pr-filter-toolbar{border:0;padding:0;margin:0;min-width:0;display:flex;flex-wrap:wrap;gap:8px;align-items:center;position:relative;z-index:5}\n.pr-filter-menu{position:relative;min-width:0;max-width:100%}\n.pr-reader .pr-filter-trigger{display:flex;align-items:center;gap:8px;border-radius:999px;padding:5px 12px;min-height:34px;font-size:14px;line-height:22px;max-width:100%}\n.pr-filter-label{color:var(--pr-muted);flex-shrink:0}.pr-filter-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}\n.pr-filter-popup{position:absolute;top:calc(100% + 6px);left:0;width:260px;max-width:calc(100vw - 80px);padding:8px;border:1px solid var(--pr-border);border-radius:12px;background:var(--pr-bg);box-shadow:0 8px 24px #0002;z-index:10;animation:pr-filter-in .12s ease-out}\n.pr-filter-popup input{width:100%;min-width:0;padding:8px 10px;border:1px solid var(--pr-border);border-radius:7px;background:var(--pr-bg);color:var(--pr-text);font:inherit;font-size:14px;margin-bottom:6px}\n.pr-filter-options{max-height:260px;overflow-y:auto}.pr-reader .pr-filter-options button{display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:left;width:100%;border:0;border-radius:6px;padding:8px 10px;font-size:14px}\n.pr-filter-options button[aria-checked=true]{background:var(--pr-soft);font-weight:600}\n.pr-reader .pr-filter-reset{border:0;background:transparent;font-size:13px;color:var(--pr-muted)}\n.pr-reader .pr-filter-status{font-size:12px;color:var(--pr-muted);margin:12px 0 0}\n@keyframes pr-filter-in{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}\n@media(prefers-reduced-motion:reduce){.pr-filter-popup{animation:none}}\n@media(max-width:600px){.pr-filter-menu{width:100%}.pr-reader .pr-filter-trigger{width:100%;justify-content:space-between}.pr-filter-popup{width:100%;max-width:100%}}\n\n.pr-special-frame { position:relative; min-width:0; margin:0 }\n.pr-special-scroll { overflow-x:auto; padding-bottom:4px; max-width:100% }\n.pr-special-chart { display:block; color:var(--pr-text); overflow:visible; font-size:12px; font-variant-numeric:tabular-nums }\n.pr-special-chart text { fill:var(--pr-text) }\n.pr-special-chart .pr-axis-tick { fill:var(--pr-chart-muted) }\n.pr-special-chart [data-chart-mark]:focus { outline:2px solid var(--pr-accent); outline-offset:3px }\n.pr-special-tooltip { position:absolute; top:0; left:0; z-index:2; max-width:100%; pointer-events:none }\n.pr-chart-sparkline { height:128px }\n.pr-chart-role { color:var(--pr-muted); font-size:11px }\n.pr-chart-label { fill:var(--pr-text); font-size:11px }\n.pr-special-chart .pr-chart-label { paint-order:stroke; stroke:var(--pr-bg); stroke-width:3px; stroke-linejoin:round }\n.pr-color-key { display:flex; gap:12px; flex-wrap:wrap; font-size:12px; color:var(--pr-muted); margin:8px 0 }\n.pr-color-key span { display:inline-flex; align-items:center; gap:5px }\n\n\n.pr-cell-editor{border:1px solid var(--pr-border);border-radius:8px;padding:12px;margin:8px 0 16px;min-width:0;background:var(--pr-soft)}\n.pr-editor-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}.pr-cell-editor label{display:block}.pr-cell-editor textarea{display:block;width:100%;min-height:120px;resize:vertical}.pr-cell-editor input:not([type=checkbox]),.pr-report-title-editor input{display:block;width:100%;min-width:0}.pr-cell-editor button{margin:4px;padding:5px 9px}.pr-cell-editor .pr-editor-column{display:inline-flex;align-items:center;gap:6px;margin:4px 12px 4px 0}\n.pr-report-title-editor{display:block;font-weight:600}.pr-report-title-editor input{font:inherit;font-size:24px;padding:8px}\n.pr-cell-editor input,.pr-cell-editor textarea,.pr-report-title-editor input{font-family:inherit;color:var(--pr-text);background:var(--pr-bg);border:1px solid var(--pr-border);border-radius:5px;padding:6px;box-sizing:border-box}\n";
|
|
1
|
+
export declare const PRESENTATION_STYLES = "\n.pr-reader {\n --pr-bg:#fff; --pr-soft:#f7f7f8; --pr-text:#242424; --pr-muted:#666;\n --pr-code-keyword:#8a3294; --pr-code-string:#216b43; --pr-code-number:#995119; --pr-code-function:#285d9e;\n --pr-border:#e5e5e7; --pr-accent:#3567b7; --pr-warning:#805b20;\n --pr-chart-1:#286dee; --pr-chart-2:#ba7039; --pr-chart-3:#548878;\n --pr-chart-muted:#96969b; --pr-chart-grid:rgba(13,13,13,.06); --pr-chart-hover:rgba(13,13,13,.03); --pr-chart-4:#8d6cb0; --pr-chart-5:#b46379; --pr-chart-6:#727c38;\n box-sizing:border-box; margin:0 auto; padding:48px clamp(20px,4%,64px); width:100%; max-width:none; min-width:0;\n color:var(--pr-text); background:var(--pr-bg); font:16px/1.65 system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n overflow-wrap:anywhere; color-scheme:light;\n}\n.pr-reader * { box-sizing:border-box }\n.pr-reader h1,.pr-reader h2,.pr-reader h3,.pr-reader h4 { line-height:1.4; font-weight:600; text-wrap:balance }\n.pr-reader h1 { font-size:30px; margin:0 0 12px; letter-spacing:-.025em }\n.pr-reader h2 { font-size:21px; margin:0 0 16px }\n.pr-reader h3 { font-size:17px; margin:0 0 12px }\n.pr-reader p { margin:10px 0 }\n.pr-reader button,.pr-reader select,.pr-reader textarea { font:inherit; color:inherit }\n.pr-reader button,.pr-reader select { border:1px solid var(--pr-border); border-radius:8px; background:var(--pr-bg); padding:6px 10px; max-width:100% }\n.pr-reader button { cursor:pointer }\n.pr-reader button:hover { background:var(--pr-soft) }\n.pr-reader button:disabled { opacity:.45; cursor:default }\n.pr-reader :focus-visible { outline:3px solid var(--pr-accent); outline-offset:3px }\n.pr-reader a { color:var(--pr-accent); text-decoration:underline; text-underline-offset:3px }\n.pr-reader summary { cursor:pointer; color:var(--pr-muted); padding:8px 0; font-size:13px }\n.pr-reader summary:hover { color:var(--pr-text) }\n.pr-reader details[open]>summary { margin-bottom:8px }\n.pr-muted { color:var(--pr-muted); font-size:13px }\n.pr-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.pr-title-row>h1,.pr-title-row>.pr-report-title-editor{flex:1;min-width:0;margin-top:0}.pr-export-menu{display:flex;align-items:center;gap:8px;position:relative;flex:none;z-index:6}.pr-report-version{font:12px/34px ui-monospace,monospace;color:var(--pr-muted)}.pr-export-menu .pr-menu-divider{border-top:1px solid var(--pr-border);margin-top:4px;padding-top:10px}.pr-export-menu small{display:block;font-size:12px;color:var(--pr-muted);margin-top:3px}.pr-export-menu .pr-cell-menu-popup{min-width:240px}.pr-export-menu .pr-icon-button{width:34px;height:34px}\n.pr-header { padding-bottom:28px; margin-bottom:32px; border-bottom:1px solid var(--pr-border) }\n.pr-blocks { display:flex; flex-direction:column; gap:32px }\n.pr-block { min-width:0; position:relative }\n.pr-block-markdown { padding:0; width:100% }\n.pr-block-chart { padding:0; border:0; border-radius:0 }\n.pr-block-chart>h2 { font-size:17px }\n.pr-chart-row { display:flex; flex-direction:column; gap:32px; min-width:0 }\n.pr-chart-row>.pr-block-chart { width:100% }\n.pr-reader[data-mode=interactive] .pr-chart-row { flex-direction:row; flex-wrap:wrap; align-items:flex-start }\n.pr-reader[data-mode=interactive] .pr-chart-row>.pr-block-chart { flex:1 1 calc((100% - 32px)/2); min-width:min(100%,560px); max-width:100% }\n.pr-reader[data-mode=interactive] .pr-chart-row>.pr-block-chart[data-chart-layout=wide] { min-width:min(100%,720px) }\n.pr-metric-group { display:flex; flex-wrap:wrap; gap:16px; min-width:0 }\n.pr-metric-group>.pr-block-metric { flex:1 1 240px; min-width:min(100%,240px); max-width:min(100%,480px) }\n.pr-block-metric { border:1px solid var(--pr-border); border-radius:14px; padding:20px; display:flex; flex-direction:column; gap:4px }\n.pr-block-metric h2 { font-size:13px; font-weight:500; color:var(--pr-muted); margin:0 }\n.pr-metric-value { font-size:clamp(24px,3vw,32px); font-variant-numeric:tabular-nums; font-weight:600; line-height:1.35; letter-spacing:-.025em }\n.pr-metric-value { white-space:nowrap; overflow-x:auto; max-width:100% }\n.pr-metric-comparisons { display:grid; gap:12px; margin-top:auto; padding-top:12px }\n.pr-metric-comparison { display:flex; flex-wrap:wrap; gap:4px 10px; border-top:1px solid var(--pr-border); padding-top:10px; font-size:13px; font-variant-numeric:tabular-nums }\n.pr-metric-comparison>.pr-muted { flex-basis:100% }\n.pr-metric-change { display:flex; flex-wrap:wrap; gap:4px 8px }\n.pr-metric-change-positive { color:#167044 }\n.pr-metric-change-negative { color:#b42318 }\n.pr-metric-change-neutral { color:var(--pr-muted) }\n.pr-notice { color:var(--pr-warning); font-size:13px; border-left:2px solid currentColor; padding-left:12px }\n.pr-empty { padding:24px; text-align:center; color:var(--pr-muted); background:var(--pr-soft); border-radius:8px }\n.pr-markdown p { white-space:pre-wrap }\n.pr-markdown pre { max-width:100%; overflow:auto; background:var(--pr-soft); padding:16px; border-radius:8px; font:13px/1.65 ui-monospace,monospace }\n.pr-markdown code { font-family:ui-monospace,monospace; font-size:.9em; background:var(--pr-soft); padding:2px 4px; border-radius:3px }\n.pr-markdown pre code { padding:0 }\n.pr-markdown blockquote { border-left:3px solid var(--pr-border); padding-left:18px; margin:16px 0; color:var(--pr-muted) }\n.pr-markdown hr { border:0; border-top:1px solid var(--pr-border); margin:24px 0 }\n.pr-markdown ul,.pr-markdown ol { padding-left:24px }\n.pr-markdown li+li { margin-top:6px }\n.pr-table-scroll { max-width:100%; overflow:auto }\n.pr-table table { border-collapse:collapse; min-width:100%; font-size:13px }\n.pr-table caption { text-align:left; font-size:12px; color:var(--pr-muted); padding:8px 12px }\n.pr-table th,.pr-table td { padding:12px; text-align:left; border-bottom:1px solid var(--pr-border); vertical-align:top; white-space:pre-wrap; overflow-wrap:anywhere; min-width:90px; max-width:400px }\n.pr-table th { font-weight:500; color:var(--pr-muted) }\n.pr-table th button { position:relative; font-weight:500; padding:0; text-align:inherit; border:0; background:transparent; border-radius:0 }\n.pr-table th.pr-numeric { text-align:right }\n.pr-sort-indicator { position:absolute; left:calc(100% + 3px); top:0; font-size:11px; line-height:inherit }\n.pr-table tbody tr:hover { background:var(--pr-soft) }\n.pr-table td.pr-numeric { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap }\n.pr-table td[data-cell-null=true] { color:var(--pr-muted) }\n.pr-pagination { display:flex; gap:12px; align-items:center; justify-content:flex-end; flex-wrap:wrap; margin-top:12px; font-size:12px }\n.pr-diagnostics { margin:0 0 28px; padding:16px; background:var(--pr-soft); border-radius:10px; font-size:13px }\n.pr-diagnostics h2 { font-size:14px; margin:0 }\n.pr-diagnostics ul { padding-left:20px }\n.pr-legend { display:flex; flex-wrap:wrap; gap:8px 16px; margin:8px 0 0; justify-content:center }\n.pr-legend button { display:flex; align-items:center; gap:7px; font-size:12px; border:0; padding:4px 0; background:transparent }\n.pr-legend button[aria-pressed=false] { opacity:.5; text-decoration:line-through }\n.pr-swatch { display:inline-block; width:9px; height:9px; border-radius:50%; flex-shrink:0 }\n.pr-chart { margin:0; width:100%; min-width:0; height:320px }\n.pr-chart svg { overflow:visible }\n.pr-chart-group+.pr-chart-group { margin-top:24px }\n.pr-chart .recharts-cartesian-axis-tick-value { font-variant-numeric:tabular-nums }\n.pr-tooltip { padding:10px 13px; border:1px solid var(--pr-border); border-radius:10px; background:var(--pr-bg); color:var(--pr-text); font-size:12px; box-shadow:0 4px 18px #0001; max-width:min(420px,80vw) }\n.pr-tooltip dl { margin:5px 0 0 }\n.pr-tooltip dl>div { display:flex; flex-wrap:wrap; justify-content:space-between; gap:6px 20px }\n.pr-tooltip dt { color:var(--pr-muted) }\n.pr-tooltip dd { margin:0; font-variant-numeric:tabular-nums; overflow-wrap:anywhere }\n\n.pr-cell-toolbar { position:absolute; top:0; right:0; display:flex; align-items:center; gap:4px; z-index:2 }\n.pr-block-metric>.pr-cell-toolbar { top:12px; right:12px }\n.pr-block-metric>h2,.pr-block-chart>h2 { padding-right:32px }\n.pr-block-markdown .pr-markdown>:first-child { padding-right:40px }\n.pr-reader[data-mode=interactive] .pr-block-table { padding-top:30px }\n.pr-block-source>h2 { padding-right:40px }\n.pr-reader .pr-icon-button { display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; padding:5px; border:0; background:transparent; color:var(--pr-muted); border-radius:6px; flex-shrink:0 }\n.pr-reader .pr-icon-button:hover { background:var(--pr-soft); color:var(--pr-text) }\n.pr-icon-button svg { width:18px; height:18px; display:block }\n.pr-copy,.pr-cell-menu { position:relative; display:inline-flex; align-items:center }\n.pr-copy-status { position:absolute; right:0; top:calc(100% + 4px); white-space:nowrap; font-size:12px; background:var(--pr-bg); color:var(--pr-text); border-radius:5px }\n.pr-copy-status:not(:empty) { padding:4px 8px; border:1px solid var(--pr-border); box-shadow:0 2px 8px #0001 }\n.pr-cell-menu-popup { position:absolute; right:0; top:calc(100% + 4px); min-width:136px; padding:4px; background:var(--pr-bg); border:1px solid var(--pr-border); border-radius:10px; box-shadow:0 6px 24px #0002; z-index:3 }\n.pr-cell-menu-popup>button { display:block; width:100%; border:0; border-radius:6px; text-align:left; font-size:13px; padding:8px 12px; white-space:nowrap }\n.pr-cell-menu-popup>button[aria-disabled=true] { color:var(--pr-muted); cursor:not-allowed }\n.pr-cell-menu-popup>button small { display:block; font-size:12px; font-weight:normal }\n.pr-source-dialog,.pr-dialog { color:var(--pr-text); background:var(--pr-bg); border:1px solid var(--pr-border); border-radius:24px; width:min(800px,calc(100vw - 48px)); max-width:none; max-height:min(760px,calc(100dvh - 48px)); margin:auto; padding:0; box-shadow:0 18px 70px #0003; font:14px/1.6 system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif; overflow:hidden }\n.pr-source-dialog[open],.pr-dialog[open] { display:flex; flex-direction:column }\n.pr-source-dialog-shell { display:flex; flex-direction:column; min-height:0; width:100% }\n.pr-reader .pr-source-dialog-context { font-size:13px; color:var(--pr-muted); margin:4px 0 0 }\n.pr-source-dialog::backdrop,.pr-dialog::backdrop { background:#0005 }\n.pr-source-dialog-header,.pr-dialog-header { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:20px 24px 4px; flex-shrink:0 }\n.pr-source-dialog .pr-source-dialog-title,.pr-dialog-header h2 { font-size:24px; font-weight:500; margin:0 }\n.pr-reader .pr-source-dialog-close { width:32px; height:32px; border:0; padding:6px; background:transparent; color:var(--pr-muted); flex-shrink:0 }\n.pr-source-dialog-close svg { width:18px; height:18px }\n.pr-source-tabs { display:flex; gap:28px; padding:0 24px; border-bottom:1px solid var(--pr-border); flex-shrink:0 }\n.pr-reader .pr-source-tab { padding:14px 0; border:0; border-bottom:2px solid transparent; border-radius:0; background:transparent; color:var(--pr-muted); font-size:14px }\n.pr-reader .pr-source-tab[aria-selected=true] { color:var(--pr-text); border-bottom-color:var(--pr-text) }\n.pr-source-dialog-body { padding:20px 24px 24px; overflow:auto; min-height:0; overscroll-behavior:contain }\n.pr-source-overview { font-size:14px; min-width:0 }\n.pr-source-overview-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px 24px; margin:0 0 24px }\n.pr-source-overview-grid>div { min-width:0 }\n.pr-source-overview-grid dt { color:var(--pr-muted); font-size:13px; margin:0 0 4px }\n.pr-source-overview-label { color:var(--pr-muted); font-size:13px; font-weight:400; margin:0 0 4px }\n.pr-source-overview dd { margin:0; overflow-wrap:anywhere }\n.pr-source-field-section { margin-bottom:24px }\n.pr-source-fields { width:100%; border-collapse:collapse; font-size:13px; text-align:left }\n.pr-source-fields th,.pr-source-fields td { padding:8px 12px; border-bottom:1px solid var(--pr-border); vertical-align:top }\n.pr-source-fields th { color:var(--pr-muted); font-weight:500 }\n.pr-source-list { display:flex; flex-direction:column; gap:24px }\n.pr-source-reading-list { margin:12px 0 0; padding-left:20px; list-style:disc }\n.pr-source-reading-list>li { padding:4px 0; margin:0 0 8px; overflow-wrap:anywhere }\n.pr-source-reading-list>li>strong { font-size:14px; font-weight:500 }\n.pr-reader .pr-source-reading-list p { margin:4px 0 0; font-size:13px }\n.pr-source-card { min-width:0 }\n.pr-source-card+.pr-source-card { border-top:1px solid var(--pr-border); padding-top:20px }\n.pr-source-card h3 { font-size:14px; margin:0 0 12px; font-weight:500; overflow-wrap:anywhere }\n.pr-source-semantic-group { margin-top:16px }\n.pr-source-semantic-list { display:flex; flex-wrap:wrap; gap:6px; list-style:none; padding:0; margin:4px 0 16px }\n.pr-source-semantic-list>li { border:1px solid var(--pr-border); border-radius:14px; padding:2px 8px; overflow-wrap:anywhere; max-width:100%; font-size:13px }\n.pr-reader .pr-semantic-link { font:inherit; color:var(--pr-accent); background:none; border:0; padding:0; cursor:pointer; text-align:left; overflow-wrap:anywhere; text-decoration:underline; text-underline-offset:3px }\n.pr-reader .pr-semantic-link:focus-visible { outline:2px solid var(--pr-accent); outline-offset:3px; border-radius:3px }\n.pr-source-issues { margin:12px 0 0; color:var(--pr-warning); font-size:13px }\n.pr-source-summary { margin-top:32px; padding-top:16px; border-top:1px solid var(--pr-border) }\n.pr-source-summary>summary { font-size:14px }\n.pr-source-code { display:flex; flex-direction:column; gap:20px; min-width:0 }\n.pr-source-code-snippet { min-width:0 }\n.pr-source-code-header { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:8px; margin-bottom:8px }\n.pr-source-code-header h3 { margin:0; font-size:14px; font-weight:500 }\n.pr-source-code-copy { display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size:12px; color:var(--pr-muted) }\n.pr-reader .pr-source-code-note { margin:0 0 8px; font-size:12px; color:var(--pr-muted) }\n.pr-source-code-copy button { font-size:12px }\n.pr-source-code pre { margin:0; padding:14px 16px; border:1px solid var(--pr-border); border-radius:10px; background:var(--pr-soft); max-height:420px; overflow:auto; white-space:pre; tab-size:4; user-select:text; font:12px/1.7 ui-monospace,SFMono-Regular,Consolas,monospace }\n.pr-copy-dialog { max-width:640px; padding-bottom:24px; overflow:auto }\n.pr-copy-dialog>p,.pr-copy-dialog>label { margin:16px 24px }\n.pr-copy-dialog textarea { display:block; width:calc(100% - 48px); min-height:220px; max-height:50vh; margin:16px 24px 0; padding:12px; background:var(--pr-soft); color:var(--pr-text); border:1px solid var(--pr-border); border-radius:8px; font:13px/1.65 ui-monospace,monospace; resize:vertical }\n\n.pr-chart-explorer { margin:18px 0; padding:20px; border:1px solid var(--pr-border); border-radius:12px; background:var(--pr-soft); font-size:13px; min-width:0 }\n.pr-explorer-header { display:flex; justify-content:space-between; gap:12px; align-items:flex-start }\n.pr-explorer-header h3 { margin:0 }\n.pr-explorer-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr)); gap:14px; margin:14px 0 }\n.pr-explorer-grid>label { display:flex; flex-direction:column; gap:6px; min-width:0 }\n.pr-explorer-grid select { width:100%; min-width:0 }\n.pr-explorer-fields { border:0; border-top:1px solid var(--pr-border); padding:12px 0 0; margin:16px 0 0; min-width:0 }\n.pr-explorer-fields legend { font-weight:600; padding:0 8px 0 0 }\n.pr-explorer-series { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin:8px 0 }\n.pr-explorer-series label { display:flex; align-items:center; gap:6px }\n.pr-explorer-series input { accent-color:var(--pr-accent); min-width:16px; min-height:16px }\n.pr-explorer-visible { color:var(--pr-muted) }\n.pr-explorer-footer { margin-top:16px; display:flex; justify-content:flex-end }\n.pr-host-print { display:none }\n\n.pr-host { min-width:0 }\n.pr-host-actions { display:flex; gap:10px; justify-content:flex-end; padding:12px }\nbody[data-presentation-portable] { margin:0; background:#fff }\nhtml[data-presentation-ready=true] body[data-presentation-portable] #presentation-fallback { display:none }\n@media(prefers-color-scheme:dark) {\n body[data-presentation-portable] { background:#1c1c1f }\n .pr-reader { --pr-code-keyword:#d9a0e5; --pr-code-string:#99cda7; --pr-code-number:#ebbb8a; --pr-code-function:#9bbef3; --pr-bg:#1c1c1f; --pr-soft:#262629; --pr-text:#ededed; --pr-muted:#aaa; --pr-border:#39393e; --pr-accent:#91b7f3; --pr-warning:#e3bb70; --pr-chart-1:#8cb0ed; --pr-chart-2:#dbab7f; --pr-chart-3:#8ec0a9; --pr-chart-muted:#a0a0a6; --pr-chart-grid:rgba(255,255,255,.08); --pr-chart-hover:rgba(255,255,255,.04); --pr-chart-4:#b7a0d6; --pr-chart-5:#d99bb0; --pr-chart-6:#b8be86; color-scheme:dark }\n}\n.dark .pr-reader,[data-theme=dark] .pr-reader { --pr-code-keyword:#d9a0e5; --pr-code-string:#99cda7; --pr-code-number:#ebbb8a; --pr-code-function:#9bbef3; --pr-bg:#1c1c1f; --pr-soft:#262629; --pr-text:#ededed; --pr-muted:#aaa; --pr-border:#39393e; --pr-accent:#91b7f3; --pr-warning:#e3bb70; --pr-chart-1:#8cb0ed; --pr-chart-2:#dbab7f; --pr-chart-3:#8ec0a9; --pr-chart-muted:#a0a0a6; --pr-chart-grid:rgba(255,255,255,.08); --pr-chart-hover:rgba(255,255,255,.04); --pr-chart-4:#b7a0d6; --pr-chart-5:#d99bb0; --pr-chart-6:#b8be86; color-scheme:dark }\n.light .pr-reader,[data-theme=light] .pr-reader { --pr-bg:#fff; --pr-soft:#f7f7f8; --pr-text:#242424; --pr-muted:#666; --pr-border:#e5e5e7; --pr-accent:#3567b7; --pr-warning:#805b20; --pr-chart-1:#286dee; --pr-chart-2:#ba7039; --pr-chart-3:#548878; --pr-chart-muted:#96969b; --pr-chart-grid:rgba(13,13,13,.06); --pr-chart-hover:rgba(13,13,13,.03); --pr-chart-4:#8d6cb0; --pr-chart-5:#b46379; --pr-chart-6:#727c38; color-scheme:light }\n@media(max-width:640px) {\n .pr-reader { padding:28px 20px; font-size:15px }\n .pr-reader h1 { font-size:26px }\n .pr-block-markdown h2 { font-size:20px }\n .pr-blocks { gap:26px }\n .pr-source-dialog,.pr-dialog { width:calc(100vw - 24px); max-height:calc(100dvh - 24px); border-radius:18px }\n .pr-source-dialog-header,.pr-dialog-header { padding:16px 18px 4px }\n .pr-source-tabs { padding:0 18px }\n .pr-source-dialog-body { padding:18px }\n .pr-source-overview-grid { grid-template-columns:1fr; gap:16px }\n .pr-metric-group { gap:12px }\n .pr-block-metric { padding:16px }\n .pr-metric-value { font-size:25px }\n .pr-pagination { justify-content:space-between; gap:8px }\n .pr-tooltip { max-width:80vw }\n}\n@media(pointer:coarse) { .pr-reader summary,.pr-reader button { min-height:44px } .pr-reader .pr-icon-button { width:36px } .pr-block-metric>h2,.pr-block-chart>h2 { padding-right:44px } .pr-reader select,.pr-reader textarea { font-size:16px } }\n@media print {\n .pr-host-live { display:none!important }\n .pr-host-print { display:block!important }\n html[data-presentation-ready=true] body[data-presentation-portable] #presentation-fallback,body[data-presentation-portable] #presentation-fallback { display:block!important }\n body[data-presentation-portable] #reader,.pr-interactive { display:none!important }\n .pr-reader { --pr-bg:#fff; --pr-soft:#fff; --pr-text:#111; --pr-muted:#444; --pr-border:#bbb; --pr-accent:#222; --pr-warning:#333; max-width:none; padding:0; font-size:10pt; color-scheme:light }\n .pr-blocks { display:block }\n .pr-block { border:0; padding:12px 0; border-radius:0 }\n .pr-block-markdown { max-width:none }\n .pr-block-metric>h2,.pr-block-chart>h2,.pr-block-markdown .pr-markdown>:first-child { padding-right:0 }\n .pr-source-summary::details-content { content-visibility:visible }\n .pr-source-summary>* { display:block }\n .pr-source-dialog,.pr-dialog { display:none!important }\n .pr-metric-group { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)) }\n .pr-metric-group>.pr-block-metric { min-width:0; max-width:none }\n .pr-reader[data-mode] .pr-chart-row { display:block }\n .pr-reader[data-mode] .pr-chart-row>.pr-block-chart { min-width:0; max-width:none }\n .pr-header { break-after:avoid }\n .pr-reader h1,.pr-reader h2,.pr-reader h3 { break-after:avoid }\n .pr-table-scroll { overflow:visible }\n .pr-table table { table-layout:fixed; width:100%; font-size:8pt }\n .pr-table caption { padding-left:5px; padding-right:5px }\n .pr-table th,.pr-table td { min-width:0; padding:5px; white-space:pre-wrap!important; overflow-wrap:anywhere }\n .pr-table tr { break-inside:avoid }\n .pr-table thead { display:table-header-group }\n .pr-reader pre { white-space:pre-wrap }\n}\n.pr-region-label{color:var(--pr-muted);font-size:12px;letter-spacing:.02em;margin:0!important}\n.pr-interaction-region{min-width:0}\n.pr-region-divider{border:0;border-top:1px solid var(--pr-border);margin:0;width:100%}\n@media print{.pr-region-divider{margin:20px 0}}\n.pr-interaction-header{margin-bottom:28px}.pr-interaction-header h2{margin-bottom:4px}.pr-interaction-header>.pr-muted{margin:4px 0 16px}\n.pr-filter-toolbar{border:0;padding:0;margin:0;min-width:0;display:flex;flex-wrap:wrap;gap:8px;align-items:center;position:relative;z-index:5}\n.pr-filter-menu{position:relative;min-width:0;max-width:100%}\n.pr-reader .pr-filter-trigger{display:flex;align-items:center;gap:8px;border-radius:999px;padding:5px 12px;min-height:34px;font-size:14px;line-height:22px;max-width:100%}\n.pr-filter-label{color:var(--pr-muted);flex-shrink:0}.pr-filter-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}\n.pr-filter-popup{position:absolute;top:calc(100% + 6px);left:0;width:260px;max-width:calc(100vw - 80px);padding:8px;border:1px solid var(--pr-border);border-radius:12px;background:var(--pr-bg);box-shadow:0 8px 24px #0002;z-index:10;animation:pr-filter-in .12s ease-out}\n.pr-filter-popup input{width:100%;min-width:0;padding:8px 10px;border:1px solid var(--pr-border);border-radius:7px;background:var(--pr-bg);color:var(--pr-text);font:inherit;font-size:14px;margin-bottom:6px}\n.pr-filter-options{max-height:260px;overflow-y:auto}.pr-reader .pr-filter-options button{display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:left;width:100%;border:0;border-radius:6px;padding:8px 10px;font-size:14px}\n.pr-filter-options button[aria-checked=true]{background:var(--pr-soft);font-weight:600}\n.pr-reader .pr-filter-reset{border:0;background:transparent;font-size:13px;color:var(--pr-muted)}\n.pr-reader .pr-filter-status{font-size:12px;color:var(--pr-muted);margin:12px 0 0}\n@keyframes pr-filter-in{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}\n@media(prefers-reduced-motion:reduce){.pr-filter-popup{animation:none}}\n@media(max-width:600px){.pr-filter-menu{width:100%}.pr-reader .pr-filter-trigger{width:100%;justify-content:space-between}.pr-filter-popup{width:100%;max-width:100%}}\n\n.pr-special-frame { position:relative; min-width:0; margin:0 }\n.pr-special-scroll { overflow-x:auto; padding-bottom:4px; max-width:100% }\n.pr-special-chart { display:block; color:var(--pr-text); overflow:visible; font-size:12px; font-variant-numeric:tabular-nums }\n.pr-special-chart text { fill:var(--pr-text) }\n.pr-special-chart .pr-axis-tick { fill:var(--pr-chart-muted) }\n.pr-special-chart [data-chart-mark]:focus { outline:2px solid var(--pr-accent); outline-offset:3px }\n.pr-special-tooltip { position:absolute; top:0; left:0; z-index:2; max-width:100%; pointer-events:none }\n.pr-chart-sparkline { height:128px }\n.pr-chart-role { color:var(--pr-muted); font-size:11px }\n.pr-chart-label { fill:var(--pr-text); font-size:11px }\n.pr-special-chart .pr-chart-label { paint-order:stroke; stroke:var(--pr-bg); stroke-width:3px; stroke-linejoin:round }\n.pr-color-key { display:flex; gap:12px; flex-wrap:wrap; font-size:12px; color:var(--pr-muted); margin:8px 0 }\n.pr-color-key span { display:inline-flex; align-items:center; gap:5px }\n\n\n.pr-cell-editor{border:1px solid var(--pr-border);border-radius:8px;padding:12px;margin:8px 0 16px;min-width:0;background:var(--pr-soft)}\n.pr-editor-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}.pr-cell-editor label{display:block}.pr-cell-editor textarea{display:block;width:100%;min-height:120px;resize:vertical}.pr-cell-editor input:not([type=checkbox]),.pr-report-title-editor input{display:block;width:100%;min-width:0}.pr-cell-editor button{margin:4px;padding:5px 9px}.pr-cell-editor .pr-editor-column{display:inline-flex;align-items:center;gap:6px;margin:4px 12px 4px 0}\n.pr-report-title-editor{display:block;font-weight:600}.pr-report-title-editor input{font:inherit;font-size:24px;padding:8px}\n.pr-cell-editor input,.pr-cell-editor textarea,.pr-report-title-editor input{font-family:inherit;color:var(--pr-text);background:var(--pr-bg);border:1px solid var(--pr-border);border-radius:5px;padding:6px;box-sizing:border-box}\n";
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type { TypedDataset } from '../../presentation/contracts/types.ts';
|
|
2
|
+
import type { TableSort } from './export-view.ts';
|
|
2
3
|
import { type ReaderMode } from './model.ts';
|
|
3
|
-
export declare function DatasetTable({ data, columns, mode, caption, showScope, showSelectionCount, rowIndices, filterKey, }: {
|
|
4
|
+
export declare function DatasetTable({ data, columns, mode, caption, hideCaption, showScope, showSelectionCount, rowIndices, filterKey, sort: controlledSort, onSortChange, }: {
|
|
4
5
|
data: TypedDataset;
|
|
5
6
|
columns?: string[];
|
|
6
7
|
mode: ReaderMode;
|
|
7
8
|
caption: string;
|
|
9
|
+
hideCaption?: boolean;
|
|
8
10
|
showScope?: boolean;
|
|
9
11
|
showSelectionCount?: boolean;
|
|
10
12
|
rowIndices?: readonly number[];
|
|
11
13
|
filterKey?: string;
|
|
14
|
+
sort?: TableSort;
|
|
15
|
+
onSortChange?: (sort: TableSort) => void;
|
|
12
16
|
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ToolCallBlock } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
2
|
+
export type PythonToolState = 'running' | 'succeeded' | 'failed' | 'cancelled' | 'timed-out' | 'not-started' | 'warning' | 'unknown';
|
|
3
|
+
/** Read only the frozen Harness call; never fetch results or infer execution from settlement. */
|
|
4
|
+
export declare function pythonToolModel(block: ToolCallBlock): {
|
|
5
|
+
state: PythonToolState;
|
|
6
|
+
input: string;
|
|
7
|
+
output: string | undefined;
|
|
8
|
+
code: string | undefined;
|
|
9
|
+
facts: {
|
|
10
|
+
name: string;
|
|
11
|
+
value: string;
|
|
12
|
+
}[];
|
|
13
|
+
summary: string;
|
|
14
|
+
datasources: string[] | undefined;
|
|
15
|
+
timeoutMs: number | undefined;
|
|
16
|
+
stdout: string | undefined;
|
|
17
|
+
stderr: string | undefined;
|
|
18
|
+
notices: string[];
|
|
19
|
+
fallback: string | undefined;
|
|
20
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { resourceAddress } from './navigation.ts';
|
|
2
|
+
export declare const inject: string[];
|
|
3
|
+
/** Default browser integration. Layout belongs to Harness; mutable content belongs to occurrences. */
|
|
4
|
+
export declare function installRightTabs(ctx: any, { diagnostics }?: {
|
|
5
|
+
diagnostics?: boolean | undefined;
|
|
6
|
+
}): {
|
|
7
|
+
audit: {
|
|
8
|
+
opens: never[];
|
|
9
|
+
errors: never[];
|
|
10
|
+
changes: never[];
|
|
11
|
+
};
|
|
12
|
+
pages: Map<any, any>;
|
|
13
|
+
navigate: (sessionId: any, target: any, actions?: any, automatic?: boolean, params?: undefined) => void;
|
|
14
|
+
changed: (workspaceId: any, reportId: any) => void;
|
|
15
|
+
credentials: import("../credentials/model.ts").CredentialClientModel;
|
|
16
|
+
resourceAddress: typeof resourceAddress;
|
|
17
|
+
ask: (page: any, context: any) => void;
|
|
18
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionEventWindow } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
2
|
+
import type { PresentationDelivery } from '../../presentation/receipt.ts';
|
|
3
|
+
/** Read-only Session window consumer. Initial history and replacement never navigate. */
|
|
4
|
+
export declare class LiveDeliveryObserver {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(sessionId: string, onDelivery: (delivery: PresentationDelivery) => void);
|
|
7
|
+
consume(window: SessionEventWindow, baseline?: boolean): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type SemanticRef } from '../../semantic-reference/contracts.ts';
|
|
2
|
+
export type Directory = 'datasources' | 'semantic' | 'reports';
|
|
3
|
+
export type Resource = {
|
|
4
|
+
kind: 'report';
|
|
5
|
+
workspaceId: string;
|
|
6
|
+
reportId: string;
|
|
7
|
+
buildId?: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'semantic';
|
|
10
|
+
workspaceId: string;
|
|
11
|
+
ref: SemanticRef;
|
|
12
|
+
};
|
|
13
|
+
export declare const directoryKind: (page: Directory) => string;
|
|
14
|
+
export declare const definitionId: (kind: string) => string;
|
|
15
|
+
export declare function resourceAddress(target: Resource): string;
|
|
16
|
+
export declare function parseResource(address: string): Resource;
|
|
17
|
+
export declare function canOpenResource(address: string, kind: Resource['kind']): boolean;
|