@encorekit/web-sdk 2.3.0 → 2.4.0

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 (265) hide show
  1. package/README.md +66 -1
  2. package/dist/cjs/index.cjs +1 -1
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/preview.cjs +2 -0
  5. package/dist/cjs/preview.cjs.map +1 -0
  6. package/dist/cjs/react.cjs +1 -1
  7. package/dist/cjs/react.cjs.map +1 -1
  8. package/dist/esm/chunks/ClaimReminder-DFyrm5bJ.js +2 -0
  9. package/dist/esm/chunks/ClaimReminder-DFyrm5bJ.js.map +1 -0
  10. package/dist/esm/chunks/GiftsButton-B0lVB463.js +2 -0
  11. package/dist/esm/chunks/GiftsButton-B0lVB463.js.map +1 -0
  12. package/dist/esm/chunks/TriggerHost-CNTiNrTH.js +2 -0
  13. package/dist/esm/chunks/TriggerHost-CNTiNrTH.js.map +1 -0
  14. package/dist/esm/chunks/autoPops-CngtK_R0.js +2 -0
  15. package/dist/esm/chunks/autoPops-CngtK_R0.js.map +1 -0
  16. package/dist/esm/chunks/customClaim-B4uj-aOc.js +2 -0
  17. package/dist/esm/chunks/customClaim-B4uj-aOc.js.map +1 -0
  18. package/dist/esm/chunks/eligibility-BY7fL8Ve.js +2 -0
  19. package/dist/esm/chunks/eligibility-BY7fL8Ve.js.map +1 -0
  20. package/dist/esm/chunks/index-CaBSqauy.js +2 -0
  21. package/dist/esm/chunks/index-CaBSqauy.js.map +1 -0
  22. package/dist/esm/chunks/lookValues-B9z2VWpH.js +2 -0
  23. package/dist/esm/chunks/lookValues-B9z2VWpH.js.map +1 -0
  24. package/dist/esm/chunks/sduiView-Ds7QtFId.js +2 -0
  25. package/dist/esm/chunks/sduiView-Ds7QtFId.js.map +1 -0
  26. package/dist/esm/chunks/spot-DkKMLpB-.js +2 -0
  27. package/dist/esm/chunks/spot-DkKMLpB-.js.map +1 -0
  28. package/dist/esm/chunks/template-B9p4CbPD.js +2 -0
  29. package/dist/esm/chunks/template-B9p4CbPD.js.map +1 -0
  30. package/dist/esm/chunks/textSlots-BnwxUg9V.js +2 -0
  31. package/dist/esm/chunks/textSlots-BnwxUg9V.js.map +1 -0
  32. package/dist/esm/chunks/timers-Bva4yoGM.js +2 -0
  33. package/dist/esm/chunks/timers-Bva4yoGM.js.map +1 -0
  34. package/dist/esm/index.js +1 -1
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/preview.js +2 -0
  37. package/dist/esm/preview.js.map +1 -0
  38. package/dist/esm/react.js +1 -1
  39. package/dist/esm/react.js.map +1 -1
  40. package/dist/umd/encore.min.js +1 -1
  41. package/dist/umd/encore.min.js.map +1 -1
  42. package/package.json +9 -1
  43. package/types/analytics/DiagnosticsOutbox.d.ts +1 -0
  44. package/types/analytics/DiagnosticsOutbox.d.ts.map +1 -1
  45. package/types/analytics/events.d.ts +105 -5
  46. package/types/analytics/events.d.ts.map +1 -1
  47. package/types/analytics/models.d.ts +2 -0
  48. package/types/analytics/models.d.ts.map +1 -1
  49. package/types/analytics/transport.d.ts +6 -0
  50. package/types/analytics/transport.d.ts.map +1 -1
  51. package/types/api/APIClient.d.ts +58 -3
  52. package/types/api/APIClient.d.ts.map +1 -1
  53. package/types/api/contract.d.ts +4 -1
  54. package/types/api/contract.d.ts.map +1 -1
  55. package/types/api/generated/types.d.ts +420 -39
  56. package/types/api/generated/types.d.ts.map +1 -1
  57. package/types/api/models.d.ts +18 -2
  58. package/types/api/models.d.ts.map +1 -1
  59. package/types/api/offerBuilder.d.ts +10 -4
  60. package/types/api/offerBuilder.d.ts.map +1 -1
  61. package/types/core/Encore.d.ts +145 -3
  62. package/types/core/Encore.d.ts.map +1 -1
  63. package/types/core/OfferManager.d.ts +25 -3
  64. package/types/core/OfferManager.d.ts.map +1 -1
  65. package/types/core/PlacementBuilder.d.ts +6 -1
  66. package/types/core/PlacementBuilder.d.ts.map +1 -1
  67. package/types/core/SignalManager.d.ts.map +1 -1
  68. package/types/core/StorageManager.d.ts +3 -2
  69. package/types/core/StorageManager.d.ts.map +1 -1
  70. package/types/core/StrictUnlockReconciler.d.ts +1 -1
  71. package/types/core/StrictUnlockReconciler.d.ts.map +1 -1
  72. package/types/core/claimHandle.d.ts +44 -0
  73. package/types/core/claimHandle.d.ts.map +1 -0
  74. package/types/core/claimLog.d.ts +102 -0
  75. package/types/core/claimLog.d.ts.map +1 -0
  76. package/types/core/claimRefusal.d.ts +3 -0
  77. package/types/core/claimRefusal.d.ts.map +1 -0
  78. package/types/core/claimStatusCheck.d.ts +62 -0
  79. package/types/core/claimStatusCheck.d.ts.map +1 -0
  80. package/types/core/giftVariant.d.ts +5 -0
  81. package/types/core/giftVariant.d.ts.map +1 -1
  82. package/types/core/hostDisplay.d.ts +9 -2
  83. package/types/core/hostDisplay.d.ts.map +1 -1
  84. package/types/core/sduiVariables.d.ts +20 -0
  85. package/types/core/sduiVariables.d.ts.map +1 -0
  86. package/types/core/strings.d.ts +114 -0
  87. package/types/core/strings.d.ts.map +1 -0
  88. package/types/core/unlockCode.d.ts +8 -1
  89. package/types/core/unlockCode.d.ts.map +1 -1
  90. package/types/core/userKeys.d.ts +7 -0
  91. package/types/core/userKeys.d.ts.map +1 -0
  92. package/types/core/version.d.ts +1 -1
  93. package/types/experiments/ExposureOutbox.d.ts +1 -0
  94. package/types/experiments/ExposureOutbox.d.ts.map +1 -1
  95. package/types/preview.d.ts +51 -0
  96. package/types/preview.d.ts.map +1 -0
  97. package/types/react.d.ts +53 -1
  98. package/types/react.d.ts.map +1 -1
  99. package/types/sdui/actions.d.ts +93 -0
  100. package/types/sdui/actions.d.ts.map +1 -0
  101. package/types/sdui/bindings.d.ts +63 -0
  102. package/types/sdui/bindings.d.ts.map +1 -0
  103. package/types/sdui/compile.d.ts +88 -0
  104. package/types/sdui/compile.d.ts.map +1 -0
  105. package/types/sdui/conditions.d.ts +22 -0
  106. package/types/sdui/conditions.d.ts.map +1 -0
  107. package/types/sdui/context.d.ts +132 -0
  108. package/types/sdui/context.d.ts.map +1 -0
  109. package/types/sdui/countdown.d.ts +31 -0
  110. package/types/sdui/countdown.d.ts.map +1 -0
  111. package/types/sdui/decode.d.ts +35 -0
  112. package/types/sdui/decode.d.ts.map +1 -0
  113. package/types/sdui/deps.d.ts +43 -0
  114. package/types/sdui/deps.d.ts.map +1 -0
  115. package/types/sdui/dominantColor.d.ts +24 -0
  116. package/types/sdui/dominantColor.d.ts.map +1 -0
  117. package/types/sdui/elements/confetti.d.ts +38 -0
  118. package/types/sdui/elements/confetti.d.ts.map +1 -0
  119. package/types/sdui/elements/content.d.ts +27 -0
  120. package/types/sdui/elements/content.d.ts.map +1 -0
  121. package/types/sdui/elements/interactive.d.ts +48 -0
  122. package/types/sdui/elements/interactive.d.ts.map +1 -0
  123. package/types/sdui/elements/layout.d.ts +41 -0
  124. package/types/sdui/elements/layout.d.ts.map +1 -0
  125. package/types/sdui/elements/marquee.d.ts +17 -0
  126. package/types/sdui/elements/marquee.d.ts.map +1 -0
  127. package/types/sdui/elements/progress.d.ts +10 -0
  128. package/types/sdui/elements/progress.d.ts.map +1 -0
  129. package/types/sdui/elements/shared.d.ts +138 -0
  130. package/types/sdui/elements/shared.d.ts.map +1 -0
  131. package/types/sdui/elements/symbols.d.ts +22 -0
  132. package/types/sdui/elements/symbols.d.ts.map +1 -0
  133. package/types/sdui/elements/triggerText.d.ts +55 -0
  134. package/types/sdui/elements/triggerText.d.ts.map +1 -0
  135. package/types/sdui/host.d.ts +274 -0
  136. package/types/sdui/host.d.ts.map +1 -0
  137. package/types/sdui/inlineMarkup.d.ts +22 -0
  138. package/types/sdui/inlineMarkup.d.ts.map +1 -0
  139. package/types/sdui/lookValues.d.ts +50 -0
  140. package/types/sdui/lookValues.d.ts.map +1 -0
  141. package/types/sdui/model.d.ts +130 -0
  142. package/types/sdui/model.d.ts.map +1 -0
  143. package/types/sdui/motion.d.ts +37 -0
  144. package/types/sdui/motion.d.ts.map +1 -0
  145. package/types/sdui/precheck.d.ts +94 -0
  146. package/types/sdui/precheck.d.ts.map +1 -0
  147. package/types/sdui/scrollMath.d.ts +32 -0
  148. package/types/sdui/scrollMath.d.ts.map +1 -0
  149. package/types/sdui/style.d.ts +99 -0
  150. package/types/sdui/style.d.ts.map +1 -0
  151. package/types/sdui/triggerKit.d.ts +24 -0
  152. package/types/sdui/triggerKit.d.ts.map +1 -0
  153. package/types/sdui/unrunnable.d.ts +11 -0
  154. package/types/sdui/unrunnable.d.ts.map +1 -0
  155. package/types/sdui/vocabulary.d.ts +119 -0
  156. package/types/sdui/vocabulary.d.ts.map +1 -0
  157. package/types/triggers/claimReminder/ClaimReminder.d.ts +65 -0
  158. package/types/triggers/claimReminder/ClaimReminder.d.ts.map +1 -0
  159. package/types/triggers/claimReminder/bindings.d.ts +40 -0
  160. package/types/triggers/claimReminder/bindings.d.ts.map +1 -0
  161. package/types/triggers/claimReminder/config.d.ts +56 -0
  162. package/types/triggers/claimReminder/config.d.ts.map +1 -0
  163. package/types/triggers/claimReminder/eligibility.d.ts +37 -0
  164. package/types/triggers/claimReminder/eligibility.d.ts.map +1 -0
  165. package/types/triggers/claimReminder/servedWindow.d.ts +15 -0
  166. package/types/triggers/claimReminder/servedWindow.d.ts.map +1 -0
  167. package/types/triggers/claimReminder/source.d.ts +29 -0
  168. package/types/triggers/claimReminder/source.d.ts.map +1 -0
  169. package/types/triggers/giftsButton/GiftsButton.d.ts +60 -0
  170. package/types/triggers/giftsButton/GiftsButton.d.ts.map +1 -0
  171. package/types/triggers/giftsButton/config.d.ts +53 -0
  172. package/types/triggers/giftsButton/config.d.ts.map +1 -0
  173. package/types/triggers/giftsButton/spot.d.ts +54 -0
  174. package/types/triggers/giftsButton/spot.d.ts.map +1 -0
  175. package/types/triggers/host/TriggerHost.d.ts +127 -0
  176. package/types/triggers/host/TriggerHost.d.ts.map +1 -0
  177. package/types/triggers/host/autoPops.d.ts +16 -0
  178. package/types/triggers/host/autoPops.d.ts.map +1 -0
  179. package/types/triggers/host/configCache.d.ts +29 -0
  180. package/types/triggers/host/configCache.d.ts.map +1 -0
  181. package/types/triggers/host/customClaim.d.ts +85 -0
  182. package/types/triggers/host/customClaim.d.ts.map +1 -0
  183. package/types/triggers/host/dismissStore.d.ts +37 -0
  184. package/types/triggers/host/dismissStore.d.ts.map +1 -0
  185. package/types/triggers/host/readThrottle.d.ts +15 -0
  186. package/types/triggers/host/readThrottle.d.ts.map +1 -0
  187. package/types/triggers/host/registry.d.ts +17 -0
  188. package/types/triggers/host/registry.d.ts.map +1 -0
  189. package/types/triggers/host/sduiView.d.ts +31 -0
  190. package/types/triggers/host/sduiView.d.ts.map +1 -0
  191. package/types/triggers/host/template.d.ts +28 -0
  192. package/types/triggers/host/template.d.ts.map +1 -0
  193. package/types/triggers/host/textSlots.d.ts +35 -0
  194. package/types/triggers/host/textSlots.d.ts.map +1 -0
  195. package/types/triggers/host/theme.d.ts +87 -0
  196. package/types/triggers/host/theme.d.ts.map +1 -0
  197. package/types/triggers/host/timers.d.ts +11 -0
  198. package/types/triggers/host/timers.d.ts.map +1 -0
  199. package/types/triggers/host/types.d.ts +278 -0
  200. package/types/triggers/host/types.d.ts.map +1 -0
  201. package/types/triggers/host/wire.d.ts +55 -0
  202. package/types/triggers/host/wire.d.ts.map +1 -0
  203. package/types/triggers/preview.d.ts +78 -0
  204. package/types/triggers/preview.d.ts.map +1 -0
  205. package/types/triggers/request.d.ts +53 -0
  206. package/types/triggers/request.d.ts.map +1 -0
  207. package/types/types.d.ts +329 -1
  208. package/types/types.d.ts.map +1 -1
  209. package/types/ui/ClaimScreen.d.ts +1 -1
  210. package/types/ui/ClaimScreen.d.ts.map +1 -1
  211. package/types/ui/CodeUnlock.d.ts +12 -2
  212. package/types/ui/CodeUnlock.d.ts.map +1 -1
  213. package/types/ui/GiftHero.d.ts.map +1 -1
  214. package/types/ui/GiftList.d.ts.map +1 -1
  215. package/types/ui/GiftPicker.d.ts.map +1 -1
  216. package/types/ui/GiftPickerHero.d.ts.map +1 -1
  217. package/types/ui/GiftReveal.d.ts.map +1 -1
  218. package/types/ui/GiftSheet.d.ts +5 -5
  219. package/types/ui/GiftSheet.d.ts.map +1 -1
  220. package/types/ui/GiftUnwrap.d.ts.map +1 -1
  221. package/types/ui/OfferCard.d.ts.map +1 -1
  222. package/types/ui/OfferCarousel.d.ts.map +1 -1
  223. package/types/ui/OfferModal.d.ts +31 -0
  224. package/types/ui/OfferModal.d.ts.map +1 -1
  225. package/types/ui/PrimerScreen.d.ts +2 -0
  226. package/types/ui/PrimerScreen.d.ts.map +1 -1
  227. package/types/ui/RedemptionScreen.d.ts +5 -0
  228. package/types/ui/RedemptionScreen.d.ts.map +1 -1
  229. package/types/ui/RewardActions.d.ts.map +1 -1
  230. package/types/ui/RewardCard.d.ts.map +1 -1
  231. package/types/ui/SduiRewardSurface.d.ts +145 -0
  232. package/types/ui/SduiRewardSurface.d.ts.map +1 -0
  233. package/types/ui/Tooltip.d.ts.map +1 -1
  234. package/types/ui/brandComponents.d.ts.map +1 -1
  235. package/types/ui/brandTint.d.ts.map +1 -1
  236. package/types/ui/colorScheme.d.ts +15 -0
  237. package/types/ui/colorScheme.d.ts.map +1 -0
  238. package/types/ui/covered.d.ts +12 -0
  239. package/types/ui/covered.d.ts.map +1 -0
  240. package/types/ui/giftCategoryGroups.d.ts +13 -0
  241. package/types/ui/giftCategoryGroups.d.ts.map +1 -1
  242. package/types/ui/giftCopy.d.ts +14 -9
  243. package/types/ui/giftCopy.d.ts.map +1 -1
  244. package/types/ui/giftUnwrapCopy.d.ts.map +1 -1
  245. package/types/ui/imageURL.d.ts +44 -0
  246. package/types/ui/imageURL.d.ts.map +1 -0
  247. package/types/ui/impressionGate.d.ts +9 -0
  248. package/types/ui/impressionGate.d.ts.map +1 -1
  249. package/types/ui/offerBadge.d.ts.map +1 -1
  250. package/types/ui/rewardSurface.d.ts +11 -1
  251. package/types/ui/rewardSurface.d.ts.map +1 -1
  252. package/types/ui/sduiTheme.d.ts +48 -0
  253. package/types/ui/sduiTheme.d.ts.map +1 -0
  254. package/types/ui/sheetDetents.d.ts +28 -0
  255. package/types/ui/sheetDetents.d.ts.map +1 -0
  256. package/types/ui/styles.d.ts +11 -8
  257. package/types/ui/styles.d.ts.map +1 -1
  258. package/types/ui/termsLine.d.ts +3 -3
  259. package/types/ui/termsLine.d.ts.map +1 -1
  260. package/types/ui/toast.d.ts +11 -0
  261. package/types/ui/toast.d.ts.map +1 -0
  262. package/types/utils/logger.d.ts +10 -0
  263. package/types/utils/logger.d.ts.map +1 -1
  264. package/types/utils/text.d.ts +17 -0
  265. package/types/utils/text.d.ts.map +1 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * The decoded SDUI tree.
