@open-slide/core 1.2.0 → 1.4.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 (56) hide show
  1. package/dist/{build-6BeQ3cxb.js → build-1Rqivz0d.js} +2 -2
  2. package/dist/cli/bin.js +5 -5
  3. package/dist/{config-AxZ5OE1u.js → config-XZJnC_fu.js} +735 -64
  4. package/dist/{config-CtT8K4VF.d.ts → config-s0YUbmUe.d.ts} +3 -1
  5. package/dist/{dev-C9eLmUEq.js → dev-0W8gYiSa.js} +2 -2
  6. package/dist/en-7GU-DHbJ.js +361 -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 +136 -342
  11. package/dist/{preview-Cunm-f4i.js → preview-DT9hJvzM.js} +2 -2
  12. package/dist/sync-j9_QPovT.js +3 -0
  13. package/dist/{types-CRHIeoNq.d.ts → types-QCpkHkiS.d.ts} +42 -2
  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/slide-authoring/SKILL.md +21 -2
  20. package/src/app/app.tsx +13 -1
  21. package/src/app/components/asset-view.tsx +37 -22
  22. package/src/app/components/image-placeholder.tsx +123 -1
  23. package/src/app/components/inspector/inspect-overlay.tsx +49 -3
  24. package/src/app/components/inspector/inspector-panel.tsx +370 -30
  25. package/src/app/components/inspector/inspector-provider.tsx +390 -49
  26. package/src/app/components/player.tsx +25 -5
  27. package/src/app/components/present/control-bar.tsx +12 -0
  28. package/src/app/components/sidebar/folder-item.tsx +27 -5
  29. package/src/app/components/sidebar/mobile-pill.tsx +34 -0
  30. package/src/app/components/sidebar/sidebar.tsx +20 -0
  31. package/src/app/components/themes/theme-detail.tsx +300 -0
  32. package/src/app/components/themes/themes-gallery.tsx +146 -0
  33. package/src/app/components/thumbnail-rail.tsx +17 -5
  34. package/src/app/lib/assets.ts +55 -2
  35. package/src/app/lib/export-pdf.ts +6 -0
  36. package/src/app/lib/inspector/use-editor.ts +9 -1
  37. package/src/app/lib/sdk.ts +1 -0
  38. package/src/app/lib/slides.ts +17 -1
  39. package/src/app/lib/themes.ts +22 -0
  40. package/src/app/lib/use-agent-socket.ts +18 -0
  41. package/src/app/lib/use-slide-module.ts +48 -0
  42. package/src/app/routes/assets.tsx +9 -0
  43. package/src/app/routes/home-shell.tsx +194 -0
  44. package/src/app/routes/home.tsx +89 -207
  45. package/src/app/routes/presenter.tsx +2 -20
  46. package/src/app/routes/slide.tsx +217 -54
  47. package/src/app/routes/themes.tsx +34 -0
  48. package/src/app/virtual.d.ts +20 -0
  49. package/src/locale/en.ts +49 -7
  50. package/src/locale/ja.ts +50 -7
  51. package/src/locale/types.ts +44 -2
  52. package/src/locale/zh-cn.ts +49 -8
  53. package/src/locale/zh-tw.ts +49 -8
  54. package/dist/sync-B4eLo2H6.js +0 -3
  55. /package/dist/{design-C13iz9_4.js → design-cpzS8aud.js} +0 -0
  56. /package/dist/{sync-3oqN1WyK.js → sync-BCJDRIqo.js} +0 -0
