@cueframe/kernel 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/LICENSE +661 -0
  2. package/dist/_members/account-model/testing/conversationStoreContract.d.ts +1 -1
  3. package/dist/_members/authoring/providers/resourceApi.d.ts +1 -1
  4. package/dist/_members/authoring/transpileComponent.d.ts +1 -1
  5. package/dist/_members/cloud-import/CloudImportService.d.ts +35 -0
  6. package/dist/_members/cloud-import/ImportProvider.d.ts +73 -0
  7. package/dist/_members/cloud-import/MediaItemPreprocessor.d.ts +27 -0
  8. package/dist/_members/cloud-import/cloudConfig.d.ts +23 -0
  9. package/dist/_members/cloud-import/index.d.ts +9 -0
  10. package/dist/_members/cloud-import/multipartUpload.d.ts +12 -0
  11. package/dist/_members/composition/ops/compositionOps.d.ts +2 -1
  12. package/dist/_members/composition/ops/types.d.ts +1 -1
  13. package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
  14. package/dist/_members/composition/projection/index.d.ts +2 -0
  15. package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
  16. package/dist/_members/composition/timeline/placement.d.ts +1 -1
  17. package/dist/_members/composition/validators/composition.d.ts +43 -26
  18. package/dist/_members/composition/validators/render.d.ts +32 -0
  19. package/dist/_members/composition-ops/index.d.ts +1 -1
  20. package/dist/_members/composition-ops/opRecorder.d.ts +1 -1
  21. package/dist/_members/convex-api/api.d.ts +5 -0
  22. package/dist/_members/convex-api/dataModel.d.ts +6 -0
  23. package/dist/_members/core/render/compositionRender.d.ts +17 -1
  24. package/dist/_members/core/render/exportSettings.d.ts +1 -1
  25. package/dist/_members/core/render/types.d.ts +31 -0
  26. package/dist/_members/mcp/curation.d.ts +1 -1
  27. package/dist/_members/plane/conformance.d.ts +1 -1
  28. package/dist/_members/render-harness/localRender.d.ts +1 -1
  29. package/dist/animate.js +828 -79187
  30. package/dist/authoring/build-tools.js +8 -11
  31. package/dist/authoring/context.js +5 -5
  32. package/dist/authoring/models.js +1 -2
  33. package/dist/authoring/prompts.js +1 -1
  34. package/dist/authoring/tools.js +7 -7
  35. package/dist/authoring/transpileComponent.js +3 -2220
  36. package/dist/authoring.js +30 -30
  37. package/dist/brand-derivation.js +1 -1
  38. package/dist/chunk-6IU2UQI5.js +107 -0
  39. package/dist/{chunk-5I7VDCAC.js → chunk-7FO3ZJ43.js} +4 -1
  40. package/dist/{chunk-N67PDTKQ.js → chunk-ABL557OT.js} +1 -1
  41. package/dist/{chunk-MC5DLSEV.js → chunk-AP6ZIVAV.js} +15 -15
  42. package/dist/{chunk-QLAQHR3L.js → chunk-AQBREB5O.js} +1 -1
  43. package/dist/{chunk-DSNG6WLU.js → chunk-AYVJXDLB.js} +1 -4
  44. package/dist/{chunk-6CMVBTTP.js → chunk-DK2ODBNT.js} +19 -9
  45. package/dist/chunk-DSMLHYJ4.js +82 -0
  46. package/dist/{chunk-BRKJKB33.js → chunk-FYZVH3MC.js} +1 -1
  47. package/dist/{chunk-MVEE6HEC.js → chunk-GA23TRNR.js} +5 -7
  48. package/dist/chunk-HCCBDJLW.js +68 -0
  49. package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
  50. package/dist/{chunk-OIRUO5P7.js → chunk-JJ6XD7NG.js} +152 -2
  51. package/dist/{_members/primitives/chunk-IDAL6G3Y.js → chunk-JQMPHKLU.js} +19 -27
  52. package/dist/{chunk-G3PBH53P.js → chunk-MBCXCJOE.js} +1 -1
  53. package/dist/{chunk-UEI3NLNK.js → chunk-MHOQTPOB.js} +1 -4
  54. package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
  55. package/dist/{chunk-WZTTZHNR.js → chunk-OLFOPQCA.js} +12 -9
  56. package/dist/{chunk-P43IE4WB.js → chunk-P727GZVO.js} +2 -4
  57. package/dist/{chunk-52AHXNKM.js → chunk-PDYO3DOJ.js} +5 -5
  58. package/dist/{chunk-S3P5BFFL.js → chunk-PMY24FUD.js} +2 -4
  59. package/dist/{chunk-ATAF24QG.js → chunk-PODIYN2K.js} +10 -3
  60. package/dist/chunk-RF7U3SCL.js +606 -0
  61. package/dist/{chunk-JD77Y2WM.js → chunk-SW336CJP.js} +1 -4
  62. package/dist/{chunk-TULRCY6U.js → chunk-TOJEXFXL.js} +1 -1
  63. package/dist/{chunk-ELLSET2N.js → chunk-UHGSZZDI.js} +3 -6
  64. package/dist/{chunk-M3I5LMAB.js → chunk-UY4SWJVE.js} +1 -1
  65. package/dist/{chunk-6QJ3V3VS.js → chunk-YX2GSJK7.js} +1 -1
  66. package/dist/chunk-ZT7MHRQU.js +104 -0
  67. package/dist/{chunk-NV4I6GJV.js → chunk-ZWMV6DD2.js} +27 -4
  68. package/dist/cloud-import/multipart.d.ts +1 -0
  69. package/dist/cloud-import/multipart.js +8 -0
  70. package/dist/cloud-import.d.ts +1 -0
  71. package/dist/cloud-import.js +234 -0
  72. package/dist/compose/renderer.js +19 -22
  73. package/dist/compose.js +19 -22
  74. package/dist/composition/graphics-plan.js +3 -3
  75. package/dist/composition/ops.js +4 -4
  76. package/dist/composition/primitive-catalog.js +1 -1
  77. package/dist/composition/projection.js +21 -5
  78. package/dist/composition/validators.js +6 -4
  79. package/dist/composition-ops.js +15 -13
  80. package/dist/composition.js +26 -8
  81. package/dist/{context-CEAKQ5T7.js → context-YWUZDG5X.js} +5 -5
  82. package/dist/convex-api/dataModel.d.ts +1 -0
  83. package/dist/convex-api/dataModel.js +0 -0
  84. package/dist/convex-api.d.ts +1 -0
  85. package/dist/convex-api.js +8 -0
  86. package/dist/core/render.js +3 -3
  87. package/dist/core/select.js +2 -2
  88. package/dist/core.js +3 -3
  89. package/dist/errors.js +1 -1
  90. package/dist/mcp/adapter.js +2 -5
  91. package/dist/mcp/server.js +1 -2
  92. package/dist/mcp.js +2 -95
  93. package/dist/media-model/media-kind.js +9 -98
  94. package/dist/media-model/testing.js +1071 -718
  95. package/dist/nle-export/server.js +328 -130
  96. package/dist/nle-export/xml.js +5 -22799
  97. package/dist/nle-export.js +20 -22
  98. package/dist/primitives/backgrounds.js +2 -3
  99. package/dist/primitives/captions.js +4 -243
  100. package/dist/primitives/effects.js +2 -3
  101. package/dist/primitives/hero-text.js +2 -3
  102. package/dist/primitives/layouts.js +2 -3
  103. package/dist/primitives/lib/index.js +8 -10
  104. package/dist/primitives/lib/preview.js +1 -2
  105. package/dist/primitives/lib/schema.js +1 -2
  106. package/dist/primitives/lib/text/fitText.js +1 -2
  107. package/dist/primitives/lib.js +8 -10
  108. package/dist/primitives/scenes.js +1 -2
  109. package/dist/primitives/text.js +2 -3
  110. package/dist/primitives/ui-blocks.js +4 -5
  111. package/dist/primitives.js +19 -21
  112. package/package.json +125 -16
  113. package/dist/TextureLoader-UQOFUSAP.js +0 -422
  114. package/dist/VideoTexture-AQWSPIJG.js +0 -62
  115. package/dist/_members/account-model/index.js +0 -4
  116. package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
  117. package/dist/_members/account-model/testing/index.js +0 -7
  118. package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
  119. package/dist/_members/account-model/types/index.js +0 -1
  120. package/dist/_members/account-model/validators/contextFile.js +0 -18
  121. package/dist/_members/account-model/validators/conversation.js +0 -95
  122. package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
  123. package/dist/_members/account-model/validators/index.js +0 -7
  124. package/dist/_members/account-model/validators/sessionToken.js +0 -49
  125. package/dist/_members/account-model/validators/uploadToken.js +0 -16
  126. package/dist/_members/account-model/validators/userSettings.js +0 -12
  127. package/dist/_members/account-model/validators/workingComposition.js +0 -20
  128. package/dist/_members/brand-derivation/constants.js +0 -20
  129. package/dist/_members/brand-derivation/contrastSafe.js +0 -114
  130. package/dist/_members/brand-derivation/index.js +0 -1
  131. package/dist/_members/composition/audio/audioMix.js +0 -61
  132. package/dist/_members/composition/audio/index.js +0 -5
  133. package/dist/_members/composition/audio/mixStaging.js +0 -195
  134. package/dist/_members/composition/audio/musicPack.generated.js +0 -136
  135. package/dist/_members/composition/audio/musicPack.js +0 -36
  136. package/dist/_members/composition/audio/pack.generated.js +0 -603
  137. package/dist/_members/composition/audio/pack.js +0 -48
  138. package/dist/_members/composition/audio/palette.js +0 -134
  139. package/dist/_members/composition/autozoom/index.js +0 -83
  140. package/dist/_members/composition/brand-kit.js +0 -45
  141. package/dist/_members/composition/brief/contract.js +0 -209
  142. package/dist/_members/composition/color-grade.js +0 -80
  143. package/dist/_members/composition/depth.js +0 -8
  144. package/dist/_members/composition/fixtures/index.js +0 -143
  145. package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
  146. package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
  147. package/dist/_members/composition/fonts.js +0 -162
  148. package/dist/_members/composition/graphics-plan/compile.js +0 -221
  149. package/dist/_members/composition/graphics-plan/index.js +0 -10
  150. package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
  151. package/dist/_members/composition/graphics-plan/motion.js +0 -66
  152. package/dist/_members/composition/graphics-plan/schemas.js +0 -261
  153. package/dist/_members/composition/graphics-plan/solve.js +0 -145
  154. package/dist/_members/composition/index.js +0 -5
  155. package/dist/_members/composition/invariants/clipPlacement.js +0 -69
  156. package/dist/_members/composition/invariants/composition.js +0 -28
  157. package/dist/_members/composition/invariants/errors.js +0 -10
  158. package/dist/_members/composition/invariants/etag.js +0 -38
  159. package/dist/_members/composition/invariants/ids.js +0 -33
  160. package/dist/_members/composition/invariants/index.js +0 -9
  161. package/dist/_members/composition/invariants/keyframes.js +0 -45
  162. package/dist/_members/composition/invariants/markers.js +0 -29
  163. package/dist/_members/composition/invariants/time.js +0 -20
  164. package/dist/_members/composition/invariants/tracks.js +0 -304
  165. package/dist/_members/composition/ops/compositionOps.js +0 -1056
  166. package/dist/_members/composition/ops/headlessStore.js +0 -94
  167. package/dist/_members/composition/ops/index.js +0 -4
  168. package/dist/_members/composition/ops/selectors.js +0 -118
  169. package/dist/_members/composition/ops/timeline-word.js +0 -1
  170. package/dist/_members/composition/ops/transcript.js +0 -77
  171. package/dist/_members/composition/ops/types.js +0 -16
  172. package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
  173. package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
  174. package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
  175. package/dist/_members/composition/primitive-catalog/index.js +0 -46
  176. package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
  177. package/dist/_members/composition/primitive-catalog/projection.js +0 -164
  178. package/dist/_members/composition/primitive-catalog/types.js +0 -14
  179. package/dist/_members/composition/projection/behind-placement.js +0 -62
  180. package/dist/_members/composition/projection/brandKit.js +0 -482
  181. package/dist/_members/composition/projection/cardTokens.js +0 -209
  182. package/dist/_members/composition/projection/composition-floor.js +0 -582
  183. package/dist/_members/composition/projection/cropProjection.js +0 -257
  184. package/dist/_members/composition/projection/index.js +0 -7
  185. package/dist/_members/composition/projection/occlusion-budget.js +0 -104
  186. package/dist/_members/composition/projection/safe-zones.js +0 -99
  187. package/dist/_members/composition/reframe/aspectLoss.js +0 -115
  188. package/dist/_members/composition/reframe/coverage.js +0 -62
  189. package/dist/_members/composition/reframe/derive.js +0 -73
  190. package/dist/_members/composition/reframe/index.js +0 -109
  191. package/dist/_members/composition/reframe/kenBurns.js +0 -64
  192. package/dist/_members/composition/reframe/shotScale.js +0 -176
  193. package/dist/_members/composition/reframe/trajectory.js +0 -124
  194. package/dist/_members/composition/timeline/compound.js +0 -134
  195. package/dist/_members/composition/timeline/index.js +0 -9
  196. package/dist/_members/composition/timeline/intent.js +0 -228
  197. package/dist/_members/composition/timeline/keyframes.js +0 -121
  198. package/dist/_members/composition/timeline/link.js +0 -59
  199. package/dist/_members/composition/timeline/occupancy.js +0 -36
  200. package/dist/_members/composition/timeline/placement.js +0 -74
  201. package/dist/_members/composition/timeline/plan.js +0 -31
  202. package/dist/_members/composition/timeline/resolve.js +0 -170
  203. package/dist/_members/composition/timeline/trims.js +0 -278
  204. package/dist/_members/composition/types/index.js +0 -1
  205. package/dist/_members/composition/validators/brandKit.js +0 -295
  206. package/dist/_members/composition/validators/composePlan.js +0 -113
  207. package/dist/_members/composition/validators/composition.js +0 -703
  208. package/dist/_members/composition/validators/font.js +0 -34
  209. package/dist/_members/composition/validators/graphicKinds.js +0 -30
  210. package/dist/_members/composition/validators/index.js +0 -9
  211. package/dist/_members/composition/validators/project.js +0 -29
  212. package/dist/_members/composition/validators/registry.js +0 -41
  213. package/dist/_members/composition/validators/render.js +0 -139
  214. package/dist/_members/composition/validators/session.js +0 -37
  215. package/dist/_members/composition/validators/webhook.js +0 -72
  216. package/dist/_members/composition-ops/alphaLayers.js +0 -141
  217. package/dist/_members/composition-ops/index.js +0 -637
  218. package/dist/_members/composition-ops/materializeGrid.js +0 -99
  219. package/dist/_members/composition-ops/opRecorder.js +0 -196
  220. package/dist/_members/composition-ops/recordingStore.js +0 -14
  221. package/dist/_members/composition-ops/replaceRegion.js +0 -102
  222. package/dist/_members/composition-ops/testFixtures.js +0 -19
  223. package/dist/_members/core/index.js +0 -5
  224. package/dist/_members/core/render/bookends.js +0 -53
  225. package/dist/_members/core/render/captions.js +0 -127
  226. package/dist/_members/core/render/compositionRender.js +0 -1249
  227. package/dist/_members/core/render/deriveTrajectory.js +0 -889
  228. package/dist/_members/core/render/emphasis.js +0 -16
  229. package/dist/_members/core/render/eval/cropBox.js +0 -139
  230. package/dist/_members/core/render/eval/inclusion.js +0 -96
  231. package/dist/_members/core/render/eval/index.js +0 -146
  232. package/dist/_members/core/render/eval/metrics.js +0 -94
  233. package/dist/_members/core/render/exportSettings.js +0 -65
  234. package/dist/_members/core/render/index.js +0 -20
  235. package/dist/_members/core/render/mapFaceToPerson.js +0 -73
  236. package/dist/_members/core/render/types.js +0 -8
  237. package/dist/_members/core/render/vcam/cameraPath.js +0 -248
  238. package/dist/_members/core/render/vcam/constants.js +0 -115
  239. package/dist/_members/core/render/vcam/errorCodes.js +0 -39
  240. package/dist/_members/core/render/vcam/framing.js +0 -136
  241. package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
  242. package/dist/_members/core/render/vcam/shots.js +0 -53
  243. package/dist/_members/core/render/vcam/subjectSet.js +0 -388
  244. package/dist/_members/core/select/errorCodes.js +0 -38
  245. package/dist/_members/core/select/index.js +0 -26
  246. package/dist/_members/core/select/model.js +0 -18
  247. package/dist/_members/core/select/select.js +0 -244
  248. package/dist/_members/core/select/stabilize.js +0 -242
  249. package/dist/_members/core/types.js +0 -7
  250. package/dist/_members/errors/index.js +0 -1
  251. package/dist/_members/errors/registry.js +0 -560
  252. package/dist/_members/foundation/codes/index.js +0 -31
  253. package/dist/_members/foundation/index.js +0 -2
  254. package/dist/_members/foundation/primitives/index.js +0 -5
  255. package/dist/_members/mcp/adapter.js +0 -771
  256. package/dist/_members/mcp/burnedNames.js +0 -73
  257. package/dist/_members/mcp/core.js +0 -390
  258. package/dist/_members/mcp/curation.js +0 -792
  259. package/dist/_members/mcp/executor.js +0 -142
  260. package/dist/_members/mcp/format.js +0 -9
  261. package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
  262. package/dist/_members/mcp/generated/harness.js +0 -81
  263. package/dist/_members/mcp/generated/operations.js +0 -131
  264. package/dist/_members/mcp/index.js +0 -50
  265. package/dist/_members/mcp/internalLoopTools.js +0 -109
  266. package/dist/_members/mcp/prompts.js +0 -45
  267. package/dist/_members/mcp/resources.js +0 -166
  268. package/dist/_members/mcp/server.js +0 -340
  269. package/dist/_members/mcp/wait.js +0 -378
  270. package/dist/_members/mcp/x402Meta.js +0 -66
  271. package/dist/_members/media-model/api.js +0 -175
  272. package/dist/_members/media-model/index.js +0 -1
  273. package/dist/_members/media-model/media-kind.js +0 -116
  274. package/dist/_members/media-model/testing/index.js +0 -1
  275. package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
  276. package/dist/_members/media-model/transcriptSearch.js +0 -70
  277. package/dist/_members/media-model/transcriptSearchCases.json +0 -79
  278. package/dist/_members/nle-export/compact-timeline.js +0 -73
  279. package/dist/_members/nle-export/compact-timeline.js.map +0 -1
  280. package/dist/_members/nle-export/composition-to-input.js +0 -147
  281. package/dist/_members/nle-export/composition-to-input.js.map +0 -1
  282. package/dist/_members/nle-export/fcpxml.js +0 -159
  283. package/dist/_members/nle-export/fcpxml.js.map +0 -1
  284. package/dist/_members/nle-export/index.js +0 -12
  285. package/dist/_members/nle-export/index.js.map +0 -1
  286. package/dist/_members/nle-export/premiere.js +0 -161
  287. package/dist/_members/nle-export/premiere.js.map +0 -1
  288. package/dist/_members/nle-export/server/index.js +0 -2
  289. package/dist/_members/nle-export/server/index.js.map +0 -1
  290. package/dist/_members/nle-export/server/pack-zip.js +0 -38
  291. package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
  292. package/dist/_members/nle-export/srt.js +0 -50
  293. package/dist/_members/nle-export/srt.js.map +0 -1
  294. package/dist/_members/nle-export/types.js +0 -9
  295. package/dist/_members/nle-export/types.js.map +0 -1
  296. package/dist/_members/nle-export/xml/index.js +0 -11
  297. package/dist/_members/nle-export/xml/index.js.map +0 -1
  298. package/dist/_members/nle-export/xml-utils.js +0 -48
  299. package/dist/_members/nle-export/xml-utils.js.map +0 -1
  300. package/dist/_members/perception/activeSpeaker.js +0 -103
  301. package/dist/_members/perception/audioQuality.js +0 -76
  302. package/dist/_members/perception/energyBeat.js +0 -99
  303. package/dist/_members/perception/identityMatch.js +0 -91
  304. package/dist/_members/perception/index.js +0 -48
  305. package/dist/_members/perception/visualQuality.js +0 -95
  306. package/dist/_members/plane/conformance.js +0 -90
  307. package/dist/_members/plane/contract.js +0 -49
  308. package/dist/_members/plane/index.js +0 -16
  309. package/dist/_members/primitives/backgrounds/index.js +0 -32
  310. package/dist/_members/primitives/backgrounds/index.js.map +0 -1
  311. package/dist/_members/primitives/captions/index.js +0 -398
  312. package/dist/_members/primitives/captions/index.js.map +0 -1
  313. package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
  314. package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
  315. package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
  316. package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
  317. package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
  318. package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
  319. package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
  320. package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
  321. package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
  322. package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
  323. package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
  324. package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
  325. package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
  326. package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
  327. package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
  328. package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
  329. package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
  330. package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
  331. package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
  332. package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
  333. package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
  334. package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
  335. package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
  336. package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
  337. package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
  338. package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
  339. package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
  340. package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
  341. package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
  342. package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
  343. package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
  344. package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
  345. package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
  346. package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
  347. package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
  348. package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
  349. package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
  350. package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
  351. package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
  352. package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
  353. package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
  354. package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
  355. package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
  356. package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
  357. package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
  358. package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
  359. package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
  360. package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
  361. package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
  362. package/dist/_members/primitives/effects/index.js +0 -30
  363. package/dist/_members/primitives/effects/index.js.map +0 -1
  364. package/dist/_members/primitives/hero-text/index.js +0 -14
  365. package/dist/_members/primitives/hero-text/index.js.map +0 -1
  366. package/dist/_members/primitives/index.js +0 -64
  367. package/dist/_members/primitives/index.js.map +0 -1
  368. package/dist/_members/primitives/layouts/index.js +0 -24
  369. package/dist/_members/primitives/layouts/index.js.map +0 -1
  370. package/dist/_members/primitives/lib/easings.js +0 -26
  371. package/dist/_members/primitives/lib/easings.js.map +0 -1
  372. package/dist/_members/primitives/lib/index.js +0 -74
  373. package/dist/_members/primitives/lib/index.js.map +0 -1
  374. package/dist/_members/primitives/lib/palette.js +0 -72
  375. package/dist/_members/primitives/lib/palette.js.map +0 -1
  376. package/dist/_members/primitives/lib/preview.js +0 -8
  377. package/dist/_members/primitives/lib/preview.js.map +0 -1
  378. package/dist/_members/primitives/lib/schema.js +0 -12
  379. package/dist/_members/primitives/lib/schema.js.map +0 -1
  380. package/dist/_members/primitives/lib/seeded-random.js +0 -14
  381. package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
  382. package/dist/_members/primitives/lib/text/contrast.js +0 -12
  383. package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
  384. package/dist/_members/primitives/lib/text/fill.js +0 -8
  385. package/dist/_members/primitives/lib/text/fill.js.map +0 -1
  386. package/dist/_members/primitives/lib/text/fitText.js +0 -10
  387. package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
  388. package/dist/_members/primitives/lib/text/marker.js +0 -8
  389. package/dist/_members/primitives/lib/text/marker.js.map +0 -1
  390. package/dist/_members/primitives/lib/text/motion.js +0 -16
  391. package/dist/_members/primitives/lib/text/motion.js.map +0 -1
  392. package/dist/_members/primitives/lib/text/recolor.js +0 -8
  393. package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
  394. package/dist/_members/primitives/lib/text/spec.js +0 -1
  395. package/dist/_members/primitives/lib/text/spec.js.map +0 -1
  396. package/dist/_members/primitives/lib/text/stage.js +0 -8
  397. package/dist/_members/primitives/lib/text/stage.js.map +0 -1
  398. package/dist/_members/primitives/lib/text/typeface.js +0 -8
  399. package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
  400. package/dist/_members/primitives/lib/tokens.js +0 -24
  401. package/dist/_members/primitives/lib/tokens.js.map +0 -1
  402. package/dist/_members/primitives/lib/types.js +0 -1
  403. package/dist/_members/primitives/lib/types.js.map +0 -1
  404. package/dist/_members/primitives/params-required.json +0 -153
  405. package/dist/_members/primitives/scenes/index.js +0 -25
  406. package/dist/_members/primitives/scenes/index.js.map +0 -1
  407. package/dist/_members/primitives/subject-foreground/index.js +0 -30
  408. package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
  409. package/dist/_members/primitives/text/index.js +0 -57
  410. package/dist/_members/primitives/text/index.js.map +0 -1
  411. package/dist/_members/primitives/transitions/index.js +0 -67
  412. package/dist/_members/primitives/transitions/index.js.map +0 -1
  413. package/dist/_members/primitives/ui-blocks/index.js +0 -76
  414. package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
  415. package/dist/_members/primitives/version-map.json +0 -105
  416. package/dist/_members/primitives/workspace.js +0 -60
  417. package/dist/_members/primitives/workspace.js.map +0 -1
  418. package/dist/chunk-7GISRVON.js +0 -14176
  419. package/dist/chunk-DIBOJJMU.js +0 -16838
  420. package/dist/chunk-EAUSEGB7.js +0 -420
  421. package/dist/chunk-FUWJOVVK.js +0 -3633
  422. package/dist/chunk-G75E7YA4.js +0 -11883
  423. package/dist/chunk-JCZQT7K3.js +0 -3266
  424. package/dist/chunk-KF5ETMKB.js +0 -544
  425. package/dist/chunk-NDKERSXY.js +0 -1296
  426. package/dist/chunk-V43Y7IE4.js +0 -3621
  427. package/dist/chunk-VIVQHIGZ.js +0 -4319
  428. package/dist/chunk-YA3OR2KK.js +0 -249
  429. package/dist/hls-HD4C5G6W.js +0 -33000
  430. package/dist/token-RGFIT24D.js +0 -69
  431. package/dist/token-util-GPLSGYVO.js +0 -5
  432. package/dist/vision_bundle-5Y376MAR.js +0 -4084
