@deepseek-ai/dsh-client-ui-sidebar-documentpreview 0.1.7-alpha.2 → 0.1.7-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +45 -5
- package/README.md +12 -8
- package/README.zh.md +12 -8
- package/lib/client.excel.js +26 -14
- package/lib/client.js +81 -71
- package/lib/client.pdf.js +57 -28
- package/lib/types/client/LoadingIndicator.d.ts +4 -5
- package/lib/types/client/excel/LazyExcelBody.d.ts +2 -1
- package/lib/types/client/excel/excel.d.ts +1 -1
- package/lib/types/client/markdown/path-images.d.ts +1 -1
- package/lib/types/client/pdf/document.d.ts +1 -1
- package/lib/types/client/pdf/pdf.d.ts +4 -2
- package/lib/types/client/zoom/ZoomViewport.d.ts +2 -0
- package/package.json +20 -20
package/lib/client.pdf.js
CHANGED
|
@@ -959,7 +959,7 @@ window.__ModuleLoader__.load({
|
|
|
959
959
|
* @param pageNumber - 1-based selected page.
|
|
960
960
|
* @param canvas - canvas owned by this render only.
|
|
961
961
|
* @param signal - render lifetime.
|
|
962
|
-
* @param pixelRatio -
|
|
962
|
+
* @param pixelRatio - device pixel ratio multiplied by the settled document zoom.
|
|
963
963
|
* @param renderText - optional selectable text layer sharing this page and viewport.
|
|
964
964
|
* @returns the page's CSS dimensions after rendering completes.
|
|
965
965
|
*/
|
|
@@ -32376,7 +32376,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32376
32376
|
}
|
|
32377
32377
|
//#endregion
|
|
32378
32378
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-sidebar-documentpreview/src/client/pdf/PdfBody.module.css.mjs
|
|
32379
|
-
const css = ".E0GbtG_body{box-sizing:border-box;background:var(--dsw-alias-bg-document-preview);width:100%;min-width:100%;min-height:
|
|
32379
|
+
const css = ".E0GbtG_body{box-sizing:border-box;background:var(--dsw-alias-bg-document-preview);width:100%;min-width:100%;min-height:100%;font-family:var(--dsw-font,sans-serif);white-space:normal;flex-direction:column;gap:12px;padding:12px;display:flex;overflow:visible}[data-document-zoom-mode=fixed] .E0GbtG_body{width:max-content}.E0GbtG_page{box-sizing:border-box;width:100%;min-width:0;overflow-x:visible}.E0GbtG_placeholder{aspect-ratio:3/4;background:var(--dsw-alias-bg-skeleton);width:100%}.E0GbtG_canvas{width:100%;max-width:none;height:auto;margin-inline:auto;display:block}.E0GbtG_surface{max-width:none;box-shadow:var(--dsw-elevation-prominent);margin-inline:auto;position:relative}.E0GbtG_surface[hidden]{display:none}.E0GbtG_text{position:absolute;inset:0;overflow:clip}.E0GbtG_text .textLayer{text-align:initial;letter-spacing:normal;word-spacing:normal;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:0;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}.E0GbtG_text .textLayer[data-main-rotation=\"90\"]{transform:rotate(90deg)translateY(-100%)}.E0GbtG_text .textLayer[data-main-rotation=\"180\"]{transform:rotate(180deg)translate(-100%,-100%)}.E0GbtG_text .textLayer[data-main-rotation=\"270\"]{transform:rotate(270deg)translate(-100%)}.E0GbtG_text :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;user-select:text;position:absolute}.E0GbtG_text .textLayer>:not(.markedContent),.E0GbtG_text .markedContent span:not(.markedContent){z-index:1;--font-height:0;--scale-x:1;--rotate:0deg;font-size:calc(var(--text-scale-factor) * var(--font-height));transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}.E0GbtG_text .markedContent{display:contents}.E0GbtG_text ::selection{background:var(--dsw-alias-interactive-bg-hover-accent);color:#0000}.E0GbtG_text br::selection{background:0 0}.E0GbtG_text .textLayer .endOfContent{z-index:0;cursor:default;user-select:none;display:block;position:absolute;inset:100% 0 0}.E0GbtG_text .selecting .endOfContent{top:0}.E0GbtG_status{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;padding:10px;font-size:13px;line-height:1.5;display:flex}.E0GbtG_body .E0GbtG_status{color:var(--dsw-alias-label-document-preview)}";
|
|
32380
32380
|
const tagId = "@deepseek-ai/dsh-client-ui-sidebar-documentpreview/PdfBody.module.css";
|
|
32381
32381
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
32382
32382
|
const tag = document.createElement("style");
|
|
@@ -32388,7 +32388,6 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32388
32388
|
var PdfBody_module_css_default = {
|
|
32389
32389
|
"body": "E0GbtG_body",
|
|
32390
32390
|
"canvas": "E0GbtG_canvas",
|
|
32391
|
-
"opening": "E0GbtG_opening",
|
|
32392
32391
|
"page": "E0GbtG_page",
|
|
32393
32392
|
"placeholder": "E0GbtG_placeholder",
|
|
32394
32393
|
"status": "E0GbtG_status",
|
|
@@ -32402,7 +32401,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32402
32401
|
const FIT_WIDTH = { kind: "fit-width" };
|
|
32403
32402
|
/**
|
|
32404
32403
|
* Present a PDF with tab-local viewing preferences and component-owned rendering resources.
|
|
32405
|
-
* @param props - complete bytes
|
|
32404
|
+
* @param props - complete bytes, framework-owned tab/store/locale seats, and main-bundle loading content.
|
|
32406
32405
|
* @returns the PDF reader.
|
|
32407
32406
|
*/
|
|
32408
32407
|
function PdfBody(props) {
|
|
@@ -32412,6 +32411,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32412
32411
|
const [load, setLoad] = (0, react.useState)();
|
|
32413
32412
|
const [attempt, setAttempt] = (0, react.useState)(0);
|
|
32414
32413
|
const [pageWidth, setPageWidth] = (0, react.useState)();
|
|
32414
|
+
const [renderZoom, setRenderZoom] = (0, react.useState)(1);
|
|
32415
32415
|
const { retainTab, actions, t, ZoomViewport, zoomSurfaceClass } = props;
|
|
32416
32416
|
const preference = view.zoom ?? FIT_WIDTH;
|
|
32417
32417
|
const labels = {
|
|
@@ -32474,13 +32474,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32474
32474
|
role: "alert",
|
|
32475
32475
|
children: t("unsupported")
|
|
32476
32476
|
});
|
|
32477
|
-
if (load?.data !== data) return
|
|
32478
|
-
className: `${PdfBody_module_css_default.status} ${PdfBody_module_css_default.opening}`,
|
|
32479
|
-
role: "status",
|
|
32480
|
-
"aria-label": t("loading"),
|
|
32481
|
-
"data-document-loading": true,
|
|
32482
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" })
|
|
32483
|
-
});
|
|
32477
|
+
if (load?.data !== data) return props.loading;
|
|
32484
32478
|
if (load.kind === "failed") return (0, react_jsx_runtime.jsxs)("div", {
|
|
32485
32479
|
className: PdfBody_module_css_default.status,
|
|
32486
32480
|
role: "alert",
|
|
@@ -32502,6 +32496,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32502
32496
|
onVisible: pageVisible,
|
|
32503
32497
|
signal: tab.signal,
|
|
32504
32498
|
onWidth: index === 0 ? setPageWidth : void 0,
|
|
32499
|
+
zoom: renderZoom,
|
|
32505
32500
|
zoomSurfaceClass,
|
|
32506
32501
|
t
|
|
32507
32502
|
}, index))
|
|
@@ -32509,70 +32504,104 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32509
32504
|
return (0, react_jsx_runtime.jsx)(ZoomViewport, {
|
|
32510
32505
|
preference,
|
|
32511
32506
|
intrinsicWidth: pageWidth,
|
|
32507
|
+
horizontalInset: 24,
|
|
32512
32508
|
labels,
|
|
32513
32509
|
signal: tab.signal,
|
|
32514
32510
|
scrollportRef: props.scrollportRef,
|
|
32515
32511
|
onPreference: setPreference,
|
|
32512
|
+
onRenderZoom: setRenderZoom,
|
|
32516
32513
|
children: pages
|
|
32517
32514
|
});
|
|
32518
32515
|
}
|
|
32519
|
-
function PdfPage({ document, page, requested: initiallyRequested, onVisible, signal, onWidth, zoomSurfaceClass, t }) {
|
|
32516
|
+
function PdfPage({ document, page, requested: initiallyRequested, onVisible, signal, onWidth, zoom, zoomSurfaceClass, t }) {
|
|
32520
32517
|
const host = (0, react.useRef)(null);
|
|
32521
32518
|
const canvas = (0, react.useRef)(null);
|
|
32522
32519
|
const text = (0, react.useRef)(null);
|
|
32523
32520
|
const [width, setWidth] = (0, react.useState)();
|
|
32524
32521
|
const [requested, setRequested] = (0, react.useState)(initiallyRequested);
|
|
32522
|
+
const [visible, setVisible] = (0, react.useState)(initiallyRequested);
|
|
32523
|
+
const renderedZoom = (0, react.useRef)();
|
|
32524
|
+
const pendingRender = (0, react.useRef)(Promise.resolve());
|
|
32525
|
+
const textTask = (0, react.useRef)();
|
|
32525
32526
|
const [state, setState] = (0, react.useState)("loading");
|
|
32526
32527
|
const [failure, setFailure] = (0, react.useState)();
|
|
32527
32528
|
const [attempt, setAttempt] = (0, react.useState)(0);
|
|
32528
32529
|
(0, react.useEffect)(() => {
|
|
32529
|
-
const node = host.current;
|
|
32530
|
+
const node = state === "ready" ? canvas.current : host.current;
|
|
32530
32531
|
if (typeof IntersectionObserver === "undefined") {
|
|
32531
32532
|
setRequested(true);
|
|
32533
|
+
setVisible(true);
|
|
32532
32534
|
return;
|
|
32533
32535
|
}
|
|
32534
32536
|
let disposed = false;
|
|
32535
32537
|
const observer = new IntersectionObserver((entries) => {
|
|
32536
|
-
if (disposed
|
|
32538
|
+
if (disposed) return;
|
|
32539
|
+
const intersects = entries.some((entry) => entry.isIntersecting);
|
|
32540
|
+
setVisible(intersects);
|
|
32541
|
+
if (!intersects) return;
|
|
32537
32542
|
setRequested(true);
|
|
32538
32543
|
onVisible(page);
|
|
32539
|
-
observer.disconnect();
|
|
32540
32544
|
}, { rootMargin: "100% 0px" });
|
|
32541
32545
|
observer.observe(node);
|
|
32542
32546
|
return () => {
|
|
32543
32547
|
disposed = true;
|
|
32544
32548
|
observer.disconnect();
|
|
32545
32549
|
};
|
|
32546
|
-
}, [
|
|
32550
|
+
}, [
|
|
32551
|
+
page,
|
|
32552
|
+
onVisible,
|
|
32553
|
+
state
|
|
32554
|
+
]);
|
|
32555
|
+
(0, react.useEffect)(() => () => {
|
|
32556
|
+
textTask.current?.cancel();
|
|
32557
|
+
}, []);
|
|
32547
32558
|
(0, react.useEffect)(() => {
|
|
32548
32559
|
if (!requested) return;
|
|
32560
|
+
setFailure(void 0);
|
|
32561
|
+
if (renderedZoom.current !== void 0 && (!visible || renderedZoom.current === zoom)) return;
|
|
32549
32562
|
const node = canvas.current;
|
|
32550
32563
|
const lifetime = new AbortController();
|
|
32551
32564
|
const renderSignal = AbortSignal.any([lifetime.signal, signal]);
|
|
32552
|
-
|
|
32553
|
-
|
|
32554
|
-
|
|
32555
|
-
|
|
32556
|
-
|
|
32557
|
-
|
|
32558
|
-
|
|
32559
|
-
|
|
32560
|
-
|
|
32565
|
+
let newText;
|
|
32566
|
+
pendingRender.current = pendingRender.current.then(async () => {
|
|
32567
|
+
renderSignal.throwIfAborted();
|
|
32568
|
+
const buffer = node.ownerDocument.createElement("canvas");
|
|
32569
|
+
try {
|
|
32570
|
+
const size = await renderPdfPage(document, page, buffer, renderSignal, window.devicePixelRatio * zoom, textTask.current === void 0 ? (pdfPage, viewport) => {
|
|
32571
|
+
newText = pdfTextRenderer(text.current)(pdfPage, viewport);
|
|
32572
|
+
return newText;
|
|
32573
|
+
} : void 0);
|
|
32574
|
+
renderSignal.throwIfAborted();
|
|
32575
|
+
const context = node.getContext("2d");
|
|
32576
|
+
if (context === null) throw new Error("PDF canvas has no 2D context");
|
|
32577
|
+
node.width = buffer.width;
|
|
32578
|
+
node.height = buffer.height;
|
|
32579
|
+
node.style.setProperty("--pdf-page-width", `${size.width}px`);
|
|
32580
|
+
node.style.setProperty("--pdf-page-height", `${size.height}px`);
|
|
32581
|
+
context.drawImage(buffer, 0, 0);
|
|
32582
|
+
textTask.current ??= newText;
|
|
32583
|
+
newText = void 0;
|
|
32584
|
+
renderedZoom.current = zoom;
|
|
32561
32585
|
setWidth(size.width);
|
|
32562
32586
|
onWidth?.(size.width);
|
|
32563
32587
|
setState("ready");
|
|
32588
|
+
} finally {
|
|
32589
|
+
buffer.width = buffer.height = 0;
|
|
32590
|
+
newText?.cancel();
|
|
32564
32591
|
}
|
|
32565
|
-
}
|
|
32592
|
+
}).catch((error) => {
|
|
32566
32593
|
if (!renderSignal.aborted) setFailure({ error });
|
|
32567
32594
|
});
|
|
32568
32595
|
return () => {
|
|
32569
32596
|
lifetime.abort();
|
|
32570
|
-
|
|
32597
|
+
newText?.cancel();
|
|
32571
32598
|
};
|
|
32572
32599
|
}, [
|
|
32573
32600
|
document,
|
|
32574
32601
|
page,
|
|
32575
32602
|
requested,
|
|
32603
|
+
visible,
|
|
32604
|
+
zoom,
|
|
32576
32605
|
signal,
|
|
32577
32606
|
attempt,
|
|
32578
32607
|
onWidth
|
|
@@ -32602,7 +32631,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
32602
32631
|
className: `${PdfBody_module_css_default.surface} ${zoomSurfaceClass}`,
|
|
32603
32632
|
"data-document-zoom-surface": true,
|
|
32604
32633
|
style: { "--document-zoom-width": `${width ?? 0}px` },
|
|
32605
|
-
hidden: state !== "ready"
|
|
32634
|
+
hidden: state !== "ready",
|
|
32606
32635
|
children: [(0, react_jsx_runtime.jsx)("canvas", {
|
|
32607
32636
|
ref: canvas,
|
|
32608
32637
|
className: PdfBody_module_css_default.canvas,
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/** Shared indeterminate loading feedback for document reads and rendering. */
|
|
2
2
|
import type { ReactNode } from 'react';
|
|
3
3
|
/**
|
|
4
|
-
* @param props - localized status label
|
|
5
|
-
*
|
|
6
|
-
* @returns an animated, accessible loading status.
|
|
4
|
+
* @param props - localized status label and compact inline placement for additional pages.
|
|
5
|
+
* @returns a centered document loading status or an accessible inline spinner.
|
|
7
6
|
*/
|
|
8
|
-
export declare function LoadingIndicator({ label,
|
|
7
|
+
export declare function LoadingIndicator({ label, inline }: {
|
|
9
8
|
label: string;
|
|
10
|
-
|
|
9
|
+
inline?: boolean;
|
|
11
10
|
}): ReactNode;
|
|
12
11
|
//# sourceMappingURL=LoadingIndicator.d.ts.map
|
|
@@ -8,9 +8,10 @@ import type { ExcelLimits } from './model.ts';
|
|
|
8
8
|
export type ExcelBodyProps = DocumentPreviewProps & PropsLocale<'sidebarExcel'> & {
|
|
9
9
|
readonly limits: ExcelLimits;
|
|
10
10
|
};
|
|
11
|
-
/** Lazily loaded renderer input with the
|
|
11
|
+
/** Lazily loaded renderer input with the parser choice and main-bundle loading content. */
|
|
12
12
|
export type LoadedExcelBodyProps = ExcelBodyProps & {
|
|
13
13
|
readonly format: ExcelFormat;
|
|
14
|
+
readonly loading: ReactNode;
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Load the browser spreadsheet renderer for every registered format.
|
|
@@ -7,5 +7,5 @@ import type { LoadedExcelBodyProps } from './LazyExcelBody.tsx';
|
|
|
7
7
|
* @param props - Complete workbook bytes, limits, and locale.
|
|
8
8
|
* @returns An isolated spreadsheet surface with cancellable loading.
|
|
9
9
|
*/
|
|
10
|
-
export declare function ExcelBody({ content, format, limits, t }: LoadedExcelBodyProps): ReactNode;
|
|
10
|
+
export declare function ExcelBody({ content, format, limits, t, loading }: LoadedExcelBodyProps): ReactNode;
|
|
11
11
|
//# sourceMappingURL=excel.d.ts.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @param base - document base URI, including any deployment prefix.
|
|
4
4
|
* @param documentPath - absolute source path reported by the Host, when available.
|
|
5
5
|
* @param destination - authored Markdown image URL; query and fragment are not filename components.
|
|
6
|
-
* @returns
|
|
6
|
+
* @returns a Web or Desktop file URL, or undefined for unsupported or malformed destinations.
|
|
7
7
|
*/
|
|
8
8
|
export declare function markdownImageUrl(base: string, documentPath: string | undefined, destination: string): string | undefined;
|
|
9
9
|
//# sourceMappingURL=path-images.d.ts.map
|
|
@@ -30,7 +30,7 @@ export type RenderPdfText = (page: PDFPageProxy, viewport: PageViewport) => {
|
|
|
30
30
|
* @param pageNumber - 1-based selected page.
|
|
31
31
|
* @param canvas - canvas owned by this render only.
|
|
32
32
|
* @param signal - render lifetime.
|
|
33
|
-
* @param pixelRatio -
|
|
33
|
+
* @param pixelRatio - device pixel ratio multiplied by the settled document zoom.
|
|
34
34
|
* @param renderText - optional selectable text layer sharing this page and viewport.
|
|
35
35
|
* @returns the page's CSS dimensions after rendering completes.
|
|
36
36
|
*/
|
|
@@ -22,8 +22,10 @@ export interface PdfBodyInjected {
|
|
|
22
22
|
export type PdfBodyProps = DocumentPreviewProps & PropsLocale<'sidebarPdf'> & PropsStore<PdfStore> & PdfBodyInjected;
|
|
23
23
|
/**
|
|
24
24
|
* Present a PDF with tab-local viewing preferences and component-owned rendering resources.
|
|
25
|
-
* @param props - complete bytes
|
|
25
|
+
* @param props - complete bytes, framework-owned tab/store/locale seats, and main-bundle loading content.
|
|
26
26
|
* @returns the PDF reader.
|
|
27
27
|
*/
|
|
28
|
-
export declare function PdfBody(props: PdfBodyProps
|
|
28
|
+
export declare function PdfBody(props: PdfBodyProps & {
|
|
29
|
+
readonly loading: ReactNode;
|
|
30
|
+
}): ReactNode;
|
|
29
31
|
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -12,6 +12,8 @@ export interface ZoomViewportProps {
|
|
|
12
12
|
readonly signal: AbortSignal;
|
|
13
13
|
readonly scrollportRef: RefCallback<HTMLElement>;
|
|
14
14
|
readonly onPreference: (preference: ZoomPreference) => void;
|
|
15
|
+
/** Resolved scale after a gesture settles or fit-width measurement changes. */
|
|
16
|
+
readonly onRenderZoom?: (zoom: number) => void;
|
|
15
17
|
readonly children: ReactNode;
|
|
16
18
|
}
|
|
17
19
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-sidebar-documentpreview",
|
|
3
3
|
"description": "Extensible Sidebar previews for Office documents, spreadsheets, Markdown, code, images, PDF, HTML, and plain text",
|
|
4
|
-
"version": "0.1.7-
|
|
4
|
+
"version": "0.1.7-rc.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -62,25 +62,25 @@
|
|
|
62
62
|
"react-dom": "^18.2.0",
|
|
63
63
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
64
64
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
65
|
-
"@deepseek-ai/dsh-api-
|
|
66
|
-
"@deepseek-ai/dsh-api-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-client-locale": "0.1.7-
|
|
70
|
-
"@deepseek-ai/dsh-client-resources": "0.1.7-
|
|
71
|
-
"@deepseek-ai/dsh-client-store": "0.1.7-
|
|
72
|
-
"@deepseek-ai/dsh-client-test-runtime": "0.1.7-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-
|
|
79
|
-
"@deepseek-ai/dsh-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
65
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-api-workspace-files": "0.1.7-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-resources": "0.1.7-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-test-runtime": "0.1.7-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-dockkit": "0.1.7-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-office-to-pdf": "0.1.7-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-session": "0.1.7-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-client-ui-session": "0.1.7-rc.2"
|
|
84
84
|
},
|
|
85
85
|
"files": [
|
|
86
86
|
"lib/index.js",
|