package/src/locale/ja.ts CHANGED
@@ -38,6 +38,8 @@ export const ja: Locale = {
38
38
  home: {
39
39
  appTitle: 'open-slide',
40
40
  draft: '下書き',
41
+ themes: 'テーマ',
42
+ assets: 'アセット',
41
43
  folders: 'フォルダ',
42
44
  newFolder: '新規フォルダ',
43
45
  folderName: 'フォルダ名',
@@ -51,9 +53,8 @@ export const ja: Locale = {
51
53
  nothingMatchesPrefix: 'このフォルダ内に ',
52
54
  nothingMatchesSuffix: ' に一致する項目はありません。',
53
55
  noSlidesYet: 'スライドはまだありません',
54
- createSlideHintPrefix: '',
55
- createSlideHintMid: ' を作成し、',
56
- createSlideHintSuffix: ' してください。',
56
+ createSlideHintPrefix: 'エージェントで ',
57
+ createSlideHintSuffix: ' を実行してスライドを作成しましょう。',
57
58
  folderEmptyTitle: '{name} は空です',
58
59
  folderEmptyHint: 'サイドバーから下書きのスライドをこのフォルダにドラッグしてください。',
59
60
  slideActions: 'スライド操作',
@@ -83,14 +84,23 @@ export const ja: Locale = {
83
84
  slide: {
84
85
  agentConnected: 'エージェント接続中',
85
86
  agentConnectedTooltip:
86
- '現在のスライドと Inspector の選択状態を dev server がエージェントに公開しています。チャットで「このスライド」「この要素」と言えば認識されます。本番ビルドでは表示されません。',
87
+ '現在のスライドと Inspector の選択はエージェントにリアルタイムで同期されています。',
88
+ agentDisconnected: 'エージェント切断',
89
+ agentDisconnectedTooltip:
90
+ 'dev server との接続が切れたため、現在のスライドや Inspector の選択がエージェントに届かなくなっています。dev server を再起動して接続を復旧してください。',
87
91
  home: 'ホーム',
88
92
  backToHome: 'ホームへ戻る',
89
93
  download: 'ダウンロード',
90
94
  exportAsHtml: 'HTML として書き出し',
91
95
  exportAsPdf: 'PDF として書き出し',
92
96
  pdfExportFailed: 'PDF の書き出しに失敗しました',
97
+ pdfExportSafariUnsupported:
98
+ 'PDF の書き出しは現在 Safari では対応していません。Chromium ベースのブラウザでお試しください。',
93
99
  present: '発表',
100
+ presentMenuAria: '発表オプション',
101
+ presentInWindow: '再生',
102
+ presentFullscreen: 'フルスクリーン再生',
103
+ presentPresenter: '発表者モード',
94
104
  slidesTab: 'スライド',
95
105
  assetsTab: 'アセット',
96
106
  renameSlide: 'スライドの名前を変更',
@@ -134,6 +144,8 @@ export const ja: Locale = {
134
144
  whiteoutAria: '白い画面 (W)',
135
145
  laserAria: 'レーザーポインタ (L)',
136
146
  presenterAria: '発表者ビュー (P)',
147
+ enterFullscreenAria: 'フルスクリーンへ',
148
+ exitFullscreenAria: 'フルスクリーン解除',
137
149
  helpAria: 'キーボードショートカット (?)',
138
150
  exitAria: '終了 (Esc)',
139
151
  elapsedTime: '経過時間',
@@ -197,8 +209,10 @@ export const ja: Locale = {
197
209
  cropApply: '適用',
198
210
  cropResetAria: 'トリミングをリセット',
199
211
  agentWatching: 'エージェント監視中',
200
- agentWatchingTooltip:
201
- 'エージェントは選択中の要素を dev server 経由で把握しています。直接チャットで頼めます。ここにコメントを残すのは、複数の依頼をまとめて出したいときだけで OK。',
212
+ agentWatchingTooltip: '選択中の要素はエージェントにリアルタイムで同期されています。',
213
+ agentNotWatching: 'エージェント未接続',
214
+ agentNotWatchingTooltip:
215
+ 'dev server との接続が切れたため、選択中の要素がエージェントに見えなくなっています。dev server を再起動して接続を復旧してください。',
202
216
  leaveComment: 'コメントを残す',
203
217
  commentPlaceholder: 'エージェントに依頼する変更を記述…',
204
218
  commentShortcutHint: '⌘↵ で追加',
@@ -247,6 +261,8 @@ export const ja: Locale = {
247
261
  devOnlyMessage: 'アセット管理は開発モードでのみ利用できます。',
248
262
  sectionAria: 'スライドのアセット',
249
263
  eyebrow: 'アセット',
264
+ scopeSlide: 'このスライド',
265
+ scopeGlobal: 'グローバル',
250
266
  fileCount: { one: 'ファイル {count} 件', other: 'ファイル {count} 件' },
251
267
  searchLogos: 'ロゴを検索',
252
268
  upload: 'アップロード',
@@ -262,7 +278,7 @@ export const ja: Locale = {
262
278
  renameMenuItem: '名前を変更',
263
279
  deleteMenuItem: '削除',
264
280
  conflictTitle: 'ファイルがすでに存在します',
265
- conflictDescription: '{name} はすでにこのスライドのアセットフォルダにあります。',
281
+ conflictDescription: '{name} はすでにアセットフォルダにあります。',
266
282
  conflictReplace: '置き換え',
267
283
  conflictRenameCopy: 'コピーをリネーム',
268
284
  deleteAssetTitle: 'アセットを削除',
@@ -305,6 +321,7 @@ export const ja: Locale = {
305
321
  toastDeleted: 'ページ {n} を削除しました',
306
322
  toastDuplicateFailed: 'ページを複製できませんでした',
307
323
  toastDeleteFailed: 'ページを削除できませんでした',
324
+ resizeRail: 'サムネイル幅を調整',
308
325
  },
309
326
 
310
327
  pdfToast: {
@@ -327,6 +344,12 @@ export const ja: Locale = {
327
344
  nextAria: '次のページ',
328
345
  },
329
346
 
347
+ imagePlaceholder: {
348
+ dropOverlay: 'ここにドロップして使用',
349
+ uploading: 'アップロード中…',
350
+ uploadFailed: '画像のアップロードに失敗しました',
351
+ },
352
+
330
353
  notesDrawer: {
331
354
  toggle: '発表者ノート',
332
355
  pageLabel: '{n} / {total} ページ',
@@ -335,4 +358,24 @@ export const ja: Locale = {
335
358
  statusSaved: '保存済み',
336
359
  statusError: '保存に失敗しました: {msg}',
337
360
  },
361
+
362
+ themes: {
363
+ title: 'テーマ',
364
+ noThemesTitle: 'テーマがまだありません',
365
+ noThemesHintPrefix: '',
366
+ noThemesHintSuffix:
367
+ ' を実行して作成 — themes/ に markdown ファイルと同名の demo スライドを置きます。',
368
+ noDemoYet: 'デモがまだありません',
369
+ noDemoHintPrefix: 'このテーマで ',
370
+ noDemoHintSuffix: ' を再実行するとプレビュー用スライドが生成されます。',
371
+ backToGallery: 'テーマ一覧へ戻る',
372
+ pageOf: '{n}/{total} ページ',
373
+ nextPageAria: '次のページ',
374
+ prevPageAria: '前のページ',
375
+ openThemeAria: 'テーマ {name} を開く',
376
+ usedBy: 'このテーマを使うスライド',
377
+ usedByEmpty: 'このテーマを使うスライドはまだありません。',
378
+ expandPromptAria: 'プロンプトを展開',
379
+ collapsePromptAria: 'プロンプトを折りたたむ',
380
+ },
338
381
  };
@@ -38,6 +38,8 @@ export type Locale = {
38
38
  home: {
39
39
  appTitle: string;
40
40
  draft: string;
41
+ themes: string;
42
+ assets: string;
41
43
  folders: string;
42
44
  newFolder: string;
43
45
  folderName: string;
@@ -52,7 +54,6 @@ export type Locale = {
52
54
  nothingMatchesSuffix: string;
53
55
  noSlidesYet: string;
54
56
  createSlideHintPrefix: string;
55
- createSlideHintMid: string;
56
57
  createSlideHintSuffix: string;
57
58
  folderEmptyTitle: string;
58
59
  folderEmptyHint: string;
@@ -88,11 +89,18 @@ export type Locale = {
88
89
  backToHome: string;
89
90
  agentConnected: string;
90
91
  agentConnectedTooltip: string;
92
+ agentDisconnected: string;
93
+ agentDisconnectedTooltip: string;
91
94
  download: string;
92
95
  exportAsHtml: string;
93
96
  exportAsPdf: string;
94
97
  pdfExportFailed: string;
98
+ pdfExportSafariUnsupported: string;
95
99
  present: string;
100
+ presentMenuAria: string;
101
+ presentInWindow: string;
102
+ presentFullscreen: string;
103
+ presentPresenter: string;
96
104
  slidesTab: string;
97
105
  assetsTab: string;
98
106
  renameSlide: string;
@@ -137,6 +145,8 @@ export type Locale = {
137
145
  whiteoutAria: string;
138
146
  laserAria: string;
139
147
  presenterAria: string;
148
+ enterFullscreenAria: string;
149
+ exitFullscreenAria: string;
140
150
  helpAria: string;
141
151
  exitAria: string;
142
152
  elapsedTime: string;
@@ -165,6 +175,8 @@ export type Locale = {
165
175
  deselect: string;
166
176
  agentWatching: string;
167
177
  agentWatchingTooltip: string;
178
+ agentNotWatching: string;
179
+ agentNotWatchingTooltip: string;
168
180
  contentSection: string;
169
181
  typographySection: string;
170
182
  colorSection: string;
@@ -247,6 +259,8 @@ export type Locale = {
247
259
  devOnlyMessage: string;
248
260
  sectionAria: string;
249
261
  eyebrow: string;
262
+ scopeSlide: string;
263
+ scopeGlobal: string;
250
264
  /** templates: "{count} file" / "{count} files" */
251
265
  fileCount: Plural;
252
266
  searchLogos: string;
@@ -265,7 +279,7 @@ export type Locale = {
265
279
  renameMenuItem: string;
266
280
  deleteMenuItem: string;
267
281
  conflictTitle: string;
268
- /** template: "{name} is already in this slide's assets folder." */
282
+ /** template: "{name} is already in the assets folder." */
269
283
  conflictDescription: string;
270
284
  conflictReplace: string;
271
285
  conflictRenameCopy: string;
@@ -321,6 +335,7 @@ export type Locale = {
321
335
  toastDeleted: string;
322
336
  toastDuplicateFailed: string;
323
337
  toastDeleteFailed: string;
338
+ resizeRail: string;
324
339
  };
325
340
 
326
341
  pdfToast: {
@@ -344,6 +359,12 @@ export type Locale = {
344
359
  nextAria: string;
345
360
  };
346
361
 
362
+ imagePlaceholder: {
363
+ dropOverlay: string;
364
+ uploading: string;
365
+ uploadFailed: string;
366
+ };
367
+
347
368
  notesDrawer: {
348
369
  toggle: string;
349
370
  /** template: "page {n}/{total}" */
@@ -354,4 +375,25 @@ export type Locale = {
354
375
  /** template: "Save failed: {msg}" */
355
376
  statusError: string;
356
377
  };
378
+
379
+ themes: {
380
+ title: string;
381
+ noThemesTitle: string;
382
+ noThemesHintPrefix: string;
383
+ noThemesHintSuffix: string;
384
+ noDemoYet: string;
385
+ noDemoHintPrefix: string;
386
+ noDemoHintSuffix: string;
387
+ backToGallery: string;
388
+ /** template: "page {n}/{total}" */
389
+ pageOf: string;
390
+ nextPageAria: string;
391
+ prevPageAria: string;
392
+ /** template: "Open theme {name}" */
393
+ openThemeAria: string;
394
+ usedBy: string;
395
+ usedByEmpty: string;
396
+ expandPromptAria: string;
397
+ collapsePromptAria: string;
398
+ };
357
399
  };
@@ -38,6 +38,8 @@ export const zhCN: Locale = {
38
38
  home: {
39
39
  appTitle: 'open-slide',
40
40
  draft: '草稿',
41
+ themes: '主题',
42
+ assets: '素材',
41
43
  folders: '文件夹',
42
44
  newFolder: '新建文件夹',
43
45
  folderName: '文件夹名称',
@@ -51,9 +53,8 @@ export const zhCN: Locale = {
51
53
  nothingMatchesPrefix: '该文件夹中没有匹配 ',
52
54
  nothingMatchesSuffix: ' 的内容。',
53
55
  noSlidesYet: '尚无幻灯片',
54
- createSlideHintPrefix: '创建 ',
55
- createSlideHintMid: ' ',
56
- createSlideHintSuffix: '。',
56
+ createSlideHintPrefix: ' agent 中执行 ',
57
+ createSlideHintSuffix: ' 开始创建。',
57
58
  folderEmptyTitle: '{name} 为空',
58
59
  folderEmptyHint: '从侧边栏将幻灯片从草稿拖入此文件夹。',
59
60
  slideActions: '幻灯片操作',
@@ -82,15 +83,23 @@ export const zhCN: Locale = {
82
83
 
83
84
  slide: {
84
85
  agentConnected: 'Agent 已连接',
85
- agentConnectedTooltip:
86
- 'Dev server 正在把你目前在哪张 slide、Inspector 选了哪个元素发布给 agent。直接到聊天说"这张 slide"或"这个元素"就行。Production build 不会出现。',
86
+ agentConnectedTooltip: '目前的 slide 与 Inspector 选择会即时同步给 agent。',
87
+ agentDisconnected: 'Agent 已断开',
88
+ agentDisconnectedTooltip:
89
+ '已和 dev server 断开连接,agent 没办法再看到你目前的 slide 或 Inspector 选择。请重新启动 dev server 来恢复连接。',
87
90
  home: '首页',
88
91
  backToHome: '返回首页',
89
92
  download: '下载',
90
93
  exportAsHtml: '导出为 HTML',
91
94
  exportAsPdf: '导出为 PDF',
92
95
  pdfExportFailed: 'PDF 导出失败',
96
+ pdfExportSafariUnsupported:
97
+ '导出 PDF 目前不支持 Safari 设备,请尝试使用基于 Chromium 的浏览器替代。',
93
98
  present: '演示',
99
+ presentMenuAria: '演示选项',
100
+ presentInWindow: '播放',
101
+ presentFullscreen: '全屏播放',
102
+ presentPresenter: '演讲者模式',
94
103
  slidesTab: '幻灯片',
95
104
  assetsTab: '素材',
96
105
  renameSlide: '重命名幻灯片',
@@ -134,6 +143,8 @@ export const zhCN: Locale = {
134
143
  whiteoutAria: '白屏 (W)',
135
144
  laserAria: '激光笔 (L)',
136
145
  presenterAria: '演讲者视图 (P)',
146
+ enterFullscreenAria: '进入全屏',
147
+ exitFullscreenAria: '退出全屏',
137
148
  helpAria: '键盘快捷键 (?)',
138
149
  exitAria: '退出 (Esc)',
139
150
  elapsedTime: '已用时',
@@ -196,8 +207,10 @@ export const zhCN: Locale = {
196
207
  cropApply: '应用',
197
208
  cropResetAria: '重置裁剪',
198
209
  agentWatching: 'Agent 正在关注',
199
- agentWatchingTooltip:
200
- 'Agent 已经通过 dev server 看到你选的元素了,直接到聊天请它修改就行。想累积几个再一次问才需要在这里留 comments。',
210
+ agentWatchingTooltip: '选取的元素会即时同步给 agent。',
211
+ agentNotWatching: 'Agent 没在关注',
212
+ agentNotWatchingTooltip:
213
+ '已和 dev server 断开连接,agent 看不到你选的元素了。请重新启动 dev server 来恢复连接。',
201
214
  leaveComment: '留个 comment',
202
215
  commentPlaceholder: '描述你希望代理执行的更改…',
203
216
  commentShortcutHint: '⌘↵ 添加',
@@ -245,6 +258,8 @@ export const zhCN: Locale = {
245
258
  devOnlyMessage: '素材管理仅在开发模式下可用。',
246
259
  sectionAria: '幻灯片素材',
247
260
  eyebrow: '素材',
261
+ scopeSlide: '当前幻灯片',
262
+ scopeGlobal: '全局',
248
263
  fileCount: { one: '{count} 个文件', other: '{count} 个文件' },
249
264
  searchLogos: '搜索 Logo',
250
265
  upload: '上传',
@@ -260,7 +275,7 @@ export const zhCN: Locale = {
260
275
  renameMenuItem: '重命名',
261
276
  deleteMenuItem: '删除',
262
277
  conflictTitle: '文件已存在',
263
- conflictDescription: '{name} 已在该幻灯片的素材文件夹中。',
278
+ conflictDescription: '{name} 已在素材文件夹中。',
264
279
  conflictReplace: '替换',
265
280
  conflictRenameCopy: '重命名副本',
266
281
  deleteAssetTitle: '删除素材',
@@ -301,6 +316,7 @@ export const zhCN: Locale = {
301
316
  toastDeleted: '已删除第 {n} 页',
302
317
  toastDuplicateFailed: '无法复制页面',
303
318
  toastDeleteFailed: '无法删除页面',
319
+ resizeRail: '调整缩略图栏宽度',
304
320
  },
305
321
 
306
322
  pdfToast: {
@@ -323,6 +339,12 @@ export const zhCN: Locale = {
323
339
  nextAria: '下一页',
324
340
  },
325
341
 
342
+ imagePlaceholder: {
343
+ dropOverlay: '拖入图片以使用',
344
+ uploading: '上传中…',
345
+ uploadFailed: '图片上传失败',
346
+ },
347
+
326
348
  notesDrawer: {
327
349
  toggle: '演讲备注',
328
350
  pageLabel: '第 {n} / {total} 页',
@@ -331,4 +353,23 @@ export const zhCN: Locale = {
331
353
  statusSaved: '已保存',
332
354
  statusError: '保存失败:{msg}',
333
355
  },
356
+
357
+ themes: {
358
+ title: '主题',
359
+ noThemesTitle: '尚无主题',
360
+ noThemesHintPrefix: '运行 ',
361
+ noThemesHintSuffix: ' 来创建一个 — 一个位于 themes/ 的 markdown 文件,加上同名的 demo slide。',
362
+ noDemoYet: '尚无 demo',
363
+ noDemoHintPrefix: '对此主题重新运行 ',
364
+ noDemoHintSuffix: ' 即可生成预览用的 slide。',
365
+ backToGallery: '返回主题列表',
366
+ pageOf: '第 {n}/{total} 页',
367
+ nextPageAria: '下一页',
368
+ prevPageAria: '上一页',
369
+ openThemeAria: '打开主题 {name}',
370
+ usedBy: '使用此主题的 slides',
371
+ usedByEmpty: '尚未有 slides 使用此主题。',
372
+ expandPromptAria: '展开 prompt',
373
+ collapsePromptAria: '收起 prompt',
374
+ },
334
375
  };
@@ -38,6 +38,8 @@ export const zhTW: Locale = {
38
38
  home: {
39
39
  appTitle: 'open-slide',
40
40
  draft: '草稿',
41
+ themes: '主題',
42
+ assets: '素材',
41
43
  folders: '資料夾',
42
44
  newFolder: '新增資料夾',
43
45
  folderName: '資料夾名稱',
@@ -51,9 +53,8 @@ export const zhTW: Locale = {
51
53
  nothingMatchesPrefix: '此資料夾中沒有相符 ',
52
54
  nothingMatchesSuffix: ' 的項目。',
53
55
  noSlidesYet: '尚無投影片',
54
- createSlideHintPrefix: '建立 ',
55
- createSlideHintMid: ' ',
56
- createSlideHintSuffix: '。',
56
+ createSlideHintPrefix: ' agent 中執行 ',
57
+ createSlideHintSuffix: ' 開始建立。',
57
58
  folderEmptyTitle: '{name} 為空',
58
59
  folderEmptyHint: '從側邊欄將投影片從草稿拖入此資料夾。',
59
60
  slideActions: '投影片操作',
@@ -82,15 +83,23 @@ export const zhTW: Locale = {
82
83
 
83
84
  slide: {
84
85
  agentConnected: 'Agent 已連線',
85
- agentConnectedTooltip:
86
- 'Dev server 正在把你目前在哪張 slide、Inspector 選了哪個元素發布給 agent。直接到聊天說「這張 slide」或「這個元素」就行。Production build 不會出現。',
86
+ agentConnectedTooltip: '目前的 slide 與 Inspector 選擇會即時同步給 agent。',
87
+ agentDisconnected: 'Agent 已斷線',
88
+ agentDisconnectedTooltip:
89
+ '已和 dev server 斷線,agent 沒辦法再看到你目前的 slide 或 Inspector 選擇。請重新啟動 dev server 來恢復連線。',
87
90
  home: '首頁',
88
91
  backToHome: '返回首頁',
89
92
  download: '下載',
90
93
  exportAsHtml: '匯出為 HTML',
91
94
  exportAsPdf: '匯出為 PDF',
92
95
  pdfExportFailed: 'PDF 匯出失敗',
96
+ pdfExportSafariUnsupported:
97
+ '匯出 PDF 目前不支援 Safari 裝置,請嘗試用 Chromium 基底瀏覽器替代。',
93
98
  present: '簡報',
99
+ presentMenuAria: '簡報選項',
100
+ presentInWindow: '播放',
101
+ presentFullscreen: '全螢幕播放',
102
+ presentPresenter: '簡報者模式',
94
103
  slidesTab: '投影片',
95
104
  assetsTab: '素材',
96
105
  renameSlide: '重新命名投影片',
@@ -134,6 +143,8 @@ export const zhTW: Locale = {
134
143
  whiteoutAria: '白屏 (W)',
135
144
  laserAria: '雷射筆 (L)',
136
145
  presenterAria: '主講人檢視 (P)',
146
+ enterFullscreenAria: '進入全螢幕',
147
+ exitFullscreenAria: '退出全螢幕',
137
148
  helpAria: '鍵盤快速鍵 (?)',
138
149
  exitAria: '離開 (Esc)',
139
150
  elapsedTime: '已耗時',
@@ -196,8 +207,10 @@ export const zhTW: Locale = {
196
207
  cropApply: '套用',
197
208
  cropResetAria: '重設裁切',
198
209
  agentWatching: 'Agent 正在關注',
199
- agentWatchingTooltip:
200
- 'Agent 已經透過 dev server 看到你選的元素了,直接到聊天請它修改就行。想累積幾個再一次問才需要在這裡留 comments。',
210
+ agentWatchingTooltip: '選取的元素會即時同步給 agent。',
211
+ agentNotWatching: 'Agent 沒在關注',
212
+ agentNotWatchingTooltip:
213
+ '已和 dev server 斷線,agent 看不到你選的元素了。請重新啟動 dev server 來恢復連線。',
201
214
  leaveComment: '留個 comment',
202
215
  commentPlaceholder: '描述你希望代理進行的修改…',
203
216
  commentShortcutHint: '⌘↵ 新增',
@@ -245,6 +258,8 @@ export const zhTW: Locale = {
245
258
  devOnlyMessage: '素材管理僅在開發模式下可用。',
246
259
  sectionAria: '投影片素材',
247
260
  eyebrow: '素材',
261
+ scopeSlide: '此投影片',
262
+ scopeGlobal: '全域',
248
263
  fileCount: { one: '{count} 個檔案', other: '{count} 個檔案' },
249
264
  searchLogos: '搜尋 Logo',
250
265
  upload: '上傳',
@@ -260,7 +275,7 @@ export const zhTW: Locale = {
260
275
  renameMenuItem: '重新命名',
261
276
  deleteMenuItem: '刪除',
262
277
  conflictTitle: '檔案已存在',
263
- conflictDescription: '{name} 已在此投影片的素材資料夾中。',
278
+ conflictDescription: '{name} 已在素材資料夾中。',
264
279
  conflictReplace: '取代',
265
280
  conflictRenameCopy: '重新命名副本',
266
281
  deleteAssetTitle: '刪除素材',
@@ -301,6 +316,7 @@ export const zhTW: Locale = {
301
316
  toastDeleted: '已刪除第 {n} 頁',
302
317
  toastDuplicateFailed: '無法複製頁面',
303
318
  toastDeleteFailed: '無法刪除頁面',
319
+ resizeRail: '調整縮圖欄寬度',
304
320
  },
305
321
 
306
322
  pdfToast: {
@@ -323,6 +339,12 @@ export const zhTW: Locale = {
323
339
  nextAria: '下一頁',
324
340
  },
325
341
 
342
+ imagePlaceholder: {
343
+ dropOverlay: '拖入圖片以使用',
344
+ uploading: '上傳中…',
345
+ uploadFailed: '圖片上傳失敗',
346
+ },
347
+
326
348
  notesDrawer: {
327
349
  toggle: '講稿',
328
350
  pageLabel: '第 {n} / {total} 頁',
@@ -331,4 +353,23 @@ export const zhTW: Locale = {
331
353
  statusSaved: '已儲存',
332
354
  statusError: '儲存失敗:{msg}',
333
355
  },
356
+
357
+ themes: {
358
+ title: '主題',
359
+ noThemesTitle: '尚無主題',
360
+ noThemesHintPrefix: '執行 ',
361
+ noThemesHintSuffix: ' 來建立一個 — 一個位於 themes/ 的 markdown 檔案,加上同名的 demo slide。',
362
+ noDemoYet: '尚無 demo',
363
+ noDemoHintPrefix: '對此主題重新執行 ',
364
+ noDemoHintSuffix: ' 即可產生預覽用的 slide。',
365
+ backToGallery: '返回主題列表',
366
+ pageOf: '第 {n}/{total} 頁',
367
+ nextPageAria: '下一頁',
368
+ prevPageAria: '上一頁',
369
+ openThemeAria: '開啟主題 {name}',
370
+ usedBy: '使用此主題的 slides',
371
+ usedByEmpty: '尚未有 slides 使用此主題。',
372
+ expandPromptAria: '展開 prompt',
373
+ collapsePromptAria: '收合 prompt',
374
+ },
334
375
  };
@@ -1,3 +0,0 @@
1
- import { detectSkillsDrift, syncSkills } from "./sync-3oqN1WyK.js";
2
-
3
- export { syncSkills };
File without changes
File without changes