@cxpinsight/react-native 0.20.0 → 0.22.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 (33) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/android/src/main/java/com/cxpinsight/reactnative/CXPVitalsModule.java +170 -0
  3. package/android/src/main/java/com/cxpinsight/reactnative/CXPinsightPackage.java +2 -1
  4. package/ios/CXPVitals.m +143 -0
  5. package/lib/CXPinsightProvider.d.ts.map +1 -1
  6. package/lib/CXPinsightProvider.js +3 -0
  7. package/lib/CXPinsightProvider.js.map +1 -1
  8. package/lib/core/vitals.d.ts +8 -2
  9. package/lib/core/vitals.d.ts.map +1 -1
  10. package/lib/core/vitals.js +119 -2
  11. package/lib/core/vitals.js.map +1 -1
  12. package/lib/survey/SurveyModal.d.ts +4 -1
  13. package/lib/survey/SurveyModal.d.ts.map +1 -1
  14. package/lib/survey/SurveyModal.js +22 -5
  15. package/lib/survey/SurveyModal.js.map +1 -1
  16. package/lib/survey/questions/MultipleChoiceQuestion.d.ts +11 -2
  17. package/lib/survey/questions/MultipleChoiceQuestion.d.ts.map +1 -1
  18. package/lib/survey/questions/MultipleChoiceQuestion.js +64 -5
  19. package/lib/survey/questions/MultipleChoiceQuestion.js.map +1 -1
  20. package/lib/survey/questions/RatingQuestion.d.ts +30 -2
  21. package/lib/survey/questions/RatingQuestion.d.ts.map +1 -1
  22. package/lib/survey/questions/RatingQuestion.js +126 -16
  23. package/lib/survey/questions/RatingQuestion.js.map +1 -1
  24. package/lib/survey/styleContract.d.ts +25 -0
  25. package/lib/survey/styleContract.d.ts.map +1 -1
  26. package/lib/survey/styleContract.js +37 -0
  27. package/lib/survey/styleContract.js.map +1 -1
  28. package/lib/types.d.ts +10 -0
  29. package/lib/types.d.ts.map +1 -1
  30. package/lib/types.js.map +1 -1
  31. package/lib/version.d.ts +1 -1
  32. package/lib/version.js +1 -1
  33. package/package.json +2 -2
@@ -46,7 +46,32 @@ const THRESHOLDS = {
46
46
  SCREEN_LOAD: [2500, 4000], // web.dev LCP
47
47
  INP: [200, 500], // web.dev INP
48
48
  JS_STALL: [249, 500], // Apple: ≥ 250 ms is a (micro) hang, > 500 ms a hang
49
+ // Android vitals — pass/fail, so good and poor meet: excessive at ≥ 5 s / 2 s / 1.5 s.
50
+ APP_START_COLD: [4999, 4999],
51
+ APP_START_WARM: [1999, 1999],
52
+ APP_START_HOT: [1499, 1499],
53
+ // Share of frames × 100 (10000 = all of them). Android vitals: > 50 % slow, > 0.1 % frozen.
54
+ SLOW_FRAMES: [5000, 5000],
55
+ FROZEN_FRAMES: [10, 10],
49
56
  };
