@strategicnerds/slide-nerds 0.1.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 (101) hide show
  1. package/dist/cli/commands/analytics.d.ts +6 -0
  2. package/dist/cli/commands/analytics.d.ts.map +1 -0
  3. package/dist/cli/commands/analytics.js +44 -0
  4. package/dist/cli/commands/analytics.js.map +1 -0
  5. package/dist/cli/commands/create.d.ts +4 -0
  6. package/dist/cli/commands/create.d.ts.map +1 -0
  7. package/dist/cli/commands/create.js +87 -0
  8. package/dist/cli/commands/create.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +6 -0
  10. package/dist/cli/commands/export.d.ts.map +1 -0
  11. package/dist/cli/commands/export.js +109 -0
  12. package/dist/cli/commands/export.js.map +1 -0
  13. package/dist/cli/index.d.ts +3 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +12 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/template-path.d.ts +4 -0
  18. package/dist/cli/template-path.d.ts.map +1 -0
  19. package/dist/cli/template-path.js +13 -0
  20. package/dist/cli/template-path.js.map +1 -0
  21. package/dist/runtime/export-api.d.ts +15 -0
  22. package/dist/runtime/export-api.d.ts.map +1 -0
  23. package/dist/runtime/export-api.js +21 -0
  24. package/dist/runtime/export-api.js.map +1 -0
  25. package/dist/runtime/index.d.ts +12 -0
  26. package/dist/runtime/index.d.ts.map +1 -0
  27. package/dist/runtime/index.js +8 -0
  28. package/dist/runtime/index.js.map +1 -0
  29. package/dist/runtime/light-table.d.ts +8 -0
  30. package/dist/runtime/light-table.d.ts.map +1 -0
  31. package/dist/runtime/light-table.js +104 -0
  32. package/dist/runtime/light-table.js.map +1 -0
  33. package/dist/runtime/presenter-view.d.ts +7 -0
  34. package/dist/runtime/presenter-view.d.ts.map +1 -0
  35. package/dist/runtime/presenter-view.js +62 -0
  36. package/dist/runtime/presenter-view.js.map +1 -0
  37. package/dist/runtime/slide-context.d.ts +16 -0
  38. package/dist/runtime/slide-context.d.ts.map +1 -0
  39. package/dist/runtime/slide-context.js +18 -0
  40. package/dist/runtime/slide-context.js.map +1 -0
  41. package/dist/runtime/slide-controls.d.ts +3 -0
  42. package/dist/runtime/slide-controls.d.ts.map +1 -0
  43. package/dist/runtime/slide-controls.js +177 -0
  44. package/dist/runtime/slide-controls.js.map +1 -0
  45. package/dist/runtime/slide-dom.d.ts +17 -0
  46. package/dist/runtime/slide-dom.d.ts.map +1 -0
  47. package/dist/runtime/slide-dom.js +89 -0
  48. package/dist/runtime/slide-dom.js.map +1 -0
  49. package/dist/runtime/slide-runtime.d.ts +7 -0
  50. package/dist/runtime/slide-runtime.d.ts.map +1 -0
  51. package/dist/runtime/slide-runtime.js +125 -0
  52. package/dist/runtime/slide-runtime.js.map +1 -0
  53. package/dist/runtime/slide-shape.d.ts +21 -0
  54. package/dist/runtime/slide-shape.d.ts.map +1 -0
  55. package/dist/runtime/slide-shape.js +115 -0
  56. package/dist/runtime/slide-shape.js.map +1 -0
  57. package/dist/runtime/types.d.ts +150 -0
  58. package/dist/runtime/types.d.ts.map +1 -0
  59. package/dist/runtime/types.js +38 -0
  60. package/dist/runtime/types.js.map +1 -0
  61. package/dist/runtime/use-presenter-mode.d.ts +14 -0
  62. package/dist/runtime/use-presenter-mode.d.ts.map +1 -0
  63. package/dist/runtime/use-presenter-mode.js +52 -0
  64. package/dist/runtime/use-presenter-mode.js.map +1 -0
  65. package/dist/runtime/use-slide-navigation.d.ts +13 -0
  66. package/dist/runtime/use-slide-navigation.d.ts.map +1 -0
  67. package/dist/runtime/use-slide-navigation.js +230 -0
  68. package/dist/runtime/use-slide-navigation.js.map +1 -0
  69. package/package.json +64 -0
  70. package/skills/accessibility/SKILL.md +236 -0
  71. package/skills/advanced-layouts/SKILL.md +429 -0
  72. package/skills/analytics/SKILL.md +97 -0
  73. package/skills/animation/SKILL.md +364 -0
  74. package/skills/brand/SKILL.md +200 -0
  75. package/skills/data-visualization/SKILL.md +533 -0
  76. package/skills/deck-templates/SKILL.md +93 -0
  77. package/skills/diagrams/SKILL.md +395 -0
  78. package/skills/export/SKILL.md +119 -0
  79. package/skills/interactive/SKILL.md +292 -0
  80. package/skills/layout/SKILL.md +178 -0
  81. package/skills/narrative-frameworks/SKILL.md +250 -0
  82. package/skills/react-component-embeds/SKILL.md +73 -0
  83. package/skills/slide-types/SKILL.md +384 -0
  84. package/skills/slidenerds-runtime/SKILL.md +163 -0
  85. package/skills/speaker-notes/SKILL.md +128 -0
  86. package/skills/strategic-frameworks/SKILL.md +392 -0
  87. package/skills/visual-design/SKILL.md +373 -0
  88. package/templates/analytics/custom.tsx.tmpl +20 -0
  89. package/templates/analytics/ga4.tsx.tmpl +15 -0
  90. package/templates/analytics/gtm.tsx.tmpl +9 -0
  91. package/templates/analytics/plausible.tsx.tmpl +10 -0
  92. package/templates/analytics/posthog.tsx.tmpl +14 -0
  93. package/templates/next-app/CLAUDE.md.tmpl +574 -0
  94. package/templates/next-app/README.md.tmpl +35 -0
  95. package/templates/next-app/app/globals.css.tmpl +274 -0
  96. package/templates/next-app/app/layout.tsx.tmpl +31 -0
  97. package/templates/next-app/app/page.tsx.tmpl +38 -0
  98. package/templates/next-app/brand.config.ts.tmpl +32 -0
  99. package/templates/next-app/package.json.tmpl +25 -0
  100. package/templates/next-app/postcss.config.mjs.tmpl +8 -0
  101. package/templates/next-app/tsconfig.json.tmpl +21 -0
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ type AnalyticsProvider = 'gtm' | 'ga4' | 'posthog' | 'plausible' | 'custom';
3
+ export declare const injectAnalytics: (provider: AnalyticsProvider, analyticsId: string, targetDir: string) => Promise<string>;
4
+ export declare const registerAnalyticsCommand: (program: Command) => void;
5
+ export {};
6
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,KAAK,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;AAI3E,eAAO,MAAM,eAAe,GAC1B,UAAU,iBAAiB,EAC3B,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,CAiBhB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,SAAS,OAAO,KAAG,IA2B3D,CAAA"}
@@ -0,0 +1,44 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { getTemplatePath } from '../template-path.js';
4
+ const ANALYTICS_ID_PLACEHOLDER = '{{ANALYTICS_ID}}';
5
+ export const injectAnalytics = async (provider, analyticsId, targetDir) => {
6
+ const templatesDir = getTemplatePath('analytics');
7
+ const templatePath = path.join(templatesDir, `${provider}.tsx.tmpl`);
8
+ if (!(await fs.pathExists(templatePath))) {
9
+ throw new Error(`Analytics template not found for provider: ${provider}`);
10
+ }
11
+ const template = await fs.readFile(templatePath, 'utf-8');
12
+ const content = template.replaceAll(ANALYTICS_ID_PLACEHOLDER, analyticsId);
13
+ const componentDir = path.join(targetDir, 'components');
14
+ await fs.ensureDir(componentDir);
15
+ const outputPath = path.join(componentDir, `${provider}-analytics.tsx`);
16
+ await fs.writeFile(outputPath, content, 'utf-8');
17
+ return outputPath;
18
+ };
19
+ export const registerAnalyticsCommand = (program) => {
20
+ program
21
+ .command('analytics')
22
+ .description('Add an analytics provider to your deck')
23
+ .option('--gtm <id>', 'Google Tag Manager ID (GTM-XXXXXX)')
24
+ .option('--ga4 <id>', 'Google Analytics 4 ID (G-XXXXXXXXXX)')
25
+ .option('--posthog <id>', 'PostHog project key (phc_XXXXXXXXXX)')
26
+ .option('--plausible <domain>', 'Plausible domain (yourdomain.com)')
27
+ .option('--custom', 'Drop a blank analytics component for manual wiring')
28
+ .action(async (options) => {
29
+ const PROVIDERS = ['gtm', 'ga4', 'posthog', 'plausible', 'custom'];
30
+ const matched = PROVIDERS.find((p) => options[p] !== undefined);
31
+ if (!matched) {
32
+ console.error('Specify a provider: --gtm, --ga4, --posthog, --plausible, or --custom');
33
+ process.exit(1);
34
+ }
35
+ const analyticsId = typeof options[matched] === 'string'
36
+ ? options[matched]
37
+ : '';
38
+ const targetDir = process.cwd();
39
+ const outputPath = await injectAnalytics(matched, analyticsId, targetDir);
40
+ console.log(`Analytics component created: ${path.relative(targetDir, outputPath)}`);
41
+ console.log('Import this component in your root layout to activate analytics.');
42
+ });
43
+ };
44
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/cli/commands/analytics.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAIrD,MAAM,wBAAwB,GAAG,kBAAkB,CAAA;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,QAA2B,EAC3B,WAAmB,EACnB,SAAiB,EACA,EAAE;IACnB,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,WAAW,CAAC,CAAA;IAEpE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAA;IAE1E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,gBAAgB,CAAC,CAAA;IACvE,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAEhD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACjE,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,YAAY,EAAE,oCAAoC,CAAC;SAC1D,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;SAC5D,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,mCAAmC,CAAC;SACnE,MAAM,CAAC,UAAU,EAAE,oDAAoD,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,OAAqD,EAAE,EAAE;QACtE,MAAM,SAAS,GAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAEvF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAA;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;YACtD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,EAAE,CAAA;QAEN,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAC/B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;QACnF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare const scaffoldProject: (projectName: string, targetDir: string) => Promise<string[]>;
3
+ export declare const registerCreateCommand: (program: Command) => void;
4
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiCnC,eAAO,MAAM,eAAe,GAC1B,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,EAAE,CAwBlB,CAAA;AAmBD,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAyBxD,CAAA"}
@@ -0,0 +1,87 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { getTemplatePath, getSkillsPath } from '../template-path.js';
4
+ const TEMPLATE_PLACEHOLDER = '{{PROJECT_NAME}}';
5
+ const processTemplate = (content, projectName) => {
6
+ return content.replaceAll(TEMPLATE_PLACEHOLDER, projectName);
7
+ };
8
+ const copySkills = async (targetDir) => {
9
+ const skillsSource = getSkillsPath();
10
+ const skillsDest = path.join(targetDir, '.slidenerds', 'skills');
11
+ let count = 0;
12
+ if (!(await fs.pathExists(skillsSource)))
13
+ return count;
14
+ const entries = await fs.readdir(skillsSource, { withFileTypes: true });
15
+ for (const entry of entries) {
16
+ if (!entry.isDirectory())
17
+ continue;
18
+ const skillFile = path.join(skillsSource, entry.name, 'SKILL.md');
19
+ if (await fs.pathExists(skillFile)) {
20
+ const destDir = path.join(skillsDest, entry.name);
21
+ await fs.ensureDir(destDir);
22
+ await fs.copyFile(skillFile, path.join(destDir, 'SKILL.md'));
23
+ count++;
24
+ }
25
+ }
26
+ return count;
27
+ };
28
+ export const scaffoldProject = async (projectName, targetDir) => {
29
+ const templatesDir = getTemplatePath('next-app');
30
+ const createdFiles = [];
31
+ const templateFiles = await getTemplateFiles(templatesDir);
32
+ for (const relPath of templateFiles) {
33
+ const srcPath = path.join(templatesDir, relPath);
34
+ const destRelPath = relPath.replace(/\.tmpl$/, '');
35
+ const destPath = path.join(targetDir, destRelPath);
36
+ await fs.ensureDir(path.dirname(destPath));
37
+ const content = await fs.readFile(srcPath, 'utf-8');
38
+ const processed = processTemplate(content, projectName);
39
+ await fs.writeFile(destPath, processed, 'utf-8');
40
+ createdFiles.push(destRelPath);
41
+ }
42
+ const skillCount = await copySkills(targetDir);
43
+ if (skillCount > 0) {
44
+ createdFiles.push(`.slidenerds/skills/ (${skillCount} skills)`);
45
+ }
46
+ return createdFiles;
47
+ };
48
+ const getTemplateFiles = async (dir, prefix = '') => {
49
+ const entries = await fs.readdir(dir, { withFileTypes: true });
50
+ const files = [];
51
+ for (const entry of entries) {
52
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
53
+ if (entry.isDirectory()) {
54
+ const subFiles = await getTemplateFiles(path.join(dir, entry.name), relPath);
55
+ files.push(...subFiles);
56
+ }
57
+ else {
58
+ files.push(relPath);
59
+ }
60
+ }
61
+ return files;
62
+ };
63
+ export const registerCreateCommand = (program) => {
64
+ program
65
+ .command('create <name>')
66
+ .description('Create a new slidenerds deck')
67
+ .action(async (name) => {
68
+ const targetDir = path.resolve(process.cwd(), name);
69
+ if (await fs.pathExists(targetDir)) {
70
+ console.error(`Error: Directory "${name}" already exists.`);
71
+ process.exit(1);
72
+ }
73
+ console.log(`Creating slidenerds deck: ${name}`);
74
+ const files = await scaffoldProject(name, targetDir);
75
+ const skillsDir = path.join(targetDir, '.slidenerds', 'skills');
76
+ const skillCount = (await fs.pathExists(skillsDir))
77
+ ? (await fs.readdir(skillsDir)).length
78
+ : 0;
79
+ console.log(`Created ${files.length - 1} files and ${skillCount} skills in ./${name}`);
80
+ console.log('');
81
+ console.log('Next steps:');
82
+ console.log(` cd ${name}`);
83
+ console.log(' npm install');
84
+ console.log(' npm run dev');
85
+ });
86
+ };
87
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEpE,MAAM,oBAAoB,GAAG,kBAAkB,CAAA;AAE/C,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE;IACvE,OAAO,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;IAC9D,MAAM,YAAY,GAAG,aAAa,EAAE,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;IAChE,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAEtD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACjE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC3B,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;YAC5D,KAAK,EAAE,CAAA;QACT,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,WAAmB,EACnB,SAAiB,EACE,EAAE;IACrB,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IAChD,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAE1D,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAElD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACvD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAA;IAE9C,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC,wBAAwB,UAAU,UAAU,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAE,MAAM,GAAG,EAAE,EAAqB,EAAE;IAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAC/D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;YAC5E,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IAC9D,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;QAEnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,mBAAmB,CAAC,CAAA;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC/D,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACtC,CAAC,CAAC,CAAC,CAAA;QACL,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,GAAG,CAAC,cAAc,UAAU,gBAAgB,IAAI,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ type ExportFormat = 'pdf' | 'pptx' | 'gslides';
3
+ export declare const exportDeck: (format: ExportFormat, url: string) => Promise<void>;
4
+ export declare const registerExportCommand: (program: Command) => void;
5
+ export {};
6
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,KAAK,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;AAoG9C,eAAO,MAAM,UAAU,GAAU,QAAQ,YAAY,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAYhF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAwBxD,CAAA"}
@@ -0,0 +1,109 @@
1
+ const extractSlides = async (url) => {
2
+ const puppeteer = await import('puppeteer');
3
+ const browser = await puppeteer.default.launch({ headless: true });
4
+ const page = await browser.newPage();
5
+ await page.goto(url, { waitUntil: 'networkidle0' });
6
+ const slides = await page.evaluate(() => {
7
+ const slideElements = document.querySelectorAll('[data-slide]');
8
+ return Array.from(slideElements).map((slide) => {
9
+ const heading = slide.querySelector('h1, h2, h3');
10
+ const title = heading?.textContent?.trim() ?? '';
11
+ const bodyElements = slide.querySelectorAll('p, li');
12
+ const body = Array.from(bodyElements)
13
+ .map((el) => el.textContent?.trim() ?? '')
14
+ .filter((text) => text.length > 0);
15
+ const noteElements = slide.querySelectorAll('[data-notes]');
16
+ const notes = Array.from(noteElements)
17
+ .map((el) => el.textContent?.trim() ?? '')
18
+ .filter((text) => text.length > 0);
19
+ return { title, body, notes };
20
+ });
21
+ });
22
+ await browser.close();
23
+ return slides;
24
+ };
25
+ const exportPdf = async (url) => {
26
+ const puppeteer = await import('puppeteer');
27
+ const browser = await puppeteer.default.launch({ headless: true });
28
+ const page = await browser.newPage();
29
+ await page.goto(url, { waitUntil: 'networkidle0' });
30
+ await page.pdf({
31
+ path: 'deck.pdf',
32
+ format: 'A4',
33
+ landscape: true,
34
+ printBackground: true,
35
+ });
36
+ await browser.close();
37
+ console.log('Exported: deck.pdf');
38
+ };
39
+ const exportPptx = async (url) => {
40
+ const PptxGenJS = (await import('pptxgenjs')).default;
41
+ const slides = await extractSlides(url);
42
+ const pptx = new PptxGenJS();
43
+ pptx.layout = 'LAYOUT_WIDE';
44
+ for (const slideData of slides) {
45
+ const slide = pptx.addSlide();
46
+ if (slideData.title) {
47
+ slide.addText(slideData.title, {
48
+ x: 0.5,
49
+ y: 0.5,
50
+ w: '90%',
51
+ fontSize: 32,
52
+ bold: true,
53
+ color: '1a1a2e',
54
+ });
55
+ }
56
+ if (slideData.body.length > 0) {
57
+ slide.addText(slideData.body.map((line) => ({
58
+ text: line,
59
+ options: { bullet: true, fontSize: 18, color: '333333', breakLine: true },
60
+ })), { x: 0.5, y: 1.8, w: '90%', h: '60%' });
61
+ }
62
+ if (slideData.notes.length > 0) {
63
+ slide.addNotes(slideData.notes.join('\n\n'));
64
+ }
65
+ }
66
+ await pptx.writeFile({ fileName: 'deck.pptx' });
67
+ console.log('Exported: deck.pptx');
68
+ };
69
+ const exportGslides = async (url) => {
70
+ await exportPptx(url);
71
+ console.log('Google Slides: Import the generated deck.pptx into Google Slides via File > Import.');
72
+ };
73
+ export const exportDeck = async (format, url) => {
74
+ switch (format) {
75
+ case 'pdf':
76
+ await exportPdf(url);
77
+ break;
78
+ case 'pptx':
79
+ await exportPptx(url);
80
+ break;
81
+ case 'gslides':
82
+ await exportGslides(url);
83
+ break;
84
+ }
85
+ };
86
+ export const registerExportCommand = (program) => {
87
+ program
88
+ .command('export')
89
+ .description('Export the deck to PDF, PPTX, or Google Slides')
90
+ .option('--pdf', 'Export as PDF')
91
+ .option('--pptx', 'Export as PowerPoint')
92
+ .option('--gslides', 'Export as Google Slides (generates PPTX for import)')
93
+ .option('--url <url>', 'Dev server URL', 'http://localhost:3000')
94
+ .action(async (options) => {
95
+ const format = options.pdf
96
+ ? 'pdf'
97
+ : options.pptx
98
+ ? 'pptx'
99
+ : options.gslides
100
+ ? 'gslides'
101
+ : null;
102
+ if (!format) {
103
+ console.error('Specify a format: --pdf, --pptx, or --gslides');
104
+ process.exit(1);
105
+ }
106
+ await exportDeck(format, options.url);
107
+ });
108
+ };
109
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerCreateCommand } from './commands/create.js';
4
+ import { registerExportCommand } from './commands/export.js';
5
+ import { registerAnalyticsCommand } from './commands/analytics.js';
6
+ const program = new Command();
7
+ program.name('slidenerds').description('CLI for creating and managing slidenerds decks').version('0.1.0');
8
+ registerCreateCommand(program);
9
+ registerExportCommand(program);
10
+ registerAnalyticsCommand(program);
11
+ program.parse();
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAEzG,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const getTemplatePath: (...segments: string[]) => string;
2
+ export declare const getSkillsPath: () => string;
3
+ export declare const getTemplatesRoot: () => string;
4
+ //# sourceMappingURL=template-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-path.d.ts","sourceRoot":"","sources":["../../src/cli/template-path.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,eAAe,GAAI,GAAG,UAAU,MAAM,EAAE,KAAG,MAEvD,CAAA;AAED,eAAO,MAAM,aAAa,QAAO,MAEhC,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,MAEnC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
4
+ export const getTemplatePath = (...segments) => {
5
+ return path.join(PACKAGE_ROOT, 'templates', ...segments);
6
+ };
7
+ export const getSkillsPath = () => {
8
+ return path.join(PACKAGE_ROOT, 'skills');
9
+ };
10
+ export const getTemplatesRoot = () => {
11
+ return path.join(PACKAGE_ROOT, 'templates');
12
+ };
13
+ //# sourceMappingURL=template-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-path.js","sourceRoot":"","sources":["../../src/cli/template-path.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,IAAI,CACL,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,QAAkB,EAAU,EAAE;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,GAAW,EAAE;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;AAC7C,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ type ExportFormat = 'pdf' | 'pptx' | 'gslides';
2
+ type ExportOptions = {
3
+ format: ExportFormat;
4
+ };
5
+ type SlidenerdsApi = {
6
+ export: (options: ExportOptions) => Promise<void>;
7
+ };
8
+ declare global {
9
+ interface Window {
10
+ slidenerds: SlidenerdsApi;
11
+ }
12
+ }
13
+ export declare const registerExportApi: () => void;
14
+ export {};
15
+ //# sourceMappingURL=export-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-api.d.ts","sourceRoot":"","sources":["../../src/runtime/export-api.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;AAE9C,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE,aAAa,CAAA;KAC1B;CACF;AAED,eAAO,MAAM,iBAAiB,QAAO,IAqBpC,CAAA"}
@@ -0,0 +1,21 @@
1
+ export const registerExportApi = () => {
2
+ if (typeof window === 'undefined')
3
+ return;
4
+ window.slidenerds = {
5
+ export: async (options) => {
6
+ const { format } = options;
7
+ switch (format) {
8
+ case 'pdf':
9
+ window.print();
10
+ break;
11
+ case 'pptx':
12
+ console.info('[slidenerds] PPTX export triggered. Use the CLI for full export.');
13
+ break;
14
+ case 'gslides':
15
+ console.info('[slidenerds] Google Slides export triggered. Use the CLI for full export.');
16
+ break;
17
+ }
18
+ },
19
+ };
20
+ };
21
+ //# sourceMappingURL=export-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-api.js","sourceRoot":"","sources":["../../src/runtime/export-api.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAS,EAAE;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IAEzC,MAAM,CAAC,UAAU,GAAG;QAClB,MAAM,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACvC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAC1B,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK;oBACR,MAAM,CAAC,KAAK,EAAE,CAAA;oBACd,MAAK;gBACP,KAAK,MAAM;oBACT,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;oBAChF,MAAK;gBACP,KAAK,SAAS;oBACZ,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAA;oBACD,MAAK;YACT,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ export { SlideRuntime } from './slide-runtime.js';
2
+ export { PresenterView } from './presenter-view.js';
3
+ export { LightTable } from './light-table.js';
4
+ export { useSlideState } from './slide-context.js';
5
+ export type { SlideState } from './slide-context.js';
6
+ export type { BrandConfig } from './types.js';
7
+ export { BrandConfigSchema } from './types.js';
8
+ export { SlideControls } from './slide-controls.js';
9
+ export { SlideShape } from './slide-shape.js';
10
+ export type { ShapeType } from './slide-shape.js';
11
+ export type { StepEntry } from './slide-dom.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export { SlideRuntime } from './slide-runtime.js';
2
+ export { PresenterView } from './presenter-view.js';
3
+ export { LightTable } from './light-table.js';
4
+ export { useSlideState } from './slide-context.js';
5
+ export { BrandConfigSchema } from './types.js';
6
+ export { SlideControls } from './slide-controls.js';
7
+ export { SlideShape } from './slide-shape.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ type LightTableProps = {
3
+ className?: string;
4
+ onReorder?: (fromIndex: number, toIndex: number) => void;
5
+ };
6
+ export declare const LightTable: React.FC<LightTableProps>;
7
+ export {};
8
+ //# sourceMappingURL=light-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-table.d.ts","sourceRoot":"","sources":["../../src/runtime/light-table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAIhF,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACzD,CAAA;AAmFD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8EhD,CAAA"}
@@ -0,0 +1,104 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { useSlideState } from './slide-context.js';
5
+ import { getSlideElements, getSlidesInfo } from './slide-dom.js';
6
+ const THUMB_WIDTH = 280;
7
+ const THUMB_HEIGHT = Math.round(THUMB_WIDTH * (9 / 16));
8
+ const SCALE = THUMB_WIDTH / 1920;
9
+ const SlideThumbnail = ({ slideIndex, isActive }) => {
10
+ const containerRef = useRef(null);
11
+ useEffect(() => {
12
+ const container = containerRef.current;
13
+ if (!container)
14
+ return;
15
+ const slideEl = getSlideElements()[slideIndex];
16
+ if (!slideEl)
17
+ return;
18
+ const clone = slideEl.cloneNode(true);
19
+ clone.classList.add('active');
20
+ clone.style.position = 'absolute';
21
+ clone.style.top = '0';
22
+ clone.style.left = '0';
23
+ clone.style.width = '1920px';
24
+ clone.style.height = '1080px';
25
+ clone.style.transform = `scale(${SCALE})`;
26
+ clone.style.transformOrigin = 'top left';
27
+ clone.style.pointerEvents = 'none';
28
+ clone.style.display = 'flex';
29
+ clone.querySelectorAll('[data-step]').forEach((step) => {
30
+ const el = step;
31
+ el.style.visibility = 'visible';
32
+ el.style.opacity = '1';
33
+ el.style.transform = 'none';
34
+ });
35
+ clone.querySelectorAll('[data-notes]').forEach((note) => {
36
+ note.style.display = 'none';
37
+ });
38
+ // Clear existing children safely
39
+ while (container.firstChild) {
40
+ container.removeChild(container.firstChild);
41
+ }
42
+ container.appendChild(clone);
43
+ }, [slideIndex]);
44
+ return (_jsxs("div", { style: {
45
+ borderRadius: '8px',
46
+ overflow: 'hidden',
47
+ border: isActive ? '2px solid #f59e0b' : '1px solid rgba(255,255,255,0.1)',
48
+ transition: 'border-color 150ms ease',
49
+ }, children: [_jsx("div", { ref: containerRef, style: {
50
+ width: THUMB_WIDTH,
51
+ height: THUMB_HEIGHT,
52
+ position: 'relative',
53
+ overflow: 'hidden',
54
+ background: '#111114',
55
+ } }), _jsxs("div", { style: {
56
+ padding: '0.5rem 0.75rem',
57
+ background: 'rgba(255,255,255,0.03)',
58
+ borderTop: '1px solid rgba(255,255,255,0.06)',
59
+ fontSize: '0.7rem',
60
+ fontWeight: 600,
61
+ color: isActive ? '#f59e0b' : 'rgba(255,255,255,0.35)',
62
+ letterSpacing: '0.05em',
63
+ }, children: ["Slide ", slideIndex + 1] })] }));
64
+ };
65
+ export const LightTable = ({ className, onReorder }) => {
66
+ const { currentSlide, goToSlide } = useSlideState();
67
+ const [dragSource, setDragSource] = useState(null);
68
+ const slides = useMemo(() => getSlidesInfo(), []);
69
+ const handleSlideClick = useCallback((index) => {
70
+ goToSlide(index);
71
+ }, [goToSlide]);
72
+ const handleDragStart = useCallback((index) => {
73
+ setDragSource(index);
74
+ }, []);
75
+ const handleDragOver = useCallback((event) => {
76
+ event.preventDefault();
77
+ }, []);
78
+ const handleDrop = useCallback((index) => {
79
+ if (dragSource !== null && dragSource !== index) {
80
+ onReorder?.(dragSource, index);
81
+ }
82
+ setDragSource(null);
83
+ }, [dragSource, onReorder]);
84
+ const handleDragEnd = useCallback(() => {
85
+ setDragSource(null);
86
+ }, []);
87
+ return (_jsx("div", { className: className, "data-testid": "light-table", role: "grid", style: {
88
+ position: 'fixed',
89
+ inset: 0,
90
+ zIndex: 9998,
91
+ background: 'rgba(0, 0, 0, 0.95)',
92
+ display: 'grid',
93
+ gridTemplateColumns: `repeat(auto-fill, ${THUMB_WIDTH}px)`,
94
+ gap: '1.25rem',
95
+ padding: '2rem',
96
+ overflowY: 'auto',
97
+ alignContent: 'start',
98
+ justifyContent: 'center',
99
+ }, children: slides.map((slide) => (_jsx("div", { role: "gridcell", "data-testid": `light-table-slide-${slide.index}`, draggable: true, onClick: () => handleSlideClick(slide.index), onDragStart: () => handleDragStart(slide.index), onDragOver: handleDragOver, onDrop: () => handleDrop(slide.index), onDragEnd: handleDragEnd, style: {
100
+ opacity: dragSource === slide.index ? 0.5 : 1,
101
+ cursor: 'pointer',
102
+ }, children: _jsx(SlideThumbnail, { slideIndex: slide.index, isActive: slide.index === currentSlide }) }, slide.index))) }));
103
+ };
104
+ //# sourceMappingURL=light-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-table.js","sourceRoot":"","sources":["../../src/runtime/light-table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ type PresenterViewProps = {
3
+ className?: string;
4
+ };
5
+ export declare const PresenterView: React.FC<PresenterViewProps>;
6
+ export {};
7
+ //# sourceMappingURL=presenter-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenter-view.d.ts","sourceRoot":"","sources":["../../src/runtime/presenter-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAI3D,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAQD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA+FtD,CAAA"}