@@ -1,482 +0,0 @@
1
- /**
2
- * BrandKit cascade — resolve a sparse BrandKit into a fully-materialized
3
- * ResolvedBrandKit by applying the derivation table from data-model.md
4
- * § BrandKit.
5
- *
6
- * Pure function. No I/O. Same input → same output.
7
- *
8
- * The wire BrandKit stays sparse on disk — only the tokens the user
9
- * explicitly set are persisted. The derivation table is what makes
10
- * `colors.textMuted = colorMix(text, background, 40%)` happen at
11
- * resolve time without forcing every kit to enumerate every token.
12
- *
13
- * Resolution always runs against a composition-format width so the
14
- * width-anchored derivations (spacing.base, sizing.fontSizeHeading,
15
- * etc.) get concrete pixel values. Callers that don't have a
16
- * Composition in scope pass the format's render width directly.
17
- *
18
- * Failure mode: never throws on missing tokens. Every derivation
19
- * either has a direct fallback (the primitive's
20
- * PrimitiveRegistryEntry.tokens[].fallback) or a width-anchored
21
- * default. The brand cascade's job is to NEVER crash the render —
22
- * "loud failures at boundaries" applies to BrandKit PUT-time
23
- * validation (rejecting invalid easing, etc.), not to render-time
24
- * resolution. See data-model.md § BrandKit "every declared token
25
- * carries a primitive-side fallback."
26
- *
27
- * Reserved (per data-model.md § Reserved → specializes): when a
28
- * BrandKit carries `specializes: parentKitId`, resolve() walks the
29
- * chain bottom-up before applying the derivation table. Today's
30
- * BrandKit shape does NOT carry `specializes`; reservation noted so
31
- * this function's signature stays compatible when the field lands.
32
- */
33
- import { deriveContrastSafe, clampToFloor, FLOORS } from "@cueframe/brand-derivation";
34
- /**
35
- * Default overlay-asset normalization values. The wire kit stays sparse; the
36
- * cascade fills these so downstream render/compose consume a concrete shape.
37
- * data-model.md § BrandKit only specs `logo: { src, alt? }` (no placement/
38
- * sizePct) and does NOT spec intro/outro/watermark at all — these defaults are
39
- * chosen here (corner anchor, subtle size, 1.5s card bumper, half-opacity mark).
40
- */
41
- const LOGO_DEFAULT_PLACEMENT = "br";
42
- const LOGO_DEFAULT_SIZE_PCT = 8;
43
- const INTRO_OUTRO_CARD_DEFAULT_MS = 1500;
44
- const WATERMARK_DEFAULT_OPACITY = 0.5;
45
- const WATERMARK_DEFAULT_PLACEMENT = "br";
46
- /**
47
- * Normalize an intro/outro bumper. A `card` with no `durationMs` defaults to
48
- * 1.5s; a `video`'s length governs its own duration, so no default is forced
49
- * (and a video without `src` carries through — fail-loud belongs at PUT time).
50
- */
51
- function resolveIntroOutro(io) {
52
- if (!io)
53
- return undefined;
54
- const durationMs = io.durationMs ?? (io.kind === "card" ? INTRO_OUTRO_CARD_DEFAULT_MS : undefined);
55
- return {
56
- kind: io.kind,
57
- ...(io.src != null ? { src: io.src } : {}),
58
- ...(io.title != null ? { title: io.title } : {}),
59
- ...(io.subtitle != null ? { subtitle: io.subtitle } : {}),
60
- ...(durationMs != null ? { durationMs } : {}),
61
- };
62
- }
63
- /**
64
- * Resolve a sparse BrandKit against a composition's render width.
65
- * The width drives the spacing + sizing derivations (font sizes
66
- * scale to the canvas, not absolute pixels).
67
- */
68
- export function resolveBrandKit(kit, compositionWidth) {
69
- // ── Colors ─────────────────────────────────────────────────────
70
- // deriveContrastSafe applies a FORWARD-ONLY APCA floor: a legible brand is
71
- // returned unchanged, a hostile one is clamped UP to the body floor over its
72
- // own background (never lowered). `safe.text` is the floor-safe body color;
73
- // captionFg/captionScrim is an unconditional caption plate; captionFg doubles
74
- // as textOnMedia (legible text over arbitrary media via the scrim plate).
75
- // primary/secondary fall back to accent (per derivation table).
76
- // textMuted = colorMix(text, background, 40%) — a DE-EMPHASIS derivation
77
- // (faded toward background), computed over the contrast-safe base so it
78
- // inherits the floor's correction. (deriveContrastSafe's own `textMuted`
79
- // only enforces the non-body floor and does NOT mute — for any legible brand
80
- // it collapses to `text`, which is not what this token is for.)
81
- // border = colorMix(text, background, 15%) — sharper, more visible.
82
- const safe = deriveContrastSafe({
83
- background: kit.colors.background,
84
- text: kit.colors.text,
85
- accent: kit.colors.accent,
86
- });
87
- const colors = {
88
- primary: kit.colors.primary ?? kit.colors.accent,
89
- secondary: kit.colors.secondary ?? kit.colors.accent,
90
- accent: kit.colors.accent,
91
- background: safe.background,
92
- text: safe.text,
93
- // De-emphasis mix faded toward background, RE-CLAMPED to the non-body floor:
94
- // for a hostile (near-floor) brand the 40% fade can drop below Lc60, so the
95
- // clamp forward-corrects it back up to legibility. For a legible brand the
96
- // mix already clears the floor and the clamp is a no-op.
97
- textMuted: kit.colors.textMuted ??
98
- clampToFloor(colorMix(safe.text, safe.background, 0.4), safe.background, FLOORS.nonBody),
99
- border: kit.colors.border ?? colorMix(safe.text, safe.background, 0.15),
100
- textOnMedia: safe.captionFg,
101
- // Tier-2 core: author override wins, else the contrast-safe derived value.
102
- surface: kit.colors.surface ?? safe.surface,
103
- card: kit.colors.card ?? safe.card,
104
- gridLine: kit.colors.gridLine ?? safe.gridLine,
105
- accentMuted: kit.colors.accentMuted ?? safe.accentMuted,
106
- textOnAccent: kit.colors.textOnAccent ?? safe.textOnAccent,
107
- textOnSurface: kit.colors.textOnSurface ?? safe.textOnSurface,
108
- };
109
- // ── Fonts ──────────────────────────────────────────────────────
110
- // body falls back to heading; caption falls back to body, then heading.
111
- const fonts = {
112
- heading: kit.fonts.heading,
113
- body: kit.fonts.body ?? kit.fonts.heading,
114
- caption: kit.fonts.caption ?? kit.fonts.body ?? kit.fonts.heading,
115
- };
116
- // ── Spacing (width-anchored) ───────────────────────────────────
117
- const spacing = {
118
- base: kit.spacing?.base ?? compositionWidth * 0.03,
119
- lg: kit.spacing?.lg ?? compositionWidth * 0.06,
120
- sm: kit.spacing?.sm ?? compositionWidth * 0.015,
121
- };
122
- // ── Sizing (width-anchored) ────────────────────────────────────
123
- const sizing = {
124
- fontSizeHeading: kit.sizing?.fontSizeHeading ?? compositionWidth * 0.06,
125
- fontSizeBody: kit.sizing?.fontSizeBody ?? compositionWidth * 0.035,
126
- fontSizeLabel: kit.sizing?.fontSizeLabel ?? compositionWidth * 0.025,
127
- borderRadius: kit.sizing?.borderRadius ?? compositionWidth * 0.01,
128
- };
129
- // ── Motion ─────────────────────────────────────────────────────
130
- // Defaults mirror the primitives' calibrated fallbacks so an un-authored kit
131
- // renders identically to today (entrance off; stagger/exit = Captions defaults).
132
- const motion = {
133
- duration: kit.motion?.duration ?? 200,
134
- easing: kit.motion?.easing ?? "ease-out",
135
- entrance: kit.motion?.entrance ?? "none",
136
- staggerMs: kit.motion?.staggerMs ?? 90,
137
- exitMs: kit.motion?.exitMs ?? 0,
138
- };
139
- // ── Caption ────────────────────────────────────────────────────
140
- // Caption legibility is an UNCONDITIONAL APCA floor. scrim is the opaque
141
- // plate composited behind caption text over media; captionFg clears the body
142
- // floor over that scrim by construction. An authored emphasis color
143
- // (captionProfile.emphasisColor) is CLAMPED to the body floor over that scrim
144
- // (task #26) — a creator-set accent that fails APCA is forward-corrected up to
145
- // legibility, never rendered below the floor. Absent an override, the
146
- // contrast-safe captionFg is the default.
147
- // The base caption face: the creator's explicit caption font, else the
148
- // resolved caption font family (fonts.caption → body → heading).
149
- const captionBaseFamily = kit.captionProfile?.fontFamily ?? fonts.caption.family;
150
- const cp = kit.captionProfile;
151
- const caption = {
152
- fg: cp?.emphasisColor
153
- ? clampToFloor(cp.emphasisColor, safe.captionScrim, FLOORS.body)
154
- : safe.captionFg,
155
- scrim: safe.captionScrim,
156
- // Base + highlight color are forward-corrected to the body floor over the
157
- // scrim, same guard as emphasisColor→fg (an authored accent that fails APCA
158
- // is clamped UP to legibility, never rendered below the floor).
159
- ...(cp?.color
160
- ? { color: clampToFloor(cp.color, safe.captionScrim, FLOORS.body) }
161
- : {}),
162
- ...(cp?.highlightColor
163
- ? { highlightColor: clampToFloor(cp.highlightColor, safe.captionScrim, FLOORS.body) }
164
- : {}),
165
- ...(cp?.plate ? { plate: cp.plate } : {}),
166
- ...(cp?.entrance ? { entrance: cp.entrance } : {}),
167
- ...(cp?.entranceMs != null ? { entranceMs: cp.entranceMs } : {}),
168
- ...(cp?.entranceStaggerMs != null ? { entranceStaggerMs: cp.entranceStaggerMs } : {}),
169
- ...(cp?.exitMs != null ? { exitMs: cp.exitMs } : {}),
170
- ...(captionBaseFamily ? { fontFamily: captionBaseFamily } : {}),
171
- ...(cp?.emphasisFontFamily ? { emphasisFontFamily: cp.emphasisFontFamily } : {}),
172
- ...(cp?.emphasisScale != null ? { emphasisScale: cp.emphasisScale } : {}),
173
- ...(cp?.emphasisFontWeight != null ? { emphasisFontWeight: cp.emphasisFontWeight } : {}),
174
- ...(cp?.emphasisFontStyle ? { emphasisFontStyle: cp.emphasisFontStyle } : {}),
175
- ...(cp?.emphasisTextTransform ? { emphasisTextTransform: cp.emphasisTextTransform } : {}),
176
- ...(cp?.emphasisLetterSpacing != null
177
- ? { emphasisLetterSpacing: cp.emphasisLetterSpacing }
178
- : {}),
179
- ...(cp?.emphasisPlate != null ? { emphasisPlate: cp.emphasisPlate } : {}),
180
- ...(cp?.emphasisPlateColor ? { emphasisPlateColor: cp.emphasisPlateColor } : {}),
181
- ...(cp?.emphasisPlateTextColor
182
- ? { emphasisPlateTextColor: cp.emphasisPlateTextColor }
183
- : {}),
184
- };
185
- // ── Overlay assets (logo / intro / outro / watermark) ──────────
186
- // Normalize placement + sizes; carry author-set fields through. Each is
187
- // present in the resolved kit only when the wire kit declared it.
188
- const logo = kit.logo
189
- ? {
190
- src: kit.logo.src,
191
- ...(kit.logo.alt != null ? { alt: kit.logo.alt } : {}),
192
- placement: kit.logo.placement ?? LOGO_DEFAULT_PLACEMENT,
193
- sizePct: kit.logo.sizePct ?? LOGO_DEFAULT_SIZE_PCT,
194
- }
195
- : undefined;
196
- const intro = resolveIntroOutro(kit.intro);
197
- const outro = resolveIntroOutro(kit.outro);
198
- const watermark = kit.watermark
199
- ? {
200
- src: kit.watermark.src,
201
- opacity: kit.watermark.opacity ?? WATERMARK_DEFAULT_OPACITY,
202
- placement: kit.watermark.placement ?? WATERMARK_DEFAULT_PLACEMENT,
203
- }
204
- : undefined;
205
- // ── Language (built FROM INSPIRATION) ──────────────────────────
206
- // Carried untransformed — exemplar/motif reference data the maker + judge
207
- // condition on, keyed off the presence of exemplar frames. Present only when
208
- // the kit was built from inspiration; NOT a `$brand:` token root.
209
- const language = kit.exemplarKeys && kit.exemplarKeys.length > 0
210
- ? {
211
- exemplarKeys: kit.exemplarKeys,
212
- ...(kit.contactSheetKey ? { contactSheetKey: kit.contactSheetKey } : {}),
213
- motifs: kit.motifs ?? [],
214
- ...(kit.styleRubric ? { styleRubric: kit.styleRubric } : {}),
215
- ...(kit.density ? { density: kit.density } : {}),
216
- }
217
- : undefined;
218
- return {
219
- id: kit.id,
220
- name: kit.name,
221
- colors,
222
- caption,
223
- fonts,
224
- spacing,
225
- sizing,
226
- motion,
227
- ...(logo ? { logo } : {}),
228
- ...(intro ? { intro } : {}),
229
- ...(outro ? { outro } : {}),
230
- ...(watermark ? { watermark } : {}),
231
- ...(language ? { language } : {}),
232
- ...(kit.audio ? { audio: kit.audio } : {}),
233
- };
234
- }
235
- /**
236
- * The DESIGN-TOKEN sub-trees of a ResolvedBrandKit whose leaves are bindable as
237
- * `$brand:<path>` param values. We deliberately exclude `id`/`name` (metadata,
238
- * not design tokens) and the optional overlay assets (`logo`/`intro`/`outro`/
239
- * `watermark`/`fontAssets` — present only when a kit declares them, and not a
240
- * param-binding surface).
241
- */
242
- export const BRAND_TOKEN_ROOT_KEYS = [
243
- "colors",
244
- "caption",
245
- "fonts",
246
- "spacing",
247
- "sizing",
248
- "motion",
249
- ];
250
- /**
251
- * Reference wire kit used ONLY to materialize the canonical token SHAPE. The
252
- * values are throwaway (real hex so the contrast derivations run); only the
253
- * resolved object's LEAF PATHS are read. Width is arbitrary — spacing/sizing
254
- * paths are present at any width (their VALUES scale; their KEYS don't).
255
- */
256
- const BRAND_TOKEN_REFERENCE_KIT = {
257
- id: "reference",
258
- name: "reference",
259
- colors: {
260
- primary: "#3b82f6",
261
- accent: "#22c55e",
262
- background: "#0b0b0f",
263
- text: "#f5f5f7",
264
- },
265
- fonts: { heading: { kind: "system", family: "Inter" } },
266
- };
267
- const BRAND_TOKEN_REFERENCE_WIDTH = 1920;
268
- function collectBrandLeafPaths(value, prefix, out) {
269
- if (value === null || value === undefined)
270
- return;
271
- if (typeof value === "object") {
272
- // Arrays aren't a `$brand:` ref target (refs resolve to scalar leaves only).
273
- if (Array.isArray(value))
274
- return;
275
- for (const [k, v] of Object.entries(value)) {
276
- collectBrandLeafPaths(v, prefix ? `${prefix}.${k}` : k, out);
277
- }
278
- return;
279
- }
280
- out.push(prefix);
281
- }
282
- function buildBrandTokenRefs() {
283
- const ref = resolveBrandKit(BRAND_TOKEN_REFERENCE_KIT, BRAND_TOKEN_REFERENCE_WIDTH);
284
- const paths = [];
285
- for (const root of BRAND_TOKEN_ROOT_KEYS) {
286
- collectBrandLeafPaths(ref[root], root, paths);
287
- }
288
- return paths.map((p) => `$brand:${p}`).sort();
289
- }
290
- /**
291
- * The canonical set of bindable `$brand:` token refs a param value may carry —
292
- * the COMPLETE design-token leaf vocabulary of a ResolvedBrandKit, DERIVED at
293
- * module load from a reference resolution so it can NEVER drift from the
294
- * resolver: add a token to ResolvedBrandKit and it appears here automatically;
295
- * remove one and it disappears. Surfaced on the component catalog as
296
- * `brandTokens` so an agent discovers e.g. `$brand:colors.accent` (a valid value
297
- * for an accent-color param) without reading source. Colors + fonts are the
298
- * common bindings; spacing/sizing/motion/caption round out the full vocabulary.
299
- */
300
- export const BRAND_TOKEN_REFS = Object.freeze(buildBrandTokenRefs());
301
- /**
302
- * Mix two hex colors by ratio. ratio=0 returns `a` unchanged;
303
- * ratio=1 returns `b`; ratio=0.4 returns a 60% a + 40% b mix.
304
- *
305
- * Accepts both `#RRGGBB` and `#RGB` short form. Rejects non-hex
306
- * inputs (rgb()/hsl()/named colors) by returning `a` unchanged —
307
- * the brand cascade NEVER crashes on a malformed input; primitives
308
- * fall back to their declared fallback for the affected token.
309
- *
310
- * Returns `#RRGGBB` form, lowercase.
311
- */
312
- export function colorMix(a, b, ratio) {
313
- const aRgb = parseHex(a);
314
- const bRgb = parseHex(b);
315
- if (!aRgb || !bRgb)
316
- return a;
317
- const clamped = Math.max(0, Math.min(1, ratio));
318
- const inv = 1 - clamped;
319
- const r = Math.round(aRgb.r * inv + bRgb.r * clamped);
320
- const g = Math.round(aRgb.g * inv + bRgb.g * clamped);
321
- const blue = Math.round(aRgb.b * inv + bRgb.b * clamped);
322
- return "#" + [r, g, blue].map((v) => v.toString(16).padStart(2, "0")).join("");
323
- }
324
- function parseHex(input) {
325
- if (typeof input !== "string")
326
- return null;
327
- const s = input.trim().toLowerCase();
328
- if (!s.startsWith("#"))
329
- return null;
330
- const hex = s.slice(1);
331
- if (hex.length === 3) {
332
- return {
333
- r: parseInt(hex[0] + hex[0], 16),
334
- g: parseInt(hex[1] + hex[1], 16),
335
- b: parseInt(hex[2] + hex[2], 16),
336
- };
337
- }
338
- if (hex.length === 6) {
339
- return {
340
- r: parseInt(hex.slice(0, 2), 16),
341
- g: parseInt(hex.slice(2, 4), 16),
342
- b: parseInt(hex.slice(4, 6), 16),
343
- };
344
- }
345
- return null;
346
- }
347
- /**
348
- * Resolve a `$brand:<dot-path>` reference against a ResolvedBrandKit.
349
- * Returns the value at the path, or `null` if the path doesn't exist
350
- * or the value isn't a primitive. Primitives use the returned `null`
351
- * to fall back to their declared `PrimitiveRegistryEntry.tokens[].fallback`.
352
- *
353
- * Examples:
354
- * resolveBrandRef("$brand:colors.accent", kit) → "#ff0066"
355
- * resolveBrandRef("$brand:fonts.heading.family", kit) → "Inter" | undefined
356
- * resolveBrandRef("$brand:motion.duration", kit) → 200
357
- * resolveBrandRef("not-a-ref", kit) → null (not a ref form)
358
- * resolveBrandRef("$brand:colors.nonexistent", kit) → null
359
- *
360
- * Escape rule (per data-model.md § `$brand:` ref syntax): a value
361
- * starting with `\$brand:` is the literal string — strip the leading
362
- * `\` and treat as text, not a ref. This function returns `null` for
363
- * escaped forms; the caller (params resolver) handles the strip.
364
- */
365
- export function resolveBrandRef(refOrValue, kit) {
366
- if (typeof refOrValue !== "string")
367
- return null;
368
- if (!refOrValue.startsWith("$brand:"))
369
- return null;
370
- const path = refOrValue.slice("$brand:".length);
371
- if (!path)
372
- return null;
373
- const segments = path.split(".");
374
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
375
- let cursor = kit;
376
- for (const seg of segments) {
377
- if (cursor == null || typeof cursor !== "object")
378
- return null;
379
- cursor = cursor[seg];
380
- }
381
- // Only primitive leaves resolve; object/array means the path
382
- // pointed at a sub-tree, which is a malformed ref.
383
- if (cursor == null)
384
- return null;
385
- if (typeof cursor === "object")
386
- return null;
387
- return cursor;
388
- }
389
- /**
390
- * Walk an arbitrary value tree (typically `OverlaySource.params` or
391
- * `EffectSource.params`) and replace every `$brand:` ref string with
392
- * its resolved value from the kit. Non-string leaves pass through.
393
- * Refs that don't resolve are replaced with the provided per-token
394
- * fallback if any, else the original ref string is preserved so the
395
- * primitive's tokens[].fallback can apply at render time.
396
- *
397
- * Operates immutably — does NOT mutate the input.
398
- */
399
- export function resolveBrandRefsDeep(value, kit) {
400
- if (Array.isArray(value)) {
401
- return value.map((v) => resolveBrandRefsDeep(v, kit));
402
- }
403
- if (value !== null && typeof value === "object") {
404
- const out = {};
405
- for (const [k, v] of Object.entries(value)) {
406
- out[k] = resolveBrandRefsDeep(v, kit);
407
- }
408
- return out;
409
- }
410
- if (typeof value === "string") {
411
- // Escape: \$brand:... → literal string with the leading \ stripped.
412
- if (value.startsWith("\\$brand:")) {
413
- return value.slice(1);
414
- }
415
- if (value.startsWith("$brand:")) {
416
- const resolved = resolveBrandRef(value, kit);
417
- // Resolution failure: preserve the ref string so a downstream
418
- // consumer (or the primitive's fallback handler) can decide.
419
- // Returning the original string here is the documented
420
- // contract — primitives' tokens[].fallback applies at the
421
- // primitive boundary, not here.
422
- return resolved ?? value;
423
- }
424
- return value;
425
- }
426
- return value;
427
- }
428
- /**
429
- * Card token layer → CSS custom properties. Resolves `$brand:` refs through
430
- * `resolveBrandRefsDeep`, then emits every resolved string leaf as a `--cf-<k>`
431
- * var; unresolved refs are DROPPED (the card html's own `var(--cf-x, fallback)`
432
- * applies). The ONE copy of this logic — the render's OverlayContent card
433
- * branch and the local harness both consume it (extracted 2026-07-16; each
434
- * previously carried a mirror).
435
- */
436
- export function cssLayoutVars(tokens, kit) {
437
- if (!tokens)
438
- return {};
439
- const resolved = kit ? resolveBrandRefsDeep(tokens, kit) : tokens;
440
- const vars = {};
441
- for (const [k, v] of Object.entries(resolved)) {
442
- if (typeof v === "string" && !v.startsWith("$brand:"))
443
- vars[`--cf-${k}`] = v;
444
- }
445
- return vars;
446
- }
447
- /**
448
- * Component brand palette — the resolved kit an authored `create_component`
449
- * graphic reads from `props.brand.*`. This is the COMPONENT-medium analog of a
450
- * card's `cssLayoutVars` (`var(--cf-*)`): a card is freeform HTML that cascades
451
- * CSS custom properties; a component receives brand through its PROPS, so we hand
452
- * it one FLAT, already-resolved object. AUTO-INJECTED at the brand-meets-props
453
- * seam (`resolveBrandProps` / the ship snapshot) so a component binds to the kit
454
- * with ZERO prop declaration — `style={{ color: props.brand.accent, fontFamily:
455
- * props.brand.heading }}`. Flat by design: one dereference, no nested paths to
456
- * author, no `$brand:` refs to declare (the authoring cost that made the
457
- * ref-per-token approach ~2.4× slower per design attempt).
458
- */
459
- export function componentBrandPalette(kit) {
460
- return {
461
- primary: kit.colors.primary,
462
- secondary: kit.colors.secondary,
463
- accent: kit.colors.accent,
464
- accentMuted: kit.colors.accentMuted,
465
- background: kit.colors.background,
466
- surface: kit.colors.surface,
467
- card: kit.colors.card,
468
- border: kit.colors.border,
469
- gridLine: kit.colors.gridLine,
470
- text: kit.colors.text,
471
- textMuted: kit.colors.textMuted,
472
- textOnMedia: kit.colors.textOnMedia,
473
- textOnAccent: kit.colors.textOnAccent,
474
- textOnSurface: kit.colors.textOnSurface,
475
- // A FontRef family can be undefined (unresolved) — hand the component an empty
476
- // string so `fontFamily: props.brand.heading` falls to the browser default,
477
- // never the literal "undefined". Mirrors cssLayoutVars dropping unresolved refs.
478
- heading: kit.fonts.heading.family ?? '',
479
- body: kit.fonts.body.family ?? '',
480
- caption: kit.fonts.caption.family ?? '',
481
- };
482
- }