57
+ // Platforms whose native vitals (app start, frames) have been measured against the platform's own
58
+ // numbers. iOS is off until ios/CXPVitals.m is checked against a real launch and a screen recording
59
+ // (it needs an Xcode 26 build); its JS vitals — screen load, INP, JS stall — are unaffected.
60
+ const NATIVE_VITALS_ON = ['android'];
61
+ function nativeVitals() {
62
+ try {
63
+ const m = react_native_1.TurboModuleRegistry?.get?.('CXPVitals')
64
+ ?? react_native_1.NativeModules?.CXPVitals;
65
+ return m || null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ // Frames in a visit below this are too few for a share to mean anything.
72
+ const MIN_FRAMES = 30;
73
+ // A launch longer than this is not a launch (a debugger pause, a JS reload in an old process).
74
+ const MAX_START_MS = 120000;
50
75
  function rate(name, value) {
51
76
  const [good, poor] = THRESHOLDS[name];
52
77
  return value <= good ? 'good' : value <= poor ? 'needs_improvement' : 'poor';
@@ -80,6 +105,14 @@ let stallTimer = null;
80
105
  let lastTick = 0;
81
106
  let appStateSub = null;
82
107
  let seq = 0;
108
+ let native = null;
109
+ let frameSource = '';
110
+ // Cold start: the launch's start (from native) and the first screen's first frame (from JS); reported
111
+ // once both are known, in whichever order they arrive.
112
+ let coldStartWall = 0;
113
+ let firstFrameWall = 0;
114
+ let coldReported = false;
115
+ let backgroundAtWall = 0;
83
116
  const newId = () => 'sv_' + Date.now().toString(36) + '_' + (seq++).toString(36) + Math.random().toString(36).slice(2, 6);
84
117
  // Reports made before startVitals (the opening screen's load) wait here for the SDK.
85
118
  let held = [];
@@ -108,14 +141,27 @@ function endVisit() {
108
141
  longest_stall_at_ms: Math.round(v.stallAt - v.startedAt),
109
142
  visit_duration_ms: Math.round(now() - v.startedAt),
110
143
  });
144
+ const f0 = v.frames0;
145
+ if (native && f0) {
146
+ native.getFrameStats().then((f) => {
147
+ const total = f.total - f0.total;
148
+ if (total < MIN_FRAMES)
149
+ return;
150
+ const attr = { frames: total, slow: f.slow - f0.slow, frozen: f.frozen - f0.frozen, frame_source: frameSource };
151
+ report('SLOW_FRAMES', ((f.slow - f0.slow) / total) * 10000, v, attr);
152
+ report('FROZEN_FRAMES', ((f.frozen - f0.frozen) / total) * 10000, v, attr);
153
+ }, () => { });
154
+ }
111
155
  }
112
156
  function beginVisit(screen, navigationType) {
113
157
  visit = {
114
158
  id: newId(), screen, navigationType, worstInp: 0, worstInpAttr: null,
115
- maxStall: 0, stallAt: 0, startedAt: now(),
159
+ maxStall: 0, stallAt: 0, startedAt: now(), frames0: null,
116
160
  };
117
161
  lastTick = now();
118
- return visit;
162
+ const v = visit;
163
+ native?.getFrameStats().then((f) => { v.frames0 = f; }, () => { });
164
+ return v;
119
165
  }
120
166
  function tick() {
121
167
  const t = now();
@@ -132,11 +178,50 @@ function onAppState(state) {
132
178
  lastTick = now();
133
179
  if (!visit && currentScreen)
134
180
  beginVisit(currentScreen, 'resume');
181
+ if (backgroundAtWall && native)
182
+ reportReturn(backgroundAtWall);
183
+ backgroundAtWall = 0;
135
184
  }
136
185
  else if (state === 'background' || state === 'inactive') {
186
+ if (state === 'background')
187
+ backgroundAtWall = Date.now();
137
188
  endVisit();
138
189
  }
139
190
  }
191
+ /**
192
+ * The app came back from the background: a WARM start when Android re-created its activity while
193
+ * the process lived on, a HOT start otherwise — from the native moment it started coming back to
194
+ * the first frame JS sees.
195
+ */
196
+ function reportReturn(sinceWall) {
197
+ const v = visit;
198
+ afterNextFrame(() => {
199
+ const endWall = Date.now();
200
+ native?.getLaunchInfo().then((info) => {
201
+ if (!v)
202
+ return;
203
+ const warm = info.activityCreatedMs > sinceWall;
204
+ const start = warm ? info.activityCreatedMs : info.foregroundMs;
205
+ if (!(start >= sinceWall) || endWall - start <= 0 || endWall - start > MAX_START_MS)
206
+ return;
207
+ v.navigationType = warm ? 'warm' : 'hot';
208
+ report(warm ? 'APP_START_WARM' : 'APP_START_HOT', endWall - start, v, {
209
+ start_source: warm ? 'activity_created' : 'foreground', frame_source: info.frameSource,
210
+ });
211
+ }, () => { });
212
+ });
213
+ }
214
+ function maybeReportCold() {
215
+ if (coldReported || !coldStartWall || !firstFrameWall)
216
+ return;
217
+ coldReported = true;
218
+ const value = firstFrameWall - coldStartWall;
219
+ const v = visit;
220
+ if (!v || value <= 0 || value > MAX_START_MS)
221
+ return;
222
+ report('APP_START_COLD', value, { ...v, navigationType: 'cold' }, { start_source: coldStartSource });
223
+ }
224
+ let coldStartSource = '';
140
225
  let currentScreen = null;
141
226
  function startVitals(cb) {
142
227
  emit = cb;
@@ -150,6 +235,29 @@ function startVitals(cb) {
150
235
  return;
151
236
  lastTick = now();
152
237
  stallTimer = setInterval(tick, STALL_TICK_MS);
238
+ native = NATIVE_VITALS_ON.includes(react_native_1.Platform.OS) ? nativeVitals() : null;
239
+ if (native) {
240
+ try {
241
+ native.startFrameMonitor();
242
+ }
243
+ catch { /* frames unavailable */ }
244
+ if (visit && !visit.frames0) {
245
+ const v = visit;
246
+ native.getFrameStats().then((f) => { v.frames0 = f; }, () => { });
247
+ }
248
+ native.getLaunchInfo().then((info) => {
249
+ frameSource = info.frameSource;
250
+ if (!info.firstInProcess) {
251
+ coldReported = true;
252
+ return;
253
+ }
254
+ // A prewarmed iOS process started before anyone opened the app; the launch is from when it
255
+ // finished launching (Apple's advice).
256
+ coldStartWall = info.prewarmed && info.finishedLaunchingMs ? info.finishedLaunchingMs : info.processStartMs;
257
+ coldStartSource = info.prewarmed ? 'finished_launching' : 'process_start';
258
+ maybeReportCold();
259
+ }, () => { });
260
+ }
153
261
  try {
154
262
  appStateSub = react_native_1.AppState.addEventListener('change', onAppState);
155
263
  }
@@ -166,6 +274,7 @@ function stopVitals() {
166
274
  currentScreen = null;
167
275
  lastInput = null;
168
276
  held = [];
277
+ native = null;
169
278
  }
170
279
  /**
171
280
  * A screen became current: the previous visit ends, this one starts, and its load is timed.
@@ -185,6 +294,14 @@ function onScreen(screen) {
185
294
  const byInput = lastInput && t - lastInput.at < NAV_INPUT_WINDOW_MS ? lastInput : null;
186
295
  const start = byInput ? byInput.at : t;
187
296
  afterNextFrame(() => {
297
+ if (!firstFrameWall) {
298
+ firstFrameWall = Date.now();
299
+ try {
300
+ native?.reportFullyDrawn?.();
301
+ }
302
+ catch { /* not on this platform */ }
303
+ maybeReportCold();
304
+ }
188
305
  report('SCREEN_LOAD', now() - start, v, {
189
306
  trigger: byInput ? byInput.kind : 'route_change',
190
307
  target_selector: byInput?.target ?? '',
@@ -1 +1 @@
1
- {"version":3,"file":"vitals.js","sourceRoot":"","sources":["../../src/core/vitals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vitals.js","sourceRoot":"","sources":["../../src/core/vitals.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@ import type { SurveyDefinition } from '../types';
2
2
  interface Props {
3
3
  survey: SurveyDefinition;
4
4
  visible: boolean;
5
- onSubmit: (responses: Record<string, unknown>, meta?: {
5
+ onSubmit: (responses: Record<string, unknown>,
6
+ /** `language`: the language the survey was answered in. */
7
+ meta?: {
6
8
  via?: 'card' | 'button';
9
+ language?: string;
7
10
  }) => void | Promise<boolean | void>;
8
11
  /** @param reason 'swipe' | 'close' | 'auto' | 'defer' — the server tallies
9
12
  * dismissalsBy.<reason>, and an auto-dismiss must not spend a cadence
@@ -1 +1 @@
1
- {"version":3,"file":"SurveyModal.d.ts","sourceRoot":"","sources":["../../src/survey/SurveyModal.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAoCjE,UAAU,KAAK;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IAIjB,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,KAC/B,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC;;qDAEiD;IACjD,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;mEAC+D;IAC/D,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;CACxD;AAiCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CACvD,GAAG,MAAM,GAAG,IAAI,CAQhB;AAcD,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACpD;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CACtD,CASA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAY,EAAE,EAAE,KAAK,2CAwgHxF"}
1
+ {"version":3,"file":"SurveyModal.d.ts","sourceRoot":"","sources":["../../src/survey/SurveyModal.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAmCjE,UAAU,KAAK;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IAIjB,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClC,2DAA2D;IAC3D,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAClD,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC;;qDAEiD;IACjD,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;mEAC+D;IAC/D,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;CACxD;AAiCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CACvD,GAAG,MAAM,GAAG,IAAI,CAQhB;AAcD,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACpD;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CACtD,CASA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAY,EAAE,EAAE,KAAK,2CA2iHxF"}
@@ -49,7 +49,6 @@ const react_native_1 = require("react-native");
49
49
  const types_1 = require("../types");
50
50
  const storage = __importStar(require("../core/storage"));
51
51
  const NPSQuestion_1 = require("./questions/NPSQuestion");
52
- const CSATQuestion_1 = require("./questions/CSATQuestion");
53
52
  const TextQuestion_1 = require("./questions/TextQuestion");
54
53
  const MultipleChoiceQuestion_1 = require("./questions/MultipleChoiceQuestion");
55
54
  const RankingQuestion_1 = require("./questions/RankingQuestion");
@@ -59,6 +58,7 @@ const ImagePickerQuestion_1 = require("./questions/ImagePickerQuestion");
59
58
  const MatrixDropdownQuestion_1 = require("./questions/MatrixDropdownQuestion");
60
59
  const MatrixDynamicQuestion_1 = require("./questions/MatrixDynamicQuestion");
61
60
  const PanelDynamicQuestion_1 = require("./questions/PanelDynamicQuestion");
61
+ const RatingQuestion_1 = require("./questions/RatingQuestion");
62
62
  const DateQuestion_1 = require("./questions/DateQuestion");
63
63
  const survey_spec_1 = require("@cxpinsight/survey-spec");
64
64
  const mobileRecorder_1 = require("../core/mobileRecorder");
@@ -609,7 +609,7 @@ function SurveyModal({ survey, visible, onSubmit, onDismiss, reply = null }) {
609
609
  // server rejection (survey deactivated, cap hit) surfaces a retry
610
610
  // message instead of a false thank-you.
611
611
  const submitAndReset = async () => {
612
- const ok = await onSubmit(buildSubmitPayload(), { via: viaRef.current });
612
+ const ok = await onSubmit(buildSubmitPayload(), { via: viaRef.current, language: currentLanguage || survey.defaultLanguage || undefined });
613
613
  if (ok === false) {
614
614
  setSubmitError('We couldn’t submit your response. Please try again.');
615
615
  return; // keep the survey open for a retry
@@ -949,7 +949,18 @@ function SurveyModal({ survey, visible, onSubmit, onDismiss, reply = null }) {
949
949
  return ((0, jsx_runtime_1.jsx)(NPSQuestion_1.NPSQuestion, { value: val ?? null, onChange: (v) => updateResponse(key, v), contract: contract }));
950
950
  },
951
951
  'rating': () => {
952
- return ((0, jsx_runtime_1.jsx)(CSATQuestion_1.CSATQuestion, { value: val ?? null, onChange: (v) => updateResponse(key, v), maxStars: question.maxValue ?? question.rateMax ?? 5, contract: contract }));
952
+ // ONE scale for every ratingType. This drew CSATQuestion — stars only,
953
+ // always from 1 — so a number, smiley or thumb scale, a 0-based range
954
+ // and the end captions all rendered as five stars on the phone. The
955
+ // keys and the aliases are the web SDK's (_cxpQ_rating): minValue /
956
+ // maxValue (v1.1, also what render.props min/max become above), then
957
+ // the SurveyJS-era rateMin / rateMax; rateLabels' ends win as captions.
958
+ const qx = question;
959
+ const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v)) ? Number(v) : undefined));
960
+ const labels = Array.isArray(qx.rateLabels) ? qx.rateLabels : [];
961
+ return ((0, jsx_runtime_1.jsx)(RatingQuestion_1.RatingQuestion, { value: val ?? null, onChange: (v) => updateResponse(key, v), rateMin: num(qx.minValue) ?? num(qx.rateMin) ?? 1, rateMax: num(qx.maxValue) ?? num(qx.rateMax) ?? 5,
962
+ // Unset is a star — the web SDK's default, and what this always drew.
963
+ ratingType: typeof qx.ratingType === 'string' && qx.ratingType ? qx.ratingType : 'star', minLabel: labels.length ? labels[0] : (qx.minLabel || qx.minRateDescription), maxLabel: labels.length ? labels[labels.length - 1] : (qx.maxLabel || qx.maxRateDescription), contract: contract, explicit: explicitFields }));
953
964
  },
954
965
  'csat': () => RENDERERS['rating'](),
955
966
  'ces': () => RENDERERS['rating'](),
@@ -968,12 +979,12 @@ function SurveyModal({ survey, visible, onSubmit, onDismiss, reply = null }) {
968
979
  'email': () => RENDERERS['text'](),
969
980
  'number': () => RENDERERS['text'](),
970
981
  'radio': () => {
971
- return ((0, jsx_runtime_1.jsx)(MultipleChoiceQuestion_1.MultipleChoiceQuestion, { choices: normalizeChoices(question), value: val ?? '', onChange: (v) => updateResponse(key, v), mode: "radiogroup", isRtl: isRtl, contract: contract }));
982
+ return ((0, jsx_runtime_1.jsx)(MultipleChoiceQuestion_1.MultipleChoiceQuestion, { choices: normalizeChoices(question), value: val ?? '', onChange: (v) => updateResponse(key, v), mode: "radiogroup", isRtl: isRtl, contract: contract, optionLayout: question.optionLayout, explicit: explicitFields }));
972
983
  },
973
984
  'radiogroup': () => RENDERERS['radio'](),
974
985
  'dropdown': () => RENDERERS['radio'](),
975
986
  'checkbox': () => {
976
- return ((0, jsx_runtime_1.jsx)(MultipleChoiceQuestion_1.MultipleChoiceQuestion, { choices: normalizeChoices(question), value: val ?? [], onChange: (v) => updateResponse(key, v), mode: "checkbox", isRtl: isRtl, contract: contract }));
987
+ return ((0, jsx_runtime_1.jsx)(MultipleChoiceQuestion_1.MultipleChoiceQuestion, { choices: normalizeChoices(question), value: val ?? [], onChange: (v) => updateResponse(key, v), mode: "checkbox", isRtl: isRtl, contract: contract, optionLayout: question.optionLayout, explicit: explicitFields }));
977
988
  },
978
989
  'binary': () => {
979
990
  return ((0, jsx_runtime_1.jsx)(MultipleChoiceQuestion_1.MultipleChoiceQuestion, { choices: [
@@ -1561,6 +1572,12 @@ function SurveyModal({ survey, visible, onSubmit, onDismiss, reply = null }) {
1561
1572
  [resolvedTheme, primaryColor,
1562
1573
  JSON.stringify(surveyPaletteOverride), JSON.stringify(initPaletteOverride),
1563
1574
  JSON.stringify(survey.branding?.style)]);
1575
+ // The fields set BY NAME, same layers and order as the contract above
1576
+ // (palette < style slice < host init). Answer surfaces that had no box or
1577
+ // shape before — a bare star, a chip — read these, so a value the contract
1578
+ // only holds as a default cannot redraw them.
1579
+ const explicitFields = (0, react_2.useMemo)(() => (0, styleContract_1.explicitContractFields)(surveyPaletteOverride, stylePlatformSlice(survey.branding?.style), initPaletteOverride), [JSON.stringify(surveyPaletteOverride), JSON.stringify(initPaletteOverride),
1580
+ JSON.stringify(survey.branding?.style)]);
1564
1581
  const styles = (0, react_2.useMemo)(() => makeStyles(contract), [contract]);
1565
1582
  // A picture band outside the header keeps the CARD'S padding. padBand exists only when a density
1566
1583
  // is set; without one the band had no horizontal padding at all and ran edge to edge, like