@agent-native/core 0.118.1 → 0.119.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.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +19 -0
- package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-plan.mdx +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/activity.ts +371 -0
- package/corpus/core/src/a2a/client.ts +3 -1
- package/corpus/core/src/a2a/index.ts +21 -0
- package/corpus/core/src/a2a/types.ts +8 -0
- package/corpus/core/src/agent/model-config.ts +19 -23
- package/corpus/core/src/agent/production-agent.ts +167 -100
- package/corpus/core/src/agent/types.ts +16 -1
- package/corpus/core/src/client/chat/tool-call-display.tsx +190 -35
- package/corpus/core/src/client/chat-model-groups.ts +67 -27
- package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
- package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
- package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
- package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
- package/corpus/core/src/client/sse-event-processor.ts +85 -1
- package/corpus/core/src/ingestion/figma-node-to-html.ts +20 -99
- package/corpus/core/src/ingestion/figma-paint-math.ts +371 -0
- package/corpus/core/src/ingestion/index.ts +20 -0
- package/corpus/core/src/localization/default-messages.ts +6 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/corpus/core/src/scripts/call-agent.ts +49 -6
- package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/templates/assets/app/routes/library.tsx +17 -9
- package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
- package/corpus/templates/clips/server/plugins/db.ts +9 -1
- package/corpus/templates/design/AGENTS.md +18 -5
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +25 -12
- package/corpus/templates/design/actions/hydrate-figma-paste-images.ts +115 -0
- package/corpus/templates/design/actions/import-figma-clipboard.ts +83 -18
- package/corpus/templates/design/actions/import-figma-frame.ts +34 -21
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +28 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +106 -11
- package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +273 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +7 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +57 -9
- package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +10 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +8 -1
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +150 -2
- package/corpus/templates/design/app/lib/design-file-upload.ts +85 -0
- package/corpus/templates/design/app/lib/design-import.ts +19 -1
- package/corpus/templates/design/app/lib/figma-clipboard.ts +110 -10
- package/corpus/templates/design/changelog/2026-07-20-paste-figma-frames-directly-onto-the-canvas-no-token-needed.md +6 -0
- package/corpus/templates/design/changelog/2026-07-21-fig-upload-frame-url-and-rate-limit-errors.md +5 -0
- package/corpus/templates/design/changelog/2026-07-22-connecting-a-figma-token-now-actually-fills-in-a-pasted-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-figma-line-arrow-vectors-and-stroked-icons-now-render-instea.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-fill-a-no-token-figma-paste-s-images-by-dropping-the-origina.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-imported-and-pasted-figma-frames-now-render-faithfully-fixed.md +6 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +50 -0
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +90 -49
- package/corpus/templates/design/server/lib/fig-file-import.ts +19 -5
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +583 -78
- package/corpus/templates/design/server/lib/figma-clipboard-local-decode.ts +238 -0
- package/corpus/templates/design/server/lib/figma-image-hydration.ts +389 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +136 -36
- package/corpus/templates/design/server/register-secrets.ts +14 -2
- package/dist/a2a/activity.d.ts +50 -0
- package/dist/a2a/activity.d.ts.map +1 -0
- package/dist/a2a/activity.js +236 -0
- package/dist/a2a/activity.js.map +1 -0
- package/dist/a2a/client.d.ts +2 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -1
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/types.d.ts +1 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +16 -16
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +19 -23
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +26 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +137 -80
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +10 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +63 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +44 -21
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -4
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +1 -2
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/useShareButtonController.d.ts +0 -1
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
- package/dist/client/sharing/useShareButtonController.js +0 -6
- package/dist/client/sharing/useShareButtonController.js.map +1 -1
- package/dist/client/sharing/useShareDialogController.d.ts +0 -1
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
- package/dist/client/sharing/useShareDialogController.js +0 -1
- package/dist/client/sharing/useShareDialogController.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +12 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +63 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/ingestion/figma-node-to-html.d.ts.map +1 -1
- package/dist/ingestion/figma-node-to-html.js +14 -88
- package/dist/ingestion/figma-node-to-html.js.map +1 -1
- package/dist/ingestion/figma-paint-math.d.ts +157 -0
- package/dist/ingestion/figma-paint-math.d.ts.map +1 -0
- package/dist/ingestion/figma-paint-math.js +274 -0
- package/dist/ingestion/figma-paint-math.js.map +1 -0
- package/dist/ingestion/index.d.ts +1 -0
- package/dist/ingestion/index.d.ts.map +1 -1
- package/dist/ingestion/index.js +1 -0
- package/dist/ingestion/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +6 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +6 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +49 -6
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +38 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/docs/content/a2a-protocol.mdx +15 -0
- package/docs/content/template-chat.mdx +1 -1
- package/docs/content/template-plan.mdx +3 -3
- package/package.json +1 -1
- package/src/a2a/activity.ts +371 -0
- package/src/a2a/client.ts +3 -1
- package/src/a2a/index.ts +21 -0
- package/src/a2a/types.ts +8 -0
- package/src/agent/model-config.ts +19 -23
- package/src/agent/production-agent.ts +167 -100
- package/src/agent/types.ts +16 -1
- package/src/client/chat/tool-call-display.tsx +190 -35
- package/src/client/chat-model-groups.ts +67 -27
- package/src/client/sharing/ShareButton.tsx +1 -27
- package/src/client/sharing/ShareDialog.tsx +0 -16
- package/src/client/sharing/useShareButtonController.ts +0 -7
- package/src/client/sharing/useShareDialogController.ts +0 -2
- package/src/client/sse-event-processor.ts +85 -1
- package/src/ingestion/figma-node-to-html.ts +20 -99
- package/src/ingestion/figma-paint-math.ts +371 -0
- package/src/ingestion/index.ts +20 -0
- package/src/localization/default-messages.ts +6 -0
- package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/src/scripts/call-agent.ts +49 -6
- package/src/server/agent-chat-plugin.ts +50 -10
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
- package/src/observability/hosted-model-experiment.ts +0 -118
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, synchronous math helpers for Figma gradient geometry and blend-mode
|
|
3
|
+
* normalisation. No DOM, no CSS, no network.
|
|
4
|
+
*
|
|
5
|
+
* Supports two gradient-transform sources:
|
|
6
|
+
* - REST API `gradientHandlePositions` (3-element Vec2 array, already in
|
|
7
|
+
* normalized 0..1 node-space).
|
|
8
|
+
* - 2×3 affine transform in **either** the Kiwi/fig-file object form
|
|
9
|
+
* `{m00..m12}` or the REST/Plugin API array form `[[a,b,tx],[c,d,ty]]`.
|
|
10
|
+
* Both encode the **node-to-gradient** mapping (same convention as Figma's
|
|
11
|
+
* own `gradientTransform` field); invert to obtain handle positions.
|
|
12
|
+
*/
|
|
13
|
+
export interface Vec2 {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
}
|
|
17
|
+
export interface GradientHandles {
|
|
18
|
+
start: Vec2;
|
|
19
|
+
end: Vec2;
|
|
20
|
+
width: Vec2;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 2×3 affine transform in the row-major object form used by Kiwi/fig-file
|
|
24
|
+
* decoded paint nodes:
|
|
25
|
+
* [m00, m01, m02]
|
|
26
|
+
* [m10, m11, m12]
|
|
27
|
+
*/
|
|
28
|
+
export interface Mat2x3Object {
|
|
29
|
+
m00: number;
|
|
30
|
+
m01: number;
|
|
31
|
+
m02: number;
|
|
32
|
+
m10: number;
|
|
33
|
+
m11: number;
|
|
34
|
+
m12: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 2×3 affine transform in the nested-array form used by the Figma REST API
|
|
38
|
+
* and Plugin API `gradientTransform` field:
|
|
39
|
+
* [[a, b, tx], [c, d, ty]]
|
|
40
|
+
*/
|
|
41
|
+
export type Mat2x3Array = [[number, number, number], [number, number, number]];
|
|
42
|
+
export type BlendVerdict = "exact" | "approximated";
|
|
43
|
+
export interface BlendModeResult {
|
|
44
|
+
cssMode: string;
|
|
45
|
+
verdict: BlendVerdict;
|
|
46
|
+
}
|
|
47
|
+
export type GradientKind = "LINEAR" | "RADIAL" | "ANGULAR" | "DIAMOND";
|
|
48
|
+
export interface GradientGeometry {
|
|
49
|
+
kind: GradientKind;
|
|
50
|
+
handles: GradientHandles;
|
|
51
|
+
start: Vec2;
|
|
52
|
+
end: Vec2;
|
|
53
|
+
center: Vec2;
|
|
54
|
+
rx: number;
|
|
55
|
+
ry: number;
|
|
56
|
+
rotationDeg: number;
|
|
57
|
+
fromDeg: number;
|
|
58
|
+
}
|
|
59
|
+
/** Convert the REST/Plugin nested-array form to the object form. */
|
|
60
|
+
export declare function mat2x3FromArray(m: Mat2x3Array): Mat2x3Object;
|
|
61
|
+
/**
|
|
62
|
+
* Invert a 2×3 affine transform. Returns null when the matrix is singular
|
|
63
|
+
* (determinant near zero, i.e. the gradient has collapsed to a line or point).
|
|
64
|
+
*
|
|
65
|
+
* The 2×2 rotation/scale sub-matrix is [[m00,m01],[m10,m11]]; the
|
|
66
|
+
* standard 2×2 inverse is applied and the translation is back-solved:
|
|
67
|
+
* inv_tx = (-m11*m02 + m01*m12) / det
|
|
68
|
+
* inv_ty = ( m10*m02 - m00*m12) / det
|
|
69
|
+
*/
|
|
70
|
+
export declare function invert2x3(m: Mat2x3Object): Mat2x3Object | null;
|
|
71
|
+
/**
|
|
72
|
+
* Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**
|
|
73
|
+
* transform in Kiwi/fig-file object form.
|
|
74
|
+
*
|
|
75
|
+
* Figma's gradient transform encodes where the gradient's natural coordinate
|
|
76
|
+
* system sits inside the node's normalized [0,1]² box. The three canonical
|
|
77
|
+
* gradient-space points (start, end, width) map back to node-space by
|
|
78
|
+
* inverting the transform:
|
|
79
|
+
* handles = inv(M) * {(0,0), (1,0), (0,1)}
|
|
80
|
+
*/
|
|
81
|
+
export declare function handlePositionsFromObjectTransform(t: Mat2x3Object): GradientHandles | null;
|
|
82
|
+
export declare function gradientGeometryFromTransform(kind: GradientKind, transform: Mat2x3Object, box: {
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
}): GradientGeometry | null;
|
|
86
|
+
/**
|
|
87
|
+
* Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**
|
|
88
|
+
* transform in REST/Plugin API nested-array form.
|
|
89
|
+
*/
|
|
90
|
+
export declare function handlePositionsFromArrayTransform(t: Mat2x3Array): GradientHandles | null;
|
|
91
|
+
/**
|
|
92
|
+
* Resolve `GradientHandles` from a raw `gradientHandlePositions` array as
|
|
93
|
+
* returned by the Figma REST API. Returns null when the array is too short.
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveGradientHandles(gradientHandlePositions: Array<Vec2> | undefined): GradientHandles | null;
|
|
96
|
+
/**
|
|
97
|
+
* Derive a CSS `linear-gradient()` angle (degrees) from Figma's normalized
|
|
98
|
+
* `gradientHandlePositions`. Handle positions are normalized independently in
|
|
99
|
+
* x and y (0..1 relative to the node's bounding box), so the angle must be
|
|
100
|
+
* computed in actual pixel space using the node's real width/height —
|
|
101
|
+
* otherwise a non-square box silently distorts the angle.
|
|
102
|
+
*
|
|
103
|
+
* Identity: left-to-right handles (start=(0,0.5), end=(1,0.5)) → 90 deg.
|
|
104
|
+
* Top-to-bottom handles (start=(0.5,0), end=(0.5,1)) → 180 deg.
|
|
105
|
+
*
|
|
106
|
+
* This is the same function previously inlined in figma-node-to-html.ts and
|
|
107
|
+
* is preserved here verbatim for public API compatibility.
|
|
108
|
+
*/
|
|
109
|
+
export declare function gradientAngleDegrees(paint: {
|
|
110
|
+
gradientHandlePositions?: Array<Vec2>;
|
|
111
|
+
}, box: {
|
|
112
|
+
width: number;
|
|
113
|
+
height: number;
|
|
114
|
+
}): number | null;
|
|
115
|
+
/**
|
|
116
|
+
* Same calculation as `gradientAngleDegrees` but accepts already-resolved
|
|
117
|
+
* `GradientHandles` — useful when handles come from a transform inversion.
|
|
118
|
+
*/
|
|
119
|
+
export declare function gradientAngleDegreesFromHandles(handles: GradientHandles, box: {
|
|
120
|
+
width: number;
|
|
121
|
+
height: number;
|
|
122
|
+
}): number;
|
|
123
|
+
/**
|
|
124
|
+
* CSS `linear-gradient(angle, ...)` always stretches its 0%/100% stops across
|
|
125
|
+
* the box's full diagonal at that angle (the CSS "gradient line" always spans
|
|
126
|
+
* corner-to-corner). Figma's stop positions are fractions of the literal
|
|
127
|
+
* handle-to-handle distance, which only coincides with the CSS span when the
|
|
128
|
+
* handles are dragged exactly corner-to-corner.
|
|
129
|
+
*
|
|
130
|
+
* This function returns a remap closure that projects each Figma stop's real
|
|
131
|
+
* pixel position onto the CSS gradient line and re-expresses it as a
|
|
132
|
+
* percentage of the CSS line's length, so a partial/offset gradient renders at
|
|
133
|
+
* the same pixel positions Figma draws it at.
|
|
134
|
+
*/
|
|
135
|
+
export declare function remapLinearStopPosition(handles: GradientHandles, box: {
|
|
136
|
+
width: number;
|
|
137
|
+
height: number;
|
|
138
|
+
}, angleDeg: number): (position: number) => number;
|
|
139
|
+
/**
|
|
140
|
+
* Euclidean distance between two normalized-coordinate points after scaling
|
|
141
|
+
* into actual pixel space.
|
|
142
|
+
*/
|
|
143
|
+
export declare function vectorLength(from: Vec2, to: Vec2, box: {
|
|
144
|
+
width: number;
|
|
145
|
+
height: number;
|
|
146
|
+
}): number;
|
|
147
|
+
/**
|
|
148
|
+
* Map a Figma blend mode string to a CSS `mix-blend-mode` value with an
|
|
149
|
+
* explicit fidelity verdict:
|
|
150
|
+
* - `"exact"` — CSS supports the mode natively.
|
|
151
|
+
* - `"approximated"` — mapped to the closest CSS equivalent.
|
|
152
|
+
*
|
|
153
|
+
* Returns `null` for `PASS_THROUGH`, `NORMAL`, and unrecognised modes (caller
|
|
154
|
+
* should omit the CSS property entirely in those cases).
|
|
155
|
+
*/
|
|
156
|
+
export declare function cssBlendMode(figmaBlendMode: string): BlendModeResult | null;
|
|
157
|
+
//# sourceMappingURL=figma-paint-math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-paint-math.d.ts","sourceRoot":"","sources":["../../src/ingestion/figma-paint-math.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, synchronous math helpers for Figma gradient geometry and blend-mode
|
|
3
|
+
* normalisation. No DOM, no CSS, no network.
|
|
4
|
+
*
|
|
5
|
+
* Supports two gradient-transform sources:
|
|
6
|
+
* - REST API `gradientHandlePositions` (3-element Vec2 array, already in
|
|
7
|
+
* normalized 0..1 node-space).
|
|
8
|
+
* - 2×3 affine transform in **either** the Kiwi/fig-file object form
|
|
9
|
+
* `{m00..m12}` or the REST/Plugin API array form `[[a,b,tx],[c,d,ty]]`.
|
|
10
|
+
* Both encode the **node-to-gradient** mapping (same convention as Figma's
|
|
11
|
+
* own `gradientTransform` field); invert to obtain handle positions.
|
|
12
|
+
*/
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Matrix helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/** Convert the REST/Plugin nested-array form to the object form. */
|
|
17
|
+
export function mat2x3FromArray(m) {
|
|
18
|
+
return {
|
|
19
|
+
m00: m[0][0],
|
|
20
|
+
m01: m[0][1],
|
|
21
|
+
m02: m[0][2],
|
|
22
|
+
m10: m[1][0],
|
|
23
|
+
m11: m[1][1],
|
|
24
|
+
m12: m[1][2],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Invert a 2×3 affine transform. Returns null when the matrix is singular
|
|
29
|
+
* (determinant near zero, i.e. the gradient has collapsed to a line or point).
|
|
30
|
+
*
|
|
31
|
+
* The 2×2 rotation/scale sub-matrix is [[m00,m01],[m10,m11]]; the
|
|
32
|
+
* standard 2×2 inverse is applied and the translation is back-solved:
|
|
33
|
+
* inv_tx = (-m11*m02 + m01*m12) / det
|
|
34
|
+
* inv_ty = ( m10*m02 - m00*m12) / det
|
|
35
|
+
*/
|
|
36
|
+
export function invert2x3(m) {
|
|
37
|
+
const det = m.m00 * m.m11 - m.m01 * m.m10;
|
|
38
|
+
if (Math.abs(det) < 1e-8)
|
|
39
|
+
return null;
|
|
40
|
+
const inv00 = m.m11 / det;
|
|
41
|
+
const inv01 = -m.m01 / det;
|
|
42
|
+
const inv10 = -m.m10 / det;
|
|
43
|
+
const inv11 = m.m00 / det;
|
|
44
|
+
return {
|
|
45
|
+
m00: inv00,
|
|
46
|
+
m01: inv01,
|
|
47
|
+
m02: (-m.m11 * m.m02 + m.m01 * m.m12) / det,
|
|
48
|
+
m10: inv10,
|
|
49
|
+
m11: inv11,
|
|
50
|
+
m12: (m.m10 * m.m02 - m.m00 * m.m12) / det,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Apply a 2×3 transform to a 2-D point.
|
|
55
|
+
* The point is treated as a homogeneous [x, y, 1]^T column vector.
|
|
56
|
+
*/
|
|
57
|
+
function applyMat2x3(m, v) {
|
|
58
|
+
return {
|
|
59
|
+
x: m.m00 * v.x + m.m01 * v.y + m.m02,
|
|
60
|
+
y: m.m10 * v.x + m.m11 * v.y + m.m12,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Handle positions from transforms
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**
|
|
68
|
+
* transform in Kiwi/fig-file object form.
|
|
69
|
+
*
|
|
70
|
+
* Figma's gradient transform encodes where the gradient's natural coordinate
|
|
71
|
+
* system sits inside the node's normalized [0,1]² box. The three canonical
|
|
72
|
+
* gradient-space points (start, end, width) map back to node-space by
|
|
73
|
+
* inverting the transform:
|
|
74
|
+
* handles = inv(M) * {(0,0), (1,0), (0,1)}
|
|
75
|
+
*/
|
|
76
|
+
export function handlePositionsFromObjectTransform(t) {
|
|
77
|
+
const inv = invert2x3(t);
|
|
78
|
+
if (!inv)
|
|
79
|
+
return null;
|
|
80
|
+
return {
|
|
81
|
+
start: applyMat2x3(inv, { x: 0, y: 0 }),
|
|
82
|
+
end: applyMat2x3(inv, { x: 1, y: 0 }),
|
|
83
|
+
width: applyMat2x3(inv, { x: 0, y: 1 }),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function gradientGeometryFromTransform(kind, transform, box) {
|
|
87
|
+
const inverse = invert2x3(transform);
|
|
88
|
+
if (!inverse)
|
|
89
|
+
return null;
|
|
90
|
+
const toPixels = (point) => ({
|
|
91
|
+
x: point.x * box.width,
|
|
92
|
+
y: point.y * box.height,
|
|
93
|
+
});
|
|
94
|
+
const startNormalized = applyMat2x3(inverse, { x: 0, y: 0.5 });
|
|
95
|
+
const endNormalized = applyMat2x3(inverse, { x: 1, y: 0.5 });
|
|
96
|
+
const widthNormalized = applyMat2x3(inverse, { x: 1, y: 0 });
|
|
97
|
+
const center = toPixels(applyMat2x3(inverse, { x: 0.5, y: 0.5 }));
|
|
98
|
+
const vertex = toPixels(applyMat2x3(inverse, { x: 1, y: 0.5 }));
|
|
99
|
+
const covertex = toPixels(applyMat2x3(inverse, { x: 0.5, y: 1 }));
|
|
100
|
+
const vertexDx = vertex.x - center.x;
|
|
101
|
+
const vertexDy = vertex.y - center.y;
|
|
102
|
+
return {
|
|
103
|
+
kind,
|
|
104
|
+
handles: {
|
|
105
|
+
start: startNormalized,
|
|
106
|
+
end: endNormalized,
|
|
107
|
+
width: widthNormalized,
|
|
108
|
+
},
|
|
109
|
+
start: toPixels(startNormalized),
|
|
110
|
+
end: toPixels(endNormalized),
|
|
111
|
+
center,
|
|
112
|
+
rx: Math.hypot(vertexDx, vertexDy),
|
|
113
|
+
ry: Math.hypot(covertex.x - center.x, covertex.y - center.y),
|
|
114
|
+
rotationDeg: (Math.atan2(vertexDy, vertexDx) * 180) / Math.PI,
|
|
115
|
+
fromDeg: (Math.atan2(-transform.m10, transform.m00) * 180) / Math.PI,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**
|
|
120
|
+
* transform in REST/Plugin API nested-array form.
|
|
121
|
+
*/
|
|
122
|
+
export function handlePositionsFromArrayTransform(t) {
|
|
123
|
+
return handlePositionsFromObjectTransform(mat2x3FromArray(t));
|
|
124
|
+
}
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
// Gradient geometry from REST handle positions
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
/**
|
|
129
|
+
* Resolve `GradientHandles` from a raw `gradientHandlePositions` array as
|
|
130
|
+
* returned by the Figma REST API. Returns null when the array is too short.
|
|
131
|
+
*/
|
|
132
|
+
export function resolveGradientHandles(gradientHandlePositions) {
|
|
133
|
+
if (!gradientHandlePositions || gradientHandlePositions.length < 3)
|
|
134
|
+
return null;
|
|
135
|
+
return {
|
|
136
|
+
start: gradientHandlePositions[0],
|
|
137
|
+
end: gradientHandlePositions[1],
|
|
138
|
+
width: gradientHandlePositions[2],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Gradient angle
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
/**
|
|
145
|
+
* Derive a CSS `linear-gradient()` angle (degrees) from Figma's normalized
|
|
146
|
+
* `gradientHandlePositions`. Handle positions are normalized independently in
|
|
147
|
+
* x and y (0..1 relative to the node's bounding box), so the angle must be
|
|
148
|
+
* computed in actual pixel space using the node's real width/height —
|
|
149
|
+
* otherwise a non-square box silently distorts the angle.
|
|
150
|
+
*
|
|
151
|
+
* Identity: left-to-right handles (start=(0,0.5), end=(1,0.5)) → 90 deg.
|
|
152
|
+
* Top-to-bottom handles (start=(0.5,0), end=(0.5,1)) → 180 deg.
|
|
153
|
+
*
|
|
154
|
+
* This is the same function previously inlined in figma-node-to-html.ts and
|
|
155
|
+
* is preserved here verbatim for public API compatibility.
|
|
156
|
+
*/
|
|
157
|
+
export function gradientAngleDegrees(paint, box) {
|
|
158
|
+
const handles = resolveGradientHandles(paint.gradientHandlePositions);
|
|
159
|
+
if (!handles)
|
|
160
|
+
return null;
|
|
161
|
+
return gradientAngleDegreesFromHandles(handles, box);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Same calculation as `gradientAngleDegrees` but accepts already-resolved
|
|
165
|
+
* `GradientHandles` — useful when handles come from a transform inversion.
|
|
166
|
+
*/
|
|
167
|
+
export function gradientAngleDegreesFromHandles(handles, box) {
|
|
168
|
+
const dx = (handles.end.x - handles.start.x) * box.width;
|
|
169
|
+
const dy = (handles.end.y - handles.start.y) * box.height;
|
|
170
|
+
const angleRad = Math.atan2(dy, dx);
|
|
171
|
+
const angleDeg = (angleRad * 180) / Math.PI + 90;
|
|
172
|
+
return ((angleDeg % 360) + 360) % 360;
|
|
173
|
+
}
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Linear stop position remapping
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
/**
|
|
178
|
+
* CSS `linear-gradient(angle, ...)` always stretches its 0%/100% stops across
|
|
179
|
+
* the box's full diagonal at that angle (the CSS "gradient line" always spans
|
|
180
|
+
* corner-to-corner). Figma's stop positions are fractions of the literal
|
|
181
|
+
* handle-to-handle distance, which only coincides with the CSS span when the
|
|
182
|
+
* handles are dragged exactly corner-to-corner.
|
|
183
|
+
*
|
|
184
|
+
* This function returns a remap closure that projects each Figma stop's real
|
|
185
|
+
* pixel position onto the CSS gradient line and re-expresses it as a
|
|
186
|
+
* percentage of the CSS line's length, so a partial/offset gradient renders at
|
|
187
|
+
* the same pixel positions Figma draws it at.
|
|
188
|
+
*/
|
|
189
|
+
export function remapLinearStopPosition(handles, box, angleDeg) {
|
|
190
|
+
const angleRad = (angleDeg * Math.PI) / 180;
|
|
191
|
+
const ux = Math.sin(angleRad);
|
|
192
|
+
const uy = -Math.cos(angleRad);
|
|
193
|
+
const lineLength = box.width * Math.abs(ux) + box.height * Math.abs(uy);
|
|
194
|
+
if (lineLength < 1e-6)
|
|
195
|
+
return (position) => position;
|
|
196
|
+
const startPx = {
|
|
197
|
+
x: handles.start.x * box.width,
|
|
198
|
+
y: handles.start.y * box.height,
|
|
199
|
+
};
|
|
200
|
+
const endPx = { x: handles.end.x * box.width, y: handles.end.y * box.height };
|
|
201
|
+
const cx = box.width / 2;
|
|
202
|
+
const cy = box.height / 2;
|
|
203
|
+
return (position) => {
|
|
204
|
+
const px = startPx.x + position * (endPx.x - startPx.x);
|
|
205
|
+
const py = startPx.y + position * (endPx.y - startPx.y);
|
|
206
|
+
const projected = (px - cx) * ux + (py - cy) * uy;
|
|
207
|
+
return (projected + lineLength / 2) / lineLength;
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
// Vector length (pixel-space)
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
/**
|
|
214
|
+
* Euclidean distance between two normalized-coordinate points after scaling
|
|
215
|
+
* into actual pixel space.
|
|
216
|
+
*/
|
|
217
|
+
export function vectorLength(from, to, box) {
|
|
218
|
+
const dx = (to.x - from.x) * box.width;
|
|
219
|
+
const dy = (to.y - from.y) * box.height;
|
|
220
|
+
return Math.sqrt(dx * dx + dy * dy);
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// CSS blend mode mapping
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
const CSS_BLEND_MODES = new Set([
|
|
226
|
+
"multiply",
|
|
227
|
+
"screen",
|
|
228
|
+
"overlay",
|
|
229
|
+
"darken",
|
|
230
|
+
"lighten",
|
|
231
|
+
"color-dodge",
|
|
232
|
+
"color-burn",
|
|
233
|
+
"hard-light",
|
|
234
|
+
"soft-light",
|
|
235
|
+
"difference",
|
|
236
|
+
"exclusion",
|
|
237
|
+
"hue",
|
|
238
|
+
"saturation",
|
|
239
|
+
"color",
|
|
240
|
+
"luminosity",
|
|
241
|
+
]);
|
|
242
|
+
/**
|
|
243
|
+
* Figma-only blend modes that have no exact CSS equivalent. The value is the
|
|
244
|
+
* closest CSS mode (approximation) and callers should record the verdict.
|
|
245
|
+
*/
|
|
246
|
+
const FIGMA_ONLY_BLEND_MODE_FALLBACK = {
|
|
247
|
+
LINEAR_BURN: "plus-darker",
|
|
248
|
+
LINEAR_DODGE: "plus-lighter",
|
|
249
|
+
LIGHTER: "plus-lighter",
|
|
250
|
+
DARKER: "darken",
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* Map a Figma blend mode string to a CSS `mix-blend-mode` value with an
|
|
254
|
+
* explicit fidelity verdict:
|
|
255
|
+
* - `"exact"` — CSS supports the mode natively.
|
|
256
|
+
* - `"approximated"` — mapped to the closest CSS equivalent.
|
|
257
|
+
*
|
|
258
|
+
* Returns `null` for `PASS_THROUGH`, `NORMAL`, and unrecognised modes (caller
|
|
259
|
+
* should omit the CSS property entirely in those cases).
|
|
260
|
+
*/
|
|
261
|
+
export function cssBlendMode(figmaBlendMode) {
|
|
262
|
+
if (!figmaBlendMode ||
|
|
263
|
+
figmaBlendMode === "PASS_THROUGH" ||
|
|
264
|
+
figmaBlendMode === "NORMAL")
|
|
265
|
+
return null;
|
|
266
|
+
const cssMode = figmaBlendMode.toLowerCase().replace(/_/g, "-");
|
|
267
|
+
if (CSS_BLEND_MODES.has(cssMode))
|
|
268
|
+
return { cssMode, verdict: "exact" };
|
|
269
|
+
const fallback = FIGMA_ONLY_BLEND_MODE_FALLBACK[figmaBlendMode];
|
|
270
|
+
if (fallback)
|
|
271
|
+
return { cssMode: fallback, verdict: "approximated" };
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=figma-paint-math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-paint-math.js","sourceRoot":"","sources":["../../src/ingestion/figma-paint-math.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure, synchronous math helpers for Figma gradient geometry and blend-mode\n * normalisation. No DOM, no CSS, no network.\n *\n * Supports two gradient-transform sources:\n * - REST API `gradientHandlePositions` (3-element Vec2 array, already in\n * normalized 0..1 node-space).\n * - 2×3 affine transform in **either** the Kiwi/fig-file object form\n * `{m00..m12}` or the REST/Plugin API array form `[[a,b,tx],[c,d,ty]]`.\n * Both encode the **node-to-gradient** mapping (same convention as Figma's\n * own `gradientTransform` field); invert to obtain handle positions.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface Vec2 {\n x: number;\n y: number;\n}\n\nexport interface GradientHandles {\n start: Vec2;\n end: Vec2;\n width: Vec2;\n}\n\n/**\n * 2×3 affine transform in the row-major object form used by Kiwi/fig-file\n * decoded paint nodes:\n * [m00, m01, m02]\n * [m10, m11, m12]\n */\nexport interface Mat2x3Object {\n m00: number;\n m01: number;\n m02: number;\n m10: number;\n m11: number;\n m12: number;\n}\n\n/**\n * 2×3 affine transform in the nested-array form used by the Figma REST API\n * and Plugin API `gradientTransform` field:\n * [[a, b, tx], [c, d, ty]]\n */\nexport type Mat2x3Array = [[number, number, number], [number, number, number]];\n\nexport type BlendVerdict = \"exact\" | \"approximated\";\n\nexport interface BlendModeResult {\n cssMode: string;\n verdict: BlendVerdict;\n}\n\nexport type GradientKind = \"LINEAR\" | \"RADIAL\" | \"ANGULAR\" | \"DIAMOND\";\n\nexport interface GradientGeometry {\n kind: GradientKind;\n handles: GradientHandles;\n start: Vec2;\n end: Vec2;\n center: Vec2;\n rx: number;\n ry: number;\n rotationDeg: number;\n fromDeg: number;\n}\n\n// ---------------------------------------------------------------------------\n// Matrix helpers\n// ---------------------------------------------------------------------------\n\n/** Convert the REST/Plugin nested-array form to the object form. */\nexport function mat2x3FromArray(m: Mat2x3Array): Mat2x3Object {\n return {\n m00: m[0][0],\n m01: m[0][1],\n m02: m[0][2],\n m10: m[1][0],\n m11: m[1][1],\n m12: m[1][2],\n };\n}\n\n/**\n * Invert a 2×3 affine transform. Returns null when the matrix is singular\n * (determinant near zero, i.e. the gradient has collapsed to a line or point).\n *\n * The 2×2 rotation/scale sub-matrix is [[m00,m01],[m10,m11]]; the\n * standard 2×2 inverse is applied and the translation is back-solved:\n * inv_tx = (-m11*m02 + m01*m12) / det\n * inv_ty = ( m10*m02 - m00*m12) / det\n */\nexport function invert2x3(m: Mat2x3Object): Mat2x3Object | null {\n const det = m.m00 * m.m11 - m.m01 * m.m10;\n if (Math.abs(det) < 1e-8) return null;\n const inv00 = m.m11 / det;\n const inv01 = -m.m01 / det;\n const inv10 = -m.m10 / det;\n const inv11 = m.m00 / det;\n return {\n m00: inv00,\n m01: inv01,\n m02: (-m.m11 * m.m02 + m.m01 * m.m12) / det,\n m10: inv10,\n m11: inv11,\n m12: (m.m10 * m.m02 - m.m00 * m.m12) / det,\n };\n}\n\n/**\n * Apply a 2×3 transform to a 2-D point.\n * The point is treated as a homogeneous [x, y, 1]^T column vector.\n */\nfunction applyMat2x3(m: Mat2x3Object, v: Vec2): Vec2 {\n return {\n x: m.m00 * v.x + m.m01 * v.y + m.m02,\n y: m.m10 * v.x + m.m11 * v.y + m.m12,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Handle positions from transforms\n// ---------------------------------------------------------------------------\n\n/**\n * Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**\n * transform in Kiwi/fig-file object form.\n *\n * Figma's gradient transform encodes where the gradient's natural coordinate\n * system sits inside the node's normalized [0,1]² box. The three canonical\n * gradient-space points (start, end, width) map back to node-space by\n * inverting the transform:\n * handles = inv(M) * {(0,0), (1,0), (0,1)}\n */\nexport function handlePositionsFromObjectTransform(\n t: Mat2x3Object,\n): GradientHandles | null {\n const inv = invert2x3(t);\n if (!inv) return null;\n return {\n start: applyMat2x3(inv, { x: 0, y: 0 }),\n end: applyMat2x3(inv, { x: 1, y: 0 }),\n width: applyMat2x3(inv, { x: 0, y: 1 }),\n };\n}\n\nexport function gradientGeometryFromTransform(\n kind: GradientKind,\n transform: Mat2x3Object,\n box: { width: number; height: number },\n): GradientGeometry | null {\n const inverse = invert2x3(transform);\n if (!inverse) return null;\n const toPixels = (point: Vec2): Vec2 => ({\n x: point.x * box.width,\n y: point.y * box.height,\n });\n const startNormalized = applyMat2x3(inverse, { x: 0, y: 0.5 });\n const endNormalized = applyMat2x3(inverse, { x: 1, y: 0.5 });\n const widthNormalized = applyMat2x3(inverse, { x: 1, y: 0 });\n const center = toPixels(applyMat2x3(inverse, { x: 0.5, y: 0.5 }));\n const vertex = toPixels(applyMat2x3(inverse, { x: 1, y: 0.5 }));\n const covertex = toPixels(applyMat2x3(inverse, { x: 0.5, y: 1 }));\n const vertexDx = vertex.x - center.x;\n const vertexDy = vertex.y - center.y;\n return {\n kind,\n handles: {\n start: startNormalized,\n end: endNormalized,\n width: widthNormalized,\n },\n start: toPixels(startNormalized),\n end: toPixels(endNormalized),\n center,\n rx: Math.hypot(vertexDx, vertexDy),\n ry: Math.hypot(covertex.x - center.x, covertex.y - center.y),\n rotationDeg: (Math.atan2(vertexDy, vertexDx) * 180) / Math.PI,\n fromDeg: (Math.atan2(-transform.m10, transform.m00) * 180) / Math.PI,\n };\n}\n\n/**\n * Derive REST-style `GradientHandles` from a 2×3 **node-to-gradient**\n * transform in REST/Plugin API nested-array form.\n */\nexport function handlePositionsFromArrayTransform(\n t: Mat2x3Array,\n): GradientHandles | null {\n return handlePositionsFromObjectTransform(mat2x3FromArray(t));\n}\n\n// ---------------------------------------------------------------------------\n// Gradient geometry from REST handle positions\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve `GradientHandles` from a raw `gradientHandlePositions` array as\n * returned by the Figma REST API. Returns null when the array is too short.\n */\nexport function resolveGradientHandles(\n gradientHandlePositions: Array<Vec2> | undefined,\n): GradientHandles | null {\n if (!gradientHandlePositions || gradientHandlePositions.length < 3)\n return null;\n return {\n start: gradientHandlePositions[0]!,\n end: gradientHandlePositions[1]!,\n width: gradientHandlePositions[2]!,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Gradient angle\n// ---------------------------------------------------------------------------\n\n/**\n * Derive a CSS `linear-gradient()` angle (degrees) from Figma's normalized\n * `gradientHandlePositions`. Handle positions are normalized independently in\n * x and y (0..1 relative to the node's bounding box), so the angle must be\n * computed in actual pixel space using the node's real width/height —\n * otherwise a non-square box silently distorts the angle.\n *\n * Identity: left-to-right handles (start=(0,0.5), end=(1,0.5)) → 90 deg.\n * Top-to-bottom handles (start=(0.5,0), end=(0.5,1)) → 180 deg.\n *\n * This is the same function previously inlined in figma-node-to-html.ts and\n * is preserved here verbatim for public API compatibility.\n */\nexport function gradientAngleDegrees(\n paint: { gradientHandlePositions?: Array<Vec2> },\n box: { width: number; height: number },\n): number | null {\n const handles = resolveGradientHandles(paint.gradientHandlePositions);\n if (!handles) return null;\n return gradientAngleDegreesFromHandles(handles, box);\n}\n\n/**\n * Same calculation as `gradientAngleDegrees` but accepts already-resolved\n * `GradientHandles` — useful when handles come from a transform inversion.\n */\nexport function gradientAngleDegreesFromHandles(\n handles: GradientHandles,\n box: { width: number; height: number },\n): number {\n const dx = (handles.end.x - handles.start.x) * box.width;\n const dy = (handles.end.y - handles.start.y) * box.height;\n const angleRad = Math.atan2(dy, dx);\n const angleDeg = (angleRad * 180) / Math.PI + 90;\n return ((angleDeg % 360) + 360) % 360;\n}\n\n// ---------------------------------------------------------------------------\n// Linear stop position remapping\n// ---------------------------------------------------------------------------\n\n/**\n * CSS `linear-gradient(angle, ...)` always stretches its 0%/100% stops across\n * the box's full diagonal at that angle (the CSS \"gradient line\" always spans\n * corner-to-corner). Figma's stop positions are fractions of the literal\n * handle-to-handle distance, which only coincides with the CSS span when the\n * handles are dragged exactly corner-to-corner.\n *\n * This function returns a remap closure that projects each Figma stop's real\n * pixel position onto the CSS gradient line and re-expresses it as a\n * percentage of the CSS line's length, so a partial/offset gradient renders at\n * the same pixel positions Figma draws it at.\n */\nexport function remapLinearStopPosition(\n handles: GradientHandles,\n box: { width: number; height: number },\n angleDeg: number,\n): (position: number) => number {\n const angleRad = (angleDeg * Math.PI) / 180;\n const ux = Math.sin(angleRad);\n const uy = -Math.cos(angleRad);\n const lineLength = box.width * Math.abs(ux) + box.height * Math.abs(uy);\n if (lineLength < 1e-6) return (position) => position;\n const startPx = {\n x: handles.start.x * box.width,\n y: handles.start.y * box.height,\n };\n const endPx = { x: handles.end.x * box.width, y: handles.end.y * box.height };\n const cx = box.width / 2;\n const cy = box.height / 2;\n return (position: number): number => {\n const px = startPx.x + position * (endPx.x - startPx.x);\n const py = startPx.y + position * (endPx.y - startPx.y);\n const projected = (px - cx) * ux + (py - cy) * uy;\n return (projected + lineLength / 2) / lineLength;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Vector length (pixel-space)\n// ---------------------------------------------------------------------------\n\n/**\n * Euclidean distance between two normalized-coordinate points after scaling\n * into actual pixel space.\n */\nexport function vectorLength(\n from: Vec2,\n to: Vec2,\n box: { width: number; height: number },\n): number {\n const dx = (to.x - from.x) * box.width;\n const dy = (to.y - from.y) * box.height;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n// ---------------------------------------------------------------------------\n// CSS blend mode mapping\n// ---------------------------------------------------------------------------\n\nconst CSS_BLEND_MODES = new Set([\n \"multiply\",\n \"screen\",\n \"overlay\",\n \"darken\",\n \"lighten\",\n \"color-dodge\",\n \"color-burn\",\n \"hard-light\",\n \"soft-light\",\n \"difference\",\n \"exclusion\",\n \"hue\",\n \"saturation\",\n \"color\",\n \"luminosity\",\n]);\n\n/**\n * Figma-only blend modes that have no exact CSS equivalent. The value is the\n * closest CSS mode (approximation) and callers should record the verdict.\n */\nconst FIGMA_ONLY_BLEND_MODE_FALLBACK: Record<string, string> = {\n LINEAR_BURN: \"plus-darker\",\n LINEAR_DODGE: \"plus-lighter\",\n LIGHTER: \"plus-lighter\",\n DARKER: \"darken\",\n};\n\n/**\n * Map a Figma blend mode string to a CSS `mix-blend-mode` value with an\n * explicit fidelity verdict:\n * - `\"exact\"` — CSS supports the mode natively.\n * - `\"approximated\"` — mapped to the closest CSS equivalent.\n *\n * Returns `null` for `PASS_THROUGH`, `NORMAL`, and unrecognised modes (caller\n * should omit the CSS property entirely in those cases).\n */\nexport function cssBlendMode(figmaBlendMode: string): BlendModeResult | null {\n if (\n !figmaBlendMode ||\n figmaBlendMode === \"PASS_THROUGH\" ||\n figmaBlendMode === \"NORMAL\"\n )\n return null;\n const cssMode = figmaBlendMode.toLowerCase().replace(/_/g, \"-\");\n if (CSS_BLEND_MODES.has(cssMode)) return { cssMode, verdict: \"exact\" };\n const fallback = FIGMA_ONLY_BLEND_MODE_FALLBACK[figmaBlendMode];\n if (fallback) return { cssMode: fallback, verdict: \"approximated\" };\n return null;\n}\n"]}
|
|
@@ -3,6 +3,7 @@ export { detectOfficeDocumentType, normalizeDocumentText, parseOfficeDocument, t
|
|
|
3
3
|
export { parsePptxPresentation, type ParsedPptxImage, type ParsedPptxPresentation, type ParsedPptxSlide, type ParsedPptxTextRun, } from "./pptx.js";
|
|
4
4
|
export { extractDocxSections, parseDocxDocument, sanitizeInertDocumentHtml, type ParsedDocxDocument, type ParsedDocxSection, } from "./docx.js";
|
|
5
5
|
export { compositeFigmaColors, extractFigmaTopLevelFrames, figmaColorToHex, figmaContrastRatio, summarizeFigmaFrame, summarizeFigmaNode, type FigmaContextNode, type FigmaFrameSummary, type FigmaRgba, type SummarizeFigmaNodeResult, } from "./figma.js";
|
|
6
|
+
export { cssBlendMode, gradientAngleDegreesFromHandles, gradientGeometryFromTransform, handlePositionsFromArrayTransform, handlePositionsFromObjectTransform, invert2x3, mat2x3FromArray, remapLinearStopPosition, resolveGradientHandles, vectorLength, type BlendModeResult, type BlendVerdict, type GradientGeometry, type GradientHandles, type GradientKind, type Mat2x3Array, type Mat2x3Object, type Vec2, } from "./figma-paint-math.js";
|
|
6
7
|
export { assertFigmaNodeTreeComplexity, collectFallbackNodeIds, collectFontUsage, collectImageFillRefs, gradientAngleDegrees, mapFigmaNodeToHtml, type FidelityEntry, type FidelityLevel, type FidelityReport, type FigmaBoundingBox, type FigmaColor, type FigmaColorStop, type FigmaEffect, type FigmaFontUsage, type FigmaImageFilter, type FigmaIndividualStrokeWeights, type FigmaNode, type FigmaPaint, type FigmaTypeStyle, type MapFigmaNodeOptions, type MapFigmaNodeResult, } from "./figma-node-to-html.js";
|
|
7
8
|
export { notionBlocksToMarkdown, notionBlockToMarkdown, type NotionMarkdownResult, type NotionMarkdownSection, } from "./notion.js";
|
|
8
9
|
export { compareRasterImages, cropImageRegion, extractCssColors, extractDominantColors, fingerprintMedia, rankColorSamples, readBoundedResponseBytes, type CroppedImageRegion, type MediaFingerprint, } from "./media.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ingestion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,wBAAwB,GAC9B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ingestion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,wBAAwB,GAC9B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,+BAA+B,EAC/B,6BAA6B,EAC7B,iCAAiC,EACjC,kCAAkC,EAClC,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,IAAI,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC"}
|
package/dist/ingestion/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { detectOfficeDocumentType, normalizeDocumentText, parseOfficeDocument, }
|
|
|
3
3
|
export { parsePptxPresentation, } from "./pptx.js";
|
|
4
4
|
export { extractDocxSections, parseDocxDocument, sanitizeInertDocumentHtml, } from "./docx.js";
|
|
5
5
|
export { compositeFigmaColors, extractFigmaTopLevelFrames, figmaColorToHex, figmaContrastRatio, summarizeFigmaFrame, summarizeFigmaNode, } from "./figma.js";
|
|
6
|
+
export { cssBlendMode, gradientAngleDegreesFromHandles, gradientGeometryFromTransform, handlePositionsFromArrayTransform, handlePositionsFromObjectTransform, invert2x3, mat2x3FromArray, remapLinearStopPosition, resolveGradientHandles, vectorLength, } from "./figma-paint-math.js";
|
|
6
7
|
export { assertFigmaNodeTreeComplexity, collectFallbackNodeIds, collectFontUsage, collectImageFillRefs, gradientAngleDegrees, mapFigmaNodeToHtml, } from "./figma-node-to-html.js";
|
|
7
8
|
export { notionBlocksToMarkdown, notionBlockToMarkdown, } from "./notion.js";
|
|
8
9
|
export { compareRasterImages, cropImageRegion, extractCssColors, extractDominantColors, fingerprintMedia, rankColorSamples, readBoundedResponseBytes, } from "./media.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ingestion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,GASpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,GAOpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GAKtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,GAG1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GAKnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GAgBnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,GAI5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAI5B,MAAM,gBAAgB,CAAC","sourcesContent":["export {\n acquireIngestionLease,\n assertInventoryComplete,\n consumeIngestionBudget,\n createIngestionBudgetState,\n createIngestionCheckpoint,\n ingestionBudgetStopReason,\n releaseIngestionLease,\n renewIngestionLease,\n type AcquireIngestionLeaseInput,\n type AcquireIngestionLeaseResult,\n type IngestionBudgetLimits,\n type IngestionBudgetState,\n type IngestionBudgetStopReason,\n type IngestionCheckpoint,\n type IngestionLease,\n type IngestionPhase,\n} from \"./orchestration.js\";\nexport {\n detectOfficeDocumentType,\n normalizeDocumentText,\n parseOfficeDocument,\n type OfficeDocumentAst,\n type OfficeDocumentParser,\n type OfficeDocumentPart,\n type OfficeDocumentType,\n type ParsedOfficeDocument,\n type ParseOfficeDocumentInput,\n} from \"./office.js\";\nexport {\n parsePptxPresentation,\n type ParsedPptxImage,\n type ParsedPptxPresentation,\n type ParsedPptxSlide,\n type ParsedPptxTextRun,\n} from \"./pptx.js\";\nexport {\n extractDocxSections,\n parseDocxDocument,\n sanitizeInertDocumentHtml,\n type ParsedDocxDocument,\n type ParsedDocxSection,\n} from \"./docx.js\";\nexport {\n compositeFigmaColors,\n extractFigmaTopLevelFrames,\n figmaColorToHex,\n figmaContrastRatio,\n summarizeFigmaFrame,\n summarizeFigmaNode,\n type FigmaContextNode,\n type FigmaFrameSummary,\n type FigmaRgba,\n type SummarizeFigmaNodeResult,\n} from \"./figma.js\";\nexport {\n assertFigmaNodeTreeComplexity,\n collectFallbackNodeIds,\n collectFontUsage,\n collectImageFillRefs,\n gradientAngleDegrees,\n mapFigmaNodeToHtml,\n type FidelityEntry,\n type FidelityLevel,\n type FidelityReport,\n type FigmaBoundingBox,\n type FigmaColor,\n type FigmaColorStop,\n type FigmaEffect,\n type FigmaFontUsage,\n type FigmaImageFilter,\n type FigmaIndividualStrokeWeights,\n type FigmaNode,\n type FigmaPaint,\n type FigmaTypeStyle,\n type MapFigmaNodeOptions,\n type MapFigmaNodeResult,\n} from \"./figma-node-to-html.js\";\nexport {\n notionBlocksToMarkdown,\n notionBlockToMarkdown,\n type NotionMarkdownResult,\n type NotionMarkdownSection,\n} from \"./notion.js\";\nexport {\n compareRasterImages,\n cropImageRegion,\n extractCssColors,\n extractDominantColors,\n fingerprintMedia,\n rankColorSamples,\n readBoundedResponseBytes,\n type CroppedImageRegion,\n type MediaFingerprint,\n} from \"./media.js\";\nexport {\n extractStaticWebsiteContext,\n type WebsiteAsset,\n type WebsiteDesignTokens,\n type WebsiteExtraction,\n} from \"./website.js\";\nexport {\n selectInventoryForHydration,\n type IngestionHydrationPolicy,\n type IngestionHydrationSelection,\n type IngestionInventoryCandidate,\n} from \"./selection.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ingestion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,GASpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,GAOpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GAKtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,GAG1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GAKnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,+BAA+B,EAC/B,6BAA6B,EAC7B,iCAAiC,EACjC,kCAAkC,EAClC,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,GASb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GAgBnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,GAI5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAI5B,MAAM,gBAAgB,CAAC","sourcesContent":["export {\n acquireIngestionLease,\n assertInventoryComplete,\n consumeIngestionBudget,\n createIngestionBudgetState,\n createIngestionCheckpoint,\n ingestionBudgetStopReason,\n releaseIngestionLease,\n renewIngestionLease,\n type AcquireIngestionLeaseInput,\n type AcquireIngestionLeaseResult,\n type IngestionBudgetLimits,\n type IngestionBudgetState,\n type IngestionBudgetStopReason,\n type IngestionCheckpoint,\n type IngestionLease,\n type IngestionPhase,\n} from \"./orchestration.js\";\nexport {\n detectOfficeDocumentType,\n normalizeDocumentText,\n parseOfficeDocument,\n type OfficeDocumentAst,\n type OfficeDocumentParser,\n type OfficeDocumentPart,\n type OfficeDocumentType,\n type ParsedOfficeDocument,\n type ParseOfficeDocumentInput,\n} from \"./office.js\";\nexport {\n parsePptxPresentation,\n type ParsedPptxImage,\n type ParsedPptxPresentation,\n type ParsedPptxSlide,\n type ParsedPptxTextRun,\n} from \"./pptx.js\";\nexport {\n extractDocxSections,\n parseDocxDocument,\n sanitizeInertDocumentHtml,\n type ParsedDocxDocument,\n type ParsedDocxSection,\n} from \"./docx.js\";\nexport {\n compositeFigmaColors,\n extractFigmaTopLevelFrames,\n figmaColorToHex,\n figmaContrastRatio,\n summarizeFigmaFrame,\n summarizeFigmaNode,\n type FigmaContextNode,\n type FigmaFrameSummary,\n type FigmaRgba,\n type SummarizeFigmaNodeResult,\n} from \"./figma.js\";\nexport {\n cssBlendMode,\n gradientAngleDegreesFromHandles,\n gradientGeometryFromTransform,\n handlePositionsFromArrayTransform,\n handlePositionsFromObjectTransform,\n invert2x3,\n mat2x3FromArray,\n remapLinearStopPosition,\n resolveGradientHandles,\n vectorLength,\n type BlendModeResult,\n type BlendVerdict,\n type GradientGeometry,\n type GradientHandles,\n type GradientKind,\n type Mat2x3Array,\n type Mat2x3Object,\n type Vec2,\n} from \"./figma-paint-math.js\";\nexport {\n assertFigmaNodeTreeComplexity,\n collectFallbackNodeIds,\n collectFontUsage,\n collectImageFillRefs,\n gradientAngleDegrees,\n mapFigmaNodeToHtml,\n type FidelityEntry,\n type FidelityLevel,\n type FidelityReport,\n type FigmaBoundingBox,\n type FigmaColor,\n type FigmaColorStop,\n type FigmaEffect,\n type FigmaFontUsage,\n type FigmaImageFilter,\n type FigmaIndividualStrokeWeights,\n type FigmaNode,\n type FigmaPaint,\n type FigmaTypeStyle,\n type MapFigmaNodeOptions,\n type MapFigmaNodeResult,\n} from \"./figma-node-to-html.js\";\nexport {\n notionBlocksToMarkdown,\n notionBlockToMarkdown,\n type NotionMarkdownResult,\n type NotionMarkdownSection,\n} from \"./notion.js\";\nexport {\n compareRasterImages,\n cropImageRegion,\n extractCssColors,\n extractDominantColors,\n fingerprintMedia,\n rankColorSamples,\n readBoundedResponseBytes,\n type CroppedImageRegion,\n type MediaFingerprint,\n} from \"./media.js\";\nexport {\n extractStaticWebsiteContext,\n type WebsiteAsset,\n type WebsiteDesignTokens,\n type WebsiteExtraction,\n} from \"./website.js\";\nexport {\n selectInventoryForHydration,\n type IngestionHydrationPolicy,\n type IngestionHydrationSelection,\n type IngestionInventoryCandidate,\n} from \"./selection.js\";\n"]}
|
|
@@ -299,6 +299,12 @@ declare const messages: {
|
|
|
299
299
|
configureProviderKeys: string;
|
|
300
300
|
checkingAiConnection: string;
|
|
301
301
|
connectionUnavailable: string;
|
|
302
|
+
delegatedAgent: {
|
|
303
|
+
asking: string;
|
|
304
|
+
asked: string;
|
|
305
|
+
error: string;
|
|
306
|
+
elapsed: string;
|
|
307
|
+
};
|
|
302
308
|
voiceMode: {
|
|
303
309
|
entryButtonLabel: string;
|
|
304
310
|
promptTitle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-messages.d.ts","sourceRoot":"","sources":["../../src/localization/default-messages.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"default-messages.d.ts","sourceRoot":"","sources":["../../src/localization/default-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -304,6 +304,12 @@ const messages = {
|
|
|
304
304
|
configureProviderKeys: "Configure Anthropic, OpenAI, or another provider",
|
|
305
305
|
checkingAiConnection: "Checking AI connection...",
|
|
306
306
|
connectionUnavailable: "Unable to check AI connection. Click to retry.",
|
|
307
|
+
delegatedAgent: {
|
|
308
|
+
asking: "Asking {{name}}...",
|
|
309
|
+
asked: "Asked {{name}}",
|
|
310
|
+
error: "Error asking {{name}}",
|
|
311
|
+
elapsed: "{{duration}} elapsed",
|
|
312
|
+
},
|
|
307
313
|
voiceMode: {
|
|
308
314
|
entryButtonLabel: "Use microphone",
|
|
309
315
|
promptTitle: "Use your voice",
|