@agent-native/core 0.119.0 → 0.119.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +23 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +4 -0
  5. package/corpus/core/src/agent/production-agent.ts +1 -0
  6. package/corpus/core/src/client/AssistantChat.tsx +11 -50
  7. package/corpus/core/src/client/ErrorBoundary.tsx +25 -19
  8. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +1 -1
  9. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +23 -0
  10. package/corpus/core/src/client/components/ui/message-scroller.tsx +1 -9
  11. package/corpus/core/src/client/resources/ResourceTree.tsx +3 -3
  12. package/corpus/core/src/client/resources/ResourcesPanel.tsx +64 -60
  13. package/corpus/core/src/client/settings/AccountSettingsCard.tsx +228 -0
  14. package/corpus/core/src/client/settings/SecretsSection.tsx +7 -5
  15. package/corpus/core/src/client/settings/SettingsPanel.tsx +67 -244
  16. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +88 -21
  17. package/corpus/core/src/client/settings/agent-settings-search.ts +0 -2
  18. package/corpus/core/src/client/settings/index.ts +7 -0
  19. package/corpus/core/src/client/vite-dev-recovery-script.ts +18 -1
  20. package/corpus/core/src/db/client.ts +65 -15
  21. package/corpus/core/src/db/index.ts +2 -0
  22. package/corpus/core/src/ingestion/figma-node-to-html.ts +20 -99
  23. package/corpus/core/src/ingestion/figma-paint-math.ts +371 -0
  24. package/corpus/core/src/ingestion/index.ts +20 -0
  25. package/corpus/core/src/localization/default-messages.ts +1 -0
  26. package/corpus/core/src/server/email.ts +33 -1
  27. package/corpus/core/src/styles/agent-native.css +23 -0
  28. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  29. package/corpus/core/src/templates/default/app/routes/settings.tsx +2 -0
  30. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  31. package/corpus/core/src/vite/client.ts +76 -8
  32. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +28 -0
  33. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +3 -1
  34. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -13
  35. package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +2 -2
  36. package/corpus/templates/analytics/app/global.css +0 -5
  37. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +0 -13
  38. package/corpus/templates/analytics/app/lib/sql-query.ts +15 -2
  39. package/corpus/templates/analytics/app/pages/Settings.tsx +2 -24
  40. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  41. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +4 -0
  42. package/corpus/templates/analytics/app/pages/settings/settings-search.ts +1 -1
  43. package/corpus/templates/analytics/changelog/2026-07-23-ask-analytics-is-better-centered-with-a-quieter-chat-rail-an.md +6 -0
  44. package/corpus/templates/analytics/changelog/2026-07-23-daily-dashboard-emails-load-read-heavy-panels-reliably.md +6 -0
  45. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +2 -2
  46. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -5
  47. package/corpus/templates/analytics/server/lib/dashboard-report.ts +186 -62
  48. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +3 -0
  49. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +18 -2
  50. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -0
  51. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +28 -0
  52. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -4
  53. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +1 -1
  54. package/corpus/templates/assets/app/global.css +0 -5
  55. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +0 -22
  56. package/corpus/templates/assets/app/routes/library.tsx +17 -9
  57. package/corpus/templates/assets/app/routes/settings.tsx +2 -0
  58. package/corpus/templates/assets/changelog/2026-07-23-create-and-chat-surfaces-are-better-centered-with-quieter-ch.md +6 -0
  59. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +28 -0
  60. package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
  61. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +1 -1
  62. package/corpus/templates/brain/app/global.css +0 -9
  63. package/corpus/templates/brain/app/hooks/use-navigation-state.ts +0 -12
  64. package/corpus/templates/brain/app/i18n-data.ts +1 -0
  65. package/corpus/templates/brain/app/lib/settings-navigation.ts +1 -1
  66. package/corpus/templates/brain/app/routes/settings.tsx +21 -22
  67. package/corpus/templates/brain/changelog/2026-07-23-ask-brain-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
  68. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +28 -0
  69. package/corpus/templates/calendar/app/pages/Settings.tsx +2 -0
  70. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  71. package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
  72. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  73. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  74. package/corpus/templates/chat/app/routes/settings.tsx +2 -0
  75. package/corpus/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  76. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +28 -0
  77. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +2 -0
  78. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +28 -0
  79. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -0
  80. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +28 -0
  81. package/corpus/templates/design/AGENTS.md +18 -5
  82. package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +25 -12
  83. package/corpus/templates/design/actions/hydrate-figma-paste-images.ts +115 -0
  84. package/corpus/templates/design/actions/import-figma-clipboard.ts +83 -18
  85. package/corpus/templates/design/actions/import-figma-frame.ts +34 -21
  86. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +28 -1
  87. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +106 -11
  88. package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +273 -0
  89. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +7 -7
  90. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +57 -9
  91. package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +10 -0
  92. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +8 -1
  93. package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
  94. package/corpus/templates/design/app/i18n-data.ts +150 -2
  95. package/corpus/templates/design/app/lib/design-file-upload.ts +85 -0
  96. package/corpus/templates/design/app/lib/design-import.ts +19 -1
  97. package/corpus/templates/design/app/lib/figma-clipboard.ts +110 -10
  98. package/corpus/templates/design/app/routes/settings.tsx +2 -0
  99. package/corpus/templates/design/changelog/2026-07-20-paste-figma-frames-directly-onto-the-canvas-no-token-needed.md +6 -0
  100. package/corpus/templates/design/changelog/2026-07-21-fig-upload-frame-url-and-rate-limit-errors.md +5 -0
  101. package/corpus/templates/design/changelog/2026-07-22-connecting-a-figma-token-now-actually-fills-in-a-pasted-desi.md +6 -0
  102. package/corpus/templates/design/changelog/2026-07-22-figma-line-arrow-vectors-and-stroked-icons-now-render-instea.md +6 -0
  103. package/corpus/templates/design/changelog/2026-07-22-fill-a-no-token-figma-paste-s-images-by-dropping-the-origina.md +6 -0
  104. package/corpus/templates/design/changelog/2026-07-22-imported-and-pasted-figma-frames-now-render-faithfully-fixed.md +6 -0
  105. package/corpus/templates/design/server/handlers/import-design-file.ts +50 -0
  106. package/corpus/templates/design/server/lib/fig-file-decoder.ts +90 -49
  107. package/corpus/templates/design/server/lib/fig-file-import.ts +19 -5
  108. package/corpus/templates/design/server/lib/fig-file-to-html.ts +583 -78
  109. package/corpus/templates/design/server/lib/figma-clipboard-local-decode.ts +238 -0
  110. package/corpus/templates/design/server/lib/figma-image-hydration.ts +389 -0
  111. package/corpus/templates/design/server/lib/figma-node-import.ts +136 -36
  112. package/corpus/templates/design/server/register-secrets.ts +14 -2
  113. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +28 -0
  114. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -0
  115. package/corpus/templates/dispatch/changelog/2026-07-23-quieter-progressive-disclosure.md +6 -0
  116. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +28 -0
  117. package/corpus/templates/forms/app/global.css +0 -5
  118. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +0 -7
  119. package/corpus/templates/forms/app/root.tsx +1 -7
  120. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -0
  121. package/corpus/templates/forms/changelog/2026-07-23-ask-forms-is-better-centered-with-quieter-chat-history-and-a.md +6 -0
  122. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +28 -0
  123. package/corpus/templates/macros/app/routes/settings.tsx +2 -0
  124. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +28 -0
  125. package/corpus/templates/mail/app/pages/SettingsPage.tsx +3 -1
  126. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +28 -0
  127. package/corpus/templates/plan/app/components/layout/Layout.tsx +2 -2
  128. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +1 -13
  129. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +0 -4
  130. package/corpus/templates/plan/app/routes/settings.tsx +2 -0
  131. package/corpus/templates/plan/changelog/2026-07-23-ask-plan-is-now-a-clean-full-page-chat-surface-with-better-c.md +6 -0
  132. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +28 -0
  133. package/corpus/templates/slides/app/routes/settings.tsx +2 -0
  134. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +28 -0
  135. package/corpus/toolkit/CHANGELOG.md +6 -0
  136. package/corpus/toolkit/package.json +1 -1
  137. package/corpus/toolkit/src/chat-history.css +2 -2
  138. package/corpus/toolkit/src/composer/PromptComposer.tsx +0 -31
  139. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +7 -2
  140. package/corpus/toolkit/src/styles.css +183 -36
  141. package/dist/a2a/client.d.ts +2 -0
  142. package/dist/a2a/client.d.ts.map +1 -1
  143. package/dist/a2a/client.js +2 -0
  144. package/dist/a2a/client.js.map +1 -1
  145. package/dist/agent/production-agent.d.ts.map +1 -1
  146. package/dist/agent/production-agent.js +1 -0
  147. package/dist/agent/production-agent.js.map +1 -1
  148. package/dist/client/AssistantChat.d.ts.map +1 -1
  149. package/dist/client/AssistantChat.js +11 -42
  150. package/dist/client/AssistantChat.js.map +1 -1
  151. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  152. package/dist/client/ErrorBoundary.js +3 -2
  153. package/dist/client/ErrorBoundary.js.map +1 -1
  154. package/dist/client/agent-page/AgentTabFrame.js +1 -1
  155. package/dist/client/agent-page/AgentTabFrame.js.map +1 -1
  156. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  157. package/dist/client/agent-page/AgentTabsPage.js +13 -1
  158. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  159. package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
  160. package/dist/client/components/ui/message-scroller.js +2 -2
  161. package/dist/client/components/ui/message-scroller.js.map +1 -1
  162. package/dist/client/resources/ResourceTree.js +2 -2
  163. package/dist/client/resources/ResourceTree.js.map +1 -1
  164. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  165. package/dist/client/resources/ResourcesPanel.js +11 -11
  166. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  167. package/dist/client/settings/AccountSettingsCard.d.ts +9 -0
  168. package/dist/client/settings/AccountSettingsCard.d.ts.map +1 -0
  169. package/dist/client/settings/AccountSettingsCard.js +78 -0
  170. package/dist/client/settings/AccountSettingsCard.js.map +1 -0
  171. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  172. package/dist/client/settings/SecretsSection.js +2 -2
  173. package/dist/client/settings/SecretsSection.js.map +1 -1
  174. package/dist/client/settings/SettingsPanel.d.ts +3 -0
  175. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  176. package/dist/client/settings/SettingsPanel.js +25 -77
  177. package/dist/client/settings/SettingsPanel.js.map +1 -1
  178. package/dist/client/settings/SettingsTabsPage.d.ts +5 -1
  179. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  180. package/dist/client/settings/SettingsTabsPage.js +35 -9
  181. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  182. package/dist/client/settings/agent-settings-search.d.ts.map +1 -1
  183. package/dist/client/settings/agent-settings-search.js +0 -2
  184. package/dist/client/settings/agent-settings-search.js.map +1 -1
  185. package/dist/client/settings/index.d.ts +2 -1
  186. package/dist/client/settings/index.d.ts.map +1 -1
  187. package/dist/client/settings/index.js +2 -1
  188. package/dist/client/settings/index.js.map +1 -1
  189. package/dist/client/vite-dev-recovery-script.d.ts.map +1 -1
  190. package/dist/client/vite-dev-recovery-script.js +18 -1
  191. package/dist/client/vite-dev-recovery-script.js.map +1 -1
  192. package/dist/collab/routes.d.ts +1 -1
  193. package/dist/db/client.d.ts +18 -8
  194. package/dist/db/client.d.ts.map +1 -1
  195. package/dist/db/client.js +34 -11
  196. package/dist/db/client.js.map +1 -1
  197. package/dist/db/index.d.ts +1 -1
  198. package/dist/db/index.d.ts.map +1 -1
  199. package/dist/db/index.js.map +1 -1
  200. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -1
  201. package/dist/ingestion/figma-node-to-html.js +14 -88
  202. package/dist/ingestion/figma-node-to-html.js.map +1 -1
  203. package/dist/ingestion/figma-paint-math.d.ts +157 -0
  204. package/dist/ingestion/figma-paint-math.d.ts.map +1 -0
  205. package/dist/ingestion/figma-paint-math.js +274 -0
  206. package/dist/ingestion/figma-paint-math.js.map +1 -0
  207. package/dist/ingestion/index.d.ts +1 -0
  208. package/dist/ingestion/index.d.ts.map +1 -1
  209. package/dist/ingestion/index.js +1 -0
  210. package/dist/ingestion/index.js.map +1 -1
  211. package/dist/localization/default-messages.d.ts +1 -0
  212. package/dist/localization/default-messages.d.ts.map +1 -1
  213. package/dist/localization/default-messages.js +1 -0
  214. package/dist/localization/default-messages.js.map +1 -1
  215. package/dist/notifications/routes.d.ts +2 -2
  216. package/dist/observability/routes.d.ts +3 -3
  217. package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
  218. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  219. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  220. package/dist/secrets/routes.d.ts +6 -6
  221. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  222. package/dist/server/email.d.ts +1 -0
  223. package/dist/server/email.d.ts.map +1 -1
  224. package/dist/server/email.js +29 -1
  225. package/dist/server/email.js.map +1 -1
  226. package/dist/server/transcribe-voice.d.ts +1 -1
  227. package/dist/styles/agent-native.css +23 -0
  228. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  229. package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
  230. package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  231. package/dist/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  232. package/dist/templates/chat/app/routes/settings.tsx +2 -0
  233. package/dist/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  234. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  235. package/dist/templates/default/app/routes/settings.tsx +2 -0
  236. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  237. package/dist/vite/client.d.ts.map +1 -1
  238. package/dist/vite/client.js +68 -6
  239. package/dist/vite/client.js.map +1 -1
  240. package/package.json +2 -2
  241. package/src/a2a/client.ts +4 -0
  242. package/src/agent/production-agent.ts +1 -0
  243. package/src/client/AssistantChat.tsx +11 -50
  244. package/src/client/ErrorBoundary.tsx +25 -19
  245. package/src/client/agent-page/AgentTabFrame.tsx +1 -1
  246. package/src/client/agent-page/AgentTabsPage.tsx +23 -0
  247. package/src/client/components/ui/message-scroller.tsx +1 -9
  248. package/src/client/resources/ResourceTree.tsx +3 -3
  249. package/src/client/resources/ResourcesPanel.tsx +64 -60
  250. package/src/client/settings/AccountSettingsCard.tsx +228 -0
  251. package/src/client/settings/SecretsSection.tsx +7 -5
  252. package/src/client/settings/SettingsPanel.tsx +67 -244
  253. package/src/client/settings/SettingsTabsPage.tsx +88 -21
  254. package/src/client/settings/agent-settings-search.ts +0 -2
  255. package/src/client/settings/index.ts +7 -0
  256. package/src/client/vite-dev-recovery-script.ts +18 -1
  257. package/src/db/client.ts +65 -15
  258. package/src/db/index.ts +2 -0
  259. package/src/ingestion/figma-node-to-html.ts +20 -99
  260. package/src/ingestion/figma-paint-math.ts +371 -0
  261. package/src/ingestion/index.ts +20 -0
  262. package/src/localization/default-messages.ts +1 -0
  263. package/src/server/email.ts +33 -1
  264. package/src/styles/agent-native.css +23 -0
  265. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +28 -0
  266. package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
  267. package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -1
  268. package/src/templates/chat/app/hooks/use-navigation-state.ts +0 -15
  269. package/src/templates/chat/app/routes/settings.tsx +2 -0
  270. package/src/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  271. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +28 -0
  272. package/src/templates/default/app/routes/settings.tsx +2 -0
  273. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +28 -0
  274. package/src/vite/client.ts +76 -8
