@open-slide/core 1.1.0 → 1.3.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.
Files changed (55) hide show
  1. package/dist/{build-DSqSio-T.js → build-_276DMmJ.js} +2 -2
  2. package/dist/cli/bin.js +5 -5
  3. package/dist/{config-KdiYeWtK.js → config-BAwKWNtW.js} +888 -229
  4. package/dist/{config-C7vMYzFD.d.ts → config-D9cZ1A0X.d.ts} +2 -1
  5. package/dist/{dev-B_GVbr11.js → dev-BoqeVXVq.js} +2 -2
  6. package/dist/en-CDKzoZvf.js +351 -0
  7. package/dist/index.d.ts +4 -3
  8. package/dist/index.js +229 -39
  9. package/dist/locale/index.d.ts +1 -1
  10. package/dist/locale/index.js +166 -326
  11. package/dist/{preview-D_mxhj7w.js → preview-BLPxspc9.js} +2 -2
  12. package/dist/sync-j9_QPovT.js +3 -0
  13. package/dist/{types-DYgVpIGo.d.ts → types-JYG1cmwC.d.ts} +59 -5
  14. package/dist/vite/index.d.ts +2 -2
  15. package/dist/vite/index.js +2 -2
  16. package/package.json +9 -1
  17. package/skills/create-slide/SKILL.md +1 -1
  18. package/skills/create-theme/SKILL.md +60 -12
  19. package/skills/current-slide/SKILL.md +110 -0
  20. package/skills/slide-authoring/SKILL.md +59 -1
  21. package/src/app/app.tsx +11 -1
  22. package/src/app/components/asset-view.tsx +1 -13
  23. package/src/app/components/image-placeholder.tsx +123 -1
  24. package/src/app/components/inspector/image-crop-dialog.tsx +64 -20
  25. package/src/app/components/inspector/inspector-panel.tsx +163 -19
  26. package/src/app/components/inspector/inspector-provider.tsx +60 -7
  27. package/src/app/components/notes-drawer.tsx +117 -0
  28. package/src/app/components/player.tsx +11 -7
  29. package/src/app/components/present/overview-grid.tsx +2 -2
  30. package/src/app/components/sidebar/folder-item.tsx +16 -5
  31. package/src/app/components/sidebar/mobile-pill.tsx +34 -0
  32. package/src/app/components/sidebar/sidebar.tsx +10 -0
  33. package/src/app/components/themes/theme-detail.tsx +300 -0
  34. package/src/app/components/themes/themes-gallery.tsx +146 -0
  35. package/src/app/components/thumbnail-rail.tsx +136 -29
  36. package/src/app/components/ui/context-menu.tsx +237 -0
  37. package/src/app/lib/assets.ts +55 -2
  38. package/src/app/lib/inspector/use-notes.ts +134 -0
  39. package/src/app/lib/sdk.ts +1 -0
  40. package/src/app/lib/slides.ts +10 -1
  41. package/src/app/lib/themes.ts +22 -0
  42. package/src/app/lib/use-agent-socket.ts +18 -0
  43. package/src/app/routes/home-shell.tsx +173 -0
  44. package/src/app/routes/home.tsx +108 -204
  45. package/src/app/routes/slide.tsx +333 -68
  46. package/src/app/routes/themes.tsx +34 -0
  47. package/src/app/virtual.d.ts +20 -0
  48. package/src/locale/en.ts +61 -7
  49. package/src/locale/ja.ts +62 -7
  50. package/src/locale/types.ts +62 -5
  51. package/src/locale/zh-cn.ts +61 -7
  52. package/src/locale/zh-tw.ts +61 -7
  53. package/dist/sync-B4eLo2H6.js +0 -3
  54. /package/dist/{design-C13iz9_4.js → design-cpzS8aud.js} +0 -0
  55. /package/dist/{sync-3oqN1WyK.js → sync-BCJDRIqo.js} +0 -0
