@eddyskywalker/dsh-chatgpt-subscription 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README.md +64 -1
- package/lib/client.js +34034 -2768
- package/lib/client.js.map +1 -1
- package/lib/index.js +33214 -24259
- package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts +20 -0
- package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts.map +1 -0
- package/lib/types/client/cline-pass/ClinePassSection.d.ts +17 -0
- package/lib/types/client/cline-pass/ClinePassSection.d.ts.map +1 -0
- package/lib/types/client/cline-pass/api.d.ts +84 -0
- package/lib/types/client/cline-pass/api.d.ts.map +1 -0
- package/lib/types/client/cline-pass/locales.d.ts +1025 -0
- package/lib/types/client/cline-pass/locales.d.ts.map +1 -0
- package/lib/types/client/cline-pass/styles.d.ts +7 -0
- package/lib/types/client/cline-pass/styles.d.ts.map +1 -0
- package/lib/types/client/hub/brand-icons.d.ts +2 -2
- package/lib/types/client/hub/brand-icons.d.ts.map +1 -1
- package/lib/types/client/hub/providers.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +2 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/mermaid/renderer.d.ts +23 -0
- package/lib/types/client/mermaid/renderer.d.ts.map +1 -1
- package/lib/types/client/minimax-code/MinimaxCodeSection.d.ts.map +1 -1
- package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts +86 -0
- package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts.map +1 -0
- package/lib/types/client/minimax-code/MinimaxVideoToolView.d.ts +83 -0
- package/lib/types/client/minimax-code/MinimaxVideoToolView.d.ts.map +1 -0
- package/lib/types/client/minimax-code/VideoFormDialog.d.ts +90 -0
- package/lib/types/client/minimax-code/VideoFormDialog.d.ts.map +1 -0
- package/lib/types/client/minimax-code/VideoSettingsSections.d.ts +73 -0
- package/lib/types/client/minimax-code/VideoSettingsSections.d.ts.map +1 -0
- package/lib/types/client/minimax-code/commands-contract.d.ts +35 -0
- package/lib/types/client/minimax-code/commands-contract.d.ts.map +1 -0
- package/lib/types/client/minimax-code/document-preview.d.ts +45 -0
- package/lib/types/client/minimax-code/document-preview.d.ts.map +1 -0
- package/lib/types/client/minimax-code/locales.d.ts +206 -2
- package/lib/types/client/minimax-code/locales.d.ts.map +1 -1
- package/lib/types/client/minimax-code/styles.d.ts.map +1 -1
- package/lib/types/client/minimax-code/video-command-host.d.ts +61 -0
- package/lib/types/client/minimax-code/video-command-host.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-command.d.ts +126 -0
- package/lib/types/client/minimax-code/video-command.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-contract.d.ts +208 -0
- package/lib/types/client/minimax-code/video-contract.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-defaults-store.d.ts +61 -0
- package/lib/types/client/minimax-code/video-defaults-store.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-form-rules.d.ts +288 -0
- package/lib/types/client/minimax-code/video-form-rules.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-media.d.ts +61 -0
- package/lib/types/client/minimax-code/video-media.d.ts.map +1 -0
- package/lib/types/client/minimax-code/video-slots.d.ts +140 -0
- package/lib/types/client/minimax-code/video-slots.d.ts.map +1 -0
- package/lib/types/client/progress-updates/markdown-lite.d.ts +19 -6
- package/lib/types/client/progress-updates/markdown-lite.d.ts.map +1 -1
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/cline-pass/account-pool.d.ts +63 -0
- package/lib/types/host/cline-pass/account-pool.d.ts.map +1 -0
- package/lib/types/host/cline-pass/adapter.d.ts +49 -0
- package/lib/types/host/cline-pass/adapter.d.ts.map +1 -0
- package/lib/types/host/cline-pass/catalog.d.ts +49 -0
- package/lib/types/host/cline-pass/catalog.d.ts.map +1 -0
- package/lib/types/host/cline-pass/client.d.ts +118 -0
- package/lib/types/host/cline-pass/client.d.ts.map +1 -0
- package/lib/types/host/cline-pass/engine.d.ts +223 -0
- package/lib/types/host/cline-pass/engine.d.ts.map +1 -0
- package/lib/types/host/cline-pass/line.d.ts +55 -0
- package/lib/types/host/cline-pass/line.d.ts.map +1 -0
- package/lib/types/host/cline-pass/mapper.d.ts +112 -0
- package/lib/types/host/cline-pass/mapper.d.ts.map +1 -0
- package/lib/types/host/cline-pass/oauth.d.ts +134 -0
- package/lib/types/host/cline-pass/oauth.d.ts.map +1 -0
- package/lib/types/host/cline-pass/protocol.d.ts +186 -0
- package/lib/types/host/cline-pass/protocol.d.ts.map +1 -0
- package/lib/types/host/cline-pass/routes.d.ts +71 -0
- package/lib/types/host/cline-pass/routes.d.ts.map +1 -0
- package/lib/types/host/cline-pass/store.d.ts +97 -0
- package/lib/types/host/cline-pass/store.d.ts.map +1 -0
- package/lib/types/host/cline-pass/token-store.d.ts +168 -0
- package/lib/types/host/cline-pass/token-store.d.ts.map +1 -0
- package/lib/types/host/cline-pass/tools.d.ts +21 -0
- package/lib/types/host/cline-pass/tools.d.ts.map +1 -0
- package/lib/types/host/cline-pass/types.d.ts +168 -0
- package/lib/types/host/cline-pass/types.d.ts.map +1 -0
- package/lib/types/host/common/model-request-control.d.ts +1 -1
- package/lib/types/host/common/model-request-control.d.ts.map +1 -1
- package/lib/types/host/common/request-diagnostics.d.ts +1 -1
- package/lib/types/host/common/request-diagnostics.d.ts.map +1 -1
- package/lib/types/host/minimax-code/client.d.ts.map +1 -1
- package/lib/types/host/minimax-code/iso-bmff-duration.d.ts +84 -0
- package/lib/types/host/minimax-code/iso-bmff-duration.d.ts.map +1 -0
- package/lib/types/host/minimax-code/matrix-client.d.ts +168 -0
- package/lib/types/host/minimax-code/matrix-client.d.ts.map +1 -0
- package/lib/types/host/minimax-code/media-store.d.ts +153 -0
- package/lib/types/host/minimax-code/media-store.d.ts.map +1 -0
- package/lib/types/host/minimax-code/routes.d.ts.map +1 -1
- package/lib/types/host/minimax-code/video-history.d.ts +240 -0
- package/lib/types/host/minimax-code/video-history.d.ts.map +1 -0
- package/lib/types/host/minimax-code/video-submit-rules.d.ts +40 -0
- package/lib/types/host/minimax-code/video-submit-rules.d.ts.map +1 -0
- package/lib/types/host/minimax-code/video-tool.d.ts +757 -0
- package/lib/types/host/minimax-code/video-tool.d.ts.map +1 -0
- package/lib/types/host/progress-updates/index.d.ts +6 -0
- package/lib/types/host/progress-updates/index.d.ts.map +1 -1
- package/lib/types/host/progress-updates/projection.d.ts +214 -0
- package/lib/types/host/progress-updates/projection.d.ts.map +1 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/cline-pass-contracts.d.ts +267 -0
- package/lib/types/shared/cline-pass-contracts.d.ts.map +1 -0
- package/package.json +14 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/cline-pass/locales.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,mBAAmB,CAAA;AAE7C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwJL,CAAA;AAEV,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJL,CAAA;AAIV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cline Pass's own prefixed classes only: layout the shared `.dsha-*`
|
|
3
|
+
* vocabulary has no expression for (channel chips, the pin row, the usage
|
|
4
|
+
* grid, the history table). Everything else on the tab reuses the shared card.
|
|
5
|
+
*/
|
|
6
|
+
export declare function installClinePassStyles(): void;
|
|
7
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/client/cline-pass/styles.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAyD7C"}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* (the same principle claude-style's brand.js documents).
|
|
11
11
|
*/
|
|
12
12
|
import { type BrandMarkKey } from './brand-svg.ts';
|
|
13
|
-
export type HubProviderId = 'chatgpt' | 'antigravity' | 'command-code' | 'kimi-code' | 'workbuddy' | 'minimax-code' | 'glm-coding-plan' | 'claude' | 'ollama' | 'step-code';
|
|
13
|
+
export type HubProviderId = 'chatgpt' | 'antigravity' | 'command-code' | 'kimi-code' | 'workbuddy' | 'minimax-code' | 'glm-coding-plan' | 'claude' | 'ollama' | 'step-code' | 'cline-pass';
|
|
14
14
|
/** 一张标记的键:BRAND_MARKS 的全部键,加上本文件自带的键。 */
|
|
15
|
-
export type ProviderMarkKey = BrandMarkKey | 'glm' | 'step-code';
|
|
15
|
+
export type ProviderMarkKey = BrandMarkKey | 'glm' | 'step-code' | 'cline-pass';
|
|
16
16
|
interface ProviderBrand {
|
|
17
17
|
/** Key into BRAND_MARKS (or LOCAL_MARKS); absent for monogram-only providers. */
|
|
18
18
|
mark?: ProviderMarkKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/brand-icons.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,YAAY,EAAqB,MAAM,gBAAgB,CAAA;AAElF,MAAM,MAAM,aAAa,GACrB,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GACxD,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GACtE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/brand-icons.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,YAAY,EAAqB,MAAM,gBAAgB,CAAA;AAElF,MAAM,MAAM,aAAa,GACrB,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GACxD,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GACtE,WAAW,GAAG,YAAY,CAAA;AA6E9B,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,CAAA;AAS/E,UAAU,aAAa;IACrB,iFAAiF;IACjF,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,CAmBhE,CAAA;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUjI;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,IAAS,EAAE,EAAE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWpG;AAoBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAMtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/providers.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/providers.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAuBpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,gFAAgF;IAChF,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,aAAa,CAAA;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IACxD,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAAA;CACxD;AA4BD,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAuEzD,CAAA;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAEnF"}
|
|
@@ -9,6 +9,7 @@ import { type WorkBuddyLocaleKey } from './workbuddy/locales.ts';
|
|
|
9
9
|
import { type GlmCodingPlanLocaleKey } from './glm-coding-plan/locales.ts';
|
|
10
10
|
import { type OllamaLocaleKey } from './ollama/locales.ts';
|
|
11
11
|
import { type StepCodeLocaleKey } from './step-code/locales.ts';
|
|
12
|
+
import { type ClinePassLocaleKey } from './cline-pass/locales.ts';
|
|
12
13
|
import { type ProgressUpdatesLocaleKey } from './progress-updates/locales.ts';
|
|
13
14
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
14
15
|
/**
|
|
@@ -30,6 +31,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
30
31
|
'dsh-glm-coding-plan': GlmCodingPlanLocaleKey;
|
|
31
32
|
'dsh-ollama': OllamaLocaleKey;
|
|
32
33
|
'dsh-step-code': StepCodeLocaleKey;
|
|
34
|
+
'dsh-cline-pass': ClinePassLocaleKey;
|
|
33
35
|
'dsh-progress-updates': ProgressUpdatesLocaleKey;
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAM/D,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGtH,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGlG,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAExH,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAM/D,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGtH,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGlG,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAExH,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM5G,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAKxH,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG9G,OAAO,EAA0D,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAElI,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAElG,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG5G,OAAO,EAAiD,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAMhH,OAAO,EAA6D,KAAK,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAExI,OAAO,QAAQ,kCAAkC,CAAC;IAChD;;;;;;;OAOG;IACH,UAAU,kBAAkB;QAC1B,0BAA0B,EAAE,SAAS,CAAA;QACrC,iBAAiB,EAAE,oBAAoB,CAAA;QACvC,YAAY,EAAE,eAAe,CAAA;QAC7B,kBAAkB,EAAE,oBAAoB,CAAA;QACxC,eAAe,EAAE,iBAAiB,CAAA;QAClC,kBAAkB,EAAE,oBAAoB,CAAA;QACxC,eAAe,EAAE,kBAAkB,CAAA;QACnC,qBAAqB,EAAE,sBAAsB,CAAA;QAC7C,YAAY,EAAE,eAAe,CAAA;QAC7B,eAAe,EAAE,iBAAiB,CAAA;QAClC,gBAAgB,EAAE,kBAAkB,CAAA;QACpC,sBAAsB,EAAE,wBAAwB,CAAA;KACjD;CACF;AAED,eAAO,MAAM,MAAM,UAQlB,CAAA;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA0M9C"}
|
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 判断一个 `<code>` 是不是要渲染的 mermaid 代码块。
|
|
3
|
+
*
|
|
4
|
+
* 判据按优先级排列,命中即返回:
|
|
5
|
+
* 1. `<code>` 自身或祖先带 mermaid 类;
|
|
6
|
+
* 2. 平台代码块 banner 上的语言标签等于 mermaid(一票通过);
|
|
7
|
+
* 3. banner 上是别的具体语言(ts、json …)时直接否掉,绝不看正文(一票否决);
|
|
8
|
+
* 4. 语言标签读不到、或只是平台占位文案(「代码块」/「Code block」)时,退回正文判断:
|
|
9
|
+
* 剥掉 %%{init}%% / %% 注释 / frontmatter 这类前置噪音后,以 mermaid 图型关键字开头即命中。
|
|
10
|
+
*
|
|
11
|
+
* 第 4 条只在「拿不到具体语言」时启用:一个标了 ts、正文里出现 graph 字样的块不该被当成
|
|
12
|
+
* mermaid —— 它在第 3 条就被否掉了。占位符之所以等同于「没标签」,是因为 mermaid 不在
|
|
13
|
+
* highlighter 的语言表里,主聊天区显示的就是占位文案,而不是 "mermaid"。
|
|
14
|
+
* 不用 mermaid.detectType 做判据 —— 实测它在未加载的图型上会抛 UnknownDiagramError,连
|
|
15
|
+
* flowchart 都抛,靠不住。
|
|
16
|
+
*
|
|
17
|
+
* @param codeEl - 待判定的 `<code>` 元素。
|
|
18
|
+
* @returns 需要渲染时的宿主容器与源码;不是 mermaid 代码块时返回 null。
|
|
19
|
+
*/
|
|
20
|
+
export declare function findMermaidCandidate(codeEl: HTMLElement): {
|
|
21
|
+
host: HTMLElement;
|
|
22
|
+
code: string;
|
|
23
|
+
} | null;
|
|
1
24
|
export declare function scanAndRenderMermaid(): void;
|
|
2
25
|
export declare function setupMermaidObserver(): () => void;
|
|
3
26
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/client/mermaid/renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/client/mermaid/renderer.ts"],"names":[],"mappings":"AA6PA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA0BpG;AAqGD,wBAAgB,oBAAoB,IAAI,IAAI,CAY3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CA+DjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimaxCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxCodeSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"MinimaxCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxCodeSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,4BAA4B,CAAA;AAYnC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK/E;AAED,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwfhG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 右侧栏里的视频渲染器:把工作区里的一个 mp4/webm/mov/m4v 播成一段视频。
|
|
3
|
+
*
|
|
4
|
+
* ## 它是怎么被选中的
|
|
5
|
+
*
|
|
6
|
+
* 两个注册各管一半,缺一不可(形状照抄宿主
|
|
7
|
+
* `ui-sidebar-documentpreview/src/client/image/index.ts`):
|
|
8
|
+
*
|
|
9
|
+
* 1. `ctx.documentPreviews.register(…)` 声明「mp4 等后缀归我」;
|
|
10
|
+
* `priority: 'extension'` 让外部实现排在内置实现之前
|
|
11
|
+
* (`document/registry.ts` 的排序规则:档位 → 后缀长度 → 注册先后)。
|
|
12
|
+
* 2. `sidebar.right.tab.document` 的 keyed 槽用**同一个 id** 注册正文。
|
|
13
|
+
* 侧边栏按地址选渲染器,选中谁就渲染谁的 keyed 槽。
|
|
14
|
+
*
|
|
15
|
+
* `binaryExtensions` 必须与 `extensions` 是同一组后缀:`register` 会拒绝
|
|
16
|
+
* `binaryExtensions` 里出现在 `extensions` 之外的项。
|
|
17
|
+
*
|
|
18
|
+
* ## 字节从哪来:宿主读好的那一段
|
|
19
|
+
*
|
|
20
|
+
* 定义声明的是 `loading: 'bytes-complete'`,所以**宿主替这个实现把整段文件读
|
|
21
|
+
* 出来**,再通过 keyed 槽的 `content` 交下来——与内置的图像渲染器同一条路
|
|
22
|
+
* (宿主 `ui-sidebar-documentpreview/src/client/TextPreview.tsx`:
|
|
23
|
+
* `content = { kind: 'bytes', data }`)。
|
|
24
|
+
*
|
|
25
|
+
* 这里**不再自己读一遍**,理由有三:
|
|
26
|
+
*
|
|
27
|
+
* - 自己读要把同一段字节在 RPC 上再传一次,视频动辄几十 MB;
|
|
28
|
+
* - 宿主读的那一份带着它自己的整文件上限与失败文案,读一次就够;
|
|
29
|
+
* - 两个快照可能不是同一个文件版本,屏幕上会是一段旧片子。
|
|
30
|
+
*
|
|
31
|
+
* 之前这里自己读远端(`ctx.remote.workspaceFiles.readBytes`),而那条远端
|
|
32
|
+
* **不抛异常**:它把结果装成 `{ ok, value }` / `{ ok, error }`。于是字节永远
|
|
33
|
+
* 是 `undefined`,视频台就一直停在「正在读取视频」,右侧栏也放不出画面。
|
|
34
|
+
*
|
|
35
|
+
* ## 为什么和对话流卡片长得一样
|
|
36
|
+
*
|
|
37
|
+
* 两处共用 `.dshm-video-stage` 与 `useObjectUrl`:视频台是**同一个东西的两个尺寸**,
|
|
38
|
+
* 差别只有容器宽度。侧边栏多一行安静的元数据(文件名 + 体积),因为这里的视频台
|
|
39
|
+
* 是全尺寸的,下面空着反而显眼。
|
|
40
|
+
*
|
|
41
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/MinimaxVideoDocumentBody
|
|
42
|
+
*/
|
|
43
|
+
import { type ReactNode } from 'react';
|
|
44
|
+
import { type MinimaxCodeLocaleKey } from './locales.ts';
|
|
45
|
+
/**
|
|
46
|
+
* 宿主下发的那份内容,这里只认 `bytes` 一支。
|
|
47
|
+
*
|
|
48
|
+
* 宿主的内容是一个三分支的并集(文本 / 字节 / 渲染器自管),但视频只可能落在
|
|
49
|
+
* `bytes` 一支上;其余分支对这个渲染器没有意义,所以这里只声明用到的那一支。
|
|
50
|
+
*/
|
|
51
|
+
export interface DocumentContentLike {
|
|
52
|
+
/** 内容形态;视频只认 `bytes`。 */
|
|
53
|
+
readonly kind?: string;
|
|
54
|
+
/** `bytes` 一支的整段字节。 */
|
|
55
|
+
readonly data?: Uint8Array;
|
|
56
|
+
}
|
|
57
|
+
/** 本渲染器真正读到的 props(只声明用到的字段,理由同对话流卡片)。 */
|
|
58
|
+
export interface MinimaxVideoDocumentBodyProps {
|
|
59
|
+
/** 页签的内容地址:`dsh-resource://file/session/<sessionId>/<path>`。 */
|
|
60
|
+
readonly resourceAddress?: string | undefined;
|
|
61
|
+
/** 宿主读好的内容;`bytes` 一支带整段字节。 */
|
|
62
|
+
readonly content?: DocumentContentLike | undefined;
|
|
63
|
+
/** 命名空间化的翻译;缺席时用本文件的中文字典兜底。 */
|
|
64
|
+
readonly t?: ((key: MinimaxCodeLocaleKey) => string) | undefined;
|
|
65
|
+
/** 兼容槽位交来的其余座位,本视图不读。 */
|
|
66
|
+
readonly [key: string]: unknown;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 一个文件地址里的会话与路径。
|
|
70
|
+
*
|
|
71
|
+
* 只认 `session` 作用域:`absolute` 地址没有会话,宿主读那一段时需要会话身份,
|
|
72
|
+
* 所以那种地址这里当作「没有可读的文件」,由视频台画占位块。
|
|
73
|
+
* @param address - `dsh-resource://file/…` 地址。
|
|
74
|
+
* @returns 会话 id 与路径;不是会话地址时 undefined。
|
|
75
|
+
*/
|
|
76
|
+
export declare function sessionFileOf(address: string | undefined): {
|
|
77
|
+
readonly sessionId: string;
|
|
78
|
+
readonly path: string;
|
|
79
|
+
} | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* 侧边栏视频正文。
|
|
82
|
+
* @param props - 地址、宿主下发的内容与文案。
|
|
83
|
+
* @returns 16:9 视频台与下方一行元数据。
|
|
84
|
+
*/
|
|
85
|
+
export declare function MinimaxVideoDocumentBody(props: MinimaxVideoDocumentBodyProps): ReactNode;
|
|
86
|
+
//# sourceMappingURL=MinimaxVideoDocumentBody.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinimaxVideoDocumentBody.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoDocumentBody.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAM,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAI5D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED,0CAA0C;AAC1C,MAAM,WAAW,6BAA6B;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAClD,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAChE,yBAAyB;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAOD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAU5H;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,SAAS,CAwBxF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `minimax_generate_video` 在对话流里的工具卡片。
|
|
3
|
+
*
|
|
4
|
+
* ## 解剖结构照抄同一仓库的生图卡片
|
|
5
|
+
*
|
|
6
|
+
* 状态点 + 标题 + 摘要 + 媒体区,与 `src/client/CodexImageToolView.tsx` 一字不差的
|
|
7
|
+
* 骨架(`.dsh-codex-image-tool` 那一族)。同一个对话里两张卡片是**同一种东西**:
|
|
8
|
+
* 一条发丝线、8px 圆角、13px 标题、8px 状态点。差别只在媒体区——那边是图片格,
|
|
9
|
+
* 这边是 16:9 的视频台。
|
|
10
|
+
*
|
|
11
|
+
* ## 三个阶段都要画
|
|
12
|
+
*
|
|
13
|
+
* `tool.call.toolview` 交来的 `block` 是阶段相关的:
|
|
14
|
+
* - `phase: 'preparing'` —— 参数还在流式生成,结果无从谈起;
|
|
15
|
+
* - `phase: 'start'` —— 参数完整,上游还在生成(**进行中**,视频台空着);
|
|
16
|
+
* - `'kind' in block` —— 已结算,`isError` 决定成功还是失败。
|
|
17
|
+
*
|
|
18
|
+
* 判断写法与生图卡片同款(`'kind' in block`),因为要面对的正是同一批阶段形状。
|
|
19
|
+
*
|
|
20
|
+
* ## 数据只来自 meta
|
|
21
|
+
*
|
|
22
|
+
* 视频路径在 `ToolResultNode.meta`(宿主写的 `output.presentationMeta`)里。工具的
|
|
23
|
+
* 结构化 `value` 不随会话日志持久化,所以这里**不读 `value`**,也不读结果正文
|
|
24
|
+
* 里的自然语言——读不到 meta 就画占位块,卡片照常显示标题与状态。
|
|
25
|
+
*
|
|
26
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/MinimaxVideoToolView
|
|
27
|
+
*/
|
|
28
|
+
import { type ReactNode } from 'react';
|
|
29
|
+
import type { ContentBlock } from '@deepseek-ai/dsh-client-connection/client';
|
|
30
|
+
import { type MinimaxCodeLocaleKey } from './locales.ts';
|
|
31
|
+
import { type ReadVideoBytes } from './video-contract.ts';
|
|
32
|
+
/**
|
|
33
|
+
* 本卡片真正读到的 props。
|
|
34
|
+
*
|
|
35
|
+
* 不写 `PropsRuntime<'tool.call.toolview'>`:那个 owner 面由 ui-tool 合并,写宽一点
|
|
36
|
+
* 就把本插件的一个编辑器面变成对另一个包的编译期依赖。这里只声明真正用到的字段,
|
|
37
|
+
* 同时让这份视图在任何场合(jsdom 测试、故事预览)都能直接渲染。
|
|
38
|
+
*/
|
|
39
|
+
export interface MinimaxVideoToolViewProps {
|
|
40
|
+
/** 当前阶段的操作块。 */
|
|
41
|
+
readonly block: MinimaxVideoBlock;
|
|
42
|
+
/** 会话工作区根;宿主不认识这个会话时缺省。 */
|
|
43
|
+
readonly cwd?: string | undefined;
|
|
44
|
+
/** 打开一个文件(会进右侧栏预览)。 */
|
|
45
|
+
readonly openFile?: ((path: string, options?: {
|
|
46
|
+
line?: number;
|
|
47
|
+
}) => void) | undefined;
|
|
48
|
+
/** 取视频字节的通道;缺席时视频台退回占位块。 */
|
|
49
|
+
readonly readVideo?: ReadVideoBytes | undefined;
|
|
50
|
+
/** 会话 id,与 `readVideo` 一起用;缺席时同样退回占位块。 */
|
|
51
|
+
readonly sessionId?: string | undefined;
|
|
52
|
+
/** 命名空间化的翻译;缺席时用本文件的中文字典兜底(jsdom 里没有 locale 服务)。 */
|
|
53
|
+
readonly t?: ((key: MinimaxCodeLocaleKey) => string) | undefined;
|
|
54
|
+
/** 兼容槽位交来的其余座位(`loadImage`、`useDisclosure` …),本视图不读。 */
|
|
55
|
+
readonly [key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
/** 三个阶段的最小公共形状。 */
|
|
58
|
+
export interface MinimaxVideoBlock {
|
|
59
|
+
/** 已结算的判别值;没有它就是在准备/进行中。 */
|
|
60
|
+
readonly kind?: string;
|
|
61
|
+
/** 已结算时:这次调用是否失败。 */
|
|
62
|
+
readonly isError?: boolean;
|
|
63
|
+
/** 结算结果的内容块;本视图只从中取一行文字摘要。 */
|
|
64
|
+
readonly content?: readonly ContentBlock[];
|
|
65
|
+
/** 参数已完整时的 JSON 文本。 */
|
|
66
|
+
readonly argsRaw?: string;
|
|
67
|
+
/** 参数视图:流式阶段给到目前已到的前缀。 */
|
|
68
|
+
readonly args?: {
|
|
69
|
+
/** 读一个字符串参数。 @param key - 参数名。 @returns 当前文本。 */
|
|
70
|
+
readonly text?: (key: string) => unknown;
|
|
71
|
+
};
|
|
72
|
+
/** 已结算时的结构化事实。 */
|
|
73
|
+
readonly meta?: unknown;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 一张视频工具卡片。
|
|
77
|
+
* @param props - 阶段块、工作区根、打开/取字节通道与文案。
|
|
78
|
+
* @returns 卡片。
|
|
79
|
+
*/
|
|
80
|
+
export declare function MinimaxVideoToolView(props: MinimaxVideoToolViewProps): React.JSX.Element;
|
|
81
|
+
/** 供槽位注册处收窄的组件类型别名。 */
|
|
82
|
+
export type MinimaxVideoToolViewComponent = (props: MinimaxVideoToolViewProps) => ReactNode;
|
|
83
|
+
//# sourceMappingURL=MinimaxVideoToolView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinimaxVideoToolView.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoToolView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAM,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAEc,KAAK,cAAc,EACvC,MAAM,qBAAqB,CAAA;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACrF,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAC/C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oDAAoD;IACpD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAChE,wDAAwD;IACxD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAC1C,uBAAuB;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,iDAAiD;QACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;KACzC,CAAA;IACD,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2CxF;AAiJD,uBAAuB;AACvB,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,yBAAyB,KAAK,SAAS,CAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/video` 的参数弹窗:把「有哪些参数」和「哪些组合合法」一次讲清楚。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么是一个自建弹窗,而不是宿主的 popupSelect
|
|
5
|
+
*
|
|
6
|
+
* 宿主的 popupSelect 只有 `options()` 与 `onSelect()`(`ui-commands/src/client/
|
|
7
|
+
* contract.ts:64-75`),**单选**,装不下「提示词 + 模型 + 比例 + 时长 + 分辨率 +
|
|
8
|
+
* 四类参考文件 + 水印」。而 `ActionSpec.run(session)` 的契约明写它「不提交任何
|
|
9
|
+
* 东西」,所以命令自己也发不出去。`/video` 因此是两级:popupSelect 给预设档
|
|
10
|
+
* (见 `video-command.ts`),「自定义…」这一档打开本组件。
|
|
11
|
+
*
|
|
12
|
+
* ## 关键行为:它**不发送**,只把参数写进输入框
|
|
13
|
+
*
|
|
14
|
+
* 这是这次入口的核心价值。视频参数有联动规则(给了首帧→比例被强制改成
|
|
15
|
+
* `adaptive`;纯文本→`adaptive` 不可选),如果直接发起生成,用户永远看不到
|
|
16
|
+
* 自己填的东西被改成了什么。所以这里只调用 `setDraft`,把
|
|
17
|
+
* {@link buildVideoDraftText} 拼出来的那段话放进输入框,剩下的交给用户。
|
|
18
|
+
*
|
|
19
|
+
* ## 弹窗怎么落地
|
|
20
|
+
*
|
|
21
|
+
* 宿主有 `@deepseek-ai/dsh-client-ui-primitives` 的 `Modal`(`Modal.tsx:48`,
|
|
22
|
+
* 内部 `createPortal(..., document.body)` 在 `:57-90`)。**本插件不依赖那个包的
|
|
23
|
+
* 运行时**(`progress-updates/markdown-lite.tsx:6` 记录了这个决定:它的 `lib`
|
|
24
|
+
* 是宿主装配产物,插件装不到),所以这里按同一形状自己 portal 到 `document.body`:
|
|
25
|
+
* 遮罩 + 居中卡片 + `role="dialog"` + `aria-modal` + Escape 关闭 + 点遮罩关闭。
|
|
26
|
+
* portal 到 body 是必须的——输入框所在的那片容器有 `overflow`,就地渲染会被裁掉。
|
|
27
|
+
*
|
|
28
|
+
* ## 键盘可达性
|
|
29
|
+
*
|
|
30
|
+
* 卡片带 `tabIndex={-1}` 并在打开时聚焦,Tab 因此从卡片内部开始按 DOM 顺序走遍
|
|
31
|
+
* 每个字段;Escape 关闭(在 `keydown` 捕获阶段处理,输入框里的 Escape 也生效);
|
|
32
|
+
* 关闭后焦点还给打开它的元素,见 {@link VideoFormDialog} 里的 `restoreFocus`。
|
|
33
|
+
*
|
|
34
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/video-form-dialog
|
|
35
|
+
*/
|
|
36
|
+
import { type MinimaxVideoModel, type MinimaxVideoRatio, type MinimaxVideoResolution, type VideoDefaults } from './video-form-rules.ts';
|
|
37
|
+
import type { MinimaxCodeLocaleKey } from './locales.ts';
|
|
38
|
+
/** 翻译函数的座位:参数化的键允许带模板参数。 */
|
|
39
|
+
export type Translate = (key: MinimaxCodeLocaleKey, params?: Record<string, string | number>) => string;
|
|
40
|
+
/** 弹窗的全部入参。 */
|
|
41
|
+
export interface VideoFormDialogProps {
|
|
42
|
+
/** 是否显示。 */
|
|
43
|
+
readonly open: boolean;
|
|
44
|
+
/** 关闭(Escape、点遮罩、取消按钮都走这里)。 */
|
|
45
|
+
readonly onClose: () => void;
|
|
46
|
+
/**
|
|
47
|
+
* 提交:把拼好的那段话交给调用方。
|
|
48
|
+
*
|
|
49
|
+
* **返回 false 表示没有填进去**(这个会话没有输入框),弹窗据此显示一句错误而
|
|
50
|
+
* 不是假装成功。弹窗自己不碰 session —— 它不知道 `setDraft` 怎么调。
|
|
51
|
+
*/
|
|
52
|
+
readonly onSubmit: (text: string) => boolean;
|
|
53
|
+
/** 初始值:设置页里的默认参数。 */
|
|
54
|
+
readonly defaults?: VideoDefaults;
|
|
55
|
+
/** 翻译函数。 */
|
|
56
|
+
readonly t: Translate;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 参数弹窗。
|
|
60
|
+
*
|
|
61
|
+
* 受控到组件内部:`/video` 只负责开与关,表单状态活在这里,关闭即丢弃——一次
|
|
62
|
+
* 生成填一次参数,没有「上次填到一半」的语义要维护。
|
|
63
|
+
*/
|
|
64
|
+
export declare function VideoFormDialog({ open, onClose, onSubmit, defaults, t }: VideoFormDialogProps): React.JSX.Element | null;
|
|
65
|
+
/** 预设档:popupSelect 的每一行,都是**实测合法**的组合。 */
|
|
66
|
+
export interface VideoPreset {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly model: MinimaxVideoModel;
|
|
69
|
+
readonly ratio: MinimaxVideoRatio | undefined;
|
|
70
|
+
readonly durationSeconds: number;
|
|
71
|
+
readonly resolution: MinimaxVideoResolution;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 预设档表。
|
|
75
|
+
*
|
|
76
|
+
* 每一行都是「模型 × 比例 × 时长 × 分辨率」的一个**实测合法**组合:
|
|
77
|
+
*
|
|
78
|
+
* - H3:4-15 秒、768P/2K;H3-Max:5-15 秒、480P/768P;Hailuo:6 或 10 秒、768P/1080P;
|
|
79
|
+
* - 比例是纯文本分支,所以 `adaptive` 一律不出现(那是首帧/参考媒体的分支才会有的值)。
|
|
80
|
+
*
|
|
81
|
+
* 时长都取各模型的下界,理由与 {@link defaultDuration} 相同:第一档应当是最便宜的
|
|
82
|
+
* 一次生成。用户要别的组合,走「自定义…」。
|
|
83
|
+
*/
|
|
84
|
+
export declare function videoPresets(t: Translate): readonly {
|
|
85
|
+
readonly preset: VideoPreset;
|
|
86
|
+
readonly label: string;
|
|
87
|
+
}[];
|
|
88
|
+
/** 默认的一档:H3 的合法下界,也就是 {@link DEFAULT_MINIMAX_VIDEO_MODEL} 自己的默认值。 */
|
|
89
|
+
export declare function defaultPreset(): VideoPreset | undefined;
|
|
90
|
+
//# sourceMappingURL=VideoFormDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoFormDialog.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/VideoFormDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,EAeL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD,4BAA4B;AAC5B,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;AAEvG,eAAe;AACf,MAAM,WAAW,oBAAoB;IACnC,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC5C,qBAAqB;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;IACjC,YAAY;IACZ,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAA;CACtB;AA4BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA6WxH;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;CAC5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAgB9G;AAED,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,WAAW,GAAG,SAAS,CAYvD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 设置页里的两个视频分区:**默认参数**与**生成历史**。
|
|
3
|
+
*
|
|
4
|
+
* 视觉语言逐条照抄 `MinimaxCodeSection.tsx` 的既有分区(`.dsha-group` /
|
|
5
|
+
* `.dsha-grouphead` / `.dsha-row` / `.dsha-muted` / `.dsha-btn`),不新增任何
|
|
6
|
+
* 颜色、字号刻度或字重。
|
|
7
|
+
*
|
|
8
|
+
* ## 一次加载只用一个加载态
|
|
9
|
+
*
|
|
10
|
+
* 历史是**列表**,所以它的加载态是骨架(`.dshm-video-skeleton` 三条灰条);
|
|
11
|
+
* 默认参数不是列表,它直接从 localStorage 同步读出来,根本没有加载态。这条是
|
|
12
|
+
* `dsh-client-ui-ux` 的硬约束:列表用骨架、其他用裸 spinner,且**不写 loading 文案**。
|
|
13
|
+
*
|
|
14
|
+
* ## 破坏性操作保留数据
|
|
15
|
+
*
|
|
16
|
+
* 读历史失败时**不清空已经拿到的行**:上一次成功的列表留在屏幕上,只在上方加一句
|
|
17
|
+
* 提示(`videoHistoryUnavailable`)。清空会让一次网络抖动看起来像「历史被删了」。
|
|
18
|
+
*
|
|
19
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/VideoSettingsSections
|
|
20
|
+
*/
|
|
21
|
+
import { type VideoDefaults } from './video-form-rules.ts';
|
|
22
|
+
import type { MinimaxCodeLocaleKey } from './locales.ts';
|
|
23
|
+
/** 翻译函数座位。 */
|
|
24
|
+
export type SectionTranslate = (key: MinimaxCodeLocaleKey, params?: Record<string, string | number>) => string;
|
|
25
|
+
/** 宿主 `GET /minimax-code/api/video-history` 的载荷。 */
|
|
26
|
+
export interface VideoHistoryDto {
|
|
27
|
+
readonly entries: readonly VideoHistoryEntryDto[];
|
|
28
|
+
readonly storagePath: string;
|
|
29
|
+
readonly encryptedAtRest: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** 一行生成记录。 */
|
|
32
|
+
export interface VideoHistoryEntryDto {
|
|
33
|
+
readonly createdAtMs: number;
|
|
34
|
+
readonly model: string;
|
|
35
|
+
readonly ratio?: string;
|
|
36
|
+
readonly durationSeconds?: number;
|
|
37
|
+
readonly videoPath: string;
|
|
38
|
+
readonly bytes: number;
|
|
39
|
+
readonly taskId: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 校验一份历史载荷。
|
|
43
|
+
*
|
|
44
|
+
* 宿主那一半可能比浏览器这一半旧(同样的「两半不同版本」问题 `line-api.ts` 开头
|
|
45
|
+
* 那一大段注释在讲),所以每一行都逐字段过一遍,坏行**丢掉**而不是让整个列表渲染成
|
|
46
|
+
* 一堆 `undefined`。
|
|
47
|
+
*
|
|
48
|
+
* @param value - 路由的 `value`。
|
|
49
|
+
* @returns 规范化后的载荷。
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseVideoHistoryDto(value: unknown): VideoHistoryDto;
|
|
52
|
+
/**
|
|
53
|
+
* 生成历史分区。
|
|
54
|
+
*
|
|
55
|
+
* 数据只来自宿主路由:浏览器侧没有任何事件能知道「刚刚生成了一段视频」——那次调用发
|
|
56
|
+
* 生在宿主的工具执行里。所以这份列表是**主动去读**的,第一次挂载读一次,用户可以
|
|
57
|
+
* 手动刷新。
|
|
58
|
+
*/
|
|
59
|
+
export declare function VideoHistorySection({ t }: {
|
|
60
|
+
readonly t: SectionTranslate;
|
|
61
|
+
}): React.JSX.Element;
|
|
62
|
+
/**
|
|
63
|
+
* 默认参数分区。
|
|
64
|
+
*
|
|
65
|
+
* 改动立即写回,不设保存按钮:这四项都只是 `/video` 表单的起手值,没有「暂存」与
|
|
66
|
+
* 「已生效」的区别要表达;一个保存按钮反而会让用户以为不点就不生效。
|
|
67
|
+
*/
|
|
68
|
+
export declare function VideoDefaultsSection({ t, initial, onSave }: {
|
|
69
|
+
readonly t: SectionTranslate;
|
|
70
|
+
readonly initial: VideoDefaults;
|
|
71
|
+
readonly onSave: (next: VideoDefaults) => boolean;
|
|
72
|
+
}): React.JSX.Element;
|
|
73
|
+
//# sourceMappingURL=VideoSettingsSections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoSettingsSections.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/VideoSettingsSections.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD,cAAc;AACd,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;AAE9G,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;CAClC;AAED,cAAc;AACd,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAiCpE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA8E9F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAC3D,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAA;CAClD,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6FpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 宿主命令契约的类型入口。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么要绕这一层
|
|
5
|
+
*
|
|
6
|
+
* 这些形状住在 `@deepseek-ai/dsh-client-ui-commands` 里,而那个包**只提供类型**给本
|
|
7
|
+
* 插件:运行时服务由宿主 web app 装配好,通过 `ctx.commandUi` 交过来。所以这里
|
|
8
|
+
* 一律 `import type`,`export type` 转发——**任何一处写成值导入,宿主的运行时就会
|
|
9
|
+
* 被打进本插件自己的 `lib/client.js`**,两个副本注册同一个服务名是比编译错误难查
|
|
10
|
+
* 得多的问题。
|
|
11
|
+
*
|
|
12
|
+
* 转发而不是在各文件里直接 import,是为了让「本插件只依赖这些类型」这件事有一个
|
|
13
|
+
* 可以一眼看完的地方。
|
|
14
|
+
*
|
|
15
|
+
* ## 依赖声明
|
|
16
|
+
*
|
|
17
|
+
* `package.json` 里它同时出现在 `peerDependencies`(宽范围,与其余六个
|
|
18
|
+
* `dsh-client-*` 相同的写法)和 `devDependencies`(`^0.2.1-rc.1`,编译期需要)。
|
|
19
|
+
* 运行时不从这里取任何东西。
|
|
20
|
+
*
|
|
21
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/commands-contract
|
|
22
|
+
*/
|
|
23
|
+
export type { ActionSpec, CommandContribution, CommandUiContract, CommandUiSpec, PopupSelectSpec, SelectOption, SelectOptionGroup, } from '@deepseek-ai/dsh-client-ui-commands/client';
|
|
24
|
+
/**
|
|
25
|
+
* 命令回调拿到的会话投影。
|
|
26
|
+
*
|
|
27
|
+
* 它来自 `@deepseek-ai/dsh-client-ui-input-trigger/client` 的
|
|
28
|
+
* `ClientSessionContext`,那个包同样只提供类型、同样不是本插件的直接依赖;而这个
|
|
29
|
+
* 形状只有一个字段,抄一行比再挂一个 peer 便宜。
|
|
30
|
+
*/
|
|
31
|
+
export interface CommandSessionContext {
|
|
32
|
+
/** 会话身份。宿主不交出 provider、也不交出 RPC —— 见 video-command.ts 顶部。 */
|
|
33
|
+
readonly sessionId: string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=commands-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-contract.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/commands-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,GAClB,MAAM,4CAA4C,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniMax 视频渲染器的实现身份与 `documentPreviews` 定义。
|
|
3
|
+
*
|
|
4
|
+
* 定义形状照抄宿主 `ui-sidebar-documentpreview/src/client/image/index.ts` 的
|
|
5
|
+
* `imageBodyDefinition`:id / extensions / binaryExtensions / priority / title /
|
|
6
|
+
* loading / wrap。**id 同时是 keyed 槽的键**——定义与正文必须用同一个字符串,
|
|
7
|
+
* 否则侧边栏选中了我们、却渲染不出正文。
|
|
8
|
+
*
|
|
9
|
+
* 这里是纯数据,不 import 任何槽位或 cordis 类型:定义要能在测试里直接断言形状,
|
|
10
|
+
* 而 `priority` / `loading` 是字符串字面量联合,写宽了编译器就抓不住笔误。
|
|
11
|
+
*
|
|
12
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/document-preview
|
|
13
|
+
*/
|
|
14
|
+
/** 本实现在文档预览系统里的身份,也是正文 keyed 槽的键。 */
|
|
15
|
+
export declare const MINIMAX_VIDEO_PREVIEW_ID = "@eddyskywalker/dsh-chatgpt-subscription/video";
|
|
16
|
+
/** 本实现认领的文件后缀。 */
|
|
17
|
+
export declare const MINIMAX_VIDEO_EXTENSIONS: readonly ["mp4", "webm", "mov", "m4v"];
|
|
18
|
+
/** 与 `DocumentPreviewDefinition` 同形的最小面(避免为一份数据依赖宿主包)。 */
|
|
19
|
+
export interface MinimaxVideoPreviewDefinition {
|
|
20
|
+
/** 唯一实现名,同时是文档槽的键。 */
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** 认领的文件后缀(不带点)。 */
|
|
23
|
+
readonly extensions: readonly string[];
|
|
24
|
+
/** 其中字节不可当文本读的后缀;**必须**是 `extensions` 的子集。 */
|
|
25
|
+
readonly binaryExtensions: readonly string[];
|
|
26
|
+
/** 外部实现优先于内置实现。 */
|
|
27
|
+
readonly priority: 'extension';
|
|
28
|
+
/** 页签上的实现名,渲染时求值。 @returns 可见名称。 */
|
|
29
|
+
readonly title: () => string;
|
|
30
|
+
/** 内容下发方式;视频要整段字节才能播。 */
|
|
31
|
+
readonly loading: 'bytes-complete';
|
|
32
|
+
/** 是否消费文档的换行偏好;视频不消费。 */
|
|
33
|
+
readonly wrap: false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 构造视频渲染器的定义。
|
|
37
|
+
*
|
|
38
|
+
* `binaryExtensions` 与 `extensions` 用同一个数组:这四个后缀的字节都不能当文本
|
|
39
|
+
* 读,`register` 也要求前者是后者的子集。
|
|
40
|
+
*
|
|
41
|
+
* @param title - 惰性求值的实现名(走本线路的 locale 命名空间)。
|
|
42
|
+
* @returns 可交给 `ctx.documentPreviews.register` 的定义。
|
|
43
|
+
*/
|
|
44
|
+
export declare function minimaxVideoPreviewDefinition(title: () => string): MinimaxVideoPreviewDefinition;
|
|
45
|
+
//# sourceMappingURL=document-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-preview.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/document-preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qCAAqC;AACrC,eAAO,MAAM,wBAAwB,kDAAkD,CAAA;AAEvF,kBAAkB;AAClB,eAAO,MAAM,wBAAwB,wCAAyC,CAAA;AAE9E,0DAA0D;AAC1D,MAAM,WAAW,6BAA6B;IAC5C,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,6BAA6B,CAUhG"}
|