3
+ *
4
+ * WHAT THIS COMMIT OWNS, and what it deliberately does not. The decoder proves
5
+ * the wire vocabulary and the STRUCTURE: which element each node is, its
6
+ * children, its condition, its action, its data source, its style keys. Leaf
7
+ * visual props (a text's font, an image's contentMode) stay in `props` as raw
8
+ * values, because the element that reads them does not exist yet. Each later
9
+ * element commit narrows what it reads out of `props`; none of them re-decodes
10
+ * the tree.
11
+ *
12
+ * `SduiNode` is a single shape with an `element` tag rather than a 22-arm
13
+ * discriminated union. The union looks tidier and is wrong for this engine: the
14
+ * compile pass in commit 3 walks EVERY node the same way (style, children,
15
+ * bindings) and dispatches on `element` only at the leaf, so a union would force
16
+ * 22 near-identical branches through the generic walker.
17
+ */
18
+ import type { SduiActionType, SduiAlignment, SduiConditionName, SduiDataSource, SduiElementName, SduiOfferAttribute, SduiSemanticColor, SduiStyleProperty } from "./vocabulary";
19
+ /**
20
+ * A value operand. `literal` covers both wire forms: a bare string, and
21
+ * `{"value": "..."}`.
22
+ */
23
+ export type SduiValueRef = {
24
+ kind: "literal";
25
+ value: string;
26
+ } | {
27
+ kind: "binding";
28
+ key: string;
29
+ } | {
30
+ kind: "state";
31
+ } | {
32
+ kind: "offerIndex";
33
+ } | {
34
+ kind: "offerAttribute";
35
+ attribute: SduiOfferAttribute;
36
+ } | {
37
+ kind: "categoryName";
38
+ };
39
+ /**
40
+ * A condition. `operands` carries nested conditions for `and`/`or`/`not`;
41
+ * everything else carries its own payload in `payload`.
42
+ *
43
+ * `not` is normalised to a single-element `operands`, so a combinator always
44
+ * reads the same way.
45
+ */
46
+ export interface SduiCondition {
47
+ readonly name: SduiConditionName;
48
+ readonly operands?: readonly SduiCondition[];
49
+ readonly payload?: unknown;
50
+ }
51
+ /** An action. Both wire forms decode to this; `params` is empty for the bare string. */
52
+ export interface SduiAction {
53
+ readonly type: SduiActionType;
54
+ readonly params: Readonly<Record<string, unknown>>;
55
+ /** `setValueRef`, decoded. A malformed ref fails the variant, as in Swift. */
56
+ readonly valueRef?: SduiValueRef;
57
+ }
58
+ /** A colour operand. The four arms are `hex`, `semantic`, `appearance`, `binding`. */
59
+ export type SduiColor = {
60
+ kind: "hex";
61
+ hex: string;
62
+ opacity?: number;
63
+ } | {
64
+ kind: "semantic";
65
+ semantic: SduiSemanticColor;
66
+ } | {
67
+ kind: "appearance";
68
+ appearance: string;
69
+ } | {
70
+ kind: "binding";
71
+ binding: string;
72
+ };
73
+ /**
74
+ * Style as decoded: known keys only, values still raw.
75
+ *
76
+ * Commit 4 owns turning these into CSS. Keeping the values raw here means the
77
+ * style commit can change its representation without touching the decoder.
78
+ */
79
+ export type SduiStyle = Partial<Record<SduiStyleProperty, unknown>> & {
80
+ /** Decoded, because both are child elements rather than values. */
81
+ readonly overlay?: SduiNode;
82
+ readonly backgroundElement?: SduiNode;
83
+ };
84
+ /** One node of the tree. */
85
+ export interface SduiNode {
86
+ readonly element: SduiElementName;
87
+ /** Raw element payload, minus the keys promoted onto this interface. */
88
+ readonly props: Readonly<Record<string, unknown>>;
89
+ readonly style?: SduiStyle;
90
+ readonly children?: readonly SduiNode[];
91
+ /** `button`, `scrollView` and `group` carry a single child under `content`. */
92
+ readonly content?: SduiNode;
93
+ /** `forEach` only. Its repeated body, named `itemTemplate` on the wire. */
94
+ readonly itemTemplate?: SduiNode;
95
+ /** `forEach` only. Rows failing it are not drawn. */
96
+ readonly filter?: SduiCondition;
97
+ /** `toggle` only, and REQUIRED there in Swift. */
98
+ readonly label?: SduiNode;
99
+ readonly alignment?: SduiAlignment;
100
+ /** `conditional` only. */
101
+ readonly condition?: SduiCondition;
102
+ readonly ifTrue?: SduiNode;
103
+ readonly ifFalse?: SduiNode;
104
+ /** `forEach` only. */
105
+ readonly dataSource?: SduiDataSource;
106
+ /** `button` and `slideButton` only. */
107
+ readonly action?: SduiAction;
108
+ /** Trigger vocabulary, `asyncImage` only: drawn while loading, with no url, and on error. */
109
+ readonly fallback?: SduiNode;
110
+ /** Trigger vocabulary, `marquee` only: animate only while this holds. */
111
+ readonly animateWhen?: SduiCondition;
112
+ }
113
+ /** A whole variant template. */
114
+ export interface SduiTemplate {
115
+ readonly version?: string;
116
+ readonly useCase?: string;
117
+ readonly root: SduiNode;
118
+ /** Sheet chrome the root does not describe. Raw: the host reads it, not the engine. */
119
+ readonly presentation: Readonly<Record<string, unknown>>;
120
+ /**
121
+ * Per-state actions, keyed by state name.
122
+ *
123
+ * Decoded rather than passed through raw, so an action inside an `onEnter` is
124
+ * held to the same vocabulary a button's is.
125
+ */
126
+ readonly stateActions?: Readonly<Record<string, {
127
+ onEnter?: SduiAction;
128
+ }>>;
129
+ }
130
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/sdui/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Trigger motion (contract §3.3 G3 `style.loop`, §3.4 G4 `marquee`) as CSS
3
+ * keyframes generated per element.
4
+ *
5
+ * Trigger mounts only: the host creates a {@link MotionSheet} for an inline
6
+ * mount and nothing else does, so a sheet never animates anything new. The
7
+ * keyframes live in one `<style>` inside the mount, named per element, so they
8
+ * neither collide across mounts nor outlive the mount they belong to.
9
+ *
10
+ * Reduced motion, and a pause before a loop has ever run, are static poses written
11
+ * inline, computed here because the contract fixes WHICH pose (the `reducedMotion`
12
+ * pose, or progress 0 with `phaseOffset`). A pause after the loop has run holds
13
+ * wherever it is (`animation-play-state: paused`) and resumes from there.
14
+ */
15
+ import type { CompileServices } from "./compile";
16
+ /** The `@keyframes` of one mount, one rule per owning element. */
17
+ export declare class MotionSheet {
18
+ #private;
19
+ readonly element: HTMLStyleElement;
20
+ constructor(doc: Document);
21
+ /** A keyframes name no other element, mount or SDK copy uses. */
22
+ name(): string;
23
+ /** Set (or replace) `name`'s rule. Rules of owners no longer in the mount are dropped. */
24
+ define(name: string, owner: Element, css: string): void;
25
+ /** Drop every rule and the `<style>` itself. */
26
+ destroy(): void;
27
+ }
28
+ /**
29
+ * Run `style.loop` on `el`: forever while the host lets it, held where it is while
30
+ * paused after it has run, a frozen pose under reduce motion or paused before it ran. `base` is the element's own transform and
31
+ * opacity from `planStyle`, which the loop composes after.
32
+ */
33
+ export declare function attachLoop(el: HTMLElement, raw: unknown, base: {
34
+ readonly transform: string;
35
+ readonly opacity: string;
36
+ }, sheet: MotionSheet, services: CompileServices): void;
37
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../src/sdui/motion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAMjD,kEAAkE;AAClE,qBAAa,WAAW;;IACtB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAKvB,GAAG,EAAE,QAAQ;IASzB,iEAAiE;IACjE,IAAI,IAAI,MAAM;IAKd,0FAA0F;IAC1F,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBvD,gDAAgD;IAChD,OAAO,IAAI,IAAI;CAIhB;AAqJD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC9D,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,eAAe,GACxB,IAAI,CA8CN"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * The strict pre-check a trigger host runs on the raw template before it hands
3
+ * the tree to the engine (trigger SDUI vocabulary contract v1, §5).
4
+ *
5
+ * The decoder is strict about element names, conditions and enum values, and
6
+ * lenient about FIELDS: an unknown field is ignored so the backend can roll one
7
+ * out ahead of the clients. Behind that, an unknown action decodes to a dead
8
+ * button and an unknown symbol draws nothing. For a sheet that trade is right.
9
+ * For a trigger it is not: a trigger that draws wrong still counts an
10
+ * impression, so a broken file would read as a low click rate. So a trigger tree
11
+ * may use only `TRIGGER_ALLOW`, the contract's list, and anything else makes it
12
+ * unrenderable: the host draws nothing and reports `unrenderable`.
13
+ *
14
+ * Mirrors the contract's `check-fixtures.py`, which the backend validator runs
15
+ * at sync and in CI. Nested value shapes (font, frame, padding, loop keyframes,
16
+ * countdown, value, shadow) are left to the decoder.
17
+ */
18
+ export declare const TRIGGER_ALLOW: {
19
+ readonly elements: readonly ["text", "systemImage", "asyncImage", "button", "vStack", "hStack", "zStack", "spacer", "shape", "gradient", "forEach", "conditional", "group", "empty", "progress", "marquee"];
20
+ readonly fields: {
21
+ readonly text: readonly ["text", "countdown", "font", "color", "lineLimit", "minimumScaleFactor", "multilineAlignment", "segments", "scaleGroup", "style"];
22
+ readonly systemImage: readonly ["systemName", "font", "color", "style"];
23
+ readonly asyncImage: readonly ["url", "contentMode", "placeholderColor", "fallback", "style"];
24
+ readonly button: readonly ["content", "action", "disabled", "accessibilityLabel", "accessibilityHint", "pressedStyle", "style"];
25
+ readonly vStack: readonly ["alignment", "spacing", "children", "style"];
26
+ readonly hStack: readonly ["alignment", "spacing", "children", "style"];
27
+ readonly zStack: readonly ["alignment", "children", "style"];
28
+ readonly spacer: readonly ["minLength"];
29
+ readonly shape: readonly ["type", "cornerRadius", "fillColor", "strokeColor", "strokeWidth", "style"];
30
+ readonly gradient: readonly ["type", "direction", "colors", "startRadius", "endRadius", "style"];
31
+ readonly forEach: readonly ["dataSource", "list", "itemTemplate", "limit", "offset"];
32
+ readonly conditional: readonly ["condition", "ifTrue", "ifFalse"];
33
+ readonly group: readonly ["content", "style"];
34
+ readonly empty: readonly [];
35
+ readonly progress: readonly ["value", "fillColor", "trackColor", "style"];
36
+ readonly marquee: readonly ["axis", "duration", "reverse", "spacing", "animateWhen", "content", "style"];
37
+ };
38
+ readonly style: readonly ["padding", "frame", "cornerRadius", "backgroundColor", "shadow", "opacity", "clipShape", "clipped", "borderWidth", "borderColor", "offset", "scale", "rotation", "overlay", "backgroundElement", "fixedSize", "layoutPriority", "stateStyles", "stateAnimation", "loop", "layoutDirection", "accessibilityHidden"];
39
+ readonly actions: readonly ["trigger", "dismissTrigger"];
40
+ readonly targets: readonly ["card", "arrow", "button"];
41
+ readonly symbols: readonly ["gift", "gift.fill", "chevron.forward", "arrow.forward", "xmark"];
42
+ readonly conditions: readonly ["hasValue", "valueEquals", "stateEquals", "and", "or", "not", "listCountAtLeast"];
43
+ readonly appearance: readonly ["background", "onBackground", "surface", "onSurface", "accent", "onAccent", "inkOnAccent", "border", "secondary", "track", "backgroundEnd"];
44
+ readonly countdownFormats: readonly ["clock", "hoursMinutes", "hours", "minutes", "seconds", "largestUnit"];
45
+ readonly curves: readonly ["linear", "easeIn", "easeOut", "easeInOut"];
46
+ readonly shapeTypes: readonly ["rectangle", "roundedRectangle", "circle", "capsule", "ellipse"];
47
+ readonly dataSources: readonly ["hostList"];
48
+ readonly values: {
49
+ readonly giftsButton: readonly ["title", "subtitle", "cta", "layout", "icon", "appIconUrl", "offersTitle"];
50
+ readonly claimReminder: readonly ["title", "subtitle", "cta", "layout", "dismiss", "hours", "minutes", "seconds", "advertiserName", "advertiserInitial", "advertiserLogoUrl", "accessibilityTitle", "icon", "appIconUrl", "offerTitle", "titleMany", "claimCount", "perk", "accessibilityHint", "left"];
51
+ };
52
+ readonly times: {
53
+ readonly giftsButton: readonly [];
54
+ readonly claimReminder: readonly ["start", "deadline"];
55
+ };
56
+ readonly lists: {
57
+ readonly giftsButton: readonly ["offerLogos", "offerLogosA", "offerLogosB"];
58
+ readonly claimReminder: readonly ["claims", "marqueeLogos", "marqueeLogosA", "marqueeLogosB"];
59
+ };
60
+ readonly itemFields: {
61
+ readonly claims: readonly ["transactionId", "advertiserName", "advertiserInitial", "advertiserLogoUrl"];
62
+ readonly marqueeLogos: readonly ["logoUrl"];
63
+ readonly marqueeLogosA: readonly ["logoUrl"];
64
+ readonly marqueeLogosB: readonly ["logoUrl"];
65
+ readonly offerLogos: readonly ["logoUrl", "advertiserName", "advertiserInitial"];
66
+ readonly offerLogosA: readonly ["logoUrl", "advertiserName", "advertiserInitial"];
67
+ readonly offerLogosB: readonly ["logoUrl", "advertiserName", "advertiserInitial"];
68
+ };
69
+ readonly behavior: Readonly<Record<string, Readonly<Record<string, readonly string[] | "layout">>>>;
70
+ readonly ranges: Readonly<Record<string, readonly (number | string)[]>>;
71
+ readonly renders: Readonly<Record<string, readonly string[]>>;
72
+ };
73
+ /**
74
+ * The next-step rules a look carries, as this build reads them: each of the trigger's steps
75
+ * with its default, overridden by a value the look sets that the step allows. An unknown
76
+ * step, a value the step does not allow, or a `behavior` that is not an object is skipped,
77
+ * so that step keeps its default; none of them fails the look.
78
+ */
79
+ export declare function effectiveBehavior(template: Record<string, unknown>, trigger: string): Record<string, string>;
80
+ export declare const isPinnableLayout: (value: unknown) => value is string;
81
+ export type TriggerPrecheckId = keyof typeof TRIGGER_ALLOW.values;
82
+ export interface PrecheckFailure {
83
+ /** What is wrong, e.g. `style key "blur"`. */
84
+ readonly reason: string;
85
+ /** Where, as a JSON path from the template. */
86
+ readonly path: string;
87
+ }
88
+ /**
89
+ * The first thing in a trigger template this build must not render, or undefined.
90
+ * `trigger` is the trigger the host is mounting, whose values, times and lists
91
+ * the tree may name.
92
+ */
93
+ export declare function precheckTrigger(template: unknown, trigger: TriggerPrecheckId): PrecheckFailure | undefined;
94
+ //# sourceMappingURL=precheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precheck.d.ts","sourceRoot":"","sources":["../../src/sdui/precheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA4EnB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAmChF,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;sBAEwB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACtH,CAAC;AAIX;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc5G;AAQD,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACiC,CAAC;AAY7F,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,aAAa,CAAC,MAAM,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAoCD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,iBAAiB,GACzB,eAAe,GAAG,SAAS,CAkZ7B"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Scroll-driven visual maths, ported from Android's `SduiScrollMath`.
3
+ *
4
+ * Swift gets this free from `.scrollTransition(.interactive)`, whose contract is
5
+ * that `phase` is -1 at the leading edge, 0 at centre and +1 at the trailing
6
+ * edge, and that magnitude is used so both sides converge to identity at centre.
7
+ * That contract is the specification; the arithmetic below is Android's way of
8
+ * meeting it without such a modifier, which is the position web is in too.
9
+ *
10
+ * Pure functions on purpose. `phase` and `centreDistance` come from Compose's
11
+ * scroll state on Android and have to be COMPUTED here from scroll offset and
12
+ * element geometry, which is the one part that does not port.
13
+ */
14
+ export interface ScrollTransitionSpec {
15
+ readonly rotation?: number;
16
+ readonly scale?: number;
17
+ readonly opacity?: number;
18
+ readonly yOffset?: number;
19
+ }
20
+ export declare const scrollTransitionScale: (t: ScrollTransitionSpec, phase: number) => number;
21
+ export declare const scrollTransitionOpacity: (t: ScrollTransitionSpec, phase: number) => number;
22
+ /** Signed, not magnitude: the two sides rotate opposite ways. */
23
+ export declare const scrollTransitionRotation: (t: ScrollTransitionSpec, phase: number) => number;
24
+ export declare const scrollTransitionYOffset: (t: ScrollTransitionSpec, phase: number) => number;
25
+ /** Distance 0 is centred. Values outside 0..1 clamp. */
26
+ export declare function scrollFadeOpacity(distance: number, centeredOpacity?: number, offCenterOpacity?: number): number;
27
+ /**
28
+ * Phase for an element inside a horizontal scroller: -1 leading, 0 centred,
29
+ * +1 trailing. This is the input Compose supplies and the DOM does not.
30
+ */
31
+ export declare function phaseOf(elementCentre: number, viewportCentre: number, halfSpan: number): number;
32
+ //# sourceMappingURL=scrollMath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollMath.d.ts","sourceRoot":"","sources":["../../src/sdui/scrollMath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD,eAAO,MAAM,qBAAqB,GAChC,GAAG,oBAAoB,EACvB,OAAO,MAAM,KACZ,MAAqD,CAAC;AAEzD,eAAO,MAAM,uBAAuB,GAClC,GAAG,oBAAoB,EACvB,OAAO,MAAM,KACZ,MAAuD,CAAC;AAE3D,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,GACnC,GAAG,oBAAoB,EACvB,OAAO,MAAM,KACZ,MAAmC,CAAC;AAEvC,eAAO,MAAM,uBAAuB,GAClC,GAAG,oBAAoB,EACvB,OAAO,MAAM,KACZ,MAA6C,CAAC;AAEjD,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,eAAe,SAAI,EACnB,gBAAgB,SAAI,GACnB,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * The 30 wire style properties, as CSS.
3
+ *
4
+ * Three groups, and the split is what makes this layer estimable:
5
+ *
6
+ * - 16 are a direct declaration.
7
+ * - 6 need a wrapper or a pseudo-element, so they return an intent for the
8
+ * element renderer to honour rather than a property.
9
+ * - 8 have no CSS equivalent at all. Four of those are SwiftUI layout
10
+ * concepts, and four are scroll-driven. Each is approximated deliberately
11
+ * and the approximation is named, because a silent near-miss in layout is
12
+ * the hardest kind of parity bug to find later.
13
+ *
14
+ * Values arrive raw from the decoder. Anything reaching CSS goes through
15
+ * `cssSafe`, because a style value is server-supplied.
16
+ */
17
+ import type { SduiStyle } from "./model";
18
+ import type { SduiNode } from "./model";
19
+ /**
20
+ * What the style layer cannot express as a declaration, handed back for the
21
+ * element renderer to build. Keeping these OUT of the CSS map is deliberate:
22
+ * an overlay is a child element, and pretending otherwise is how it ends up
23
+ * silently dropped.
24
+ */
25
+ export interface StructuralIntent {
26
+ /** A node to absolutely position ON TOP of the element. */
27
+ readonly overlay?: SduiNode;
28
+ /** A node to absolutely position BEHIND it. */
29
+ readonly backgroundElement?: SduiNode;
30
+ /** Gradient stroke: no CSS property exists, so a pseudo-element draws it. */
31
+ readonly gradientBorder?: Record<string, unknown>;
32
+ /** Per-state styles, applied by toggling a class so CSS transitions can run. */
33
+ readonly stateStyles?: Record<string, unknown>;
34
+ readonly stateAnimation?: Record<string, unknown>;
35
+ /** Mark this container's CHILDREN as snap targets, not the container itself. */
36
+ readonly scrollTargetLayout?: boolean;
37
+ /** Scroll-driven, so it needs a scroll listener rather than a declaration. */
38
+ readonly scrollTransition?: Record<string, unknown>;
39
+ readonly scrollFade?: Record<string, unknown>;
40
+ /**
41
+ * A corner radius clips the CONTENT, never the shadow (Swift's
42
+ * `SDUISurfaceModifier`). Structural so a re-planned bound colour cannot undo
43
+ * a scroller's own overflow.
44
+ */
45
+ readonly clipContent?: boolean;
46
+ }
47
+ export interface StylePlan {
48
+ /** CSS property to value. Already sanitised. */
49
+ readonly css: Readonly<Record<string, string>>;
50
+ readonly structural: StructuralIntent;
51
+ }
52
+ /**
53
+ * Resolves an SDUI colour operand to a CSS colour string.
54
+ *
55
+ * The resolver is the ONLY place a server-supplied string reaches CSS: every
56
+ * other value here is built by this file out of decoded numbers, so it cannot
57
+ * carry a `;` or a `}`. Wrap any resolver with {@link safeColorResolver} unless
58
+ * it already guarantees an allow-listed colour.
59
+ */
60
+ export type ColorResolver = (raw: unknown,
61
+ /**
62
+ * The live values dictionary. A `binding` colour resolves against it at
63
+ * RENDER time in Swift (`SDUIColor.resolved(in:values:)`), so a resolver with
64
+ * no access to it can never resolve one. `streaksCarousel` binds
65
+ * `selectedOfferDominantColor` on its page indicator and its cards.
66
+ */
67
+ values?: Readonly<Record<string, string>>) => string | undefined;
68
+ /** Wraps a resolver so anything it returns must pass `cssSafe`'s colour grammar. */
69
+ /**
70
+ * The value keys a colour operand reads, so a renderer can depend on them.
71
+ *
72
+ * A `binding` colour resolves at render time, so an element painting one has to
73
+ * re-run when that key moves. Without this the page indicator and any
74
+ * bound-fill shape were painted once at mount and never again.
75
+ */
76
+ export declare function colorBindingKeys(raw: unknown): string[];
77
+ /**
78
+ * Swift's `SDUIColor.Transforms`: lighten, then darken, then opacity, on ANY
79
+ * base form. Authored as sibling keys of `hex`/`semantic`/`appearance`/`binding`.
80
+ *
81
+ * Wrap a resolver that already sanitizes, not the other way round: the colour
82
+ * grammar rejects a nested `color-mix` on purpose, and everything composed here
83
+ * is a number this file clamped, so nothing new can escape the declaration.
84
+ *
85
+ * Transforms on a `fallback` are not applied, only those on the outer object. No
86
+ * served variant authors one, and Swift would apply both.
87
+ */
88
+ export declare function withColorTransforms(css: string | undefined, raw: unknown): string | undefined;
89
+ export declare const safeColorResolver: (inner: ColorResolver) => ColorResolver;
90
+ /**
91
+ * Every value key any colour anywhere in a style object binds.
92
+ *
93
+ * A style resolves its colours through `planStyle`, which ran ONCE with no
94
+ * values, so a bound `backgroundColor`, `borderColor`, shadow or gradient-border
95
+ * stop painted its fallback for ever. `featuredOfferCarousel` binds 31 operands.
96
+ */
97
+ export declare function styleBindingKeys(style: unknown, depth?: number): string[];
98
+ export declare function planStyle(style: SduiStyle | undefined, color: ColorResolver): StylePlan;
99
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/sdui/style.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAcxC;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,OAAO;AACZ;;;;;GAKG;AACH,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACtC,MAAM,GAAG,SAAS,CAAC;AAExB,oFAAoF;AACpF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAcvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,OAAO,GACX,MAAM,GAAG,SAAS,CAYpB;AAQD,eAAO,MAAM,iBAAiB,GAC3B,OAAO,aAAa,KAAG,aAIW,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CASpE;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,KAAK,EAAE,aAAa,GACnB,SAAS,CAiNX"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The engine code only a trigger (inline) mount uses: the `progress` and `marquee`
3
+ * elements, `style.loop`, ticking countdown text, one-line shrink to fit and text scale groups.
4
+ *
5
+ * The engine refers to it by type only. The trigger view (`triggers/host/sduiView.ts`),
6
+ * which loads with the trigger chunk on first mount, imports it and hands it to
7
+ * `mountSduiSurface({ mode: "inline", kit })`, so a page that only shows sheets never
8
+ * downloads any of it.
9
+ */
10
+ import { registerProgressElement } from "./elements/progress";
11
+ import { registerMarqueeElement } from "./elements/marquee";
12
+ import { MotionSheet, attachLoop } from "./motion";
13
+ import { ScaleGroups, countdownText, oneLineFit } from "./elements/triggerText";
14
+ export declare const TRIGGER_KIT: Readonly<{
15
+ registerProgressElement: typeof registerProgressElement;
16
+ registerMarqueeElement: typeof registerMarqueeElement;
17
+ MotionSheet: typeof MotionSheet;
18
+ attachLoop: typeof attachLoop;
19
+ countdownText: typeof countdownText;
20
+ oneLineFit: typeof oneLineFit;
21
+ ScaleGroups: typeof ScaleGroups;
22
+ }>;
23
+ export type TriggerKit = typeof TRIGGER_KIT;
24
+ //# sourceMappingURL=triggerKit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerKit.d.ts","sourceRoot":"","sources":["../../src/sdui/triggerKit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF,eAAO,MAAM,WAAW;;;;;;;;EAQtB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Actions a template needs that web cannot run, as Swift's `templateReferencesIAP`:
3
+ * a template that needs a purchase or a lead falls back to the built-in surface.
4
+ */
5
+ /** The actions no web surface can run. */
6
+ export declare const UNRUNNABLE_ON_WEB: ReadonlySet<string>;
7
+ /** Every action type the raw template names, on a button, a toggle or a state's `onEnter`. */
8
+ export declare function referencedActions(raw: unknown): Set<string>;
9
+ /** The first action the template needs that web cannot run, or undefined. */
10
+ export declare function unrunnableAction(raw: unknown): string | undefined;
11
+ //# sourceMappingURL=unrunnable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unrunnable.d.ts","sourceRoot":"","sources":["../../src/sdui/unrunnable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAGhD,CAAC;AAEH,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAyB3D;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKjE"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * The SDUI wire vocabulary, as the backend actually serves it.
3
+ *
4
+ * 🔴 THE CLOSED SETS ARE THE CONTRACT. An unknown enum VALUE fails the whole
5
+ * config; an unknown FIELD is ignored. That asymmetry is deliberate and is why
6
+ * these live as frozen arrays rather than TypeScript unions alone: a union is
7
+ * erased at runtime, and the decoder has to REJECT at runtime, not just fail to
8
+ * compile. See `decode.ts` for the rule and the reason.
9
+ *
10
+ * Every list here was read off `swift` `origin/main` and cross-checked against
11
+ * `android` `origin/main` on 2026-09-22. The two agree on every value. Swift is
12
+ * canonical where they ever disagree: it is the reference implementation and the
13
+ * vocabulary was designed against it.
14
+ */
15
+ /** 22 element types. The element is a node's single KEY, never a `type` field. */
16
+ export declare const ELEMENTS: readonly ["text", "systemImage", "asyncImage", "asyncVideo", "appIcon", "button", "vStack", "hStack", "zStack", "spacer", "shape", "gradient", "scrollView", "forEach", "conditional", "group", "textField", "toggle", "slideButton", "compactPageIndicator", "confetti", "empty"];
17
+ /** 21 conditions, Swift's full set, diffed name by name. */
18
+ export declare const CONDITIONS: readonly ["hasMultipleOffers", "isCurrentPage", "isCurrentPageBinding", "stateEquals", "valueEquals", "hasValue", "hasIntroOffer", "hasFreeTrial", "isSelectedOffer", "and", "or", "not", "equals", "hasOfferAttribute", "hasOfferProperty", "hasInstructionSubtitle", "hasInstructionImage", "isFirstOffer", "isLastOffer", "isMiddleOffer", "offerIndexEquals"];
19
+ /** Conditions that take nested conditions rather than a leaf operand. */
20
+ export declare const COMBINATORS: readonly ["and", "or", "not"];
21
+ /**
22
+ * The 11 wire actions. Accepted as a bare string OR an object with `type`.
23
+ *
24
+ * Anything else decodes to the `unknown` sentinel and does nothing, so one new
25
+ * action costs a dead button instead of the whole variant. `unknown` is not in
26
+ * this list: it is not a wire value, and a literal `"unknown"` lands on the
27
+ * sentinel by the same route as any other name this build does not know.
28
+ */
29
+ export declare const ACTIONS: readonly ["close", "claimOffer", "openUrl", "setState", "setValue", "selectOffer", "setOfferIndex", "triggerIAP", "submitLead", "share", "reportCompletion"];
30
+ export declare const OFFER_ATTRIBUTES: readonly ["badgeLabel", "perk", "advertiserName", "description", "category", "shareUrl", "termsUrl", "quickInstructions", "instructions"];
31
+ export declare const DATA_SOURCES: readonly ["offers", "pageIndicators", "categories", "instructions"];
32
+ export declare const TEXT_BINDINGS: readonly ["offerAdvertiserName", "offerDescription", "offerPerk", "offerCtaText", "offerQuickInstructions", "offerNewPrice", "offerOldPrice", "titleText", "accentTitleText", "subtitleText", "categoryName", "instructionTitle", "instructionSubtitle", "instructionCtaText", "instructionNumber"];
33
+ export declare const CREATIVE_BINDINGS: readonly ["offerPrimaryCreative", "offerLogoImage", "offerHeroImage", "instructionImage"];
34
+ /**
35
+ * The theme tokens a colour may name. Both natives decode this strictly, so an
36
+ * unknown one fails the whole config rather than painting nothing.
37
+ */
38
+ export declare const APPEARANCE_COLORS: readonly ["accent", "onAccent", "accentTitle", "background", "onBackground", "surface", "onSurface", "border", "muted", "error"];
39
+ export declare const SEMANTIC_COLORS: readonly ["label", "secondaryLabel", "tertiaryLabel", "systemBackground", "secondarySystemBackground", "systemGroupedBackground", "secondarySystemGroupedBackground", "separator", "tertiarySystemFill"];
40
+ export declare const FONT_WEIGHTS: readonly ["ultraLight", "thin", "light", "regular", "medium", "semibold", "bold", "heavy", "black"];
41
+ export declare const ALIGNMENTS: readonly ["leading", "trailing", "center", "top", "bottom", "topLeading", "topTrailing", "bottomLeading", "bottomTrailing"];
42
+ export declare const SHAPE_TYPES: readonly ["rectangle", "roundedRectangle", "circle", "capsule"];
43
+ export declare const CLIP_SHAPES: readonly ["rectangle", "circle", "capsule"];
44
+ export declare const GRADIENT_DIRECTIONS: readonly ["topToBottom", "bottomToTop", "leadingToTrailing", "trailingToLeading"];
45
+ export declare const ANIMATION_CURVES: readonly ["linear", "easeIn", "easeOut", "easeInOut", "spring"];
46
+ export declare const SCROLL_AXES: readonly ["horizontal", "vertical"];
47
+ export declare const SCROLL_TARGET_BEHAVIORS: readonly ["viewAligned", "paging"];
48
+ export declare const SCROLL_ALIGNMENTS: readonly ["leading", "center"];
49
+ export declare const CONTENT_MODES: readonly ["fit", "fill"];
50
+ export declare const IMPRESSION_SOURCES: readonly ["row", "creative"];
51
+ /** `none` is the wire spelling, NOT `off`. */
52
+ export declare const IMPRESSION_PROBES: readonly ["row", "none"];
53
+ export declare const KEYBOARD_TYPES: readonly ["emailAddress"];
54
+ export declare const TEXT_CONTENT_TYPES: readonly ["emailAddress"];
55
+ /**
56
+ * The 30 style properties. Kept as a set so the decoder can tell a style key it
57
+ * does not know (ignored, per the field rule) from one it must still carry.
58
+ */
59
+ export declare const STYLE_PROPERTIES: readonly ["padding", "frame", "cornerRadius", "cornerRadii", "backgroundColor", "shadow", "innerShadow", "opacity", "clipShape", "clipped", "ignoresSafeArea", "layoutPriority", "containerRelativeFrame", "scrollTargetLayout", "borderWidth", "borderColor", "fixedSize", "offset", "stateStyles", "stateAnimation", "scale", "rotation", "relativeWidth", "relativeHeight", "overlay", "backgroundElement", "gradientBorder", "scrollTransition", "scrollFade", "safeAreaPadding"];
60
+ /**
61
+ * Vocabulary a TRIGGER mount decodes and a sheet does not (the trigger SDUI
62
+ * vocabulary contract, v1). Kept apart from the sheet lists so a sheet naming
63
+ * one keeps failing exactly as before: no existing sheet decodes differently.
64
+ */
65
+ export declare const TRIGGER_ELEMENTS: readonly ["progress", "marquee"];
66
+ export declare const TRIGGER_CONDITIONS: readonly ["listCountAtLeast"];
67
+ /** The trigger host's two actions; a sheet decodes them as the unknown no-op, as today. */
68
+ export declare const TRIGGER_ACTIONS: readonly ["trigger", "dismissTrigger"];
69
+ export declare const TRIGGER_ACTION_TARGETS: readonly ["card", "arrow", "button"];
70
+ export declare const TRIGGER_DATA_SOURCES: readonly ["hostList"];
71
+ export declare const TRIGGER_APPEARANCE_COLORS: readonly ["inkOnAccent", "secondary", "track", "backgroundEnd"];
72
+ export declare const TRIGGER_SHAPE_TYPES: readonly ["ellipse"];
73
+ export declare const TRIGGER_STYLE_PROPERTIES: readonly ["loop", "layoutDirection", "accessibilityHidden"];
74
+ /** `gradient.type`. Absent is `linear`, the existing `direction` form; `radial` is trigger-only. */
75
+ export declare const GRADIENT_TYPES: readonly ["linear", "radial"];
76
+ export declare const COUNTDOWN_FORMATS: readonly ["clock", "hoursMinutes", "hours", "minutes", "seconds", "largestUnit"];
77
+ /** `style.loop.curve`: the animation curves except `spring`. */
78
+ export declare const LOOP_CURVES: readonly ["linear", "easeIn", "easeOut", "easeInOut"];
79
+ export declare const MARQUEE_AXES: readonly ["horizontal", "vertical"];
80
+ export declare const LAYOUT_DIRECTIONS: readonly ["ltr"];
81
+ export type SduiElementName = (typeof ELEMENTS)[number] | (typeof TRIGGER_ELEMENTS)[number];
82
+ export type SduiConditionName = (typeof CONDITIONS)[number] | (typeof TRIGGER_CONDITIONS)[number];
83
+ export type SduiCombinator = (typeof COMBINATORS)[number];
84
+ /** The wire actions, plus the sentinel a name this build does not know lands on. */
85
+ export type SduiActionType = (typeof ACTIONS)[number] | (typeof TRIGGER_ACTIONS)[number] | "unknown";
86
+ export type SduiOfferAttribute = (typeof OFFER_ATTRIBUTES)[number];
87
+ export type SduiDataSource = (typeof DATA_SOURCES)[number] | (typeof TRIGGER_DATA_SOURCES)[number];
88
+ export type SduiTextBinding = (typeof TEXT_BINDINGS)[number];
89
+ export type SduiCreativeBinding = (typeof CREATIVE_BINDINGS)[number];
90
+ export type SduiSemanticColor = (typeof SEMANTIC_COLORS)[number];
91
+ export type SduiAppearanceColor = (typeof APPEARANCE_COLORS)[number];
92
+ export type SduiFontWeight = (typeof FONT_WEIGHTS)[number];
93
+ export type SduiAlignment = (typeof ALIGNMENTS)[number];
94
+ export type SduiShapeType = (typeof SHAPE_TYPES)[number];
95
+ export type SduiClipShapeType = (typeof CLIP_SHAPES)[number];
96
+ export type SduiGradientDirection = (typeof GRADIENT_DIRECTIONS)[number];
97
+ export type SduiAnimationCurve = (typeof ANIMATION_CURVES)[number];
98
+ export type SduiScrollAxis = (typeof SCROLL_AXES)[number];
99
+ export type SduiScrollTargetBehavior = (typeof SCROLL_TARGET_BEHAVIORS)[number];
100
+ export type SduiScrollAlignment = (typeof SCROLL_ALIGNMENTS)[number];
101
+ export type SduiContentMode = (typeof CONTENT_MODES)[number];
102
+ export type SduiImpressionSource = (typeof IMPRESSION_SOURCES)[number];
103
+ export type SduiImpressionProbe = (typeof IMPRESSION_PROBES)[number];
104
+ export type SduiStyleProperty = (typeof STYLE_PROPERTIES)[number] | (typeof TRIGGER_STYLE_PROPERTIES)[number];
105
+ export declare const ELEMENT_SET: ReadonlySet<string>;
106
+ export declare const CONDITION_SET: ReadonlySet<string>;
107
+ export declare const COMBINATOR_SET: ReadonlySet<string>;
108
+ export declare const ACTION_SET: ReadonlySet<string>;
109
+ export declare const OFFER_ATTRIBUTE_SET: ReadonlySet<string>;
110
+ export declare const DATA_SOURCE_SET: ReadonlySet<string>;
111
+ export declare const TEXT_BINDING_SET: ReadonlySet<string>;
112
+ export declare const CREATIVE_BINDING_SET: ReadonlySet<string>;
113
+ export declare const STYLE_PROPERTY_SET: ReadonlySet<string>;
114
+ export declare const TRIGGER_ELEMENT_SET: ReadonlySet<string>;
115
+ export declare const TRIGGER_CONDITION_SET: ReadonlySet<string>;
116
+ export declare const TRIGGER_ACTION_SET: ReadonlySet<string>;
117
+ export declare const TRIGGER_DATA_SOURCE_SET: ReadonlySet<string>;
118
+ export declare const TRIGGER_STYLE_PROPERTY_SET: ReadonlySet<string>;
119
+ //# sourceMappingURL=vocabulary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../../src/sdui/vocabulary.ts"],"names":[],"mappings":"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"}