@cyanheads/pixoo-mcp-server 1.1.4 → 1.2.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 (59) hide show
  1. package/AGENTS.md +11 -7
  2. package/CLAUDE.md +11 -7
  3. package/Dockerfile +30 -10
  4. package/README.md +61 -85
  5. package/changelog/1.2.x/1.2.0.md +28 -0
  6. package/changelog/1.2.x/1.2.1.md +35 -0
  7. package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.js +1 -0
  9. package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.d.ts +77 -11
  11. package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.d.ts.map +1 -1
  12. package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.js +69 -59
  13. package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.d.ts +3 -3
  15. package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.js +57 -45
  17. package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.d.ts +1 -0
  19. package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.js +121 -32
  21. package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.js +17 -3
  24. package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.js +9 -8
  27. package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.js.map +1 -1
  28. package/dist/mcp-server/tools/device-push.d.ts +24 -0
  29. package/dist/mcp-server/tools/device-push.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/device-push.js +50 -0
  31. package/dist/mcp-server/tools/device-push.js.map +1 -0
  32. package/dist/renderer/icons.d.ts +14 -4
  33. package/dist/renderer/icons.d.ts.map +1 -1
  34. package/dist/renderer/icons.js +30 -22
  35. package/dist/renderer/icons.js.map +1 -1
  36. package/dist/renderer/keyframes.d.ts +35 -3
  37. package/dist/renderer/keyframes.d.ts.map +1 -1
  38. package/dist/renderer/keyframes.js +85 -52
  39. package/dist/renderer/keyframes.js.map +1 -1
  40. package/dist/renderer/preview.d.ts +17 -19
  41. package/dist/renderer/preview.d.ts.map +1 -1
  42. package/dist/renderer/preview.js +55 -34
  43. package/dist/renderer/preview.js.map +1 -1
  44. package/dist/renderer/remote-image.d.ts +10 -2
  45. package/dist/renderer/remote-image.d.ts.map +1 -1
  46. package/dist/renderer/remote-image.js +13 -1
  47. package/dist/renderer/remote-image.js.map +1 -1
  48. package/dist/renderer/scene-renderer.d.ts +14 -9
  49. package/dist/renderer/scene-renderer.d.ts.map +1 -1
  50. package/dist/renderer/scene-renderer.js +166 -137
  51. package/dist/renderer/scene-renderer.js.map +1 -1
  52. package/dist/renderer/text-engine.d.ts +14 -1
  53. package/dist/renderer/text-engine.d.ts.map +1 -1
  54. package/dist/renderer/text-engine.js +22 -4
  55. package/dist/renderer/text-engine.js.map +1 -1
  56. package/dist/services/pixoo/pixoo-service.js +1 -1
  57. package/dist/services/pixoo/pixoo-service.js.map +1 -1
  58. package/package.json +6 -5
  59. package/server.json +3 -3
@@ -5,6 +5,7 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode, validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { resolveColor } from '@cyanheads/pixoo-toolkit';
8
+ import { getServerConfig } from '../../../config/server-config.js';
8
9
  import { classifyDeviceFailure, getPixooService } from '../../../services/pixoo/pixoo-service.js';
