survey-react-ui 2.2.5 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v2.2.5
2
+ * surveyjs - Survey JavaScript library v2.3.0
3
3
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -1202,13 +1202,18 @@ class SurveyQuestionCommentItem extends ReactSurveyElement {
1202
1202
  const comment = this.textAreaModel.getTextValue() || "";
1203
1203
  return React.createElement("div", null, comment);
1204
1204
  }
1205
- return (React.createElement(TextAreaComponent, { viewModel: this.textAreaModel }));
1205
+ return (React.createElement(TextAreaComponent, { key: this.getKey(), viewModel: this.textAreaModel }));
1206
1206
  }
1207
+ getKey() { return undefined; }
1207
1208
  }
1208
- class SurveyQuestionOtherValueItem extends SurveyQuestionCommentItem {
1209
+ class SurveyQuestionCommentValueItem extends SurveyQuestionCommentItem {
1210
+ constructor(props) {
1211
+ super(props);
1212
+ }
1209
1213
  getTextAreaModel() {
1210
- return this.props.question.otherTextAreaModel;
1214
+ return this.props.question.getCommentTextAreaModel(this.props.item);
1211
1215
  }
1216
+ getKey() { return this.props.item.normalizedId; }
1212
1217
  }
1213
1218
  ReactQuestionFactory.Instance.registerQuestion("comment", (props) => {
1214
1219
  return React.createElement(SurveyQuestionComment, props);
@@ -1518,7 +1523,7 @@ class SurveyQuestion extends SurveyElementBase {
1518
1523
  const commentText = SurveyElementBase.renderLocString(this.question.locCommentText);
1519
1524
  return (React.createElement("div", { className: this.question.getCommentAreaCss() },
1520
1525
  React.createElement("div", null, commentText),
1521
- React.createElement(SurveyQuestionCommentItem, { question: this.question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: this.question.isInputReadOnly })));
1526
+ React.createElement(SurveyQuestionCommentItem, { question: this.question, cssClasses: cssClasses, isDisplayMode: this.question.isInputReadOnly })));
1522
1527
  }
1523
1528
  renderHeader(question) {
1524
1529
  if (question.singleInputHideHeader)
@@ -1560,7 +1565,7 @@ class SurveyElementErrors extends ReactSurveyElement {
1560
1565
  const key = "error" + i;
1561
1566
  errors.push(this.creator.renderError(key, this.element.errors[i], this.cssClasses, this.element));
1562
1567
  }
1563
- return (React.createElement("div", { role: "alert", "aria-live": "polite", className: this.element.cssError, id: this.id }, errors));
1568
+ return (React.createElement("div", { className: this.element.cssError, id: this.id }, errors));
1564
1569
  }
1565
1570
  }
1566
1571
  class SurveyQuestionAndErrorsWrapped extends ReactSurveyElement {
@@ -1925,7 +1930,7 @@ class PopupModal extends SurveyElementBase {
1925
1930
  PopupModal.modalDescriptors = [];
1926
1931
 
1927
1932
  /*!
1928
- * surveyjs - Survey JavaScript library v2.2.5
1933
+ * surveyjs - Survey JavaScript library v2.3.0
1929
1934
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
1930
1935
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
1931
1936
  */
@@ -1995,7 +2000,7 @@ var iconsV1 = {
1995
2000
  };
1996
2001
 
1997
2002
  /*!
1998
- * surveyjs - Survey JavaScript library v2.2.5
2003
+ * surveyjs - Survey JavaScript library v2.3.0
1999
2004
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
2000
2005
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
2001
2006
  */
@@ -2646,8 +2651,7 @@ class SurveyQuestionCheckbox extends SurveyQuestionElementBase {
2646
2651
  this.question.hasColumns
2647
2652
  ? this.getColumnedBody(cssClasses)
2648
2653
  : this.getBody(cssClasses),
2649
- this.getFooter(),
2650
- this.question.isOtherSelected ? this.renderOther() : null));
2654
+ this.getFooter()));
2651
2655
  }