@@ -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"}
@@ -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"]}
@@ -13,6 +13,7 @@ declare const messages: {
13
13
  };
14
14
  settings: {
15
15
  title: string;
16
+ pageTitle: string;
16
17
  description: string;
17
18
  languageTitle: string;
18
19
  languageDescription: string;
@@ -1 +1 @@
1
- {"version":3,"file":"default-messages.d.ts","sourceRoot":"","sources":["../../src/localization/default-messages.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,QAAQ;IACZ,IAAI;QACF,aAAa;QACb,mBAAmB;QACnB,KAAK;QACL,KAAK;QACL,eAAe;QACf,aAAa;QACb,SAAS;QACT,eAAe;QACf,UAAU;QACV,gBAAgB;;IAElB,QAAQ;QACN,KAAK;QACL,WAAW;QACX,aAAa;QACb,mBAAmB;QAEnB,aAAa;QACb,UAAU;QACV,gBAAgB;QAEhB,iBAAiB;QACjB,cAAc;QACd,oBAAoB;QACpB,gBAAgB;QAChB,oBAAoB;QACpB,QAAQ;QACR,mBAAmB;QACnB,yBAAyB;QAEzB,kBAAkB;QAClB,YAAY;QACZ,kBAAkB;QAClB,cAAc;QACd,gBAAgB;QAChB,mBAAmB;QACnB,iBAAiB;QACjB,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,sBAAsB;QACtB,sBAAsB;QAEtB,WAAW;QACX,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,eAAe;;IAEjB,cAAc;QACZ,QAAQ;QACR,eAAe;QACf,UAAU;YACR,SAAS;YACT,eAAe;YACf,eAAe;;QAEjB,KAAK;YACH,KAAK;YACL,WAAW;;QAEb,YAAY;YACV,KAAK;YACL,WAAW;;QAGb,MAAM;YACJ,KAAK;YACL,WAAW;;QAGb,MAAM;YACJ,KAAK;YACL,WAAW;;QAEb,MAAM;YACJ,KAAK;YACL,WAAW;;QAGb,SAAS;YACP,KAAK;YACL,WAAW;;QAGb,YAAY;YACV,KAAK;YACL,WAAW;;;IAGf,YAAY;QACV,KAAK;QACL,WAAW;QACX,WAAW;QACX,YAAY;QACZ,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAClB,WAAW;QACX,kBAAkB;QAClB,uBAAuB;QACvB,6BAA6B;QAE7B,aAAa;QACb,gBAAgB;QAChB,cAAc;QACd,oBAAoB;QAEpB,OAAO;QACP,SAAS;QACT,UAAU;QACV,UAAU;QACV,SAAS;QACT,WAAW;QACX,WAAW;QACX,eAAe;QACf,iBAAiB;QAEjB,gBAAgB;QAChB,SAAS;QACT,MAAM;QACN,SAAS;QACT,GAAG;QACH,QAAQ;QACR,QAAQ;QACR,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,qBAAqB;QACrB,uBAAuB;QACvB,iBAAiB;QACjB,WAAW;QACX,kBAAkB;QAElB,yBAAyB;;IAG3B,QAAQ;QACN,GAAG;YACD,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,OAAO;YACP,KAAK;YACL,YAAY;YACZ,MAAM;YACN,SAAS;YACT,SAAS;YACT,YAAY;YACZ,UAAU;YACV,SAAS;YACT,WAAW;YACX,QAAQ;YACR,KAAK;YACL,MAAM;YACN,WAAW;YACX,QAAQ;YACR,IAAI;YACJ,UAAU;YACV,UAAU;YACV,qBAAqB;;QAEvB,OAAO;YACL,qBAAqB;YACrB,qBAAqB;YACrB,uBAAuB;YACvB,KAAK;YACL,OAAO;YACP,eAAe;YACf,UAAU;YACV,YAAY;YACZ,WAAW;YACX,SAAS;YACT,cAAc;YAEd,kBAAkB;YAClB,oBAAoB;YACpB,kBAAkB;;QAEpB,KAAK;YACH,eAAe;YAEf,4BAA4B;YAE5B,eAAe;YACf,aAAa;YACb,SAAS;YACT,oBAAoB;YACpB,cAAc;YACd,WAAW;YACX,WAAW;YACX,SAAS;YACT,SAAS;YACT,iBAAiB;YACjB,kBAAkB;YAClB,IAAI;YACJ,IAAI;YACJ,UAAU;YACV,cAAc;YACd,oBAAoB;YACpB,uBAAuB;YAEvB,YAAY;YACZ,uBAAuB;YAEvB,UAAU;YACV,MAAM;YACN,iBAAiB;YAEjB,uBAAuB;YAEvB,iBAAiB;YACjB,cAAc;YACd,gBAAgB;YAChB,IAAI;YACJ,MAAM;YACN,MAAM;YACN,WAAW;YACX,mBAAmB;YACnB,gBAAgB;YAChB,kBAAkB;YAClB,sBAAsB;YACtB,4BAA4B;YAE5B,cAAc;YAEd,kBAAkB;YAClB,uBAAuB;YACvB,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,0BAA0B;YAE1B,WAAW;YACX,QAAQ;YACR,iBAAiB;YACjB,iBAAiB;YAEjB,MAAM;YACN,iBAAiB;YACjB,UAAU;YACV,aAAa;YACb,OAAO;YACP,yBAAyB;YAEzB,iBAAiB;YAEjB,gBAAgB;YAChB,eAAe;YACf,YAAY;YACZ,gBAAgB;YAChB,iBAAiB;YACjB,4BAA4B;YAE5B,OAAO;YACP,YAAY;YACZ,OAAO;YACP,YAAY;YACZ,gBAAgB;YAChB,OAAO;YACP,kBAAkB;YAClB,iBAAiB;YACjB,yBAAyB;YAEzB,qBAAqB;YAErB,QAAQ;YACR,WAAW;YACX,iBAAiB;YACjB,WAAW;YACX,IAAI;YACJ,sBAAsB;YACtB,aAAa;YACb,cAAc;YACd,eAAe;YACf,MAAM;YACN,MAAM;YACN,MAAM;YACN,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,gBAAgB;YAEhB,eAAe;YACf,aAAa;YACb,cAAc;;;IAGlB,UAAU;QACR,UAAU;QACV,qBAAqB;QACrB,0BAA0B;QAE1B,eAAe;QACf,QAAQ;QACR,IAAI;QACJ,eAAe;QACf,GAAG;QACH,aAAa;QACb,SAAS;QACT,OAAO;QACP,WAAW;QACX,YAAY;QACZ,eAAe;QACf,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,cAAc;QACd,UAAU;QACV,QAAQ;QACR,cAAc;QACd,YAAY;QACZ,SAAS;QACT,kBAAkB;QAClB,6BAA6B;QAE7B,WAAW;QACX,YAAY;QACZ,QAAQ;QACR,aAAa;QACb,mBAAmB;QACnB,SAAS;QACT,gBAAgB;QAEhB,gBAAgB;QAChB,iBAAiB;QACjB,mBAAmB;QACnB,UAAU;QACV,qBAAqB;QACrB,oBAAoB;QACpB,qBAAqB;QACrB,cAAc;YACZ,MAAM;YACN,KAAK;YACL,KAAK;YACL,OAAO;;QAET,SAAS;YACP,gBAAgB;YAChB,WAAW;YACX,iBAAiB;YAEjB,UAAU;YACV,gBAAgB;YAEhB,cAAc;YACd,YAAY;YACZ,kBAAkB;YAClB,KAAK;YACL,aAAa;YACb,kBAAkB;YAClB,QAAQ;YACR,QAAQ;YACR,GAAG;YACH,aAAa;YACb,QAAQ;gBACN,UAAU;gBACV,iBAAiB;gBACjB,sBAAsB;gBAEtB,QAAQ;gBACR,YAAY;gBACZ,SAAS;oBACP,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;oBACF,EAAE;;gBAEJ,YAAY;gBACZ,kBAAkB;oBAChB,OAAO;oBACP,QAAQ;oBACR,IAAI;;gBAEN,UAAU;gBACV,kBAAkB;gBAElB,iBAAiB;oBACf,KAAK;oBACL,KAAK;oBACL,KAAK;oBACL,IAAI;oBACJ,KAAK;oBACL,KAAK;oBACL,GAAG;oBACH,MAAM;oBACN,IAAI;oBACJ,OAAO;;;YAGX,MAAM;gBACJ,UAAU;gBACV,SAAS;gBACT,QAAQ;gBACR,OAAO;gBACP,KAAK;gBACL,MAAM;;YAER,MAAM;gBACJ,WAAW;gBAEX,cAAc;gBACd,aAAa;gBACb,mBAAmB;gBACnB,kBAAkB;gBAElB,gBAAgB;gBAChB,WAAW;;;;IAIjB,WAAW;QACT,UAAU;YACR,aAAa;YACb,aAAa;YACb,QAAQ;YACR,uBAAuB;YACvB,YAAY;YACZ,gBAAgB;YAChB,YAAY;YACZ,QAAQ;YACR,MAAM;YACN,QAAQ;YACR,KAAK;YACL,YAAY;YACZ,cAAc;;QAEhB,UAAU;YACR,QAAQ;YACR,SAAS;YACT,IAAI;;QAEN,MAAM;QACN,YAAY;QACZ,IAAI;QACJ,eAAe;QACf,UAAU;QACV,cAAc;QACd,KAAK;QACL,iBAAiB;QAEjB,cAAc;QACd,wBAAwB;QAExB,IAAI;QACJ,OAAO;QACP,cAAc;QACd,kBAAkB;QAClB,SAAS;QACT,UAAU;QACV,qBAAqB;QAErB,YAAY;QACZ,YAAY;QACZ,kBAAkB;QAClB,wBAAwB;QAExB,aAAa;;IAEf,IAAI;QACF,KAAK;QACL,SAAS;QACT,eAAe;QAEf,cAAc;QACd,gCAAgC;QAEhC,oBAAoB;QAEpB,sBAAsB;QACtB,OAAO;QACP,kBAAkB;QAClB,sBAAsB;QACtB,4BAA4B;QAE5B,mBAAmB;QACnB,yBAAyB;QACzB,uBAAuB;QACvB,oBAAoB;QACpB,kBAAkB;QAElB,eAAe;QAEf,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,MAAM;QACN,QAAQ;QACR,OAAO;QACP,OAAO;QACP,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,oBAAoB;QACpB,qBAAqB;QACrB,gBAAgB;QAChB,kCAAkC;QAElC,sBAAsB;QAEtB,qBAAqB;QACrB,2BAA2B;QAC3B,sBAAsB;QACtB,gBAAgB;QAChB,uBAAuB;QACvB,oBAAoB;QACpB,0BAA0B;QAE1B,MAAM;QACN,gBAAgB;QAChB,YAAY;QACZ,QAAQ;QACR,oBAAoB;QACpB,gBAAgB;QAChB,sBAAsB;QACtB,yBAAyB;QACzB,qBAAqB;QACrB,2BAA2B;QAE3B,iBAAiB;QACjB,sBAAsB;QACtB,SAAS;QACT,eAAe;QACf,cAAc;QACd,UAAU;QACV,qBAAqB;QACrB,aAAa;QACb,qBAAqB;QACrB,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,wBAAwB;;IAE1B,KAAK;QACH,iBAAiB;QACjB,aAAa;QACb,KAAK;QACL,KAAK;QACL,YAAY;QACZ,IAAI;QACJ,MAAM;QACN,KAAK;QACL,IAAI;QACJ,aAAa;QACb,SAAS;QACT,gBAAgB;QAChB,YAAY;QACZ,gBAAgB;QAChB,SAAS;QACT,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,kBAAkB;QAClB,YAAY;QACZ,uBAAuB;QACvB,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,iBAAiB;QACjB,KAAK;QACL,gBAAgB;;IAElB,QAAQ;QACN,IAAI;QACJ,SAAS;QACT,aAAa;QACb,eAAe;QACf,aAAa;QACb,eAAe;QACf,UAAU;QACV,YAAY;QACZ,aAAa;QACb,cAAc;QACd,oBAAoB;QACpB,iBAAiB;QACjB,mBAAmB;QACnB,gBAAgB;QAChB,gBAAgB;QAEhB,IAAI;QACJ,OAAO;QACP,OAAO;QACP,aAAa;QACb,UAAU;QACV,YAAY;QACZ,aAAa;QACb,cAAc;QACd,eAAe;QACf,cAAc;QACd,eAAe;QACf,YAAY;QACZ,aAAa;QACb,WAAW;QACX,YAAY;;IAEd,YAAY;QACV,cAAc;QAEd,cAAc;QACd,WAAW;QACX,KAAK;QACL,mBAAmB;QAEnB,QAAQ;QAER,YAAY;QACZ,kBAAkB;QAElB,iBAAiB;QACjB,uBAAuB;QAEvB,eAAe;QACf,eAAe;QACf,mBAAmB;QACnB,yBAAyB;QAEzB,aAAa;QACb,aAAa;QACb,KAAK;;IAEP,UAAU;QACR,YAAY;QACZ,kBAAkB;QAElB,cAAc;QACd,iBAAiB;QACjB,KAAK;QACL,WAAW;QACX,UAAU;QACV,YAAY;QACZ,iBAAiB;QACjB,gBAAgB;QAChB,eAAe;QACf,sBAAsB;QACtB,kBAAkB;QAClB,UAAU;QACV,gBAAgB;QAChB,kBAAkB;QAClB,SAAS;QACT,UAAU;QACV,cAAc;QACd,YAAY;QACZ,oBAAoB;QAEpB,cAAc;QACd,cAAc;QACd,qBAAqB;QAErB,2BAA2B;QAC3B,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,YAAY;QACZ,oBAAoB;QACpB,uBAAuB;QACvB,wBAAwB;QACxB,yBAAyB;QACzB,4BAA4B;QAE5B,SAAS;QACT,OAAO;QACP,kBAAkB;QAClB,cAAc;QACd,oBAAoB;QACpB,yBAAyB;QAEzB,iBAAiB;QACjB,sBAAsB;QAEtB,aAAa;QACb,IAAI;QACJ,aAAa;QACb,MAAM;QACN,IAAI;QACJ,MAAM;QACN,WAAW;QACX,SAAS;QACT,aAAa;QAEb,mBAAmB;QACnB,qBAAqB;QAErB,SAAS;QACT,gBAAgB;QAChB,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,gBAAgB;QAChB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,KAAK;;IAEP,GAAG;QACD,WAAW;QACX,iBAAiB;QAEjB,cAAc;QACd,iBAAiB;QACjB,QAAQ;QACR,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,gBAAgB;QAChB,YAAY;QACZ,kBAAkB;QAClB,OAAO;QACP,kBAAkB;QAClB,SAAS;QACT,MAAM;QACN,cAAc;QACd,gBAAgB;QAChB,uBAAuB;QACvB,kBAAkB;QAClB,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,kBAAkB;QAClB,wBAAwB;QAExB,aAAa;QAEb,cAAc;QAEd,IAAI;QACJ,cAAc;QACd,GAAG;QACH,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,aAAa;QACb,OAAO;QACP,IAAI;QACJ,MAAM;QACN,OAAO;QACP,SAAS;QACT,eAAe;QACf,iBAAiB;QACjB,UAAU;QACV,UAAU;QACV,YAAY;QACZ,MAAM;QACN,MAAM;QACN,IAAI;QACJ,OAAO;;IAET,YAAY;QACV,UAAU;QACV,cAAc;QACd,aAAa;QAEb,MAAM;QACN,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,IAAI;QACJ,mBAAmB;QACnB,sBAAsB;QAEtB,OAAO;QACP,KAAK;QACL,kBAAkB;QAClB,uBAAuB;QACvB,eAAe;QACf,OAAO;QACP,IAAI;QACJ,aAAa;QACb,eAAe;QAEf,kBAAkB;QAClB,gBAAgB;QAChB,2BAA2B;QAC3B,cAAc;QACd,kBAAkB;QAElB,eAAe;;IAGjB,eAAe;QACb,SAAS;QACT,eAAe;QACf,KAAK;QACL,WAAW;QACX,iBAAiB;QACjB,UAAU;QACV,SAAS;QACT,SAAS;QACT,SAAS;QACT,OAAO;QACP,gBAAgB;QAChB,WAAW;QACX,iBAAiB;QACjB,6BAA6B;QAE7B,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;QACX,cAAc;QACd,uBAAuB;QAEvB,qBAAqB;QAErB,iBAAiB;QAEjB,WAAW;QAEX,QAAQ;QACR,YAAY;QACZ,QAAQ;QACR,YAAY;QACZ,kBAAkB;QAClB,UAAU;QACV,GAAG;QACH,gBAAgB;QAChB,OAAO;QACP,qBAAqB;QACrB,cAAc;QACd,sBAAsB;QACtB,kBAAkB;QAClB,aAAa;QACb,SAAS;QACT,IAAI;QACJ,kBAAkB;QAClB,oBAAoB;QACpB,MAAM;QACN,SAAS;QACT,OAAO;YACL,QAAQ;gBACN,WAAW;gBACX,OAAO;;YAGT,MAAM;gBACJ,WAAW;gBACX,OAAO;;YAET,MAAM;gBACJ,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,OAAO;gBACL,WAAW;gBACX,OAAO;gBAEP,SAAS;;YAGX,OAAO;gBACL,WAAW;gBACX,OAAO;;YAET,MAAM;gBACJ,WAAW;gBACX,OAAO;;YAET,QAAQ;gBACN,WAAW;gBACX,OAAO;;YAET,IAAI;gBACF,WAAW;gBACX,OAAO;;YAET,MAAM;gBACJ,WAAW;gBACX,OAAO;;YAET,SAAS;gBACP,WAAW;gBACX,OAAO;gBAEP,SAAS;;YAGX,UAAU;gBACR,WAAW;gBACX,OAAO;gBAEP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBAEX,OAAO;gBACP,SAAS;;YAGX,KAAK;gBACH,WAAW;gBAEX,OAAO;gBACP,SAAS;;YAGX,KAAK;gBACH,WAAW;gBACX,OAAO;gBAEP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBAEX,OAAO;gBACP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBAEX,OAAO;gBAEP,SAAS;;YAGX,KAAK;gBACH,WAAW;gBAEX,OAAO;gBACP,SAAS;;YAGX,KAAK;gBACH,WAAW;gBAEX,OAAO;gBACP,SAAS;;YAGX,OAAO;gBACL,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,QAAQ;gBACN,WAAW;gBACX,OAAO;gBAEP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,OAAO;gBACL,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,GAAG;gBACD,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,OAAO;gBACL,WAAW;gBACX,OAAO;gBACP,SAAS;;YAGX,MAAM;gBACJ,WAAW;gBACX,OAAO;gBACP,SAAS;;;QAIb,IAAI;YACF,IAAI;YACJ,OAAO;YACP,KAAK;;QAEP,MAAM;YACJ,IAAI;YACJ,aAAa;YACb,gBAAgB;YAChB,QAAQ;YACR,aAAa;YACb,UAAU;;;IAGd,aAAa;QACX,MAAM;QACN,eAAe;QACf,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;QACT,UAAU;QACV,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,GAAG;QACH,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,WAAW;QACX,UAAU;QACV,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,MAAM;QACN,UAAU;QACV,QAAQ;QACR,gBAAgB;QAChB,QAAQ;QACR,aAAa;QACb,KAAK;QACL,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,iBAAiB;QACjB,OAAO;QACP,KAAK;QACL,OAAO;QACP,OAAO;QACP,MAAM;QACN,KAAK;QACL,aAAa;QACb,UAAU;QACV,WAAW;QACX,YAAY;QACZ,UAAU;;IAEZ,KAAK;QACH,YAAY;QACZ,cAAc;QACd,aAAa;QACb,eAAe;QAEf,WAAW;QACX,MAAM;;CAET,CAAC;eAEa,QAAQ"}
1
+ {"version":3,"file":"default-messages.d.ts","sourceRoot":"","sources":["../../src/localization/default-messages.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ const messages = {
18
18
  },
19
19
  settings: {
20
20
  title: "Settings",
21
+ pageTitle: "Settings",
21
22
  description: "Language and workspace preferences for this app.",
22
23
  languageTitle: "Language",
23
24
  languageDescription: "Choose the interface language. This preference is saved for your account.",