egaki 0.6.0 → 0.7.1

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 (271) hide show
  1. package/CHANGELOG.md +145 -9
  2. package/dist/cli/cache-utils.d.ts +33 -0
  3. package/dist/cli/cache-utils.d.ts.map +1 -0
  4. package/dist/cli/cache-utils.js +157 -0
  5. package/dist/cli/cached-generate.d.ts +105 -0
  6. package/dist/cli/cached-generate.d.ts.map +1 -0
  7. package/dist/cli/cached-generate.js +208 -0
  8. package/dist/cli/cached-generate.test.d.ts +11 -0
  9. package/dist/cli/cached-generate.test.d.ts.map +1 -0
  10. package/dist/cli/cached-generate.test.js +431 -0
  11. package/dist/cli/cartesia-provider.d.ts +16 -0
  12. package/dist/cli/cartesia-provider.d.ts.map +1 -0
  13. package/dist/cli/cartesia-provider.js +184 -0
  14. package/dist/cli/chatgpt-auth.d.ts.map +1 -0
  15. package/dist/cli/cli.d.ts +4 -0
  16. package/dist/cli/cli.d.ts.map +1 -0
  17. package/dist/{cli.js → cli/cli.js} +626 -600
  18. package/dist/cli/clone-generate.d.ts +26 -0
  19. package/dist/cli/clone-generate.d.ts.map +1 -0
  20. package/dist/cli/clone-generate.js +148 -0
  21. package/dist/cli/credentials.d.ts.map +1 -0
  22. package/dist/{credentials.js → cli/credentials.js} +20 -0
  23. package/dist/cli/elevenlabs-speech-provider.d.ts +26 -0
  24. package/dist/cli/elevenlabs-speech-provider.d.ts.map +1 -0
  25. package/dist/cli/elevenlabs-speech-provider.js +199 -0
  26. package/dist/cli/generate.d.ts +140 -0
  27. package/dist/cli/generate.d.ts.map +1 -0
  28. package/dist/cli/generate.js +604 -0
  29. package/dist/cli/generate.test.d.ts +2 -0
  30. package/dist/cli/generate.test.d.ts.map +1 -0
  31. package/dist/cli/generate.test.js +131 -0
  32. package/dist/cli/login.d.ts.map +1 -0
  33. package/dist/cli/main.d.ts +3 -0
  34. package/dist/cli/main.d.ts.map +1 -0
  35. package/dist/cli/main.js +7 -0
  36. package/dist/{model-catalog.d.ts → cli/model-catalog.d.ts} +6 -0
  37. package/dist/cli/model-catalog.d.ts.map +1 -0
  38. package/dist/{model-catalog.js → cli/model-catalog.js} +714 -4
  39. package/dist/{models.d.ts → cli/models.d.ts} +12 -5
  40. package/dist/cli/models.d.ts.map +1 -0
  41. package/dist/{models.js → cli/models.js} +58 -57
  42. package/dist/cli/open-browser.d.ts.map +1 -0
  43. package/dist/cli/openai-speech-provider.d.ts +3 -0
  44. package/dist/cli/openai-speech-provider.d.ts.map +1 -0
  45. package/dist/cli/openai-speech-provider.js +28 -0
  46. package/dist/cli/separation-generate.d.ts +34 -0
  47. package/dist/cli/separation-generate.d.ts.map +1 -0
  48. package/dist/cli/separation-generate.js +117 -0
  49. package/dist/cli/speech-catalog.d.ts +35 -0
  50. package/dist/cli/speech-catalog.d.ts.map +1 -0
  51. package/dist/cli/speech-catalog.js +195 -0
  52. package/dist/cli/speech-generate.d.ts +86 -0
  53. package/dist/cli/speech-generate.d.ts.map +1 -0
  54. package/dist/cli/speech-generate.js +156 -0
  55. package/dist/cli/speech-models.d.ts +8 -0
  56. package/dist/cli/speech-models.d.ts.map +1 -0
  57. package/dist/cli/speech-models.js +109 -0
  58. package/dist/cli/speech-provider.test.d.ts +2 -0
  59. package/dist/cli/speech-provider.test.d.ts.map +1 -0
  60. package/dist/cli/speech-provider.test.js +197 -0
  61. package/dist/cli/subscription.d.ts.map +1 -0
  62. package/dist/cli/transcription-catalog.d.ts +35 -0
  63. package/dist/cli/transcription-catalog.d.ts.map +1 -0
  64. package/dist/cli/transcription-catalog.js +192 -0
  65. package/dist/cli/transcription-generate.d.ts +62 -0
  66. package/dist/cli/transcription-generate.d.ts.map +1 -0
  67. package/dist/cli/transcription-generate.js +144 -0
  68. package/dist/cli/transcription-models.d.ts +9 -0
  69. package/dist/cli/transcription-models.d.ts.map +1 -0
  70. package/dist/cli/transcription-models.js +100 -0
  71. package/dist/cli/transcription-providers.d.ts +22 -0
  72. package/dist/cli/transcription-providers.d.ts.map +1 -0
  73. package/dist/cli/transcription-providers.js +290 -0
  74. package/dist/cli/video-model-catalog.d.ts.map +1 -0
  75. package/dist/cli/xai-auth.d.ts.map +1 -0
  76. package/dist/{xai-auth.js → cli/xai-auth.js} +1 -1
  77. package/dist/vite/angled-screen.d.ts +57 -0
  78. package/dist/vite/angled-screen.d.ts.map +1 -0
  79. package/dist/vite/angled-screen.js +115 -0
  80. package/dist/vite/app.d.ts +51 -0
  81. package/dist/vite/app.d.ts.map +1 -0
  82. package/dist/vite/app.js +150 -0
  83. package/dist/vite/bands-shader.d.ts +47 -0
  84. package/dist/vite/bands-shader.d.ts.map +1 -0
  85. package/dist/vite/bands-shader.js +267 -0
  86. package/dist/vite/code-block.d.ts +107 -0
  87. package/dist/vite/code-block.d.ts.map +1 -0
  88. package/dist/vite/code-block.js +641 -0
  89. package/dist/vite/components.d.ts +36 -0
  90. package/dist/vite/components.d.ts.map +1 -0
  91. package/dist/vite/components.js +113 -0
  92. package/dist/vite/dispersion-rings-shader.d.ts +44 -0
  93. package/dist/vite/dispersion-rings-shader.d.ts.map +1 -0
  94. package/dist/vite/dispersion-rings-shader.js +282 -0
  95. package/dist/vite/easing-curves.d.ts +129 -0
  96. package/dist/vite/easing-curves.d.ts.map +1 -0
  97. package/dist/vite/easing-curves.js +584 -0
  98. package/dist/vite/easing-curves.test.d.ts +2 -0
  99. package/dist/vite/easing-curves.test.d.ts.map +1 -0
  100. package/dist/vite/easing-curves.test.js +200 -0
  101. package/dist/vite/generated-media-client.d.ts +35 -0
  102. package/dist/vite/generated-media-client.d.ts.map +1 -0
  103. package/dist/vite/generated-media-client.js +76 -0
  104. package/dist/vite/keyframes.d.ts +129 -0
  105. package/dist/vite/keyframes.d.ts.map +1 -0
  106. package/dist/vite/keyframes.js +194 -0
  107. package/dist/vite/layout-editor.d.ts +45 -0
  108. package/dist/vite/layout-editor.d.ts.map +1 -0
  109. package/dist/vite/layout-editor.js +587 -0
  110. package/dist/vite/layout-transition.d.ts +136 -0
  111. package/dist/vite/layout-transition.d.ts.map +1 -0
  112. package/dist/vite/layout-transition.js +581 -0
  113. package/dist/vite/liquid-gradient-shader.d.ts +62 -0
  114. package/dist/vite/liquid-gradient-shader.d.ts.map +1 -0
  115. package/dist/vite/liquid-gradient-shader.js +413 -0
  116. package/dist/vite/mdx-client.d.ts +15 -0
  117. package/dist/vite/mdx-client.d.ts.map +1 -0
  118. package/dist/vite/mdx-client.js +265 -0
  119. package/dist/vite/mdx-parse.d.ts +102 -0
  120. package/dist/vite/mdx-parse.d.ts.map +1 -0
  121. package/dist/vite/mdx-parse.js +251 -0
  122. package/dist/vite/mdx-provided-components.d.ts +18 -0
  123. package/dist/vite/mdx-provided-components.d.ts.map +1 -0
  124. package/dist/vite/mdx-provided-components.js +14 -0
  125. package/dist/vite/mdx-video.d.ts +327 -0
  126. package/dist/vite/mdx-video.d.ts.map +1 -0
  127. package/dist/vite/mdx-video.js +596 -0
  128. package/dist/vite/mdx-video.test.d.ts +9 -0
  129. package/dist/vite/mdx-video.test.d.ts.map +1 -0
  130. package/dist/vite/mdx-video.test.js +1945 -0
  131. package/dist/vite/media-components.d.ts +45 -0
  132. package/dist/vite/media-components.d.ts.map +1 -0
  133. package/dist/vite/media-components.js +355 -0
  134. package/dist/vite/media-duration-store.d.ts +66 -0
  135. package/dist/vite/media-duration-store.d.ts.map +1 -0
  136. package/dist/vite/media-duration-store.js +204 -0
  137. package/dist/vite/player-page.d.ts +35 -0
  138. package/dist/vite/player-page.d.ts.map +1 -0
  139. package/dist/vite/player-page.js +720 -0
  140. package/dist/vite/render-client.d.ts +18 -0
  141. package/dist/vite/render-client.d.ts.map +1 -0
  142. package/dist/vite/render-client.js +67 -0
  143. package/dist/vite/sdk.d.ts +221 -0
  144. package/dist/vite/sdk.d.ts.map +1 -0
  145. package/dist/vite/sdk.js +355 -0
  146. package/dist/vite/server-components.d.ts +55 -0
  147. package/dist/vite/server-components.d.ts.map +1 -0
  148. package/dist/vite/server-components.js +156 -0
  149. package/dist/vite/server-mdx.d.ts +74 -0
  150. package/dist/vite/server-mdx.d.ts.map +1 -0
  151. package/dist/vite/server-mdx.js +259 -0
  152. package/dist/vite/shader-renderer.d.ts +48 -0
  153. package/dist/vite/shader-renderer.d.ts.map +1 -0
  154. package/dist/vite/shader-renderer.js +411 -0
  155. package/dist/vite/store-hooks.d.ts +12 -0
  156. package/dist/vite/store-hooks.d.ts.map +1 -0
  157. package/dist/vite/store-hooks.js +93 -0
  158. package/dist/vite/store.d.ts +75 -0
  159. package/dist/vite/store.d.ts.map +1 -0
  160. package/dist/vite/store.js +52 -0
  161. package/dist/vite/store.test.d.ts +6 -0
  162. package/dist/vite/store.test.d.ts.map +1 -0
  163. package/dist/vite/store.test.js +172 -0
  164. package/dist/vite/tweakpane-hook.d.ts +94 -0
  165. package/dist/vite/tweakpane-hook.d.ts.map +1 -0
  166. package/dist/vite/tweakpane-hook.js +450 -0
  167. package/dist/vite/vite-plugin.d.ts +28 -0
  168. package/dist/vite/vite-plugin.d.ts.map +1 -0
  169. package/dist/vite/vite-plugin.js +539 -0
  170. package/dist/vite/wave-gradient-shader.d.ts +41 -0
  171. package/dist/vite/wave-gradient-shader.d.ts.map +1 -0
  172. package/dist/vite/wave-gradient-shader.js +207 -0
  173. package/package.json +101 -24
  174. package/skills/egaki/SKILL.md +162 -1
  175. package/src/cli/cache-utils.ts +169 -0
  176. package/src/cli/cached-generate.test.ts +531 -0
  177. package/src/cli/cached-generate.ts +348 -0
  178. package/src/cli/cartesia-provider.ts +249 -0
  179. package/src/{cli.ts → cli/cli.ts} +836 -884
  180. package/src/cli/clone-generate.ts +202 -0
  181. package/src/{credentials.ts → cli/credentials.ts} +20 -0
  182. package/src/cli/elevenlabs-speech-provider.ts +243 -0
  183. package/src/cli/generate.test.ts +166 -0
  184. package/src/cli/generate.ts +912 -0
  185. package/src/cli/main.ts +8 -0
  186. package/src/{model-catalog.ts → cli/model-catalog.ts} +787 -58
  187. package/src/{models.ts → cli/models.ts} +65 -86
  188. package/src/cli/openai-speech-provider.ts +34 -0
  189. package/src/cli/separation-generate.ts +187 -0
  190. package/src/cli/speech-catalog.ts +253 -0
  191. package/src/cli/speech-generate.ts +275 -0
  192. package/src/cli/speech-models.ts +146 -0
  193. package/src/cli/speech-provider.test.ts +226 -0
  194. package/src/cli/transcription-catalog.ts +250 -0
  195. package/src/cli/transcription-generate.ts +214 -0
  196. package/src/cli/transcription-models.ts +136 -0
  197. package/src/cli/transcription-providers.ts +427 -0
  198. package/src/{xai-auth.ts → cli/xai-auth.ts} +1 -1
  199. package/src/vite/angled-screen.tsx +214 -0
  200. package/src/vite/app.tsx +197 -0
  201. package/src/vite/bands-shader.tsx +319 -0
  202. package/src/vite/code-block.tsx +939 -0
  203. package/src/vite/components.tsx +278 -0
  204. package/src/vite/dispersion-rings-shader.tsx +331 -0
  205. package/src/vite/easing-curves.test.ts +232 -0
  206. package/src/vite/easing-curves.ts +743 -0
  207. package/src/vite/generated-media-client.tsx +121 -0
  208. package/src/vite/keyframes.tsx +347 -0
  209. package/src/vite/layout-editor.tsx +709 -0
  210. package/src/vite/layout-transition.tsx +706 -0
  211. package/src/vite/liquid-gradient-shader.tsx +474 -0
  212. package/src/vite/mdx-client.tsx +420 -0
  213. package/src/vite/mdx-parse.ts +343 -0
  214. package/src/vite/mdx-provided-components.ts +19 -0
  215. package/src/vite/mdx-video.test.tsx +2219 -0
  216. package/src/vite/mdx-video.tsx +976 -0
  217. package/src/vite/media-components.tsx +473 -0
  218. package/src/vite/media-duration-store.ts +225 -0
  219. package/src/vite/motion-timing.ts +194 -0
  220. package/src/vite/player-page.tsx +1107 -0
  221. package/src/vite/render-client.ts +84 -0
  222. package/src/vite/sdk.ts +598 -0
  223. package/src/vite/server-components.tsx +241 -0
  224. package/src/vite/server-mdx.ts +285 -0
  225. package/src/vite/shader-renderer.tsx +535 -0
  226. package/src/vite/store-hooks.ts +117 -0
  227. package/src/vite/store.test.ts +202 -0
  228. package/src/vite/store.ts +115 -0
  229. package/src/vite/styles.css +21 -0
  230. package/src/vite/tweakpane-hook.tsx +593 -0
  231. package/src/vite/virtual-modules.d.ts +30 -0
  232. package/src/vite/vite-plugin.ts +585 -0
  233. package/src/vite/wave-gradient-shader.tsx +253 -0
  234. package/README.md +0 -370
  235. package/dist/antigravity-auth.d.ts +0 -15
  236. package/dist/antigravity-auth.d.ts.map +0 -1
  237. package/dist/antigravity-auth.js +0 -544
  238. package/dist/antigravity-image.d.ts +0 -11
  239. package/dist/antigravity-image.d.ts.map +0 -1
  240. package/dist/antigravity-image.js +0 -285
  241. package/dist/chatgpt-auth.d.ts.map +0 -1
  242. package/dist/cli.d.ts +0 -3
  243. package/dist/cli.d.ts.map +0 -1
  244. package/dist/credentials.d.ts.map +0 -1
  245. package/dist/gateway-model-candidates.generated.d.ts +0 -11
  246. package/dist/gateway-model-candidates.generated.d.ts.map +0 -1
  247. package/dist/gateway-model-candidates.generated.js +0 -64
  248. package/dist/login.d.ts.map +0 -1
  249. package/dist/model-catalog.d.ts.map +0 -1
  250. package/dist/models.d.ts.map +0 -1
  251. package/dist/open-browser.d.ts.map +0 -1
  252. package/dist/subscription.d.ts.map +0 -1
  253. package/dist/video-model-catalog.d.ts.map +0 -1
  254. package/dist/xai-auth.d.ts.map +0 -1
  255. /package/dist/{chatgpt-auth.d.ts → cli/chatgpt-auth.d.ts} +0 -0
  256. /package/dist/{chatgpt-auth.js → cli/chatgpt-auth.js} +0 -0
  257. /package/dist/{credentials.d.ts → cli/credentials.d.ts} +0 -0
  258. /package/dist/{login.d.ts → cli/login.d.ts} +0 -0
  259. /package/dist/{login.js → cli/login.js} +0 -0
  260. /package/dist/{open-browser.d.ts → cli/open-browser.d.ts} +0 -0
  261. /package/dist/{open-browser.js → cli/open-browser.js} +0 -0
  262. /package/dist/{subscription.d.ts → cli/subscription.d.ts} +0 -0
  263. /package/dist/{subscription.js → cli/subscription.js} +0 -0
  264. /package/dist/{video-model-catalog.d.ts → cli/video-model-catalog.d.ts} +0 -0
  265. /package/dist/{video-model-catalog.js → cli/video-model-catalog.js} +0 -0
  266. /package/dist/{xai-auth.d.ts → cli/xai-auth.d.ts} +0 -0
  267. /package/src/{chatgpt-auth.ts → cli/chatgpt-auth.ts} +0 -0
  268. /package/src/{login.ts → cli/login.ts} +0 -0
  269. /package/src/{open-browser.ts → cli/open-browser.ts} +0 -0
  270. /package/src/{subscription.ts → cli/subscription.ts} +0 -0
  271. /package/src/{video-model-catalog.ts → cli/video-model-catalog.ts} +0 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Tests for the centralized egaki client store.
