survey-creator-react 1.12.61 → 1.12.63

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.
@@ -1,2972 +0,0 @@
1
- /*!
2
- * SurveyJS Creator v2.5.15
3
- * (c) 2015-2026 Devsoft Baltic OÜ - http://surveyjs.io/
4
- * Github: https://github.com/surveyjs/survey-creator
5
- * License: https://surveyjs.io/Licenses#SurveyCreator
6
- */
7
-
8
- import * as React from 'react';
9
- import { createElement, Fragment } from 'react';
10
- import { ReactElementFactory, SurveyElementBase, attachKey2click, SvgIcon, Survey, ReactQuestionFactory, SurveyLocStringViewer, SvgBundleComponent, PopupModal, SurveyActionBar, NotifierComponent, TitleElement, ReactSurveyElementsWrapper, LoadingIndicatorComponent, SurveyPage, Popup, LogoImage, SurveyQuestionElementBase, SurveyQuestion, SurveyPanel, Scroll, CharacterCounterComponent, SurveyQuestionDropdown, SurveyHeader, List, SurveyQuestionText } from 'survey-react-ui';
11
- import { SurveyCreatorModel, assign, RowViewModel, QuestionAdornerViewModel, QuestionDropdownAdornerViewModel, QuestionImageAdornerViewModel, QuestionRatingAdornerViewModel, PageAdorner, LogoImageViewModel, editorLocalization, ItemValueWrapperViewModel, ImageItemValueWrapperViewModel, MatrixCellWrapperViewModel, SurveyResultsModel, ToolboxToolViewModel, editableStringRendererName, StringEditorViewModelBase, initLogicOperator, PageNavigatorViewModel } from 'survey-creator-core';
12
- export { PropertyGridEditorCollection, SurveyLogic, SurveyLogicUI, SurveyQuestionEditorDefinition, ToolboxToolViewModel, editorLocalization, localization, settings, svgBundle } from 'survey-creator-core';
13
- import * as ReactDOM from 'react-dom';
14
- import { CssClassBuilder, settings, RendererFactory, unwrap, checkLibraryVersion } from 'survey-core';
15
-
16
- class TabbedMenuComponent extends SurveyElementBase {
17
- get model() {
18
- return this.props.model;
19
- }
20
- getStateElement() {
21
- return this.model;
22
- }
23
- constructor(props) {
24
- super(props);
25
- this.rootRef = React.createRef();
26
- }
27
- renderElement() {
28
- const items = this.model.renderedActions.map((item) => React.createElement(TabbedMenuItemWrapper, { item: item, key: item.renderedId }));
29
- return (React.createElement("div", { ref: this.rootRef, className: "svc-tabbed-menu", role: "tablist", style: this.model.getRootStyle() }, items));
30
- }
31
- componentDidUpdate(prevProps, prevState) {
32
- super.componentDidUpdate(prevProps, prevState);
33
- const container = this.rootRef.current;
34
- if (!container)
35
- return;
36
- this.model.initResponsivityManager(container);
37
- }
38
- componentDidMount() {
39
- super.componentDidMount();
40
- const container = this.rootRef.current;
41
- if (!container)
42
- return;
43
- this.model.initResponsivityManager(container);
44
- }
45
- componentWillUnmount() {
46
- this.model.resetResponsivityManager();
47
- super.componentWillUnmount();
48
- }
49
- }
50
- class TabbedMenuItemWrapper extends SurveyElementBase {
51
- constructor(props) {
52
- super(props);
53
- this.ref = React.createRef();
54
- this.state = { changed: 0 };
55
- }
56
- get item() {
57
- return this.props.item;
58
- }
59
- getStateElement() {
60
- return this.item;
61
- }
62
- renderElement() {
63
- let css = "svc-tabbed-menu-item-container";
64
- if (this.item.css) {
65
- css += " " + this.item.css;
66
- }
67
- css += (!this.item.isVisible ? " sv-action--hidden" : "");
68
- const component = ReactElementFactory.Instance.createElement(this.item.component || "svc-tabbed-menu-item", { item: this.item });
69
- return (React.createElement("span", { key: this.item.id, className: css, ref: this.ref },
70
- React.createElement("div", { className: "sv-action__content" }, component)));
71
- }
72
- componentDidMount() {
73
- super.componentDidMount();
74
- this.item.updateModeCallback = (mode, callback) => {
75
- const update = () => {
76
- if (this.item.mode == mode) {
77
- this.setState({ changed: this.state.changed + 1 });
78
- }
79
- else {
80
- this.item.mode = mode;
81
- }
82
- };
83
- queueMicrotask(() => {
84
- if (ReactDOM["flushSync"]) {
85
- ReactDOM["flushSync"](() => {
86
- update();
87
- });
88
- }
89
- else {
90
- update();
91
- }
92
- queueMicrotask(() => {
93
- callback(mode, this.ref.current);
94
- });
95
- });
96
- };
97
- this.item.afterRender();
98
- }
99
- componentWillUnmount() {
100
- super.componentWillUnmount();
101
- this.item.updateModeCallback = undefined;
102
- }
103
- }
104
- class TabbedMenuItemComponent extends SurveyElementBase {
105
- get item() {
106
- return this.props.item;
107
- }
108
- getStateElement() {
109
- return this.item;
110
- }
111
- render() {
112
- const item = this.item;
113
- return (attachKey2click(React.createElement("div", { role: "tab", id: "tab-" + item.id, "aria-selected": item.active, "aria-controls": "scrollableDiv-" + item.id, className: item.getRootCss(), onClick: () => item.doAction() },
114
- item.hasTitle ? React.createElement("span", { className: item.getTitleCss() }, item.title) : null,
115
- item.hasIcon ? React.createElement(SvgIcon, { iconName: item.iconName, className: item.getIconCss(), size: "auto", title: item.tooltip || item.title }) : null)));
116
- }
117
- }
118
- ReactElementFactory.Instance.registerElement("svc-tabbed-menu-item", (props) => {
119
- return React.createElement(TabbedMenuItemComponent, props);
120
- });
121
-
122
- class SurveyCreatorComponent extends SurveyElementBase {
123
- constructor(props) {
124
- super(props);
125
- this.rootNode = React.createRef();
126
- }
127
- get creator() {
128
- return this.props.creator;
129
- }
130
- getStateElement() {
131
- return this.creator;
132
- }
133
- get style() {
134
- return this.props.style;
135
- }
136
- componentDidUpdate(prevProps, prevState) {
137
- super.componentDidUpdate(prevProps, prevState);
138
- if (this.creator !== prevProps.creator) {
139
- if (prevProps.creator) {
140
- prevProps.creator.unsubscribeRootElement();
141
- }
142
- if (this.creator && this.rootNode.current) {
143
- this.creator.setRootElement(this.rootNode.current);
144
- }
145
- }
146
- }
147
- componentDidMount() {
148
- super.componentDidMount();
149
- this.creator.setRootElement(this.rootNode.current);
150
- }
151
- componentWillUnmount() {
152
- super.componentWillUnmount();
153
- this.creator.unsubscribeRootElement();
154
- }
155
- renderElement() {
156
- const creator = this.props.creator;
157
- if (creator.isCreatorDisposed)
158
- return null;
159
- const areaClassName = "svc-full-container svc-creator__area svc-flex-column" + (this.props.creator.haveCommercialLicense ? "" : " svc-creator__area--with-banner");
160
- const contentWrapperClassName = "svc-creator__content-wrapper svc-flex-row" + (this.props.creator.isMobileView ? " svc-creator__content-wrapper--footer-toolbar" : "");
161
- const fullContainerClassName = "svc-flex-row svc-full-container" + (" svc-creator__side-bar--" + this.creator.sidebarLocation);
162
- const creatorStyles = {};
163
- assign(creatorStyles, this.style, this.props.creator.themeVariables);
164
- let licenseBanner = null;
165
- if (!this.props.creator.haveCommercialLicense) {
166
- const htmlValue = { __html: this.props.creator.licenseText };
167
- licenseBanner = (React.createElement("div", { className: "svc-creator__banner" },
168
- React.createElement("span", { className: "svc-creator__non-commercial-text", dangerouslySetInnerHTML: htmlValue })));
169
- }
170
- //AM: width unrecognized by react
171
- return (React.createElement("div", { className: this.creator.getRootCss(), ref: this.rootNode, style: creatorStyles },
172
- React.createElement(SvgBundleComponent, null),
173
- React.createElement(PopupModal, null),
174
- React.createElement("div", { className: areaClassName },
175
- React.createElement("div", { className: fullContainerClassName },
176
- React.createElement("div", { className: "svc-flex-column svc-flex-row__element svc-flex-row__element--growing" },
177
- React.createElement("div", { className: "svc-top-bar" },
178
- (creator.showTabs ?
179
- React.createElement("div", { className: "svc-tabbed-menu-wrapper" },
180
- React.createElement(TabbedMenuComponent, { model: creator.tabbedMenu })) : null),
181
- (creator.showToolbar ?
182
- React.createElement("div", { className: "svc-toolbar-wrapper" },
183
- React.createElement(SurveyActionBar, { model: creator.toolbar }))
184
- : null)),
185
- React.createElement("div", { className: contentWrapperClassName },
186
- React.createElement("div", { className: "svc-creator__content-holder svc-flex-column" }, this.renderActiveTab())),
187
- React.createElement("div", { className: "svc-footer-bar" }, (creator.isMobileView ?
188
- React.createElement("div", { className: "svc-toolbar-wrapper" },
189
- React.createElement(SurveyActionBar, { model: creator.footerToolbar }))
190
- : null))),
191
- this.renderSidebar()),
192
- licenseBanner,
193
- React.createElement(NotifierComponent, { notifier: creator.notifier }))));
194
- }
195
- renderActiveTab() {
196
- const creator = this.props.creator;
197
- for (var i = 0; i < creator.tabs.length; i++) {
198
- if (creator.tabs[i].id === creator.activeTab) {
199
- return this.renderCreatorTab(creator.tabs[i]);
200
- }
201
- }
202
- return null;
203
- }
204
- renderCreatorTab(tab) {
205
- if (tab.visible === false) {
206
- return null;
207
- }
208
- const creator = this.props.creator;
209
- const component = !!tab.renderTab
210
- ? tab.renderTab()
211
- : ReactElementFactory.Instance.createElement(tab.componentContent, {
212
- creator: creator,
213
- survey: creator.survey,
214
- data: tab.data.model
215
- });
216
- const className = "svc-creator-tab" + (creator.toolboxLocation == "right" ? " svc-creator__toolbox--right" : "");
217
- return (React.createElement("div", { role: "tabpanel", key: tab.id, id: "scrollableDiv-" + tab.id, "aria-labelledby": "tab-" + tab.id, className: className }, component));
218
- }
219
- renderSidebar() {
220
- if (!!this.creator.isSidebarVisible) {
221
- return ReactElementFactory.Instance.createElement("svc-side-bar", { model: this.creator.sidebar });
222
- }
223
- else {
224
- return null;
225
- }
226
- }
227
- }
228
- class SurveyCreator extends SurveyCreatorModel {
229
- constructor(options = {}, options2) {
230
- super(options, options2);
231
- }
232
- render(target) {
233
- // eslint-disable-next-line no-console
234
- console.error("The render method is deprecated. Use SurveyCreatorComponent instead.");
235
- }
236
- //ISurveyCreator
237
- createQuestionElement(question) {
238
- return ReactQuestionFactory.Instance.createQuestion(question.isDefaultRendering()
239
- ? question.getTemplate()
240
- : question.getComponentName(), {
241
- question: question,
242
- isDisplayMode: question.isReadOnly,
243
- creator: this
244
- });
245
- }
246
- renderError(key, error, cssClasses) {
247
- return (React.createElement("div", { key: key },
248
- React.createElement("span", { className: cssClasses.error.icon, "aria-hidden": "true" }),
249
- React.createElement("span", { className: cssClasses.error.item },
250
- React.createElement(SurveyLocStringViewer, { model: error.locText }))));
251
- }
252
- questionTitleLocation() {
253
- return this.survey.questionTitleLocation;
254
- }
255
- questionErrorLocation() {
256
- return this.survey.questionErrorLocation;
257
- }
258
- }
259
- ReactElementFactory.Instance.registerElement("survey-widget", (props) => {
260
- return React.createElement(Survey, props);
261
- });
262
-
263
- class CreatorModelElement extends SurveyElementBase {
264
- constructor(props) {
265
- super(props);
266
- this.createModel(props);
267
- }
268
- shouldComponentUpdate(nextProps, nextState) {
269
- const result = super.shouldComponentUpdate(nextProps, nextState);
270
- if (result) {
271
- if (this.needUpdateModel(nextProps)) {
272
- this.createModel(nextProps);
273
- }
274
- }
275
- return result;
276
- }
277
- createModel(props) { }
278
- needUpdateModel(nextProps) {
279
- const names = this.getUpdatedModelProps();
280
- if (!Array.isArray(names))
281
- return true;
282
- for (var i = 0; i < names.length; i++) {
283
- const key = names[i];
284
- if (typeof key === "object") {
285
- const currentProp = this.props[key.name];
286
- const nextProp = nextProps[key.name];
287
- if (key.deepEqual) {
288
- if (this.props[key.name] === nextProps[key.name])
289
- return false;
290
- const currentPropKeys = Object.keys(currentProp || {});
291
- if (currentPropKeys.length !== Object.keys(nextProp || {}).length)
292
- return true;
293
- return currentPropKeys.some(key => currentProp[key] != nextProp[key]);
294
- }
295
- else {
296
- return currentProp !== nextProp;
297
- }
298
- }
299
- else {
300
- if (this.props[key] !== nextProps[key])
301
- return true;
302
- }
303
- }
304
- return false;
305
- }
306
- getUpdatedModelProps() {
307
- return undefined;
308
- }
309
- }
310
-
311
- class RowWrapper extends CreatorModelElement {
312
- constructor(props) {
313
- super(props);
314
- }
315
- createModel(props) {
316
- if (!!this.model) {
317
- this.model.dispose();
318
- }
319
- this.model = new RowViewModel(props.componentData.creator, props.row, null);
320
- }
321
- getUpdatedModelProps() {
322
- return ["row", { name: "componentData", deepEqual: true }];
323
- }
324
- getStateElement() {
325
- return this.model;
326
- }
327
- componentDidMount() {
328
- super.componentDidMount();
329
- this.model.subscribeElementChanges();
330
- }
331
- componentWillUnmount() {
332
- this.model.unsubscribeElementChanges();
333
- super.componentWillUnmount();
334
- }
335
- render() {
336
- return (React.createElement("div", { key: "svc-row-" + this.props.row.id, className: this.model.cssClasses },
337
- React.createElement("div", { className: "svc-row__drop-indicator svc-row__drop-indicator--top" }),
338
- React.createElement("div", { className: "svc-row__drop-indicator svc-row__drop-indicator--bottom" }),
339
- this.props.element));
340
- }
341
- }
342
- ReactElementFactory.Instance.registerElement("svc-row", (props) => {
343
- return React.createElement(RowWrapper, props);
344
- });
345
-
346
- class ReactMouseEvent {
347
- constructor(event) {
348
- this.event = event;
349
- }
350
- stopPropagation() {
351
- this.event.stopPropagation();
352
- //this.event.nativeEvent.stopPropagation();
353
- //this.event.nativeEvent.stopImmediatePropagation();
354
- }
355
- preventDefault() {
356
- this.event.preventDefault();
357
- //this.event.nativeEvent.preventDefault();
358
- }
359
- get cancelBubble() {
360
- //return this.event.cancelBubble;
361
- return false;
362
- }
363
- set cancelBubble(value) {
364
- //this.event.cancelBubble = value;
365
- }
366
- get target() {
367
- return this.event.target;
368
- }
369
- get currentTarget() {
370
- return this.event.currentTarget;
371
- }
372
- get clientX() {
373
- return this.event.clientX;
374
- }
375
- get clientY() {
376
- return this.event.clientY;
377
- }
378
- get offsetX() {
379
- return this.event.nativeEvent.offsetX;
380
- }
381
- get offsetY() {
382
- return this.event.nativeEvent.offsetY;
383
- }
384
- }
385
- class ReactDragEvent extends ReactMouseEvent {
386
- constructor(event) {
387
- super(event);
388
- this.event = event;
389
- }
390
- get dataTransfer() {
391
- return this.event.dataTransfer;
392
- }
393
- }
394
-
395
- function QuestionElementContentFunc(props) {
396
- return props.element;
397
- }
398
- const QuestionElementContent = React.memo(QuestionElementContentFunc);
399
- QuestionElementContent.displayName = "QuestionElementContent";
400
- class QuestionAdornerComponent extends CreatorModelElement {
401
- constructor(props) {
402
- super(props);
403
- this.rootRef = React.createRef();
404
- }
405
- createModel(props) {
406
- if (this.model) {
407
- this.model.attachToUI(props.question, this.rootRef.current);
408
- }
409
- else {
410
- this.modelValue = this.createQuestionViewModel(props);
411
- }
412
- }
413
- createQuestionViewModel(props) {
414
- return new QuestionAdornerViewModel(props.componentData, props.question, null);
415
- }
416
- getUpdatedModelProps() {
417
- return ["question", "componentData"];
418
- }
419
- get model() {
420
- return this.modelValue;
421
- }
422
- getStateElement() {
423
- return this.model;
424
- }
425
- renderElement() {
426
- const allowInteractions = this.model.element
427
- .isInteractiveDesignElement;
428
- const titleForCollapsedState = this.renderQuestionTitle();
429
- const content = this.renderContent(allowInteractions);
430
- return (React.createElement("div", { ref: this.rootRef, "data-sv-drop-target-survey-element": this.model.element.name || null, className: this.model.rootCss(), onDoubleClick: e => { allowInteractions && this.model.dblclick(e.nativeEvent); e.stopPropagation(); }, onMouseLeave: e => allowInteractions && this.model.hover(e.nativeEvent, e.currentTarget), onMouseOver: e => allowInteractions && this.model.hover(e.nativeEvent, e.currentTarget) },
431
- titleForCollapsedState,
432
- content));
433
- }
434
- disableTabStop() {
435
- return true;
436
- }
437
- renderContent(allowInteractions) {
438
- var content = this.model.needToRenderContent ? this.renderElementContent() : null;
439
- //if (!allowInteractions) return <>{content}{this.renderFooter()}</>;
440
- return attachKey2click(React.createElement("div", { className: this.model.css(), onClick: (e) => this.model.select(this.model, new ReactMouseEvent(e)) },
441
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--left" }),
442
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--right" }),
443
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--top" }),
444
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--bottom" }),
445
- allowInteractions ? this.renderHeader() : null,
446
- content,
447
- this.model.needToRenderContent ? this.renderFooter() : null), undefined, { disableTabStop: this.disableTabStop() });
448
- }
449
- renderHeader() {
450
- return ReactElementFactory.Instance.createElement("svc-question-header", { model: this.model });
451
- }
452
- renderFooter() {
453
- const allowInteractions = this.model.element
454
- .isInteractiveDesignElement;
455
- return allowInteractions ? ReactElementFactory.Instance.createElement("svc-question-footer", { className: "svc-question__content-actions", model: this.model }) : null;
456
- }
457
- renderCarryForwardBanner() {
458
- if (!this.model.isBannerShowing)
459
- return null;
460
- return ReactElementFactory.Instance.createElement("svc-question-banner", this.model.createBannerParams());
461
- }
462
- renderQuestionTitle() {
463
- if (!this.model.showHiddenTitle)
464
- return null;
465
- const element = this.model.element;
466
- return (React.createElement("div", { ref: node => node && (!this.model.renderedCollapsed ?
467
- node.setAttribute("inert", "") : node.removeAttribute("inert")), className: this.model.cssCollapsedHiddenHeader }, (element.hasTitle ?
468
- React.createElement(TitleElement, { element: element, renderActions: false }) :
469
- React.createElement("div", { className: this.model.cssCollapsedHiddenTitle },
470
- React.createElement("span", { className: "svc-fake-title" }, element.name)))));
471
- }
472
- renderElementContent() {
473
- return (React.createElement(React.Fragment, null,
474
- React.createElement(QuestionElementContent, { element: this.props.element }),
475
- this.renderElementPlaceholder(),
476
- this.renderCarryForwardBanner()));
477
- }
478
- componentDidMount() {
479
- super.componentDidMount();
480
- this.model.attachToUI(this.props.question, this.rootRef.current);
481
- }
482
- renderElementPlaceholder() {
483
- if (!this.model.isEmptyElement) {
484
- return null;
485
- }
486
- return (React.createElement("div", { className: "svc-panel__placeholder_frame-wrapper" },
487
- React.createElement("div", { className: "svc-panel__placeholder_frame" },
488
- React.createElement("div", { className: "svc-panel__placeholder" }, this.model.placeholderText))));
489
- }
490
- componentWillUnmount() {
491
- super.componentWillUnmount();
492
- this.model.detachFromUI();
493
- }
494
- }
495
- ReactElementFactory.Instance.registerElement("svc-question", (props) => {
496
- return React.createElement(QuestionAdornerComponent, props);
497
- });
498
-
499
- class QuestionWrapperHeader extends React.Component {
500
- render() {
501
- if (!this.props.model.allowDragging)
502
- return null;
503
- return (React.createElement("div", { className: "svc-question__drag-area", onPointerDown: (event) => this.props.model.onPointerDown(event) },
504
- React.createElement(SvgIcon, { className: "svc-question__drag-element", size: "auto", iconName: "icon-drag-area-indicator_24x16" }),
505
- React.createElement("div", { className: "svc-question__top-actions" },
506
- React.createElement(SurveyActionBar, { model: this.props.model.topActionContainer, handleClick: false }))));
507
- }
508
- }
509
- ReactElementFactory.Instance.registerElement("svc-question-header", (props) => {
510
- return React.createElement(QuestionWrapperHeader, props);
511
- });
512
-
513
- class QuestionWrapperFooter extends React.Component {
514
- render() {
515
- return (React.createElement("div", { className: this.props.className, onFocus: (e) => this.props.model.select(this.props.model, new ReactMouseEvent(e)) },
516
- React.createElement(SurveyActionBar, { model: this.props.model.actionContainer, handleClick: false })));
517
- }
518
- }
519
- ReactElementFactory.Instance.registerElement("svc-question-footer", (props) => {
520
- return React.createElement(QuestionWrapperFooter, props);
521
- });
522
-
523
- class ActionButton extends SurveyElementBase {
524
- renderElement() {
525
- const classes = new CssClassBuilder()
526
- .append(this.props.classes)
527
- .append("svc-action-button")
528
- .append("svc-action-button--selected", !!this.props.selected)
529
- .append("svc-action-button--disabled", !!this.props.disabled)
530
- .toString();
531
- if (this.props.iconName) {
532
- return this.renderIcon(classes);
533
- }
534
- return this.renderButtonText(classes);
535
- }
536
- renderButtonText(classes) {
537
- if (this.props.disabled) {
538
- return React.createElement("span", { className: classes }, this.props.text);
539
- }
540
- return (React.createElement(React.Fragment, null, attachKey2click(React.createElement("span", { role: "button", className: classes, onClick: (e) => {
541
- if (!this.props.allowBubble) {
542
- e.stopPropagation();
543
- }
544
- this.props.click();
545
- }, title: this.props.title }, this.props.text))));
546
- }
547
- renderIcon(classes) {
548
- classes += " svc-action-button--icon";
549
- if (this.props.disabled) {
550
- return React.createElement("span", { className: classes },
551
- React.createElement(SvgIcon, { size: "auto", iconName: this.props.iconName }));
552
- }
553
- return (React.createElement(React.Fragment, null, attachKey2click(React.createElement("span", { className: classes, onClick: (e) => {
554
- if (!this.props.allowBubble) {
555
- e.stopPropagation();
556
- }
557
- this.props.click();
558
- }, title: this.props.title },
559
- React.createElement(SvgIcon, { size: "auto", iconName: this.props.iconName })))));
560
- }
561
- }
562
- ReactElementFactory.Instance.registerElement("svc-action-button", (props) => { return React.createElement(ActionButton, props); });
563
-
564
- class QuestionBanner extends React.Component {
565
- render() {
566
- return (React.createElement("div", { className: "svc-carry-forward-panel-wrapper" },
567
- React.createElement("div", { className: "svc-carry-forward-panel" },
568
- React.createElement("span", null,
569
- this.props.text,
570
- " "),
571
- React.createElement("span", { className: "svc-carry-forward-panel__link" },
572
- React.createElement(ActionButton, { click: () => this.props.onClick(), text: this.props.actionText })))));
573
- }
574
- }
575
- ReactElementFactory.Instance.registerElement("svc-question-banner", (props) => {
576
- return React.createElement(QuestionBanner, props);
577
- });
578
-
579
- class QuestionDropdownAdornerComponent extends QuestionAdornerComponent {
580
- constructor(props) {
581
- super(props);
582
- }
583
- createQuestionViewModel(props) {
584
- return new QuestionDropdownAdornerViewModel(props.componentData, props.question, null);
585
- }
586
- get dropdownModel() {
587
- return this.model;
588
- }
589
- get question() {
590
- return this.dropdownModel.question;
591
- }
592
- renderElementPlaceholder() {
593
- const textStyle = this.question.textStyle;
594
- return (React.createElement("div", { className: "svc-question__dropdown-choices--wrapper" },
595
- React.createElement("div", null,
596
- React.createElement("div", { className: "svc-question__dropdown-choices" }, (this.dropdownModel.getRenderedItems() || []).map((item, index) => (React.createElement("div", { className: this.dropdownModel.getChoiceCss(), key: `editable_choice_${index}` }, ReactSurveyElementsWrapper.wrapItemValue(this.question.survey, ReactElementFactory.Instance.createElement(this.dropdownModel.itemComponent, {
597
- key: item.value,
598
- question: this.question,
599
- cssClasses: this.question.cssClasses,
600
- isDisplayMode: true,
601
- item: item,
602
- textStyle: textStyle,
603
- index: index,
604
- isChecked: this.question.value === item.value
605
- }), this.question, item))))),
606
- this.dropdownModel.needToCollapse ?
607
- React.createElement(ActionButton, { click: this.dropdownModel.switchCollapse, text: this.dropdownModel.getButtonText(), allowBubble: true }) :
608
- null)));
609
- }
610
- }
611
- ReactElementFactory.Instance.registerElement("svc-dropdown-question", (props) => {
612
- return React.createElement(QuestionDropdownAdornerComponent, props);
613
- });
614
-
615
- class QuestionImageAdornerComponent extends QuestionAdornerComponent {
616
- createQuestionViewModel(props) {
617
- return new QuestionImageAdornerViewModel(props.componentData, props.question, null);
618
- }
619
- get imageModel() {
620
- return this.model;
621
- }
622
- renderHeader() {
623
- return (React.createElement(React.Fragment, null,
624
- React.createElement("input", { type: "file", "aria-hidden": "true", tabIndex: -1, accept: this.imageModel.acceptedTypes, className: "svc-choose-file-input", style: {
625
- position: "absolute",
626
- opacity: 0,
627
- width: "1px",
628
- height: "1px",
629
- overflow: "hidden"
630
- } }),
631
- super.renderHeader()));
632
- }
633
- renderLoadingPlaceholder() {
634
- return (React.createElement("div", { className: "svc-image-question__loading-placeholder" },
635
- React.createElement("div", { className: "svc-image-question__loading" },
636
- React.createElement(LoadingIndicatorComponent, null))));
637
- }
638
- renderChooseButton() {
639
- return (React.createElement("div", { className: "svc-image-question-controls" }, this.model.allowEdit ? attachKey2click(React.createElement("span", { className: "svc-context-button", onClick: () => this.imageModel.chooseFile(this.imageModel) },
640
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-choosefile" }))) : null));
641
- }
642
- renderElementPlaceholder() {
643
- return this.imageModel.isUploading ? this.renderLoadingPlaceholder() : this.renderChooseButton();
644
- }
645
- getStateElements() {
646
- return [this.model, this.imageModel.filePresentationModel];
647
- }
648
- renderElementContent() {
649
- if (this.imageModel.isEmptyElement) {
650
- const fileQuestion = ReactQuestionFactory.Instance.createQuestion("file", {
651
- creator: this.imageModel.question.survey,
652
- isDisplayMode: false,
653
- question: this.imageModel.filePresentationModel
654
- });
655
- return (React.createElement(React.Fragment, null, fileQuestion));
656
- }
657
- else {
658
- return (React.createElement(React.Fragment, null,
659
- this.props.element,
660
- this.renderElementPlaceholder()));
661
- }
662
- }
663
- }
664
- ReactElementFactory.Instance.registerElement("svc-image-question", (props) => {
665
- return React.createElement(QuestionImageAdornerComponent, props);
666
- });
667
-
668
- class QuestionRatingAdornerComponent extends CreatorModelElement {
669
- createModel(props) {
670
- this.modelValue = this.createQuestionViewModel(props);
671
- }
672
- createQuestionViewModel(props) {
673
- return new QuestionRatingAdornerViewModel(props.componentData, props.question, null);
674
- }
675
- getUpdatedModelProps() {
676
- return ["question", "componentData"];
677
- }
678
- get ratingModel() {
679
- return this.model;
680
- }
681
- get model() {
682
- return this.modelValue;
683
- }
684
- getStateElement() {
685
- return this.model;
686
- }
687
- renderElement() {
688
- const model = this.ratingModel;
689
- return (React.createElement(React.Fragment, null,
690
- React.createElement("div", { className: "svc-rating-question-content" },
691
- React.createElement("div", { className: model.controlsClassNames },
692
- model.allowRemove ? attachKey2click(React.createElement("span", { role: "button", className: model.removeClassNames, "aria-label": model.removeTooltip, onClick: () => model.removeItem(model) },
693
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-remove_16x16", title: model.removeTooltip }))) : null,
694
- model.allowAdd ? attachKey2click(React.createElement("span", { role: "button", className: model.addClassNames, "aria-label": model.addTooltip, onClick: () => model.addItem(model) },
695
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-add_16x16", title: model.addTooltip }))) : null),
696
- this.props.element)));
697
- }
698
- }
699
- ReactElementFactory.Instance.registerElement("svc-rating-question", (props) => {
700
- return React.createElement(QuestionRatingAdornerComponent, props);
701
- });
702
- ReactElementFactory.Instance.registerElement("svc-rating-question-content", (props) => {
703
- return React.createElement(QuestionRatingAdornerComponent, props);
704
- });
705
-
706
- class QuestionWidgetAdornerComponent extends QuestionAdornerComponent {
707
- createQuestionViewModel(props) {
708
- return new QuestionAdornerViewModel(props.componentData, props.question, null);
709
- }
710
- get widgetModel() {
711
- return this.model;
712
- }
713
- renderElementContent() {
714
- return (React.createElement("div", { className: "svc-widget__content" }, this.props.element));
715
- }
716
- }
717
- ReactElementFactory.Instance.registerElement("svc-widget-question", (props) => {
718
- return React.createElement(QuestionWidgetAdornerComponent, props);
719
- });
720
-
721
- class CellQuestionAdornerComponent extends CreatorModelElement {
722
- createModel(props) {
723
- this.model = new QuestionAdornerViewModel(props.componentData, props.question, null);
724
- }
725
- getStateElement() {
726
- return this.model;
727
- }
728
- getUpdatedModelProps() {
729
- return ["question", "componentData"];
730
- }
731
- render() {
732
- return (React.createElement(React.Fragment, null,
733
- React.createElement("div", { "data-sv-drop-target-survey-element": this.model.element.name, className: "svc-question__adorner" },
734
- React.createElement("div", { className: " svc-question__content--in-popup svc-question__content" }, this.props.element))));
735
- }
736
- }
737
- ReactElementFactory.Instance.registerElement("svc-cell-question", (props) => {
738
- return React.createElement(CellQuestionAdornerComponent, props);
739
- });
740
-
741
- class CellQuestionDropdownAdornerComponent extends CreatorModelElement {
742
- createModel(props) {
743
- this.model = new QuestionAdornerViewModel(props.componentData, props.question, null);
744
- }
745
- getUpdatedModelProps() {
746
- return ["question", "componentData"];
747
- }
748
- getStateElement() {
749
- return this.model;
750
- }
751
- render() {
752
- const question = this.props.question;
753
- const textStyle = this.props.question.textStyle;
754
- return (React.createElement(React.Fragment, null,
755
- React.createElement("div", { "data-sv-drop-target-survey-element": this.model.element.name, className: "svc-question__adorner" },
756
- React.createElement("div", { className: " svc-question__content--in-popup svc-question__content" },
757
- this.props.element,
758
- React.createElement("div", { className: "svc-question__dropdown-choices" }, question.visibleChoices.map((item, index) => (React.createElement("div", { className: "svc-question__dropdown-choice", key: `editable_choice_${index}` }, ReactSurveyElementsWrapper.wrapItemValue(question.survey, ReactElementFactory.Instance.createElement("survey-radiogroup-item", {
759
- question: question,
760
- cssClasses: question.cssClasses,
761
- isDisplayMode: true,
762
- item: item,
763
- textStyle: textStyle,
764
- index: index,
765
- isChecked: question.value === item.value
766
- }), question, item)))))))));
767
- }
768
- }
769
- ReactElementFactory.Instance.registerElement("svc-cell-dropdown-question", (props) => {
770
- return React.createElement(CellQuestionDropdownAdornerComponent, props);
771
- });
772
-
773
- const PageElementContent = React.memo(({ page, survey, creator }) => {
774
- return React.createElement(SurveyPage, { page: page, survey: survey, creator: creator });
775
- });
776
- PageElementContent.displayName = "PageElementContent";
777
- class CreatorSurveyPageComponent extends CreatorModelElement {
778
- constructor(props) {
779
- super(props);
780
- this.rootRef = React.createRef();
781
- }
782
- createModel(props) {
783
- if (this.model) {
784
- this.model.attachToUI(props.page, this.rootRef.current);
785
- }
786
- this.model = this.createPageAdorner(props.creator, props.page);
787
- this.model.isGhost = this.props.isGhost;
788
- }
789
- createPageAdorner(creator, page) {
790
- return new PageAdorner(creator, page);
791
- }
792
- shouldComponentUpdate(nextProps, nextState) {
793
- const res = super.shouldComponentUpdate(nextProps, nextState);
794
- if (this.model) {
795
- this.model.isGhost = this.props.isGhost;
796
- }
797
- return res;
798
- }
799
- componentDidUpdate(prevProps, prevState) {
800
- super.componentDidUpdate(prevProps, prevState);
801
- }
802
- getUpdatedModelProps() {
803
- return ["creator", "page"];
804
- }
805
- getStateElement() {
806
- return this.model;
807
- }
808
- componentDidMount() {
809
- super.componentDidMount();
810
- this.model.attachToUI(this.props.page, this.rootRef.current);
811
- this.model.isGhost = this.props.isGhost;
812
- }
813
- componentWillUnmount() {
814
- super.componentWillUnmount();
815
- this.model.detachFromUI();
816
- }
817
- canRender() {
818
- return super.canRender();
819
- }
820
- renderElement() {
821
- if (!this.props.page)
822
- return null;
823
- return (attachKey2click(React.createElement("div", { ref: this.rootRef, id: this.props.page.id, "data-sv-drop-target-survey-page": this.model.dropTargetName, className: "svc-page__content " + this.model.css, onClick: (e) => {
824
- return this.model.select(this.model, new ReactMouseEvent(e));
825
- }, onDoubleClick: e => this.model.dblclick(e.nativeEvent), onMouseLeave: (e) => this.model.hover(e.nativeEvent, e.currentTarget), onMouseOver: (e) => this.model.hover(e.nativeEvent, e.currentTarget) },
826
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--top" }),
827
- React.createElement("div", { className: "svc-question__drop-indicator svc-question__drop-indicator--bottom" }),
828
- this.renderContent(),
829
- this.renderPlaceholder(),
830
- this.renderHeader(),
831
- this.renderFooter())));
832
- }
833
- renderPlaceholder() {
834
- if (!this.model.showPlaceholder)
835
- return null;
836
- return (React.createElement("div", { className: "svc-page__placeholder_frame" },
837
- React.createElement("div", { className: "svc-panel__placeholder_frame" },
838
- React.createElement("div", { className: "svc-panel__placeholder" }, this.model.placeholderText))));
839
- }
840
- renderContent() {
841
- if (!this.model.needRenderContent) {
842
- return React.createElement("div", { className: "svc-page__loading-content" },
843
- React.createElement(LoadingIndicatorComponent, null));
844
- }
845
- return (React.createElement(PageElementContent, { page: this.props.page, survey: this.props.survey, creator: this.props.creator }));
846
- }
847
- renderHeader() {
848
- const actions = (React.createElement("div", { className: "svc-page__content-actions" },
849
- React.createElement(SurveyActionBar, { model: this.model.actionContainer }),
850
- (this.model.topActionContainer.hasActions ? React.createElement(SurveyActionBar, { model: this.model.topActionContainer }) : null)));
851
- if (this.model.isGhost || !this.model.allowDragging) {
852
- return actions;
853
- }
854
- return (React.createElement("div", { className: "svc-question__drag-area", onPointerDown: (event) => this.model.onPointerDown(event) },
855
- React.createElement(SvgIcon, { className: "svc-question__drag-element", size: "auto", iconName: "icon-drag-area-indicator_24x16" }),
856
- actions));
857
- }
858
- renderFooter() {
859
- return React.createElement(SurveyActionBar, { model: this.model.footerActionsBar });
860
- }
861
- }
862
- ReactElementFactory.Instance.registerElement("svc-page", (props) => {
863
- return React.createElement(CreatorSurveyPageComponent, props);
864
- });
865
-
866
- class AddQuestionButtonComponent extends SurveyElementBase {
867
- get model() {
868
- return this.props.item.data;
869
- }
870
- renderTypeSelector() {
871
- const questionTypeSelectorModel = this.model.questionTypeSelectorModel;
872
- return attachKey2click(React.createElement("button", { type: "button", onClick: (e) => {
873
- e.stopPropagation();
874
- questionTypeSelectorModel.action();
875
- }, className: "svc-element__question-type-selector", title: this.model.addNewQuestionText, role: "button" },
876
- React.createElement("span", { className: "svc-element__question-type-selector-icon" },
877
- React.createElement(SvgIcon, { iconName: questionTypeSelectorModel.iconName, size: "auto", title: this.model.addNewQuestionText })),
878
- this.props.renderPopup === undefined || this.props.renderPopup ?
879
- React.createElement(Popup, { model: questionTypeSelectorModel.popupModel })
880
- : null));
881
- }
882
- renderElement() {
883
- const addButtonClass = this.props.buttonClass || "svc-btn";
884
- return React.createElement(React.Fragment, null,
885
- attachKey2click(React.createElement("div", { className: "svc-element__add-new-question " + addButtonClass, onClick: (e) => {
886
- e.stopPropagation();
887
- this.model.addNewQuestion(this.model, new ReactMouseEvent(e));
888
- }, onMouseOver: (e) => this.model.hoverStopper && this.model.hoverStopper(e.nativeEvent, e.currentTarget) },
889
- React.createElement(SvgIcon, { className: "svc-panel__add-new-question-icon", iconName: "icon-add_24x24", size: "auto" }),
890
- React.createElement("span", { className: "svc-add-new-item-button__text" }, this.model.addNewQuestionText),
891
- this.props.renderPopup !== false ? this.renderTypeSelector() : null)),
892
- this.props.renderPopup === false ? this.renderTypeSelector() : null);
893
- }
894
- }
895
- ReactElementFactory.Instance.registerElement("svc-add-new-question-btn", (props) => {
896
- return React.createElement(AddQuestionButtonComponent, props);
897
- });
898
-
899
- class PanelAdornerComponent extends QuestionAdornerComponent {
900
- renderElementPlaceholder() {
901
- if (!this.model.isEmptyElement) {
902
- return null;
903
- }
904
- return (React.createElement("div", { className: "svc-panel__placeholder_frame-wrapper" },
905
- React.createElement("div", { className: "svc-panel__placeholder_frame" },
906
- React.createElement("div", { className: "svc-panel__placeholder" }, this.model.placeholderText),
907
- this.model.showAddQuestionButton ? attachKey2click(React.createElement("div", { className: "svc-panel__add-new-question svc-action-button", onClick: (e) => {
908
- e.stopPropagation();
909
- this.model.addNewQuestion();
910
- } },
911
- React.createElement(SvgIcon, { className: "svc-panel__add-new-question-icon", iconName: "icon-add_24x24", size: "auto" }),
912
- React.createElement("span", { className: "svc-add-new-item-button__text" }, this.model.addNewQuestionText))) : null)));
913
- }
914
- disableTabStop() {
915
- return true;
916
- }
917
- renderFooter() {
918
- return (React.createElement(React.Fragment, null,
919
- !this.model.isEmptyElement && this.model.element.isPanel && this.model.showAddQuestionButton ? (React.createElement("div", { className: "svc-panel__add-new-question-container" },
920
- React.createElement("div", { className: "svc-panel__question-type-selector-popup" },
921
- React.createElement(Popup, { model: this.model.questionTypeSelectorModel.popupModel })),
922
- React.createElement("div", { className: "svc-panel__add-new-question-wrapper" },
923
- React.createElement(AddQuestionButtonComponent, { item: { data: this.model }, buttonClass: "svc-action-button", renderPopup: false })))) : null,
924
- super.renderFooter()));
925
- }
926
- }
927
- ReactElementFactory.Instance.registerElement("svc-panel", (props) => {
928
- return React.createElement(PanelAdornerComponent, props);
929
- });
930
-
931
- class LogoImageComponent extends CreatorModelElement {
932
- constructor(props) {
933
- super(props);
934
- this.rootRef = React.createRef();
935
- }
936
- createModel(props) {
937
- let prevRoot = null;
938
- if (!!this.model) {
939
- prevRoot = this.model.root;
940
- }
941
- this.model = new LogoImageViewModel(props.data, prevRoot);
942
- }
943
- getUpdatedModelProps() {
944
- return ["data"];
945
- }
946
- getStateElement() {
947
- return this.model;
948
- }
949
- componentDidMount() {
950
- super.componentDidMount();
951
- this.model.root = this.rootRef.current;
952
- }
953
- renderChooseButton() {
954
- return attachKey2click(React.createElement("span", { className: "svc-context-button", onClick: () => this.model.chooseFile(this.model) },
955
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-choosefile" })));
956
- }
957
- renderClearButton() {
958
- return attachKey2click(React.createElement("span", { className: "svc-context-button svc-context-button--danger", onClick: () => this.model.remove(this.model) },
959
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-clear" })));
960
- }
961
- renderButtons() {
962
- return (React.createElement("div", { className: "svc-context-container svc-logo-image-controls" },
963
- this.renderChooseButton(),
964
- this.renderClearButton()));
965
- }
966
- renderImage() {
967
- return React.createElement("div", { className: this.model.containerCss },
968
- this.renderButtons(),
969
- React.createElement(LogoImage, { data: this.props.data.survey }));
970
- }
971
- renderPlaceHolder() {
972
- return this.model.allowEdit && !this.model.isUploading ? attachKey2click(React.createElement("div", { className: "svc-logo-image-placeholder", onClick: () => this.model.chooseFile(this.model) },
973
- React.createElement("svg", null,
974
- React.createElement("use", { xlinkHref: "#icon-image-48x48" })))) : null;
975
- }
976
- renderInput() {
977
- return React.createElement("input", { "aria-hidden": "true", type: "file", tabIndex: -1, accept: this.model.acceptedTypes, className: "svc-choose-file-input" });
978
- }
979
- renderLoadingIndicator() {
980
- return React.createElement("div", { className: "svc-logo-image__loading" },
981
- React.createElement(LoadingIndicatorComponent, null));
982
- }
983
- render() {
984
- let content = null;
985
- if (this.model.survey.locLogo.renderedHtml && !this.model.isUploading) {
986
- content = this.renderImage();
987
- }
988
- else if (this.model.isUploading) {
989
- content = this.renderLoadingIndicator();
990
- }
991
- else {
992
- content = this.renderPlaceHolder();
993
- }
994
- return (React.createElement("div", { ref: this.rootRef, className: "svc-logo-image" },
995
- this.renderInput(),
996
- content));
997
- }
998
- }
999
- ReactElementFactory.Instance.registerElement("svc-logo-image", (props) => {
1000
- return React.createElement(LogoImageComponent, props);
1001
- });
1002
-
1003
- class SurveyQuestionLinkValue extends SurveyQuestionElementBase {
1004
- get question() {
1005
- return this.questionBase;
1006
- }
1007
- renderClear() {
1008
- const showClear = this.questionBase.showClear;
1009
- if (!this.questionBase.isReadOnly && showClear) {
1010
- return (React.createElement(ActionButton, { classes: this.question.linkClearButtonCssClasses, click: () => this.question.doClearClick(), text: editorLocalization.getString("pe.clear") }));
1011
- }
1012
- else {
1013
- return null;
1014
- }
1015
- }
1016
- renderElement() {
1017
- return (React.createElement(React.Fragment, null,
1018
- React.createElement(ActionButton, { classes: this.question.linkSetButtonCssClasses, click: () => this.question.doLinkClick(), selected: this.question.isSelected, disabled: !this.question.isClickable, text: this.question.linkValueText, title: this.question.tooltip, iconName: this.question.iconName }),
1019
- this.renderClear()));
1020
- }
1021
- }
1022
- ReactQuestionFactory.Instance.registerQuestion("linkvalue", (props) => {
1023
- return React.createElement(SurveyQuestionLinkValue, props);
1024
- });
1025
-
1026
- class SurveyElementEmbeddedSurvey extends SurveyQuestionElementBase {
1027
- constructor() {
1028
- super(...arguments);
1029
- this.rootRef = React.createRef();
1030
- }
1031
- get embeddedSurvey() {
1032
- const element = (this.props.element || this.props.question);
1033
- if (!element)
1034
- return null;
1035
- const survey = element.embeddedSurvey;
1036
- if (!survey || !survey.currentPage)
1037
- return null;
1038
- return survey;
1039
- }
1040
- get creator() {
1041
- return this.props.creator;
1042
- }
1043
- componentDidMount() {
1044
- super.componentDidMount();
1045
- if (this.embeddedSurvey) {
1046
- this.embeddedSurvey.rootElement = this.rootRef.current;
1047
- }
1048
- }
1049
- render() {
1050
- const survey = this.embeddedSurvey;
1051
- if (!survey)
1052
- return null;
1053
- return React.createElement("div", { style: { display: "contents" }, ref: this.rootRef },
1054
- React.createElement(SurveyPage, { survey: survey, page: survey.currentPage, css: survey.css, creator: this.creator }));
1055
- }
1056
- }
1057
- ReactQuestionFactory.Instance.registerQuestion("embeddedsurvey", (props) => {
1058
- return React.createElement(SurveyElementEmbeddedSurvey, props);
1059
- });
1060
-
1061
- class QuestionEditorContentComponent extends React.Component {
1062
- get survey() {
1063
- return this.props.survey;
1064
- }
1065
- createQuestionElement(question) {
1066
- return ReactQuestionFactory.Instance.createQuestion(!question.isDefaultRendering || question.isDefaultRendering()
1067
- ? question.getTemplate()
1068
- : question.getComponentName(), {
1069
- question: question,
1070
- isDisplayMode: question.isInputReadOnly,
1071
- creator: this,
1072
- });
1073
- }
1074
- questionTitleLocation() {
1075
- return this.survey.questionTitleLocation;
1076
- }
1077
- questionErrorLocation() {
1078
- return this.survey.questionErrorLocation;
1079
- }
1080
- renderError(key, error, cssClasses) {
1081
- return null;
1082
- }
1083
- render() {
1084
- const question = this.survey.getAllQuestions()[0];
1085
- return (React.createElement("div", { style: this.props.style },
1086
- React.createElement(SurveyQuestion, { creator: this, element: question })));
1087
- }
1088
- }
1089
- ReactElementFactory.Instance.registerElement("svc-question-editor-content", (props) => {
1090
- return React.createElement(QuestionEditorContentComponent, props);
1091
- });
1092
-
1093
- class ItemValueAdornerComponent extends CreatorModelElement {
1094
- constructor(props) {
1095
- super(props);
1096
- this.onBlur = (event) => {
1097
- this.model.onFocusOut(event.nativeEvent);
1098
- };
1099
- this.rootRef = React.createRef();
1100
- }
1101
- createModel(props) {
1102
- this.model = new ItemValueWrapperViewModel(props.componentData.creator, props.question, props.item);
1103
- }
1104
- getUpdatedModelProps() {
1105
- return ["question", "item"];
1106
- }
1107
- getStateElement() {
1108
- return this.model;
1109
- }
1110
- componentDidUpdate(prevProps, prevState) {
1111
- super.componentDidUpdate(prevProps, prevState);
1112
- this.props.item.setRootElement(this.rootRef.current);
1113
- if (prevProps.item !== this.props.item && prevProps.item) {
1114
- prevProps.item.setRootElement(undefined);
1115
- }
1116
- }
1117
- componentDidMount() {
1118
- super.componentDidMount();
1119
- this.props.item.setRootElement(this.rootRef.current);
1120
- }
1121
- componentWillUnmount() {
1122
- super.componentWillUnmount();
1123
- this.props.item.setRootElement(undefined);
1124
- }
1125
- render() {
1126
- this.model.item = this.props.item;
1127
- const button = this.model.allowAdd ? (attachKey2click(React.createElement("span", { role: "button", className: "svc-item-value-controls__button svc-item-value-controls__add", "aria-label": this.model.tooltip, onClick: () => {
1128
- this.model.add(this.model);
1129
- this.model.isNew = false;
1130
- } },
1131
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-add_16x16", title: this.model.tooltip })))) : (React.createElement(React.Fragment, null,
1132
- " ",
1133
- this.model.isDraggable ? (React.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__drag" },
1134
- React.createElement(SvgIcon, { className: "svc-item-value-controls__drag-icon", size: "auto", iconName: "icon-drag-24x24", title: this.model.dragTooltip }))) : null,
1135
- this.model.allowRemove ? attachKey2click(React.createElement("span", { role: "button", className: "svc-item-value-controls__button svc-item-value-controls__remove", "aria-label": this.model.tooltip, onClick: () => this.model.remove(this.model) },
1136
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-remove_16x16", title: this.model.tooltip }))) : null));
1137
- const itemkey = this.props.element.key + (this.model.allowAdd ? "_new" : "");
1138
- return (React.createElement(React.Fragment, null,
1139
- React.createElement("div", { ref: this.rootRef, className: "svc-item-value-wrapper" +
1140
- (this.model.allowAdd ? " svc-item-value--new" : "") +
1141
- (this.model.isDragging ? " svc-item-value--dragging" : "") +
1142
- (this.model.isDragDropGhost ? " svc-item-value--ghost" : "") +
1143
- (this.model.isDragDropMoveDown ? " svc-item-value--movedown" : "") +
1144
- (this.model.isDragDropMoveUp ? " svc-item-value--moveup" : ""), key: itemkey, "data-sv-drop-target-item-value": this.model.isDraggable ? this.model.item.value : undefined, onPointerDown: (event) => this.model.onPointerDown(event) },
1145
- React.createElement("div", { className: "svc-item-value__ghost" }),
1146
- React.createElement("div", { className: "svc-item-value-controls", onBlur: this.onBlur }, button),
1147
- React.createElement("div", { className: "svc-item-value__item", onClick: (event) => this.model.select(this.model, event.nativeEvent) }, this.props.element),
1148
- this.renderPanelAction()),
1149
- this.renderPanel()));
1150
- }
1151
- renderPanelAction() {
1152
- if (!this.model.canShowPanel())
1153
- return null;
1154
- const isShowPanel = this.model.showPanel;
1155
- const icName = isShowPanel ? "icon-collapsepanel-16x16" : "icon-expandpanel-16x16";
1156
- const btn = attachKey2click(React.createElement("span", { role: "button", className: "svc-item-value-controls__button svc-item-value-controls__add svc-choice-elements-button", onClick: () => {
1157
- this.model.togglePanel();
1158
- } },
1159
- React.createElement(SvgIcon, { size: "auto", iconName: icName })));
1160
- return React.createElement("div", { className: "svc-item-value-controls svc-choice-elements-button-container" }, btn);
1161
- }
1162
- renderPanel() {
1163
- if (!this.model.showPanel)
1164
- return null;
1165
- const creator = this.model.creator;
1166
- const survey = creator.survey;
1167
- return React.createElement(ChoiceItemPanel, { element: this.model.item.panel, survey: survey, creator: creator, css: survey.getCss() });
1168
- }
1169
- }
1170
- const ChoiceItemPanel = React.memo(({ element, survey, creator, css }) => {
1171
- return React.createElement(SurveyPanel, { element: element, survey: survey, creator: creator, cssClasses: css });
1172
- });
1173
- ChoiceItemPanel.displayName = "ChoiceItemPanel";
1174
- ReactElementFactory.Instance.registerElement("svc-item-value", (props) => {
1175
- return React.createElement(ItemValueAdornerComponent, props);
1176
- });
1177
-
1178
- class ImageItemValueAdornerComponent extends CreatorModelElement {
1179
- constructor(props) {
1180
- super(props);
1181
- this.preventDragHandler = (e) => {
1182
- e.preventDefault();
1183
- };
1184
- this.rootRef = React.createRef();
1185
- }
1186
- createModel(props) {
1187
- this.model = new ImageItemValueWrapperViewModel(props.componentData.creator, props.question, props.item, null, null);
1188
- }
1189
- getUpdatedModelProps() {
1190
- return ["question", "item"];
1191
- }
1192
- getStateElement() {
1193
- return this.model;
1194
- }
1195
- get question() {
1196
- return this.props.question;
1197
- }
1198
- componentDidMount() {
1199
- super.componentDidMount();
1200
- this.model.itemsRoot = this.rootRef.current;
1201
- }
1202
- componentDidUpdate(prevProps, prevState) {
1203
- super.componentDidUpdate(prevProps, prevState);
1204
- this.model.itemsRoot = this.rootRef.current;
1205
- }
1206
- renderLoadingIndicator() {
1207
- return React.createElement("div", { className: "svc-image-item-value__loading" },
1208
- React.createElement(LoadingIndicatorComponent, null));
1209
- }
1210
- renderNewItemControls() {
1211
- const addButton = attachKey2click(React.createElement("span", { className: this.model.addButtonCss, onClick: () => this.model.chooseNewFile(this.model) }, this.model.showChooseButtonAsIcon ?
1212
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-add-lg", title: this.model.addFileTitle }) :
1213
- React.createElement("span", null, this.model.chooseImageText)));
1214
- const placeholder = this.model.showPlaceholder ? React.createElement("span", { className: "svc-image-item-value__placeholder" }, this.model.placeholderText) : null;
1215
- return React.createElement(React.Fragment, null,
1216
- placeholder,
1217
- addButton);
1218
- }
1219
- render() {
1220
- this.model.item = this.props.item;
1221
- const isNew = !this.props.question.isItemInList(this.props.item);
1222
- this.model.isNew = isNew;
1223
- const imageStyle = !this.model.getIsNewItemSingle() ? { width: this.question.renderedImageWidth, height: this.question.renderedImageHeight } : null;
1224
- let content = null;
1225
- if (isNew || this.model.isUploading) {
1226
- content = (React.createElement(React.Fragment, null,
1227
- React.createElement("div", { className: "svc-image-item-value__item" },
1228
- React.createElement("div", { className: "sd-imagepicker__item sd-imagepicker__item--inline" },
1229
- React.createElement("label", { className: "sd-imagepicker__label" },
1230
- React.createElement("div", { style: imageStyle, className: "sd-imagepicker__image" }, this.model.isUploading ? this.renderLoadingIndicator() : null)))),
1231
- this.model.allowAdd && !this.model.isUploading ?
1232
- React.createElement("div", { className: "svc-image-item-value-controls" }, this.renderNewItemControls())
1233
- : null));
1234
- }
1235
- else {
1236
- content = (React.createElement(React.Fragment, null,
1237
- React.createElement("div", { className: "svc-image-item-value__item" }, this.props.element),
1238
- this.model.isDraggable && this.model.canRenderControls ?
1239
- React.createElement("span", { className: "svc-context-button svc-image-item-value-controls__drag-area-indicator", onPointerDown: (event) => this.model.onPointerDown(event) },
1240
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-drag-24x24" }))
1241
- : null,
1242
- this.model.canRenderControls ?
1243
- React.createElement("div", { className: "svc-context-container svc-image-item-value-controls" },
1244
- this.model.allowRemove && !this.model.isUploading ? attachKey2click(React.createElement("span", { className: "svc-context-button", onClick: () => this.model.chooseFile(this.model) },
1245
- React.createElement(SvgIcon, { role: "button", size: "auto", iconName: "icon-choosefile", title: this.model.selectFileTitle }))) : null,
1246
- this.model.allowRemove && !this.model.isUploading ? attachKey2click(React.createElement("span", { className: "svc-context-button svc-context-button--danger", onClick: () => this.model.remove(this.model) },
1247
- React.createElement(SvgIcon, { role: "button", size: "auto", iconName: "icon-delete", title: this.model.removeFileTitle }))) : null)
1248
- : null));
1249
- }
1250
- return (React.createElement("div", { ref: this.rootRef, className: this.model.getRootCss(), key: this.props.element.key, "data-sv-drop-target-item-value": this.model.isDraggable ? this.model.item.value : undefined, onPointerDown: (event) => this.model.onPointerDown(event), onDragStart: this.preventDragHandler, onDrop: this.model.onDrop, onDragEnter: this.model.onDragEnter, onDragOver: this.model.onDragOver, onDragLeave: this.model.onDragLeave },
1251
- React.createElement("div", { className: "svc-image-item-value-wrapper__ghost", style: imageStyle }),
1252
- React.createElement("div", { className: "svc-image-item-value-wrapper__content" },
1253
- React.createElement("input", { type: "file", "aria-hidden": "true", tabIndex: -1, accept: this.model.acceptedTypes, className: "svc-choose-file-input", style: {
1254
- position: "absolute",
1255
- opacity: 0,
1256
- width: "1px",
1257
- height: "1px",
1258
- overflow: "hidden"
1259
- } }),
1260
- content)));
1261
- }
1262
- }
1263
- ReactElementFactory.Instance.registerElement("svc-image-item-value", (props) => {
1264
- return React.createElement(ImageItemValueAdornerComponent, props);
1265
- });
1266
-
1267
- class MatrixCellAdornerComponent extends CreatorModelElement {
1268
- createModel(props) {
1269
- var _a;
1270
- const data = props.componentData;
1271
- let prevIsSelected = false;
1272
- if (!!this.model) {
1273
- prevIsSelected = this.model.isSelected;
1274
- }
1275
- this.model = new MatrixCellWrapperViewModel(data.creator, data.element, data.question, data.row, data.column || ((_a = data.element.cell) === null || _a === void 0 ? void 0 : _a.column));
1276
- this.model.isSelected = prevIsSelected;
1277
- }
1278
- getUpdatedModelProps() {
1279
- return ["componentData"];
1280
- }
1281
- componentDidUpdate(prevProps, prevState) {
1282
- var _a, _b;
1283
- super.componentDidUpdate(prevProps, prevState);
1284
- const data = this.props.componentData;
1285
- this.model.templateData = data.element;
1286
- this.model.row = data.row;
1287
- this.model.column = data.column || ((_b = (_a = data.element) === null || _a === void 0 ? void 0 : _a.cell) === null || _b === void 0 ? void 0 : _b.column);
1288
- this.model.question = data.question;
1289
- }
1290
- getStateElement() {
1291
- return this.model;
1292
- }
1293
- render() {
1294
- let controls = null;
1295
- if (!!this.model.isSupportCellEditor) {
1296
- controls = React.createElement("div", { className: "svc-matrix-cell__question-controls" }, attachKey2click(React.createElement("span", { className: "svc-matrix-cell__question-controls-button svc-context-button", onClick: (event) => this.model.editQuestion(this.model, event) },
1297
- React.createElement(SvgIcon, { size: "auto", iconName: "icon-edit" }))));
1298
- }
1299
- return (React.createElement("div", { className: "svc-matrix-cell", tabIndex: -1, key: this.props.element.key, onClick: (e) => !this.props.question && this.model.selectContext(this.model, e), onMouseOut: e => this.model.hover(e.nativeEvent, e.currentTarget), onMouseOver: e => this.model.hover(e.nativeEvent, e.currentTarget) },
1300
- React.createElement("div", { className: "svc-matrix-cell--selected" + (this.model.isSelected ? " svc-visible" : "") }),
1301
- this.props.element,
1302
- controls));
1303
- }
1304
- }
1305
- ReactElementFactory.Instance.registerElement("svc-matrix-cell", (props) => {
1306
- return React.createElement(MatrixCellAdornerComponent, props);
1307
- });
1308
-
1309
- class SurveyResults extends CreatorModelElement {
1310
- createModel(props) {
1311
- if (this.props.survey) {
1312
- this.model = new SurveyResultsModel(props.survey);
1313
- }
1314
- }
1315
- getUpdatedModelProps() {
1316
- return ["survey"];
1317
- }
1318
- getStateElement() {
1319
- return this.model;
1320
- }
1321
- render() {
1322
- if (!this.model) {
1323
- return null;
1324
- }
1325
- return (React.createElement("div", { className: "svd-test-results" },
1326
- React.createElement("div", { className: "svd-test-results__content" },
1327
- React.createElement("div", { className: "svd-test-results__header" },
1328
- React.createElement("div", { className: "svd-test-results__header-text" }, this.model.surveyResultsText),
1329
- React.createElement("div", { className: "svd-test-results__header-types" },
1330
- React.createElement(ActionButton, { click: () => this.model.selectTableClick(), text: this.model.surveyResultsTableText, selected: this.model.isTableSelected, disabled: false }),
1331
- React.createElement(ActionButton, { click: () => this.model.selectJsonClick(), text: this.model.surveyResultsJsonText, selected: this.model.isJsonSelected, disabled: false }))),
1332
- this.renderResultAsText(),
1333
- this.renderResultAsTable())));
1334
- }
1335
- renderResultAsText() {
1336
- if (this.model.resultViewType !== "text") {
1337
- return null;
1338
- }
1339
- return (React.createElement("div", { className: "svd-test-results__text svd-light-bg-color" },
1340
- React.createElement("div", null, this.model.resultText)));
1341
- }
1342
- renderResultAsTable() {
1343
- if (this.model.resultViewType !== "table") {
1344
- return null;
1345
- }
1346
- return (React.createElement("div", { className: "svd-test-results__table svd-light-bg-color" },
1347
- React.createElement("table", null,
1348
- React.createElement("thead", null,
1349
- React.createElement("tr", { className: "svd-light-background-color" },
1350
- React.createElement("th", { key: 1, className: "svd-dark-border-color" }, this.model.resultsTitle),
1351
- React.createElement("th", { key: 2, className: "svd-dark-border-color" }, this.model.resultsDisplayValue))),
1352
- React.createElement("tbody", null, SurveyResults.renderRows(this.model.resultData)))));
1353
- }
1354
- static renderRows(data) {
1355
- const rows = [];
1356
- for (var i = 0; i < data.length; i++) {
1357
- rows.push(React.createElement(SurveyResultsByRow, { key: i + 1, row: data[i] }));
1358
- }
1359
- return rows;
1360
- }
1361
- }
1362
- class SurveyResultsByRow extends CreatorModelElement {
1363
- get row() {
1364
- return this.props.row;
1365
- }
1366
- getStateElement() {
1367
- return this.row;
1368
- }
1369
- render() {
1370
- return (React.createElement(React.Fragment, null,
1371
- attachKey2click(React.createElement("tr", { onClick: () => this.row.toggle() },
1372
- React.createElement("td", { key: 1, style: { paddingLeft: this.row.textMargin }, className: "svd-dark-border-color" },
1373
- this.row.isNode ? (React.createElement("span", { style: { left: this.row.markerMargin }, className: "svd-test-results__marker " + (this.row.collapsed ? "" : "svd-test-results__marker--expanded") },
1374
- React.createElement(SvgIcon, { iconName: "icon-expand_16x16", size: 16 }))) : null,
1375
- this.row.question ? React.createElement(SurveyLocStringViewer, { model: this.row.question.locTitle }) : React.createElement("span", null, this.row.title)),
1376
- React.createElement("td", { key: 2, className: this.row.isNode ? "svd-test-results__node-value" : "svd-dark-border-color" }, this.row.getString(this.row.displayValue)))),
1377
- this.row.isNode && !this.row.collapsed ? SurveyResults.renderRows(this.row.data) : null));
1378
- }
1379
- }
1380
-
1381
- class SurveyCreatorToolboxTool extends CreatorModelElement {
1382
- constructor(props) {
1383
- super(props);
1384
- this.rootRef = React.createRef();
1385
- }
1386
- createModel(props) {
1387
- this.model = new ToolboxToolViewModel(props.item, props.creator, props.parentModel);
1388
- }
1389
- getUpdatedModelProps() {
1390
- return ["creator", "item"];
1391
- }
1392
- get item() {
1393
- return this.props.item;
1394
- }
1395
- get creator() {
1396
- return this.props.creator;
1397
- }
1398
- get isCompact() {
1399
- return this.props.isCompact;
1400
- }
1401
- getStateElement() {
1402
- return this.item;
1403
- }
1404
- render() {
1405
- const item = this.item;
1406
- const itemComponent = ReactElementFactory.Instance.createElement(this.model.itemComponent, {
1407
- item: item,
1408
- creator: this.creator,
1409
- parentModel: this.creator.toolbox,
1410
- model: this.model,
1411
- isCompact: this.isCompact
1412
- });
1413
- return (React.createElement("div", { className: item.css, key: item.id, ref: this.rootRef },
1414
- (item.needSeparator && !this.creator.toolbox.showCategoryTitles) ? (React.createElement("div", { className: "svc-toolbox__category-separator" })) : null,
1415
- React.createElement("div", { className: "svc-toolbox__tool-content sv-action__content", onPointerDown: (event) => {
1416
- event.persist();
1417
- this.model.onPointerDown(event);
1418
- } }, itemComponent)));
1419
- }
1420
- componentWillUnmount() {
1421
- super.componentWillUnmount();
1422
- this.item.updateModeCallback = undefined;
1423
- }
1424
- componentDidMount() {
1425
- super.componentDidMount();
1426
- this.item.updateModeCallback = (mode, callback) => {
1427
- queueMicrotask(() => {
1428
- if (ReactDOM["flushSync"]) {
1429
- ReactDOM["flushSync"](() => {
1430
- this.item.mode = mode;
1431
- });
1432
- }
1433
- else {
1434
- this.item.mode = mode;
1435
- }
1436
- queueMicrotask(() => {
1437
- callback(mode, this.rootRef.current);
1438
- });
1439
- });
1440
- };
1441
- this.item.afterRender();
1442
- }
1443
- }
1444
- class SurveyCreatorToolboxItem extends CreatorModelElement {
1445
- constructor(props) {
1446
- super(props);
1447
- }
1448
- getUpdatedModelProps() {
1449
- return ["creator", "item"];
1450
- }
1451
- get item() {
1452
- return this.props.item;
1453
- }
1454
- get creator() {
1455
- return this.props.creator;
1456
- }
1457
- get model() {
1458
- return this.props.model;
1459
- }
1460
- getStateElement() {
1461
- return this.model;
1462
- }
1463
- render() {
1464
- const banner = (this.props.isCompact ?
1465
- React.createElement("span", { className: "svc-toolbox__item-banner", onClick: (event) => {
1466
- event.persist();
1467
- this.model.click(event);
1468
- } },
1469
- React.createElement(SvgIcon, { size: "auto", iconName: this.item.iconName, className: "svc-toolbox__item-icon", title: this.item.getTooltip() }),
1470
- React.createElement("span", null, this.item.title))
1471
- :
1472
- null);
1473
- const item = attachKey2click(React.createElement("div", { className: this.item.renderedCss, tabIndex: 0, role: "button", "aria-label": this.item.getTooltip(), onClick: (event) => {
1474
- event.persist();
1475
- this.model.click(event);
1476
- } },
1477
- React.createElement("span", { className: "svc-toolbox__item-container" }, !!this.item.iconName ? React.createElement(SvgIcon, { size: "auto", iconName: this.item.iconName, className: "svc-toolbox__item-icon" }) : null),
1478
- (this.props.isCompact ?
1479
- null
1480
- :
1481
- React.createElement("span", { className: "svc-toolbox__item-title" }, this.item.title))), undefined, { disableTabStop: !this.model.toolboxItem.enabled });
1482
- return (React.createElement(React.Fragment, null,
1483
- item,
1484
- banner));
1485
- }
1486
- }
1487
- ReactElementFactory.Instance.registerElement("svc-toolbox-item", (props) => {
1488
- return createElement(SurveyCreatorToolboxItem, props);
1489
- });
1490
-
1491
- class SurveyCreatorToolboxItemGroup extends CreatorModelElement {
1492
- constructor(props) {
1493
- super(props);
1494
- }
1495
- getUpdatedModelProps() {
1496
- return ["creator", "item"];
1497
- }
1498
- get item() {
1499
- return this.props.item;
1500
- }
1501
- get model() {
1502
- return this.props.model;
1503
- }
1504
- get creator() {
1505
- return this.props.creator;
1506
- }
1507
- get isCompact() {
1508
- return this.props.isCompact;
1509
- }
1510
- get parentModel() {
1511
- return this.props.parentModel;
1512
- }
1513
- getStateElement() {
1514
- return this.item;
1515
- }
1516
- render() {
1517
- return React.createElement(React.Fragment, null,
1518
- React.createElement(SurveyCreatorToolboxItem, { item: this.item, creator: this.creator, model: this.model, parentModel: this.parentModel, isCompact: this.isCompact }),
1519
- React.createElement("div", { className: "svc-toolbox__item-submenu-button", onMouseOver: (event) => this.model.onMouseOver(this.item, event), onMouseLeave: (event) => this.model.onMouseLeave(this.item, event) },
1520
- React.createElement(SvgIcon, { size: "auto", iconName: this.item.subitemsButtonIcon }),
1521
- React.createElement(Popup, { model: this.item.popupModel })));
1522
- }
1523
- }
1524
- ReactElementFactory.Instance.registerElement("svc-toolbox-item-group", (props) => {
1525
- return React.createElement(SurveyCreatorToolboxItemGroup, props);
1526
- });
1527
-
1528
- class SurveyCreatorToolboxCategory extends SurveyElementBase {
1529
- get category() {
1530
- return this.props.category;
1531
- }
1532
- get toolbox() {
1533
- return this.props.toolbox;
1534
- }
1535
- get class() {
1536
- return "svc-toolbox__category" +
1537
- (this.category.collapsed ? " svc-toolbox__category--collapsed" : "") +
1538
- (this.category.empty ? " svc-toolbox__category--empty" : "");
1539
- }
1540
- getStateElement() {
1541
- return this.category;
1542
- }
1543
- render() {
1544
- const header = this.renderCategoryHeader();
1545
- const items = this.renderCategoryContent();
1546
- return (React.createElement("div", { className: this.class, key: this.category.name },
1547
- React.createElement("div", { className: "svc-toolbox__category-header-wrapper" }, header),
1548
- items));
1549
- }
1550
- renderCategoryHeader() {
1551
- let className = "svc-toolbox__category-header";
1552
- if (this.toolbox.canCollapseCategories) {
1553
- className += " svc-toolbox__category-header--collapsed";
1554
- }
1555
- const title = this.renderLocString(this.category.locTitle);
1556
- return attachKey2click(React.createElement("div", { className: className, onClick: e => this.category.toggleState() },
1557
- React.createElement("span", { className: "svc-toolbox__category-title" }, title),
1558
- this.renderButton()));
1559
- }
1560
- renderButton() {
1561
- if (!this.toolbox.canCollapseCategories)
1562
- return null;
1563
- const iconName = this.category.iconName;
1564
- return (React.createElement("div", { className: "svc-toolbox__category-header__controls" },
1565
- React.createElement(SvgIcon, { className: this.category.iconClassName, iconName: iconName, size: "auto" })));
1566
- }
1567
- renderCategoryContent() {
1568
- return this.renderItems(this.category.items);
1569
- }
1570
- renderItems(items, isCompact = false) {
1571
- return items.map((item, itemIndex) => React.createElement(SurveyCreatorToolboxTool, { item: item, creator: this.toolbox.creator, parentModel: this.toolbox, isCompact: isCompact, key: "item" + itemIndex }));
1572
- }
1573
- }
1574
- ReactElementFactory.Instance.registerElement("svc-toolbox-category", (props) => {
1575
- return React.createElement(SurveyCreatorToolboxCategory, props);
1576
- });
1577
-
1578
- class ToolboxList extends SurveyElementBase {
1579
- constructor(props) {
1580
- super(props);
1581
- }
1582
- get model() {
1583
- return this.props.model;
1584
- }
1585
- get creator() {
1586
- return this.props.creator;
1587
- }
1588
- getStateElement() {
1589
- return this.model;
1590
- }
1591
- render() {
1592
- if (!this.model || !this.model.renderElements)
1593
- return null;
1594
- const items = this.renderItems();
1595
- return (React.createElement("div", { className: this.model.cssClasses.root }, items));
1596
- }
1597
- renderItems() {
1598
- const items = this.model.renderedActions;
1599
- return items.map((item, itemIndex) => React.createElement(SurveyCreatorToolboxTool, { item: item, creator: this.creator, parentModel: this.model, isCompact: false, key: "item" + itemIndex }));
1600
- }
1601
- }
1602
- ReactElementFactory.Instance.registerElement("svc-toolbox-list", (props) => {
1603
- return React.createElement(ToolboxList, props);
1604
- });
1605
-
1606
- class SearchComponent extends SurveyElementBase {
1607
- get model() {
1608
- return this.props.model;
1609
- }
1610
- getStateElement() {
1611
- return this.model;
1612
- }
1613
- constructor(props) {
1614
- super(props);
1615
- this.state = {
1616
- filterString: this.model.filterString || ""
1617
- };
1618
- }
1619
- renderElement() {
1620
- if (!this.model.isVisible)
1621
- return null;
1622
- const onChange = (e) => {
1623
- const target = e.target;
1624
- const root = (target === null || target === void 0 ? void 0 : target.getRootNode()) || settings.environment.root;
1625
- if (!(root instanceof Document || root instanceof ShadowRoot))
1626
- return;
1627
- if (target === root.activeElement) {
1628
- this.model.filterString = target.value;
1629
- }
1630
- };
1631
- return (React.createElement("div", { className: "svc-search" },
1632
- React.createElement("div", { className: "svc-search__search-icon" },
1633
- React.createElement(SvgIcon, { iconName: "icon-search", size: "auto" })),
1634
- React.createElement("input", { type: "text", className: "svc-search__input", "aria-label": this.model.filterStringPlaceholder, placeholder: this.model.filterStringPlaceholder, value: this.state.filterString, onChange: onChange, tabIndex: this.model.getTabIndex() }),
1635
- React.createElement("div", { className: "svc-search__toolbar" },
1636
- React.createElement("div", { className: "svc-search__toolbar-counter" }, this.model.matchCounterText),
1637
- React.createElement(SurveyActionBar, { model: this.model.searchActionBar }))));
1638
- }
1639
- }
1640
- ReactElementFactory.Instance.registerElement("svc-search", (props) => {
1641
- return React.createElement(SearchComponent, props);
1642
- });
1643
-
1644
- class AdaptiveToolbox extends SurveyElementBase {
1645
- constructor(props) {
1646
- super(props);
1647
- this.rootRef = React.createRef();
1648
- }
1649
- componentDidUpdate(prevProps, prevState) {
1650
- super.componentDidUpdate(prevProps, prevState);
1651
- const container = this.rootRef.current;
1652
- if (container) {
1653
- this.toolbox.afterRender(container);
1654
- }
1655
- }
1656
- componentDidMount() {
1657
- super.componentDidMount();
1658
- const container = this.rootRef.current;
1659
- if (container) {
1660
- this.toolbox.afterRender(container);
1661
- }
1662
- }
1663
- componentWillUnmount() {
1664
- this.toolbox.beforeDestroy();
1665
- super.componentWillUnmount();
1666
- }
1667
- get creator() {
1668
- return this.props.model;
1669
- }
1670
- get toolbox() {
1671
- return this.creator.toolbox;
1672
- }
1673
- getStateElement() {
1674
- return this.toolbox;
1675
- }
1676
- renderItems(items, isCompact = false) {
1677
- return items.map((item, itemIndex) => {
1678
- return React.createElement(SurveyCreatorToolboxTool, { item: item, creator: this.creator, parentModel: this.toolbox, isCompact: isCompact, key: item.renderedId });
1679
- });
1680
- }
1681
- renderCategories() {
1682
- return this.toolbox.categories.map((category, index) => {
1683
- return ReactElementFactory.Instance.createElement("svc-toolbox-category", {
1684
- category,
1685
- toolbox: this.toolbox,
1686
- key: "category" + index
1687
- });
1688
- });
1689
- }
1690
- renderSearch() {
1691
- const searchButton = this.toolbox.isCompactRendered ?
1692
- React.createElement(React.Fragment, null,
1693
- React.createElement(SurveyCreatorToolboxTool, { item: this.toolbox.searchItem, creator: this.creator, parentModel: this.toolbox, isCompact: this.toolbox.isCompactRendered, key: "searchitem" })) :
1694
- null;
1695
- return (React.createElement("div", { className: "svc-toolbox__search-container" },
1696
- searchButton,
1697
- React.createElement(SearchComponent, { model: this.toolbox.searchManager }),
1698
- React.createElement("div", { className: "svc-toolbox__category-separator svc-toolbox__category-separator--search" })));
1699
- }
1700
- render() {
1701
- const search = this.toolbox.showSearch ? this.renderSearch() : null;
1702
- const placeholder = this.toolbox.showPlaceholder ? React.createElement("div", { className: "svc-toolbox__placeholder" }, this.toolbox.toolboxNoResultsFound) : null;
1703
- return (React.createElement("div", { ref: this.rootRef, className: this.toolbox.classNames, style: this.toolbox.getRootStyle() },
1704
- React.createElement("div", { onBlur: (e) => this.toolbox.focusOut(e), className: "svc-toolbox__panel" },
1705
- search,
1706
- placeholder,
1707
- React.createElement(Scroll, null, (this.toolbox.showInSingleCategory) ?
1708
- (React.createElement("div", { className: "svc-toolbox__category" }, this.renderItems(this.toolbox.renderedActions, this.toolbox.isCompactRendered)))
1709
- : this.renderCategories()))));
1710
- }
1711
- }
1712
- ReactElementFactory.Instance.registerElement("svc-toolbox", (props) => {
1713
- return React.createElement(AdaptiveToolbox, props);
1714
- });
1715
-
1716
- class SurveyNavigation extends SurveyElementBase {
1717
- constructor() {
1718
- super(...arguments);
1719
- this.onPropChangedHandler = (sender, options) => {
1720
- if (this.isRendering)
1721
- return;
1722
- const reactiveProps = [
1723
- "showProgressBar",
1724
- "progressBarType",
1725
- "currentPageValue"
1726
- ];
1727
- if (reactiveProps.indexOf(options.name) < 0)
1728
- return;
1729
- var val = {};
1730
- for (var i = 0; i < reactiveProps.length; i++) {
1731
- var propName = reactiveProps[i];
1732
- val[propName] = this.survey[propName];
1733
- }
1734
- this.setState(val);
1735
- };
1736
- }
1737
- componentDidMount() {
1738
- super.componentDidMount();
1739
- this.setHandler();
1740
- }
1741
- componentDidUpdate(prevProps, prevState) {
1742
- super.componentDidUpdate(prevProps, prevState);
1743
- this.setHandler();
1744
- }
1745
- setHandler() {
1746
- if (!this.survey ||
1747
- this.survey.onPropertyChanged.hasFunc(this.onPropChangedHandler))
1748
- return;
1749
- this.survey.onPropertyChanged.add(this.onPropChangedHandler);
1750
- }
1751
- componentWillUnmount() {
1752
- super.componentWillUnmount();
1753
- if (this.survey) {
1754
- this.survey.onPropertyChanged.remove(this.onPropChangedHandler);
1755
- }
1756
- }
1757
- get survey() {
1758
- return this.props.survey;
1759
- }
1760
- get location() {
1761
- return this.props.location;
1762
- }
1763
- get isTop() {
1764
- return this.location == "top";
1765
- }
1766
- canRender() {
1767
- return this.isTop
1768
- ? this.survey.isShowProgressBarOnTop
1769
- : this.survey.isShowProgressBarOnBottom;
1770
- }
1771
- renderElement() {
1772
- return ReactElementFactory.Instance.createElement(this.survey.getProgressTypeComponent(), { survey: this.survey, css: this.survey.css, isTop: this.isTop });
1773
- }
1774
- }
1775
-
1776
- class TabButtonComponent extends SurveyElementBase {
1777
- constructor(props) {
1778
- super(props);
1779
- }
1780
- getStateElement() {
1781
- return this.props.model;
1782
- }
1783
- renderElement() {
1784
- const model = this.props.model;
1785
- if (!model.visible)
1786
- return null;
1787
- const button = attachKey2click(React.createElement("div", { className: model.buttonClassName, title: model.tooltip, onClick: () => { model.action(); } },
1788
- React.createElement("div", { className: "svc-menu-action__icon" },
1789
- React.createElement("div", { className: "svc-menu-action__icon-container" },
1790
- React.createElement(SvgIcon, { iconName: model.iconName, size: "auto" })))), model);
1791
- return (React.createElement("div", { className: "svc-menu-action" }, button));
1792
- }
1793
- }
1794
-
1795
- class TabControl extends SurveyElementBase {
1796
- constructor(props) {
1797
- super(props);
1798
- }
1799
- getStateElement() {
1800
- return this.props.model;
1801
- }
1802
- canRender() {
1803
- if (!this.props.model)
1804
- return false;
1805
- return super.canRender();
1806
- }
1807
- renderElement() {
1808
- return (React.createElement("div", { className: this.props.model.sideBarClassName },
1809
- React.createElement("div", { className: "svc-sidebar-tabs__top-container" },
1810
- React.createElement("div", { className: "svc-sidebar-tabs__collapse-button" },
1811
- React.createElement(TabButtonComponent, { model: this.props.model.expandCollapseAction })),
1812
- React.createElement("div", { className: "svc-sidebar-tabs__separator" },
1813
- React.createElement("div", null)),
1814
- React.createElement(Scroll, null,
1815
- React.createElement("div", { className: "svc-sidebar-tabs__items" },
1816
- React.createElement(TabsComponent, { model: this.props.model.topToolbar })))),
1817
- React.createElement("div", { className: "svc-sidebar-tabs__bottom-container" },
1818
- React.createElement("div", { className: "svc-sidebar-tabs__items" },
1819
- React.createElement(SurveyActionBar, { model: this.props.model.bottomToolbar })))));
1820
- }
1821
- }
1822
- ReactElementFactory.Instance.registerElement("svc-tab-control", (props) => {
1823
- return React.createElement(TabControl, props);
1824
- });
1825
- class TabsComponent extends SurveyElementBase {
1826
- constructor(props) {
1827
- super(props);
1828
- }
1829
- getStateElement() {
1830
- return this.props.model;
1831
- }
1832
- renderElement() {
1833
- return React.createElement(React.Fragment, null, this.props.model.actions.map((item, itemIndex) => React.createElement(TabButtonComponent, { model: item, key: "item" + itemIndex })));
1834
- }
1835
- }
1836
-
1837
- class SideBarDefaultHeader extends SurveyElementBase {
1838
- get model() {
1839
- return this.props.model;
1840
- }
1841
- getStateElement() {
1842
- return this.model;
1843
- }
1844
- renderElement() {
1845
- const title = !!this.model.title ? (React.createElement("div", { className: "svc-side-bar__container-title" }, this.model.title)) : null;
1846
- return (React.createElement("div", { className: "svc-side-bar__container-header" },
1847
- React.createElement("div", { className: "svc-side-bar__container-actions" },
1848
- React.createElement(SurveyActionBar, { model: this.model.toolbar })),
1849
- title));
1850
- }
1851
- }
1852
- ReactElementFactory.Instance.registerElement("svc-side-bar-default-header", (props) => {
1853
- return React.createElement(SideBarDefaultHeader, props);
1854
- });
1855
-
1856
- class SideBarPropertyGridHeader extends SurveyElementBase {
1857
- get objectSelectionAction() {
1858
- return this.props.model;
1859
- }
1860
- getStateElement() {
1861
- return this.objectSelectionAction;
1862
- }
1863
- renderElement() {
1864
- const button = attachKey2click(React.createElement("div", { className: this.objectSelectionAction.buttonClassName, onClick: () => this.objectSelectionAction.action() },
1865
- React.createElement("div", { className: "svc-sidebar__header-caption" },
1866
- React.createElement("span", { className: "svc-sidebar__header-title" }, this.objectSelectionAction.title),
1867
- React.createElement("span", { className: "svc-sidebar__header-subtitle" }, this.objectSelectionAction.tooltip))), this.props.model);
1868
- return (React.createElement("div", { className: "svc-sidebar__header svc-sidebar__header--tabbed" },
1869
- React.createElement("div", { className: "svc-sidebar__header-container svc-sidebar__header-container--with-subtitle" },
1870
- React.createElement("div", { className: "svc-sidebar__header-content" },
1871
- button,
1872
- React.createElement(Popup, { model: this.objectSelectionAction.popupModel })))));
1873
- }
1874
- }
1875
- ReactElementFactory.Instance.registerElement("svc-side-bar-property-grid-header", (props) => {
1876
- return React.createElement(SideBarPropertyGridHeader, props);
1877
- });
1878
-
1879
- class SideBarHeader extends SurveyElementBase {
1880
- get model() {
1881
- return this.props.model;
1882
- }
1883
- getStateElement() {
1884
- return this.model;
1885
- }
1886
- renderElement() {
1887
- return (React.createElement("div", { className: "svc-side-bar__container-header svc-sidebar__header-container" }, (this.model.subTitle) ?
1888
- React.createElement("div", { className: "svc-sidebar__header-caption" },
1889
- React.createElement("span", { className: "svc-sidebar__header-title" }, this.model.title),
1890
- React.createElement("span", { className: "svc-sidebar__header-subtitle" }, this.model.subTitle))
1891
- : React.createElement("div", { className: "svc-side-bar__container-title" }, this.model.title)));
1892
- }
1893
- }
1894
- ReactElementFactory.Instance.registerElement("svc-side-bar-header", (props) => {
1895
- return React.createElement(SideBarHeader, props);
1896
- });
1897
-
1898
- class SidebarComponent extends SurveyElementBase {
1899
- get model() {
1900
- return this.props.model;
1901
- }
1902
- constructor(props) {
1903
- super(props);
1904
- this.containerRef = React.createRef();
1905
- }
1906
- getStateElement() {
1907
- return this.model;
1908
- }
1909
- componentDidMount() {
1910
- super.componentDidMount();
1911
- this.model.initResizeManager(this.containerRef.current);
1912
- }
1913
- componentWillUnmount() {
1914
- super.componentWillUnmount();
1915
- this.model.resetResizeManager();
1916
- }
1917
- canRender() {
1918
- if (!this.model)
1919
- return false;
1920
- return super.canRender();
1921
- }
1922
- renderElement() {
1923
- const style = { display: this.model.renderRoot ? "" : "none" };
1924
- const containerStyle = { display: this.model.renderContainer ? "" : "none" };
1925
- const items = this.model.pages.map((page) => React.createElement(SidebarPage, { page: page, key: page.id }));
1926
- const headerArea = ReactElementFactory.Instance.createElement(this.model.header.component, { model: this.model.header.componentModel });
1927
- let sideArea = null;
1928
- if (this.model.sideAreaComponentName) {
1929
- sideArea = ReactElementFactory.Instance.createElement(this.model.sideAreaComponentName, { model: this.model.sideAreaComponentData });
1930
- }
1931
- return (React.createElement("div", { className: this.model.rootCss, style: style },
1932
- React.createElement("div", { className: "svc-side-bar__shadow", onClick: () => this.model.collapseSidebar(), style: containerStyle }),
1933
- React.createElement("div", { className: "svc-flex-row svc-side-bar__wrapper" },
1934
- React.createElement("div", { className: "svc-side-bar__container-wrapper", style: containerStyle },
1935
- React.createElement("div", { ref: this.containerRef, className: "svc-side-bar__container" },
1936
- headerArea,
1937
- React.createElement("div", { className: "svc-side-bar__container-content" }, items))),
1938
- sideArea)));
1939
- }
1940
- }
1941
- class SidebarPage extends SurveyElementBase {
1942
- get page() {
1943
- return this.props.page;
1944
- }
1945
- getStateElement() {
1946
- return this.page;
1947
- }
1948
- renderElement() {
1949
- if (!this.page.visible)
1950
- return null;
1951
- const component = ReactElementFactory.Instance.createElement(this.page.componentName, { model: this.page.componentData });
1952
- return component;
1953
- }
1954
- }
1955
- ReactQuestionFactory.Instance.registerQuestion("svc-side-bar-page", (props) => {
1956
- return React.createElement(SidebarPage, props);
1957
- });
1958
- ReactElementFactory.Instance.registerElement("svc-side-bar", (props) => {
1959
- return React.createElement(SidebarComponent, props);
1960
- });
1961
-
1962
- class TranslationLineSkeleton extends React.Component {
1963
- render() {
1964
- return (React.createElement("div", { className: "sd-translation-line-skeleton" }));
1965
- }
1966
- }
1967
- ReactElementFactory.Instance.registerElement("sd-translation-line-skeleton", (props) => {
1968
- return React.createElement(TranslationLineSkeleton, props);
1969
- });
1970
-
1971
- class TranslateFromAction extends SurveyElementBase {
1972
- get item() {
1973
- return this.props.item;
1974
- }
1975
- getStateElement() {
1976
- return this.item;
1977
- }
1978
- renderElement() {
1979
- const item = this.item;
1980
- return (React.createElement("div", { className: item.data.containerCss },
1981
- React.createElement("span", { className: item.data.additionalTitleCss }, item.data.additionalTitle),
1982
- ReactElementFactory.Instance.createElement("sv-action-bar-item-dropdown", { item: this.item })));
1983
- }
1984
- }
1985
- ReactElementFactory.Instance.registerElement("svc-translate-from-action", (props) => {
1986
- return React.createElement(TranslateFromAction, props);
1987
- });
1988
-
1989
- class SurveyLocStringEditor extends CreatorModelElement {
1990
- constructor(props) {
1991
- var _a;
1992
- super(props);
1993
- this.onChangedHandler = (sender, options) => {
1994
- this.setState({ changed: !!this.state && this.state.changed ? this.state.changed + 1 : 1 });
1995
- };
1996
- this.onBlur = (event) => {
1997
- if (this.svStringEditorRef.current) {
1998
- this.svStringEditorRef.current.spellcheck = false;
1999
- }
2000
- this.locString["__isEditing"] = false;
2001
- this.justFocused = false;
2002
- this.baseModel.onBlur(event.nativeEvent);
2003
- return this.baseModel.errorText;
2004
- };
2005
- this.onCompositionStart = (event) => {
2006
- this.baseModel.onCompositionStart(event.nativeEvent);
2007
- };
2008
- this.onCompositionEnd = (event) => {
2009
- this.baseModel.onCompositionEnd(event.nativeEvent);
2010
- };
2011
- this.onBeforeInput = (event) => {
2012
- this.baseModel.onBeforeInput(event);
2013
- };
2014
- this.onInput = (event) => {
2015
- this.baseModel.onInput(event.nativeEvent);
2016
- };
2017
- this.onPaste = (event) => {
2018
- this.baseModel.onPaste(event.nativeEvent);
2019
- };
2020
- this.justFocused = false;
2021
- this.onFocus = (event) => {
2022
- this.baseModel.onFocus(event.nativeEvent);
2023
- this.justFocused = true;
2024
- };
2025
- this.onKeyDown = (event) => {
2026
- return this.baseModel.onKeyDown(event.nativeEvent);
2027
- };
2028
- this.onKeyUp = (event) => {
2029
- return this.baseModel.onKeyUp(event.nativeEvent);
2030
- };
2031
- this.onMouseUp = (event) => {
2032
- return this.baseModel.onMouseUp(event.nativeEvent);
2033
- };
2034
- this.done = (event) => {
2035
- this.baseModel.done(event);
2036
- this.locString["__isEditing"] = false;
2037
- };
2038
- this.edit = (event) => {
2039
- this.svStringEditorRef.current.focus();
2040
- // document.execCommand('selectAll', false, null);
2041
- this.locString["__isEditing"] = true;
2042
- this.baseModel.onClick(event);
2043
- };
2044
- this.htmlValue = {
2045
- __html: (_a = this.locString) === null || _a === void 0 ? void 0 : _a.renderedHtml
2046
- };
2047
- this.state = { changed: 0 };
2048
- this.svStringEditorRef = React.createRef();
2049
- }
2050
- createModel(props) {
2051
- if (this.baseModel) {
2052
- this.baseModel.dispose();
2053
- }
2054
- this.baseModel = new StringEditorViewModelBase(this.locString, this.creator);
2055
- }
2056
- getUpdatedModelProps() {
2057
- return ["creator", "locString"];
2058
- }
2059
- get locString() {
2060
- return this.props.model.locStr;
2061
- }
2062
- get creator() {
2063
- return this.props.model.creator;
2064
- }
2065
- get style() {
2066
- return this.props.style;
2067
- }
2068
- getStateElement() {
2069
- return this.baseModel;
2070
- }
2071
- get errorText() {
2072
- return this.baseModel.errorText;
2073
- }
2074
- componentDidMount() {
2075
- super.componentDidMount();
2076
- if (!this.locString)
2077
- return;
2078
- this.baseModel.setLocString(this.locString);
2079
- this.baseModel.getEditorElement = () => this.svStringEditorRef.current;
2080
- this.baseModel.blurEditor = () => {
2081
- this.svStringEditorRef.current.blur();
2082
- this.svStringEditorRef.current.spellcheck = false;
2083
- };
2084
- this.baseModel.afterRender();
2085
- this.locString.onStringChanged.add(this.onChangedHandler);
2086
- if (this.locString["__isEditing"]) {
2087
- this.svStringEditorRef.current.focus();
2088
- // document.execCommand('selectAll', false, null);
2089
- }
2090
- }
2091
- componentDidUpdate(prevProps, prevState) {
2092
- super.componentDidUpdate(prevProps, prevState);
2093
- this.baseModel.setLocString(this.locString);
2094
- this.baseModel.afterRender();
2095
- this.locString.onStringChanged.add(this.onChangedHandler);
2096
- }
2097
- componentWillUnmount() {
2098
- super.componentWillUnmount();
2099
- this.baseModel.detachFromUI();
2100
- if (!this.locString)
2101
- return;
2102
- this.locString.onStringChanged.remove(this.onChangedHandler);
2103
- }
2104
- get placeholder() {
2105
- return this.baseModel.placeholder;
2106
- }
2107
- get contentEditable() {
2108
- return this.baseModel.contentEditable;
2109
- }
2110
- get className() {
2111
- return this.baseModel.className(this.locString.renderedHtml);
2112
- }
2113
- render() {
2114
- if (!this.locString) {
2115
- return null;
2116
- }
2117
- let control = null;
2118
- if (this.locString.hasHtml) {
2119
- if (this.htmlValue.__html !== this.locString.renderedHtml) {
2120
- this.htmlValue = { __html: this.locString.renderedHtml };
2121
- }
2122
- control = (React.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor sv-string-editor--html", contentEditable: this.contentEditable, spellCheck: false, "aria-placeholder": this.placeholder, "aria-label": this.placeholder || "content editable", suppressContentEditableWarning: true, tabIndex: this.baseModel.tabIndex,
2123
- // style={this.style}
2124
- dangerouslySetInnerHTML: this.htmlValue, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, onMouseUp: this.onMouseUp, onClick: this.edit }));
2125
- }
2126
- else {
2127
- control = (React.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor", contentEditable: this.contentEditable, tabIndex: this.baseModel.tabIndex, spellCheck: false, "aria-placeholder": this.placeholder, "aria-label": this.placeholder || "content editable", suppressContentEditableWarning: true,
2128
- // style={this.style}
2129
- key: this.locString.renderedHtml, onBlur: this.onBlur, onBeforeInput: this.onBeforeInput, onInput: this.onInput, onPaste: this.onPaste, onCompositionStart: this.onCompositionStart, onCompositionEnd: this.onCompositionEnd, onFocus: this.onFocus, onKeyDown: this.onKeyDown, onKeyUp: this.onKeyUp, onMouseUp: this.onMouseUp, onClick: this.edit }, this.locString.renderedHtml));
2130
- }
2131
- const counter = this.baseModel.showCharacterCounter ? (React.createElement(CharacterCounterComponent, { counter: this.baseModel.characterCounter, remainingCharacterCounter: this.baseModel.getCharacterCounterClass })) : null;
2132
- return (React.createElement("span", { className: this.className },
2133
- React.createElement("span", { className: "svc-string-editor__content" },
2134
- React.createElement("div", { className: "svc-string-editor__border svc-string-editor__border--hover", onClick: this.edit }),
2135
- React.createElement("div", { className: "svc-string-editor__border svc-string-editor__border--focus", onClick: this.edit }),
2136
- React.createElement("span", { className: "svc-string-editor__input" },
2137
- control,
2138
- React.createElement("div", { className: "svc-string-editor__controls", onClick: this.edit }),
2139
- counter)),
2140
- this.errorText ? React.createElement("span", { className: "svc-string-editor__error" }, this.errorText) : ""));
2141
- }
2142
- }
2143
- ReactElementFactory.Instance.registerElement(editableStringRendererName, (props) => {
2144
- return React.createElement(SurveyLocStringEditor, props);
2145
- });
2146
-
2147
- class QuestionErrorComponent extends React.Component {
2148
- render() {
2149
- return (React.createElement("div", null,
2150
- React.createElement(SvgIcon, { "aria-hidden": "true", iconName: "icon-alert_24x24", size: "24", className: this.props.cssClasses.error.icon }),
2151
- React.createElement("span", { className: this.props.cssClasses.error.item || undefined },
2152
- React.createElement(SurveyLocStringViewer, { model: this.props.error.locText }))));
2153
- }
2154
- }
2155
- ReactElementFactory.Instance.registerElement("svc-question-error", (props) => {
2156
- return React.createElement(QuestionErrorComponent, props);
2157
- });
2158
-
2159
- class SurveyLogicOpertor extends SurveyQuestionDropdown {
2160
- constructor(props) {
2161
- super(props);
2162
- }
2163
- renderInput() {
2164
- const q = this.question;
2165
- initLogicOperator(q);
2166
- const text = (q.locReadOnlyText) ? this.renderLocString(q.locReadOnlyText) : "";
2167
- const dropdownListModel = this.question.dropdownListModel;
2168
- return (React.createElement("div", { id: this.question.inputId, className: q.getControlClass(), tabIndex: this.question.isInputReadOnly ? undefined : 0,
2169
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2170
- // @ts-ignore
2171
- disabled: this.question.isInputReadOnly, required: this.question.isRequired, onChange: this.updateValueOnEvent, onInput: this.updateValueOnEvent, onKeyUp: this.keyhandler, role: dropdownListModel.ariaQuestionRole, "aria-required": dropdownListModel.ariaQuestionRequired, "aria-invalid": dropdownListModel.ariaQuestionInvalid, "aria-errormessage": dropdownListModel.ariaQuestionErrorMessage, "aria-expanded": dropdownListModel.ariaQuestionExpanded, "aria-label": dropdownListModel.ariaQuestionLabel, "aria-labelledby": dropdownListModel.ariaQuestionLabelledby, "aria-controls": dropdownListModel.ariaQuestionControls },
2172
- React.createElement("div", { className: this.question.cssClasses.controlValue }, text)));
2173
- }
2174
- renderEditorButtons() {
2175
- return null;
2176
- }
2177
- }
2178
- ReactQuestionFactory.Instance.registerQuestion("sv-logic-operator", (props) => {
2179
- return React.createElement(SurveyLogicOpertor, props);
2180
- });
2181
- RendererFactory.Instance.registerRenderer("dropdown", "logicoperator", "sv-logic-operator");
2182
-
2183
- class SurveyPageNavigator extends CreatorModelElement {
2184
- constructor(props) {
2185
- super(props);
2186
- this.containerRef = React.createRef();
2187
- }
2188
- createModel(props) {
2189
- if (this.model) {
2190
- this.model.dispose();
2191
- }
2192
- this.model = new PageNavigatorViewModel(props.pagesController, props.pageEditMode);
2193
- }
2194
- getUpdatedModelProps() {
2195
- return ["pagesController", "pageEditMode"];
2196
- }
2197
- getStateElement() {
2198
- return this.model;
2199
- }
2200
- componentDidMount() {
2201
- super.componentDidMount();
2202
- if (this.props.pageEditMode !== "bypage") {
2203
- const el = this.containerRef.current;
2204
- this.model.attachToUI(el);
2205
- }
2206
- }
2207
- componentWillUnmount() {
2208
- super.componentWillUnmount();
2209
- this.model.stopItemsContainerHeightObserver();
2210
- this.model.setScrollableContainer(undefined);
2211
- }
2212
- renderElement() {
2213
- let className = "svc-page-navigator__selector svc-page-navigator__button";
2214
- if (this.model.isPopupOpened)
2215
- className += " svc-page-navigator__button--pressed";
2216
- return (React.createElement("div", { className: "svc-page-navigator", ref: this.containerRef, style: { display: this.model.visible ? "flex" : "none" } },
2217
- React.createElement("div", null,
2218
- attachKey2click(React.createElement("div", { role: "button", className: className, onClick: () => this.model.togglePageSelector(), title: this.model.pageSelectorCaption },
2219
- React.createElement(SvgIcon, { className: "svc-page-navigator__button-icon", iconName: this.model.icon, size: "auto", title: this.model.pageSelectorCaption }))),
2220
- React.createElement(Popup, { model: this.model.popupModel })),
2221
- React.createElement("div", null, this.model.visibleItems.map((item) => (React.createElement(SurveyPageNavigatorItem, { key: item.id, item: item }))))));
2222
- }
2223
- }
2224
- class SurveyPageNavigatorItem extends CreatorModelElement {
2225
- getStateElement() {
2226
- return this.props.item;
2227
- }
2228
- renderElement() {
2229
- const item = this.props.item;
2230
- let className = "svc-page-navigator-item-content";
2231
- if (unwrap(item.active)) {
2232
- className += " svc-page-navigator-item--selected";
2233
- }
2234
- if (unwrap(item.disabled)) {
2235
- className += " svc-page-navigator-item--disabled";
2236
- }
2237
- return (React.createElement("div", { className: "svc-page-navigator-item" }, attachKey2click(React.createElement("div", { role: "button", className: className, onClick: (e) => {
2238
- item.action(item);
2239
- e.stopPropagation();
2240
- } },
2241
- React.createElement("div", { className: "svc-page-navigator-item__dot", title: item.title },
2242
- React.createElement("div", { className: "svc-page-navigator-item__dot-content" })),
2243
- React.createElement("div", { className: "svc-page-navigator-item__banner" },
2244
- React.createElement("span", { className: "svc-page-navigator-item__text" }, item.title),
2245
- React.createElement("span", { className: "svc-page-navigator-item__dot" },
2246
- React.createElement("span", { className: "svc-page-navigator-item__dot-content" })))))));
2247
- }
2248
- }
2249
-
2250
- class SurfacePlaceholder extends React.Component {
2251
- constructor(props) {
2252
- super(props);
2253
- }
2254
- render() {
2255
- return (React.createElement("div", { className: "svc-surface-placeholder" },
2256
- React.createElement("div", { className: "svc-surface-placeholder__image svc-surface-placeholder__image--" + this.props.name }),
2257
- React.createElement("div", { className: "svc-surface-placeholder__text" },
2258
- React.createElement("div", { className: "svc-surface-placeholder__title" }, this.props.placeholderTitleText),
2259
- React.createElement("div", { className: "svc-surface-placeholder__description" }, this.props.placeholderDescriptionText))));
2260
- }
2261
- }
2262
- ReactElementFactory.Instance.registerElement("svc-surface-placeholder", (props) => {
2263
- return React.createElement(SurfacePlaceholder, props);
2264
- });
2265
-
2266
- class TabDesignerComponent extends SurveyElementBase {
2267
- constructor() {
2268
- super(...arguments);
2269
- this.denyUpdate = () => {
2270
- this.denyComponentUpdate();
2271
- };
2272
- this.allowUpdate = () => {
2273
- this.allowComponentUpdate();
2274
- };
2275
- this.addDragDropEvents = () => {
2276
- this.creator.onDragStart.add(this.denyUpdate);
2277
- this.creator.onDragClear.add(this.allowUpdate);
2278
- };
2279
- this.clearDragDropEvents = () => {
2280
- this.creator.onDragStart.remove(this.denyUpdate);
2281
- this.creator.onDragClear.remove(this.allowUpdate);
2282
- };
2283
- }
2284
- get model() {
2285
- return this.props.data;
2286
- }
2287
- get creator() {
2288
- return this.model.creator;
2289
- }
2290
- componentDidMount() {
2291
- super.componentDidMount();
2292
- this.addDragDropEvents();
2293
- }
2294
- componentWillUnmount() {
2295
- super.componentWillUnmount();
2296
- this.clearDragDropEvents();
2297
- super.componentWillUnmount();
2298
- }
2299
- getStateElements() {
2300
- return [this.model, this.model.survey, this.model.pagesController];
2301
- }
2302
- getRenderedPages() {
2303
- const renderedPages = [];
2304
- if (this.creator.pageEditMode !== "bypage") {
2305
- const pages = this.model.pages;
2306
- pages.forEach((page) => {
2307
- renderedPages.push(this.createRenderedPage(page, "svc-page", page == this.model.newPage));
2308
- });
2309
- }
2310
- else {
2311
- const page2Display = this.model.pagesController.page2Display;
2312
- if (!!page2Display) {
2313
- renderedPages.push(this.createRenderedPage(page2Display, "svc-page", this.model.newPage === page2Display));
2314
- }
2315
- }
2316
- return renderedPages;
2317
- }
2318
- createRenderedPage(page, className, isGhostPage) {
2319
- return React.createElement(PageWrapperComponent, { key: page === null || page === void 0 ? void 0 : page.id, page: page, isGhost: isGhostPage, creator: this.creator, className: className });
2320
- }
2321
- renderElement() {
2322
- const designerTabClassName = "svc-tab-designer " + this.model.getRootCss();
2323
- return (React.createElement(React.Fragment, null,
2324
- React.createElement("div", { className: "svc-flex-column" }, this.model.isToolboxVisible ? ReactElementFactory.Instance.createElement("svc-toolbox", { model: this.creator }) : null),
2325
- React.createElement("div", { className: designerTabClassName, onClick: () => this.model.clickDesigner() },
2326
- React.createElement(Scroll, null,
2327
- React.createElement("div", { className: "svc-tab-designer_content" }, this.model.showPlaceholder ? this.renderPlaceHolder() : this.renderTabContent())))));
2328
- }
2329
- renderHeader(condition) {
2330
- if (!condition)
2331
- return null;
2332
- const survey = this.creator.survey;
2333
- return (React.createElement(React.Fragment, null,
2334
- React.createElement("div", { className: "svc-designer-header" },
2335
- React.createElement(SurveyHeader, { survey: survey }))));
2336
- }
2337
- renderPlaceHolder() {
2338
- const surveyHeader = this.renderHeader(this.creator.showSurveyHeader && this.creator.showHeaderInEmptySurvey);
2339
- return (React.createElement(React.Fragment, null,
2340
- surveyHeader,
2341
- React.createElement("div", { className: "svc-designer__placeholder-container", "data-sv-drop-target-survey-element": "newGhostPage" },
2342
- this.renderPlaceHolderContent(),
2343
- this.createRenderedPage(this.model.newPage, "svc-designer-placeholder-page", true))));
2344
- }
2345
- renderPlaceHolderContent() {
2346
- return React.createElement(SurfacePlaceholder, { name: "designer", placeholderTitleText: this.model.placeholderTitleText, placeholderDescriptionText: this.model.placeholderDescriptionText });
2347
- }
2348
- renderTabContent() {
2349
- const survey = this.creator.survey;
2350
- const surveyHeader = this.renderHeader(this.creator.showSurveyHeader);
2351
- const style = Object.assign({}, this.model.surfaceCssVariables);
2352
- style.maxWidth = survey.renderedWidth;
2353
- const tabTools = this.renderTabTools();
2354
- return (React.createElement(React.Fragment, null,
2355
- React.createElement("div", { className: this.model.designerCss, style: style },
2356
- surveyHeader,
2357
- this.getRenderedPages()),
2358
- tabTools));
2359
- }
2360
- renderTabTools() {
2361
- if (!this.model.showSurfaceTools)
2362
- return null;
2363
- const pageNavigator = this.creator.showPageNavigator ?
2364
- React.createElement("div", { className: "svc-tab-designer__page-navigator" },
2365
- React.createElement(SurveyPageNavigator, { pagesController: this.model.pagesController, pageEditMode: this.model.creator.pageEditMode }))
2366
- : null;
2367
- const surfaceToolbar = this.model.showSurfaceToolbar ?
2368
- React.createElement(SurveyActionBar, { model: this.model.surfaceToolbar, handleClick: false })
2369
- : null;
2370
- return React.createElement("div", { className: "svc-tab-designer__tools" },
2371
- pageNavigator,
2372
- surfaceToolbar);
2373
- }
2374
- }
2375
- ReactElementFactory.Instance.registerElement("svc-tab-designer", (props) => {
2376
- return React.createElement(TabDesignerComponent, props);
2377
- });
2378
- class PageWrapperComponent extends React.Component {
2379
- constructor(props) {
2380
- super(props);
2381
- this.id = `PageWrapperCallback_${++PageWrapperComponent.ID}`;
2382
- this.state = { changed: 0 };
2383
- }
2384
- render() {
2385
- var _a, _b;
2386
- const pageContent = !!this.props.page ? ReactElementFactory.Instance.createElement("svc-page", { survey: this.props.creator.survey, page: this.props.page, creator: this.props.creator, isGhost: this.props.isGhost }) : null;
2387
- return React.createElement("div", { className: this.props.className, "data-sv-drop-target-page": (_a = this.props.page) === null || _a === void 0 ? void 0 : _a.name, "data-sv-drop-target-survey-element": this.props.isGhost ? "newGhostPage" : (_b = this.props.page) === null || _b === void 0 ? void 0 : _b.name }, pageContent);
2388
- }
2389
- setupCallback(page) {
2390
- if (!page)
2391
- return;
2392
- page.registerFunctionOnPropertyValueChanged("name", () => {
2393
- this.setState({ changed: !!this.state && this.state.changed ? this.state.changed + 1 : 1 });
2394
- }, this.id);
2395
- }
2396
- clearCallback(page) {
2397
- if (!page)
2398
- return;
2399
- page.unRegisterFunctionOnPropertyValueChanged("name");
2400
- }
2401
- componentDidUpdate(prevProps, prevState) {
2402
- if (prevProps.page !== this.props.page) {
2403
- this.clearCallback(prevProps.page);
2404
- this.setupCallback(this.props.page);
2405
- }
2406
- }
2407
- componentDidMount() {
2408
- this.setupCallback(this.props.page);
2409
- }
2410
- componentWillUnmount() {
2411
- this.clearCallback(this.props.page);
2412
- }
2413
- }
2414
- PageWrapperComponent.ID = 0;
2415
-
2416
- class TabJsonEditorErrorsComponent extends SurveyElementBase {
2417
- getStateElement() {
2418
- return this.model;
2419
- }
2420
- get model() {
2421
- return this.props.data;
2422
- }
2423
- renderElement() {
2424
- return React.createElement("div", { className: "svc-json-editor-tab__errros_list", style: { display: this.model.hasErrors ? "block" : "none" } },
2425
- React.createElement(List, { model: this.model.errorList }));
2426
- }
2427
- }
2428
- class TabJsonEditorTextareaComponent extends SurveyElementBase {
2429
- constructor(props) {
2430
- super(props);
2431
- }
2432
- getStateElement() {
2433
- return this.model;
2434
- }
2435
- get model() {
2436
- return this.props.data;
2437
- }
2438
- renderElement() {
2439
- const setControl = (el) => {
2440
- this.model.textElement = el;
2441
- };
2442
- const errors = React.createElement(TabJsonEditorErrorsComponent, { data: this.model });
2443
- return (React.createElement("div", { className: "svc-creator-tab__content" },
2444
- React.createElement("div", { className: "svc-json-editor-tab__content" },
2445
- React.createElement("textarea", { ref: input => (setControl(input)), className: "svc-json-editor-tab__content-area", value: this.model.text, onChange: (e) => (this.model.text = e.target.value), onKeyDown: (e) => this.model.checkKey(e, e), disabled: this.model.readOnly, "aria-label": this.model.ariaLabel }),
2446
- errors)));
2447
- }
2448
- }
2449
- ReactElementFactory.Instance.registerElement("svc-tab-json-editor-textarea", (props) => {
2450
- return React.createElement(TabJsonEditorTextareaComponent, props);
2451
- });
2452
-
2453
- class TabJsonEditorAceComponent extends SurveyElementBase {
2454
- constructor(props) {
2455
- super(props);
2456
- this.aceEditorrRef = React.createRef();
2457
- }
2458
- getStateElement() {
2459
- return this.model;
2460
- }
2461
- get model() {
2462
- return this.props.data;
2463
- }
2464
- componentDidMount() {
2465
- this.model.init(ace.edit(this.aceEditorrRef.current));
2466
- }
2467
- renderElement() {
2468
- const errors = React.createElement(TabJsonEditorErrorsComponent, { data: this.model });
2469
- return (React.createElement("div", { className: "svc-creator-tab__content" },
2470
- React.createElement("div", { className: "svc-json-editor-tab__content" },
2471
- React.createElement("div", { className: "svc-json-editor-tab__ace-editor", ref: this.aceEditorrRef }),
2472
- errors)));
2473
- }
2474
- }
2475
- ReactElementFactory.Instance.registerElement("svc-tab-json-editor-ace", (props) => {
2476
- return React.createElement(TabJsonEditorAceComponent, props);
2477
- });
2478
-
2479
- class TabLogicAddButtonComponent extends SurveyElementBase {
2480
- get model() {
2481
- return this.props.button;
2482
- }
2483
- getStateElement() {
2484
- return this.model;
2485
- }
2486
- renderElement() {
2487
- const buttonClassName = "svc-logic-tab__content-action svc-btn" + ((this.model.enabled !== undefined && !this.model.enabled) ? " svc-logic-tab__content-action--disabled" : "");
2488
- return attachKey2click(React.createElement("div", { role: "button", onClick: (e) => {
2489
- e.stopPropagation();
2490
- this.model.action();
2491
- }, className: buttonClassName, title: this.model.title },
2492
- React.createElement("span", { className: "svc-btn__text" }, this.model.title)));
2493
- }
2494
- }
2495
- ReactElementFactory.Instance.registerElement("svc-tab-logic-add-button", (props) => {
2496
- return React.createElement(TabLogicAddButtonComponent, props);
2497
- });
2498
- class TabLogicComponent extends SurveyElementBase {
2499
- get model() {
2500
- return this.props.data;
2501
- }
2502
- getStateElement() {
2503
- return this.model;
2504
- }
2505
- renderElement() {
2506
- this.model;
2507
- var rootClass = "svc-creator-tab__content svc-logic-tab";
2508
- var content = this.renderViewContent();
2509
- return React.createElement("div", { className: rootClass }, content);
2510
- }
2511
- renderViewContent() {
2512
- const logicTabClassName = "svc-plugin-tab__content svc-logic-tab svc-logic-tab__content " + (this.model.hasItems ? "" : "svc-logic-tab--empty");
2513
- const addLogic = !this.model.readOnly ? React.createElement(TabLogicAddButtonComponent, { button: this.model.addNewButton }) : undefined;
2514
- return (React.createElement(Fragment, null,
2515
- React.createElement("div", { className: logicTabClassName }, this.model.hasItems ?
2516
- (React.createElement(React.Fragment, null,
2517
- React.createElement(Survey, { model: this.model.itemsSurvey }),
2518
- addLogic))
2519
- : (React.createElement("div", { className: "svc-logic-tab__content-empty" },
2520
- React.createElement(SurfacePlaceholder, { name: "logic", placeholderTitleText: this.model.placeholderTitleText, placeholderDescriptionText: this.model.placeholderDescriptionText }),
2521
- addLogic)))));
2522
- }
2523
- }
2524
- ReactElementFactory.Instance.registerElement("svc-tab-logic", (props) => {
2525
- return React.createElement(TabLogicComponent, props);
2526
- });
2527
-
2528
- class SurveySimulator extends SurveyElementBase {
2529
- get model() {
2530
- return this.props.model;
2531
- }
2532
- getStateElement() {
2533
- return this.model;
2534
- }
2535
- renderElement() {
2536
- const mainSimulatorClass = this.model.getRootCss();
2537
- if (!this.model.survey) {
2538
- return React.createElement("div", { className: mainSimulatorClass });
2539
- }
2540
- if (this.model.hasFrame) {
2541
- return (React.createElement("div", { className: mainSimulatorClass, onKeyDown: e => this.model.tryToZoom(e, e), onMouseEnter: this.model.device === "desktop" ? null : this.model.activateZoom, onMouseLeave: this.model.device === "desktop" ? null : this.model.deactivateZoom },
2542
- React.createElement("div", { className: "svd-simulator-wrapper", id: "svd-simulator-wrapper", style: {
2543
- width: this.model.simulatorFrame.frameWidth + "px",
2544
- height: this.model.simulatorFrame.frameHeight + "px"
2545
- } },
2546
- React.createElement("div", { className: "svd-simulator", style: {
2547
- width: this.model.simulatorFrame.deviceWidth + "px",
2548
- height: this.model.simulatorFrame.deviceHeight + "px",
2549
- transform: "scale(" +
2550
- this.model.simulatorFrame.scale +
2551
- ") translate(-50%, -50%)"
2552
- } },
2553
- React.createElement("div", { className: "svd-simulator-content" },
2554
- React.createElement(Survey, { model: this.model.survey }))))));
2555
- }
2556
- else {
2557
- return (React.createElement("div", { className: mainSimulatorClass },
2558
- React.createElement("div", { className: "svd-simulator-content" },
2559
- React.createElement(Survey, { model: this.model.survey }))));
2560
- }
2561
- }
2562
- }
2563
-
2564
- class TabPreviewTestSurveyAgainComponent extends SurveyElementBase {
2565
- get model() {
2566
- return this.props.model.testAgainAction;
2567
- }
2568
- getStateElement() {
2569
- return this.model;
2570
- }
2571
- renderElement() {
2572
- const buttonClassName = "svc-preview__test-again svc-btn";
2573
- return attachKey2click(React.createElement("div", { role: "button", onClick: (e) => {
2574
- e.stopPropagation();
2575
- this.model.action();
2576
- }, className: buttonClassName, title: this.model.title },
2577
- React.createElement("span", { className: "svc-btn__text" }, this.model.title)));
2578
- }
2579
- }
2580
- ReactElementFactory.Instance.registerElement("svc-complete-page", (props) => {
2581
- return React.createElement(TabPreviewTestSurveyAgainComponent, props);
2582
- });
2583
- class TabPreviewSurveyComponent extends SurveyElementBase {
2584
- constructor(props) {
2585
- super(props);
2586
- }
2587
- get model() {
2588
- return this.props.data;
2589
- }
2590
- getStateElement() {
2591
- return this.model;
2592
- }
2593
- renderPlaceholder() {
2594
- return React.createElement(SurfacePlaceholder, { name: "preview", placeholderTitleText: this.model.placeholderTitleText, placeholderDescriptionText: this.model.placeholderDescriptionText });
2595
- }
2596
- renderSimulator() {
2597
- return (React.createElement("div", { className: "svc-plugin-tab__content" },
2598
- React.createElement(SurveySimulator, { model: this.model.simulator }),
2599
- this.model.showResults ? React.createElement(SurveyResults, { survey: this.model.simulator.survey }) : null));
2600
- }
2601
- renderElement() {
2602
- const tabContentClassName = "svc-creator-tab__content svc-test-tab__content" + (this.model.isPageToolbarVisible ? " svc-creator-tab__content--with-toolbar" : "");
2603
- return (React.createElement("div", { className: tabContentClassName },
2604
- this.model.simulator.survey.isEmpty ? this.renderPlaceholder() : this.renderSimulator(),
2605
- this.getBottomToolbar()));
2606
- }
2607
- getBottomToolbar() {
2608
- if (this.model.isPageToolbarVisible) {
2609
- return (React.createElement("div", { className: "svc-test-tab__content-actions" },
2610
- React.createElement(SurveyActionBar, { model: this.model.pages })));
2611
- }
2612
- else {
2613
- return null;
2614
- }
2615
- }
2616
- }
2617
- ReactElementFactory.Instance.registerElement("svc-tab-preview", (props) => {
2618
- return React.createElement(TabPreviewSurveyComponent, props);
2619
- });
2620
-
2621
- class PropertyGridPlaceholderComponent extends React.Component {
2622
- render() {
2623
- return (React.createElement("div", { className: "svc-property-grid-placeholder" },
2624
- React.createElement("div", { className: "svc-property-grid-placeholder__header" },
2625
- React.createElement("span", { className: "svc-property-grid-placeholder__title" }, editorLocalization.getString("ed.propertyGridPlaceholderTitle")),
2626
- React.createElement("span", { className: "svc-property-grid-placeholder__description" }, editorLocalization.getString("ed.propertyGridPlaceholderDescription"))),
2627
- React.createElement("div", { className: "svc-property-grid-placeholder__content" },
2628
- React.createElement("div", { className: "svc-property-grid-placeholder__gap" }),
2629
- React.createElement("div", { className: "svc-property-grid-placeholder__image" }))));
2630
- }
2631
- }
2632
- ReactElementFactory.Instance.registerElement("svc-property-grid-placeholder", (props) => {
2633
- return React.createElement(PropertyGridPlaceholderComponent, props);
2634
- });
2635
-
2636
- class TabThemeSurveyComponent extends SurveyElementBase {
2637
- get model() {
2638
- return this.props.data;
2639
- }
2640
- getStateElement() {
2641
- return this.model;
2642
- }
2643
- renderPlaceholder() {
2644
- return React.createElement(SurfacePlaceholder, { name: "theme", placeholderTitleText: this.model.placeholderTitleText, placeholderDescriptionText: this.model.placeholderDescriptionText });
2645
- }
2646
- renderSimulator() {
2647
- return (React.createElement("div", { className: "svc-plugin-tab__content" },
2648
- React.createElement(SurveySimulator, { model: this.model.simulator }),
2649
- this.model.showResults ? React.createElement(SurveyResults, { survey: this.model.simulator.survey }) : null));
2650
- }
2651
- renderElement() {
2652
- const tabContentClassName = "svc-creator-tab__content svc-test-tab__content" + (this.model.isPageToolbarVisible ? " svc-creator-tab__content--with-toolbar" : "");
2653
- return (React.createElement("div", { className: tabContentClassName },
2654
- this.model.simulator.survey.isEmpty ? this.renderPlaceholder() : this.renderSimulator(),
2655
- this.getBottomToolbar()));
2656
- }
2657
- getBottomToolbar() {
2658
- if (this.model.isPageToolbarVisible) {
2659
- return (React.createElement("div", { className: "svc-test-tab__content-actions" },
2660
- React.createElement(SurveyActionBar, { model: this.model.pages })));
2661
- }
2662
- else {
2663
- return null;
2664
- }
2665
- }
2666
- }
2667
- ReactElementFactory.Instance.registerElement("svc-tab-theme", (props) => {
2668
- return React.createElement(TabThemeSurveyComponent, props);
2669
- });
2670
-
2671
- class TabTranslationComponent extends SurveyElementBase {
2672
- get model() {
2673
- return this.props.data || this.props.model;
2674
- }
2675
- getStateElement() {
2676
- return this.model;
2677
- }
2678
- renderElement() {
2679
- if (!this.model)
2680
- return null;
2681
- return (React.createElement("div", { className: "svc-creator-tab__content svc-translation-tab" + (this.model.isEmpty ? " svc-translation-tab--empty" : "") }, this.renderElementContent()));
2682
- }
2683
- renderElementContent() {
2684
- if (this.model.isEmpty) {
2685
- return React.createElement(SurfacePlaceholder, { name: "translation", placeholderTitleText: this.model.placeholderTitleText, placeholderDescriptionText: this.model.placeholderDescriptionText });
2686
- }
2687
- else {
2688
- return (React.createElement("div", { className: "st-content" },
2689
- React.createElement("div", { className: "svc-flex-column st-strings-wrapper" },
2690
- React.createElement("div", { className: "svc-flex-row st-strings-header" },
2691
- React.createElement(Survey, { model: this.model.stringsHeaderSurvey })),
2692
- React.createElement("div", { className: "svc-flex-row svc-plugin-tab__content st-strings" },
2693
- React.createElement(Survey, { model: this.model.stringsSurvey })))));
2694
- }
2695
- }
2696
- }
2697
- ReactElementFactory.Instance.registerElement("svc-tab-translation", (props) => {
2698
- return React.createElement(TabTranslationComponent, props);
2699
- });
2700
-
2701
- class ObjectSelectorComponent extends SurveyElementBase {
2702
- get model() {
2703
- return this.props.model;
2704
- }
2705
- getStateElement() {
2706
- return this.model;
2707
- }
2708
- renderElement() {
2709
- if (!this.model.isVisible)
2710
- return null;
2711
- return (React.createElement(List, { model: this.model.list }));
2712
- }
2713
- }
2714
- ReactElementFactory.Instance.registerElement("svc-object-selector", (props) => {
2715
- return React.createElement(ObjectSelectorComponent, props);
2716
- });
2717
-
2718
- class PropertyGridComponent extends SurveyElementBase {
2719
- get model() {
2720
- return this.props.model;
2721
- }
2722
- getStateElement() {
2723
- return this.model;
2724
- }
2725
- canRender() {
2726
- if (!this.model)
2727
- return false;
2728
- return super.canRender();
2729
- }
2730
- renderElement() {
2731
- return (React.createElement("div", { className: this.model.rootCss },
2732
- React.createElement(SearchComponent, { model: this.model.searchManager }),
2733
- React.createElement(Survey, { model: this.model.survey })));
2734
- }
2735
- }
2736
- ReactElementFactory.Instance.registerElement("svc-property-grid", (props) => {
2737
- return React.createElement(PropertyGridComponent, props);
2738
- });
2739
-
2740
- class ComponentContainer extends React.Component {
2741
- constructor(props) {
2742
- super(props);
2743
- }
2744
- render() {
2745
- return (React.createElement("div", { className: this.props.model.cssClass }, this.props.model.elements.map((element, index) => {
2746
- return ReactElementFactory.Instance.createElement(element.componentName, Object.assign(Object.assign({}, element.componentData), { key: index }));
2747
- })));
2748
- }
2749
- }
2750
- ReactElementFactory.Instance.registerElement("svc-component-container", (props) => {
2751
- return React.createElement(ComponentContainer, props);
2752
- });
2753
-
2754
- class SwitcherComponent extends SurveyElementBase {
2755
- get item() {
2756
- return this.props.item;
2757
- }
2758
- getStateElement() {
2759
- return this.item;
2760
- }
2761
- renderElement() {
2762
- const tooltip = this.item.tooltip || this.item.title;
2763
- const title = this.item.hasTitle ? React.createElement("span", { className: "svc-switcher__title" }, this.item.title) : null;
2764
- const button = attachKey2click(React.createElement("button", { className: this.item.getActionBarItemCss(), type: "button", disabled: this.item.disabled, onClick: (args) => this.item.action(this.item, this.item.getIsTrusted(args)), title: tooltip, "aria-checked": this.item.ariaChecked, "aria-expanded": this.item.ariaExpanded, role: this.item.ariaRole },
2765
- React.createElement("div", { className: this.item.getSwitcherIconCss() },
2766
- React.createElement("div", { className: "svc-switcher__icon-thumb" })),
2767
- title), this.item, { processEsc: false });
2768
- return button;
2769
- }
2770
- }
2771
- ReactElementFactory.Instance.registerElement("svc-switcher", (props) => {
2772
- return React.createElement(SwitcherComponent, props);
2773
- });
2774
-
2775
- let ItemTemplateComponent$1 = class ItemTemplateComponent extends SurveyElementBase {
2776
- render() {
2777
- const item = this.props.item;
2778
- return (React.createElement(React.Fragment, null,
2779
- React.createElement(SvgIcon, { iconName: item.iconName, size: item.iconSize, className: "svc-json-error__icon" }),
2780
- React.createElement("div", { className: "svc-json-error__container" },
2781
- React.createElement("div", { className: "svc-json-error__title" },
2782
- React.createElement("span", { key: 2 }, this.renderLocString(item.locTitle, undefined, "locString"))),
2783
- this.renderFixButton())));
2784
- }
2785
- renderFixButton() {
2786
- if (!this.props.item.data.showFixButton)
2787
- return null;
2788
- const item = this.props.item;
2789
- return (attachKey2click(React.createElement("button", { type: "button", onClick: (event) => { event.stopPropagation(); item.data.fixError(); }, title: item.data.fixButtonTitle, className: "svc-json-error__fix-button" },
2790
- React.createElement(SvgIcon, { iconName: item.data.fixButtonIcon, size: "auto" }))));
2791
- }
2792
- };
2793
- ReactElementFactory.Instance.registerElement("json-error-item", (props) => {
2794
- return React.createElement(ItemTemplateComponent$1, props);
2795
- });
2796
-
2797
- class SurveyQuestionSpinEditor extends SurveyQuestionText {
2798
- constructor(props) {
2799
- super(props);
2800
- }
2801
- get question() {
2802
- return this.questionBase;
2803
- }
2804
- renderInput() {
2805
- return (React.createElement(React.Fragment, null,
2806
- React.createElement("input", { role: "spinbutton", id: this.question.inputId, disabled: this.isDisplayMode, className: this.question.cssClasses.control, ref: (input) => (this.setControl(input)), placeholder: this.question.renderedPlaceholder, autoComplete: "off", onBlur: (event) => this.question.onBlur(event.nativeEvent), onFocus: (event) => this.question.onFocus(event.nativeEvent), onChange: this.question.onChange, onBeforeInput: event => this.question.onBeforeInput(event.nativeEvent), onKeyUp: (event) => this.question.onKeyUp(event.nativeEvent), onKeyDown: (event) => this.question.onInputKeyDown(event.nativeEvent), "aria-required": this.question.a11y_input_ariaRequired, "aria-label": this.question.a11y_input_ariaLabel, "aria-labelledby": this.question.a11y_input_ariaLabelledBy, "aria-describedby": this.question.a11y_input_ariaDescribedBy, "aria-invalid": this.question.a11y_input_ariaInvalid, "aria-errormessage": this.question.a11y_input_ariaErrormessage })));
2807
- }
2808
- renderElement() {
2809
- return (React.createElement("div", { className: this.question.cssClasses.root, onKeyDown: event => this.question.onKeyDown(event.nativeEvent) },
2810
- this.renderInput(),
2811
- this.renderButtons()));
2812
- }
2813
- getValueCore() {
2814
- return this.question.renderedValue;
2815
- }
2816
- renderButtons() {
2817
- return (React.createElement("span", { className: this.question.cssClasses.buttonsContainer },
2818
- React.createElement("button", { tabIndex: -1, "aria-hidden": "true", className: this.question.cssClasses.arrowButton, disabled: this.isDisplayMode, onClick: this.question.onDownButtonClick, onMouseDown: this.question.onDownButtonMouseDown, onMouseUp: this.question.onButtonMouseUp, onMouseLeave: this.question.onButtonMouseLeave, onBlur: event => this.question.onBlur(event.nativeEvent), onFocus: event => this.question.onFocus(event.nativeEvent) },
2819
- React.createElement(SvgIcon, { iconName: this.question.cssClasses.decreaseButtonIcon, size: "auto" })),
2820
- React.createElement("button", { tabIndex: -1, "aria-hidden": "true", className: this.question.cssClasses.arrowButton, disabled: this.isDisplayMode, onClick: this.question.onUpButtonClick, onMouseDown: this.question.onUpButtonMouseDown, onMouseUp: this.question.onButtonMouseUp, onMouseLeave: this.question.onButtonMouseLeave, onBlur: event => this.question.onBlur(event.nativeEvent), onFocus: event => this.question.onFocus(event.nativeEvent) },
2821
- React.createElement(SvgIcon, { iconName: this.question.cssClasses.increaseButtonIcon, size: "auto" }))));
2822
- }
2823
- }
2824
- ReactQuestionFactory.Instance.registerQuestion("spinedit", (props) => {
2825
- return React.createElement(SurveyQuestionSpinEditor, props);
2826
- });
2827
-
2828
- class ItemTemplateComponent extends SurveyElementBase {
2829
- render() {
2830
- const item = this.props.item;
2831
- return (React.createElement(React.Fragment, null,
2832
- React.createElement("span", { className: "spg-color-editor__color-swatch", style: { backgroundColor: item.value } }),
2833
- React.createElement("span", { key: 2 }, this.renderLocString(item.locTitle, undefined, "locString"))));
2834
- }
2835
- }
2836
- ReactElementFactory.Instance.registerElement("color-item", (props) => {
2837
- return React.createElement(ItemTemplateComponent, props);
2838
- });
2839
-
2840
- class SurveyQuestionColor extends SurveyQuestionText {
2841
- constructor(props) {
2842
- super(props);
2843
- }
2844
- get question() {
2845
- return this.questionBase;
2846
- }
2847
- renderInput() {
2848
- return (React.createElement(React.Fragment, null,
2849
- React.createElement("input", { id: this.question.inputId, disabled: this.isDisplayMode, className: this.question.cssClasses.control, ref: (input) => (this.setControl(input)), placeholder: this.question.renderedPlaceholder, autoComplete: "off", onKeyUp: (event) => this.question.onKeyUp(event.nativeEvent), onBlur: (event) => this.question.onBlur(event.nativeEvent), onChange: this.question.onChange, onBeforeInput: event => this.question.onBeforeInput(event.nativeEvent), "aria-required": this.question.a11y_input_ariaRequired, "aria-labelledby": this.question.a11y_input_ariaLabelledBy, "aria-label": this.question.a11y_input_ariaLabel, "aria-invalid": this.question.a11y_input_ariaInvalid, "aria-describedby": this.question.a11y_input_ariaDescribedBy })));
2850
- }
2851
- renderElement() {
2852
- return (React.createElement("div", { className: this.question.cssClasses.root, onKeyDown: event => this.question.onKeyDown(event.nativeEvent) },
2853
- this.renderColorSwatch(),
2854
- this.renderInput(),
2855
- this.question.showDropdownAction ? this.renderDropdownAction() : null));
2856
- }
2857
- getValueCore() {
2858
- return this.question.renderedValue;
2859
- }
2860
- renderColorSwatch() {
2861
- return React.createElement("label", { className: this.question.getSwatchCss(), style: this.question.getSwatchStyle() },
2862
- React.createElement(SvgIcon, { iconName: this.question.cssClasses.swatchIcon, size: "auto" }),
2863
- React.createElement("input", { type: "color", disabled: this.isDisplayMode, value: this.question.renderedColorValue, className: this.question.cssClasses.colorInput, onChange: (event) => this.question.onColorInputChange(event.nativeEvent), tabIndex: -1, "aria-required": this.question.a11y_input_ariaRequired, "aria-labelledby": this.question.a11y_input_ariaLabelledBy, "aria-label": this.question.a11y_input_ariaLabel, "aria-invalid": this.question.a11y_input_ariaInvalid, "aria-describedby": this.question.a11y_input_ariaDescribedBy }));
2864
- }
2865
- renderDropdownAction() {
2866
- return (React.createElement(React.Fragment, null,
2867
- React.createElement("div", { "aria-hidden": "true", className: this.question.cssClasses.choicesButtonWrapper }, ReactElementFactory.Instance.createElement("sv-action-bar-item", { item: this.question.dropdownAction })),
2868
- this.renderPopup()));
2869
- }
2870
- renderPopup() {
2871
- return React.createElement(Popup, { model: this.question.dropdownAction.popupModel });
2872
- }
2873
- }
2874
- ReactQuestionFactory.Instance.registerQuestion("color", (props) => {
2875
- return React.createElement(SurveyQuestionColor, props);
2876
- });
2877
-
2878
- class SurveyQuestionFileEditor extends SurveyQuestionText {
2879
- constructor(props) {
2880
- super(props);
2881
- }
2882
- get questionFile() {
2883
- return this.questionBase;
2884
- }
2885
- getValueCore() {
2886
- return this.question.renderedValue;
2887
- }
2888
- renderInput() {
2889
- return (React.createElement(React.Fragment, null,
2890
- React.createElement("input", { disabled: this.question.isTextInputReadOnly, className: this.questionFile.cssClasses.control, placeholder: this.questionFile.renderedPlaceholder, ref: (input) => (this.setControl(input)), autoComplete: "off", type: "text", onBlur: (event) => this.questionFile.onInputBlur(event.nativeEvent), onChange: (event) => this.questionFile.onInputChange(event.nativeEvent) })));
2891
- }
2892
- renderFileInput() {
2893
- return (React.createElement("input", { type: "file", disabled: this.isDisplayMode, className: this.questionFile.cssClasses.fileInput, id: this.questionFile.inputId, "aria-required": this.questionFile.ariaRequired, "aria-label": this.questionFile.ariaLabel, "aria-invalid": this.questionFile.ariaInvalid, "aria-describedby": this.questionFile.ariaDescribedBy, multiple: false, title: this.questionFile.inputTitle, accept: this.questionFile.acceptedTypes, tabIndex: -1, onChange: (event) => this.questionFile.onFileInputChange(event.nativeEvent) }));
2894
- }
2895
- renderButtons() {
2896
- return (React.createElement("div", { className: this.questionFile.cssClasses.buttonsContainer },
2897
- this.renderClearButton(),
2898
- this.renderChooseButton()));
2899
- }
2900
- renderClearButton() {
2901
- return attachKey2click((React.createElement("button", { className: this.questionFile.cssClasses.clearButton, title: this.questionFile.clearButtonCaption, disabled: this.questionFile.getIsClearButtonDisabled(), onClick: this.questionFile.doClean },
2902
- React.createElement(SvgIcon, { iconName: this.questionFile.cssClasses.clearButtonIcon, size: "auto" }))));
2903
- }
2904
- renderChooseButton() {
2905
- return (attachKey2click(React.createElement("label", { onClick: event => this.questionFile.chooseFiles(event.nativeEvent), className: this.questionFile.getChooseButtonCss(), htmlFor: this.questionFile.inputId, "aria-label": this.questionFile.chooseButtonCaption },
2906
- React.createElement(SvgIcon, { iconName: this.questionFile.cssClasses.chooseButtonIcon, size: "auto", title: this.questionFile.chooseButtonCaption }))));
2907
- }
2908
- renderElement() {
2909
- return (React.createElement("div", { className: this.questionFile.cssClasses.root, ref: el => this.setContent(el), onDragEnter: this.questionFile.onDragEnter, onDragOver: this.questionFile.onDragOver, onDrop: this.questionFile.onDrop, onDragLeave: this.questionFile.onDragLeave, onKeyDown: event => this.question.onKeyDown(event.nativeEvent) },
2910
- this.renderInput(),
2911
- this.renderFileInput(),
2912
- this.renderButtons()));
2913
- }
2914
- }
2915
- ReactQuestionFactory.Instance.registerQuestion("fileedit", (props) => {
2916
- return React.createElement(SurveyQuestionFileEditor, props);
2917
- });
2918
-
2919
- class SurveyQuestionTextWithReset extends SurveyQuestionElementBase {
2920
- get question() {
2921
- return this.questionBase;
2922
- }
2923
- renderElement() {
2924
- const textElement = this.renderInput();
2925
- const resetButton = this.renderResetButton();
2926
- return (React.createElement("div", { className: this.question.getRootClass() },
2927
- textElement,
2928
- resetButton));
2929
- }
2930
- renderInput() {
2931
- return ReactQuestionFactory.Instance.createQuestion(this.question.wrappedQuestionTemplate, {
2932
- question: this.question,
2933
- isDisplayMode: this.question.isInputReadOnly,
2934
- creator: this,
2935
- });
2936
- }
2937
- renderResetButton() {
2938
- return (React.createElement("button", { className: this.question.cssClasses.resetButton, disabled: this.question.resetValueAdorner.isDisabled, title: this.question.resetValueAdorner.caption, onClick: () => this.question.resetValueAdorner.resetValue() },
2939
- React.createElement(SvgIcon, { iconName: this.question.cssClasses.resetButtonIcon, size: "auto" })));
2940
- }
2941
- }
2942
- ReactQuestionFactory.Instance.registerQuestion("textwithreset", (props) => {
2943
- return React.createElement(SurveyQuestionTextWithReset, props);
2944
- });
2945
- ReactQuestionFactory.Instance.registerQuestion("commentwithreset", (props) => {
2946
- return React.createElement(SurveyQuestionTextWithReset, props);
2947
- });
2948
-
2949
- class SurveyQuestionBooleanSwitch extends SurveyQuestionElementBase {
2950
- renderElement() {
2951
- const button = attachKey2click(React.createElement("div", { className: "spg-boolean-switch__button" + (this.questionBase.booleanValue ? " spg-boolean-switch__button--checked" : ""), tabIndex: 0, role: "checkbox", "aria-checked": this.questionBase.booleanValue || false, "aria-required": this.questionBase.a11y_input_ariaRequired, "aria-label": this.questionBase.a11y_input_ariaLabel, "aria-labelledby": this.questionBase.a11y_input_ariaLabelledBy, "aria-invalid": this.questionBase.a11y_input_ariaInvalid, "aria-errormessage": this.questionBase.a11y_input_ariaErrormessage },
2952
- React.createElement("div", { className: "spg-boolean-switch__thumb" },
2953
- React.createElement("div", { className: "spg-boolean-switch__thumb-circle spg-boolean-switch__thumb--left" })),
2954
- React.createElement("div", { className: "spg-boolean-switch__thumb" },
2955
- React.createElement("div", { className: "spg-boolean-switch__thumb-circle spg-boolean-switch__thumb--right" }))), this.questionBase, { processEsc: false });
2956
- return (React.createElement("div", { className: "spg-boolean-switch", onClick: () => this.questionBase.booleanValue = !this.questionBase.booleanValue },
2957
- button,
2958
- React.createElement("div", { className: "spg-boolean-switch__caption" },
2959
- React.createElement("div", { className: "spg-boolean-switch__title", id: this.questionBase.labelRenderedAriaID }, SurveyElementBase.renderLocString(this.questionBase.locTitle)))));
2960
- }
2961
- }
2962
- ReactQuestionFactory.Instance.registerQuestion("sv-boolean-switch", (props) => {
2963
- return React.createElement(SurveyQuestionBooleanSwitch, props);
2964
- });
2965
- RendererFactory.Instance.registerRenderer("boolean", "switch", "sv-boolean-switch");
2966
-
2967
- let Version;
2968
- Version = `${"2.5.15"}`;
2969
- checkLibraryVersion(`${"2.5.15"}`, "survey-creator-react");
2970
-
2971
- export { ActionButton, AdaptiveToolbox, CellQuestionAdornerComponent, CellQuestionDropdownAdornerComponent, ComponentContainer, CreatorSurveyPageComponent, ImageItemValueAdornerComponent, ItemValueAdornerComponent, LogoImageComponent, MatrixCellAdornerComponent, PanelAdornerComponent, PropertyGridComponent, PropertyGridPlaceholderComponent, QuestionAdornerComponent, QuestionBanner, QuestionDropdownAdornerComponent, QuestionEditorContentComponent, QuestionErrorComponent, QuestionImageAdornerComponent, QuestionRatingAdornerComponent, QuestionWidgetAdornerComponent, QuestionWrapperFooter, QuestionWrapperHeader, ReactDragEvent, ReactMouseEvent, RowWrapper, SearchComponent, SideBarDefaultHeader, SidebarComponent, SurveyCreator, SurveyCreatorComponent, SurveyCreatorToolboxCategory, SurveyCreatorToolboxItem, SurveyCreatorToolboxItemGroup, SurveyCreatorToolboxTool, SurveyElementEmbeddedSurvey, SurveyLocStringEditor, SurveyLogicOpertor, SurveyNavigation, SurveyQuestionBooleanSwitch, SurveyQuestionColor, SurveyQuestionFileEditor, SurveyQuestionLinkValue, SurveyQuestionSpinEditor, SurveyQuestionTextWithReset, SurveyResults, SurveyResultsByRow, SurveySimulator, SwitcherComponent, TabButtonComponent, TabDesignerComponent, TabJsonEditorAceComponent, TabJsonEditorErrorsComponent, TabJsonEditorTextareaComponent, TabLogicAddButtonComponent, TabLogicComponent, TabPreviewSurveyComponent, TabPreviewTestSurveyAgainComponent, TabThemeSurveyComponent, TabTranslationComponent, TabbedMenuComponent, TabbedMenuItemComponent, ToolboxList, TranslateFromAction, TranslationLineSkeleton, Version };
2972
- //# sourceMappingURL=survey-creator-react.mjs.map