@open-aippt/core 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/bin.js +2 -0
  4. package/dist/build-DxTqmvsO.js +17 -0
  5. package/dist/cli/bin.d.ts +1 -0
  6. package/dist/cli/bin.js +86 -0
  7. package/dist/config-CjzqjrEA.js +4280 -0
  8. package/dist/config-DIC-yVPp.d.ts +23 -0
  9. package/dist/design-cpzS8aud.js +35 -0
  10. package/dist/dev-BYuTeJbA.js +20 -0
  11. package/dist/format-BCeKbTOM.js +1605 -0
  12. package/dist/index.d.ts +134 -0
  13. package/dist/index.js +467 -0
  14. package/dist/locale/index.d.ts +24 -0
  15. package/dist/locale/index.js +3 -0
  16. package/dist/preview-DlQvnJPq.js +18 -0
  17. package/dist/sync-BPZ0m27m.js +139 -0
  18. package/dist/sync-EsYusbbL.js +3 -0
  19. package/dist/types-CHmFPIG_.d.ts +430 -0
  20. package/dist/vite/index.d.ts +14 -0
  21. package/dist/vite/index.js +4 -0
  22. package/env.d.ts +59 -0
  23. package/package.json +103 -0
  24. package/skills/apply-comments/SKILL.md +83 -0
  25. package/skills/create-slide/SKILL.md +91 -0
  26. package/skills/create-theme/SKILL.md +250 -0
  27. package/skills/current-slide/SKILL.md +110 -0
  28. package/skills/slide-authoring/SKILL.md +625 -0
  29. package/src/app/app.tsx +47 -0
  30. package/src/app/components/asset-view.tsx +966 -0
  31. package/src/app/components/history-provider.tsx +120 -0
  32. package/src/app/components/image-placeholder.tsx +243 -0
  33. package/src/app/components/inspector/asset-picker-dialog.tsx +196 -0
  34. package/src/app/components/inspector/comment-widget.tsx +93 -0
  35. package/src/app/components/inspector/image-crop-dialog.tsx +212 -0
  36. package/src/app/components/inspector/inspect-overlay.tsx +387 -0
  37. package/src/app/components/inspector/inspector-panel.tsx +1115 -0
  38. package/src/app/components/inspector/inspector-provider.tsx +1218 -0
  39. package/src/app/components/inspector/save-bar.tsx +48 -0
  40. package/src/app/components/language-toggle.tsx +39 -0
  41. package/src/app/components/notes-drawer.tsx +120 -0
  42. package/src/app/components/overview-grid.tsx +363 -0
  43. package/src/app/components/panel/panel-fields.tsx +60 -0
  44. package/src/app/components/panel/panel-shell.tsx +80 -0
  45. package/src/app/components/panel/save-card.tsx +142 -0
  46. package/src/app/components/pdf-progress-toast.tsx +32 -0
  47. package/src/app/components/player.tsx +466 -0
  48. package/src/app/components/pptx-progress-toast.tsx +32 -0
  49. package/src/app/components/present/blackout-overlay.tsx +18 -0
  50. package/src/app/components/present/control-bar.tsx +315 -0
  51. package/src/app/components/present/help-overlay.tsx +57 -0
  52. package/src/app/components/present/jump-input.tsx +74 -0
  53. package/src/app/components/present/laser-pointer.tsx +39 -0
  54. package/src/app/components/present/progress-bar.tsx +26 -0
  55. package/src/app/components/present/use-idle.ts +46 -0
  56. package/src/app/components/present/use-pointer-near-bottom.ts +34 -0
  57. package/src/app/components/present/use-presenter-channel.ts +66 -0
  58. package/src/app/components/present/use-touch-swipe.ts +66 -0
  59. package/src/app/components/shared-element.tsx +48 -0
  60. package/src/app/components/sidebar/folder-item.tsx +258 -0
  61. package/src/app/components/sidebar/icon-picker.tsx +61 -0
  62. package/src/app/components/sidebar/mobile-pill.tsx +34 -0
  63. package/src/app/components/sidebar/sidebar-footer.tsx +105 -0
  64. package/src/app/components/sidebar/sidebar.tsx +284 -0
  65. package/src/app/components/slide-canvas.tsx +102 -0
  66. package/src/app/components/slide-transition-layer.tsx +844 -0
  67. package/src/app/components/style-panel/design-provider.tsx +148 -0
  68. package/src/app/components/style-panel/style-panel.tsx +349 -0
  69. package/src/app/components/style-panel/use-design.ts +112 -0
  70. package/src/app/components/theme-toggle.tsx +59 -0
  71. package/src/app/components/themes/theme-detail.tsx +305 -0
  72. package/src/app/components/themes/themes-gallery.tsx +149 -0
  73. package/src/app/components/thumbnail-rail.tsx +805 -0
  74. package/src/app/components/ui/badge.tsx +45 -0
  75. package/src/app/components/ui/button.tsx +99 -0
  76. package/src/app/components/ui/card.tsx +92 -0
  77. package/src/app/components/ui/context-menu.tsx +237 -0
  78. package/src/app/components/ui/dialog.tsx +157 -0
  79. package/src/app/components/ui/dropdown-menu.tsx +245 -0
  80. package/src/app/components/ui/input.tsx +25 -0
  81. package/src/app/components/ui/label.tsx +24 -0
  82. package/src/app/components/ui/popover.tsx +75 -0
  83. package/src/app/components/ui/progress.tsx +31 -0
  84. package/src/app/components/ui/scroll-area.tsx +53 -0
  85. package/src/app/components/ui/select.tsx +196 -0
  86. package/src/app/components/ui/separator.tsx +28 -0
  87. package/src/app/components/ui/slider.tsx +61 -0
  88. package/src/app/components/ui/sonner.tsx +48 -0
  89. package/src/app/components/ui/tabs.tsx +79 -0
  90. package/src/app/components/ui/textarea.tsx +22 -0
  91. package/src/app/components/ui/toggle-group.tsx +83 -0
  92. package/src/app/components/ui/toggle.tsx +45 -0
  93. package/src/app/components/ui/tooltip.tsx +58 -0
  94. package/src/app/favicon.ico +0 -0
  95. package/src/app/index.html +13 -0
  96. package/src/app/lib/assets.ts +242 -0
  97. package/src/app/lib/design-presets.ts +94 -0
  98. package/src/app/lib/design.ts +58 -0
  99. package/src/app/lib/export-html.ts +326 -0
  100. package/src/app/lib/export-pdf.ts +298 -0
  101. package/src/app/lib/export-pptx.ts +284 -0
  102. package/src/app/lib/folders.ts +239 -0
  103. package/src/app/lib/inspector/fiber.test.ts +154 -0
  104. package/src/app/lib/inspector/fiber.ts +85 -0
  105. package/src/app/lib/inspector/use-comments.ts +74 -0
  106. package/src/app/lib/inspector/use-editor.ts +73 -0
  107. package/src/app/lib/inspector/use-notes.ts +134 -0
  108. package/src/app/lib/locale-store.ts +67 -0
  109. package/src/app/lib/page-context.tsx +38 -0
  110. package/src/app/lib/print-ready.test.ts +32 -0
  111. package/src/app/lib/print-ready.ts +51 -0
  112. package/src/app/lib/sdk.test.ts +13 -0
  113. package/src/app/lib/sdk.ts +37 -0
  114. package/src/app/lib/slides.ts +26 -0
  115. package/src/app/lib/step-context.tsx +261 -0
  116. package/src/app/lib/themes.ts +22 -0
  117. package/src/app/lib/transition.ts +30 -0
  118. package/src/app/lib/use-agent-socket.ts +18 -0
  119. package/src/app/lib/use-click-page-navigation.ts +60 -0
  120. package/src/app/lib/use-is-mobile.ts +21 -0
  121. package/src/app/lib/use-locale.ts +8 -0
  122. package/src/app/lib/use-prefers-reduced-motion.ts +19 -0
  123. package/src/app/lib/use-slide-module.ts +48 -0
  124. package/src/app/lib/use-wheel-page-navigation.ts +99 -0
  125. package/src/app/lib/utils.test.ts +25 -0
  126. package/src/app/lib/utils.ts +6 -0
  127. package/src/app/main.tsx +14 -0
  128. package/src/app/routes/assets.tsx +9 -0
  129. package/src/app/routes/home-shell.tsx +213 -0
  130. package/src/app/routes/home.tsx +807 -0
  131. package/src/app/routes/presenter.tsx +418 -0
  132. package/src/app/routes/slide.tsx +1108 -0
  133. package/src/app/routes/themes.tsx +34 -0
  134. package/src/app/styles.css +429 -0
  135. package/src/app/virtual.d.ts +51 -0
  136. package/src/locale/en.ts +416 -0
  137. package/src/locale/format.ts +12 -0
  138. package/src/locale/index.ts +6 -0
  139. package/src/locale/ja.ts +422 -0
  140. package/src/locale/types.ts +443 -0
  141. package/src/locale/zh-cn.ts +414 -0
  142. package/src/locale/zh-tw.ts +414 -0
