@explorer02/cfm-survey-sdk 0.3.6 → 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/dist/cli/index.js +33 -33
- package/dist/cli/index.mjs +33 -33
- package/package.json +1 -1
- package/templates/docs/templates/CsatMatrixScale.tsx +25 -26
- package/templates/docs/templates/Header.tsx +1 -2
- package/templates/docs/templates/SliderMatrixScale.tsx +2 -4
- package/templates/docs/templates/surveyUiScaleUtils.ts +0 -17
- package/templates/preview-harness/preview-bridge.inline.js +5 -58
- package/templates/preview-harness/vite-app/src/PreviewConfigContext.tsx +2 -8
- package/templates/preview-harness/vite-app/src/fixtures/questions.ts +31 -12
- package/templates/survey-theme.css +0 -12
- package/templates/wizard-dist/assets/{PreviewMock-AeUxzA3b.js → PreviewMock-CS4WqhDB.js} +1 -1
- package/templates/wizard-dist/assets/TypePanel-BgTW2c74.js +1 -0
- package/templates/wizard-dist/assets/{index-Z7mePXvc.js → index-hjm-fxWO.js} +2 -2
- package/templates/wizard-dist/index.html +1 -1
- package/templates/wizard-dist/assets/TypePanel-B4UpxOhr.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import type { CsatQuestion, RatingMatrixQuestion, MatrixRowAnswers, ScaleColumn } from '@explorer02/cfm-survey-sdk';
|
|
3
3
|
import { getEmojiForIndex, CsatStarIcons } from './surveyUiIcons';
|
|
4
|
-
import { columnSubmitValue, nonNaScaleColumns
|
|
4
|
+
import { columnSubmitValue, nonNaScaleColumns } from './surveyUiScaleUtils';
|
|
5
5
|
import { CustomSliderTrack } from './CustomSliderTrack';
|
|
6
6
|
import MatrixDropdown from './MatrixDropdown';
|
|
7
7
|
import {
|
|
@@ -26,11 +26,8 @@ function anchorLabelStyle(question: CsatMatrixQuestion) {
|
|
|
26
26
|
return question.type === 'RATING_MATRIX' ? ratingColumnLabelStyle() : csatColumnLabelStyle();
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
function columnHeaderLabelStyle(
|
|
30
|
-
|
|
31
|
-
return { fontSize: '13px', fontWeight: 500, textAlign: 'center' as const, lineHeight: 1.2, color: '#4b5563' };
|
|
32
|
-
}
|
|
33
|
-
return { fontSize: '13px', fontWeight: 500, textAlign: 'center' as const, lineHeight: 1.2, ...csatColumnLabelStyle() };
|
|
29
|
+
function columnHeaderLabelStyle(_question: CsatMatrixQuestion) {
|
|
30
|
+
return { fontSize: '13px', fontWeight: 500, textAlign: 'center' as const, lineHeight: 1.2, color: '#4b5563' };
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
function GraphicsColumnLabelsRow({
|
|
@@ -41,9 +38,13 @@ function GraphicsColumnLabelsRow({
|
|
|
41
38
|
question: CsatMatrixQuestion;
|
|
42
39
|
}) {
|
|
43
40
|
if (scaleColumns.length === 0) return null;
|
|
44
|
-
const labelStyle =
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
const labelStyle = {
|
|
42
|
+
fontSize: '12px',
|
|
43
|
+
fontWeight: 500,
|
|
44
|
+
lineHeight: 1.2,
|
|
45
|
+
wordBreak: 'break-word' as const,
|
|
46
|
+
color: '#4b5563',
|
|
47
|
+
};
|
|
47
48
|
|
|
48
49
|
return (
|
|
49
50
|
<div style={{ flex: 1, padding: '0 24px' }}>
|
|
@@ -219,7 +220,9 @@ function CsatMatrixGrid({
|
|
|
219
220
|
<div style={{ flex: 1, display: 'flex' }}>
|
|
220
221
|
<div style={{ flex: 1, position: 'relative', height: '24px', ...(isGraphics ? { margin: '0 40px' } : {}) }}>
|
|
221
222
|
{labels!.map((label, i) => {
|
|
222
|
-
const
|
|
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;
|
|
223
226
|
|
|
224
227
|
return (
|
|
225
228
|
<div key={i} style={{
|
|
@@ -361,11 +364,11 @@ function CsatMatrixGrid({
|
|
|
361
364
|
...(isSelected
|
|
362
365
|
? scaleCellSelectedStyle(true)
|
|
363
366
|
: {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
367
|
+
border: '1px solid #d1d5db',
|
|
368
|
+
backgroundColor: '#fff',
|
|
369
|
+
color: '#111827',
|
|
370
|
+
...unselectedOpacityStyle(),
|
|
371
|
+
}),
|
|
369
372
|
transition: 'all 0.15s',
|
|
370
373
|
} : {
|
|
371
374
|
padding: '8px',
|
|
@@ -458,7 +461,9 @@ function CsatMatrixCarousel({
|
|
|
458
461
|
{labels!.map((label, i) => {
|
|
459
462
|
const m = scaleColumns.length;
|
|
460
463
|
const n = labels!.length;
|
|
461
|
-
const
|
|
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;
|
|
462
467
|
|
|
463
468
|
return (
|
|
464
469
|
<div key={i} style={{
|
|
@@ -527,21 +532,15 @@ function CsatMatrixCarousel({
|
|
|
527
532
|
cursor: 'pointer', borderRadius: '6px', pointerEvents: 'none',
|
|
528
533
|
...(isEmoji ? {
|
|
529
534
|
padding: '6px', transform: isSelected ? 'scale(1.1)' : isHovered ? 'scale(1.25)' : 'scale(1)',
|
|
530
|
-
...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } :
|
|
535
|
+
...(isSelected ? { backgroundColor: 'rgba(252, 231, 243, 0.6)', boxShadow: '0 0 0 2px rgba(226, 0, 116, 0.3)', borderRadius: '50%' } : {}),
|
|
531
536
|
} : isStar ? {
|
|
532
|
-
padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)',
|
|
533
|
-
...(isSelected ? {} : unselectedOpacityStyle()),
|
|
537
|
+
padding: '4px', transform: isHovered ? 'scale(1.1)' : 'scale(1)', opacity: isSelected ? 1 : isHovered ? 1 : 0.5,
|
|
534
538
|
} : isNumbered ? {
|
|
535
539
|
width: '40px', height: '40px', borderRadius: '8px', fontSize: '14px', fontWeight: 500,
|
|
536
540
|
...(isSelected
|
|
537
541
|
? scaleCellSelectedStyle(true)
|
|
538
|
-
: {
|
|
539
|
-
|
|
540
|
-
backgroundColor: '#fff',
|
|
541
|
-
color: '#111827',
|
|
542
|
-
...unselectedOpacityStyle(),
|
|
543
|
-
}),
|
|
544
|
-
} : { padding: '8px', ...(isSelected ? {} : unselectedOpacityStyle()) }),
|
|
542
|
+
: { border: '1px solid #d1d5db', backgroundColor: '#fff', color: '#111827' }),
|
|
543
|
+
} : { padding: '8px' }),
|
|
545
544
|
}}
|
|
546
545
|
>
|
|
547
546
|
{(EmojiNode ?? StarNode ?? (isNumbered ? (displayIdx + 1) : RadioNode)) as React.ReactNode}
|
|
@@ -76,12 +76,11 @@ export default function Header({ embedded = false }: HeaderProps) {
|
|
|
76
76
|
{seedCompany}
|
|
77
77
|
</span>
|
|
78
78
|
|
|
79
|
-
{seedCompany ? (
|
|
79
|
+
{seedShowCompany && hasLogoFile && seedCompany ? (
|
|
80
80
|
<span
|
|
81
81
|
data-cfm-company
|
|
82
82
|
className="font-semibold"
|
|
83
83
|
style={{
|
|
84
|
-
display: seedShowCompany && hasLogoFile ? undefined : 'none',
|
|
85
84
|
color: 'var(--cfm-header-company-color, var(--cfm-text))',
|
|
86
85
|
fontSize: 'var(--cfm-header-company-size, 18px)',
|
|
87
86
|
fontWeight: 'var(--cfm-header-company-weight, 600)',
|
|
@@ -81,8 +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:
|
|
85
|
-
minHeight: '20px',
|
|
84
|
+
marginBottom: '16px',
|
|
86
85
|
fontSize: '14px',
|
|
87
86
|
fontWeight: 500,
|
|
88
87
|
}}
|
|
@@ -101,11 +100,10 @@ export function SliderMatrixScale({ question, selectedValue = {}, onSelect }: Sl
|
|
|
101
100
|
style={{
|
|
102
101
|
position: 'relative',
|
|
103
102
|
margin: '0 16px',
|
|
104
|
-
marginTop: labels && labels.length > 0 ? '4px' : '0',
|
|
105
103
|
marginBottom: '8px',
|
|
106
104
|
fontSize: '14px',
|
|
107
105
|
fontWeight: 400,
|
|
108
|
-
height: '
|
|
106
|
+
height: '28px',
|
|
109
107
|
...sliderTickLabelStyle(),
|
|
110
108
|
}}
|
|
111
109
|
>
|
|
@@ -96,20 +96,3 @@ export function columnAccentColor(column: { id: string; label: string }): string
|
|
|
96
96
|
}
|
|
97
97
|
return undefined;
|
|
98
98
|
}
|
|
99
|
-
|
|
100
|
-
/** Column-center anchor label positioning (m = option columns, n = anchor labels). */
|
|
101
|
-
export function anchorLabelPercent(
|
|
102
|
-
index: number,
|
|
103
|
-
labelCount: number,
|
|
104
|
-
columnCount: number,
|
|
105
|
-
isGraphics = false,
|
|
106
|
-
): number {
|
|
107
|
-
const m = columnCount;
|
|
108
|
-
const n = labelCount;
|
|
109
|
-
if (isGraphics) {
|
|
110
|
-
return n === 1 ? 0 : (index / (n - 1)) * 100;
|
|
111
|
-
}
|
|
112
|
-
const startPercent = 0.5 / m;
|
|
113
|
-
const rangePercent = (m - 1) / m;
|
|
114
|
-
return n === 1 ? 50 : (startPercent + (index / (n - 1)) * rangePercent) * 100;
|
|
115
|
-
}
|
|
@@ -76,35 +76,6 @@
|
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
function ensureCompanySpan() {
|
|
80
|
-
var brand = document.querySelector('.cfm-header-brand');
|
|
81
|
-
if (!brand) return null;
|
|
82
|
-
var el = brand.querySelector('[data-cfm-company]');
|
|
83
|
-
if (el) return el;
|
|
84
|
-
el = document.createElement('span');
|
|
85
|
-
el.setAttribute('data-cfm-company', '');
|
|
86
|
-
el.className = 'font-semibold';
|
|
87
|
-
el.style.color = 'var(--cfm-header-company-color, var(--cfm-text))';
|
|
88
|
-
el.style.fontSize = 'var(--cfm-header-company-size, 18px)';
|
|
89
|
-
el.style.fontWeight = 'var(--cfm-header-company-weight, 600)';
|
|
90
|
-
var logo = brand.querySelector('[data-cfm-logo]');
|
|
91
|
-
if (logo && logo.parentNode === brand) {
|
|
92
|
-
if (logo.nextSibling) brand.insertBefore(el, logo.nextSibling);
|
|
93
|
-
else brand.appendChild(el);
|
|
94
|
-
} else {
|
|
95
|
-
brand.appendChild(el);
|
|
96
|
-
}
|
|
97
|
-
return el;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function companyNameVisible() {
|
|
101
|
-
var root = document.documentElement;
|
|
102
|
-
var attr = root.getAttribute('data-cfm-show-company-name');
|
|
103
|
-
if (attr === '0') return false;
|
|
104
|
-
if (attr === '1') return true;
|
|
105
|
-
return readVar('--cfm-header-show-company', '1') !== '0';
|
|
106
|
-
}
|
|
107
|
-
|
|
108
79
|
function applyThemeSideEffects() {
|
|
109
80
|
applyNumberBadgeColors();
|
|
110
81
|
applyDropzoneStyle();
|
|
@@ -134,23 +105,15 @@
|
|
|
134
105
|
});
|
|
135
106
|
document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
|
|
136
107
|
if (patch.logoUrl) {
|
|
137
|
-
|
|
138
|
-
el.style.display = show ? '' : 'none';
|
|
108
|
+
el.style.display = el.textContent ? '' : 'none';
|
|
139
109
|
}
|
|
140
110
|
});
|
|
141
111
|
}
|
|
142
112
|
if (patch.companyName !== undefined) {
|
|
143
113
|
var name = patch.companyName || '';
|
|
144
|
-
if (name && document.querySelectorAll('[data-cfm-company]').length === 0) {
|
|
145
|
-
ensureCompanySpan();
|
|
146
|
-
}
|
|
147
114
|
document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
|
|
148
115
|
el.textContent = name;
|
|
149
|
-
|
|
150
|
-
var logoVisible =
|
|
151
|
-
logoImg && logoImg.style.display !== 'none' && logoImg.getAttribute('src');
|
|
152
|
-
var show = name && logoVisible && companyNameVisible();
|
|
153
|
-
el.style.display = show ? '' : 'none';
|
|
116
|
+
el.style.display = name ? '' : 'none';
|
|
154
117
|
});
|
|
155
118
|
document.querySelectorAll('[data-cfm-logo-text]').forEach(function (el) {
|
|
156
119
|
var logoImg = document.querySelector('[data-cfm-logo]');
|
|
@@ -211,17 +174,7 @@
|
|
|
211
174
|
if (patch.layoutFlags) {
|
|
212
175
|
var flags = patch.layoutFlags;
|
|
213
176
|
if (flags.showCompanyName !== undefined) {
|
|
214
|
-
|
|
215
|
-
'data-cfm-show-company-name',
|
|
216
|
-
flags.showCompanyName ? '1' : '0',
|
|
217
|
-
);
|
|
218
|
-
document.querySelectorAll('[data-cfm-company]').forEach(function (el) {
|
|
219
|
-
var logoImg = document.querySelector('[data-cfm-logo]');
|
|
220
|
-
var logoVisible =
|
|
221
|
-
logoImg && logoImg.style.display !== 'none' && logoImg.getAttribute('src');
|
|
222
|
-
var show = flags.showCompanyName && el.textContent && logoVisible;
|
|
223
|
-
el.style.display = show ? '' : 'none';
|
|
224
|
-
});
|
|
177
|
+
setDisplay('[data-cfm-company]', flags.showCompanyName);
|
|
225
178
|
}
|
|
226
179
|
if (flags.showHeader !== undefined) {
|
|
227
180
|
setDisplay('.cfm-header, header.cfm-header', flags.showHeader);
|
|
@@ -242,16 +195,10 @@
|
|
|
242
195
|
setDisplay('[data-cfm-btn-back]', flags.showBackButton);
|
|
243
196
|
}
|
|
244
197
|
if (flags.showQuestionNumbers !== undefined) {
|
|
245
|
-
|
|
246
|
-
'data-cfm-show-question-numbers',
|
|
247
|
-
flags.showQuestionNumbers ? '1' : '0',
|
|
248
|
-
);
|
|
198
|
+
setDisplay('[data-cfm-question-number]', flags.showQuestionNumbers);
|
|
249
199
|
}
|
|
250
200
|
if (flags.showRequiredAsterisk !== undefined) {
|
|
251
|
-
|
|
252
|
-
'data-cfm-show-required',
|
|
253
|
-
flags.showRequiredAsterisk ? '1' : '0',
|
|
254
|
-
);
|
|
201
|
+
setDisplay('[data-cfm-required]', flags.showRequiredAsterisk);
|
|
255
202
|
}
|
|
256
203
|
if (flags.showFooterLogo !== undefined) {
|
|
257
204
|
setDisplay('[data-cfm-footer-logo]', flags.showFooterLogo);
|
|
@@ -71,14 +71,7 @@ export function PreviewConfigProvider({ children }: { children: ReactNode }) {
|
|
|
71
71
|
if (!data?.type) return;
|
|
72
72
|
if (data.type !== PREVIEW_BRIDGE_SNAPSHOT && data.type !== PREVIEW_BRIDGE_DELTA) return;
|
|
73
73
|
if (data.contentPatch?.previewState) {
|
|
74
|
-
setPreviewState((prev) => {
|
|
75
|
-
const next = { ...prev, ...data.contentPatch.previewState };
|
|
76
|
-
const changed = (Object.keys(data.contentPatch.previewState) as (keyof PreviewStatePatch)[]).some(
|
|
77
|
-
(key) => prev[key] !== next[key],
|
|
78
|
-
);
|
|
79
|
-
if (changed) setConfigRevision((r) => r + 1);
|
|
80
|
-
return next;
|
|
81
|
-
});
|
|
74
|
+
setPreviewState((prev) => ({ ...prev, ...data.contentPatch.previewState }));
|
|
82
75
|
}
|
|
83
76
|
if (data.contentPatch?.domAttributes) {
|
|
84
77
|
const root = document.documentElement;
|
|
@@ -92,6 +85,7 @@ export function PreviewConfigProvider({ children }: { children: ReactNode }) {
|
|
|
92
85
|
root.style.setProperty(key, value as string);
|
|
93
86
|
}
|
|
94
87
|
}
|
|
88
|
+
setConfigRevision((r) => r + 1);
|
|
95
89
|
applyThemeSideEffects();
|
|
96
90
|
};
|
|
97
91
|
|
|
@@ -19,6 +19,19 @@ const LIKERT_COLUMNS = [
|
|
|
19
19
|
{ id: 'c5', label: 'Strongly Agree' },
|
|
20
20
|
];
|
|
21
21
|
|
|
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
|
+
}));
|
|
34
|
+
|
|
22
35
|
const MATRIX_ROW_SINGLE = [{ id: 'r1', statementText: 'Statement Item 1' }];
|
|
23
36
|
|
|
24
37
|
const MATRIX_ROWS_MULTI = [
|
|
@@ -209,8 +222,8 @@ export const FIXTURE_CSAT_EMOJI = base({
|
|
|
209
222
|
displayStyle: 'emoji',
|
|
210
223
|
gridLayout: 'standard',
|
|
211
224
|
statementRows: MATRIX_ROW_SINGLE,
|
|
212
|
-
scaleColumns:
|
|
213
|
-
scaleAnchorLabels:
|
|
225
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
226
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
214
227
|
});
|
|
215
228
|
|
|
216
229
|
export const FIXTURE_CSAT_STAR = base({
|
|
@@ -218,7 +231,8 @@ export const FIXTURE_CSAT_STAR = base({
|
|
|
218
231
|
displayStyle: 'star',
|
|
219
232
|
gridLayout: 'standard',
|
|
220
233
|
statementRows: MATRIX_ROW_SINGLE,
|
|
221
|
-
scaleColumns:
|
|
234
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
235
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
222
236
|
});
|
|
223
237
|
|
|
224
238
|
export const FIXTURE_CSAT_NUMBERED = base({
|
|
@@ -226,7 +240,8 @@ export const FIXTURE_CSAT_NUMBERED = base({
|
|
|
226
240
|
displayStyle: 'numbered',
|
|
227
241
|
gridLayout: 'standard',
|
|
228
242
|
statementRows: MATRIX_ROWS_MULTI,
|
|
229
|
-
scaleColumns:
|
|
243
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
244
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
230
245
|
});
|
|
231
246
|
|
|
232
247
|
export const FIXTURE_CSAT_GRAPHICS = base({
|
|
@@ -234,8 +249,8 @@ export const FIXTURE_CSAT_GRAPHICS = base({
|
|
|
234
249
|
displayStyle: 'graphics',
|
|
235
250
|
gridLayout: 'standard',
|
|
236
251
|
statementRows: MATRIX_ROW_SINGLE,
|
|
237
|
-
scaleColumns:
|
|
238
|
-
scaleAnchorLabels:
|
|
252
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
253
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
239
254
|
});
|
|
240
255
|
|
|
241
256
|
export const FIXTURE_CSAT_CAROUSEL = base({
|
|
@@ -265,7 +280,8 @@ export const FIXTURE_RATING_STAR = base({
|
|
|
265
280
|
gridLayout: 'standard',
|
|
266
281
|
showColumnHeaders: true,
|
|
267
282
|
statementRows: MATRIX_ROWS_MULTI,
|
|
268
|
-
scaleColumns:
|
|
283
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
284
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
269
285
|
});
|
|
270
286
|
|
|
271
287
|
export const FIXTURE_RATING_NUMBERED = base({
|
|
@@ -273,7 +289,8 @@ export const FIXTURE_RATING_NUMBERED = base({
|
|
|
273
289
|
displayStyle: 'numbered',
|
|
274
290
|
gridLayout: 'standard',
|
|
275
291
|
statementRows: MATRIX_ROWS_MULTI,
|
|
276
|
-
scaleColumns:
|
|
292
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
293
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
277
294
|
});
|
|
278
295
|
|
|
279
296
|
export const FIXTURE_RATING_RADIO = base({
|
|
@@ -281,7 +298,8 @@ export const FIXTURE_RATING_RADIO = base({
|
|
|
281
298
|
displayStyle: 'standard',
|
|
282
299
|
gridLayout: 'standard',
|
|
283
300
|
statementRows: MATRIX_ROW_SINGLE,
|
|
284
|
-
scaleColumns:
|
|
301
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
302
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
285
303
|
});
|
|
286
304
|
|
|
287
305
|
export const FIXTURE_RATING_EMOJI = base({
|
|
@@ -289,7 +307,8 @@ export const FIXTURE_RATING_EMOJI = base({
|
|
|
289
307
|
displayStyle: 'emoji',
|
|
290
308
|
gridLayout: 'standard',
|
|
291
309
|
statementRows: MATRIX_ROW_SINGLE,
|
|
292
|
-
scaleColumns:
|
|
310
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
311
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
293
312
|
});
|
|
294
313
|
|
|
295
314
|
export const FIXTURE_RATING_GRAPHICS = base({
|
|
@@ -297,8 +316,8 @@ export const FIXTURE_RATING_GRAPHICS = base({
|
|
|
297
316
|
displayStyle: 'graphics',
|
|
298
317
|
gridLayout: 'standard',
|
|
299
318
|
statementRows: MATRIX_ROW_SINGLE,
|
|
300
|
-
scaleColumns:
|
|
301
|
-
scaleAnchorLabels:
|
|
319
|
+
scaleColumns: SCALE_COLUMNS_10,
|
|
320
|
+
scaleAnchorLabels: MATRIX_ANCHOR_LABELS,
|
|
302
321
|
});
|
|
303
322
|
|
|
304
323
|
export const FIXTURE_RATING_SLIDER = base({
|
|
@@ -287,18 +287,6 @@ body {
|
|
|
287
287
|
border-style: solid;
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
-
html[data-cfm-show-company-name='0'] [data-cfm-company] {
|
|
291
|
-
display: none !important;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
html[data-cfm-show-question-numbers='0'] [data-cfm-question-number] {
|
|
295
|
-
display: none !important;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
html[data-cfm-show-required='0'] [data-cfm-required] {
|
|
299
|
-
display: none !important;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
290
|
.cfm-live-edit * {
|
|
303
291
|
transition: none !important;
|
|
304
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as x,j as e}from"./index-
|
|
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};
|