@deepseek-ai/dsh-client-ui-creation-recommendations 0.0.0-stage → 0.2.2-alpha.3

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/lib/client.js ADDED
@@ -0,0 +1,896 @@
1
+ window.__ModuleLoader__.load({
2
+ id: "@deepseek-ai/dsh-client-ui-creation-recommendations",
3
+ factory: (require) => {
4
+ var module = { exports: {} };
5
+ var exports = module.exports;
6
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ let react = require("react");
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ let zod = require("zod");
10
+ let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
11
+ let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
12
+ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/experimental/client-ui-creation-recommendations/src/client/Card.module.css.mjs
13
+ const css = ".EJ_5_q_header{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;padding:12px 20px 0;font-size:12px;line-height:1.5;display:flex}.EJ_5_q_heading{align-items:center;gap:4px;display:inline-flex}.EJ_5_q_infoButton{width:28px;color:var(--dsw-alias-label-secondary);padding:0}.EJ_5_q_info{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);overflow-wrap:anywhere;margin:12px 20px 0;padding:12px;font-size:13px;line-height:1.7}.EJ_5_q_info p{margin:0}.EJ_5_q_info p+p{margin-top:4px}.EJ_5_q_info strong{font-weight:500}.EJ_5_q_phase{color:var(--dsw-alias-label-primary)}.EJ_5_q_body{padding:12px 20px 20px}.EJ_5_q_content{margin-top:12px}.EJ_5_q_contentLabel{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;display:block}.EJ_5_q_description{border-top:.5px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:16px 0 0;padding-top:12px;font-size:12px;line-height:1.6}.EJ_5_q_footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.EJ_5_q_scope{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}.EJ_5_q_actions{align-items:center;gap:8px;margin-left:auto;display:flex}.EJ_5_q_status{color:var(--dsw-alias-label-secondary);margin:12px 0 0;font-size:12px;line-height:1.6}.EJ_5_q_controls{border-top:.5px solid var(--dsw-alias-border-l1);flex-wrap:wrap;align-items:center;gap:12px;margin-top:16px;padding-top:16px;display:flex}.EJ_5_q_controls .EJ_5_q_footer{margin:0 0 0 auto}.EJ_5_q_locationRow{align-items:center;gap:8px;min-width:0;display:flex}.EJ_5_q_locationLabel{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6}.EJ_5_q_locationButton{gap:8px;font-size:13px}.EJ_5_q_locationMenu{width:264px;max-width:calc(100vw - 24px)}.EJ_5_q_locationOption{white-space:normal;flex-direction:column;gap:2px;line-height:1.5;display:flex}.EJ_5_q_locationOption>span+span{color:var(--dsw-alias-label-secondary);font-size:12px}.EJ_5_q_customLocation{flex-direction:column;flex:1 0 100%;gap:6px;min-width:0;display:flex}.EJ_5_q_customLocation textarea{box-sizing:border-box;resize:vertical;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);width:100%;min-height:72px;color:var(--dsw-alias-label-primary);font:inherit;padding:8px 10px;font-size:13px;line-height:1.7}.EJ_5_q_customLocation textarea:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.EJ_5_q_customLocation textarea::placeholder{color:var(--dsw-alias-label-secondary)}";
14
+ const tagId = "@deepseek-ai/dsh-client-ui-creation-recommendations/Card.module.css";
15
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
16
+ const tag = document.createElement("style");
17
+ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-creation-recommendations";
18
+ tag.dataset.pluginCss = tagId;
19
+ tag.textContent = css;
20
+ document.head.appendChild(tag);
21
+ }
22
+ var Card_module_css_default = {
23
+ "actions": "EJ_5_q_actions",
24
+ "body": "EJ_5_q_body",
25
+ "content": "EJ_5_q_content",
26
+ "contentLabel": "EJ_5_q_contentLabel",
27
+ "controls": "EJ_5_q_controls",
28
+ "customLocation": "EJ_5_q_customLocation",
29
+ "description": "EJ_5_q_description",
30
+ "footer": "EJ_5_q_footer",
31
+ "header": "EJ_5_q_header",
32
+ "heading": "EJ_5_q_heading",
33
+ "info": "EJ_5_q_info",
34
+ "infoButton": "EJ_5_q_infoButton",
35
+ "locationButton": "EJ_5_q_locationButton",
36
+ "locationLabel": "EJ_5_q_locationLabel",
37
+ "locationMenu": "EJ_5_q_locationMenu",
38
+ "locationOption": "EJ_5_q_locationOption",
39
+ "locationRow": "EJ_5_q_locationRow",
40
+ "phase": "EJ_5_q_phase",
41
+ "scope": "EJ_5_q_scope",
42
+ "status": "EJ_5_q_status"
43
+ };
44
+ //#endregion
45
+ //#region lib/types/client/Card.js
46
+ /** Body of a `create_personalized_page` card: location choice, creation progress, retention, undo and restore. */
47
+ const slotSchema = zod.z.enum([
48
+ "sidebar-right",
49
+ "page",
50
+ "sidebar-left"
51
+ ]);
52
+ const detailsSchema = zod.z.object({
53
+ slot: slotSchema,
54
+ initialContent: zod.z.string().optional()
55
+ });
56
+ const dataSchema = zod.z.object({
57
+ slot: slotSchema,
58
+ customLocation: zod.z.string().optional(),
59
+ bundleName: zod.z.string().optional(),
60
+ application: zod.z.enum([
61
+ "applied",
62
+ "restart-required",
63
+ "overridden",
64
+ "failed",
65
+ "cancelled"
66
+ ]).optional()
67
+ });
68
+ /** Phases with their own status copy. */
69
+ const PHASE_KEYS = [
70
+ "dismissed",
71
+ "replaced",
72
+ "creating",
73
+ "installing",
74
+ "cancelled",
75
+ "installed",
76
+ "kept",
77
+ "removed",
78
+ "failed",
79
+ "interrupted",
80
+ "unconfirmed"
81
+ ];
82
+ /** Refusal reasons with their own copy; any other reason reads as unavailable. */
83
+ const REASON_KEYS = [
84
+ "unknown",
85
+ "access-denied",
86
+ "not-live-root",
87
+ "closing",
88
+ "unavailable",
89
+ "invalid-location",
90
+ "read-only",
91
+ "source-missing"
92
+ ];
93
+ /** Application outcomes have their own copy; the phase copy of failed and cancelled describes creation instead. */
94
+ const APPLICATION_KEYS = {
95
+ "restart-required": "restart-required",
96
+ overridden: "overridden",
97
+ failed: "applicationFailed",
98
+ cancelled: "applicationCancelled"
99
+ };
100
+ function keyOf(keys, value) {
101
+ return keys.find((key) => key === value);
102
+ }
103
+ function LocationPicker({ value, disabled, onChange, t }) {
104
+ const [open, setOpen] = (0, react.useState)(false);
105
+ return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
106
+ open: open && !disabled,
107
+ portal: true,
108
+ autoFocus: true,
109
+ compact: true,
110
+ listClassName: Card_module_css_default.locationMenu,
111
+ selectedId: value,
112
+ onClose: () => {
113
+ setOpen(false);
114
+ },
115
+ onSelect: (id) => {
116
+ onChange(id);
117
+ setOpen(false);
118
+ },
119
+ items: [
120
+ "sidebar-right",
121
+ "page",
122
+ "sidebar-left",
123
+ "custom"
124
+ ].map((id) => ({
125
+ id,
126
+ label: (0, react_jsx_runtime.jsxs)("span", {
127
+ className: Card_module_css_default.locationOption,
128
+ children: [(0, react_jsx_runtime.jsx)("span", { children: t(id) }), (0, react_jsx_runtime.jsx)("span", { children: t(`${id}Hint`) })]
129
+ })
130
+ })),
131
+ anchor: (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
132
+ variant: "outline",
133
+ size: "sm",
134
+ disabled,
135
+ className: Card_module_css_default.locationButton,
136
+ "aria-label": `${t("location")}: ${t(value)}`,
137
+ "aria-haspopup": "menu",
138
+ "aria-expanded": open && !disabled,
139
+ onClick: () => {
140
+ setOpen((current) => !current);
141
+ },
142
+ children: [t(value), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 })]
143
+ })
144
+ });
145
+ }
146
+ /**
147
+ * Display creation, persistent installation, reversible removal and restoration below the frame's summary.
148
+ * @param props - card, state, actions, folded-text component and notice preference.
149
+ * @returns the card body.
150
+ */
151
+ function PageCardBody({ proposal, decision, summary, Folded, act, infoDismissed, t }) {
152
+ const details = detailsSchema.safeParse(proposal.details);
153
+ const parsed = decision === void 0 ? void 0 : dataSchema.safeParse(decision.data);
154
+ const data = parsed?.success === true ? parsed.data : void 0;
155
+ const phase = decision === void 0 ? void 0 : keyOf(PHASE_KEYS, decision.phase);
156
+ const [selected, setSelected] = (0, react.useState)();
157
+ const [custom, setCustom] = (0, react.useState)();
158
+ const [info, setInfo] = (0, react.useState)();
159
+ const noticeDismissed = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => infoDismissed.subscribe(listener), [infoDismissed]), () => infoDismissed.getSnapshot());
160
+ const infoId = (0, react.useId)();
161
+ const customId = (0, react.useId)();
162
+ const [pending, setPending] = (0, react.useState)();
163
+ const [error, setError] = (0, react.useState)();
164
+ if (!details.success) return (0, react_jsx_runtime.jsx)("div", {
165
+ className: Card_module_css_default.body,
166
+ children: summary
167
+ });
168
+ const busy = pending !== void 0;
169
+ const slot = selected !== void 0 && selected !== "custom" ? selected : data?.slot ?? details.data.slot;
170
+ const location = selected ?? (data?.customLocation === void 0 ? slot : "custom");
171
+ const customLocation = custom ?? data?.customLocation ?? "";
172
+ const offer = decision === void 0 || phase === "cancelled" || phase === "failed" || phase === "interrupted" || phase === "unconfirmed";
173
+ const infoOpen = info ?? (offer && !noticeDismissed);
174
+ const installed = phase === "installed" || phase === "kept";
175
+ const run = async (verb) => {
176
+ setPending(verb);
177
+ setError(void 0);
178
+ if (verb === "create" || verb === "dismiss") {
179
+ infoDismissed.set(true);
180
+ setInfo(false);
181
+ }
182
+ const placement = {
183
+ slot,
184
+ ...location === "custom" ? { customLocation: customLocation.trim() } : {}
185
+ };
186
+ try {
187
+ const result = await act(verb, verb === "create" || verb === "dismiss" ? placement : void 0);
188
+ if (result === void 0) setError("transport");
189
+ else if (result.status === "refused" || result.status === "unconfirmed") setError(keyOf(REASON_KEYS, result.reason) ?? "unavailable");
190
+ } catch {
191
+ setError("transport");
192
+ } finally {
193
+ setPending(void 0);
194
+ }
195
+ };
196
+ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
197
+ (0, react_jsx_runtime.jsxs)("header", {
198
+ className: Card_module_css_default.header,
199
+ children: [(0, react_jsx_runtime.jsxs)("span", {
200
+ className: Card_module_css_default.heading,
201
+ children: [t("heading"), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
202
+ label: t("creationInfo"),
203
+ side: "top",
204
+ portal: true,
205
+ disabled: infoOpen,
206
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
207
+ variant: "ghost",
208
+ size: "sm",
209
+ className: Card_module_css_default.infoButton,
210
+ "aria-label": t("creationInfo"),
211
+ "aria-expanded": infoOpen,
212
+ "aria-controls": infoId,
213
+ onClick: () => {
214
+ setInfo(!infoOpen);
215
+ if (infoOpen) infoDismissed.set(true);
216
+ },
217
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningTriangleOutlineRegular, { size: 14 })
218
+ })
219
+ })]
220
+ }), phase !== void 0 && (0, react_jsx_runtime.jsx)("span", {
221
+ role: "status",
222
+ className: Card_module_css_default.phase,
223
+ "data-phase": phase,
224
+ children: t(phase)
225
+ })]
226
+ }),
227
+ infoOpen && (0, react_jsx_runtime.jsxs)("div", {
228
+ id: infoId,
229
+ role: "note",
230
+ className: Card_module_css_default.info,
231
+ children: [
232
+ (0, react_jsx_runtime.jsx)("p", { children: t("creationMethod") }),
233
+ (0, react_jsx_runtime.jsx)("p", { children: (0, react_jsx_runtime.jsx)("strong", { children: t("creationCost") }) }),
234
+ (0, react_jsx_runtime.jsx)("p", { children: t("creationBackground") }),
235
+ data?.bundleName !== void 0 && (0, react_jsx_runtime.jsx)("p", { children: t("sourceRetained") })
236
+ ]
237
+ }),
238
+ (0, react_jsx_runtime.jsxs)("div", {
239
+ className: Card_module_css_default.body,
240
+ children: [
241
+ summary,
242
+ details.data.initialContent !== void 0 && (0, react_jsx_runtime.jsxs)("div", {
243
+ className: Card_module_css_default.content,
244
+ children: [(0, react_jsx_runtime.jsx)("span", {
245
+ className: Card_module_css_default.contentLabel,
246
+ children: t("initialContent")
247
+ }), (0, react_jsx_runtime.jsx)(Folded, {
248
+ text: details.data.initialContent,
249
+ expandLabel: t("expandContent"),
250
+ collapseLabel: t("collapseContent")
251
+ })]
252
+ }),
253
+ data?.application !== void 0 && data.application !== "applied" && phase !== "failed" && (0, react_jsx_runtime.jsx)("p", {
254
+ role: "status",
255
+ className: Card_module_css_default.status,
256
+ children: t(APPLICATION_KEYS[data.application])
257
+ }),
258
+ error !== void 0 && (0, react_jsx_runtime.jsx)("p", {
259
+ role: "alert",
260
+ className: Card_module_css_default.status,
261
+ children: t(error)
262
+ }),
263
+ offer ? (0, react_jsx_runtime.jsxs)("div", {
264
+ className: Card_module_css_default.controls,
265
+ children: [
266
+ (0, react_jsx_runtime.jsxs)("div", {
267
+ className: Card_module_css_default.locationRow,
268
+ children: [(0, react_jsx_runtime.jsx)("span", {
269
+ className: Card_module_css_default.locationLabel,
270
+ children: t("location")
271
+ }), (0, react_jsx_runtime.jsx)(LocationPicker, {
272
+ value: location,
273
+ disabled: busy,
274
+ onChange: setSelected,
275
+ t
276
+ })]
277
+ }),
278
+ location === "custom" && (0, react_jsx_runtime.jsxs)("div", {
279
+ className: Card_module_css_default.customLocation,
280
+ children: [(0, react_jsx_runtime.jsx)("label", {
281
+ htmlFor: customId,
282
+ className: Card_module_css_default.locationLabel,
283
+ children: t("customLabel")
284
+ }), (0, react_jsx_runtime.jsx)("textarea", {
285
+ id: customId,
286
+ value: customLocation,
287
+ rows: 2,
288
+ maxLength: 1e3,
289
+ disabled: busy,
290
+ placeholder: t("customPlaceholder"),
291
+ onChange: (event) => {
292
+ setCustom(event.target.value);
293
+ }
294
+ })]
295
+ }),
296
+ (0, react_jsx_runtime.jsx)("footer", {
297
+ className: Card_module_css_default.footer,
298
+ children: (0, react_jsx_runtime.jsxs)("div", {
299
+ className: Card_module_css_default.actions,
300
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
301
+ variant: "ghost",
302
+ size: "sm",
303
+ disabled: busy,
304
+ onClick: () => {
305
+ run("dismiss");
306
+ },
307
+ children: t("dismiss")
308
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
309
+ variant: "primary",
310
+ size: "sm",
311
+ disabled: busy || location === "custom" && customLocation.trim() === "",
312
+ onClick: () => {
313
+ run("create");
314
+ },
315
+ children: t(pending === "create" ? "starting" : decision === void 0 ? "create" : "retry")
316
+ })]
317
+ })
318
+ })
319
+ ]
320
+ }) : (0, react_jsx_runtime.jsxs)("p", {
321
+ className: Card_module_css_default.description,
322
+ children: [
323
+ t("location"),
324
+ " · ",
325
+ data?.customLocation ?? t(data?.slot ?? details.data.slot)
326
+ ]
327
+ }),
328
+ phase === "creating" && (0, react_jsx_runtime.jsx)("footer", {
329
+ className: Card_module_css_default.footer,
330
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
331
+ variant: "ghost",
332
+ size: "sm",
333
+ disabled: busy,
334
+ onClick: () => {
335
+ run("cancel");
336
+ },
337
+ children: t(pending === "cancel" ? "cancelling" : "cancel")
338
+ })
339
+ }),
340
+ installed && (0, react_jsx_runtime.jsxs)("footer", {
341
+ className: Card_module_css_default.footer,
342
+ children: [(0, react_jsx_runtime.jsx)("span", {
343
+ className: Card_module_css_default.scope,
344
+ children: t("scope")
345
+ }), (0, react_jsx_runtime.jsxs)("div", {
346
+ className: Card_module_css_default.actions,
347
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
348
+ variant: "ghost",
349
+ size: "sm",
350
+ disabled: busy,
351
+ onClick: () => {
352
+ run("undo");
353
+ },
354
+ children: t("undo")
355
+ }), phase !== "kept" && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
356
+ variant: "primary",
357
+ size: "sm",
358
+ disabled: busy,
359
+ onClick: () => {
360
+ run("keep");
361
+ },
362
+ children: t("keep")
363
+ })]
364
+ })]
365
+ }),
366
+ phase === "removed" && (0, react_jsx_runtime.jsx)("footer", {
367
+ className: Card_module_css_default.footer,
368
+ children: (0, react_jsx_runtime.jsx)("div", {
369
+ className: Card_module_css_default.actions,
370
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
371
+ variant: "primary",
372
+ size: "sm",
373
+ disabled: busy,
374
+ onClick: () => {
375
+ run("restore");
376
+ },
377
+ children: t(pending === "restore" ? "restoring" : "restore")
378
+ })
379
+ })
380
+ })
381
+ ]
382
+ })
383
+ ] });
384
+ }
385
+ //#endregion
386
+ //#region lib/types/client/locales.js
387
+ /** English creation and recovery copy. */
388
+ const en = {
389
+ heading: "Personalized pages",
390
+ location: "Add to",
391
+ creationInfo: "How creation works and token usage",
392
+ creationMethod: "Creator mode builds a new page you can remove at any time.",
393
+ creationCost: "Creation may take a while and use a large number of tokens.",
394
+ creationBackground: "Click Create to start in the background. You can keep chatting here.",
395
+ initialContent: "Starts with",
396
+ expandContent: "View all content",
397
+ collapseContent: "Collapse content",
398
+ "sidebar-right": "Right sidebar",
399
+ page: "Session tab",
400
+ "sidebar-left": "Global page",
401
+ custom: "Write your own",
402
+ "sidebar-rightHint": "View alongside this conversation",
403
+ pageHint: "Open beside Chat and Trajectory",
404
+ "sidebar-leftHint": "Open from the left sidebar",
405
+ customHint: "Describe where you want it",
406
+ customLabel: "Where should it appear?",
407
+ customPlaceholder: "For example, a left sidebar entry that opens a full-page calendar",
408
+ create: "Create",
409
+ starting: "Starting…",
410
+ dismiss: "Not now",
411
+ retry: "Create again",
412
+ keep: "Keep",
413
+ undo: "Undo",
414
+ restore: "Restore",
415
+ restoring: "Restoring…",
416
+ scope: "You can remove it at any time",
417
+ dismissed: "Dismissed",
418
+ replaced: "Replaced",
419
+ creating: "Creating in the background",
420
+ cancel: "Cancel creation",
421
+ cancelling: "Cancelling…",
422
+ installing: "Installing…",
423
+ sourceRetained: "Undo keeps the source files in the original workspace’s .dsh-created-plugins/ folder.",
424
+ installed: "Installed",
425
+ kept: "Kept",
426
+ removed: "Removed",
427
+ failed: "Creation failed. Try again.",
428
+ interrupted: "Creation interrupted. Try again.",
429
+ unconfirmed: "Result unconfirmed. Retry to check.",
430
+ "invalid-location": "Choose a location or describe it in up to 1,000 characters.",
431
+ "restart-required": "The change is saved. Restart DSH to apply it.",
432
+ overridden: "Another configuration overrides this change.",
433
+ cancelled: "Cancelled",
434
+ applicationFailed: "The last change did not apply. Check Plugins.",
435
+ applicationCancelled: "The last change was cancelled.",
436
+ transport: "Could not confirm the result. Reconnect and check the card before retrying.",
437
+ unknown: "This recommendation is no longer available.",
438
+ unavailable: "This action is unavailable. Check the plugin in Plugins.",
439
+ "access-denied": "This connection cannot change plugins.",
440
+ "not-live-root": "Open the original conversation to use this card.",
441
+ closing: "The creation plugin is stopping. Try again after it reloads.",
442
+ "read-only": "This Session is read-only. Switch the permission preset to create pages.",
443
+ "source-missing": "The page files are gone. Ask for a new proposal."
444
+ };
445
+ /** Chinese creation and recovery copy. */
446
+ const zh = {
447
+ heading: "个性化页面",
448
+ location: "添加到",
449
+ creationInfo: "创建方式与 token 消耗",
450
+ creationMethod: "用创造模式制作新页面,可随时移除",
451
+ creationCost: "创建可能耗时较长,并消耗大量 token",
452
+ creationBackground: "点击「创建」后在后台运行,你可以继续聊天",
453
+ initialContent: "预填内容",
454
+ expandContent: "展开内容",
455
+ collapseContent: "收起内容",
456
+ "sidebar-right": "右侧栏",
457
+ page: "会话 Tab",
458
+ "sidebar-left": "全局页面",
459
+ custom: "自行撰写",
460
+ "sidebar-rightHint": "在当前会话旁查看",
461
+ pageHint: "与「对话」「轨迹」并列",
462
+ "sidebar-leftHint": "从左侧入口打开",
463
+ customHint: "描述你希望放在哪里",
464
+ customLabel: "你希望放在哪里?",
465
+ customPlaceholder: "例如:在左侧加一个入口,打开全屏日历",
466
+ create: "创建",
467
+ starting: "开始创建…",
468
+ dismiss: "暂不需要",
469
+ retry: "重新创建",
470
+ keep: "保留",
471
+ undo: "撤销",
472
+ restore: "恢复",
473
+ restoring: "恢复中…",
474
+ scope: "可随时移除",
475
+ dismissed: "已忽略",
476
+ replaced: "已替换",
477
+ creating: "正在后台创建",
478
+ cancel: "取消创建",
479
+ cancelling: "正在取消…",
480
+ installing: "正在安装…",
481
+ sourceRetained: "撤销后,源码仍保留在原工作区的 .dsh-created-plugins/ 文件夹中",
482
+ installed: "已安装",
483
+ kept: "已保留",
484
+ removed: "已移除",
485
+ failed: "创建失败,可重试",
486
+ interrupted: "创建中断,可重试",
487
+ unconfirmed: "结果待确认,请重试",
488
+ "invalid-location": "请选择位置,或填写不超过 1,000 字的位置说明",
489
+ "restart-required": "变更已保存,重启 DSH 后生效",
490
+ overridden: "其他配置覆盖了本次变更",
491
+ cancelled: "已取消",
492
+ applicationFailed: "上一步更改未生效,请到插件页查看",
493
+ applicationCancelled: "上一步更改已取消",
494
+ transport: "暂时无法确认结果,请重新连接并查看卡片状态后再重试",
495
+ unknown: "这条推荐已不可用",
496
+ unavailable: "暂时无法执行,请到插件页面查看",
497
+ "access-denied": "当前连接没有修改插件的权限",
498
+ "not-live-root": "请打开原会话后使用这张卡片",
499
+ closing: "创建插件正在停止,请等待重新加载后再试",
500
+ "read-only": "当前会话为只读模式,创建页面需要切换权限预设",
501
+ "source-missing": "页面文件已不在,需要重新提案"
502
+ };
503
+ /** Japanese creation and recovery copy. */
504
+ const ja = {
505
+ heading: "パーソナルページ",
506
+ location: "追加先",
507
+ creationInfo: "作成の仕組みとトークン消費",
508
+ creationMethod: "クリエイターモードで新しいページを作成します。いつでも削除できます。",
509
+ creationCost: "作成には時間がかかり、大量のトークンを消費することがあります。",
510
+ creationBackground: "「作成」をクリックするとバックグラウンドで開始します。ここで会話を続けられます。",
511
+ initialContent: "初期内容",
512
+ expandContent: "内容をすべて表示",
513
+ collapseContent: "内容を折りたたむ",
514
+ "sidebar-right": "右サイドバー",
515
+ page: "セッションタブ",
516
+ "sidebar-left": "グローバルページ",
517
+ custom: "自分で指定",
518
+ "sidebar-rightHint": "この会話の横に表示",
519
+ pageHint: "チャットと軌跡の隣に開く",
520
+ "sidebar-leftHint": "左サイドバーから開く",
521
+ customHint: "配置したい場所を説明",
522
+ customLabel: "どこに表示しますか?",
523
+ customPlaceholder: "例:左サイドバーに全画面カレンダーを開く項目を追加",
524
+ create: "作成",
525
+ starting: "開始しています…",
526
+ dismiss: "今はしない",
527
+ retry: "再作成",
528
+ keep: "保持",
529
+ undo: "元に戻す",
530
+ restore: "復元",
531
+ restoring: "復元中…",
532
+ scope: "いつでも削除できます",
533
+ dismissed: "却下済み",
534
+ replaced: "置き換え済み",
535
+ creating: "バックグラウンドで作成中",
536
+ cancel: "作成をキャンセル",
537
+ cancelling: "キャンセルしています…",
538
+ installing: "インストール中…",
539
+ sourceRetained: "元に戻しても、ソースファイルは元のワークスペースの .dsh-created-plugins/ フォルダーに残ります。",
540
+ installed: "インストール済み",
541
+ kept: "保持済み",
542
+ removed: "削除済み",
543
+ failed: "作成に失敗しました。再試行してください。",
544
+ interrupted: "作成が中断されました。再試行してください。",
545
+ unconfirmed: "結果を確認できません。再試行して確認してください。",
546
+ "invalid-location": "場所を選択するか、1,000文字以内で説明してください。",
547
+ "restart-required": "変更は保存されました。適用するにはDSHを再起動してください。",
548
+ overridden: "別の設定がこの変更を上書きしています。",
549
+ cancelled: "キャンセル済み",
550
+ applicationFailed: "前回の変更は適用されませんでした。プラグイン画面で確認してください。",
551
+ applicationCancelled: "前回の変更はキャンセルされました。",
552
+ transport: "結果を確認できませんでした。再接続してカードを確認してから再試行してください。",
553
+ unknown: "この提案は利用できなくなりました。",
554
+ unavailable: "この操作は利用できません。プラグイン画面でプラグインを確認してください。",
555
+ "access-denied": "この接続ではプラグインを変更できません。",
556
+ "not-live-root": "このカードを使うには元の会話を開いてください。",
557
+ closing: "作成プラグインが停止中です。再読み込み後に再試行してください。",
558
+ "read-only": "このセッションは読み取り専用です。ページを作成するには権限プリセットを切り替えてください。",
559
+ "source-missing": "ページのファイルが見つかりません。新しい提案を依頼してください。"
560
+ };
561
+ /** Spanish creation and recovery copy. */
562
+ const es = {
563
+ heading: "Páginas personalizadas",
564
+ location: "Añadir a",
565
+ creationInfo: "Cómo funciona la creación y el uso de tokens",
566
+ creationMethod: "El modo creador crea una página nueva que puedes eliminar en cualquier momento.",
567
+ creationCost: "La creación puede tardar un rato y usar una gran cantidad de tokens.",
568
+ creationBackground: "Haz clic en Crear para empezar en segundo plano. Puedes seguir conversando aquí.",
569
+ initialContent: "Comienza con",
570
+ expandContent: "Ver todo el contenido",
571
+ collapseContent: "Contraer contenido",
572
+ "sidebar-right": "Barra lateral derecha",
573
+ page: "Pestaña de la sesión",
574
+ "sidebar-left": "Página global",
575
+ custom: "Describir otra ubicación",
576
+ "sidebar-rightHint": "Ver junto a esta conversación",
577
+ pageHint: "Abrir junto a Chat y Trayectoria",
578
+ "sidebar-leftHint": "Abrir desde la barra lateral izquierda",
579
+ customHint: "Describe dónde la quieres",
580
+ customLabel: "¿Dónde debería aparecer?",
581
+ customPlaceholder: "Por ejemplo, una entrada en la barra lateral izquierda que abra un calendario a pantalla completa",
582
+ create: "Crear",
583
+ starting: "Iniciando…",
584
+ dismiss: "Ahora no",
585
+ retry: "Crear de nuevo",
586
+ keep: "Conservar",
587
+ undo: "Deshacer",
588
+ restore: "Restaurar",
589
+ restoring: "Restaurando…",
590
+ scope: "Puedes eliminarla en cualquier momento",
591
+ dismissed: "Descartado",
592
+ replaced: "Reemplazado",
593
+ creating: "Creando en segundo plano",
594
+ cancel: "Cancelar creación",
595
+ cancelling: "Cancelando…",
596
+ installing: "Instalando…",
597
+ sourceRetained: "Deshacer conserva los archivos fuente en la carpeta .dsh-created-plugins/ del espacio de trabajo original.",
598
+ installed: "Instalado",
599
+ kept: "Conservado",
600
+ removed: "Eliminado",
601
+ failed: "La creación falló. Inténtalo de nuevo.",
602
+ interrupted: "La creación se interrumpió. Inténtalo de nuevo.",
603
+ unconfirmed: "Resultado sin confirmar. Reintenta para comprobarlo.",
604
+ "invalid-location": "Elige una ubicación o descríbela en un máximo de 1000 caracteres.",
605
+ "restart-required": "El cambio se guardó. Reinicia DSH para aplicarlo.",
606
+ overridden: "Otra configuración anula este cambio.",
607
+ cancelled: "Cancelado",
608
+ applicationFailed: "El último cambio no se aplicó. Revisa Complementos.",
609
+ applicationCancelled: "El último cambio se canceló.",
610
+ transport: "No se pudo confirmar el resultado. Vuelve a conectarte y revisa la tarjeta antes de reintentar.",
611
+ unknown: "Esta recomendación ya no está disponible.",
612
+ unavailable: "Esta acción no está disponible. Revisa el complemento en Complementos.",
613
+ "access-denied": "Esta conexión no puede modificar complementos.",
614
+ "not-live-root": "Abre la conversación original para usar esta tarjeta.",
615
+ closing: "El complemento de creación se está deteniendo. Inténtalo de nuevo cuando se recargue.",
616
+ "read-only": "Esta sesión es de solo lectura. Cambia el ajuste preestablecido de permisos para crear páginas.",
617
+ "source-missing": "Los archivos de la página ya no existen. Pide una nueva propuesta."
618
+ };
619
+ /** French creation and recovery copy. */
620
+ const fr = {
621
+ heading: "Pages personnalisées",
622
+ location: "Ajouter à",
623
+ creationInfo: "Fonctionnement de la création et consommation de jetons",
624
+ creationMethod: "Le mode Créateur crée une nouvelle page que vous pouvez supprimer à tout moment.",
625
+ creationCost: "La création peut prendre du temps et consommer un grand nombre de jetons.",
626
+ creationBackground: "Cliquez sur Créer pour démarrer en arrière-plan. Vous pouvez continuer à discuter ici.",
627
+ initialContent: "Commence avec",
628
+ expandContent: "Afficher tout le contenu",
629
+ collapseContent: "Réduire le contenu",
630
+ "sidebar-right": "Barre latérale droite",
631
+ page: "Onglet de la session",
632
+ "sidebar-left": "Page globale",
633
+ custom: "Décrire un autre emplacement",
634
+ "sidebar-rightHint": "Afficher à côté de cette conversation",
635
+ pageHint: "Ouvrir à côté de Discussion et Trajectoire",
636
+ "sidebar-leftHint": "Ouvrir depuis la barre latérale gauche",
637
+ customHint: "Décrivez où vous la voulez",
638
+ customLabel: "Où doit-elle apparaître ?",
639
+ customPlaceholder: "Par exemple, une entrée dans la barre latérale gauche qui ouvre un calendrier en pleine page",
640
+ create: "Créer",
641
+ starting: "Démarrage…",
642
+ dismiss: "Pas maintenant",
643
+ retry: "Créer à nouveau",
644
+ keep: "Conserver",
645
+ undo: "Annuler",
646
+ restore: "Restaurer",
647
+ restoring: "Restauration…",
648
+ scope: "Vous pouvez la supprimer à tout moment",
649
+ dismissed: "Ignoré",
650
+ replaced: "Remplacé",
651
+ creating: "Création en arrière-plan",
652
+ cancel: "Annuler la création",
653
+ cancelling: "Annulation…",
654
+ installing: "Installation…",
655
+ sourceRetained: "L’annulation conserve les fichiers source dans le dossier .dsh-created-plugins/ de l’espace de travail d’origine.",
656
+ installed: "Installé",
657
+ kept: "Conservé",
658
+ removed: "Supprimé",
659
+ failed: "La création a échoué. Réessayez.",
660
+ interrupted: "La création a été interrompue. Réessayez.",
661
+ unconfirmed: "Résultat non confirmé. Réessayez pour vérifier.",
662
+ "invalid-location": "Choisissez un emplacement ou décrivez-le en 1 000 caractères maximum.",
663
+ "restart-required": "La modification est enregistrée. Redémarrez DSH pour l’appliquer.",
664
+ overridden: "Une autre configuration remplace cette modification.",
665
+ cancelled: "Annulé",
666
+ applicationFailed: "La dernière modification n’a pas été appliquée. Vérifiez Plugins.",
667
+ applicationCancelled: "La dernière modification a été annulée.",
668
+ transport: "Impossible de confirmer le résultat. Reconnectez-vous et vérifiez la carte avant de réessayer.",
669
+ unknown: "Cette recommandation n’est plus disponible.",
670
+ unavailable: "Cette action n’est pas disponible. Vérifiez le plugin dans Plugins.",
671
+ "access-denied": "Cette connexion ne peut pas modifier les plugins.",
672
+ "not-live-root": "Ouvrez la conversation d’origine pour utiliser cette carte.",
673
+ closing: "Le plugin de création s’arrête. Réessayez après son rechargement.",
674
+ "read-only": "Cette session est en lecture seule. Changez le préréglage d’autorisation pour créer des pages.",
675
+ "source-missing": "Les fichiers de la page ont disparu. Demandez une nouvelle proposition."
676
+ };
677
+ /** German creation and recovery copy. */
678
+ const de = {
679
+ heading: "Personalisierte Seiten",
680
+ location: "Hinzufügen zu",
681
+ creationInfo: "So funktionieren die Erstellung und der Token-Verbrauch",
682
+ creationMethod: "Der Erstellermodus erstellt eine neue Seite, die Sie jederzeit entfernen können.",
683
+ creationCost: "Die Erstellung kann eine Weile dauern und sehr viele Token verbrauchen.",
684
+ creationBackground: "Klicken Sie auf Erstellen, um im Hintergrund zu starten. Sie können hier weiter chatten.",
685
+ initialContent: "Beginnt mit",
686
+ expandContent: "Gesamten Inhalt anzeigen",
687
+ collapseContent: "Inhalt einklappen",
688
+ "sidebar-right": "Rechte Seitenleiste",
689
+ page: "Sitzungs-Tab",
690
+ "sidebar-left": "Globale Seite",
691
+ custom: "Anderen Ort beschreiben",
692
+ "sidebar-rightHint": "Neben diesem Gespräch anzeigen",
693
+ pageHint: "Neben Chat und Ausführungsverlauf öffnen",
694
+ "sidebar-leftHint": "Über die linke Seitenleiste öffnen",
695
+ customHint: "Beschreiben Sie, wo sie erscheinen soll",
696
+ customLabel: "Wo soll sie erscheinen?",
697
+ customPlaceholder: "Zum Beispiel ein Eintrag in der linken Seitenleiste, der einen ganzseitigen Kalender öffnet",
698
+ create: "Erstellen",
699
+ starting: "Wird gestartet…",
700
+ dismiss: "Nicht jetzt",
701
+ retry: "Erneut erstellen",
702
+ keep: "Behalten",
703
+ undo: "Rückgängig machen",
704
+ restore: "Wiederherstellen",
705
+ restoring: "Wird wiederhergestellt…",
706
+ scope: "Sie können sie jederzeit entfernen",
707
+ dismissed: "Verworfen",
708
+ replaced: "Ersetzt",
709
+ creating: "Wird im Hintergrund erstellt",
710
+ cancel: "Erstellung abbrechen",
711
+ cancelling: "Wird abgebrochen…",
712
+ installing: "Wird installiert…",
713
+ sourceRetained: "Beim Rückgängigmachen bleiben die Quelldateien im Ordner .dsh-created-plugins/ des ursprünglichen Arbeitsbereichs erhalten.",
714
+ installed: "Installiert",
715
+ kept: "Behalten",
716
+ removed: "Entfernt",
717
+ failed: "Die Erstellung ist fehlgeschlagen. Versuchen Sie es erneut.",
718
+ interrupted: "Die Erstellung wurde unterbrochen. Versuchen Sie es erneut.",
719
+ unconfirmed: "Ergebnis nicht bestätigt. Versuchen Sie es erneut, um es zu prüfen.",
720
+ "invalid-location": "Wählen Sie einen Ort oder beschreiben Sie ihn in höchstens 1.000 Zeichen.",
721
+ "restart-required": "Die Änderung ist gespeichert. Starten Sie DSH neu, um sie anzuwenden.",
722
+ overridden: "Eine andere Konfiguration überschreibt diese Änderung.",
723
+ cancelled: "Abgebrochen",
724
+ applicationFailed: "Die letzte Änderung wurde nicht angewendet. Prüfen Sie Plugins.",
725
+ applicationCancelled: "Die letzte Änderung wurde abgebrochen.",
726
+ transport: "Das Ergebnis konnte nicht bestätigt werden. Verbinden Sie sich erneut und prüfen Sie die Karte, bevor Sie es erneut versuchen.",
727
+ unknown: "Diese Empfehlung ist nicht mehr verfügbar.",
728
+ unavailable: "Diese Aktion ist nicht verfügbar. Prüfen Sie das Plugin unter Plugins.",
729
+ "access-denied": "Diese Verbindung kann keine Plugins ändern.",
730
+ "not-live-root": "Öffnen Sie das ursprüngliche Gespräch, um diese Karte zu verwenden.",
731
+ closing: "Das Erstellungs-Plugin wird beendet. Versuchen Sie es nach dem Neuladen erneut.",
732
+ "read-only": "Diese Sitzung ist schreibgeschützt. Wechseln Sie die Berechtigungsvoreinstellung, um Seiten zu erstellen.",
733
+ "source-missing": "Die Seitendateien sind nicht mehr vorhanden. Fordern Sie einen neuen Vorschlag an."
734
+ };
735
+ /** Russian creation and recovery copy. */
736
+ const ru = {
737
+ heading: "Персональные страницы",
738
+ location: "Добавить в",
739
+ creationInfo: "Как работает создание и расход токенов",
740
+ creationMethod: "Режим автора создает новую страницу, которую можно удалить в любой момент.",
741
+ creationCost: "Создание может занять некоторое время и израсходовать большое количество токенов.",
742
+ creationBackground: "Нажмите «Создать», чтобы начать в фоновом режиме. Вы можете продолжать общение здесь.",
743
+ initialContent: "Начальное содержимое",
744
+ expandContent: "Показать все содержимое",
745
+ collapseContent: "Свернуть содержимое",
746
+ "sidebar-right": "Правая боковая панель",
747
+ page: "Вкладка сеанса",
748
+ "sidebar-left": "Глобальная страница",
749
+ custom: "Описать другое место",
750
+ "sidebar-rightHint": "Просмотр рядом с этим разговором",
751
+ pageHint: "Открыть рядом с «Чатом» и «Траекторией»",
752
+ "sidebar-leftHint": "Открыть с левой боковой панели",
753
+ customHint: "Опишите, где ее разместить",
754
+ customLabel: "Где она должна появиться?",
755
+ customPlaceholder: "Например, пункт на левой боковой панели, открывающий календарь на всю страницу",
756
+ create: "Создать",
757
+ starting: "Запуск…",
758
+ dismiss: "Не сейчас",
759
+ retry: "Создать снова",
760
+ keep: "Оставить",
761
+ undo: "Отменить",
762
+ restore: "Восстановить",
763
+ restoring: "Восстановление…",
764
+ scope: "Ее можно удалить в любой момент",
765
+ dismissed: "Отклонено",
766
+ replaced: "Заменено",
767
+ creating: "Создается в фоновом режиме",
768
+ cancel: "Отменить создание",
769
+ cancelling: "Отмена…",
770
+ installing: "Установка…",
771
+ sourceRetained: "При отмене исходные файлы сохраняются в папке .dsh-created-plugins/ исходного рабочего пространства.",
772
+ installed: "Установлено",
773
+ kept: "Сохранено",
774
+ removed: "Удалено",
775
+ failed: "Не удалось создать. Попробуйте еще раз.",
776
+ interrupted: "Создание прервано. Попробуйте еще раз.",
777
+ unconfirmed: "Результат не подтвержден. Повторите попытку, чтобы проверить.",
778
+ "invalid-location": "Выберите место или опишите его не более чем в 1000 символах.",
779
+ "restart-required": "Изменение сохранено. Перезапустите DSH, чтобы применить его.",
780
+ overridden: "Другая конфигурация переопределяет это изменение.",
781
+ cancelled: "Отменено",
782
+ applicationFailed: "Последнее изменение не применено. Проверьте раздел «Плагины».",
783
+ applicationCancelled: "Последнее изменение отменено.",
784
+ transport: "Не удалось подтвердить результат. Переподключитесь и проверьте карточку перед повторной попыткой.",
785
+ unknown: "Эта рекомендация больше недоступна.",
786
+ unavailable: "Это действие недоступно. Проверьте плагин в разделе «Плагины».",
787
+ "access-denied": "Это подключение не может изменять плагины.",
788
+ "not-live-root": "Откройте исходный разговор, чтобы использовать эту карточку.",
789
+ closing: "Плагин создания останавливается. Повторите попытку после его перезагрузки.",
790
+ "read-only": "Этот сеанс доступен только для чтения. Смените настройки разрешений, чтобы создавать страницы.",
791
+ "source-missing": "Файлы страницы удалены. Запросите новое предложение."
792
+ };
793
+ /** Portuguese creation and recovery copy. */
794
+ const pt = {
795
+ heading: "Páginas personalizadas",
796
+ location: "Adicionar a",
797
+ creationInfo: "Como funciona a criação e o uso de tokens",
798
+ creationMethod: "O modo criador cria uma nova página que você pode remover a qualquer momento.",
799
+ creationCost: "A criação pode levar algum tempo e usar uma grande quantidade de tokens.",
800
+ creationBackground: "Clique em Criar para começar em segundo plano. Você pode continuar conversando aqui.",
801
+ initialContent: "Começa com",
802
+ expandContent: "Ver todo o conteúdo",
803
+ collapseContent: "Recolher conteúdo",
804
+ "sidebar-right": "Barra lateral direita",
805
+ page: "Guia da sessão",
806
+ "sidebar-left": "Página global",
807
+ custom: "Descrever outro local",
808
+ "sidebar-rightHint": "Ver ao lado desta conversa",
809
+ pageHint: "Abrir ao lado de Chat e Trajetória",
810
+ "sidebar-leftHint": "Abrir pela barra lateral esquerda",
811
+ customHint: "Descreva onde você a quer",
812
+ customLabel: "Onde ela deve aparecer?",
813
+ customPlaceholder: "Por exemplo, uma entrada na barra lateral esquerda que abra um calendário em página inteira",
814
+ create: "Criar",
815
+ starting: "Iniciando…",
816
+ dismiss: "Agora não",
817
+ retry: "Criar novamente",
818
+ keep: "Manter",
819
+ undo: "Desfazer",
820
+ restore: "Restaurar",
821
+ restoring: "Restaurando…",
822
+ scope: "Você pode removê-la a qualquer momento",
823
+ dismissed: "Dispensado",
824
+ replaced: "Substituído",
825
+ creating: "Criando em segundo plano",
826
+ cancel: "Cancelar criação",
827
+ cancelling: "Cancelando…",
828
+ installing: "Instalando…",
829
+ sourceRetained: "Desfazer mantém os arquivos de origem na pasta .dsh-created-plugins/ do espaço de trabalho original.",
830
+ installed: "Instalado",
831
+ kept: "Mantido",
832
+ removed: "Removido",
833
+ failed: "A criação falhou. Tente novamente.",
834
+ interrupted: "A criação foi interrompida. Tente novamente.",
835
+ unconfirmed: "Resultado não confirmado. Tente novamente para verificar.",
836
+ "invalid-location": "Escolha um local ou descreva-o em até 1.000 caracteres.",
837
+ "restart-required": "A alteração foi salva. Reinicie o DSH para aplicá-la.",
838
+ overridden: "Outra configuração substitui esta alteração.",
839
+ cancelled: "Cancelado",
840
+ applicationFailed: "A última alteração não foi aplicada. Verifique Plug-ins.",
841
+ applicationCancelled: "A última alteração foi cancelada.",
842
+ transport: "Não foi possível confirmar o resultado. Reconecte-se e verifique o cartão antes de tentar novamente.",
843
+ unknown: "Esta recomendação não está mais disponível.",
844
+ unavailable: "Esta ação não está disponível. Verifique o plug-in em Plug-ins.",
845
+ "access-denied": "Esta conexão não pode alterar plug-ins.",
846
+ "not-live-root": "Abra a conversa original para usar este cartão.",
847
+ closing: "O plug-in de criação está parando. Tente novamente depois que ele for recarregado.",
848
+ "read-only": "Esta sessão é somente leitura. Mude a predefinição de permissão para criar páginas.",
849
+ "source-missing": "Os arquivos da página não existem mais. Peça uma nova proposta."
850
+ };
851
+ //#endregion
852
+ //#region lib/types/client/info-store.js
853
+ /** Remember the dismissed creation notice across sessions in this browser.
854
+ * @returns a plugin-owned preference; unavailable storage only disables persistence.
855
+ */
856
+ function createCreationInfoStore() {
857
+ return (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(false, { persist: { name: "dsh.creation-recommendations.info-dismissed" } });
858
+ }
859
+ //#endregion
860
+ //#region lib/types/client/mount.js
861
+ /** Register the personalized page card body and its localized copy. */
862
+ /** Services the body registration needs; the shared card plugin provides `actionCards`. */
863
+ const inject = ["locale", "actionCards"];
864
+ /**
865
+ * Register the `create_personalized_page` body for the plugin lifetime.
866
+ * @param ctx - Client plugin context.
867
+ */
868
+ function apply(ctx) {
869
+ const infoDismissed = createCreationInfoStore();
870
+ ctx.effect(() => ctx.locale.register("creationRecommendations", {
871
+ en,
872
+ zh,
873
+ ja,
874
+ es,
875
+ fr,
876
+ de,
877
+ ru,
878
+ pt
879
+ }), "creation-recommendations: locale");
880
+ ctx.effect(() => ctx.actionCards.register({
881
+ action: "create_personalized_page",
882
+ locale: "creationRecommendations",
883
+ Body: (props) => (0, react.createElement)(PageCardBody, {
884
+ ...props,
885
+ infoDismissed
886
+ })
887
+ }), "creation-recommendations: card body");
888
+ }
889
+ //#endregion
890
+ exports.apply = apply;
891
+ exports.inject = inject;
892
+ return module.exports;
893
+ }
894
+ });
895
+
896
+ //# sourceMappingURL=client.js.map