@@ -0,0 +1,139 @@
1
+ import chalk from "chalk";
2
+ import { cp, lstat, mkdir, readFile, readdir, readlink, rm, symlink } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { createHash } from "node:crypto";
5
+ import { existsSync } from "node:fs";
6
+
7
+ //#region src/cli/sync.ts
8
+ async function detectSkillsDrift(skillsDir) {
9
+ if (!existsSync(skillsDir)) return [];
10
+ const cwd = process.cwd();
11
+ const agentsSkillsDir = path.join(cwd, ".agents", "skills");
12
+ const skillNames = (await readdir(skillsDir, { withFileTypes: true })).filter((e) => e.isDirectory()).map((e) => e.name).sort();
13
+ const results = [];
14
+ for (const name of skillNames) {
15
+ const src = path.join(skillsDir, name);
16
+ const dst = path.join(agentsSkillsDir, name);
17
+ const srcHash = await hashDir(src);
18
+ const dstHash = existsSync(dst) ? await hashDir(dst) : null;
19
+ let status;
20
+ if (dstHash === null) status = "added";
21
+ else if (dstHash !== srcHash) status = "updated";
22
+ else status = "unchanged";
23
+ results.push({
24
+ name,
25
+ status
26
+ });
27
+ }
28
+ return results;
29
+ }
30
+ async function syncSkills(skillsDir, opts = {}) {
31
+ const { dryRun = false } = opts;
32
+ if (!existsSync(skillsDir)) throw new Error(`Built-in skills directory missing at ${skillsDir}. The @open-aippt/core package may be corrupt — try reinstalling.`);
33
+ const cwd = process.cwd();
34
+ const agentsSkillsDir = path.join(cwd, ".agents", "skills");
35
+ const claudeSkillsDir = path.join(cwd, ".claude", "skills");
36
+ const results = await detectSkillsDrift(skillsDir);
37
+ if (results.length === 0) {
38
+ process.stdout.write(chalk.yellow("No skills found to sync.\n"));
39
+ return;
40
+ }
41
+ for (const { name, status } of results) {
42
+ const src = path.join(skillsDir, name);
43
+ const dst = path.join(agentsSkillsDir, name);
44
+ if (dryRun) continue;
45
+ if (status === "unchanged") {
46
+ await ensureClaudeSymlink(claudeSkillsDir, name);
47
+ continue;
48
+ }
49
+ await mkdir(path.dirname(dst), { recursive: true });
50
+ if (existsSync(dst)) await rm(dst, {
51
+ recursive: true,
52
+ force: true
53
+ });
54
+ await cp(src, dst, { recursive: true });
55
+ await ensureClaudeSymlink(claudeSkillsDir, name);
56
+ }
57
+ printSummary(results, dryRun);
58
+ }
59
+ async function ensureClaudeSymlink(claudeSkillsDir, name) {
60
+ await mkdir(claudeSkillsDir, { recursive: true });
61
+ const linkPath = path.join(claudeSkillsDir, name);
62
+ const target = path.join("..", "..", ".agents", "skills", name);
63
+ if (existsSync(linkPath)) try {
64
+ const stat = await lstat(linkPath);
65
+ if (stat.isSymbolicLink()) {
66
+ const current = await readlink(linkPath);
67
+ if (current === target) return;
68
+ }
69
+ await rm(linkPath, {
70
+ recursive: true,
71
+ force: true
72
+ });
73
+ } catch {
74
+ await rm(linkPath, {
75
+ recursive: true,
76
+ force: true
77
+ });
78
+ }
79
+ try {
80
+ await symlink(target, linkPath, "dir");
81
+ } catch (err) {
82
+ const code = err.code;
83
+ if (code === "EPERM" || code === "EEXIST") {
84
+ const absoluteTarget = path.resolve(claudeSkillsDir, target);
85
+ await cp(absoluteTarget, linkPath, { recursive: true });
86
+ } else throw err;
87
+ }
88
+ }
89
+ async function hashDir(dir) {
90
+ const hash = createHash("sha256");
91
+ const files = await collectFiles(dir);
92
+ files.sort();
93
+ for (const rel of files) {
94
+ const abs = path.join(dir, rel);
95
+ const data = await readFile(abs);
96
+ hash.update(rel);
97
+ hash.update("\0");
98
+ hash.update(data);
99
+ hash.update("\0");
100
+ }
101
+ return hash.digest("hex");
102
+ }
103
+ async function collectFiles(dir, prefix = "") {
104
+ const out = [];
105
+ const entries = await readdir(dir, { withFileTypes: true });
106
+ for (const entry of entries) {
107
+ const rel = prefix ? path.join(prefix, entry.name) : entry.name;
108
+ if (entry.isDirectory()) out.push(...await collectFiles(path.join(dir, entry.name), rel));
109
+ else if (entry.isFile()) out.push(rel);
110
+ }
111
+ return out;
112
+ }
113
+ function printSummary(results, dryRun) {
114
+ const symbols = {
115
+ added: chalk.green("+"),
116
+ updated: chalk.yellow("~"),
117
+ unchanged: chalk.dim("=")
118
+ };
119
+ const labels = {
120
+ added: chalk.green("added"),
121
+ updated: chalk.yellow("updated"),
122
+ unchanged: chalk.dim("unchanged")
123
+ };
124
+ const header = dryRun ? chalk.bold("Dry run — no files written:") : chalk.bold("Synced built-in skills:");
125
+ process.stdout.write(`${header}\n`);
126
+ for (const { name, status } of results) process.stdout.write(` ${symbols[status]} ${name} ${chalk.dim(`(${labels[status]})`)}\n`);
127
+ const counts = results.reduce((acc, { status }) => {
128
+ acc[status] += 1;
129
+ return acc;
130
+ }, {
131
+ added: 0,
132
+ updated: 0,
133
+ unchanged: 0
134
+ });
135
+ process.stdout.write(chalk.dim(`\n${counts.added} added, ${counts.updated} updated, ${counts.unchanged} unchanged.\n`));
136
+ }
137
+
138
+ //#endregion
139
+ export { detectSkillsDrift, syncSkills };
@@ -0,0 +1,3 @@
1
+ import { detectSkillsDrift, syncSkills } from "./sync-BPZ0m27m.js";
2
+
3
+ export { syncSkills };
@@ -0,0 +1,430 @@
1
+ //#region src/locale/types.d.ts
2
+ type Plural = {
3
+ one: string;
4
+ other: string;
5
+ };
6
+ type Locale = {
7
+ id: 'en' | 'zh-TW' | 'zh-CN' | 'ja';
8
+ common: {
9
+ cancel: string;
10
+ save: string;
11
+ saving: string;
12
+ saved: string;
13
+ discard: string;
14
+ delete: string;
15
+ rename: string;
16
+ move: string;
17
+ close: string;
18
+ loading: string;
19
+ loadFailed: string;
20
+ failedToLoadSlide: string;
21
+ home: string;
22
+ backToHome: string;
23
+ preview: string;
24
+ add: string;
25
+ done: string;
26
+ tryAgain: string;
27
+ undo: string;
28
+ redo: string;
29
+ light: string;
30
+ dark: string;
31
+ system: string;
32
+ selected: string;
33
+ };
34
+ notFound: {
35
+ eyebrow: string;
36
+ title: string;
37
+ };
38
+ home: {
39
+ appTitle: string;
40
+ draft: string;
41
+ duplicate: string;
42
+ themes: string;
43
+ assets: string;
44
+ folders: string;
45
+ newFolder: string;
46
+ folderName: string;
47
+ updateAvailable: string;
48
+ updatePackage: string;
49
+ updatingPackage: string;
50
+ updatePackageDone: string;
51
+ updatePackageFailed: string;
52
+ changeIcon: string;
53
+ iconEmojiTab: string;
54
+ iconColorTab: string;
55
+ folderActions: string;
56
+ searchPlaceholder: string;
57
+ clearSearch: string;
58
+ sortLabel: string;
59
+ sortByCreatedDesc: string;
60
+ sortByCreatedAsc: string;
61
+ sortByTitleAsc: string;
62
+ sortByTitleDesc: string;
63
+ noMatches: string;
64
+ nothingMatchesPrefix: string;
65
+ nothingMatchesSuffix: string;
66
+ noSlidesYet: string;
67
+ createSlideHintPrefix: string;
68
+ createSlideHintSuffix: string;
69
+ folderEmptyTitle: string;
70
+ folderEmptyHint: string;
71
+ slideActions: string;
72
+ moveToFolder: string;
73
+ renameDialogEyebrow: string;
74
+ renameDialogTitle: string;
75
+ renameDialogDescription: string;
76
+ slideNamePlaceholder: string;
77
+ moveDialogEyebrow: string;
78
+ moveDialogTitle: string;
79
+ moveDialogDescriptionPrefix: string;
80
+ moveDialogDescriptionSuffix: string;
81
+ deleteDialogEyebrow: string;
82
+ deleteDialogTitle: string;
83
+ deleteDialogDescriptionPrefix: string;
84
+ deleteDialogDescriptionMid: string;
85
+ deleteDialogDescriptionSuffix: string;
86
+ /** template: "Created folder “{name}”" */
87
+ toastFolderCreated: string;
88
+ toastFolderCreateFailed: string;
89
+ /** template: "Duplicated “{slide}” as {newSlide}" */
90
+ toastSlideDuplicated: string;
91
+ toastSlideDuplicateFailed: string;
92
+ /** template: "Moved “{slide}” to {folder}" */
93
+ toastSlideMoved: string;
94
+ toastSlideMoveFailed: string;
95
+ /** template: "Deleted folder “{name}”" */
96
+ toastFolderDeleted: string;
97
+ toastFolderDeleteFailed: string;
98
+ toastFolderReorderFailed: string;
99
+ pickIcon: string;
100
+ };
101
+ slide: {
102
+ home: string;
103
+ backToHome: string;
104
+ agentConnected: string;
105
+ agentConnectedTooltip: string;
106
+ agentDisconnected: string;
107
+ agentDisconnectedTooltip: string;
108
+ download: string;
109
+ copyLink: string;
110
+ moreActions: string;
111
+ toastCopyLinkSuccess: string;
112
+ toastCopyLinkFailed: string;
113
+ exportAsHtml: string;
114
+ exportAsPdf: string;
115
+ exportAsImagePptx: string;
116
+ exportAsPptx: string;
117
+ comingSoon: string;
118
+ pptxComingSoonTooltip: string;
119
+ pdfExportFailed: string;
120
+ imagePptxExportFailed: string;
121
+ pdfExportSafariUnsupported: string;
122
+ present: string;
123
+ presentMenuAria: string;
124
+ presentInWindow: string;
125
+ presentFullscreen: string;
126
+ presentPresenter: string;
127
+ slidesTab: string;
128
+ assetsTab: string;
129
+ renameSlide: string;
130
+ loadingEyebrow: string;
131
+ emptyEyebrow: string;
132
+ nothingToShow: string;
133
+ emptyHintPrefix: string;
134
+ emptyHintMust: string;
135
+ emptyHintSuffix: string;
136
+ };
137
+ presenter: {
138
+ eyebrow: string;
139
+ notLinked: string;
140
+ nowShowing: string;
141
+ upNext: string;
142
+ lastSlide: string;
143
+ endOfDeck: string;
144
+ speakerNotes: string;
145
+ noNotesPrefix: string;
146
+ noNotesSuffix: string;
147
+ blackScreen: string;
148
+ whiteScreen: string;
149
+ prev: string;
150
+ next: string;
151
+ black: string;
152
+ white: string;
153
+ reset: string;
154
+ resetTimer: string;
155
+ currentTime: string;
156
+ elapsed: string;
157
+ jump: string;
158
+ /** template: "Loading {slideId}…" */
159
+ loadingSlide: string;
160
+ };
161
+ present: {
162
+ prevSlideAria: string;
163
+ nextSlideAria: string;
164
+ overviewAria: string;
165
+ blackoutAria: string;
166
+ whiteoutAria: string;
167
+ laserAria: string;
168
+ presenterAria: string;
169
+ enterFullscreenAria: string;
170
+ exitFullscreenAria: string;
171
+ helpAria: string;
172
+ exitAria: string;
173
+ elapsedTime: string;
174
+ helpEyebrow: string;
175
+ helpTitle: string;
176
+ shortcutNext: string;
177
+ shortcutPrev: string;
178
+ shortcutFirstLast: string;
179
+ shortcutJump: string;
180
+ shortcutOverview: string;
181
+ shortcutBlack: string;
182
+ shortcutWhite: string;
183
+ shortcutLaser: string;
184
+ shortcutPresenter: string;
185
+ shortcutToggleHelp: string;
186
+ shortcutCloseExit: string;
187
+ overviewDialogAria: string;
188
+ overviewEyebrow: string;
189
+ /** template: "Go to slide {n}" */
190
+ overviewGoToAria: string;
191
+ nowBadge: string;
192
+ };
193
+ inspector: {
194
+ inspect: string;
195
+ deselect: string;
196
+ agentWatching: string;
197
+ agentWatchingTooltip: string;
198
+ agentNotWatching: string;
199
+ agentNotWatchingTooltip: string;
200
+ contentSection: string;
201
+ typographySection: string;
202
+ colorSection: string;
203
+ textColor: string;
204
+ backgroundColor: string;
205
+ imageSection: string;
206
+ imagePlaceholderSection: string;
207
+ elementTextPlaceholder: string;
208
+ sizeLabel: string;
209
+ weightLabel: string;
210
+ weightLight: string;
211
+ weightRegular: string;
212
+ weightMedium: string;
213
+ weightSemibold: string;
214
+ weightBold: string;
215
+ weightExtrabold: string;
216
+ styleLabel: string;
217
+ boldAria: string;
218
+ italicAria: string;
219
+ lineHeightLabel: string;
220
+ trackingLabel: string;
221
+ alignLabel: string;
222
+ clearAria: string;
223
+ replace: string;
224
+ replaceImageDialogTitle: string;
225
+ /** template: "Pick an asset from {path}." */
226
+ replaceImageDescription: string;
227
+ pickerLoading: string;
228
+ pickerEmpty: string;
229
+ placeholderHintLabel: string;
230
+ crop: string;
231
+ cropDialogTitle: string;
232
+ cropDialogDescription: string;
233
+ cropFitCover: string;
234
+ cropFitContain: string;
235
+ cropApply: string;
236
+ cropResetAria: string;
237
+ leaveComment: string;
238
+ commentPlaceholder: string;
239
+ commentShortcutHint: string;
240
+ addComment: string;
241
+ /** templates: "{count} unsaved change" / "{count} unsaved changes" */
242
+ unsavedChanges: Plural;
243
+ /** templates: "{count} comment" / "{count} comments" */
244
+ commentsCount: Plural;
245
+ /** template: "line {n}" */
246
+ commentLineLabel: string;
247
+ commentsEmpty: string;
248
+ commentsApplyHintPrefix: string;
249
+ commentsApplyHintSuffix: string;
250
+ commentDeleteAria: string;
251
+ /** Prefix for the toast shown when one or more buffered edits fail to write to disk. */
252
+ saveFailed: string;
253
+ };
254
+ stylePanel: {
255
+ designTokens: string;
256
+ draftBadge: string;
257
+ unsavedTitle: string;
258
+ closePanelAria: string;
259
+ colorsSection: string;
260
+ typographySection: string;
261
+ shapeSection: string;
262
+ backgroundLabel: string;
263
+ textLabel: string;
264
+ accentLabel: string;
265
+ displayFontLabel: string;
266
+ bodyFontLabel: string;
267
+ heroLabel: string;
268
+ bodyLabel: string;
269
+ radiusLabel: string;
270
+ designToggle: string;
271
+ designToggleTitle: string;
272
+ fontPresetCustom: string;
273
+ shuffleAria: string;
274
+ shuffleTitle: string;
275
+ };
276
+ asset: {
277
+ devOnlyMessage: string;
278
+ sectionAria: string;
279
+ eyebrow: string;
280
+ scopeSlide: string;
281
+ scopeGlobal: string;
282
+ /** templates: "{count} file" / "{count} files" */
283
+ fileCount: Plural;
284
+ usageUnused: string;
285
+ searchLogos: string;
286
+ upload: string;
287
+ dropToUpload: string;
288
+ loading: string;
289
+ noAssetsYet: string;
290
+ noAssetsHintPrefix: string;
291
+ noAssetsHintSuffix: string;
292
+ nameAlreadyExists: string;
293
+ /** template: "Preview {name}" */
294
+ previewAria: string;
295
+ /** template: "Actions for {name}" */
296
+ actionsAria: string;
297
+ previewMenuItem: string;
298
+ renameMenuItem: string;
299
+ deleteMenuItem: string;
300
+ conflictTitle: string;
301
+ /** template: "{name} is already in the assets folder." */
302
+ conflictDescription: string;
303
+ conflictReplace: string;
304
+ conflictRenameCopy: string;
305
+ deleteAssetTitle: string;
306
+ /** template: "Delete {name}? Imports referencing this file in the slide will break." */
307
+ deleteAssetDescription: string;
308
+ /** template: "{name} is used in {count} place across {slides} slide." (singular/plural via {count}/{slides}) */
309
+ deleteAssetInUseDescription: string;
310
+ deleteAssetInUseHint: string;
311
+ deleteAndRevert: string;
312
+ /** template: "Couldn't revert usage in {slideId}." */
313
+ toastRevertFailed: string;
314
+ /** template: "Deleted {name} and reverted {count} usage." */
315
+ toastDeletedWithRevert: string;
316
+ noPreview: string;
317
+ importHintComment: string;
318
+ importHintSemi: string;
319
+ logoSearchTitle: string;
320
+ logoSearchPoweredByPrefix: string;
321
+ logoSearchPlaceholder: string;
322
+ logoSearchErrorTitle: string;
323
+ logoSearchErrorBody: string;
324
+ /** template: 'No logos for "{query}"' */
325
+ logoSearchNoResults: string;
326
+ logoSearchEmpty: string;
327
+ logoSearchEmptyHintPrefix: string;
328
+ logoSearchEmptyHintSuffix: string;
329
+ logoVariantLight: string;
330
+ logoVariantDark: string;
331
+ /** template: "Upload failed ({status})" */
332
+ toastUploadFailed: string;
333
+ /** template: "Replaced {name}" */
334
+ toastReplaced: string;
335
+ /** template: "Uploaded as {name}" */
336
+ toastUploadedAs: string;
337
+ /** template: "Uploaded {name}" */
338
+ toastUploaded: string;
339
+ /** template: "Rename failed ({status})" */
340
+ toastRenameFailed: string;
341
+ /** template: "Renamed to {name}" */
342
+ toastRenamed: string;
343
+ /** template: "Delete failed ({status})" */
344
+ toastDeleteFailed: string;
345
+ /** template: "Deleted {name}" */
346
+ toastDeleted: string;
347
+ toastDownloadFailed: string;
348
+ toastSearchFailed: string;
349
+ };
350
+ thumbnailRail: {
351
+ pages: string;
352
+ /** template: "Go to page {n}" */
353
+ goToPageAria: string;
354
+ duplicatePage: string;
355
+ deletePage: string;
356
+ /** template: "Page {n} actions" */
357
+ pageActionsAria: string;
358
+ /** template: "Duplicated page {n}" */
359
+ toastDuplicated: string;
360
+ /** template: "Deleted page {n}" */
361
+ toastDeleted: string;
362
+ toastDuplicateFailed: string;
363
+ toastDeleteFailed: string;
364
+ resizeRail: string;
365
+ transitionIndicator: string;
366
+ stepsIndicator: string;
367
+ overviewAria: string;
368
+ };
369
+ pdfToast: {
370
+ title: string;
371
+ /** template: "Processing page {current} of {total}" */
372
+ processing: string;
373
+ printing: string;
374
+ done: string;
375
+ };
376
+ pptxToast: {
377
+ title: string;
378
+ /** template: "Rendering page {current} of {total}" */
379
+ processing: string;
380
+ generating: string;
381
+ done: string;
382
+ };
383
+ themeToggle: {
384
+ toggleAria: string;
385
+ title: string;
386
+ light: string;
387
+ dark: string;
388
+ system: string;
389
+ };
390
+ languageToggle: {
391
+ toggleAria: string;
392
+ title: string;
393
+ };
394
+ imagePlaceholder: {
395
+ dropOverlay: string;
396
+ uploading: string;
397
+ uploadFailed: string;
398
+ };
399
+ notesDrawer: {
400
+ toggle: string;
401
+ /** template: "page {n}/{total}" */
402
+ pageLabel: string;
403
+ placeholder: string;
404
+ statusSaving: string;
405
+ statusSaved: string;
406
+ /** template: "Save failed: {msg}" */
407
+ statusError: string;
408
+ };
409
+ themes: {
410
+ title: string;
411
+ noThemesTitle: string;
412
+ noThemesHintPrefix: string;
413
+ noThemesHintSuffix: string;
414
+ noDemoYet: string;
415
+ noDemoHintPrefix: string;
416
+ noDemoHintSuffix: string;
417
+ backToGallery: string;
418
+ /** template: "page {n}/{total}" */
419
+ pageOf: string;
420
+ nextPageAria: string;
421
+ prevPageAria: string;
422
+ /** template: "Open theme {name}" */
423
+ openThemeAria: string;
424
+ usedBy: string;
425
+ usedByEmpty: string;
426
+ expandPromptAria: string;
427
+ collapsePromptAria: string;
428
+ };
429
+ }; //#endregion
430
+ export { Locale, Plural };
@@ -0,0 +1,14 @@
1
+ import "../types-CHmFPIG_.js";
2
+ import { OpenAipptConfig } from "../config-DIC-yVPp.js";
3
+ import { InlineConfig } from "vite";
4
+
5
+ //#region src/vite/config.d.ts
6
+ type CreateViteConfigOptions = {
7
+ userCwd: string;
8
+ config?: OpenAipptConfig;
9
+ mode?: 'serve' | 'build';
10
+ };
11
+ declare function createViteConfig(opts: CreateViteConfigOptions): Promise<InlineConfig>;
12
+
13
+ //#endregion
14
+ export { createViteConfig };
@@ -0,0 +1,4 @@
1
+ import "../design-cpzS8aud.js";
2
+ import { createViteConfig } from "../config-CjzqjrEA.js";
3
+
4
+ export { createViteConfig };
package/env.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ // Ambient module declarations for assets imported from `slides/<id>/assets/`.
2
+ // Mirrors Vite's default asset handling (default export = resolved URL).
3
+ //
4
+ // Consumers opt in via tsconfig:
5
+ //
6
+ // { "compilerOptions": { "types": ["@open-aippt/core/env"] } }
7
+
8
+ declare module '*.svg' {
9
+ const src: string;
10
+ export default src;
11
+ }
12
+ declare module '*.png' {
13
+ const src: string;
14
+ export default src;
15
+ }
16
+ declare module '*.jpg' {
17
+ const src: string;
18
+ export default src;
19
+ }
20
+ declare module '*.jpeg' {
21
+ const src: string;
22
+ export default src;
23
+ }
24
+ declare module '*.webp' {
25
+ const src: string;
26
+ export default src;
27
+ }
28
+ declare module '*.gif' {
29
+ const src: string;
30
+ export default src;
31
+ }
32
+ declare module '*.avif' {
33
+ const src: string;
34
+ export default src;
35
+ }
36
+ declare module '*.mp4' {
37
+ const src: string;
38
+ export default src;
39
+ }
40
+ declare module '*.webm' {
41
+ const src: string;
42
+ export default src;
43
+ }
44
+ declare module '*.woff' {
45
+ const src: string;
46
+ export default src;
47
+ }
48
+ declare module '*.woff2' {
49
+ const src: string;
50
+ export default src;
51
+ }
52
+ declare module '*.ttf' {
53
+ const src: string;
54
+ export default src;
55
+ }
56
+ declare module '*.otf' {
57
+ const src: string;
58
+ export default src;
59
+ }