9
10
  export const pixooOverlayText = tool('pixoo_overlay_text', {
10
11
  title: 'pixoo_overlay_text',
@@ -25,14 +26,14 @@ export const pixooOverlayText = tool('pixoo_overlay_text', {
25
26
  .min(0)
26
27
  .max(64)
27
28
  .default(0)
28
- .describe('X start position on display (default: 0).'),
29
+ .describe('X start position, 0 to display size − 1 (63 on a 64px display; default: 0).'),
29
30
  y: z
30
31
  .number()
31
32
  .int()
32
33
  .min(0)
33
34
  .max(64)
34
35
  .default(0)
35
- .describe('Y start position on display (default: 0).'),
36
+ .describe('Y start position, 0 to display size − 1 (63 on a 64px display; default: 0).'),
36
37
  font: z
37
38
  .number()
38
39
  .int()
@@ -64,7 +65,7 @@ export const pixooOverlayText = tool('pixoo_overlay_text', {
64
65
  .int()
65
66
  .min(0)
66
67
  .optional()
67
- .describe('Text region width in pixels (optional; defaults to display width).'),
68
+ .describe('Text region width in pixels, 0 to display size (64 on a 64px display; defaults to display width).'),
68
69
  }),
69
70
  output: z.object({
70
71
  acknowledged: z
@@ -130,6 +131,19 @@ export const pixooOverlayText = tool('pixoo_overlay_text', {
130
131
  if (!input.text) {
131
132
  throw validationError('text is required when mode is "set".');
132
133
  }
134
+ // The schema's ceiling is fixed at import; the configured display sets the real edge.
135
+ const size = getServerConfig().pixooSize;
136
+ for (const [axis, value] of [
137
+ ['x', input.x],
138
+ ['y', input.y],
139
+ ]) {
140
+ if (value >= size) {
141
+ throw validationError(`${axis} must be 0–${size - 1} on a ${size}px display (PIXOO_SIZE=${size}); received ${value}.`, { [axis]: value, max: size - 1 });
142
+ }
143
+ }
144
+ if (input.width !== undefined && input.width > size) {
145
+ throw validationError(`width must be 0–${size} on a ${size}px display (PIXOO_SIZE=${size}); received ${input.width}.`, { width: input.width, max: size });
146
+ }
133
147
  ctx.log.info('Setting text overlay', { id: input.id, textLength: input.text.length });
134
148
  let color;
135
149
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"pixoo-overlay-text.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-overlay-text.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pixoo-overlay-text.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-overlay-text.tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pixoo-push-image.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-push-image.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAOjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoLzB,CAAC"}
1
+ {"version":3,"file":"pixoo-push-image.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-push-image.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAajE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwLzB,CAAC"}
@@ -7,7 +7,8 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
7
7
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
8
  import { loadImage } from '@cyanheads/pixoo-toolkit';
9
9
  import { getServerConfig } from '../../../config/server-config.js';
10
- import { encodePreviewBlock, savePngPreview } from '../../../renderer/preview.js';
10
+ import { pushKeepingPreview, visibilityNotice } from '../device-push.js';
11
+ import { autoSavePreview, encodePreviewBlock, savePngPreview, } from '../../../renderer/preview.js';
11
12
  import { fetchRemoteImageToTempPng, isRemoteSource } from '../../../renderer/remote-image.js';
12
13
  import { getPixooService } from '../../../services/pixoo/pixoo-service.js';
13
14
  export const pixooPushImage = tool('pixoo_push_image', {
@@ -130,18 +131,18 @@ export const pixooPushImage = tool('pixoo_push_image', {
130
131
  // absent from `output` — routing it through ctx.content carries the base64 once
131
132
  // instead of duplicating it into structuredContent.
132
133
  ctx.content.image(encodePreviewBlock(canvas).data, 'image/png');
133
- // Save preview
134
- const outputFiles = [];
135
- const savedPath = await savePngPreview(canvas, `push-image-${Date.now()}`);
136
- if (savedPath)
137
- outputFiles.push(savedPath);
138
- // Push
134
+ const baseName = `push-image-${Date.now()}`;
135
+ const writePreview = (dir) => savePngPreview(canvas, dir, baseName);
136
+ const outputFiles = await autoSavePreview(writePreview);
139
137
  let pushed = false;
140
138
  let deviceState;
141
139
  if (input.push) {
142
140
  const svc = getPixooService();
143
- deviceState = await svc.pushFrame(canvas, ctx);
141
+ deviceState = await pushKeepingPreview(() => svc.pushFrame(canvas, ctx), outputFiles, writePreview);
144
142
  pushed = true;
143
+ const notice = visibilityNotice(deviceState);
144
+ if (notice)
145
+ ctx.enrich.notice(notice);
145
146
  }
146
147
  return {
147
148
  pushed,
@@ -1 +1 @@
1
- {"version":3,"file":"pixoo-push-image.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-push-image.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pixoo-push-image.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/pixoo-push-image.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview The post-render push path shared by the three push tools: keep the
3
+ * rendered preview when a push fails, and flag a successful push the panel won't show.
4
+ * @module mcp-server/tools/device-push
5
+ */
6
+ import { type PreviewWriter } from '../../renderer/preview.js';
7
+ import type { DeviceStateSnapshot } from '../../services/pixoo/pixoo-service.js';
8
+ /** Brightness at or below this reads as dark on the panel. */
9
+ export declare const DIM_BRIGHTNESS = 10;
10
+ /**
11
+ * Run a device push. A failed push rethrows its typed error — code, `reason`,
12
+ * `retryable`, and recovery hint untouched — with the preview's path added as
13
+ * `data.outputFiles` and named in the message: the files this call already saved, or
14
+ * a copy written under the OS temp dir when it saved none. Error results carry no
15
+ * `ctx.content` blocks, so the file is how the render outlives the failure.
16
+ */
17
+ export declare function pushKeepingPreview(push: () => Promise<DeviceStateSnapshot>, savedFiles: string[], writePreview: PreviewWriter): Promise<DeviceStateSnapshot>;
18
+ /**
19
+ * Name every reason a pushed render may not show on the panel, each with the call
20
+ * that fixes it. Undefined when the device reads as visible, or when the read-back
21
+ * never reached it and there is nothing to judge.
22
+ */
23
+ export declare function visibilityNotice(state: DeviceStateSnapshot): string | undefined;
24
+ //# sourceMappingURL=device-push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-push.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/device-push.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,8DAA8D;AAC9D,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,EACxC,UAAU,EAAE,MAAM,EAAE,EACpB,YAAY,EAAE,aAAa,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAa9B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAgB/E"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview The post-render push path shared by the three push tools: keep the
3
+ * rendered preview when a push fails, and flag a successful push the panel won't show.
4
+ * @module mcp-server/tools/device-push
5
+ */
6
+ import { McpError } from '@cyanheads/mcp-ts-core/errors';
7
+ import { saveTempPreview } from '../../renderer/preview.js';
8
+ /** Brightness at or below this reads as dark on the panel. */
9
+ export const DIM_BRIGHTNESS = 10;
10
+ /**
11
+ * Run a device push. A failed push rethrows its typed error — code, `reason`,
12
+ * `retryable`, and recovery hint untouched — with the preview's path added as
13
+ * `data.outputFiles` and named in the message: the files this call already saved, or
14
+ * a copy written under the OS temp dir when it saved none. Error results carry no
15
+ * `ctx.content` blocks, so the file is how the render outlives the failure.
16
+ */
17
+ export async function pushKeepingPreview(push, savedFiles, writePreview) {
18
+ try {
19
+ return await push();
20
+ }
21
+ catch (err) {
22
+ if (!(err instanceof McpError))
23
+ throw err;
24
+ const outputFiles = savedFiles.length > 0 ? savedFiles : [await saveTempPreview(writePreview)];
25
+ throw new McpError(err.code, `${err.message.replace(/[^.!?]$/, '$&.')} Rendered preview saved to ${outputFiles.join(', ')}.`, { ...err.data, outputFiles }, { cause: err });
26
+ }
27
+ }
28
+ /**
29
+ * Name every reason a pushed render may not show on the panel, each with the call
30
+ * that fixes it. Undefined when the device reads as visible, or when the read-back
31
+ * never reached it and there is nothing to judge.
32
+ */
33
+ export function visibilityNotice(state) {
34
+ if (!state.reachable)
35
+ return;
36
+ const problems = [];
37
+ if (state.screenOn === false) {
38
+ problems.push('the screen is off (pixoo_control_device with screen: "on")');
39
+ }
40
+ if (state.brightness !== undefined && state.brightness <= DIM_BRIGHTNESS) {
41
+ problems.push(`brightness is ${state.brightness} (pixoo_control_device with brightness: 80)`);
42
+ }
43
+ if (state.channel !== undefined && state.channel !== 'custom') {
44
+ problems.push(`the device is on the ${state.channel} channel (pixoo_control_device with channel: "custom")`);
45
+ }
46
+ if (problems.length === 0)
47
+ return;
48
+ return `Pushed, but the render may not be visible: ${problems.join('; ')}.`;
49
+ }
50
+ //# sourceMappingURL=device-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-push.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/device-push.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAsB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG5E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAwC,EACxC,UAAoB,EACpB,YAA2B;IAE3B,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,QAAQ,CAAC;YAAE,MAAM,GAAG,CAAC;QAC1C,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,QAAQ,CAChB,GAAG,CAAC,IAAI,EACR,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,8BAA8B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC/F,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,EAC5B,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA0B;IACzD,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,UAAU,6CAA6C,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9D,QAAQ,CAAC,IAAI,CACX,wBAAwB,KAAK,CAAC,OAAO,wDAAwD,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,OAAO,8CAA8C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,CAAC"}
@@ -2,15 +2,25 @@
2
2
  * @fileoverview Built-in icon registry with SVG path data by category.
3
3
  * @module renderer/icons
4
4
  */
5
+ /**
6
+ * An icon's SVG path data, split by how each part draws. `fill` subpaths rasterize with the
7
+ * even-odd rule; `stroke` subpaths draw as 1-pixel lines along their segments — the parts
8
+ * designed as outlines, since a line has no area for a fill to cover.
9
+ */
10
+ export type IconPaths = {
11
+ fill: string;
12
+ stroke?: string;
13
+ } | {
14
+ fill?: undefined;
15
+ stroke: string;
16
+ };
5
17
  /** A single icon entry. */
6
- export interface IconEntry {
18
+ export type IconEntry = IconPaths & {
7
19
  category: string;
8
- /** SVG d attribute for the icon path. */
9
- d: string;
10
20
  name: string;
11
21
  /** viewBox string (default "0 0 16 16"). */
12
22
  viewBox: string;
13
- }
23
+ };
14
24
  /** All icons indexed by name. */
15
25
  export declare const ICONS: Record<string, IconEntry>;
16
26
  export declare const ICON_NAMES: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/renderer/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA6H3C,CAAC;AAEF,eAAO,MAAM,UAAU,UAAqB,CAAC;AAE7C,eAAO,MAAM,eAAe,UAA4D,CAAC;AAEzF,qCAAqC;AACrC,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAO7D"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/renderer/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAKF,iCAAiC;AACjC,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAoI3C,CAAC;AAEF,eAAO,MAAM,UAAU,UAAqB,CAAC;AAE7C,eAAO,MAAM,eAAe,UAA4D,CAAC;AAEzF,qCAAqC;AACrC,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAO7D"}
@@ -2,130 +2,138 @@
2
2
  * @fileoverview Built-in icon registry with SVG path data by category.
3
3
  * @module renderer/icons
4
4
  */
5
+ /** The circle every status badge is drawn around, as a stroke. */
6
+ const STATUS_RING = 'M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1z';
5
7
  /** All icons indexed by name. */
6
8
  export const ICONS = {
7
9
  // --- weather ---
8
10
  sun: {
9
11
  name: 'sun',
10
12
  category: 'weather',
11
- d: 'M8 5a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM8 1v2M8 13v2M3.22 3.22l1.41 1.41M11.37 11.37l1.41 1.41M1 8h2M13 8h2M3.22 12.78l1.41-1.41M11.37 4.63l1.41-1.41',
13
+ fill: 'M8 5a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',
14
+ stroke: 'M8 1v2M8 13v2M3.22 3.22l1.41 1.41M11.37 11.37l1.41 1.41M1 8h2M13 8h2M3.22 12.78l1.41-1.41M11.37 4.63l1.41-1.41',
12
15
  viewBox: '0 0 16 16',
13
16
  },
14
17
  cloud: {
15
18
  name: 'cloud',
16
19
  category: 'weather',
17
- d: 'M13 10a3 3 0 0 0-3-3h-.5A4.5 4.5 0 1 0 3 10h10z',
20
+ fill: 'M13 10a3 3 0 0 0-3-3h-.5A4.5 4.5 0 1 0 3 10h10z',
18
21
  viewBox: '0 0 16 16',
19
22
  },
20
23
  rain: {
21
24
  name: 'rain',
22
25
  category: 'weather',
23
- d: 'M13 8a3 3 0 0 0-3-3h-.5A4.5 4.5 0 1 0 3 8h10zM5 12l-1 3M8 12v3M11 12l1 3',
26
+ fill: 'M13 8a3 3 0 0 0-3-3h-.5A4.5 4.5 0 1 0 3 8h10z',
27
+ stroke: 'M5 12l-1 3M8 12v3M11 12l1 3',
24
28
  viewBox: '0 0 16 16',
25
29
  },
26
30
  snow: {
27
31
  name: 'snow',
28
32
  category: 'weather',
29
- d: 'M8 1v14M3.5 4l9 8M12.5 4l-9 8M1 8h14M3 5.5l-2-2M13 5.5l2-2M3 10.5l-2 2M13 10.5l2 2',
33
+ stroke: 'M8 1v14M3.5 4l9 8M12.5 4l-9 8M1 8h14M3 5.5l-2-2M13 5.5l2-2M3 10.5l-2 2M13 10.5l2 2',
30
34
  viewBox: '0 0 16 16',
31
35
  },
32
36
  wind: {
33
37
  name: 'wind',
34
38
  category: 'weather',
35
- d: 'M1 6h8a2 2 0 1 0-2-2M1 10h12a2 2 0 1 1-2 2M1 8h6',
39
+ stroke: 'M1 6h8a2 2 0 1 0-2-2M1 10h12a2 2 0 1 1-2 2M1 8h6',
36
40
  viewBox: '0 0 16 16',
37
41
  },
38
42
  lightning: {
39
43
  name: 'lightning',
40
44
  category: 'weather',
41
- d: 'M9 1L4 9h5l-2 6 7-8H9z',
45
+ fill: 'M9 1L4 9h5l-2 6 7-8H9z',
42
46
  viewBox: '0 0 16 16',
43
47
  },
44
- // --- arrows ---
48
+ // --- arrows: a filled head on a stroked shaft ---
45
49
  'arrow-up': {
46
50
  name: 'arrow-up',
47
51
  category: 'arrows',
48
- d: 'M8 2L8 14M3 7l5-5 5 5',
52
+ fill: 'M3 7l5-5 5 5',
53
+ stroke: 'M8 2L8 14',
49
54
  viewBox: '0 0 16 16',
50
55
  },
51
56
  'arrow-down': {
52
57
  name: 'arrow-down',
53
58
  category: 'arrows',
54
- d: 'M8 14L8 2M3 9l5 5 5-5',
59
+ fill: 'M3 9l5 5 5-5',
60
+ stroke: 'M8 14L8 2',
55
61
  viewBox: '0 0 16 16',
56
62
  },
57
63
  'arrow-left': {
58
64
  name: 'arrow-left',
59
65
  category: 'arrows',
60
- d: 'M2 8L14 8M7 3L2 8l5 5',
66
+ fill: 'M7 3L2 8l5 5',
67
+ stroke: 'M2 8L14 8',
61
68
  viewBox: '0 0 16 16',
62
69
  },
63
70
  'arrow-right': {
64
71
  name: 'arrow-right',
65
72
  category: 'arrows',
66
- d: 'M14 8L2 8M9 3L14 8l-5 5',
73
+ fill: 'M9 3L14 8l-5 5',
74
+ stroke: 'M14 8L2 8',
67
75
  viewBox: '0 0 16 16',
68
76
  },
69
- // --- status ---
77
+ // --- status: a stroked ring around a stroked mark, so the mark shows ---
70
78
  'check-circle': {
71
79
  name: 'check-circle',
72
80
  category: 'status',
73
- d: 'M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zM5 8l2 2 4-4',
81
+ stroke: `${STATUS_RING}M5 8l2 2 4-4`,
74
82
  viewBox: '0 0 16 16',
75
83
  },
76
84
  'x-circle': {
77
85
  name: 'x-circle',
78
86
  category: 'status',
79
- d: 'M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zM5 5l6 6M11 5l-6 6',
87
+ stroke: `${STATUS_RING}M5 5l6 6M11 5l-6 6`,
80
88
  viewBox: '0 0 16 16',
81
89
  },
82
90
  'alert-circle': {
83
91
  name: 'alert-circle',
84
92
  category: 'status',
85
- d: 'M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zM8 5v4M8 11v1',
93
+ stroke: `${STATUS_RING}M8 5v4M8 11v1`,
86
94
  viewBox: '0 0 16 16',
87
95
  },
88
96
  info: {
89
97
  name: 'info',
90
98
  category: 'status',
91
- d: 'M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zM8 7v5M8 5v1',
99
+ stroke: `${STATUS_RING}M8 8v4M8 5v1`,
92
100
  viewBox: '0 0 16 16',
93
101
  },
94
102
  heart: {
95
103
  name: 'heart',
96
104
  category: 'status',
97
- d: 'M8 13S1 9 1 4.5a3.5 3.5 0 0 1 7 0 3.5 3.5 0 0 1 7 0C15 9 8 13 8 13z',
105
+ fill: 'M8 13S1 9 1 4.5a3.5 3.5 0 0 1 7 0 3.5 3.5 0 0 1 7 0C15 9 8 13 8 13z',
98
106
  viewBox: '0 0 16 16',
99
107
  },
100
108
  star: {
101
109
  name: 'star',
102
110
  category: 'status',
103
- d: 'M8 1l2 5h5l-4 3 1.5 5L8 11l-4.5 3L5 9 1 6h5z',
111
+ fill: 'M8 1l2 5h5l-4 3 1.5 5L8 11l-4.5 3L5 9 1 6h5z',
104
112
  viewBox: '0 0 16 16',
105
113
  },
106
114
  // --- media ---
107
115
  play: {
108
116
  name: 'play',
109
117
  category: 'media',
110
- d: 'M3 2l10 6-10 6z',
118
+ fill: 'M3 2l10 6-10 6z',
111
119
  viewBox: '0 0 16 16',
112
120
  },
113
121
  pause: {
114
122
  name: 'pause',
115
123
  category: 'media',
116
- d: 'M5 2h2v12H5zM9 2h2v12H9z',
124
+ fill: 'M5 2h2v12H5zM9 2h2v12H9z',
117
125
  viewBox: '0 0 16 16',
118
126
  },
119
127
  stop: {
120
128
  name: 'stop',
121
129
  category: 'media',
122
- d: 'M3 3h10v10H3z',
130
+ fill: 'M3 3h10v10H3z',
123
131
  viewBox: '0 0 16 16',
124
132
  },
125
133
  music: {
126
134
  name: 'music',
127
135
  category: 'media',
128
- d: 'M12 2v7a2 2 0 1 1-2-2V2l-6 1v7a2 2 0 1 1-2-2V3z',
136
+ fill: 'M12 2v7a2 2 0 1 1-2-2V4l-6 1v5a2 2 0 1 1-2-2V3z',
129
137
  viewBox: '0 0 16 16',
130
138
  },
131
139
  };
@@ -1 +1 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/renderer/icons.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/renderer/icons.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,46 @@ export type KeyframeMap = Record<string, KeyframeEntry[]>;
9
9
  /** Effect preset names. */
10
10
  export type EffectName = 'float' | 'scroll-left' | 'scroll-right' | 'pulse' | 'blink' | 'twinkle' | 'drift' | 'fade-in' | 'fade-out';
11
11
  export declare const EFFECT_NAMES: EffectName[];
12
- /** Compile a named effect preset into a keyframe map. */
12
+ /**
13
+ * Compile a named effect preset into a keyframe map.
14
+ *
15
+ * `amplitude` is pixels of movement for `float`, `scroll-left`/`scroll-right` (speed), and
16
+ * `drift`, default 2. For `pulse` and `twinkle` it is the depth of the opacity dip below 100,
17
+ * on a 0–1 scale: default 0.5 for `pulse` (a 50–100 ramp) and 0.6 for `twinkle` (40–100).
18
+ * `blink`, `fade-in`, and `fade-out` ignore it.
19
+ */
13
20
  export declare function compileEffect(name: EffectName, opts: {
14
21
  amplitude?: number;
15
22
  period?: number;
16
23
  phase?: number;
17
24
  }, totalFrames: number): KeyframeMap;
18
- /** Interpolate a keyframe property at a given frame index. */
19
- export declare function interpolateKeyframe(frames: KeyframeEntry[], frameIdx: number): number | string | boolean;
25
+ /** A keyframe's value. */
26
+ type KeyframeValue = KeyframeEntry[1];
27
+ /**
28
+ * A number, or a string that reads as one (`"40"`, `"000"`, `"-2.5"`); `undefined` otherwise.
29
+ * `pixoo_compose_scene` validates `dx`, `dy`, and `opacity` keyframes with it, so the input
30
+ * schema and the interpolation agree on what a numeric string is.
31
+ */
32
+ export declare function numericValue(value: KeyframeValue): number | undefined;
33
+ /**
34
+ * Interpolate a keyframe property at a given frame index. Booleans snap at the midpoint.
35
+ * Numbers lerp, and so do numeric strings, read as the same numbers — `"000"` is 0 here, never
36
+ * a color: only the `color` track lerps through RGB, in {@link interpolateColorKeyframe}.
37
+ * Any other value holds until the next keyframe.
38
+ */
39
+ export declare function interpolateKeyframe(frames: KeyframeEntry[], frameIdx: number): KeyframeValue;
40
+ /**
41
+ * Interpolate a `color` keyframe track at a frame index: each keyframe value, number or
42
+ * string, is read as a color and the track lerps through RGB, returning `#rrggbb` between
43
+ * keyframes so it resolves like any other color. Every keyframe value is resolved first, so
44
+ * one that isn't a color fails on every frame — including a keyframe the scene never
45
+ * reaches, which interpolation alone would skip past by holding the previous color.
46
+ *
47
+ * @throws {Error} The toolkit's `Unknown color` error for the first value that isn't a color,
48
+ * or an error for an empty track, which input validation rejects before any render.
49
+ */
50
+ export declare function interpolateColorKeyframe(frames: KeyframeEntry[], frameIdx: number): string;
20
51
  /** Get the interpolated value for a named property at a frame index. */
21
52
  export declare function getKeyframeValue(keyframes: KeyframeMap | undefined, prop: string, frameIdx: number, defaultValue: number | string | boolean): number | string | boolean;
53
+ export {};
22
54
  //# sourceMappingURL=keyframes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyframes.d.ts","sourceRoot":"","sources":["../../src/renderer/keyframes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEhE,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAE1D,2BAA2B;AAC3B,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,aAAa,GACb,cAAc,GACd,OAAO,GACP,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,CAAC;AAEf,eAAO,MAAM,YAAY,EAAE,UAAU,EAUpC,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,WAAW,EAAE,MAAM,GAClB,WAAW,CAkFb;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,MAAM,GAAG,OAAO,CAmD3B;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GACtC,MAAM,GAAG,MAAM,GAAG,OAAO,CAG3B"}
1
+ {"version":3,"file":"keyframes.d.ts","sourceRoot":"","sources":["../../src/renderer/keyframes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEhE,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAE1D,2BAA2B;AAC3B,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,aAAa,GACb,cAAc,GACd,OAAO,GACP,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,CAAC;AAEf,eAAO,MAAM,YAAY,EAAE,UAAU,EAUpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,WAAW,EAAE,MAAM,GAClB,WAAW,CAoFb;AAED,0BAA0B;AAC1B,KAAK,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AA4BtC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAY5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ1F;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GACtC,MAAM,GAAG,MAAM,GAAG,OAAO,CAG3B"}