@cueframe/kernel 0.1.0 → 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 (355) hide show
  1. package/LICENSE +661 -0
  2. package/dist/_members/composition/ops/compositionOps.d.ts +1 -0
  3. package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
  4. package/dist/_members/composition/projection/index.d.ts +2 -0
  5. package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
  6. package/dist/_members/composition/validators/composition.d.ts +42 -25
  7. package/dist/_members/composition/validators/render.d.ts +32 -0
  8. package/dist/_members/core/render/compositionRender.d.ts +17 -1
  9. package/dist/_members/core/render/types.d.ts +31 -0
  10. package/dist/authoring/build-tools.js +6 -6
  11. package/dist/authoring/context.js +4 -4
  12. package/dist/authoring/tools.js +5 -5
  13. package/dist/authoring.js +11 -9
  14. package/dist/{chunk-ZB3C3HM7.js → chunk-7FO3ZJ43.js} +3 -0
  15. package/dist/{chunk-ODL7GQJG.js → chunk-AP6ZIVAV.js} +2 -2
  16. package/dist/{chunk-IBYQG46O.js → chunk-AQBREB5O.js} +1 -1
  17. package/dist/{chunk-YIOY2XEO.js → chunk-DK2ODBNT.js} +15 -5
  18. package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
  19. package/dist/{chunk-GEA7E2FL.js → chunk-JJ6XD7NG.js} +151 -1
  20. package/dist/{chunk-COYMZ76S.js → chunk-MBCXCJOE.js} +1 -1
  21. package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
  22. package/dist/{chunk-VOO5FQSS.js → chunk-PDYO3DOJ.js} +5 -5
  23. package/dist/{chunk-MXFAADCQ.js → chunk-PODIYN2K.js} +9 -2
  24. package/dist/{chunk-NFEGPWGS.js → chunk-TOJEXFXL.js} +1 -1
  25. package/dist/{chunk-LM4WDUQJ.js → chunk-UHGSZZDI.js} +1 -1
  26. package/dist/{chunk-XWKZB5U5.js → chunk-ZWMV6DD2.js} +24 -1
  27. package/dist/compose/renderer.js +3 -3
  28. package/dist/compose.js +6 -6
  29. package/dist/composition/graphics-plan.js +1 -1
  30. package/dist/composition/ops.js +3 -3
  31. package/dist/composition/primitive-catalog.js +1 -1
  32. package/dist/composition/projection.js +19 -3
  33. package/dist/composition/validators.js +6 -4
  34. package/dist/composition-ops.js +8 -6
  35. package/dist/composition.js +24 -6
  36. package/dist/{context-OKX3HHFS.js → context-YWUZDG5X.js} +4 -4
  37. package/dist/core/render.js +3 -3
  38. package/dist/core/select.js +2 -2
  39. package/dist/core.js +3 -3
  40. package/dist/errors.js +1 -1
  41. package/dist/mcp/adapter.js +1 -0
  42. package/dist/media-model/testing.js +1071 -718
  43. package/dist/nle-export/server.js +328 -130
  44. package/dist/nle-export.js +7 -6
  45. package/package.json +13 -14
  46. package/dist/_members/account-model/index.js +0 -4
  47. package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
  48. package/dist/_members/account-model/testing/index.js +0 -7
  49. package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
  50. package/dist/_members/account-model/types/index.js +0 -1
  51. package/dist/_members/account-model/validators/contextFile.js +0 -18
  52. package/dist/_members/account-model/validators/conversation.js +0 -95
  53. package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
  54. package/dist/_members/account-model/validators/index.js +0 -7
  55. package/dist/_members/account-model/validators/sessionToken.js +0 -49
  56. package/dist/_members/account-model/validators/uploadToken.js +0 -16
  57. package/dist/_members/account-model/validators/userSettings.js +0 -12
  58. package/dist/_members/account-model/validators/workingComposition.js +0 -20
  59. package/dist/_members/brand-derivation/constants.js +0 -20
  60. package/dist/_members/brand-derivation/contrastSafe.js +0 -114
  61. package/dist/_members/brand-derivation/index.js +0 -1
  62. package/dist/_members/cloud-import/chunk-XKO6ZSWI.js +0 -162
  63. package/dist/_members/cloud-import/chunk-XKO6ZSWI.js.map +0 -1
  64. package/dist/_members/cloud-import/index.js +0 -241
  65. package/dist/_members/cloud-import/index.js.map +0 -1
  66. package/dist/_members/cloud-import/multipartUpload.js +0 -7
  67. package/dist/_members/cloud-import/multipartUpload.js.map +0 -1
  68. package/dist/_members/composition/audio/audioMix.js +0 -61
  69. package/dist/_members/composition/audio/index.js +0 -5
  70. package/dist/_members/composition/audio/mixStaging.js +0 -195
  71. package/dist/_members/composition/audio/musicPack.generated.js +0 -136
  72. package/dist/_members/composition/audio/musicPack.js +0 -36
  73. package/dist/_members/composition/audio/pack.generated.js +0 -603
  74. package/dist/_members/composition/audio/pack.js +0 -48
  75. package/dist/_members/composition/audio/palette.js +0 -134
  76. package/dist/_members/composition/autozoom/index.js +0 -83
  77. package/dist/_members/composition/brand-kit.js +0 -45
  78. package/dist/_members/composition/brief/contract.js +0 -209
  79. package/dist/_members/composition/color-grade.js +0 -80
  80. package/dist/_members/composition/depth.js +0 -8
  81. package/dist/_members/composition/fixtures/index.js +0 -143
  82. package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
  83. package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
  84. package/dist/_members/composition/fonts.js +0 -162
  85. package/dist/_members/composition/graphics-plan/compile.js +0 -221
  86. package/dist/_members/composition/graphics-plan/index.js +0 -10
  87. package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
  88. package/dist/_members/composition/graphics-plan/motion.js +0 -66
  89. package/dist/_members/composition/graphics-plan/schemas.js +0 -261
  90. package/dist/_members/composition/graphics-plan/solve.js +0 -145
  91. package/dist/_members/composition/index.js +0 -5
  92. package/dist/_members/composition/invariants/clipPlacement.js +0 -69
  93. package/dist/_members/composition/invariants/composition.js +0 -28
  94. package/dist/_members/composition/invariants/errors.js +0 -10
  95. package/dist/_members/composition/invariants/etag.js +0 -38
  96. package/dist/_members/composition/invariants/ids.js +0 -33
  97. package/dist/_members/composition/invariants/index.js +0 -9
  98. package/dist/_members/composition/invariants/keyframes.js +0 -45
  99. package/dist/_members/composition/invariants/markers.js +0 -29
  100. package/dist/_members/composition/invariants/time.js +0 -20
  101. package/dist/_members/composition/invariants/tracks.js +0 -304
  102. package/dist/_members/composition/ops/compositionOps.js +0 -1056
  103. package/dist/_members/composition/ops/headlessStore.js +0 -94
  104. package/dist/_members/composition/ops/index.js +0 -4
  105. package/dist/_members/composition/ops/selectors.js +0 -118
  106. package/dist/_members/composition/ops/timeline-word.js +0 -1
  107. package/dist/_members/composition/ops/transcript.js +0 -77
  108. package/dist/_members/composition/ops/types.js +0 -16
  109. package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
  110. package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
  111. package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
  112. package/dist/_members/composition/primitive-catalog/index.js +0 -46
  113. package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
  114. package/dist/_members/composition/primitive-catalog/projection.js +0 -164
  115. package/dist/_members/composition/primitive-catalog/types.js +0 -14
  116. package/dist/_members/composition/projection/behind-placement.js +0 -62
  117. package/dist/_members/composition/projection/brandKit.js +0 -482
  118. package/dist/_members/composition/projection/cardTokens.js +0 -209
  119. package/dist/_members/composition/projection/composition-floor.js +0 -582
  120. package/dist/_members/composition/projection/cropProjection.js +0 -257
  121. package/dist/_members/composition/projection/index.js +0 -7
  122. package/dist/_members/composition/projection/occlusion-budget.js +0 -104
  123. package/dist/_members/composition/projection/safe-zones.js +0 -99
  124. package/dist/_members/composition/reframe/aspectLoss.js +0 -115
  125. package/dist/_members/composition/reframe/coverage.js +0 -62
  126. package/dist/_members/composition/reframe/derive.js +0 -73
  127. package/dist/_members/composition/reframe/index.js +0 -109
  128. package/dist/_members/composition/reframe/kenBurns.js +0 -64
  129. package/dist/_members/composition/reframe/shotScale.js +0 -176
  130. package/dist/_members/composition/reframe/trajectory.js +0 -124
  131. package/dist/_members/composition/timeline/compound.js +0 -134
  132. package/dist/_members/composition/timeline/index.js +0 -9
  133. package/dist/_members/composition/timeline/intent.js +0 -228
  134. package/dist/_members/composition/timeline/keyframes.js +0 -121
  135. package/dist/_members/composition/timeline/link.js +0 -59
  136. package/dist/_members/composition/timeline/occupancy.js +0 -36
  137. package/dist/_members/composition/timeline/placement.js +0 -74
  138. package/dist/_members/composition/timeline/plan.js +0 -31
  139. package/dist/_members/composition/timeline/resolve.js +0 -170
  140. package/dist/_members/composition/timeline/trims.js +0 -278
  141. package/dist/_members/composition/types/index.js +0 -1
  142. package/dist/_members/composition/validators/brandKit.js +0 -295
  143. package/dist/_members/composition/validators/composePlan.js +0 -113
  144. package/dist/_members/composition/validators/composition.js +0 -703
  145. package/dist/_members/composition/validators/font.js +0 -34
  146. package/dist/_members/composition/validators/graphicKinds.js +0 -30
  147. package/dist/_members/composition/validators/index.js +0 -9
  148. package/dist/_members/composition/validators/project.js +0 -29
  149. package/dist/_members/composition/validators/registry.js +0 -41
  150. package/dist/_members/composition/validators/render.js +0 -139
  151. package/dist/_members/composition/validators/session.js +0 -37
  152. package/dist/_members/composition/validators/webhook.js +0 -72
  153. package/dist/_members/composition-ops/alphaLayers.js +0 -141
  154. package/dist/_members/composition-ops/index.js +0 -637
  155. package/dist/_members/composition-ops/materializeGrid.js +0 -99
  156. package/dist/_members/composition-ops/opRecorder.js +0 -196
  157. package/dist/_members/composition-ops/recordingStore.js +0 -14
  158. package/dist/_members/composition-ops/replaceRegion.js +0 -102
  159. package/dist/_members/composition-ops/testFixtures.js +0 -19
  160. package/dist/_members/core/index.js +0 -5
  161. package/dist/_members/core/render/bookends.js +0 -53
  162. package/dist/_members/core/render/captions.js +0 -127
  163. package/dist/_members/core/render/compositionRender.js +0 -1249
  164. package/dist/_members/core/render/deriveTrajectory.js +0 -889
  165. package/dist/_members/core/render/emphasis.js +0 -16
  166. package/dist/_members/core/render/eval/cropBox.js +0 -139
  167. package/dist/_members/core/render/eval/inclusion.js +0 -96
  168. package/dist/_members/core/render/eval/index.js +0 -146
  169. package/dist/_members/core/render/eval/metrics.js +0 -94
  170. package/dist/_members/core/render/exportSettings.js +0 -65
  171. package/dist/_members/core/render/index.js +0 -20
  172. package/dist/_members/core/render/mapFaceToPerson.js +0 -73
  173. package/dist/_members/core/render/types.js +0 -8
  174. package/dist/_members/core/render/vcam/cameraPath.js +0 -248
  175. package/dist/_members/core/render/vcam/constants.js +0 -115
  176. package/dist/_members/core/render/vcam/errorCodes.js +0 -39
  177. package/dist/_members/core/render/vcam/framing.js +0 -136
  178. package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
  179. package/dist/_members/core/render/vcam/shots.js +0 -53
  180. package/dist/_members/core/render/vcam/subjectSet.js +0 -388
  181. package/dist/_members/core/select/errorCodes.js +0 -38
  182. package/dist/_members/core/select/index.js +0 -26
  183. package/dist/_members/core/select/model.js +0 -18
  184. package/dist/_members/core/select/select.js +0 -244
  185. package/dist/_members/core/select/stabilize.js +0 -242
  186. package/dist/_members/core/types.js +0 -7
  187. package/dist/_members/errors/index.js +0 -1
  188. package/dist/_members/errors/registry.js +0 -560
  189. package/dist/_members/foundation/codes/index.js +0 -31
  190. package/dist/_members/foundation/index.js +0 -2
  191. package/dist/_members/foundation/primitives/index.js +0 -5
  192. package/dist/_members/mcp/adapter.js +0 -771
  193. package/dist/_members/mcp/burnedNames.js +0 -73
  194. package/dist/_members/mcp/core.js +0 -390
  195. package/dist/_members/mcp/curation.js +0 -792
  196. package/dist/_members/mcp/executor.js +0 -142
  197. package/dist/_members/mcp/format.js +0 -9
  198. package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
  199. package/dist/_members/mcp/generated/harness.js +0 -81
  200. package/dist/_members/mcp/generated/operations.js +0 -131
  201. package/dist/_members/mcp/index.js +0 -50
  202. package/dist/_members/mcp/internalLoopTools.js +0 -109
  203. package/dist/_members/mcp/prompts.js +0 -45
  204. package/dist/_members/mcp/resources.js +0 -166
  205. package/dist/_members/mcp/server.js +0 -340
  206. package/dist/_members/mcp/wait.js +0 -378
  207. package/dist/_members/mcp/x402Meta.js +0 -66
  208. package/dist/_members/media-model/api.js +0 -175
  209. package/dist/_members/media-model/index.js +0 -1
  210. package/dist/_members/media-model/media-kind.js +0 -116
  211. package/dist/_members/media-model/testing/index.js +0 -1
  212. package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
  213. package/dist/_members/media-model/transcriptSearch.js +0 -70
  214. package/dist/_members/media-model/transcriptSearchCases.json +0 -79
  215. package/dist/_members/nle-export/compact-timeline.js +0 -73
  216. package/dist/_members/nle-export/compact-timeline.js.map +0 -1
  217. package/dist/_members/nle-export/composition-to-input.js +0 -147
  218. package/dist/_members/nle-export/composition-to-input.js.map +0 -1
  219. package/dist/_members/nle-export/fcpxml.js +0 -159
  220. package/dist/_members/nle-export/fcpxml.js.map +0 -1
  221. package/dist/_members/nle-export/index.js +0 -12
  222. package/dist/_members/nle-export/index.js.map +0 -1
  223. package/dist/_members/nle-export/premiere.js +0 -161
  224. package/dist/_members/nle-export/premiere.js.map +0 -1
  225. package/dist/_members/nle-export/server/index.js +0 -2
  226. package/dist/_members/nle-export/server/index.js.map +0 -1
  227. package/dist/_members/nle-export/server/pack-zip.js +0 -38
  228. package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
  229. package/dist/_members/nle-export/srt.js +0 -50
  230. package/dist/_members/nle-export/srt.js.map +0 -1
  231. package/dist/_members/nle-export/types.js +0 -9
  232. package/dist/_members/nle-export/types.js.map +0 -1
  233. package/dist/_members/nle-export/xml/index.js +0 -11
  234. package/dist/_members/nle-export/xml/index.js.map +0 -1
  235. package/dist/_members/nle-export/xml-utils.js +0 -48
  236. package/dist/_members/nle-export/xml-utils.js.map +0 -1
  237. package/dist/_members/perception/activeSpeaker.js +0 -103
  238. package/dist/_members/perception/audioQuality.js +0 -76
  239. package/dist/_members/perception/energyBeat.js +0 -99
  240. package/dist/_members/perception/identityMatch.js +0 -91
  241. package/dist/_members/perception/index.js +0 -48
  242. package/dist/_members/perception/visualQuality.js +0 -95
  243. package/dist/_members/plane/conformance.js +0 -90
  244. package/dist/_members/plane/contract.js +0 -49
  245. package/dist/_members/plane/index.js +0 -16
  246. package/dist/_members/primitives/backgrounds/index.js +0 -32
  247. package/dist/_members/primitives/backgrounds/index.js.map +0 -1
  248. package/dist/_members/primitives/captions/index.js +0 -398
  249. package/dist/_members/primitives/captions/index.js.map +0 -1
  250. package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
  251. package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
  252. package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
  253. package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
  254. package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
  255. package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
  256. package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
  257. package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
  258. package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
  259. package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
  260. package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
  261. package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
  262. package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
  263. package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
  264. package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
  265. package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
  266. package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
  267. package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
  268. package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
  269. package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
  270. package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
  271. package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
  272. package/dist/_members/primitives/chunk-IDAL6G3Y.js +0 -134
  273. package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
  274. package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
  275. package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
  276. package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
  277. package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
  278. package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
  279. package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
  280. package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
  281. package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
  282. package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
  283. package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
  284. package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
  285. package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
  286. package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
  287. package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
  288. package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
  289. package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
  290. package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
  291. package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
  292. package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
  293. package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
  294. package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
  295. package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
  296. package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
  297. package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
  298. package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
  299. package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
  300. package/dist/_members/primitives/effects/index.js +0 -30
  301. package/dist/_members/primitives/effects/index.js.map +0 -1
  302. package/dist/_members/primitives/hero-text/index.js +0 -14
  303. package/dist/_members/primitives/hero-text/index.js.map +0 -1
  304. package/dist/_members/primitives/index.js +0 -64
  305. package/dist/_members/primitives/index.js.map +0 -1
  306. package/dist/_members/primitives/layouts/index.js +0 -24
  307. package/dist/_members/primitives/layouts/index.js.map +0 -1
  308. package/dist/_members/primitives/lib/easings.js +0 -26
  309. package/dist/_members/primitives/lib/easings.js.map +0 -1
  310. package/dist/_members/primitives/lib/index.js +0 -74
  311. package/dist/_members/primitives/lib/index.js.map +0 -1
  312. package/dist/_members/primitives/lib/palette.js +0 -72
  313. package/dist/_members/primitives/lib/palette.js.map +0 -1
  314. package/dist/_members/primitives/lib/preview.js +0 -8
  315. package/dist/_members/primitives/lib/preview.js.map +0 -1
  316. package/dist/_members/primitives/lib/schema.js +0 -12
  317. package/dist/_members/primitives/lib/schema.js.map +0 -1
  318. package/dist/_members/primitives/lib/seeded-random.js +0 -14
  319. package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
  320. package/dist/_members/primitives/lib/text/contrast.js +0 -12
  321. package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
  322. package/dist/_members/primitives/lib/text/fill.js +0 -8
  323. package/dist/_members/primitives/lib/text/fill.js.map +0 -1
  324. package/dist/_members/primitives/lib/text/fitText.js +0 -10
  325. package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
  326. package/dist/_members/primitives/lib/text/marker.js +0 -8
  327. package/dist/_members/primitives/lib/text/marker.js.map +0 -1
  328. package/dist/_members/primitives/lib/text/motion.js +0 -16
  329. package/dist/_members/primitives/lib/text/motion.js.map +0 -1
  330. package/dist/_members/primitives/lib/text/recolor.js +0 -8
  331. package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
  332. package/dist/_members/primitives/lib/text/spec.js +0 -1
  333. package/dist/_members/primitives/lib/text/spec.js.map +0 -1
  334. package/dist/_members/primitives/lib/text/stage.js +0 -8
  335. package/dist/_members/primitives/lib/text/stage.js.map +0 -1
  336. package/dist/_members/primitives/lib/text/typeface.js +0 -8
  337. package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
  338. package/dist/_members/primitives/lib/tokens.js +0 -24
  339. package/dist/_members/primitives/lib/tokens.js.map +0 -1
  340. package/dist/_members/primitives/lib/types.js +0 -1
  341. package/dist/_members/primitives/lib/types.js.map +0 -1
  342. package/dist/_members/primitives/params-required.json +0 -153
  343. package/dist/_members/primitives/scenes/index.js +0 -25
  344. package/dist/_members/primitives/scenes/index.js.map +0 -1
  345. package/dist/_members/primitives/subject-foreground/index.js +0 -30
  346. package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
  347. package/dist/_members/primitives/text/index.js +0 -57
  348. package/dist/_members/primitives/text/index.js.map +0 -1
  349. package/dist/_members/primitives/transitions/index.js +0 -67
  350. package/dist/_members/primitives/transitions/index.js.map +0 -1
  351. package/dist/_members/primitives/ui-blocks/index.js +0 -76
  352. package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
  353. package/dist/_members/primitives/version-map.json +0 -105
  354. package/dist/_members/primitives/workspace.js +0 -60
  355. package/dist/_members/primitives/workspace.js.map +0 -1
@@ -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
- }