@@ -1,306 +1,5 @@
1
- //#region src/locale/en.ts
2
- const en = {
3
- id: "en",
4
- common: {
5
- cancel: "Cancel",
6
- save: "Save",
7
- saving: "Saving",
8
- saved: "Saved",
9
- discard: "Discard",
10
- delete: "Delete",
11
- rename: "Rename",
12
- move: "Move",
13
- close: "Close",
14
- loading: "Loading",
15
- loadFailed: "Load failed",
16
- failedToLoadSlide: "Failed to load slide",
17
- home: "Home",
18
- backToHome: "Back to home",
19
- preview: "Preview",
20
- add: "Add",
21
- done: "Done",
22
- tryAgain: "Try again",
23
- undo: "Undo",
24
- redo: "Redo",
25
- light: "Light",
26
- dark: "Dark",
27
- system: "System",
28
- selected: "Selected"
29
- },
30
- notFound: {
31
- eyebrow: "404 · not found",
32
- title: "Page not found"
33
- },
34
- home: {
35
- appTitle: "open-slide",
36
- draft: "Draft",
37
- folders: "Folders",
38
- newFolder: "New folder",
39
- folderName: "Folder name",
40
- changeIcon: "Change icon",
41
- iconEmojiTab: "Emoji",
42
- iconColorTab: "Color",
43
- folderActions: "Folder actions",
44
- searchPlaceholder: "Search slides",
45
- clearSearch: "Clear search",
46
- noMatches: "No matches",
47
- nothingMatchesPrefix: "Nothing matches ",
48
- nothingMatchesSuffix: " in this folder.",
49
- noSlidesYet: "No slides yet",
50
- createSlideHintPrefix: "Create ",
51
- createSlideHintMid: " that ",
52
- createSlideHintSuffix: ".",
53
- folderEmptyTitle: "{name} is empty",
54
- folderEmptyHint: "Drag a slide from Draft into this folder in the sidebar.",
55
- slideActions: "Slide actions",
56
- moveToFolder: "Move to folder…",
57
- renameDialogEyebrow: "Rename",
58
- renameDialogTitle: "Rename slide",
59
- renameDialogDescription: "Give this slide a new display name.",
60
- slideNamePlaceholder: "Slide name",
61
- moveDialogEyebrow: "Move",
62
- moveDialogTitle: "Move slide",
63
- moveDialogDescriptionPrefix: "Choose a folder for ",
64
- moveDialogDescriptionSuffix: ".",
65
- deleteDialogEyebrow: "Destructive",
66
- deleteDialogTitle: "Delete slide?",
67
- deleteDialogDescriptionPrefix: "This permanently removes ",
68
- deleteDialogDescriptionMid: " and its files from disk. ",
69
- deleteDialogDescriptionSuffix: "This action cannot be undone.",
70
- toastFolderCreated: "Created folder “{name}”",
71
- toastFolderCreateFailed: "Failed to create folder",
72
- toastSlideMoved: "Moved “{slide}” to {folder}",
73
- toastSlideMoveFailed: "Failed to move slide",
74
- toastFolderDeleted: "Deleted folder “{name}”",
75
- toastFolderDeleteFailed: "Failed to delete folder",
76
- pickIcon: "Pick icon"
77
- },
78
- slide: {
79
- home: "Home",
80
- backToHome: "Back to home",
81
- download: "Download",
82
- exportAsHtml: "Export as HTML",
83
- exportAsPdf: "Export as PDF",
84
- pdfExportFailed: "PDF export failed",
85
- present: "Present",
86
- slidesTab: "Slides",
87
- assetsTab: "Assets",
88
- renameSlide: "Rename slide",
89
- loadingEyebrow: "Loading",
90
- emptyEyebrow: "Empty",
91
- nothingToShow: "Nothing to show.",
92
- emptyHintPrefix: "",
93
- emptyHintMust: " must ",
94
- emptyHintSuffix: " a non-empty array of components."
95
- },
96
- presenter: {
97
- eyebrow: "Presenter",
98
- notLinked: "Not linked",
99
- nowShowing: "Now showing",
100
- upNext: "Up next",
101
- lastSlide: "Last slide",
102
- endOfDeck: "End of deck",
103
- speakerNotes: "Speaker notes",
104
- noNotesPrefix: "No speaker notes for this slide. Add ",
105
- noNotesSuffix: " to your slide module to see notes here.",
106
- blackScreen: "Black screen",
107
- whiteScreen: "White screen",
108
- prev: "Prev",
109
- next: "Next",
110
- black: "Black",
111
- white: "White",
112
- reset: "Reset",
113
- resetTimer: "Reset timer",
114
- currentTime: "Current time",
115
- elapsed: "Elapsed",
116
- jump: "Jump",
117
- loadingSlide: "Loading {slideId}…"
118
- },
119
- present: {
120
- prevSlideAria: "Previous slide (←)",
121
- nextSlideAria: "Next slide (→)",
122
- overviewAria: "Slide overview (O)",
123
- blackoutAria: "Black screen (B)",
124
- whiteoutAria: "White screen (W)",
125
- laserAria: "Laser pointer (L)",
126
- presenterAria: "Presenter view (P)",
127
- helpAria: "Keyboard shortcuts (?)",
128
- exitAria: "Exit (Esc)",
129
- elapsedTime: "Elapsed time",
130
- helpEyebrow: "Present mode",
131
- helpTitle: "Keyboard shortcuts",
132
- shortcutNext: "Next slide",
133
- shortcutPrev: "Previous slide",
134
- shortcutFirstLast: "First / last slide",
135
- shortcutJump: "Jump to slide",
136
- shortcutOverview: "Slide overview",
137
- shortcutBlack: "Black screen",
138
- shortcutWhite: "White screen",
139
- shortcutLaser: "Laser pointer",
140
- shortcutPresenter: "Open Presenter View",
141
- shortcutToggleHelp: "Toggle this help",
142
- shortcutCloseExit: "Close overlay / exit",
143
- overviewDialogAria: "Slide overview",
144
- overviewEyebrow: "Overview",
145
- overviewGoToAria: "Go to slide {n}",
146
- nowBadge: "Now"
147
- },
148
- inspector: {
149
- inspect: "Inspect",
150
- deselect: "Deselect",
151
- contentSection: "Content",
152
- typographySection: "Typography",
153
- colorSection: "Color",
154
- textColor: "Text",
155
- backgroundColor: "Background",
156
- imageSection: "Image",
157
- imagePlaceholderSection: "Image placeholder",
158
- elementTextPlaceholder: "Element text",
159
- sizeLabel: "Size",
160
- weightLabel: "Weight",
161
- weightLight: "Light · 300",
162
- weightRegular: "Regular · 400",
163
- weightMedium: "Medium · 500",
164
- weightSemibold: "Semibold · 600",
165
- weightBold: "Bold · 700",
166
- weightExtrabold: "Extrabold · 800",
167
- styleLabel: "Style",
168
- boldAria: "Bold",
169
- italicAria: "Italic",
170
- lineHeightLabel: "Line height",
171
- trackingLabel: "Tracking",
172
- alignLabel: "Align",
173
- clearAria: "Clear",
174
- replace: "Replace…",
175
- replaceImageDialogTitle: "Replace image",
176
- replaceImageDescription: "Pick an asset from {path}.",
177
- pickerLoading: "Loading…",
178
- pickerEmpty: "No images in this slide's assets folder yet. Add some from the Assets tab.",
179
- placeholderHintLabel: "Hint:",
180
- crop: "Crop…",
181
- cropDialogTitle: "Crop image",
182
- cropDialogDescription: "Drag the frame to choose what stays visible.",
183
- cropFitCover: "Fill",
184
- cropFitContain: "Fit",
185
- cropApply: "Apply",
186
- cropResetAria: "Reset crop",
187
- noteForAgent: "Note for the agent",
188
- noteAgentPlaceholder: "Describe a change for the agent…",
189
- noteShortcutHint: "⌘↵ to send",
190
- addNote: "Add note",
191
- unsavedChanges: {
192
- one: "{count} unsaved change",
193
- other: "{count} unsaved changes"
194
- },
195
- commentsCount: {
196
- one: "{count} comment",
197
- other: "{count} comments"
198
- },
199
- commentLineLabel: "line {n}",
200
- commentsEmpty: "No comments yet. Toggle Inspect and click a slide element.",
201
- commentsApplyHintPrefix: "Run ",
202
- commentsApplyHintSuffix: " in your agent to apply these.",
203
- commentDeleteAria: "Delete",
204
- saveFailed: "Couldn't save:"
205
- },
206
- stylePanel: {
207
- designTokens: "Design tokens",
208
- draftBadge: "draft",
209
- unsavedTitle: "Unsaved",
210
- closePanelAria: "Close design panel",
211
- colorsSection: "Colors",
212
- typographySection: "Typography",
213
- shapeSection: "Shape",
214
- backgroundLabel: "Background",
215
- textLabel: "Text",
216
- accentLabel: "Accent",
217
- displayFontLabel: "Display",
218
- bodyFontLabel: "Body",
219
- heroLabel: "Hero",
220
- bodyLabel: "Body",
221
- radiusLabel: "Radius",
222
- designToggle: "Design",
223
- designToggleTitle: "Design tokens",
224
- fontPresetCustom: "Custom…",
225
- shuffleAria: "Shuffle design",
226
- shuffleTitle: "Shuffle for inspiration"
227
- },
228
- asset: {
229
- devOnlyMessage: "Asset management is only available in dev mode.",
230
- sectionAria: "Slide assets",
231
- eyebrow: "Assets",
232
- fileCount: {
233
- one: "{count} file",
234
- other: "{count} files"
235
- },
236
- searchLogos: "Search logos",
237
- upload: "Upload",
238
- dropToUpload: "Drop to upload",
239
- loading: "Loading…",
240
- noAssetsYet: "No assets yet",
241
- noAssetsHintPrefix: "Drop files anywhere here, or use ",
242
- noAssetsHintSuffix: ".",
243
- nameAlreadyExists: "A file with that name already exists.",
244
- previewAria: "Preview {name}",
245
- actionsAria: "Actions for {name}",
246
- previewMenuItem: "Preview",
247
- renameMenuItem: "Rename",
248
- deleteMenuItem: "Delete",
249
- conflictTitle: "File already exists",
250
- conflictDescription: "{name} is already in this slide's assets folder.",
251
- conflictReplace: "Replace",
252
- conflictRenameCopy: "Rename copy",
253
- deleteAssetTitle: "Delete asset",
254
- deleteAssetDescription: "Delete {name}? Imports referencing this file in the slide will break.",
255
- noPreview: "No preview available",
256
- importHintComment: "import asset from ",
257
- importHintSemi: ";",
258
- logoSearchTitle: "Search logos",
259
- logoSearchPoweredByPrefix: "Powered by ",
260
- logoSearchPlaceholder: "Search by brand…",
261
- logoSearchErrorTitle: "Couldn't reach svgl",
262
- logoSearchErrorBody: "Check your connection and try again.",
263
- logoSearchNoResults: "No logos for \"{query}\"",
264
- logoSearchEmpty: "No logos available",
265
- logoSearchEmptyHintPrefix: "Try a different brand name, or browse the full catalog at ",
266
- logoSearchEmptyHintSuffix: ".",
267
- logoVariantLight: "Light",
268
- logoVariantDark: "Dark",
269
- toastUploadFailed: "Upload failed ({status})",
270
- toastReplaced: "Replaced {name}",
271
- toastUploadedAs: "Uploaded as {name}",
272
- toastUploaded: "Uploaded {name}",
273
- toastRenameFailed: "Rename failed ({status})",
274
- toastRenamed: "Renamed to {name}",
275
- toastDeleteFailed: "Delete failed ({status})",
276
- toastDeleted: "Deleted {name}",
277
- toastDownloadFailed: "Failed to download logo",
278
- toastSearchFailed: "Search failed"
279
- },
280
- thumbnailRail: {
281
- pages: "Pages",
282
- goToPageAria: "Go to page {n}"
283
- },
284
- pdfToast: {
285
- title: "Exporting PDF",
286
- processing: "Processing page {current} of {total}",
287
- printing: "Opening print dialog…",
288
- done: "Done"
289
- },
290
- themeToggle: {
291
- toggleAria: "Toggle theme",
292
- title: "Theme",
293
- light: "Light",
294
- dark: "Dark",
295
- system: "System"
296
- },
297
- clickNav: {
298
- prevAria: "Previous page",
299
- nextAria: "Next page"
300
- }
301
- };
1
+ import { en } from "../en-CDKzoZvf.js";
302
2
 
