@revturbine/sdk 0.2.13

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 (147) hide show
  1. package/dist/headless.js +131 -0
  2. package/dist/headless.js.map +1 -0
  3. package/dist/index.js +131 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/types/server-node/client.d.ts +75 -0
  6. package/dist/types/server-node/client.d.ts.map +1 -0
  7. package/dist/types/server-node/index.d.ts +37 -0
  8. package/dist/types/server-node/index.d.ts.map +1 -0
  9. package/dist/types/server-node/local-server.d.ts +60 -0
  10. package/dist/types/server-node/local-server.d.ts.map +1 -0
  11. package/dist/types/server-node/types.d.ts +68 -0
  12. package/dist/types/server-node/types.d.ts.map +1 -0
  13. package/dist/types/web-sdk/adapters/api.d.ts +24 -0
  14. package/dist/types/web-sdk/adapters/api.d.ts.map +1 -0
  15. package/dist/types/web-sdk/analytics.d.ts +111 -0
  16. package/dist/types/web-sdk/analytics.d.ts.map +1 -0
  17. package/dist/types/web-sdk/api-client.d.ts +44 -0
  18. package/dist/types/web-sdk/api-client.d.ts.map +1 -0
  19. package/dist/types/web-sdk/browser-runtime.d.ts +62 -0
  20. package/dist/types/web-sdk/browser-runtime.d.ts.map +1 -0
  21. package/dist/types/web-sdk/controllers.d.ts +363 -0
  22. package/dist/types/web-sdk/controllers.d.ts.map +1 -0
  23. package/dist/types/web-sdk/customer-side.d.ts +1367 -0
  24. package/dist/types/web-sdk/customer-side.d.ts.map +1 -0
  25. package/dist/types/web-sdk/env.d.ts +5 -0
  26. package/dist/types/web-sdk/env.d.ts.map +1 -0
  27. package/dist/types/web-sdk/generated.d.ts +8 -0
  28. package/dist/types/web-sdk/generated.d.ts.map +1 -0
  29. package/dist/types/web-sdk/headless.d.ts +69 -0
  30. package/dist/types/web-sdk/headless.d.ts.map +1 -0
  31. package/dist/types/web-sdk/index.d.ts +51 -0
  32. package/dist/types/web-sdk/index.d.ts.map +1 -0
  33. package/dist/types/web-sdk/placements/AccessGateSurfaceSlot.d.ts +88 -0
  34. package/dist/types/web-sdk/placements/AccessGateSurfaceSlot.d.ts.map +1 -0
  35. package/dist/types/web-sdk/placements/FixedSurfaceSlot.d.ts +56 -0
  36. package/dist/types/web-sdk/placements/FixedSurfaceSlot.d.ts.map +1 -0
  37. package/dist/types/web-sdk/placements/MessageSurfaceSlot.d.ts +87 -0
  38. package/dist/types/web-sdk/placements/MessageSurfaceSlot.d.ts.map +1 -0
  39. package/dist/types/web-sdk/placements/PlacementRenderer.d.ts +57 -0
  40. package/dist/types/web-sdk/placements/PlacementRenderer.d.ts.map +1 -0
  41. package/dist/types/web-sdk/placements/SurfaceSlotComponent.d.ts +70 -0
  42. package/dist/types/web-sdk/placements/SurfaceSlotComponent.d.ts.map +1 -0
  43. package/dist/types/web-sdk/placements/abstract/BannerFrame.d.ts +53 -0
  44. package/dist/types/web-sdk/placements/abstract/BannerFrame.d.ts.map +1 -0
  45. package/dist/types/web-sdk/placements/abstract/InlineCardPlacement.d.ts +52 -0
  46. package/dist/types/web-sdk/placements/abstract/InlineCardPlacement.d.ts.map +1 -0
  47. package/dist/types/web-sdk/placements/abstract/ModalFrame.d.ts +68 -0
  48. package/dist/types/web-sdk/placements/abstract/ModalFrame.d.ts.map +1 -0
  49. package/dist/types/web-sdk/placements/abstract/QuotaMeterFrame.d.ts +76 -0
  50. package/dist/types/web-sdk/placements/abstract/QuotaMeterFrame.d.ts.map +1 -0
  51. package/dist/types/web-sdk/placements/abstract/index.d.ts +9 -0
  52. package/dist/types/web-sdk/placements/abstract/index.d.ts.map +1 -0
  53. package/dist/types/web-sdk/placements/builtin.d.ts +18 -0
  54. package/dist/types/web-sdk/placements/builtin.d.ts.map +1 -0
  55. package/dist/types/web-sdk/placements/cta-resolvers.d.ts +67 -0
  56. package/dist/types/web-sdk/placements/cta-resolvers.d.ts.map +1 -0
  57. package/dist/types/web-sdk/placements/index.d.ts +28 -0
  58. package/dist/types/web-sdk/placements/index.d.ts.map +1 -0
  59. package/dist/types/web-sdk/placements/local-resolver.d.ts +8 -0
  60. package/dist/types/web-sdk/placements/local-resolver.d.ts.map +1 -0
  61. package/dist/types/web-sdk/placements/payload-resolution.d.ts +8 -0
  62. package/dist/types/web-sdk/placements/payload-resolution.d.ts.map +1 -0
  63. package/dist/types/web-sdk/placements/recommendation.d.ts +35 -0
  64. package/dist/types/web-sdk/placements/recommendation.d.ts.map +1 -0
  65. package/dist/types/web-sdk/placements/registry.d.ts +84 -0
  66. package/dist/types/web-sdk/placements/registry.d.ts.map +1 -0
  67. package/dist/types/web-sdk/placements/slots/AgentConnectorSlot.d.ts +11 -0
  68. package/dist/types/web-sdk/placements/slots/AgentConnectorSlot.d.ts.map +1 -0
  69. package/dist/types/web-sdk/placements/slots/BannerSlot.d.ts +35 -0
  70. package/dist/types/web-sdk/placements/slots/BannerSlot.d.ts.map +1 -0
  71. package/dist/types/web-sdk/placements/slots/ButtonSlot.d.ts +23 -0
  72. package/dist/types/web-sdk/placements/slots/ButtonSlot.d.ts.map +1 -0
  73. package/dist/types/web-sdk/placements/slots/ChannelPreviewSlots.d.ts +48 -0
  74. package/dist/types/web-sdk/placements/slots/ChannelPreviewSlots.d.ts.map +1 -0
  75. package/dist/types/web-sdk/placements/slots/CliSlot.d.ts +11 -0
  76. package/dist/types/web-sdk/placements/slots/CliSlot.d.ts.map +1 -0
  77. package/dist/types/web-sdk/placements/slots/CreditBalanceSlot.d.ts +19 -0
  78. package/dist/types/web-sdk/placements/slots/CreditBalanceSlot.d.ts.map +1 -0
  79. package/dist/types/web-sdk/placements/slots/FullPageSlot.d.ts +14 -0
  80. package/dist/types/web-sdk/placements/slots/FullPageSlot.d.ts.map +1 -0
  81. package/dist/types/web-sdk/placements/slots/InPageSlot.d.ts +13 -0
  82. package/dist/types/web-sdk/placements/slots/InPageSlot.d.ts.map +1 -0
  83. package/dist/types/web-sdk/placements/slots/InlineEmbedSlot.d.ts +16 -0
  84. package/dist/types/web-sdk/placements/slots/InlineEmbedSlot.d.ts.map +1 -0
  85. package/dist/types/web-sdk/placements/slots/ModalSlot.d.ts +30 -0
  86. package/dist/types/web-sdk/placements/slots/ModalSlot.d.ts.map +1 -0
  87. package/dist/types/web-sdk/placements/slots/QuotaMeterSlot.d.ts +19 -0
  88. package/dist/types/web-sdk/placements/slots/QuotaMeterSlot.d.ts.map +1 -0
  89. package/dist/types/web-sdk/placements/slots/ToastSlot.d.ts +17 -0
  90. package/dist/types/web-sdk/placements/slots/ToastSlot.d.ts.map +1 -0
  91. package/dist/types/web-sdk/placements/slots/TooltipSlot.d.ts +15 -0
  92. package/dist/types/web-sdk/placements/slots/TooltipSlot.d.ts.map +1 -0
  93. package/dist/types/web-sdk/placements/slots/index.d.ts +14 -0
  94. package/dist/types/web-sdk/placements/slots/index.d.ts.map +1 -0
  95. package/dist/types/web-sdk/placements/surface-slot-constants.d.ts +13 -0
  96. package/dist/types/web-sdk/placements/surface-slot-constants.d.ts.map +1 -0
  97. package/dist/types/web-sdk/placements/surface-template-defaults.d.ts +16 -0
  98. package/dist/types/web-sdk/placements/surface-template-defaults.d.ts.map +1 -0
  99. package/dist/types/web-sdk/placements/token-derivation.d.ts +7 -0
  100. package/dist/types/web-sdk/placements/token-derivation.d.ts.map +1 -0
  101. package/dist/types/web-sdk/placements/types.d.ts +226 -0
  102. package/dist/types/web-sdk/placements/types.d.ts.map +1 -0
  103. package/dist/types/web-sdk/placements/usePlacementPersonalization.d.ts +20 -0
  104. package/dist/types/web-sdk/placements/usePlacementPersonalization.d.ts.map +1 -0
  105. package/dist/types/web-sdk/placements/useSurfaceSlot.d.ts +60 -0
  106. package/dist/types/web-sdk/placements/useSurfaceSlot.d.ts.map +1 -0
  107. package/dist/types/web-sdk/providers/index.d.ts +3 -0
  108. package/dist/types/web-sdk/providers/index.d.ts.map +1 -0
  109. package/dist/types/web-sdk/providers/registry.d.ts +8 -0
  110. package/dist/types/web-sdk/providers/registry.d.ts.map +1 -0
  111. package/dist/types/web-sdk/providers/types.d.ts +8 -0
  112. package/dist/types/web-sdk/providers/types.d.ts.map +1 -0
  113. package/dist/types/web-sdk/react/Placement.d.ts +50 -0
  114. package/dist/types/web-sdk/react/Placement.d.ts.map +1 -0
  115. package/dist/types/web-sdk/react/PlacementDecisionInspector.d.ts +40 -0
  116. package/dist/types/web-sdk/react/PlacementDecisionInspector.d.ts.map +1 -0
  117. package/dist/types/web-sdk/react/RevTurbineProvider.d.ts +31 -0
  118. package/dist/types/web-sdk/react/RevTurbineProvider.d.ts.map +1 -0
  119. package/dist/types/web-sdk/react/SurfaceTypes.d.ts +19 -0
  120. package/dist/types/web-sdk/react/SurfaceTypes.d.ts.map +1 -0
  121. package/dist/types/web-sdk/react/UserProfile.d.ts +23 -0
  122. package/dist/types/web-sdk/react/UserProfile.d.ts.map +1 -0
  123. package/dist/types/web-sdk/react/index.d.ts +11 -0
  124. package/dist/types/web-sdk/react/index.d.ts.map +1 -0
  125. package/dist/types/web-sdk/react/useEntitlement.d.ts +53 -0
  126. package/dist/types/web-sdk/react/useEntitlement.d.ts.map +1 -0
  127. package/dist/types/web-sdk/react/usePlacement.d.ts +63 -0
  128. package/dist/types/web-sdk/react/usePlacement.d.ts.map +1 -0
  129. package/dist/types/web-sdk/react/useRevTurbine.d.ts +17 -0
  130. package/dist/types/web-sdk/react/useRevTurbine.d.ts.map +1 -0
  131. package/dist/types/web-sdk/react/useUsageSnapshot.d.ts +7 -0
  132. package/dist/types/web-sdk/react/useUsageSnapshot.d.ts.map +1 -0
  133. package/dist/types/web-sdk/segments.d.ts +9 -0
  134. package/dist/types/web-sdk/segments.d.ts.map +1 -0
  135. package/dist/types/web-sdk/storage.d.ts +38 -0
  136. package/dist/types/web-sdk/storage.d.ts.map +1 -0
  137. package/dist/types/web-sdk/theme/ThemeContext.d.ts +18 -0
  138. package/dist/types/web-sdk/theme/ThemeContext.d.ts.map +1 -0
  139. package/dist/types/web-sdk/theme/defaults.d.ts +13 -0
  140. package/dist/types/web-sdk/theme/defaults.d.ts.map +1 -0
  141. package/dist/types/web-sdk/theme/index.d.ts +6 -0
  142. package/dist/types/web-sdk/theme/index.d.ts.map +1 -0
  143. package/dist/types/web-sdk/theme/theme-loader.d.ts +26 -0
  144. package/dist/types/web-sdk/theme/theme-loader.d.ts.map +1 -0
  145. package/dist/types/web-sdk/theme/types.d.ts +121 -0
  146. package/dist/types/web-sdk/theme/types.d.ts.map +1 -0
  147. package/package.json +57 -0
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import type { PlacementSlotProps, ResolvedContent } from '../types';
3
+ export interface BannerFrameProps<C extends ResolvedContent = ResolvedContent> extends PlacementSlotProps<C> {
4
+ /** Banner position — sticks to the top or bottom of the viewport. */
5
+ position?: 'top' | 'bottom';
6
+ /**
7
+ * Visual variant that controls default colors.
8
+ * - `default` — uses primary theme color (default)
9
+ * - `info` — uses info/accent color with lighter background
10
+ * - `upsell` — uses accent color (purple-tinted)
11
+ * - `warning` — uses warning color
12
+ */
13
+ variant?: 'default' | 'info' | 'upsell' | 'warning';
14
+ /** Accent color override (for background). */
15
+ accentColor?: string;
16
+ /** Accent text color override. */
17
+ accentTextColor?: string;
18
+ /** Override dismissibility (defaults to `content.dismissible !== false`). */
19
+ dismissible?: boolean;
20
+ /** Override the CTA label. */
21
+ ctaLabel?: string;
22
+ /** CTA visual style. `button` renders a contrasted pill; `link` renders a text link. */
23
+ ctaVariant?: 'button' | 'link';
24
+ /** Icon element rendered before the text. */
25
+ icon?: React.ReactNode;
26
+ /** Custom banner body (replaces default header + body text). */
27
+ children?: React.ReactNode;
28
+ }
29
+ /**
30
+ * Sticky banner component that handles:
31
+ * - Top/bottom position
32
+ * - Dismiss state + callback
33
+ * - Visibility reset when parent re-shows
34
+ * - Theme-aware default styles
35
+ *
36
+ * Extend by wrapping and injecting `children` for custom body content.
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * function TrialBanner(props: PlacementSlotProps<TrialBannerContent>) {
41
+ * return (
42
+ * <BannerFrame {...props} position="top">
43
+ * <span>🔥 {props.content.days_remaining} days left in your trial</span>
44
+ * </BannerFrame>
45
+ * );
46
+ * }
47
+ * ```
48
+ */
49
+ export declare function BannerFrame<C extends ResolvedContent = ResolvedContent>({ content, onCtaClick, onDismiss, visible, className, style, position: positionProp, variant: variantProp, accentColor: accentColorProp, accentTextColor: accentTextColorProp, dismissible: dismissibleProp, ctaLabel, ctaVariant: ctaVariantProp, icon, children, }: BannerFrameProps<C>): React.JSX.Element | null;
50
+ export declare namespace BannerFrame {
51
+ var displayName: string;
52
+ }
53
+ //# sourceMappingURL=BannerFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerFrame.d.ts","sourceRoot":"","sources":["../../../../../placements/abstract/BannerFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOpE,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CAC3E,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,EACvE,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,eAAe,EAC5B,eAAe,EAAE,mBAAmB,EACpC,WAAW,EAAE,eAAe,EAC5B,QAAQ,EACR,UAAU,EAAE,cAAc,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE,gBAAgB,CAAC,CAAC,CAAC,4BAuJrB;yBAvKe,WAAW"}
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import type { PlacementSlotProps, ResolvedContent } from '../types';
3
+ export interface InlineCardPlacementProps<C extends ResolvedContent = ResolvedContent> extends PlacementSlotProps<C> {
4
+ /** Override the CTA label. */
5
+ ctaLabel?: string;
6
+ /**
7
+ * Content alignment.
8
+ * - `left` — standard left-aligned card (default)
9
+ * - `center` — centered content (for gate-style cards)
10
+ */
11
+ alignment?: 'left' | 'center';
12
+ /**
13
+ * CTA visual style.
14
+ * - `filled` — solid background button (default)
15
+ * - `outline` — border-only button
16
+ * - `inline` — text-only compact button
17
+ */
18
+ ctaVariant?: 'filled' | 'outline' | 'inline';
19
+ /** Accent color for CTA buttons. */
20
+ accentColor?: string;
21
+ /** Icon element rendered above the header (for gate-style cards). */
22
+ icon?: React.ReactNode;
23
+ /** Custom body to replace default content layout. */
24
+ children?: React.ReactNode;
25
+ }
26
+ /**
27
+ * Abstract inline card/embed placement rendered within the page flow.
28
+ *
29
+ * Handles:
30
+ * - Visibility gating
31
+ * - Theme-aware card container with border, radius, padding
32
+ * - Optional image, header, body, and CTA
33
+ * - `data-rt-placement="inline-embed"` attribute
34
+ *
35
+ * Extend by wrapping and injecting `children` for custom card bodies.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * function FeatureCallout(props: PlacementSlotProps<MyContent>) {
40
+ * return (
41
+ * <InlineCardPlacement {...props}>
42
+ * <FeatureGrid features={props.content.features} />
43
+ * </InlineCardPlacement>
44
+ * );
45
+ * }
46
+ * ```
47
+ */
48
+ export declare function InlineCardPlacement<C extends ResolvedContent = ResolvedContent>({ content, onCtaClick, visible, className, style, ctaLabel, alignment: alignmentProp, ctaVariant: ctaVariantProp, accentColor: accentColorProp, icon, children, }: InlineCardPlacementProps<C>): React.JSX.Element | null;
49
+ export declare namespace InlineCardPlacement {
50
+ var displayName: string;
51
+ }
52
+ //# sourceMappingURL=InlineCardPlacement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineCardPlacement.d.ts","sourceRoot":"","sources":["../../../../../placements/abstract/InlineCardPlacement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOpE,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CACnF,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC7C,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,EAC/E,OAAO,EACP,UAAU,EACV,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,eAAe,EAC5B,IAAI,EACJ,QAAQ,GACT,EAAE,wBAAwB,CAAC,CAAC,CAAC,4BAqH7B;yBAjIe,mBAAmB"}
@@ -0,0 +1,68 @@
1
+ import React from 'react';
2
+ import type { PlacementSlotProps, ResolvedContent } from '../types';
3
+ /**
4
+ * Modal layout variants:
5
+ * - `centered` — single column, centered content (default, existing behavior)
6
+ * - `two_column` — left content + right visual panel (paywall/trial style)
7
+ */
8
+ export type ModalLayout = 'centered' | 'two_column';
9
+ export interface ModalFrameProps<C extends ResolvedContent = ResolvedContent> extends PlacementSlotProps<C> {
10
+ /**
11
+ * Modal dismissibility behavior.
12
+ * - `optional` — user can dismiss via ESC, close button, or clicking outside
13
+ * - `blocking` — user must interact with a CTA (no dismiss controls)
14
+ */
15
+ modalType?: 'optional' | 'blocking';
16
+ /**
17
+ * Visual layout variant.
18
+ * - `centered` — classic single-column modal (default)
19
+ * - `two_column` — left content + right side panel with image/gradient
20
+ */
21
+ layout?: ModalLayout;
22
+ /** Accent color for CTA buttons and decorative elements. */
23
+ accentColor?: string;
24
+ /** Accent background color (e.g. badge backgrounds, light tints). */
25
+ accentBg?: string;
26
+ /** Dialog width override. Defaults to 480px (centered) or 1024px (two_column). */
27
+ dialogWidth?: number | string;
28
+ /** Dialog height override. Only applied in two_column layout. Defaults to 600px. */
29
+ dialogHeight?: number | string;
30
+ /** Badge element rendered above the title (e.g. icon + label). */
31
+ badge?: React.ReactNode;
32
+ /** Side content for two_column layout (rendered in the right panel). */
33
+ sideContent?: React.ReactNode;
34
+ /** Side panel width for two_column layout. Defaults to 420px. */
35
+ sidePanelWidth?: number;
36
+ /** Override the primary CTA label (defaults to `content.cta_label`). */
37
+ ctaLabel?: string;
38
+ /** Override the secondary CTA label (defaults to `content.secondary_cta_label`). */
39
+ secondaryCtaLabel?: string;
40
+ /** Custom body to replace the default text body. */
41
+ children?: React.ReactNode;
42
+ }
43
+ /**
44
+ * Modal overlay component that handles:
45
+ * - Backdrop click dismiss (optional mode)
46
+ * - ESC key dismiss (optional mode)
47
+ * - Focus trap on the dialog
48
+ * - Visibility + dismissed state management
49
+ * - Theme-aware default styles
50
+ *
51
+ * Extend by wrapping and injecting `children` for custom body content.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * function MyModal(props: PlacementSlotProps<MyContent>) {
56
+ * return (
57
+ * <ModalFrame {...props}>
58
+ * <BenefitsList items={props.content.benefits} />
59
+ * </ModalFrame>
60
+ * );
61
+ * }
62
+ * ```
63
+ */
64
+ export declare function ModalFrame<C extends ResolvedContent = ResolvedContent>({ content, onCtaClick, onSecondaryCtaClick, onDismiss, visible, className, style, modalType: modalTypeProp, layout: layoutProp, accentColor, accentBg, dialogWidth, dialogHeight, badge, sideContent, sidePanelWidth, ctaLabel, secondaryCtaLabel, children, }: ModalFrameProps<C>): React.JSX.Element | null;
65
+ export declare namespace ModalFrame {
66
+ var displayName: string;
67
+ }
68
+ //# sourceMappingURL=ModalFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalFrame.d.ts","sourceRoot":"","sources":["../../../../../placements/abstract/ModalFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOpE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;AAEpD,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CAC1E,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,wEAAwE;IACxE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,EACtE,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,OAAO,EACP,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,EAClB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,KAAK,EACL,WAAW,EACX,cAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,QAAQ,GACT,EAAE,eAAe,CAAC,CAAC,CAAC,4BA8RpB;yBAlTe,UAAU"}
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import type { PlacementSlotProps, ResolvedContent } from '../types';
3
+ export interface QuotaMeterFrameProps<C extends ResolvedContent = ResolvedContent> extends PlacementSlotProps<C> {
4
+ /**
5
+ * Visual display variant.
6
+ * - `progress_bar` — horizontal bar (default)
7
+ * - `circular_gauge` — SVG circle
8
+ * - `numeric_counter` — large number display
9
+ */
10
+ displayStyle?: 'progress_bar' | 'circular_gauge' | 'numeric_counter';
11
+ /**
12
+ * Size variant.
13
+ * - `standard` — full card with padding (default)
14
+ * - `compact` — minimal inline layout (mini meter)
15
+ */
16
+ size?: 'standard' | 'compact';
17
+ /** Current usage value (overrides `content.usage_current`). */
18
+ usageCurrent?: number;
19
+ /** Usage limit (overrides `content.usage_limit`). */
20
+ usageLimit?: number;
21
+ /** Percentage threshold — hides the meter when usage is below this. */
22
+ showAtPercent?: number;
23
+ /** Override the CTA label. */
24
+ ctaLabel?: string;
25
+ /** CTA visual style. `button` renders a filled pill; `link` renders a text link. */
26
+ ctaVariant?: 'button' | 'link';
27
+ /** Accent color for the CTA link variant. */
28
+ accentColor?: string;
29
+ /** Custom content rendered below the meter. */
30
+ children?: React.ReactNode;
31
+ }
32
+ export interface CompactCircularGaugeProps {
33
+ /** Value between 0 and 1 (fraction filled). */
34
+ ratio: number;
35
+ /** Rendered size in pixels. Defaults to 16. */
36
+ size?: number;
37
+ /** Override arc/track colors. By default, red/yellow/blue based on ratio. */
38
+ arcColor?: string;
39
+ trackColor?: string;
40
+ }
41
+ /**
42
+ * Minimal circular gauge for inline usage indicators.
43
+ * Can be used standalone or as part of a `QuotaMeterFrame`.
44
+ */
45
+ export declare function CompactCircularGauge({ ratio, size: sizeProp, arcColor, trackColor }: CompactCircularGaugeProps): React.JSX.Element;
46
+ /**
47
+ * Quota/usage meter with multiple display variants.
48
+ *
49
+ * Handles:
50
+ * - Progress bar, circular gauge, or numeric counter rendering
51
+ * - Threshold-based visibility (`showAtPercent`)
52
+ * - Typed usage props override content fields
53
+ * - `data-rt-placement="quota-meter"` attribute
54
+ *
55
+ * Extend by wrapping and injecting `children` for custom content below the meter.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * function MinutesMeter(props: PlacementSlotProps<MeterContent>) {
60
+ * const { minutesUsed, minutesLimit } = useUsage();
61
+ * return (
62
+ * <QuotaMeterFrame
63
+ * {...props}
64
+ * displayStyle="circular_gauge"
65
+ * usageCurrent={minutesUsed}
66
+ * usageLimit={minutesLimit}
67
+ * />
68
+ * );
69
+ * }
70
+ * ```
71
+ */
72
+ export declare function QuotaMeterFrame<C extends ResolvedContent = ResolvedContent>({ content, onCtaClick, visible, className, style, displayStyle: displayStyleProp, size: sizeProp, usageCurrent: usageCurrentProp, usageLimit: usageLimitProp, showAtPercent: showAtPercentProp, ctaLabel, ctaVariant: ctaVariantProp, accentColor: accentColorProp, children, }: QuotaMeterFrameProps<C>): React.JSX.Element | null;
73
+ export declare namespace QuotaMeterFrame {
74
+ var displayName: string;
75
+ }
76
+ //# sourceMappingURL=QuotaMeterFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuotaMeterFrame.d.ts","sourceRoot":"","sources":["../../../../../placements/abstract/QuotaMeterFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMpE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CAC/E,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IACrE;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAgLD,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,yBAAyB,qBAyB9G;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,EAC3E,OAAO,EACP,UAAU,EACV,OAAO,EACP,SAAS,EACT,KAAK,EACL,YAAY,EAAE,gBAAgB,EAC9B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,EAC1B,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EACR,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,eAAe,EAC5B,QAAQ,GACT,EAAE,oBAAoB,CAAC,CAAC,CAAC,4BAgGzB;yBA/Ge,eAAe"}
@@ -0,0 +1,9 @@
1
+ export { ModalFrame } from './ModalFrame';
2
+ export type { ModalFrameProps, ModalLayout } from './ModalFrame';
3
+ export { BannerFrame } from './BannerFrame';
4
+ export type { BannerFrameProps } from './BannerFrame';
5
+ export { InlineCardPlacement } from './InlineCardPlacement';
6
+ export type { InlineCardPlacementProps } from './InlineCardPlacement';
7
+ export { QuotaMeterFrame, CompactCircularGauge } from './QuotaMeterFrame';
8
+ export type { QuotaMeterFrameProps, CompactCircularGaugeProps } from './QuotaMeterFrame';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../placements/abstract/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { PlacementTypeRegistry } from './registry';
2
+ /**
3
+ * Register all built-in slot types on the given registry.
4
+ *
5
+ * Built-in types cover the core surface types:
6
+ * - banner → BannerSlot (full-width top/bottom)
7
+ * - modal → ModalSlot (overlay dialog, optional/blocking)
8
+ * - in_page → InPageSlot (card/embed in page flow)
9
+ * - toast → ToastSlot (ephemeral notification)
10
+ * - button → ButtonSlot (nav bar / CTA button)
11
+ * - full_page → FullPageSlot (dedicated managed page)
12
+ * - email/sms/push → channel previews (static out-of-band mocks)
13
+ *
14
+ * Additional specialized types registered as in_page variants:
15
+ * - quota_meter → QuotaMeterSlot (usage meter + upgrade CTA)
16
+ */
17
+ export declare function registerBuiltinSlotTypes(registry: PlacementTypeRegistry): void;
18
+ //# sourceMappingURL=builtin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../../../placements/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAcxD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAkN9E"}
@@ -0,0 +1,67 @@
1
+ import type { CtaResolver, CtaResolverContext, PlacementUiPath } from './types';
2
+ /**
3
+ * Registry mapping CTA action types to resolver functions.
4
+ *
5
+ * Customers register a {@link CtaResolver} against an action type — typically a
6
+ * tenant-defined custom action name surfaced through `parseUiPath` — so the
7
+ * {@link PlacementRenderer} can dispatch a CTA click to dedicated logic instead
8
+ * of the generic `onCtaClick` callback. Built-in action types may also be
9
+ * overridden by registering a resolver for them.
10
+ */
11
+ export declare class CtaResolverRegistry {
12
+ private readonly resolvers;
13
+ /**
14
+ * Register a resolver for an action type. Re-registering the same type
15
+ * replaces the previous resolver (and warns), matching the slot-type
16
+ * registry's override semantics.
17
+ */
18
+ register(type: string, resolver: CtaResolver): void;
19
+ /**
20
+ * Remove the resolver for an action type.
21
+ * Returns true if a resolver was registered and removed.
22
+ */
23
+ unregister(type: string): boolean;
24
+ /** Look up the resolver registered for an action type, if any. */
25
+ get(type: string): CtaResolver | undefined;
26
+ /** Whether a resolver is registered for an action type. */
27
+ has(type: string): boolean;
28
+ /** Remove every registered resolver. */
29
+ clear(): void;
30
+ }
31
+ /**
32
+ * Get or create the default global CTA resolver registry. The
33
+ * {@link PlacementRenderer} uses this when no `ctaResolvers` prop is supplied.
34
+ */
35
+ export declare function getDefaultCtaResolverRegistry(): CtaResolverRegistry;
36
+ /**
37
+ * Reset the default CTA resolver registry (useful for testing and for tearing
38
+ * down tenant-specific resolvers).
39
+ */
40
+ export declare function resetDefaultCtaResolverRegistry(): void;
41
+ /**
42
+ * Register a {@link CtaResolver} on the default global registry.
43
+ *
44
+ * This is the ergonomic entry point for customers:
45
+ *
46
+ * ```ts
47
+ * registerCtaResolver('connect_crm', (uiPath) => {
48
+ * openCrmModal(uiPath.url, uiPath.params);
49
+ * });
50
+ * ```
51
+ */
52
+ export declare function registerCtaResolver(type: string, resolver: CtaResolver): void;
53
+ /**
54
+ * Remove a resolver from the default global registry.
55
+ * Returns true if a resolver was registered and removed.
56
+ */
57
+ export declare function unregisterCtaResolver(type: string): boolean;
58
+ /**
59
+ * Dispatch a CTA activation: invoke the registered resolver for the action
60
+ * type if one exists, otherwise fall back to the supplied callback.
61
+ *
62
+ * Returns `true` when a registered resolver handled the click, `false` when it
63
+ * fell through to `fallback`. A registered resolver fully handles the action —
64
+ * the fallback is not also called.
65
+ */
66
+ export declare function dispatchCtaClick(uiPath: PlacementUiPath, context: CtaResolverContext, resolvers: CtaResolverRegistry, fallback?: (uiPath: PlacementUiPath) => void): boolean;
67
+ //# sourceMappingURL=cta-resolvers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta-resolvers.d.ts","sourceRoot":"","sources":["../../../../placements/cta-resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEhF;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAOnD;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1C,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,wCAAwC;IACxC,KAAK,IAAI,IAAI;CAGd;AAKD;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,mBAAmB,CAKnE;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAC3C,OAAO,CAQT"}
@@ -0,0 +1,28 @@
1
+ export type { PlacementSlotType, PlacementSlotProps, PlacementContentFields, ResolvedContent, PlacementUiPath, PlacementUiPathActionType, PlacementPromotion, RegisterPlacementSlotTypeOptions, PersonalizationContext, PlacementPreviewConfig, PlacementCustomCode, CtaResolver, CtaResolverContext, } from './types';
2
+ export { PlacementTypeRegistry, getDefaultRegistry, resetDefaultRegistry, resolveContent, resolveTokens, parseUiPath, parsePromotion, } from './registry';
3
+ export { CtaResolverRegistry, getDefaultCtaResolverRegistry, resetDefaultCtaResolverRegistry, registerCtaResolver, unregisterCtaResolver, dispatchCtaClick, } from './cta-resolvers';
4
+ export { registerBuiltinSlotTypes } from './builtin';
5
+ export { BannerSlot, ModalSlot, InlineEmbedSlot, InPageSlot, ToastSlot, ButtonSlot, QuotaMeterSlot, FullPageSlot, CliSlot, CreditBalanceSlot, TooltipSlot, AgentConnectorSlot, } from './slots';
6
+ export type { BannerSlotProps, ModalSlotProps, InlineEmbedSlotProps, InPageSlotProps, ToastSlotProps, ButtonSlotProps, QuotaMeterSlotProps, FullPageSlotProps, CliSlotProps, CreditBalanceSlotProps, TooltipSlotProps, AgentConnectorSlotProps, } from './slots';
7
+ export { PlacementRenderer } from './PlacementRenderer';
8
+ export type { PlacementRendererProps } from './PlacementRenderer';
9
+ export { useSurfaceSlot } from './useSurfaceSlot';
10
+ export type { UseSurfaceSlotOptions, UseSurfaceSlotResult } from './useSurfaceSlot';
11
+ export { usePlacementPersonalization } from './usePlacementPersonalization';
12
+ export type { UsePlacementPersonalizationOptions } from './usePlacementPersonalization';
13
+ export { SurfaceSlotComponent, } from './SurfaceSlotComponent';
14
+ export type { SurfaceSlotComponentProps, SurfaceSlotCategory, } from './SurfaceSlotComponent';
15
+ export { FixedSurfaceSlot, FIXED_SURFACE_TEMPLATE_IDS } from './FixedSurfaceSlot';
16
+ export type { FixedSurfaceSlotProps } from './FixedSurfaceSlot';
17
+ export { AccessGateSurfaceSlot, GATED_SURFACE_TEMPLATE_IDS } from './AccessGateSurfaceSlot';
18
+ export type { AccessGateSurfaceSlotProps, AccessGateCheck } from './AccessGateSurfaceSlot';
19
+ export { MessageSurfaceSlot, MESSAGE_SURFACE_TEMPLATE_IDS } from './MessageSurfaceSlot';
20
+ export type { MessageSurfaceSlotProps, MessageSurfaceSlotRef, MessageTriggerType } from './MessageSurfaceSlot';
21
+ export { FIXED_BANNER_TEMPLATE_IDS, GENERAL_BANNER_TEMPLATE_IDS, GENERAL_TOAST_TEMPLATE_IDS, GENERAL_MODAL_TEMPLATE_IDS, } from './surface-template-defaults';
22
+ export { resolvePayloadForUser, resolvePayloadForUserWithProvider, applyValueMaps, createStaticPlacementContentLookupProvider, } from './payload-resolution';
23
+ export type { ResolvedPayload, PlacementContentLookupProvider, } from './payload-resolution';
24
+ export { createStaticPlacementResolver, } from './local-resolver';
25
+ export type { LocalPlacementDataset, LocalPlacementEntry, LocalPlacementPayload, LocalPlacementSurface, StaticPlacementResolverOptions, } from './local-resolver';
26
+ export { derivePlacementPersonalizationTokens } from './token-derivation';
27
+ export * from './abstract';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../placements/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,gCAAgC,EAChC,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,EAC/B,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EACL,UAAU,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AAGxF,OAAO,EACL,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC5F,YAAY,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACxF,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/G,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,cAAc,EACd,0CAA0C,GAC3C,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,oCAAoC,EAAE,MAAM,oBAAoB,CAAC;AAG1E,cAAc,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Local placement resolver — re-exported from @revt-eng/core.
3
+ *
4
+ * @see @revt-eng/core/resolution/local-resolver
5
+ */
6
+ export { createStaticPlacementResolver, } from '@revt-eng/core';
7
+ export type { LocalPlacementDataset, LocalPlacementEntry, LocalPlacementPayload, LocalPlacementSurface, StaticPlacementResolverOptions, } from '@revt-eng/core';
8
+ //# sourceMappingURL=local-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-resolver.d.ts","sourceRoot":"","sources":["../../../../placements/local-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Payload resolution — re-exported from @revt-eng/core.
3
+ *
4
+ * @see @revt-eng/core/resolution/payload-resolution
5
+ */
6
+ export { resolveTokens, resolveContent, resolvePayloadForUser, resolvePayloadForUserWithProvider, applyValueMaps, createStaticPlacementContentLookupProvider, } from '@revt-eng/core';
7
+ export type { ResolvedPayload, PlacementContentLookupProvider, } from '@revt-eng/core';
8
+ //# sourceMappingURL=payload-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-resolution.d.ts","sourceRoot":"","sources":["../../../../placements/payload-resolution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,iCAAiC,EACjC,cAAc,EACd,0CAA0C,GAC3C,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,eAAe,EACf,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** The spec-defined per-placement recommendation strategy. */
2
+ export type RecommendationStrategy = 'next_tier_up' | 'best_value' | 'custom';
3
+ /** Minimal plan shape the dispatcher reads (mirrors `PlanIR`). */
4
+ export interface RecommendationPlanInput {
5
+ source_id: string;
6
+ unique_handle: string;
7
+ name: string;
8
+ tier_position: number;
9
+ sort_order: number;
10
+ }
11
+ /** The resolved recommendation tokens. Empty strings when unresolved. */
12
+ export interface RecommendedPlanTokens {
13
+ recommended_plan_handle: string;
14
+ recommended_plan_name: string;
15
+ }
16
+ /**
17
+ * Resolve the recommended-plan tokens for one placement by strategy.
18
+ *
19
+ * Edge cases all resolve to empty tokens (the top-of-ladder convention from
20
+ * plan #46): empty plan list, unknown current plan, top of the hierarchy,
21
+ * and — for `custom` — a missing/unknown override or an override equal to the
22
+ * user's current plan.
23
+ *
24
+ * @param input.strategy The placement's `recommendation_strategy`.
25
+ * @param input.planOverride The `unique_handle` to force (only read when `strategy === 'custom'`).
26
+ * @param input.currentPlanHandle The user's current commercial plan handle (already normalized by the caller).
27
+ * @param input.plans The tenant's plan hierarchy.
28
+ */
29
+ export declare function resolveRecommendedPlanTokens(input: {
30
+ strategy: RecommendationStrategy;
31
+ planOverride?: string;
32
+ currentPlanHandle: string;
33
+ plans: readonly RecommendationPlanInput[];
34
+ }): RecommendedPlanTokens;
35
+ //# sourceMappingURL=recommendation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendation.d.ts","sourceRoot":"","sources":["../../../../placements/recommendation.ts"],"names":[],"mappings":"AAwBA,8DAA8D;AAC9D,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE9E,kEAAkE;AAClE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yEAAyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3C,GAAG,qBAAqB,CAuBxB"}
@@ -0,0 +1,84 @@
1
+ import type { RevTurbineSurfaceType, PlacementOutput } from '../customer-side';
2
+ import type { PlacementSlotType, PlacementSlotProps, RegisterPlacementSlotTypeOptions, PersonalizationContext, ResolvedContent, PlacementUiPath, PlacementPromotion } from './types';
3
+ /**
4
+ * Registry for placement slot types.
5
+ *
6
+ * Manages built-in and custom placement renderers. The registry resolves
7
+ * a PlacementOutput to the best matching slot type based on surface type
8
+ * and template, then provides the component and resolved props for rendering.
9
+ */
10
+ export declare class PlacementTypeRegistry {
11
+ private readonly types;
12
+ private readonly surfaceIndex;
13
+ /**
14
+ * Register a placement slot type. If a type with the same id already exists,
15
+ * it is replaced (allows customer overrides of built-in types).
16
+ */
17
+ register<P extends PlacementSlotProps>(options: RegisterPlacementSlotTypeOptions<P>): void;
18
+ /**
19
+ * Unregister a placement slot type by id.
20
+ * Returns true if the type was found and removed.
21
+ */
22
+ unregister(id: string): boolean;
23
+ /**
24
+ * Look up a slot type by its id.
25
+ */
26
+ get(id: string): PlacementSlotType | undefined;
27
+ /**
28
+ * Resolve the best matching slot type for a placement output.
29
+ *
30
+ * Resolution order:
31
+ * 1. If the output's surface.template matches a registered type id, use it
32
+ * 2. Find all types for the output's surface.type, sort by priority descending,
33
+ * and pick the first whose `accepts()` returns true
34
+ * 3. Fall back to a 'custom' type if registered
35
+ * 4. Return undefined if no match
36
+ */
37
+ resolve(output: PlacementOutput): PlacementSlotType | undefined;
38
+ /**
39
+ * List all registered slot types.
40
+ */
41
+ listAll(): PlacementSlotType[];
42
+ /**
43
+ * List slot types for a specific surface type.
44
+ */
45
+ listBySurfaceType(surfaceType: RevTurbineSurfaceType): PlacementSlotType[];
46
+ /**
47
+ * Check if a slot type id is registered.
48
+ */
49
+ has(id: string): boolean;
50
+ }
51
+ /**
52
+ * Resolve personalization tokens in a string value.
53
+ * Tokens use the `{{token_name}}` format.
54
+ */
55
+ export declare function resolveTokens(template: string, context: PersonalizationContext): string;
56
+ /**
57
+ * Resolve all personalization tokens in a content object.
58
+ */
59
+ export declare function resolveContent(content: Record<string, unknown>, // sdk-ok: boundary-parse
60
+ context: PersonalizationContext): ResolvedContent;
61
+ /**
62
+ * Parse a `cta_path` (or legacy `ui_path`) record from a placement output into
63
+ * a typed {@link PlacementUiPath}.
64
+ *
65
+ * Built-in fields (`url`, `plan_handle`, …) are lifted onto typed properties.
66
+ * The `type` is preserved verbatim for any non-empty string — including
67
+ * tenant-defined custom action names — so a registered {@link CtaResolver} can
68
+ * key on it; only an absent or non-string `type` defaults to `'dismiss'`. Every
69
+ * remaining key is collected into `params` for custom resolvers to read.
70
+ */
71
+ export declare function parseUiPath(raw: Record<string, unknown>): PlacementUiPath;
72
+ /**
73
+ * Parse a promotion record from a placement output.
74
+ */
75
+ export declare function parsePromotion(raw?: Record<string, unknown>): PlacementPromotion | undefined;
76
+ /**
77
+ * Get or create the default global placement type registry.
78
+ */
79
+ export declare function getDefaultRegistry(): PlacementTypeRegistry;
80
+ /**
81
+ * Reset the default registry (useful for testing).
82
+ */
83
+ export declare function resetDefaultRegistry(): void;
84
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../placements/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gCAAgC,EAChC,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAgBjB;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAE3E;;;OAGG;IACH,QAAQ,CAAC,CAAC,SAAS,kBAAkB,EAAE,OAAO,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,IAAI;IA2B1F;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmB/B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI9C;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;IAsB/D;;OAEG;IACH,OAAO,IAAI,iBAAiB,EAAE;IAI9B;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,qBAAqB,GAAG,iBAAiB,EAAE;IAK1E;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAGzB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAgDvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB;AAC3D,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAYjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAkBzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,GAAG,SAAS,CAS5F;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CAM1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,11 @@
1
+ import type { PlacementSlotProps } from '../types';
2
+ type ConnectionState = 'connected' | 'pending' | 'disconnected';
3
+ export type AgentConnectorSlotProps = PlacementSlotProps & {
4
+ connectionState?: ConnectionState;
5
+ };
6
+ export declare function AgentConnectorSlot({ content, onCtaClick, visible, className, style, }: AgentConnectorSlotProps): import("react").JSX.Element | null;
7
+ export declare namespace AgentConnectorSlot {
8
+ var displayName: string;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=AgentConnectorSlot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentConnectorSlot.d.ts","sourceRoot":"","sources":["../../../../../placements/slots/AgentConnectorSlot.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,KAAK,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,GAAG;IACzD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAcF,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,UAAU,EACV,OAAO,EACP,SAAS,EACT,KAAK,GACN,EAAE,uBAAuB,sCAsFzB;yBA5Fe,kBAAkB"}
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { PlacementSlotProps } from '../types';
3
+ /**
4
+ * Props for {@link BannerSlot}.
5
+ * Extends {@link PlacementSlotProps} with banner-specific options.
6
+ */
7
+ export type BannerSlotProps = PlacementSlotProps & {
8
+ /** Banner position — sticks to the top or bottom of the viewport. */
9
+ position?: 'top' | 'bottom';
10
+ };
11
+ /**
12
+ * Full-width sticky banner placement.
13
+ *
14
+ * Renders at the top or bottom of the viewport with a header, body,
15
+ * CTA button, and optional dismiss control.
16
+ *
17
+ * **Content fields used:** `header`, `body`, `message`, `cta_label`, `position`, `dismissible`
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <BannerSlot
22
+ * placement={output}
23
+ * content={{ header: 'Upgrade to Pro', cta_label: 'Upgrade Now', position: 'top' }}
24
+ * uiPath={{ type: 'navigate_to_plans' }}
25
+ * onCtaClick={() => navigate('/plans')}
26
+ * onDismiss={() => {}}
27
+ * visible={true}
28
+ * />
29
+ * ```
30
+ */
31
+ export declare function BannerSlot({ content, onCtaClick, onDismiss, visible, className, style, }: BannerSlotProps): React.JSX.Element | null;
32
+ export declare namespace BannerSlot {
33
+ var displayName: string;
34
+ }
35
+ //# sourceMappingURL=BannerSlot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerSlot.d.ts","sourceRoot":"","sources":["../../../../../placements/slots/BannerSlot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG;IACjD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC7B,CAAC;AA4BF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,KAAK,GACN,EAAE,eAAe,4BAkGjB;yBAzGe,UAAU"}