@explorer02/cfm-survey-sdk 0.3.7 → 0.3.8

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorer02/cfm-survey-sdk",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -30,23 +30,6 @@ function columnHeaderLabelStyle(_question: CsatMatrixQuestion) {
30
30
  return { fontSize: '13px', fontWeight: 500, textAlign: 'center' as const, lineHeight: 1.2, color: '#4b5563' };
31
31
  }
32
32
 
33
- function anchorLabelPercent(
34
- question: CsatMatrixQuestion,
35
- i: number,
36
- n: number,
37
- m: number,
38
- isGraphics: boolean,
39
- ): number {
40
- if (question.type === 'RATING_MATRIX') {
41
- const firstCenter = (0.5 / m) * 100;
42
- const lastCenter = ((m - 0.5) / m) * 100;
43
- return n === 1 ? 50 : firstCenter + (i / (n - 1)) * (lastCenter - firstCenter);
44
- }
45
- const startPercent = isGraphics ? 0 : 0.5 / m;
46
- const rangePercent = isGraphics ? 1 : (m - 1) / m;
47
- return n === 1 ? 50 : (startPercent + (i / (n - 1)) * rangePercent) * 100;
48
- }
49
-
50
33
  function GraphicsColumnLabelsRow({
51
34
  scaleColumns,
52
35
  question,
@@ -55,9 +38,13 @@ function GraphicsColumnLabelsRow({
55
38
  question: CsatMatrixQuestion;
56
39
  }) {
57
40
  if (scaleColumns.length === 0) return null;
58
- const labelStyle = question.type === 'RATING_MATRIX'
59
- ? { fontSize: '12px', fontWeight: 500, lineHeight: 1.2, wordBreak: 'break-word' as const, color: '#4b5563' }
60
- : { fontSize: '12px', fontWeight: 500, lineHeight: 1.2, wordBreak: 'break-word' as const, ...csatColumnLabelStyle() };
41
+ const labelStyle = {
42
+ fontSize: '12px',
43
+ fontWeight: 500,
44
+ lineHeight: 1.2,
45
+ wordBreak: 'break-word' as const,
46
+ color: '#4b5563',
47
+ };
61
48
 
62
49
  return (
63
50
  <div style={{ flex: 1, padding: '0 24px' }}>
@@ -233,7 +220,9 @@ function CsatMatrixGrid({
233
220
  <div style={{ flex: 1, display: 'flex' }}>
234
221
  <div style={{ flex: 1, position: 'relative', height: '24px', ...(isGraphics ? { margin: '0 40px' } : {}) }}>
235
222
  {labels!.map((label, i) => {
236
- const percent = anchorLabelPercent(question, i, n, m, isGraphics);
223
+ const startPercent = isGraphics ? 0 : 0.5 / m;
224
+ const rangePercent = isGraphics ? 1 : (m - 1) / m;
225
+ const percent = n === 1 ? 50 : (startPercent + (i / (n - 1)) * rangePercent) * 100;
237
226
 
238
227
  return (
239
228
  <div key={i} style={{
@@ -374,9 +363,17 @@ function CsatMatrixGrid({
374
363
  fontSize: '14px', fontWeight: 500,
375
364
  ...(isSelected
376
365
  ? scaleCellSelectedStyle(true)
377
- : { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827', ...unselectedOpacityStyle() }),
366
+ : {
367
+ border: '1px solid #d1d5db',
368
+ backgroundColor: '#fff',
369
+ color: '#111827',
370
+ ...unselectedOpacityStyle(),
371
+ }),
378
372
  transition: 'all 0.15s',
379
- } : { padding: '8px', ...(!isSelected ? unselectedOpacityStyle() : {}) }),
373
+ } : {
374
+ padding: '8px',
375
+ ...(isSelected ? {} : unselectedOpacityStyle()),
376
+ }),
380
377
  }}
381
378
  >
382
379
  {(EmojiNode ?? StarNode ?? (isNumbered ? (displayIdx + 1) : RadioNode)) as React.ReactNode}
@@ -464,7 +461,9 @@ function CsatMatrixCarousel({
464
461
  {labels!.map((label, i) => {
465
462
  const m = scaleColumns.length;
466
463
  const n = labels!.length;
467
- const percent = anchorLabelPercent(question, i, n, m, isGraphics);
464
+ const startPercent = isGraphics ? 0 : 0.5 / m;
465
+ const rangePercent = isGraphics ? 1 : (m - 1) / m;
466
+ const percent = n === 1 ? 50 : (startPercent + (i / (n - 1)) * rangePercent) * 100;
468
467
 
469
468
  return (
470
469
  <div key={i} style={{
@@ -533,17 +532,15 @@ function CsatMatrixCarousel({
533
532
  cursor: 'pointer', borderRadius: '6px', pointerEvents: 'none',
534
533
  ...(isEmoji ? {
535
534
  padding: '6px', transform: isSelected ? 'scale(1.1)' : isHovered ? 'scale(1.25)' : 'scale(1)',
536
- ...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } : unselectedOpacityStyle()),
535
+ ...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } : {}),
537
536
  } : isStar ? {
538
- padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)',
539
- color: isSelected ? cellSelectedVar : focusRingVar,
540
- ...(isSelected ? {} : unselectedOpacityStyle()),
537
+ padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)', opacity: isSelected ? 1 : isHovered ? 1 : 0.5,
541
538
  } : isNumbered ? {
542
539
  width: '40px', height: '40px', borderRadius: '8px', fontSize: '14px', fontWeight: 500,
543
540
  ...(isSelected
544
541
  ? scaleCellSelectedStyle(true)
545
- : { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827', ...unselectedOpacityStyle() }),
546
- } : { padding: '8px', ...(!isSelected ? unselectedOpacityStyle() : {}) }),
542
+ : { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827' }),
543
+ } : { padding: '8px' }),
547
544
  }}
548
545
  >
549
546
  {(EmojiNode ?? StarNode ?? (isNumbered ? (displayIdx + 1) : RadioNode)) as React.ReactNode}
@@ -76,18 +76,19 @@ export default function Header({ embedded = false }: HeaderProps) {
76
76
  {seedCompany}
77
77
  </span>
78
78
 
79
- <span
80
- data-cfm-company
81
- className="font-semibold"
82
- style={{
83
- display: seedShowCompany && seedCompany ? '' : 'none',
84
- color: 'var(--cfm-header-company-color, var(--cfm-text))',
85
- fontSize: 'var(--cfm-header-company-size, 18px)',
86
- fontWeight: 'var(--cfm-header-company-weight, 600)',
87
- }}
88
- >
89
- {seedCompany}
90
- </span>
79
+ {seedShowCompany && hasLogoFile && seedCompany ? (
80
+ <span
81
+ data-cfm-company
82
+ className="font-semibold"
83
+ style={{
84
+ color: 'var(--cfm-header-company-color, var(--cfm-text))',
85
+ fontSize: 'var(--cfm-header-company-size, 18px)',
86
+ fontWeight: 'var(--cfm-header-company-weight, 600)',
87
+ }}
88
+ >
89
+ {seedCompany}
90
+ </span>
91
+ ) : null}
91
92
  </div>
92
93
  </div>
93
94
  </header>
@@ -81,7 +81,7 @@ export function SliderMatrixScale({ question, selectedValue = {}, onSelect }: Sl
81
81
  display: 'flex',
82
82
  justifyContent: 'space-between',
83
83
  margin: '0 16px',
84
- marginBottom: labels && labels.length > 0 ? '24px' : '16px',
84
+ marginBottom: '16px',
85
85
  fontSize: '14px',
86
86
  fontWeight: 500,
87
87
  }}
@@ -100,7 +100,6 @@ export function SliderMatrixScale({ question, selectedValue = {}, onSelect }: Sl
100
100
  style={{
101
101
  position: 'relative',
102
102
  margin: '0 16px',
103
- marginTop: labels && labels.length > 0 ? '4px' : 0,
104
103
  marginBottom: '8px',
105
104
  fontSize: '14px',
106
105
  fontWeight: 400,
@@ -81,31 +81,6 @@
81
81
  applyDropzoneStyle();
82
82
  }
83
83
 
84
- function ensureCompanySpan() {
85
- if (document.querySelector('[data-cfm-company]')) return;
86
- var brand = document.querySelector('.cfm-header-brand');
87
- if (!brand) return;
88
- var span = document.createElement('span');
89
- span.setAttribute('data-cfm-company', '');
90
- span.className = 'font-semibold';
91
- brand.appendChild(span);
92
- }
93
-
94
- function showCompanyNameAllowed() {
95
- var attr = document.documentElement.getAttribute('data-cfm-show-company-name');
96
- if (attr === '0') return false;
97
- return true;
98
- }
99
-
100
- function updateCompanyVisibility(name) {
101
- ensureCompanySpan();
102
- var visible = showCompanyNameAllowed() && Boolean(name);
103
- document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
104
- if (name) el.textContent = name;
105
- el.style.display = visible ? '' : 'none';
106
- });
107
- }
108
-
109
84
  function applyContent(patch) {
110
85
  if (!patch) return;
111
86
  if (patch.logoUrl !== undefined) {
@@ -130,14 +105,16 @@
130
105
  });
131
106
  document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
132
107
  if (patch.logoUrl) {
133
- ensureCompanySpan();
134
- updateCompanyVisibility(el.textContent || '');
108
+ el.style.display = el.textContent ? '' : 'none';
135
109
  }
136
110
  });
137
111
  }
138
112
  if (patch.companyName !== undefined) {
139
113
  var name = patch.companyName || '';
140
- updateCompanyVisibility(name);
114
+ document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
115
+ el.textContent = name;
116
+ el.style.display = name ? '' : 'none';
117
+ });
141
118
  document.querySelectorAll('[data-cfm-logo-text]').forEach(function (el) {
142
119
  var logoImg = document.querySelector('[data-cfm-logo]');
143
120
  var logoVisible =
@@ -197,12 +174,7 @@
197
174
  if (patch.layoutFlags) {
198
175
  var flags = patch.layoutFlags;
199
176
  if (flags.showCompanyName !== undefined) {
200
- document.documentElement.setAttribute(
201
- 'data-cfm-show-company-name',
202
- flags.showCompanyName ? '1' : '0',
203
- );
204
- var companyEl = document.querySelector('[data-cfm-company]');
205
- updateCompanyVisibility(companyEl ? companyEl.textContent : patch.companyName || '');
177
+ setDisplay('[data-cfm-company]', flags.showCompanyName);
206
178
  }
207
179
  if (flags.showHeader !== undefined) {
208
180
  setDisplay('.cfm-header, header.cfm-header', flags.showHeader);
@@ -72,7 +72,6 @@ export function PreviewConfigProvider({ children }: { children: ReactNode }) {
72
72
  if (data.type !== PREVIEW_BRIDGE_SNAPSHOT && data.type !== PREVIEW_BRIDGE_DELTA) return;
73
73
  if (data.contentPatch?.previewState) {
74
74
  setPreviewState((prev) => ({ ...prev, ...data.contentPatch.previewState }));
75
- setConfigRevision((r) => r + 1);
76
75
  }
77
76
  if (data.contentPatch?.domAttributes) {
78
77
  const root = document.documentElement;
@@ -86,6 +85,7 @@ export function PreviewConfigProvider({ children }: { children: ReactNode }) {
86
85
  root.style.setProperty(key, value as string);
87
86
  }
88
87
  }
88
+ setConfigRevision((r) => r + 1);
89
89
  applyThemeSideEffects();
90
90
  };
91
91
 
@@ -19,7 +19,18 @@ const LIKERT_COLUMNS = [
19
19
  { id: 'c5', label: 'Strongly Agree' },
20
20
  ];
21
21
 
22
- const MATRIX_ANCHOR_LABELS = LIKERT_COLUMNS.map((c) => c.label);
22
+ const MATRIX_ANCHOR_LABELS = [
23
+ 'Strongly Disagree',
24
+ 'Disagree',
25
+ 'Neutral',
26
+ 'Agree',
27
+ 'Strongly Agree',
28
+ ];
29
+
30
+ const SCALE_COLUMNS_10 = Array.from({ length: 10 }, (_, i) => ({
31
+ id: `c${i}`,
32
+ label: String(i + 1),
33
+ }));
23
34
 
24
35
  const MATRIX_ROW_SINGLE = [{ id: 'r1', statementText: 'Statement Item 1' }];
25
36
 
@@ -211,8 +222,8 @@ export const FIXTURE_CSAT_EMOJI = base({
211
222
  displayStyle: 'emoji',
212
223
  gridLayout: 'standard',
213
224
  statementRows: MATRIX_ROW_SINGLE,
214
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
215
- scaleAnchorLabels: [...MATRIX_ANCHOR_LABELS],
225
+ scaleColumns: SCALE_COLUMNS_10,
226
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
216
227
  });
217
228
 
218
229
  export const FIXTURE_CSAT_STAR = base({
@@ -220,7 +231,8 @@ export const FIXTURE_CSAT_STAR = base({
220
231
  displayStyle: 'star',
221
232
  gridLayout: 'standard',
222
233
  statementRows: MATRIX_ROW_SINGLE,
223
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
234
+ scaleColumns: SCALE_COLUMNS_10,
235
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
224
236
  });
225
237
 
226
238
  export const FIXTURE_CSAT_NUMBERED = base({
@@ -228,7 +240,8 @@ export const FIXTURE_CSAT_NUMBERED = base({
228
240
  displayStyle: 'numbered',
229
241
  gridLayout: 'standard',
230
242
  statementRows: MATRIX_ROWS_MULTI,
231
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
243
+ scaleColumns: SCALE_COLUMNS_10,
244
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
232
245
  });
233
246
 
234
247
  export const FIXTURE_CSAT_GRAPHICS = base({
@@ -236,8 +249,8 @@ export const FIXTURE_CSAT_GRAPHICS = base({
236
249
  displayStyle: 'graphics',
237
250
  gridLayout: 'standard',
238
251
  statementRows: MATRIX_ROW_SINGLE,
239
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
240
- scaleAnchorLabels: [MATRIX_ANCHOR_LABELS[0], MATRIX_ANCHOR_LABELS[4]],
252
+ scaleColumns: SCALE_COLUMNS_10,
253
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
241
254
  });
242
255
 
243
256
  export const FIXTURE_CSAT_CAROUSEL = base({
@@ -267,7 +280,8 @@ export const FIXTURE_RATING_STAR = base({
267
280
  gridLayout: 'standard',
268
281
  showColumnHeaders: true,
269
282
  statementRows: MATRIX_ROWS_MULTI,
270
- scaleColumns: LIKERT_COLUMNS,
283
+ scaleColumns: SCALE_COLUMNS_10,
284
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
271
285
  });
272
286
 
273
287
  export const FIXTURE_RATING_NUMBERED = base({
@@ -275,7 +289,8 @@ export const FIXTURE_RATING_NUMBERED = base({
275
289
  displayStyle: 'numbered',
276
290
  gridLayout: 'standard',
277
291
  statementRows: MATRIX_ROWS_MULTI,
278
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
292
+ scaleColumns: SCALE_COLUMNS_10,
293
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
279
294
  });
280
295
 
281
296
  export const FIXTURE_RATING_RADIO = base({
@@ -283,7 +298,8 @@ export const FIXTURE_RATING_RADIO = base({
283
298
  displayStyle: 'standard',
284
299
  gridLayout: 'standard',
285
300
  statementRows: MATRIX_ROW_SINGLE,
286
- scaleColumns: LIKERT_COLUMNS,
301
+ scaleColumns: SCALE_COLUMNS_10,
302
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
287
303
  });
288
304
 
289
305
  export const FIXTURE_RATING_EMOJI = base({
@@ -291,7 +307,8 @@ export const FIXTURE_RATING_EMOJI = base({
291
307
  displayStyle: 'emoji',
292
308
  gridLayout: 'standard',
293
309
  statementRows: MATRIX_ROW_SINGLE,
294
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
310
+ scaleColumns: SCALE_COLUMNS_10,
311
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
295
312
  });
296
313
 
297
314
  export const FIXTURE_RATING_GRAPHICS = base({
@@ -299,8 +316,8 @@ export const FIXTURE_RATING_GRAPHICS = base({
299
316
  displayStyle: 'graphics',
300
317
  gridLayout: 'standard',
301
318
  statementRows: MATRIX_ROW_SINGLE,
302
- scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
303
- scaleAnchorLabels: [...MATRIX_ANCHOR_LABELS],
319
+ scaleColumns: SCALE_COLUMNS_10,
320
+ scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
304
321
  });
305
322
 
306
323
  export const FIXTURE_RATING_SLIDER = base({
@@ -290,15 +290,3 @@ body {
290
290
  .cfm-live-edit * {
291
291
  transition: none !important;
292
292
  }
293
-
294
- html[data-cfm-show-company-name='0'] [data-cfm-company] {
295
- display: none !important;
296
- }
297
-
298
- html[data-cfm-show-question-numbers='0'] [data-cfm-question-number] {
299
- display: none !important;
300
- }
301
-
302
- html[data-cfm-show-required='0'] [data-cfm-required] {
303
- display: none !important;
304
- }
@@ -1 +1 @@
1
- import{u as x,j as e}from"./index-BDaoM71z.js";import{b as t}from"./vendor-BwkXDkd3.js";function p(d=150){const l=x(r=>r.config),[a,s]=t.useState(l);return t.useEffect(()=>{const r=window.setTimeout(()=>s(l),d);return()=>window.clearTimeout(r)},[l,d]),a}const h=t.memo(function(){const l=p(150),a=x(n=>n.logoPreviewDataUrl),{global:s}=l,{layout:r,colorScheme:o,buttons:c}=s,m=t.useMemo(()=>r.borderStyle==="sharp"?"rounded-none":r.borderStyle==="pill"?"rounded-[32px]":"rounded-2xl",[r.borderStyle]),i=t.useMemo(()=>r.fontStyle==="serif"?"Georgia, serif":r.fontStyle==="system"?"system-ui, sans-serif":"Inter, sans-serif",[r.fontStyle]),u=a??s.logo.url,f=t.useMemo(()=>({backgroundColor:o.background,color:o.text,borderColor:o.secondary,fontFamily:i}),[o,i]);return e.jsxs("div",{className:`overflow-hidden border shadow-md ${m}`,style:f,children:[r.showHeader&&e.jsxs("div",{className:"flex items-center gap-3 border-b px-5 py-4",style:{borderColor:o.secondary},children:[u&&e.jsx("img",{src:u,alt:"Logo",className:"max-h-6 w-auto object-contain",loading:"lazy"}),e.jsx("span",{className:"text-xs font-semibold tracking-wider",children:s.companyName})]}),e.jsxs("div",{className:"space-y-6 p-6",children:[r.showProgressBar&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex justify-between text-[10px] font-semibold text-slate-400",children:[e.jsx("span",{children:"Progress"}),e.jsx("span",{children:"35%"})]}),e.jsx("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-slate-100",children:e.jsx("div",{className:"h-full w-[35%] rounded-full",style:{backgroundColor:o.accent}})})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h4",{className:"flex items-start gap-1.5 text-sm font-bold leading-snug",children:[r.showQuestionNumbers&&e.jsx("span",{className:"font-medium text-slate-400",children:"Q1."}),e.jsx("span",{children:s.surveyTitle}),r.showRequiredAsterisk&&e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsx("p",{className:"text-[11px] text-slate-400",children:"How would you rate your overall experience?"}),e.jsx("div",{className:"grid grid-cols-5 gap-2",children:[1,2,3,4,5].map(n=>e.jsx("div",{className:`flex h-9 items-center justify-center border text-xs font-semibold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:n===1?{backgroundColor:o.secondary,borderColor:o.primary,color:o.primary}:{backgroundColor:o.background,borderColor:o.secondary,color:o.text},children:n},n))})]})]}),e.jsxs("div",{className:"flex items-center justify-between border-t bg-slate-50/50 px-6 py-4",children:[r.showBackButton&&e.jsx("span",{className:`border px-3 py-1.5 text-[10px] font-semibold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:{borderColor:o.secondary,color:o.text},children:c.back}),e.jsx("div",{className:"flex-1"}),r.showNextButton&&e.jsx("span",{className:`px-4 py-1.5 text-[10px] font-bold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:{backgroundColor:o.primary,color:o.buttonText},children:c.next})]})]})});export{h as PreviewMock};
1
+ import{u as x,j as e}from"./index-hjm-fxWO.js";import{b as t}from"./vendor-BwkXDkd3.js";function p(d=150){const l=x(r=>r.config),[a,s]=t.useState(l);return t.useEffect(()=>{const r=window.setTimeout(()=>s(l),d);return()=>window.clearTimeout(r)},[l,d]),a}const h=t.memo(function(){const l=p(150),a=x(n=>n.logoPreviewDataUrl),{global:s}=l,{layout:r,colorScheme:o,buttons:c}=s,m=t.useMemo(()=>r.borderStyle==="sharp"?"rounded-none":r.borderStyle==="pill"?"rounded-[32px]":"rounded-2xl",[r.borderStyle]),i=t.useMemo(()=>r.fontStyle==="serif"?"Georgia, serif":r.fontStyle==="system"?"system-ui, sans-serif":"Inter, sans-serif",[r.fontStyle]),u=a??s.logo.url,f=t.useMemo(()=>({backgroundColor:o.background,color:o.text,borderColor:o.secondary,fontFamily:i}),[o,i]);return e.jsxs("div",{className:`overflow-hidden border shadow-md ${m}`,style:f,children:[r.showHeader&&e.jsxs("div",{className:"flex items-center gap-3 border-b px-5 py-4",style:{borderColor:o.secondary},children:[u&&e.jsx("img",{src:u,alt:"Logo",className:"max-h-6 w-auto object-contain",loading:"lazy"}),e.jsx("span",{className:"text-xs font-semibold tracking-wider",children:s.companyName})]}),e.jsxs("div",{className:"space-y-6 p-6",children:[r.showProgressBar&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex justify-between text-[10px] font-semibold text-slate-400",children:[e.jsx("span",{children:"Progress"}),e.jsx("span",{children:"35%"})]}),e.jsx("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-slate-100",children:e.jsx("div",{className:"h-full w-[35%] rounded-full",style:{backgroundColor:o.accent}})})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h4",{className:"flex items-start gap-1.5 text-sm font-bold leading-snug",children:[r.showQuestionNumbers&&e.jsx("span",{className:"font-medium text-slate-400",children:"Q1."}),e.jsx("span",{children:s.surveyTitle}),r.showRequiredAsterisk&&e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsx("p",{className:"text-[11px] text-slate-400",children:"How would you rate your overall experience?"}),e.jsx("div",{className:"grid grid-cols-5 gap-2",children:[1,2,3,4,5].map(n=>e.jsx("div",{className:`flex h-9 items-center justify-center border text-xs font-semibold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:n===1?{backgroundColor:o.secondary,borderColor:o.primary,color:o.primary}:{backgroundColor:o.background,borderColor:o.secondary,color:o.text},children:n},n))})]})]}),e.jsxs("div",{className:"flex items-center justify-between border-t bg-slate-50/50 px-6 py-4",children:[r.showBackButton&&e.jsx("span",{className:`border px-3 py-1.5 text-[10px] font-semibold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:{borderColor:o.secondary,color:o.text},children:c.back}),e.jsx("div",{className:"flex-1"}),r.showNextButton&&e.jsx("span",{className:`px-4 py-1.5 text-[10px] font-bold ${r.borderStyle==="pill"?"rounded-full":r.borderStyle==="sharp"?"rounded-none":"rounded-lg"}`,style:{backgroundColor:o.primary,color:o.buttonText},children:c.next})]})]})});export{h as PreviewMock};
@@ -0,0 +1 @@
1
+ import{u as m,j as e,T as z,S as j,R as d,C as i,N as t,a as A,M as F}from"./index-hjm-fxWO.js";import"./vendor-BwkXDkd3.js";const N="Applies to the 5 anchor labels shared across all formats. First and last align with options 1 and 10; middle labels are spaced evenly. Numeric column headers (1–10) are plain text.";function b({values:o,onPatch:r}){return e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(i,{label:"Label text color",value:o.columnLabelColor,onChange:a=>r({columnLabelColor:a})}),e.jsx(i,{label:"Label background",value:o.columnLabelBgColor,onChange:a=>r({columnLabelBgColor:a})})]})}function T({values:o,onPatch:r}){return e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("label",{className:"space-y-1 sm:col-span-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Min hint label"}),e.jsx("input",{className:"w-full rounded-lg border border-white/10 bg-slate-950/50 px-3 py-2 text-sm text-white",value:o.hintMinText,onChange:a=>r({hintMinText:a.target.value})})]}),e.jsxs("label",{className:"space-y-1 sm:col-span-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Max hint label"}),e.jsx("input",{className:"w-full rounded-lg border border-white/10 bg-slate-950/50 px-3 py-2 text-sm text-white",value:o.hintMaxText,onChange:a=>r({hintMaxText:a.target.value})})]}),e.jsx(i,{label:"Hint text color",value:o.hintLabelColor,onChange:a=>r({hintLabelColor:a})}),e.jsx(i,{label:"Hint label background",value:o.hintLabelBgColor,onChange:a=>r({hintLabelBgColor:a})})]})}function k({values:o,onPatch:r,count:a=11}){return e.jsxs("div",{className:"space-y-3",children:[e.jsx(j,{label:"Number label style",value:o.numberLabelMode,onChange:c=>r({numberLabelMode:c}),options:[{value:"traffic",label:"Traffic light (default)"},{value:"monochrome",label:"Monochrome (one color)"},{value:"individual",label:"Individual per number"}]}),o.numberLabelMode==="monochrome"&&e.jsx(i,{label:"Monochrome color",value:o.monochromeNumberColor,onChange:c=>r({monochromeNumberColor:c})}),o.numberLabelMode==="individual"&&e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:Array.from({length:a},(c,x)=>e.jsx(i,{label:`#${x}`,value:o.individualNumberColors[x]??"#9CA3AF",onChange:C=>{const h=[...o.individualNumberColors];h[x]=C,r({individualNumberColors:h})}},x))})]})}function s({title:o,children:r}){return e.jsxs("div",{className:"space-y-3 rounded-xl border border-white/5 bg-slate-950/20 p-4",children:[e.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-slate-400",children:o}),r]})}function O({type:o,activeFormat:r}){const a=m(l=>l.config.questionTypes[o]),c=m(l=>l.updateQuestionType),x=m(l=>l.previewMultiStatementByType),C=m(l=>l.setPreviewMultiStatementForType),h=m(l=>l.heatmapPreviewPin);if(!a)return e.jsx("p",{className:"text-sm text-slate-500",children:"No configuration available for this type."});const n=l=>c(o,l),M=F.includes(o),y=!!x[o],u=r.includes("star"),g=r.includes("emoji"),f=r.includes("numbered"),v=r.includes("drag"),S=r.includes("dropdown"),B=r.includes("radio"),L=r==="CFM_bipolar",w=r.includes("graphics"),p=g||u||f||B,P=a.optionStyle??a.cardStyle??"outlined",R=a.buttonStyle??"numbered";return e.jsxs("div",{className:"space-y-4",children:[M&&e.jsx(z,{label:"Preview multiple statements",checked:y,onChange:l=>C(o,l)}),o==="MCQ"&&"optionGap"in a&&e.jsx(s,{title:"Option style",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(j,{label:"Option style",value:a.optionStyle??a.cardStyle??"outlined",onChange:l=>n({optionStyle:l}),options:[{value:"outlined",label:"Outlined"},{value:"filled",label:"Filled"},{value:"minimal",label:"Minimal"}]}),e.jsx(d,{label:"Option gap",value:a.optionGap,onChange:l=>n({optionGap:l}),min:0,max:32}),e.jsx(d,{label:"Border radius",value:a.borderRadius,onChange:l=>n({borderRadius:l}),min:0,max:24}),e.jsx(d,{label:"Option padding",value:a.optionPadding??12,onChange:l=>n({optionPadding:l}),min:4,max:24}),e.jsx(i,{label:"Hover border",value:a.hoverBorderColor,onChange:l=>n({hoverBorderColor:l})}),P==="filled"&&e.jsx(i,{label:"Unselected fill color",value:a.filledOptionBg??"#F9FAFB",onChange:l=>n({filledOptionBg:l})})]})}),o==="TEXTFIELD"&&"defaultPlaceholder"in a&&e.jsx(s,{title:"Text input",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("label",{className:"space-y-1 sm:col-span-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-slate-500",children:"Default placeholder"}),e.jsx("input",{className:"w-full rounded-lg border border-white/10 bg-slate-950/50 px-3 py-2 text-sm text-white",value:a.defaultPlaceholder,onChange:l=>n({defaultPlaceholder:l.target.value})})]}),e.jsx(t,{label:"Input radius (px)",value:a.inputRadius,onChange:l=>n({inputRadius:l}),min:0,max:24}),e.jsx(i,{label:"Border color",value:a.borderColor,onChange:l=>n({borderColor:l})}),e.jsx(i,{label:"Placeholder color",value:a.placeholderColor,onChange:l=>n({placeholderColor:l})}),e.jsx(t,{label:"Input height (px)",value:a.inputHeight,onChange:l=>n({inputHeight:l}),min:32,max:64}),e.jsx(t,{label:"Input padding (px)",value:a.inputPadding,onChange:l=>n({inputPadding:l}),min:8,max:24})]})}),o==="NPS_SCALE"&&"buttonStyle"in a&&e.jsxs(e.Fragment,{children:[e.jsxs(s,{title:"NPS buttons",children:[e.jsx(j,{label:"Button style",value:a.buttonStyle,onChange:l=>n({buttonStyle:l}),options:[{value:"standard",label:"Radio"},{value:"numbered",label:"Numbered badges"}]}),e.jsx("p",{className:"text-xs text-slate-500",children:"Selected cell and focus ring come from Theme → Question card."})]}),e.jsx(s,{title:"Hint labels",children:e.jsx(T,{values:a,onPatch:n})}),R==="numbered"&&e.jsx(s,{title:"Number labels",children:e.jsx(k,{values:a,onPatch:n})}),e.jsx(s,{title:"Track & cells",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(t,{label:"Cell size (px)",value:a.cellSize,onChange:l=>n({cellSize:l}),min:24,max:56}),e.jsx(t,{label:"Cell gap (px)",value:a.cellGap,onChange:l=>n({cellGap:l}),min:0,max:16}),e.jsx(i,{label:"Track bar",value:a.trackBarColor,onChange:l=>n({trackBarColor:l})}),e.jsx(i,{label:"Track highlight",value:a.trackHighlightColor,onChange:l=>n({trackHighlightColor:l})})]})})]}),o==="CFM_MATRIX"&&"rowLabelWidth"in a&&e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Matrix layout",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(t,{label:"Row label width (px)",value:a.rowLabelWidth,onChange:l=>n({rowLabelWidth:l}),min:120,max:280}),L&&e.jsx(t,{label:"Bipolar column width (%)",value:a.bipolarColumnWidthPercent,onChange:l=>n({bipolarColumnWidthPercent:l}),min:15,max:40}),e.jsx(t,{label:"Cell padding (px)",value:a.cellPadding,onChange:l=>n({cellPadding:l}),min:4,max:24})]})}),e.jsx(s,{title:"Label items",children:e.jsx(b,{values:a,onPatch:n})})]}),o==="CSAT_MATRIX"&&"emojiSize"in a&&e.jsxs(e.Fragment,{children:[(g||p||u)&&e.jsxs(s,{title:`${A.CSAT_MATRIX} — ${r.replace("CSAT_","")}`,children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[g&&e.jsx(t,{label:"Emoji size (px)",value:a.emojiSize,onChange:l=>n({emojiSize:l}),min:16,max:40}),u&&e.jsx(i,{label:"Star color",value:a.accentColor,onChange:l=>n({accentColor:l})}),p&&e.jsx(d,{label:"Unselected opacity",value:Math.round(a.unselectedOpacity*100),onChange:l=>n({unselectedOpacity:l/100}),min:10,max:100})]}),e.jsx("p",{className:"text-xs text-slate-500",children:"Selected cell color and focus ring come from Theme → Question card."})]}),e.jsxs(s,{title:"Label items",children:[e.jsx("p",{className:"text-xs text-slate-500",children:N}),e.jsx(b,{values:a,onPatch:n})]}),w&&e.jsx(s,{title:"Graphics track",children:e.jsx(i,{label:"Track color",value:a.graphicsTrackColor,onChange:l=>n({graphicsTrackColor:l})})})]}),o==="RATING_MATRIX"&&"unselectedStarOpacity"in a&&e.jsxs(e.Fragment,{children:[(g||p||u)&&e.jsxs(s,{title:`Rating — ${r.replace("RATING_","")}`,children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[g&&e.jsx(t,{label:"Emoji size (px)",value:a.emojiSize,onChange:l=>n({emojiSize:l}),min:16,max:40}),u&&e.jsx(i,{label:"Star color",value:a.starColor,onChange:l=>n({starColor:l})}),p&&e.jsx(d,{label:"Unselected opacity",value:Math.round(a.unselectedStarOpacity*100),onChange:l=>n({unselectedStarOpacity:l/100}),min:10,max:100})]}),e.jsx("p",{className:"text-xs text-slate-500",children:"Selected cell color and focus ring come from Theme → Question card."})]}),e.jsxs(s,{title:"Label items",children:[e.jsx("p",{className:"text-xs text-slate-500",children:N}),e.jsx(b,{values:a,onPatch:n})]}),w&&e.jsx(s,{title:"Graphics track",children:e.jsx(i,{label:"Track color",value:a.graphicsTrackColor,onChange:l=>n({graphicsTrackColor:l})})})]}),o==="SLIDER_MATRIX"&&"trackColor"in a&&e.jsxs(e.Fragment,{children:[e.jsx(s,{title:"Slider track",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(i,{label:"Track",value:a.trackColor,onChange:l=>n({trackColor:l})}),e.jsx(i,{label:"Thumb",value:a.thumbColor,onChange:l=>n({thumbColor:l})}),e.jsx(t,{label:"Row label width (px)",value:a.rowLabelWidth,onChange:l=>n({rowLabelWidth:l}),min:120,max:280}),e.jsx(i,{label:"Row band",value:a.rowBandColor,onChange:l=>n({rowBandColor:l})}),e.jsx(t,{label:"Tick badge size (px)",value:a.tickBadgeSize,onChange:l=>n({tickBadgeSize:l}),min:20,max:40})]})}),e.jsx(s,{title:"Anchor hint labels",children:e.jsx(T,{values:a,onPatch:n})}),e.jsx(s,{title:"Tick label items",children:e.jsx(b,{values:a,onPatch:n})}),e.jsx(s,{title:"Tick number labels",children:e.jsx(k,{values:a,onPatch:n,count:11})})]}),o==="FILE_UPLOAD"&&"dropzoneStyle"in a&&e.jsx(s,{title:"Dropzone",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(j,{label:"Dropzone border",value:a.dropzoneStyle,onChange:l=>n({dropzoneStyle:l}),options:[{value:"dashed",label:"Dashed"},{value:"solid",label:"Solid"}]}),e.jsx(i,{label:"Border color",value:a.borderColor??a.accentColor,onChange:l=>n({borderColor:l})}),e.jsx(i,{label:"Fill color",value:a.dropzoneFillColor,onChange:l=>n({dropzoneFillColor:l})}),e.jsx(t,{label:"Padding (px)",value:a.dropzonePadding,onChange:l=>n({dropzonePadding:l}),min:12,max:48})]})}),o==="TEXT_AND_MEDIA"&&"mediaMaxWidth"in a&&e.jsx(s,{title:"Text & media",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(d,{label:"Media max width (%)",value:a.mediaMaxWidth,onChange:l=>n({mediaMaxWidth:l}),min:50,max:100}),e.jsx(d,{label:"Media corner radius",value:a.mediaRadius,onChange:l=>n({mediaRadius:l}),min:0,max:24}),e.jsx(i,{label:"Caption color",value:a.captionColor,onChange:l=>n({captionColor:l})}),e.jsx(t,{label:"Caption size (px)",value:a.captionSize,onChange:l=>n({captionSize:l}),min:10,max:24})]})}),o==="HEATMAP"&&"pinColor"in a&&e.jsx(s,{title:"Heatmap pin",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(i,{label:"Pin color",value:a.pinColor,onChange:l=>n({pinColor:l})}),e.jsx(i,{label:"Pin border",value:a.pinBorderColor,onChange:l=>n({pinBorderColor:l})}),e.jsx(d,{label:"Pin size",value:a.pinSize,onChange:l=>n({pinSize:l}),min:8,max:32}),e.jsx(d,{label:"Overlay opacity",value:Math.round(a.overlayOpacity*100),onChange:l=>n({overlayOpacity:l/100}),min:0,max:80}),e.jsxs("p",{className:"text-xs text-slate-500 sm:col-span-2",children:["Click the heatmap image in the preview to place a pin and see styling update live. Pin preview position: ",Math.round(h.x*100),"%, ",Math.round(h.y*100),"%"]})]})}),o==="RANK_ORDER"&&"drag"in a&&e.jsx(s,{title:v?"Drag & drop":S?"Dropdown rank":"Rank order",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[v&&e.jsxs(e.Fragment,{children:[e.jsx(i,{label:"Item background",value:a.drag.itemBg,onChange:l=>n({drag:{...a.drag,itemBg:l}})}),e.jsx(i,{label:"Drag handle",value:a.drag.dragHandleColor,onChange:l=>n({drag:{...a.drag,dragHandleColor:l}})}),e.jsx(i,{label:"Rank badge",value:a.drag.rankBadgeColor,onChange:l=>n({drag:{...a.drag,rankBadgeColor:l}})})]}),S&&e.jsxs(e.Fragment,{children:[e.jsx(i,{label:"Item background",value:a.dropdown.itemBg,onChange:l=>n({dropdown:{...a.dropdown,itemBg:l}})}),e.jsx(i,{label:"List hover background",value:a.dropdown.itemHoverBg??"#F3F4F6",onChange:l=>n({dropdown:{...a.dropdown,itemHoverBg:l}})}),e.jsx(i,{label:"Select border",value:a.dropdown.selectBorderColor,onChange:l=>n({dropdown:{...a.dropdown,selectBorderColor:l}})}),e.jsx(i,{label:"Rank badge",value:a.dropdown.rankBadgeColor,onChange:l=>n({dropdown:{...a.dropdown,rankBadgeColor:l}})})]})]})})]})}export{O as TypePanel};