303
- //#endregion
304
3
  //#region src/locale/format.ts
305
4
  function format(template, vars) {
306
5
  return template.replace(/\{(\w+)\}/g, (m, key) => {
@@ -349,6 +48,7 @@ const ja = {
349
48
  home: {
350
49
  appTitle: "open-slide",
351
50
  draft: "下書き",
51
+ themes: "テーマ",
352
52
  folders: "フォルダ",
353
53
  newFolder: "新規フォルダ",
354
54
  folderName: "フォルダ名",
@@ -362,9 +62,8 @@ const ja = {
362
62
  nothingMatchesPrefix: "このフォルダ内に ",
363
63
  nothingMatchesSuffix: " に一致する項目はありません。",
364
64
  noSlidesYet: "スライドはまだありません",
365
- createSlideHintPrefix: "",
366
- createSlideHintMid: " を作成し、",
367
- createSlideHintSuffix: " してください。",
65
+ createSlideHintPrefix: "エージェントで ",
66
+ createSlideHintSuffix: " を実行してスライドを作成しましょう。",
368
67
  folderEmptyTitle: "{name} は空です",
369
68
  folderEmptyHint: "サイドバーから下書きのスライドをこのフォルダにドラッグしてください。",
370
69
  slideActions: "スライド操作",
@@ -391,6 +90,10 @@ const ja = {
391
90
  pickIcon: "アイコンを選択"
392
91
  },
393
92
  slide: {
93
+ agentConnected: "エージェント接続中",
94
+ agentConnectedTooltip: "現在のスライドと Inspector の選択状態を dev server がエージェントに公開しています。チャットで「このスライド」「この要素」と言えば認識されます。本番ビルドでは表示されません。",
95
+ agentDisconnected: "エージェント切断",
96
+ agentDisconnectedTooltip: "dev server との接続が切れたため、現在のスライドや Inspector の選択がエージェントに届かなくなっています。dev server を再起動して接続を復旧してください。",
394
97
  home: "ホーム",
395
98
  backToHome: "ホームへ戻る",
396
99
  download: "ダウンロード",
@@ -499,10 +202,14 @@ const ja = {
499
202
  cropFitContain: "全体表示",
500
203
  cropApply: "適用",
501
204
  cropResetAria: "トリミングをリセット",
502
- noteForAgent: "エージェントへのメモ",
503
- noteAgentPlaceholder: "エージェントに依頼する変更を記述…",
504
- noteShortcutHint: "⌘↵ で送信",
505
- addNote: "メモを追加",
205
+ agentWatching: "エージェント監視中",
206
+ agentWatchingTooltip: "エージェントは選択中の要素を dev server 経由で把握しています。直接チャットで頼めます。ここにコメントを残すのは、複数の依頼をまとめて出したいときだけで OK。",
207
+ agentNotWatching: "エージェント未接続",
208
+ agentNotWatchingTooltip: "dev server との接続が切れたため、選択中の要素がエージェントに見えなくなっています。dev server を再起動して接続を復旧してください。",
209
+ leaveComment: "コメントを残す",
210
+ commentPlaceholder: "エージェントに依頼する変更を記述…",
211
+ commentShortcutHint: "⌘↵ で追加",
212
+ addComment: "コメントを追加",
506
213
  unsavedChanges: {
507
214
  one: "未保存の変更 {count} 件",
508
215
  other: "未保存の変更 {count} 件"
@@ -594,7 +301,15 @@ const ja = {
594
301
  },
595
302
  thumbnailRail: {
596
303
  pages: "ページ",
597
- goToPageAria: "ページ {n} へ移動"
304
+ goToPageAria: "ページ {n} へ移動",
305
+ duplicatePage: "複製",
306
+ deletePage: "削除",
307
+ pageActionsAria: "ページ {n} の操作",
308
+ toastDuplicated: "ページ {n} を複製しました",
309
+ toastDeleted: "ページ {n} を削除しました",
310
+ toastDuplicateFailed: "ページを複製できませんでした",
311
+ toastDeleteFailed: "ページを削除できませんでした",
312
+ resizeRail: "サムネイル幅を調整"
598
313
  },
599
314
  pdfToast: {
600
315
  title: "PDF を書き出し中",
@@ -612,6 +327,37 @@ const ja = {
612
327
  clickNav: {
613
328
  prevAria: "前のページ",
614
329
  nextAria: "次のページ"
330
+ },
331
+ imagePlaceholder: {
332
+ dropOverlay: "ここにドロップして使用",
333
+ uploading: "アップロード中…",
334
+ uploadFailed: "画像のアップロードに失敗しました"
335
+ },
336
+ notesDrawer: {
337
+ toggle: "発表者ノート",
338
+ pageLabel: "{n} / {total} ページ",
339
+ placeholder: "このスライドの発表者ノートを記入…",
340
+ statusSaving: "保存中…",
341
+ statusSaved: "保存済み",
342
+ statusError: "保存に失敗しました: {msg}"
343
+ },
344
+ themes: {
345
+ title: "テーマ",
346
+ noThemesTitle: "テーマがまだありません",
347
+ noThemesHintPrefix: "",
348
+ noThemesHintSuffix: " を実行して作成 — themes/ に markdown ファイルと同名の demo スライドを置きます。",
349
+ noDemoYet: "デモがまだありません",
350
+ noDemoHintPrefix: "このテーマで ",
351
+ noDemoHintSuffix: " を再実行するとプレビュー用スライドが生成されます。",
352
+ backToGallery: "テーマ一覧へ戻る",
353
+ pageOf: "{n}/{total} ページ",
354
+ nextPageAria: "次のページ",
355
+ prevPageAria: "前のページ",
356
+ openThemeAria: "テーマ {name} を開く",
357
+ usedBy: "このテーマを使うスライド",
358
+ usedByEmpty: "このテーマを使うスライドはまだありません。",
359
+ expandPromptAria: "プロンプトを展開",
360
+ collapsePromptAria: "プロンプトを折りたたむ"
615
361
  }
616
362
  };
617
363
 
@@ -652,6 +398,7 @@ const zhCN = {
652
398
  home: {
653
399
  appTitle: "open-slide",
654
400
  draft: "草稿",
401
+ themes: "主题",
655
402
  folders: "文件夹",
656
403
  newFolder: "新建文件夹",
657
404
  folderName: "文件夹名称",
@@ -665,9 +412,8 @@ const zhCN = {
665
412
  nothingMatchesPrefix: "该文件夹中没有匹配 ",
666
413
  nothingMatchesSuffix: " 的内容。",
667
414
  noSlidesYet: "尚无幻灯片",
668
- createSlideHintPrefix: "创建 ",
669
- createSlideHintMid: " ",
670
- createSlideHintSuffix: "。",
415
+ createSlideHintPrefix: " agent 中执行 ",
416
+ createSlideHintSuffix: " 开始创建。",
671
417
  folderEmptyTitle: "{name} 为空",
672
418
  folderEmptyHint: "从侧边栏将幻灯片从草稿拖入此文件夹。",
673
419
  slideActions: "幻灯片操作",
@@ -694,6 +440,10 @@ const zhCN = {
694
440
  pickIcon: "选择图标"
695
441
  },
696
442
  slide: {
443
+ agentConnected: "Agent 已连接",
444
+ agentConnectedTooltip: "Dev server 正在把你目前在哪张 slide、Inspector 选了哪个元素发布给 agent。直接到聊天说\"这张 slide\"或\"这个元素\"就行。Production build 不会出现。",
445
+ agentDisconnected: "Agent 已断开",
446
+ agentDisconnectedTooltip: "已和 dev server 断开连接,agent 没办法再看到你目前的 slide 或 Inspector 选择。请重新启动 dev server 来恢复连接。",
697
447
  home: "首页",
698
448
  backToHome: "返回首页",
699
449
  download: "下载",
@@ -802,10 +552,14 @@ const zhCN = {
802
552
  cropFitContain: "完整显示",
803
553
  cropApply: "应用",
804
554
  cropResetAria: "重置裁剪",
805
- noteForAgent: "给代理的备注",
806
- noteAgentPlaceholder: "描述你希望代理执行的更改…",
807
- noteShortcutHint: "⌘↵ 发送",
808
- addNote: "添加备注",
555
+ agentWatching: "Agent 正在关注",
556
+ agentWatchingTooltip: "Agent 已经通过 dev server 看到你选的元素了,直接到聊天请它修改就行。想累积几个再一次问才需要在这里留 comments。",
557
+ agentNotWatching: "Agent 没在关注",
558
+ agentNotWatchingTooltip: "已和 dev server 断开连接,agent 看不到你选的元素了。请重新启动 dev server 来恢复连接。",
559
+ leaveComment: "留个 comment",
560
+ commentPlaceholder: "描述你希望代理执行的更改…",
561
+ commentShortcutHint: "⌘↵ 添加",
562
+ addComment: "添加 comment",
809
563
  unsavedChanges: {
810
564
  one: "{count} 项未保存的更改",
811
565
  other: "{count} 项未保存的更改"
@@ -897,7 +651,15 @@ const zhCN = {
897
651
  },
898
652
  thumbnailRail: {
899
653
  pages: "页面",
900
- goToPageAria: "前往第 {n} 页"
654
+ goToPageAria: "前往第 {n} 页",
655
+ duplicatePage: "复制",
656
+ deletePage: "删除",
657
+ pageActionsAria: "第 {n} 页的操作",
658
+ toastDuplicated: "已复制第 {n} 页",
659
+ toastDeleted: "已删除第 {n} 页",
660
+ toastDuplicateFailed: "无法复制页面",
661
+ toastDeleteFailed: "无法删除页面",
662
+ resizeRail: "调整缩略图栏宽度"
901
663
  },
902
664
  pdfToast: {
903
665
  title: "导出 PDF",
@@ -915,6 +677,37 @@ const zhCN = {
915
677
  clickNav: {
916
678
  prevAria: "上一页",
917
679
  nextAria: "下一页"
680
+ },
681
+ imagePlaceholder: {
682
+ dropOverlay: "拖入图片以使用",
683
+ uploading: "上传中…",
684
+ uploadFailed: "图片上传失败"
685
+ },
686
+ notesDrawer: {
687
+ toggle: "演讲备注",
688
+ pageLabel: "第 {n} / {total} 页",
689
+ placeholder: "为这一页撰写演讲备注…",
690
+ statusSaving: "保存中…",
691
+ statusSaved: "已保存",
692
+ statusError: "保存失败:{msg}"
693
+ },
694
+ themes: {
695
+ title: "主题",
696
+ noThemesTitle: "尚无主题",
697
+ noThemesHintPrefix: "运行 ",
698
+ noThemesHintSuffix: " 来创建一个 — 一个位于 themes/ 的 markdown 文件,加上同名的 demo slide。",
699
+ noDemoYet: "尚无 demo",
700
+ noDemoHintPrefix: "对此主题重新运行 ",
701
+ noDemoHintSuffix: " 即可生成预览用的 slide。",
702
+ backToGallery: "返回主题列表",
703
+ pageOf: "第 {n}/{total} 页",
704
+ nextPageAria: "下一页",
705
+ prevPageAria: "上一页",
706
+ openThemeAria: "打开主题 {name}",
707
+ usedBy: "使用此主题的 slides",
708
+ usedByEmpty: "尚未有 slides 使用此主题。",
709
+ expandPromptAria: "展开 prompt",
710
+ collapsePromptAria: "收起 prompt"
918
711
  }
919
712
  };
920
713
 
@@ -955,6 +748,7 @@ const zhTW = {
955
748
  home: {
956
749
  appTitle: "open-slide",
957
750
  draft: "草稿",
751
+ themes: "主題",
958
752
  folders: "資料夾",
959
753
  newFolder: "新增資料夾",
960
754
  folderName: "資料夾名稱",
@@ -968,9 +762,8 @@ const zhTW = {
968
762
  nothingMatchesPrefix: "此資料夾中沒有相符 ",
969
763
  nothingMatchesSuffix: " 的項目。",
970
764
  noSlidesYet: "尚無投影片",
971
- createSlideHintPrefix: "建立 ",
972
- createSlideHintMid: " ",
973
- createSlideHintSuffix: "。",
765
+ createSlideHintPrefix: " agent 中執行 ",
766
+ createSlideHintSuffix: " 開始建立。",
974
767
  folderEmptyTitle: "{name} 為空",
975
768
  folderEmptyHint: "從側邊欄將投影片從草稿拖入此資料夾。",
976
769
  slideActions: "投影片操作",
@@ -997,6 +790,10 @@ const zhTW = {
997
790
  pickIcon: "選擇圖示"
998
791
  },
999
792
  slide: {
793
+ agentConnected: "Agent 已連線",
794
+ agentConnectedTooltip: "Dev server 正在把你目前在哪張 slide、Inspector 選了哪個元素發布給 agent。直接到聊天說「這張 slide」或「這個元素」就行。Production build 不會出現。",
795
+ agentDisconnected: "Agent 已斷線",
796
+ agentDisconnectedTooltip: "已和 dev server 斷線,agent 沒辦法再看到你目前的 slide 或 Inspector 選擇。請重新啟動 dev server 來恢復連線。",
1000
797
  home: "首頁",
1001
798
  backToHome: "返回首頁",
1002
799
  download: "下載",
@@ -1105,10 +902,14 @@ const zhTW = {
1105
902
  cropFitContain: "完整顯示",
1106
903
  cropApply: "套用",
1107
904
  cropResetAria: "重設裁切",
1108
- noteForAgent: "給代理的備註",
1109
- noteAgentPlaceholder: "描述你希望代理進行的修改…",
1110
- noteShortcutHint: "⌘↵ 送出",
1111
- addNote: "新增備註",
905
+ agentWatching: "Agent 正在關注",
906
+ agentWatchingTooltip: "Agent 已經透過 dev server 看到你選的元素了,直接到聊天請它修改就行。想累積幾個再一次問才需要在這裡留 comments。",
907
+ agentNotWatching: "Agent 沒在關注",
908
+ agentNotWatchingTooltip: "已和 dev server 斷線,agent 看不到你選的元素了。請重新啟動 dev server 來恢復連線。",
909
+ leaveComment: "留個 comment",
910
+ commentPlaceholder: "描述你希望代理進行的修改…",
911
+ commentShortcutHint: "⌘↵ 新增",
912
+ addComment: "新增 comment",
1112
913
  unsavedChanges: {
1113
914
  one: "{count} 項未儲存的變更",
1114
915
  other: "{count} 項未儲存的變更"
@@ -1200,7 +1001,15 @@ const zhTW = {
1200
1001
  },
1201
1002
  thumbnailRail: {
1202
1003
  pages: "頁面",
1203
- goToPageAria: "前往第 {n} 頁"
1004
+ goToPageAria: "前往第 {n} 頁",
1005
+ duplicatePage: "複製",
1006
+ deletePage: "刪除",
1007
+ pageActionsAria: "第 {n} 頁的操作",
1008
+ toastDuplicated: "已複製第 {n} 頁",
1009
+ toastDeleted: "已刪除第 {n} 頁",
1010
+ toastDuplicateFailed: "無法複製頁面",
1011
+ toastDeleteFailed: "無法刪除頁面",
1012
+ resizeRail: "調整縮圖欄寬度"
1204
1013
  },
1205
1014
  pdfToast: {
1206
1015
  title: "匯出 PDF",
@@ -1218,6 +1027,37 @@ const zhTW = {
1218
1027
  clickNav: {
1219
1028
  prevAria: "上一頁",
1220
1029
  nextAria: "下一頁"
1030
+ },
1031
+ imagePlaceholder: {
1032
+ dropOverlay: "拖入圖片以使用",
1033
+ uploading: "上傳中…",
1034
+ uploadFailed: "圖片上傳失敗"
1035
+ },
1036
+ notesDrawer: {
1037
+ toggle: "講稿",
1038
+ pageLabel: "第 {n} / {total} 頁",
1039
+ placeholder: "為這一頁撰寫演講備忘…",
1040
+ statusSaving: "儲存中…",
1041
+ statusSaved: "已儲存",
1042
+ statusError: "儲存失敗:{msg}"
1043
+ },
1044
+ themes: {
1045
+ title: "主題",
1046
+ noThemesTitle: "尚無主題",
1047
+ noThemesHintPrefix: "執行 ",
1048
+ noThemesHintSuffix: " 來建立一個 — 一個位於 themes/ 的 markdown 檔案,加上同名的 demo slide。",
1049
+ noDemoYet: "尚無 demo",
1050
+ noDemoHintPrefix: "對此主題重新執行 ",
1051
+ noDemoHintSuffix: " 即可產生預覽用的 slide。",
1052
+ backToGallery: "返回主題列表",
1053
+ pageOf: "第 {n}/{total} 頁",
1054
+ nextPageAria: "下一頁",
1055
+ prevPageAria: "上一頁",
1056
+ openThemeAria: "開啟主題 {name}",
1057
+ usedBy: "使用此主題的 slides",
1058
+ usedByEmpty: "尚未有 slides 使用此主題。",
1059
+ expandPromptAria: "展開 prompt",
1060
+ collapsePromptAria: "收合 prompt"
1221
1061
  }
1222
1062
  };
1223
1063
 
@@ -1,5 +1,5 @@
1
- import "./design-C13iz9_4.js";
2
- import { createViteConfig } from "./config-KdiYeWtK.js";
1
+ import "./design-cpzS8aud.js";
2
+ import { createViteConfig } from "./config-BAwKWNtW.js";
3
3
  import { mergeConfig, preview as preview$1 } from "vite";
4
4
 
5
5
  //#region src/cli/preview.ts
@@ -0,0 +1,3 @@
1
+ import { detectSkillsDrift, syncSkills } from "./sync-BCJDRIqo.js";
2
+
3
+ export { syncSkills };