3
+ * Pure state transitions — no React, no mocks, just data in and data out.
4
+ */
5
+ import { describe, test, expect, beforeEach } from 'vitest';
6
+ import { egakiStore, selectMediaDurations, selectGenerationStatus, } from "./store.js";
7
+ import { reportSectionDuration, clearSectionDuration, resetSectionDurations, } from "./media-duration-store.js";
8
+ beforeEach(() => {
9
+ egakiStore.setState({
10
+ modules: {},
11
+ sectionReports: new Map(),
12
+ serverGenerationStatus: null,
13
+ serverGenerationEntries: [],
14
+ serverGenerationErrors: [],
15
+ });
16
+ });
17
+ // ---------------------------------------------------------------------------
18
+ // Modules
19
+ // ---------------------------------------------------------------------------
20
+ describe('modules', () => {
21
+ test('setState updates modules', () => {
22
+ const mods = { './foo.tsx': { default: () => null } };
23
+ egakiStore.setState({ modules: mods });
24
+ expect(egakiStore.getState().modules).toBe(mods);
25
+ });
26
+ test('setState replaces previous modules', () => {
27
+ egakiStore.setState({ modules: { './a.tsx': { default: 1 } } });
28
+ const next = { './b.tsx': { default: 2 } };
29
+ egakiStore.setState({ modules: next });
30
+ expect(egakiStore.getState().modules).toBe(next);
31
+ expect(egakiStore.getState().modules['./a.tsx']).toBeUndefined();
32
+ });
33
+ });
34
+ // ---------------------------------------------------------------------------
35
+ // Section duration reports
36
+ // ---------------------------------------------------------------------------
37
+ describe('sectionReports', () => {
38
+ test('reportSectionDuration adds a report', () => {
39
+ reportSectionDuration(0, 'inst-1', 5.5);
40
+ const durations = selectMediaDurations(egakiStore.getState());
41
+ expect(durations).toMatchInlineSnapshot(`
42
+ {
43
+ "0": 5.5,
44
+ }
45
+ `);
46
+ });
47
+ test('per-section max is derived from multiple instances', () => {
48
+ reportSectionDuration(0, 'inst-1', 3);
49
+ reportSectionDuration(0, 'inst-2', 7);
50
+ reportSectionDuration(0, 'inst-3', 5);
51
+ const durations = selectMediaDurations(egakiStore.getState());
52
+ expect(durations['0']).toBe(7);
53
+ });
54
+ test('multiple sections tracked independently', () => {
55
+ reportSectionDuration(0, 'a', 2);
56
+ reportSectionDuration(1, 'b', 4);
57
+ reportSectionDuration(2, 'c', 6);
58
+ const durations = selectMediaDurations(egakiStore.getState());
59
+ expect(durations).toMatchInlineSnapshot(`
60
+ {
61
+ "0": 2,
62
+ "1": 4,
63
+ "2": 6,
64
+ }
65
+ `);
66
+ });
67
+ test('duplicate report with same value is a no-op', () => {
68
+ reportSectionDuration(0, 'inst-1', 5);
69
+ const before = egakiStore.getState().sectionReports;
70
+ reportSectionDuration(0, 'inst-1', 5);
71
+ expect(egakiStore.getState().sectionReports).toBe(before);
72
+ });
73
+ test('clearSectionDuration removes an instance report', () => {
74
+ reportSectionDuration(0, 'a', 3);
75
+ reportSectionDuration(0, 'b', 7);
76
+ clearSectionDuration(0, 'b');
77
+ const durations = selectMediaDurations(egakiStore.getState());
78
+ expect(durations['0']).toBe(3);
79
+ });
80
+ test('clearSectionDuration removes section entry when last instance clears', () => {
81
+ reportSectionDuration(0, 'a', 3);
82
+ clearSectionDuration(0, 'a');
83
+ const durations = selectMediaDurations(egakiStore.getState());
84
+ expect(durations).toMatchInlineSnapshot(`{}`);
85
+ });
86
+ test('clearSectionDuration is a no-op for missing instance', () => {
87
+ reportSectionDuration(0, 'a', 3);
88
+ const before = egakiStore.getState().sectionReports;
89
+ clearSectionDuration(0, 'nonexistent');
90
+ expect(egakiStore.getState().sectionReports).toBe(before);
91
+ });
92
+ test('resetSectionDurations clears all reports', () => {
93
+ reportSectionDuration(0, 'a', 3);
94
+ reportSectionDuration(1, 'b', 5);
95
+ resetSectionDurations();
96
+ expect(egakiStore.getState().sectionReports.size).toBe(0);
97
+ expect(selectMediaDurations(egakiStore.getState())).toMatchInlineSnapshot(`{}`);
98
+ });
99
+ test('resetSectionDurations is a no-op when already empty', () => {
100
+ const before = egakiStore.getState().sectionReports;
101
+ resetSectionDurations();
102
+ expect(egakiStore.getState().sectionReports).toBe(before);
103
+ });
104
+ test('ignores invalid inputs', () => {
105
+ reportSectionDuration(-1, 'a', 5);
106
+ reportSectionDuration(0, 'a', NaN);
107
+ reportSectionDuration(0, 'a', 0);
108
+ reportSectionDuration(0, 'a', -1);
109
+ expect(egakiStore.getState().sectionReports.size).toBe(0);
110
+ });
111
+ });
112
+ // ---------------------------------------------------------------------------
113
+ // Generation status (server-driven)
114
+ // ---------------------------------------------------------------------------
115
+ describe('serverGenerationStatus', () => {
116
+ test('setState tracks server generation status', () => {
117
+ egakiStore.setState({
118
+ serverGenerationStatus: { counts: { image: 1 }, total: 1 },
119
+ });
120
+ const status = selectGenerationStatus(egakiStore.getState());
121
+ expect(status).toMatchInlineSnapshot(`
122
+ {
123
+ "counts": {
124
+ "image": 1,
125
+ },
126
+ "total": 1,
127
+ }
128
+ `);
129
+ });
130
+ test('multiple generation types counted separately', () => {
131
+ egakiStore.setState({
132
+ serverGenerationStatus: { counts: { image: 2, video: 1, audio: 1 }, total: 4 },
133
+ });
134
+ const status = selectGenerationStatus(egakiStore.getState());
135
+ expect(status).toMatchInlineSnapshot(`
136
+ {
137
+ "counts": {
138
+ "audio": 1,
139
+ "image": 2,
140
+ "video": 1,
141
+ },
142
+ "total": 4,
143
+ }
144
+ `);
145
+ });
146
+ test('setting status to null clears generation tracking', () => {
147
+ egakiStore.setState({
148
+ serverGenerationStatus: { counts: { image: 1 }, total: 1 },
149
+ });
150
+ egakiStore.setState({ serverGenerationStatus: null });
151
+ const status = selectGenerationStatus(egakiStore.getState());
152
+ expect(status).toBeNull();
153
+ });
154
+ test('returns null when no generations active', () => {
155
+ expect(selectGenerationStatus(egakiStore.getState())).toBeNull();
156
+ });
157
+ test('tracks any namespace', () => {
158
+ egakiStore.setState({
159
+ serverGenerationStatus: { counts: { audio: 1, transcription: 2 }, total: 3 },
160
+ });
161
+ const status = selectGenerationStatus(egakiStore.getState());
162
+ expect(status).toMatchInlineSnapshot(`
163
+ {
164
+ "counts": {
165
+ "audio": 1,
166
+ "transcription": 2,
167
+ },
168
+ "total": 3,
169
+ }
170
+ `);
171
+ });
172
+ });
@@ -0,0 +1,94 @@
1
+ import type { PlayerRef } from '@remotion/player';
2
+ /** Slider config: value + optional min/max/step. */
3
+ interface SliderParam {
4
+ value: number;
5
+ min?: number;
6
+ max?: number;
7
+ step?: number;
8
+ }
9
+ /** Select/dropdown config: value + options list. */
10
+ interface SelectParam {
11
+ value: string;
12
+ options: string[];
13
+ }
14
+ /** Cubic bezier config: four control points [x1, y1, x2, y2]. */
15
+ export interface CubicBezierParam {
16
+ type: 'cubicBezier';
17
+ value: [number, number, number, number];
18
+ }
19
+ /** Range config: min/max pair displayed as a single range slider (plugin-essentials). */
20
+ interface RangeParam {
21
+ type: 'range';
22
+ value: {
23
+ min: number;
24
+ max: number;
25
+ };
26
+ min: number;
27
+ max: number;
28
+ step?: number;
29
+ }
30
+ /**
31
+ * A param value is either:
32
+ * - a bare primitive (number, boolean, string) — auto-inferred control
33
+ * - a SliderParam object with explicit range
34
+ * - a SelectParam object with a dropdown of string options
35
+ * - a CubicBezierParam for a visual bezier curve editor
36
+ * - a RangeParam for a min/max range slider (plugin-essentials)
37
+ */
38
+ type ParamValue = number | boolean | string | SliderParam | SelectParam | CubicBezierParam | RangeParam;
39
+ type ParamSchema = Record<string, ParamValue>;
40
+ /** Resolved values: SliderParam becomes number, SelectParam becomes string, CubicBezierParam becomes tuple, RangeParam becomes {min, max}, everything else stays. */
41
+ type ResolvedValues<T extends ParamSchema> = {
42
+ [K in keyof T]: T[K] extends SliderParam ? number : T[K] extends SelectParam ? string : T[K] extends CubicBezierParam ? [number, number, number, number] : T[K] extends RangeParam ? {
43
+ min: number;
44
+ max: number;
45
+ } : T[K] extends number ? number : T[K] extends boolean ? boolean : T[K] extends string ? string : T[K];
46
+ };
47
+ export interface TweakpaneContextValue {
48
+ playerRef: React.RefObject<PlayerRef | null>;
49
+ fps: number;
50
+ sections: {
51
+ heading: string | null;
52
+ durationInFrames: number;
53
+ }[];
54
+ entryPath: string;
55
+ }
56
+ export declare const TweakpaneContext: import("react").Context<TweakpaneContextValue | null>;
57
+ /**
58
+ * Set to `true` to completely disable tweakpane across all components.
59
+ * useTweakpane() will return raw default values without mounting any UI.
60
+ */
61
+ export declare let TWEAKPANE_DISABLED: boolean;
62
+ /**
63
+ * Register a folder of tweakable parameters for the current component.
64
+ *
65
+ * @param label Folder title shown in the pane UI. Also set as
66
+ * `data-tweakpane="label"` on a wrapper div for agent inspection.
67
+ * @param schema Parameter definitions. Each key maps to either:
68
+ * - a bare `number`, `boolean`, or `string` (auto-inferred control)
69
+ * - a `{ value, min?, max?, step? }` object for explicit slider range
70
+ *
71
+ * Returns a reactive object with current values. Updating a control in the
72
+ * pane immediately triggers a React re-render with fresh values.
73
+ *
74
+ * On unmount the folder is disposed and removed from the pane.
75
+ */
76
+ export declare function useTweakpane<T extends ParamSchema>(label: string, schema: T): ResolvedValues<T>;
77
+ /** Sidebar width constant shared with player-page layout. */
78
+ export declare const SIDEBAR_WIDTH = 280;
79
+ /**
80
+ * Right sidebar that hosts the tweakpane Pane. Always visible in the page
81
+ * layout; the Pane mounts into the scrollable inner div. Also provides
82
+ * player metadata (frame, fps, sections) to the copy prompt button.
83
+ */
84
+ export declare function TweakpaneRoot({ playerRef, fps, sections, entryPath, }: {
85
+ playerRef: React.RefObject<PlayerRef | null>;
86
+ fps: number;
87
+ sections: {
88
+ heading: string | null;
89
+ durationInFrames: number;
90
+ }[];
91
+ entryPath: string;
92
+ }): import("react").JSX.Element;
93
+ export {};
94
+ //# sourceMappingURL=tweakpane-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tweakpane-hook.d.ts","sourceRoot":"","sources":["../../src/vite/tweakpane-hook.tsx"],"names":[],"mappings":"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"}