2652
2656
  getHeader() {
2653
2657
  if (this.question.hasHeadItems) {
@@ -2680,7 +2684,6 @@ class SurveyQuestionCheckbox extends SurveyQuestionElementBase {
2680
2684
  var renderedItems = [];
2681
2685
  for (var i = 0; i < choices.length; i++) {
2682
2686
  var item = choices[i];
2683
- "item" + item.value;
2684
2687
  var renderedItem = this.renderItem(item, i == 0, cssClasses, "" + i);
2685
2688
  if (!!renderedItem) {
2686
2689
  renderedItems.push(renderedItem);
@@ -2691,11 +2694,6 @@ class SurveyQuestionCheckbox extends SurveyQuestionElementBase {
2691
2694
  get textStyle() {
2692
2695
  return null;
2693
2696
  }
2694
- renderOther() {
2695
- let cssClasses = this.question.cssClasses;
2696
- return (React.createElement("div", { className: this.question.getCommentAreaCss(true) },
2697
- React.createElement(SurveyQuestionOtherValueItem, { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode })));
2698
- }
2699
2697
  renderItem(item, isFirst, cssClasses, index) {
2700
2698
  const renderedItem = ReactElementFactory.Instance.createElement(this.question.itemComponent, {
2701
2699
  key: item.value,
@@ -2770,12 +2768,20 @@ class SurveyQuestionCheckboxItem extends ReactSurveyElement {
2770
2768
  return !!this.item && !!this.question;
2771
2769
  }
2772
2770
  renderElement() {
2773
- var isChecked = this.question.isItemSelected(this.item);
2774
- return this.renderCheckbox(isChecked, null);
2771
+ const isChecked = this.question.isItemSelected(this.item);
2772
+ return React.createElement(React.Fragment, null,
2773
+ this.renderCheckbox(isChecked, null),
2774
+ this.renderComment());
2775
2775
  }
2776
2776
  get inputStyle() {
2777
2777
  return null; //{ marginRight: "3px" };
2778
2778
  }
2779
+ renderComment() {
2780
+ if (!this.item.isCommentShowing)
2781
+ return null;
2782
+ return React.createElement("div", { className: this.question.getCommentAreaCss(true) },
2783
+ React.createElement(SurveyQuestionCommentValueItem, { question: this.question, item: this.item, cssClasses: this.question.cssClasses }));
2784
+ }
2779
2785
  renderCheckbox(isChecked, otherItem) {
2780
2786
  const id = this.question.getItemId(this.item);
2781
2787
  const itemClass = this.question.getItemClass(this.item);
@@ -3237,9 +3243,11 @@ class SurveyQuestionDropdownBase extends SurveyQuestionUncontrolledElement {
3237
3243
  };
3238
3244
  return React.createElement("input", { type: "text", autoComplete: "off", id: this.question.getInputId(), ref: (element) => (this.inputElement = element), className: this.question.cssClasses.filterStringInput, role: dropdownListModel.ariaInputRole, "aria-required": dropdownListModel.ariaInputRequired, "aria-invalid": dropdownListModel.ariaInputInvalid, "aria-errormessage": dropdownListModel.ariaInputErrorMessage, "aria-expanded": dropdownListModel.ariaInputExpanded, "aria-label": dropdownListModel.ariaInputLabel, "aria-labelledby": dropdownListModel.ariaInputLabelledby, "aria-describedby": dropdownListModel.ariaInputDescribedby, "aria-controls": dropdownListModel.ariaInputControls, "aria-activedescendant": dropdownListModel.ariaInputActivedescendant, placeholder: dropdownListModel.placeholderRendered, readOnly: dropdownListModel.filterReadOnly ? true : undefined, tabIndex: dropdownListModel.noTabIndex ? undefined : -1, disabled: this.question.isDisabledAttr, inputMode: dropdownListModel.inputMode, onChange: (e) => { onInputChange(e); }, onBlur: this.blur, onFocus: this.focus });
3239
3245
  }
3240
- renderOther(cssClasses) {
3241
- return (React.createElement("div", { className: this.question.getCommentAreaCss(true) },
3242
- React.createElement(SurveyQuestionOtherValueItem, { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode, isOther: true })));
3246
+ renderOther(item, cssClasses) {
3247
+ if (!item || !item.isCommentShowing)
3248
+ return null;
3249
+ return (React.createElement("div", { key: item.normalizedId, className: this.question.getCommentAreaCss(true) },
3250
+ React.createElement(SurveyQuestionCommentValueItem, { question: this.question, item: item, cssClasses: this.question.cssClasses })));
3243
3251
  }
3244
3252
  renderEditorButtons() {
3245
3253
  return React.createElement(SurveyActionBar, { model: this.dropdownListModel.editorButtons });
@@ -3274,7 +3282,7 @@ class SurveyQuestionDropdown extends SurveyQuestionDropdownBase {
3274
3282
  }
3275
3283
  renderElement() {
3276
3284
  const cssClasses = this.question.cssClasses;
3277
- const comment = this.question.isOtherSelected ? this.renderOther(cssClasses) : null;
3285
+ const comment = this.renderOther(this.question.selectedItem, cssClasses);
3278
3286
  const select = this.renderSelect(cssClasses);
3279
3287
  return (React.createElement("div", { className: this.question.renderCssRoot },
3280
3288
  select,
@@ -3333,7 +3341,7 @@ class SurveyQuestionTagbox extends SurveyQuestionDropdownBase {
3333
3341
  }
3334
3342
  renderElement() {
3335
3343
  const cssClasses = this.question.cssClasses;
3336
- const comment = this.question.isOtherSelected ? this.renderOther(cssClasses) : null;
3344
+ const comment = this.renderOther(this.question.otherItem, cssClasses);
3337
3345
  const select = this.renderSelect(cssClasses);
3338
3346
  return (React.createElement("div", { className: this.question.renderCssRoot },
3339
3347
  select,
@@ -3509,8 +3517,8 @@ class SurveyQuestionMatrixRow extends ReactSurveyElement {
3509
3517
  return tds;
3510
3518
  }
3511
3519
  cellClick(row, column) {
3512
- row.value = column.value;
3513
- this.setState({ value: this.row.value });
3520
+ row.cellClick(column);
3521
+ this.setState({ value: row.value });
3514
3522
  }
3515
3523
  }
3516
3524
  class SurveyQuestionMatrixCell extends ReactSurveyElement {
@@ -3523,6 +3531,7 @@ class SurveyQuestionMatrixCell extends ReactSurveyElement {
3523
3531
  if (!!this.props.cellChanged) {
3524
3532
  this.props.cellChanged();
3525
3533
  }
3534
+ this.setState({ value: this.row.isChecked(this.column) });
3526
3535
  }
3527
3536
  handleOnMouseDown(event) {
3528
3537
  this.question.onMouseDown();
@@ -3543,22 +3552,22 @@ class SurveyQuestionMatrixCell extends ReactSurveyElement {
3543
3552
  return !!this.question && !!this.row;
3544
3553
  }
3545
3554
  renderElement() {
3546
- const isChecked = this.row.value == this.column.value;
3555
+ const isChecked = this.row.isChecked(this.column);
3547
3556
  const inputId = this.question.inputId + "_" + this.row.name + "_" + this.columnIndex;
3548
3557
  const itemClass = this.question.getItemClass(this.row, this.column);
3558
+ const itemSvgIcon = this.question.getItemSvgIcon(this.row, this.column);
3549
3559
  const mobileSpan = this.question.isMobile ?
3550
3560
  (React.createElement("span", { className: this.question.cssClasses.cellResponsiveTitle }, this.renderLocString(this.column.locText)))
3551
3561
  : undefined;
3552
3562
  return (React.createElement("label", { onMouseDown: this.handleOnMouseDown, className: itemClass },
3553
3563
  this.renderInput(inputId, isChecked),
3554
- React.createElement("span", { className: this.question.cssClasses.materialDecorator }, this.question.itemSvgIcon ?
3555
- React.createElement("svg", { className: this.cssClasses.itemDecorator },
3556
- React.createElement("use", { xlinkHref: this.question.itemSvgIcon })) :
3557
- null),
3564
+ React.createElement("span", { className: this.question.cssMaterialDecorator }, itemSvgIcon ?
3565
+ React.createElement("svg", { className: this.question.cssItemDecorator },
3566
+ React.createElement("use", { xlinkHref: itemSvgIcon })) : null),
3558
3567
  mobileSpan));
3559
3568
  }
3560
3569
  renderInput(inputId, isChecked) {
3561
- return (React.createElement("input", { id: inputId, type: "radio", className: this.cssClasses.itemValue, name: this.row.fullName, value: this.column.value, disabled: this.row.isDisabledAttr, readOnly: this.row.isReadOnlyAttr, checked: isChecked, onChange: this.handleOnChange, "aria-required": this.question.a11y_input_ariaRequired, "aria-label": this.question.getCellAriaLabel(this.row, this.column), "aria-invalid": this.question.a11y_input_ariaInvalid, "aria-errormessage": this.question.a11y_input_ariaErrormessage }));
3570
+ return (React.createElement("input", { id: inputId, type: this.question.checkType, className: this.question.cssItemValue, name: this.row.fullName, value: this.column.value, disabled: this.row.isDisabledAttr, readOnly: this.row.isReadOnlyAttr, checked: isChecked, onChange: this.handleOnChange, "aria-required": this.question.a11y_input_ariaRequired, "aria-label": this.question.getCellAriaLabel(this.row, this.column), "aria-invalid": this.question.a11y_input_ariaInvalid, "aria-errormessage": this.question.a11y_input_ariaErrormessage }));
3562
3571
  }
3563
3572
  }
3564
3573
  ReactElementFactory.Instance.registerElement("survey-matrix-cell", props => {
@@ -3849,7 +3858,6 @@ class SurveyQuestionRadiogroup extends SurveyQuestionElementBase {
3849
3858
  ? this.getColumnedBody(cssClasses)
3850
3859
  : this.getBody(cssClasses),
3851
3860
  this.getFooter(),
3852
- this.question.isOtherSelected ? this.renderOther(cssClasses) : null,
3853
3861
  clearButton));
3854
3862
  }
3855
3863
  getFooter() {
@@ -3888,10 +3896,6 @@ class SurveyQuestionRadiogroup extends SurveyQuestionElementBase {
3888
3896
  get textStyle() {
3889
3897
  return null; //{ display: "inline", position: "static" };
3890
3898
  }
3891
- renderOther(cssClasses) {
3892
- return (React.createElement("div", { className: this.question.getCommentAreaCss(true) },
3893
- React.createElement(SurveyQuestionOtherValueItem, { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode })));
3894
- }
3895
3899
  renderItem(item, value, cssClasses, index) {
3896
3900
  const renderedItem = ReactElementFactory.Instance.createElement(this.question.itemComponent, {
3897
3901
  key: item.value,
@@ -3976,6 +3980,17 @@ class SurveyQuestionRadioItem extends ReactSurveyElement {
3976
3980
  }
3977
3981
  }
3978
3982
  renderElement() {
3983
+ return React.createElement(React.Fragment, null,
3984
+ this.renderRadioButton(),
3985
+ this.renderComment());
3986
+ }
3987
+ renderComment() {
3988
+ if (!this.item.isCommentShowing)
3989
+ return null;
3990
+ return React.createElement("div", { className: this.question.getCommentAreaCss(true) },
3991
+ React.createElement(SurveyQuestionCommentValueItem, { question: this.question, item: this.item, cssClasses: this.question.cssClasses }));
3992
+ }
3993
+ renderRadioButton() {
3979
3994
  var itemClass = this.question.getItemClass(this.item);
3980
3995
  var labelClass = this.question.getLabelClass(this.item);
3981
3996
  var controlLabelClass = this.question.getControlLabelClass(this.item);
@@ -4599,7 +4614,7 @@ class SurveyQuestionMatrixDropdownCell extends SurveyQuestionAndErrorsCell {
4599
4614
  renderOtherComment() {
4600
4615
  const question = this.cell.question;
4601
4616
  const cssClasses = question.cssClasses || {};
4602
- return React.createElement(SurveyQuestionOtherValueItem, { question: question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: question.isInputReadOnly });
4617
+ return React.createElement(SurveyQuestionCommentValueItem, { question: question, item: question.otherItem, cssClasses: cssClasses });
4603
4618
  }
4604
4619
  renderCellCheckboxButton() {
4605
4620
  var key = this.cell.question.id + "item" + this.cell.choiceIndex;
@@ -5277,7 +5292,7 @@ class SurveyQuestionExpression extends SurveyQuestionElementBase {
5277
5292
  }
5278
5293
  renderElement() {
5279
5294
  var cssClasses = this.question.cssClasses;
5280
- return (React.createElement("div", { id: this.question.inputId, className: cssClasses.root, ref: (div) => (this.setControl(div)) }, this.question.formatedValue));
5295
+ return (React.createElement("div", { id: this.question.inputId, className: cssClasses.root, ref: (div) => (this.setControl(div)), "aria-live": "polite", "aria-label": this.question.formatedValue }, this.question.formatedValue));
5281
5296
  }
5282
5297
  }
5283
5298
  ReactQuestionFactory.Instance.registerQuestion("expression", (props) => {
@@ -5516,7 +5531,7 @@ class SurveyQuestionImagePickerItem extends ReactSurveyElement {
5516
5531
  }
5517
5532
  const renderedItem = (React.createElement("div", { className: itemClass },
5518
5533
  React.createElement("label", { className: cssClasses.label },
5519
- React.createElement("input", { className: cssClasses.itemControl, id: this.question.getItemId(item), type: this.question.inputType, name: this.question.questionName, checked: isChecked, value: item.value, disabled: !this.question.getItemEnabled(item), readOnly: this.question.isReadOnlyAttr, onChange: this.handleOnChange, "aria-required": this.question.ariaRequired, "aria-label": item.locText.renderedHtml, "aria-invalid": this.question.ariaInvalid, "aria-errormessage": this.question.ariaErrormessage }),
5534
+ React.createElement("input", { className: cssClasses.itemControl, id: this.question.getItemId(item), type: this.question.inputType, name: this.question.questionName, checked: isChecked, value: item.value, disabled: !this.question.getItemEnabled(item), readOnly: this.question.isReadOnlyAttr, onChange: this.handleOnChange, required: this.question.inputRequiredAttribute, "aria-label": item.locText.renderedHtml, "aria-invalid": this.question.ariaInvalid, "aria-errormessage": this.question.ariaErrormessage }),
5520
5535
  React.createElement("div", { className: this.question.cssClasses.itemDecorator },
5521
5536
  React.createElement("div", { className: this.question.cssClasses.imageContainer },
5522
5537
  !!this.question.cssClasses.checkedItemDecorator ?
@@ -6196,7 +6211,7 @@ ReactElementFactory.Instance.registerElement(LocalizableString.editableRenderer,
6196
6211
  return React.createElement(SurveyLocStringEditor, props);
6197
6212
  });
6198
6213
 
6199
- checkLibraryVersion(`${"2.2.5"}`, "survey-react-ui");
6214
+ checkLibraryVersion(`${"2.3.0"}`, "survey-react-ui");
6200
6215
 
6201
6216
  export { CharacterCounterComponent, ComponentsContainer, Header, HeaderCell, HeaderMobile, List, ListItemContent, ListItemGroup, LoadingIndicatorComponent, LogoImage, MatrixRow, NotifierComponent, Popup, PopupModal, PopupSurvey, QuestionErrorComponent, RatingDropdownItem, RatingItem, RatingItemSmiley, RatingItemStar, ReactElementFactory, ReactQuestionFactory, ReactSurveyElement, ReactSurveyElementsWrapper, Scroll, Skeleton, SliderLabelItem, Survey, SurveyActionBar, SurveyElementBase, SurveyElementErrors, SurveyFileChooseButton, SurveyFilePreview, SurveyFlowPanel, SurveyHeader, SurveyLocStringEditor, SurveyLocStringViewer, SurveyNavigationBase, SurveyNavigationButton, SurveyPage, SurveyPanel, SurveyProgress, SurveyProgressButtons, SurveyProgressToc, SurveyQuestion, SurveyQuestionAndErrorsCell, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionButtonGroup, SurveyQuestionButtonGroupDropdown, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionComment, SurveyQuestionCommentItem, SurveyQuestionComposite, SurveyQuestionCustom, SurveyQuestionDropdown, SurveyQuestionDropdownBase, SurveyQuestionDropdownSelect, SurveyQuestionElementBase, SurveyQuestionEmpty, SurveyQuestionExpression, SurveyQuestionFile, SurveyQuestionHtml, SurveyQuestionImage, SurveyQuestionImagePicker, SurveyQuestionMatrix, SurveyQuestionMatrixCell, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDropdownBase, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton, SurveyQuestionMatrixDynamicDragDropIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixRow, SurveyQuestionMultipleText, SurveyQuestionOptionItem, SurveyQuestionPanelDynamic, SurveyQuestionPanelDynamicAddButton, SurveyQuestionPanelDynamicNextButton, SurveyQuestionPanelDynamicPrevButton, SurveyQuestionPanelDynamicProgressText, SurveyQuestionPanelDynamicRemoveButton, SurveyQuestionRadioItem, SurveyQuestionRadiogroup, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionRankingItemContent, SurveyQuestionRating, SurveyQuestionRatingDropdown, SurveyQuestionSignaturePad, SurveyQuestionSlider, SurveyQuestionTagbox, SurveyQuestionTagboxItem, SurveyQuestionText, SurveyRow, SurveyTimerPanel, SurveyWindow, SvgBundleComponent, SvgIcon, TagboxFilterString, TitleActions, TitleElement, attachKey2click };
6202
6217
  //# sourceMappingURL=survey-react-ui.mjs.map