@explorer02/cfm-survey-sdk 0.3.5 → 0.3.7
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 +1 -1
- package/templates/docs/templates/CsatMatrixScale.tsx +27 -15
- package/templates/docs/templates/Header.tsx +12 -13
- package/templates/docs/templates/SliderMatrixScale.tsx +2 -1
- package/templates/preview-harness/preview-bridge.inline.js +34 -6
- package/templates/preview-harness/vite-app/src/PreviewConfigContext.tsx +1 -1
- package/templates/preview-harness/vite-app/src/fixtures/questions.ts +5 -3
- package/templates/survey-theme.css +12 -0
- package/templates/wizard-dist/assets/{PreviewMock-CD4Euaen.js → PreviewMock-BwihQcaZ.js} +1 -1
- package/templates/wizard-dist/assets/TypePanel-C-nuhX_H.js +1 -0
- package/templates/wizard-dist/assets/{index-DWWkuRUU.js → index-BDaoM71z.js} +2 -2
- package/templates/wizard-dist/index.html +1 -1
- package/templates/wizard-dist/assets/TypePanel-BjEnhbSM.js +0 -1
package/package.json
CHANGED
|
@@ -26,11 +26,25 @@ function anchorLabelStyle(question: CsatMatrixQuestion) {
|
|
|
26
26
|
return question.type === 'RATING_MATRIX' ? ratingColumnLabelStyle() : csatColumnLabelStyle();
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
function columnHeaderLabelStyle(
|
|
29
|
+
function columnHeaderLabelStyle(_question: CsatMatrixQuestion) {
|
|
30
|
+
return { fontSize: '13px', fontWeight: 500, textAlign: 'center' as const, lineHeight: 1.2, color: '#4b5563' };
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function anchorLabelPercent(
|
|
34
|
+
question: CsatMatrixQuestion,
|
|
35
|
+
i: number,
|
|
36
|
+
n: number,
|
|
37
|
+
m: number,
|
|
38
|
+
isGraphics: boolean,
|
|
39
|
+
): number {
|
|
30
40
|
if (question.type === 'RATING_MATRIX') {
|
|
31
|
-
|
|
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);
|
|
32
44
|
}
|
|
33
|
-
|
|
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;
|
|
34
48
|
}
|
|
35
49
|
|
|
36
50
|
function GraphicsColumnLabelsRow({
|
|
@@ -219,9 +233,7 @@ function CsatMatrixGrid({
|
|
|
219
233
|
<div style={{ flex: 1, display: 'flex' }}>
|
|
220
234
|
<div style={{ flex: 1, position: 'relative', height: '24px', ...(isGraphics ? { margin: '0 40px' } : {}) }}>
|
|
221
235
|
{labels!.map((label, i) => {
|
|
222
|
-
const
|
|
223
|
-
const rangePercent = isGraphics ? 1 : (m - 1) / m;
|
|
224
|
-
const percent = n === 1 ? 50 : (startPercent + (i / (n - 1)) * rangePercent) * 100;
|
|
236
|
+
const percent = anchorLabelPercent(question, i, n, m, isGraphics);
|
|
225
237
|
|
|
226
238
|
return (
|
|
227
239
|
<div key={i} style={{
|
|
@@ -362,9 +374,9 @@ function CsatMatrixGrid({
|
|
|
362
374
|
fontSize: '14px', fontWeight: 500,
|
|
363
375
|
...(isSelected
|
|
364
376
|
? scaleCellSelectedStyle(true)
|
|
365
|
-
: { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827' }),
|
|
377
|
+
: { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827', ...unselectedOpacityStyle() }),
|
|
366
378
|
transition: 'all 0.15s',
|
|
367
|
-
} : { padding: '8px' }),
|
|
379
|
+
} : { padding: '8px', ...(!isSelected ? unselectedOpacityStyle() : {}) }),
|
|
368
380
|
}}
|
|
369
381
|
>
|
|
370
382
|
{(EmojiNode ?? StarNode ?? (isNumbered ? (displayIdx + 1) : RadioNode)) as React.ReactNode}
|
|
@@ -452,9 +464,7 @@ function CsatMatrixCarousel({
|
|
|
452
464
|
{labels!.map((label, i) => {
|
|
453
465
|
const m = scaleColumns.length;
|
|
454
466
|
const n = labels!.length;
|
|
455
|
-
const
|
|
456
|
-
const rangePercent = isGraphics ? 1 : (m - 1) / m;
|
|
457
|
-
const percent = n === 1 ? 50 : (startPercent + (i / (n - 1)) * rangePercent) * 100;
|
|
467
|
+
const percent = anchorLabelPercent(question, i, n, m, isGraphics);
|
|
458
468
|
|
|
459
469
|
return (
|
|
460
470
|
<div key={i} style={{
|
|
@@ -523,15 +533,17 @@ function CsatMatrixCarousel({
|
|
|
523
533
|
cursor: 'pointer', borderRadius: '6px', pointerEvents: 'none',
|
|
524
534
|
...(isEmoji ? {
|
|
525
535
|
padding: '6px', transform: isSelected ? 'scale(1.1)' : isHovered ? 'scale(1.25)' : 'scale(1)',
|
|
526
|
-
...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } :
|
|
536
|
+
...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } : unselectedOpacityStyle()),
|
|
527
537
|
} : isStar ? {
|
|
528
|
-
padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)',
|
|
538
|
+
padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)',
|
|
539
|
+
color: isSelected ? cellSelectedVar : focusRingVar,
|
|
540
|
+
...(isSelected ? {} : unselectedOpacityStyle()),
|
|
529
541
|
} : isNumbered ? {
|
|
530
542
|
width: '40px', height: '40px', borderRadius: '8px', fontSize: '14px', fontWeight: 500,
|
|
531
543
|
...(isSelected
|
|
532
544
|
? scaleCellSelectedStyle(true)
|
|
533
|
-
: { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827' }),
|
|
534
|
-
} : { padding: '8px' }),
|
|
545
|
+
: { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827', ...unselectedOpacityStyle() }),
|
|
546
|
+
} : { padding: '8px', ...(!isSelected ? unselectedOpacityStyle() : {}) }),
|
|
535
547
|
}}
|
|
536
548
|
>
|
|
537
549
|
{(EmojiNode ?? StarNode ?? (isNumbered ? (displayIdx + 1) : RadioNode)) as React.ReactNode}
|
|
@@ -76,19 +76,18 @@ export default function Header({ embedded = false }: HeaderProps) {
|
|
|
76
76
|
{seedCompany}
|
|
77
77
|
</span>
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
) : null}
|
|
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>
|
|
92
91
|
</div>
|
|
93
92
|
</div>
|
|
94
93
|
</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: '16px',
|
|
84
|
+
marginBottom: labels && labels.length > 0 ? '24px' : '16px',
|
|
85
85
|
fontSize: '14px',
|
|
86
86
|
fontWeight: 500,
|
|
87
87
|
}}
|
|
@@ -100,6 +100,7 @@ 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,
|
|
103
104
|
marginBottom: '8px',
|
|
104
105
|
fontSize: '14px',
|
|
105
106
|
fontWeight: 400,
|
|
@@ -81,6 +81,31 @@
|
|
|
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
|
+
|
|
84
109
|
function applyContent(patch) {
|
|
85
110
|
if (!patch) return;
|
|
86
111
|
if (patch.logoUrl !== undefined) {
|
|
@@ -105,16 +130,14 @@
|
|
|
105
130
|
});
|
|
106
131
|
document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
|
|
107
132
|
if (patch.logoUrl) {
|
|
108
|
-
|
|
133
|
+
ensureCompanySpan();
|
|
134
|
+
updateCompanyVisibility(el.textContent || '');
|
|
109
135
|
}
|
|
110
136
|
});
|
|
111
137
|
}
|
|
112
138
|
if (patch.companyName !== undefined) {
|
|
113
139
|
var name = patch.companyName || '';
|
|
114
|
-
|
|
115
|
-
el.textContent = name;
|
|
116
|
-
el.style.display = name ? '' : 'none';
|
|
117
|
-
});
|
|
140
|
+
updateCompanyVisibility(name);
|
|
118
141
|
document.querySelectorAll('[data-cfm-logo-text]').forEach(function (el) {
|
|
119
142
|
var logoImg = document.querySelector('[data-cfm-logo]');
|
|
120
143
|
var logoVisible =
|
|
@@ -174,7 +197,12 @@
|
|
|
174
197
|
if (patch.layoutFlags) {
|
|
175
198
|
var flags = patch.layoutFlags;
|
|
176
199
|
if (flags.showCompanyName !== undefined) {
|
|
177
|
-
|
|
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 || '');
|
|
178
206
|
}
|
|
179
207
|
if (flags.showHeader !== undefined) {
|
|
180
208
|
setDisplay('.cfm-header, header.cfm-header', flags.showHeader);
|
|
@@ -72,6 +72,7 @@ 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);
|
|
75
76
|
}
|
|
76
77
|
if (data.contentPatch?.domAttributes) {
|
|
77
78
|
const root = document.documentElement;
|
|
@@ -85,7 +86,6 @@ export function PreviewConfigProvider({ children }: { children: ReactNode }) {
|
|
|
85
86
|
root.style.setProperty(key, value as string);
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
|
-
setConfigRevision((r) => r + 1);
|
|
89
89
|
applyThemeSideEffects();
|
|
90
90
|
};
|
|
91
91
|
|
|
@@ -19,6 +19,8 @@ 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);
|
|
23
|
+
|
|
22
24
|
const MATRIX_ROW_SINGLE = [{ id: 'r1', statementText: 'Statement Item 1' }];
|
|
23
25
|
|
|
24
26
|
const MATRIX_ROWS_MULTI = [
|
|
@@ -210,7 +212,7 @@ export const FIXTURE_CSAT_EMOJI = base({
|
|
|
210
212
|
gridLayout: 'standard',
|
|
211
213
|
statementRows: MATRIX_ROW_SINGLE,
|
|
212
214
|
scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
|
|
213
|
-
scaleAnchorLabels: [
|
|
215
|
+
scaleAnchorLabels: [...MATRIX_ANCHOR_LABELS],
|
|
214
216
|
});
|
|
215
217
|
|
|
216
218
|
export const FIXTURE_CSAT_STAR = base({
|
|
@@ -235,7 +237,7 @@ export const FIXTURE_CSAT_GRAPHICS = base({
|
|
|
235
237
|
gridLayout: 'standard',
|
|
236
238
|
statementRows: MATRIX_ROW_SINGLE,
|
|
237
239
|
scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
|
|
238
|
-
scaleAnchorLabels: [
|
|
240
|
+
scaleAnchorLabels: [MATRIX_ANCHOR_LABELS[0], MATRIX_ANCHOR_LABELS[4]],
|
|
239
241
|
});
|
|
240
242
|
|
|
241
243
|
export const FIXTURE_CSAT_CAROUSEL = base({
|
|
@@ -298,7 +300,7 @@ export const FIXTURE_RATING_GRAPHICS = base({
|
|
|
298
300
|
gridLayout: 'standard',
|
|
299
301
|
statementRows: MATRIX_ROW_SINGLE,
|
|
300
302
|
scaleColumns: Array.from({ length: 10 }, (_, i) => ({ id: `c${i}`, label: String(i + 1) })),
|
|
301
|
-
scaleAnchorLabels: [
|
|
303
|
+
scaleAnchorLabels: [...MATRIX_ANCHOR_LABELS],
|
|
302
304
|
});
|
|
303
305
|
|
|
304
306
|
export const FIXTURE_RATING_SLIDER = base({
|
|
@@ -290,3 +290,15 @@ 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-
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as p,j as e,T as R,S as b,R as d,C as i,N as t,a as z,M as A}from"./index-BDaoM71z.js";import"./vendor-BwkXDkd3.js";function j({values:n,onPatch:r}){return e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(i,{label:"Label text color",value:n.columnLabelColor,onChange:a=>r({columnLabelColor:a})}),e.jsx(i,{label:"Label background",value:n.columnLabelBgColor,onChange:a=>r({columnLabelBgColor:a})})]})}function N({values:n,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:n.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:n.hintMaxText,onChange:a=>r({hintMaxText:a.target.value})})]}),e.jsx(i,{label:"Hint text color",value:n.hintLabelColor,onChange:a=>r({hintLabelColor:a})}),e.jsx(i,{label:"Hint label background",value:n.hintLabelBgColor,onChange:a=>r({hintLabelBgColor:a})})]})}function T({values:n,onPatch:r,count:a=11}){return e.jsxs("div",{className:"space-y-3",children:[e.jsx(b,{label:"Number label style",value:n.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"}]}),n.numberLabelMode==="monochrome"&&e.jsx(i,{label:"Monochrome color",value:n.monochromeNumberColor,onChange:c=>r({monochromeNumberColor:c})}),n.numberLabelMode==="individual"&&e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:Array.from({length:a},(c,h)=>e.jsx(i,{label:`#${h}`,value:n.individualNumberColors[h]??"#9CA3AF",onChange:C=>{const x=[...n.individualNumberColors];x[h]=C,r({individualNumberColors:x})}},h))})]})}function s({title:n,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:n}),r]})}function O({type:n,activeFormat:r}){const a=p(l=>l.config.questionTypes[n]),c=p(l=>l.updateQuestionType),h=p(l=>l.previewMultiStatementByType),C=p(l=>l.setPreviewMultiStatementForType),x=p(l=>l.heatmapPreviewPin);if(!a)return e.jsx("p",{className:"text-sm text-slate-500",children:"No configuration available for this type."});const o=l=>c(n,l),k=A.includes(n),y=!!h[n],u=r.includes("star"),g=r.includes("emoji"),M=r.includes("numbered"),v=r.includes("drag"),w=r.includes("dropdown"),f=r.includes("radio"),B=r==="CFM_bipolar",S=r.includes("graphics"),m=g||u||M||f,L=a.optionStyle??a.cardStyle??"outlined",P=a.buttonStyle??"numbered";return e.jsxs("div",{className:"space-y-4",children:[k&&e.jsx(R,{label:"Preview multiple statements",checked:y,onChange:l=>C(n,l)}),n==="MCQ"&&"optionGap"in a&&e.jsx(s,{title:"Option style",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(b,{label:"Option style",value:a.optionStyle??a.cardStyle??"outlined",onChange:l=>o({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=>o({optionGap:l}),min:0,max:32}),e.jsx(d,{label:"Border radius",value:a.borderRadius,onChange:l=>o({borderRadius:l}),min:0,max:24}),e.jsx(d,{label:"Option padding",value:a.optionPadding??12,onChange:l=>o({optionPadding:l}),min:4,max:24}),e.jsx(i,{label:"Hover border",value:a.hoverBorderColor,onChange:l=>o({hoverBorderColor:l})}),L==="filled"&&e.jsx(i,{label:"Unselected fill color",value:a.filledOptionBg??"#F9FAFB",onChange:l=>o({filledOptionBg:l})})]})}),n==="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=>o({defaultPlaceholder:l.target.value})})]}),e.jsx(t,{label:"Input radius (px)",value:a.inputRadius,onChange:l=>o({inputRadius:l}),min:0,max:24}),e.jsx(i,{label:"Border color",value:a.borderColor,onChange:l=>o({borderColor:l})}),e.jsx(i,{label:"Placeholder color",value:a.placeholderColor,onChange:l=>o({placeholderColor:l})}),e.jsx(t,{label:"Input height (px)",value:a.inputHeight,onChange:l=>o({inputHeight:l}),min:32,max:64}),e.jsx(t,{label:"Input padding (px)",value:a.inputPadding,onChange:l=>o({inputPadding:l}),min:8,max:24})]})}),n==="NPS_SCALE"&&"buttonStyle"in a&&e.jsxs(e.Fragment,{children:[e.jsxs(s,{title:"NPS buttons",children:[e.jsx(b,{label:"Button style",value:a.buttonStyle,onChange:l=>o({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(N,{values:a,onPatch:o})}),P==="numbered"&&e.jsx(s,{title:"Number labels",children:e.jsx(T,{values:a,onPatch:o})}),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=>o({cellSize:l}),min:24,max:56}),e.jsx(t,{label:"Cell gap (px)",value:a.cellGap,onChange:l=>o({cellGap:l}),min:0,max:16}),e.jsx(i,{label:"Track bar",value:a.trackBarColor,onChange:l=>o({trackBarColor:l})}),e.jsx(i,{label:"Track highlight",value:a.trackHighlightColor,onChange:l=>o({trackHighlightColor:l})})]})})]}),n==="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=>o({rowLabelWidth:l}),min:120,max:280}),B&&e.jsx(t,{label:"Bipolar column width (%)",value:a.bipolarColumnWidthPercent,onChange:l=>o({bipolarColumnWidthPercent:l}),min:15,max:40}),e.jsx(t,{label:"Cell padding (px)",value:a.cellPadding,onChange:l=>o({cellPadding:l}),min:4,max:24})]})}),e.jsx(s,{title:"Label items",children:e.jsx(j,{values:a,onPatch:o})})]}),n==="CSAT_MATRIX"&&"emojiSize"in a&&e.jsxs(e.Fragment,{children:[(g||m||u)&&e.jsxs(s,{title:`${z.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=>o({emojiSize:l}),min:16,max:40}),u&&e.jsx(i,{label:"Star color",value:a.accentColor,onChange:l=>o({accentColor:l})}),m&&e.jsx(d,{label:"Unselected opacity",value:Math.round(a.unselectedOpacity*100),onChange:l=>o({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. Column labels appear above stars in the star format preview."})]}),e.jsxs(s,{title:"Label items",children:[e.jsx("p",{className:"text-xs text-slate-500",children:"Applies to anchor label pills where the preview already shows them — not numeric column headers."}),e.jsx(j,{values:a,onPatch:o})]}),S&&e.jsx(s,{title:"Graphics track",children:e.jsx(i,{label:"Track color",value:a.graphicsTrackColor,onChange:l=>o({graphicsTrackColor:l})})})]}),n==="RATING_MATRIX"&&"unselectedStarOpacity"in a&&e.jsxs(e.Fragment,{children:[(g||m||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=>o({emojiSize:l}),min:16,max:40}),u&&e.jsx(i,{label:"Star color",value:a.starColor,onChange:l=>o({starColor:l})}),m&&e.jsx(d,{label:"Unselected opacity",value:Math.round(a.unselectedStarOpacity*100),onChange:l=>o({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:"Applies to anchor label pills where the preview already shows them — not numeric column headers."}),e.jsx(j,{values:a,onPatch:o})]}),S&&e.jsx(s,{title:"Graphics track",children:e.jsx(i,{label:"Track color",value:a.graphicsTrackColor,onChange:l=>o({graphicsTrackColor:l})})})]}),n==="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=>o({trackColor:l})}),e.jsx(i,{label:"Thumb",value:a.thumbColor,onChange:l=>o({thumbColor:l})}),e.jsx(t,{label:"Row label width (px)",value:a.rowLabelWidth,onChange:l=>o({rowLabelWidth:l}),min:120,max:280}),e.jsx(i,{label:"Row band",value:a.rowBandColor,onChange:l=>o({rowBandColor:l})}),e.jsx(t,{label:"Tick badge size (px)",value:a.tickBadgeSize,onChange:l=>o({tickBadgeSize:l}),min:20,max:40})]})}),e.jsx(s,{title:"Anchor hint labels",children:e.jsx(N,{values:a,onPatch:o})}),e.jsx(s,{title:"Tick number labels",children:e.jsx(T,{values:a,onPatch:o,count:11})})]}),n==="FILE_UPLOAD"&&"dropzoneStyle"in a&&e.jsx(s,{title:"Dropzone",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(b,{label:"Dropzone border",value:a.dropzoneStyle,onChange:l=>o({dropzoneStyle:l}),options:[{value:"dashed",label:"Dashed"},{value:"solid",label:"Solid"}]}),e.jsx(i,{label:"Border color",value:a.borderColor??a.accentColor,onChange:l=>o({borderColor:l})}),e.jsx(i,{label:"Fill color",value:a.dropzoneFillColor,onChange:l=>o({dropzoneFillColor:l})}),e.jsx(t,{label:"Padding (px)",value:a.dropzonePadding,onChange:l=>o({dropzonePadding:l}),min:12,max:48})]})}),n==="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=>o({mediaMaxWidth:l}),min:50,max:100}),e.jsx(d,{label:"Media corner radius",value:a.mediaRadius,onChange:l=>o({mediaRadius:l}),min:0,max:24}),e.jsx(i,{label:"Caption color",value:a.captionColor,onChange:l=>o({captionColor:l})}),e.jsx(t,{label:"Caption size (px)",value:a.captionSize,onChange:l=>o({captionSize:l}),min:10,max:24})]})}),n==="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=>o({pinColor:l})}),e.jsx(i,{label:"Pin border",value:a.pinBorderColor,onChange:l=>o({pinBorderColor:l})}),e.jsx(d,{label:"Pin size",value:a.pinSize,onChange:l=>o({pinSize:l}),min:8,max:32}),e.jsx(d,{label:"Overlay opacity",value:Math.round(a.overlayOpacity*100),onChange:l=>o({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(x.x*100),"%, ",Math.round(x.y*100),"%"]})]})}),n==="RANK_ORDER"&&"drag"in a&&e.jsx(s,{title:v?"Drag & drop":w?"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=>o({drag:{...a.drag,itemBg:l}})}),e.jsx(i,{label:"Drag handle",value:a.drag.dragHandleColor,onChange:l=>o({drag:{...a.drag,dragHandleColor:l}})}),e.jsx(i,{label:"Rank badge",value:a.drag.rankBadgeColor,onChange:l=>o({drag:{...a.drag,rankBadgeColor:l}})})]}),w&&e.jsxs(e.Fragment,{children:[e.jsx(i,{label:"Item background",value:a.dropdown.itemBg,onChange:l=>o({dropdown:{...a.dropdown,itemBg:l}})}),e.jsx(i,{label:"List hover background",value:a.dropdown.itemHoverBg??"#F3F4F6",onChange:l=>o({dropdown:{...a.dropdown,itemHoverBg:l}})}),e.jsx(i,{label:"Select border",value:a.dropdown.selectBorderColor,onChange:l=>o({dropdown:{...a.dropdown,selectBorderColor:l}})}),e.jsx(i,{label:"Rank badge",value:a.dropdown.rankBadgeColor,onChange:l=>o({dropdown:{...a.dropdown,rankBadgeColor:l}})})]})]})})]})}export{O as TypePanel};
|