survey-react-ui 2.0.5 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v2.0.5
2
+ * surveyjs - Survey JavaScript library v2.0.7
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
  */
@@ -1006,7 +1006,7 @@ class TitleContent extends React.Component {
1006
1006
  }
1007
1007
  render() {
1008
1008
  if (this.element.isTitleRenderedAsString)
1009
- return SurveyElementBase.renderLocString(this.element.locTitle);
1009
+ return SurveyElementBase.renderLocString(this.element.locRenderedTitle);
1010
1010
  var spans = this.renderTitleSpans(this.element.getTitleOwner(), this.cssClasses);
1011
1011
  return React.createElement(React.Fragment, null, spans);
1012
1012
  }
@@ -1028,7 +1028,7 @@ class TitleContent extends React.Component {
1028
1028
  spans.push(this.renderRequireText(element));
1029
1029
  spans.push(getSpaceSpan("req-sp"));
1030
1030
  }
1031
- spans.push(SurveyElementBase.renderLocString(element.locTitle, null, "q_title"));
1031
+ spans.push(SurveyElementBase.renderLocString(element.locRenderedTitle, null, "q_title"));
1032
1032
  if (element.isRequireTextAfterTitle) {
1033
1033
  spans.push(getSpaceSpan("req-sp"));
1034
1034
  spans.push(this.renderRequireText(element));
@@ -1296,6 +1296,81 @@ class SurveyElementHeader extends SurveyElementBase {
1296
1296
  }
1297
1297
  }
1298
1298
 
1299
+ class SurveyQuestionSigleInputSummary extends ReactSurveyElement {
1300
+ constructor(props) {
1301
+ super(props);
1302
+ }
1303
+ get css() {
1304
+ return this.props.css;
1305
+ }
1306
+ get summary() {
1307
+ return this.props.summary;
1308
+ }
1309
+ renderElement() {
1310
+ if (!this.summary)
1311
+ return null;
1312
+ return this.summary.isEmpty() ? this.renderNoItems() : this.renderItems();
1313
+ }
1314
+ renderItems() {
1315
+ return (React.createElement("div", { className: this.css.summary }, this.summary.items.map((item, index) => this.renderItem(item, index))));
1316
+ }
1317
+ renderNoItems() {
1318
+ const q = this.summary.question;
1319
+ const placeholder = ReactElementFactory.Instance.createElement("sv-placeholder-" + q.getTemplate(), { cssClasses: this.css, question: q });
1320
+ return placeholder || React.createElement("div", null, this.renderLocString(this.summary.noEntry));
1321
+ }
1322
+ renderItem(item, index) {
1323
+ const btnEdit = item.btnEdit ?
1324
+ React.createElement("button", { className: this.css.summaryRowActionEdit, onClick: () => item.btnEdit.action(), title: item.btnEdit.title },
1325
+ React.createElement(SvgIcon, { iconName: "icon-editsmall-16x16", iconSize: "auto" })) : null;
1326
+ const btnDelete = item.showRemove && item.btnRemove ?
1327
+ React.createElement("button", { className: this.css.summaryRowActionDelete, onClick: () => item.btnRemove.action(), title: item.btnRemove.title },
1328
+ React.createElement(SvgIcon, { iconName: "icon-delete-16x16", iconSize: "auto" })) : null;
1329
+ return React.createElement("div", { className: this.css.summaryRow, key: index },
1330
+ React.createElement("div", { className: this.css.summaryRowContent }, this.renderLocString(item.locText)),
1331
+ React.createElement("div", { className: this.css.summaryRowActions },
1332
+ btnEdit,
1333
+ btnDelete));
1334
+ }
1335
+ }
1336
+ ReactElementFactory.Instance.registerElement("sv-singleinput-summary", (props) => {
1337
+ return React.createElement(SurveyQuestionSigleInputSummary, props);
1338
+ });
1339
+
1340
+ class SurveyBreadcrumbs extends SurveyElementBase {
1341
+ constructor(props) {
1342
+ super(props);
1343
+ }
1344
+ getStateElement() {
1345
+ return this.props.model;
1346
+ }
1347
+ get items() {
1348
+ return this.props.model.actions;
1349
+ }
1350
+ get css() {
1351
+ return this.props.css;
1352
+ }
1353
+ renderElement() {
1354
+ if (!this.items || !this.items.length)
1355
+ return null;
1356
+ const items = this.renderItems();
1357
+ return (React.createElement("div", { className: this.css.breadcrumbsRoot }, items));
1358
+ }
1359
+ renderItems() {
1360
+ const result = [];
1361
+ this.items.concat([]).forEach((item, itemIndex) => {
1362
+ if (itemIndex) {
1363
+ result.push(React.createElement(SvgIcon, { key: item.renderedId + "_separator", className: this.css.breadcrumbsSeparator, iconName: "arrowright-16x16", size: "auto" }));
1364
+ }
1365
+ result.push(React.createElement(SurveyAction, { key: item.renderedId, item: item }));
1366
+ });
1367
+ return result;
1368
+ }
1369
+ }
1370
+ ReactElementFactory.Instance.registerElement("sv-breadcrumbs", (props) => {
1371
+ return React.createElement(SurveyBreadcrumbs, props);
1372
+ });
1373
+
1299
1374
  class SurveyQuestion extends SurveyElementBase {
1300
1375
  static renderQuestionBody(creator, question) {
1301
1376
  // if (!question.isVisible) return null;
@@ -1390,16 +1465,31 @@ class SurveyQuestion extends SurveyElementBase {
1390
1465
  const errorsBelowQuestion = this.question.showErrorsBelowQuestion
1391
1466
  ? this.renderErrors(cssClasses, "")
1392
1467
  : null;
1393
- let rootStyle = question.getRootStyle();
1394
- let questionContent = this.wrapQuestionContent(this.renderQuestionContent());
1468
+ const rootStyle = question.getRootStyle();
1469
+ const singleBreadcrumbs = question.singleInputHasActions ? this.renderSingleInputBreadcrumbs(question, cssClasses) : undefined;
1470
+ const singleSummary = question.singleInputSummary ? this.renderSingleInputSummary(question, cssClasses) : undefined;
1471
+ const singleInput = singleSummary || (question.singleInputQuestion ? this.renderSingleInputQuestion(question, cssClasses) : undefined);
1472
+ const questionContent = singleInput || this.wrapQuestionContent(this.renderQuestionContent());
1395
1473
  return (React.createElement(React.Fragment, null,
1396
1474
  React.createElement("div", { ref: this.rootRef, id: question.id, className: question.getRootCss(), style: rootStyle, role: question.ariaRole, "aria-required": this.question.ariaRequired, "aria-invalid": this.question.ariaInvalid, "aria-label": this.question.ariaLabel, "aria-labelledby": question.ariaLabelledBy, "aria-describedby": question.ariaDescribedBy, "aria-expanded": question.ariaExpanded, "data-name": question.name },
1475
+ singleBreadcrumbs,
1397
1476
  errorsAboveQuestion,
1398
1477
  headerTop,
1399
1478
  questionContent,
1400
1479
  headerBottom,
1401
1480
  errorsBelowQuestion)));
1402
1481
  }
1482
+ renderSingleInputQuestion(question, cssClasses) {
1483
+ const singleQuestion = question.singleInputQuestion;
1484
+ const key = singleQuestion.id;
1485
+ return React.createElement(SurveyQuestion, { key: key, element: singleQuestion, creator: this.creator, css: cssClasses });
1486
+ }
1487
+ renderSingleInputBreadcrumbs(question, cssClasses) {
1488
+ return React.createElement(SurveyBreadcrumbs, { model: question.singleInputActions, css: cssClasses });
1489
+ }
1490
+ renderSingleInputSummary(question, cssClasses) {
1491
+ return React.createElement(SurveyQuestionSigleInputSummary, { summary: question.singleInputSummary, creator: this.creator, css: cssClasses });
1492
+ }
1403
1493
  wrapElement(element) {
1404
1494
  const survey = this.question.survey;
1405
1495
  let wrapper = null;
@@ -1429,6 +1519,8 @@ class SurveyQuestion extends SurveyElementBase {
1429
1519
  React.createElement(SurveyQuestionCommentItem, { question: this.question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: this.question.isInputReadOnly })));
1430
1520
  }
1431
1521
  renderHeader(question) {
1522
+ if (question.singleInputHideHeader)
1523
+ return null;
1432
1524
  return React.createElement(SurveyElementHeader, { element: question });
1433
1525
  }
1434
1526
  renderErrors(cssClasses, location) {
@@ -1831,7 +1923,7 @@ class PopupModal extends SurveyElementBase {
1831
1923
  PopupModal.modalDescriptors = [];
1832
1924
 
1833
1925
  /*!
1834
- * surveyjs - Survey JavaScript library v2.0.5
1926
+ * surveyjs - Survey JavaScript library v2.0.7
1835
1927
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
1836
1928
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
1837
1929
  */
@@ -1861,9 +1953,11 @@ var iconsV1 = {
1861
1953
  "close-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.4101 12L20.7001 4.71C21.0901 4.32 21.0901 3.69 20.7001 3.3C20.3101 2.91 19.6801 2.91 19.2901 3.3L12.0001 10.59L4.71006 3.29C4.32006 2.9 3.68006 2.9 3.29006 3.29C2.90006 3.68 2.90006 4.32 3.29006 4.71L10.5801 12L3.29006 19.29C2.90006 19.68 2.90006 20.31 3.29006 20.7C3.49006 20.9 3.74006 20.99 4.00006 20.99C4.26006 20.99 4.51006 20.89 4.71006 20.7L12.0001 13.41L19.2901 20.7C19.4901 20.9 19.7401 20.99 20.0001 20.99C20.2601 20.99 20.5101 20.89 20.7101 20.7C21.1001 20.31 21.1001 19.68 20.7101 19.29L13.4201 12H13.4101Z\"></path></svg>",
1862
1954
  "collapse-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 6L3 5L8 10L13 5L14 6L8 12L2 6Z\"></path></svg>",
1863
1955
  "collapsedetails-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13 7H3V9H13V7Z\"></path></svg>",
1956
+ "delete-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15 2H14H11V1C11 0.4 10.6 0 10 0H7C6.4 0 6 0.4 6 1V2H3H2V4H3V14C3 15.1 3.9 16 5 16H12C13.1 16 14 15.1 14 14V4H15V2ZM7 1H10V2H7V1ZM12 14H5V4H12V14ZM7 13H6V5H7V13ZM9 13H8V5H9V13ZM11 13H10V5H11V13Z\"></path></svg>",
1864
1957
  "delete-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M22 4H20H16V2C16 0.9 15.1 0 14 0H10C8.9 0 8 0.9 8 2V4H4H2V6H4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V6H22V4ZM10 2H14V4H10V2ZM18 20H6V6H8H16H18V20ZM14 8H16V18H14V8ZM11 8H13V18H11V8ZM8 8H10V18H8V8Z\"></path></svg>",
1865
1958
  "drag-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13 6C13 4.9 13.9 4 15 4C16.1 4 17 4.9 17 6C17 7.1 16.1 8 15 8C13.9 8 13 7.1 13 6ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16ZM9 16C7.9 16 7 16.9 7 18C7 19.1 7.9 20 9 20C10.1 20 11 19.1 11 18C11 16.9 10.1 16 9 16Z\"></path></svg>",
1866
1959
  "draghorizontal-24x16": "<svg viewBox=\"0 0 24 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18 9C19.1 9 20 9.9 20 11C20 12.1 19.1 13 18 13C16.9 13 16 12.1 16 11C16 9.9 16.9 9 18 9ZM20 5C20 3.9 19.1 3 18 3C16.9 3 16 3.9 16 5C16 6.1 16.9 7 18 7C19.1 7 20 6.1 20 5ZM14 11C14 9.9 13.1 9 12 9C10.9 9 10 9.9 10 11C10 12.1 10.9 13 12 13C13.1 13 14 12.1 14 11ZM14 5C14 3.9 13.1 3 12 3C10.9 3 10 3.9 10 5C10 6.1 10.9 7 12 7C13.1 7 14 6.1 14 5ZM8 11C8 9.9 7.1 9 6 9C4.9 9 4 9.9 4 11C4 12.1 4.9 13 6 13C7.1 13 8 12.1 8 11ZM8 5C8 3.9 7.1 3 6 3C4.9 3 4 3.9 4 5C4 6.1 4.9 7 6 7C7.1 7 8 6.1 8 5Z\"></path></svg>",
1960
+ "editsmall-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.59 4.5884L11.42 2.4184C11.03 2.0284 10.52 1.8284 10.01 1.8284C9.5 1.8284 8.99 2.0284 8.6 2.4184L3.76 7.2384C2.63 8.3684 2 9.8884 2 11.4784V12.9884C2 13.5384 2.45 13.9884 3 13.9884H4.51C6.1 13.9884 7.63 13.3584 8.75 12.2284L13.58 7.3984C14.36 6.6184 14.36 5.3484 13.58 4.5684L13.59 4.5884ZM7.35 10.8284C6.59 11.5884 5.59 11.9984 4.52 11.9984H4.01V11.4884C4.01 10.4184 4.43 9.4184 5.18 8.6584L7.72 6.1184L9.89 8.2884L7.35 10.8284ZM11.3 6.8784L9.13 4.7084L10.01 3.8284L12.18 5.9984L11.3 6.8784Z\"></path></svg>",
1867
1961
  "expand-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 14L5 13L10 8L5 3L6 2L12 8L6 14Z\"></path></svg>",
1868
1962
  "expanddetails-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13 7H9V3H7V7H3V9H7V13H9V9H13V7Z\"></path></svg>",
1869
1963
  "file-72x72": "<svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M62.83 12.83L53.17 3.17C52.7982 2.79866 52.357 2.50421 51.8714 2.30346C51.3858 2.1027 50.8654 1.99959 50.34 2H14C12.4087 2 10.8826 2.63214 9.75735 3.75736C8.63214 4.88258 8 6.4087 8 8V64C8 65.5913 8.63214 67.1174 9.75735 68.2426C10.8826 69.3679 12.4087 70 14 70H58C59.5913 70 61.1174 69.3679 62.2426 68.2426C63.3679 67.1174 64 65.5913 64 64V15.66C64.0004 15.1346 63.8973 14.6142 63.6965 14.1286C63.4958 13.643 63.2013 13.2018 62.83 12.83ZM52 4.83L61.17 14H56C54.9391 14 53.9217 13.5786 53.1716 12.8284C52.4214 12.0783 52 11.0609 52 10V4.83ZM62 64C62 65.0609 61.5786 66.0783 60.8284 66.8284C60.0783 67.5786 59.0609 68 58 68H14C12.9391 68 11.9217 67.5786 11.1716 66.8284C10.4214 66.0783 10 65.0609 10 64V8C10 6.93914 10.4214 5.92172 11.1716 5.17157C11.9217 4.42143 12.9391 4 14 4H50V10C50 11.5913 50.6321 13.1174 51.7574 14.2426C52.8826 15.3679 54.4087 16 56 16H62V64ZM22 26H50V28H22V26ZM22 32H50V34H22V32ZM22 38H50V40H22V38ZM22 44H50V46H22V44Z\"></path></svg>",
@@ -1899,7 +1993,7 @@ var iconsV1 = {
1899
1993
  };
1900
1994
 
1901
1995
  /*!
1902
- * surveyjs - Survey JavaScript library v2.0.5
1996
+ * surveyjs - Survey JavaScript library v2.0.7
1903
1997
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ - http://surveyjs.io/
1904
1998
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
1905
1999
  */
@@ -1929,9 +2023,11 @@ var iconsV2 = {
1929
2023
  "close-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19.5275 18.4675C19.8175 18.7575 19.8175 19.2375 19.5275 19.5275C19.3775 19.6775 19.1875 19.7475 18.9975 19.7475C18.8075 19.7475 18.6175 19.6775 18.4675 19.5275L11.9975 13.0575L5.5275 19.5275C5.3775 19.6775 5.1875 19.7475 4.9975 19.7475C4.8075 19.7475 4.6175 19.6775 4.4675 19.5275C4.1775 19.2375 4.1775 18.7575 4.4675 18.4675L10.9375 11.9975L4.4675 5.5275C4.1775 5.2375 4.1775 4.7575 4.4675 4.4675C4.7575 4.1775 5.2375 4.1775 5.5275 4.4675L11.9975 10.9375L18.4675 4.4675C18.7575 4.1775 19.2375 4.1775 19.5275 4.4675C19.8175 4.7575 19.8175 5.2375 19.5275 5.5275L13.0575 11.9975L19.5275 18.4675Z\"></path></svg>",
1930
2024
  "collapse-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.75 8C11.75 8.41 11.41 8.75 11 8.75H5C4.59 8.75 4.25 8.41 4.25 8C4.25 7.59 4.59 7.25 5 7.25H11C11.41 7.25 11.75 7.59 11.75 8Z\"></path></svg>",
1931
2025
  "collapsedetails-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.75 8C11.75 8.41 11.41 8.75 11 8.75H5C4.59 8.75 4.25 8.41 4.25 8C4.25 7.59 4.59 7.25 5 7.25H11C11.41 7.25 11.75 7.59 11.75 8Z\"></path></svg>",
2026
+ "delete-16x16": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13 3.25H10.75V3C10.75 2.04 9.96 1.25 9 1.25H7C6.04 1.25 5.25 2.04 5.25 3V3.25H3C2.59 3.25 2.25 3.59 2.25 4C2.25 4.41 2.59 4.75 3 4.75H3.25V13C3.25 13.96 4.04 14.75 5 14.75H11C11.96 14.75 12.75 13.96 12.75 13V4.75H13C13.41 4.75 13.75 4.41 13.75 4C13.75 3.59 13.41 3.25 13 3.25ZM6.75 3C6.75 2.86 6.86 2.75 7 2.75H9C9.14 2.75 9.25 2.86 9.25 3V3.25H6.75V3ZM11.25 13C11.25 13.14 11.14 13.25 11 13.25H5C4.86 13.25 4.75 13.14 4.75 13V4.75H11.25V13ZM9.25 6.25C9.66 6.25 10 6.59 10 7V11C10 11.41 9.66 11.75 9.25 11.75C8.84 11.75 8.5 11.41 8.5 11V7C8.5 6.59 8.84 6.25 9.25 6.25ZM7.5 7V11C7.5 11.41 7.16 11.75 6.75 11.75C6.34 11.75 6 11.41 6 11V7C6 6.59 6.34 6.25 6.75 6.25C7.16 6.25 7.5 6.59 7.5 7Z\"></path></svg>",
1932
2027
  "delete-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.75 9V17C12.75 17.41 12.41 17.75 12 17.75C11.59 17.75 11.25 17.41 11.25 17V9C11.25 8.59 11.59 8.25 12 8.25C12.41 8.25 12.75 8.59 12.75 9ZM14.25 9V17C14.25 17.41 14.59 17.75 15 17.75C15.41 17.75 15.75 17.41 15.75 17V9C15.75 8.59 15.41 8.25 15 8.25C14.59 8.25 14.25 8.59 14.25 9ZM9 8.25C8.59 8.25 8.25 8.59 8.25 9V17C8.25 17.41 8.59 17.75 9 17.75C9.41 17.75 9.75 17.41 9.75 17V9C9.75 8.59 9.41 8.25 9 8.25ZM20.75 6C20.75 6.41 20.41 6.75 20 6.75H18.75V18C18.75 19.52 17.52 20.75 16 20.75H8C6.48 20.75 5.25 19.52 5.25 18V6.75H4C3.59 6.75 3.25 6.41 3.25 6C3.25 5.59 3.59 5.25 4 5.25H8.25V4C8.25 3.04 9.04 2.25 10 2.25H14C14.96 2.25 15.75 3.04 15.75 4V5.25H20C20.41 5.25 20.75 5.59 20.75 6ZM9.75 5.25H14.25V4C14.25 3.86 14.14 3.75 14 3.75H10C9.86 3.75 9.75 3.86 9.75 4V5.25ZM17.25 6.75H6.75V18C6.75 18.69 7.31 19.25 8 19.25H16C16.69 19.25 17.25 18.69 17.25 18V6.75Z\"></path></svg>",
1933
2028
  "drag-24x24": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.5 8.75C15.19 8.75 15.75 8.19 15.75 7.5C15.75 6.81 15.19 6.25 14.5 6.25C13.81 6.25 13.25 6.81 13.25 7.5C13.25 8.19 13.81 8.75 14.5 8.75ZM14.5 7.25C14.64 7.25 14.75 7.36 14.75 7.5C14.75 7.78 14.25 7.78 14.25 7.5C14.25 7.36 14.36 7.25 14.5 7.25ZM9.5 6.25C8.81 6.25 8.25 6.81 8.25 7.5C8.25 8.19 8.81 8.75 9.5 8.75C10.19 8.75 10.75 8.19 10.75 7.5C10.75 6.81 10.19 6.25 9.5 6.25ZM9.25 7.5C9.25 7.36 9.36 7.25 9.5 7.25C9.64 7.25 9.75 7.36 9.75 7.5C9.75 7.78 9.25 7.78 9.25 7.5ZM14.5 11.25C13.81 11.25 13.25 11.81 13.25 12.5C13.25 13.19 13.81 13.75 14.5 13.75C15.19 13.75 15.75 13.19 15.75 12.5C15.75 11.81 15.19 11.25 14.5 11.25ZM14.25 12.5C14.25 12.36 14.36 12.25 14.5 12.25C14.64 12.25 14.75 12.36 14.75 12.5C14.75 12.78 14.25 12.78 14.25 12.5ZM9.5 11.25C8.81 11.25 8.25 11.81 8.25 12.5C8.25 13.19 8.81 13.75 9.5 13.75C10.19 13.75 10.75 13.19 10.75 12.5C10.75 11.81 10.19 11.25 9.5 11.25ZM9.25 12.5C9.25 12.36 9.36 12.25 9.5 12.25C9.64 12.25 9.75 12.36 9.75 12.5C9.75 12.78 9.25 12.78 9.25 12.5ZM14.5 16.25C13.81 16.25 13.25 16.81 13.25 17.5C13.25 18.19 13.81 18.75 14.5 18.75C15.19 18.75 15.75 18.19 15.75 17.5C15.75 16.81 15.19 16.25 14.5 16.25ZM14.25 17.5C14.25 17.36 14.36 17.25 14.5 17.25C14.64 17.25 14.75 17.36 14.75 17.5C14.75 17.78 14.25 17.78 14.25 17.5ZM9.5 16.25C8.81 16.25 8.25 16.81 8.25 17.5C8.25 18.19 8.81 18.75 9.5 18.75C10.19 18.75 10.75 18.19 10.75 17.5C10.75 16.81 10.19 16.25 9.5 16.25ZM9.25 17.5C9.25 17.36 9.36 17.25 9.5 17.25C9.64 17.25 9.75 17.36 9.75 17.5C9.75 17.78 9.25 17.78 9.25 17.5Z\"></path></svg>",
1934
2029
  "draghorizontal-24x16": "<svg viewBox=\"0 0 24 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.5 9.25C16.81 9.25 16.25 9.81 16.25 10.5C16.25 11.19 16.81 11.75 17.5 11.75C18.19 11.75 18.75 11.19 18.75 10.5C18.75 9.81 18.19 9.25 17.5 9.25ZM17.25 10.5C17.25 10.36 17.36 10.25 17.5 10.25C17.64 10.25 17.75 10.36 17.75 10.5C17.75 10.78 17.25 10.78 17.25 10.5ZM17.5 6.75C18.19 6.75 18.75 6.19 18.75 5.5C18.75 4.81 18.19 4.25 17.5 4.25C16.81 4.25 16.25 4.81 16.25 5.5C16.25 6.19 16.81 6.75 17.5 6.75ZM17.5 5.25C17.64 5.25 17.75 5.36 17.75 5.5C17.75 5.78 17.25 5.78 17.25 5.5C17.25 5.36 17.36 5.25 17.5 5.25ZM12.5 9.25C11.81 9.25 11.25 9.81 11.25 10.5C11.25 11.19 11.81 11.75 12.5 11.75C13.19 11.75 13.75 11.19 13.75 10.5C13.75 9.81 13.19 9.25 12.5 9.25ZM12.25 10.5C12.25 10.36 12.36 10.25 12.5 10.25C12.64 10.25 12.75 10.36 12.75 10.5C12.75 10.78 12.25 10.78 12.25 10.5ZM12.5 4.25C11.81 4.25 11.25 4.81 11.25 5.5C11.25 6.19 11.81 6.75 12.5 6.75C13.19 6.75 13.75 6.19 13.75 5.5C13.75 4.81 13.19 4.25 12.5 4.25ZM12.25 5.5C12.25 5.36 12.36 5.25 12.5 5.25C12.64 5.25 12.75 5.36 12.75 5.5C12.75 5.78 12.25 5.78 12.25 5.5ZM7.5 9.25C6.81 9.25 6.25 9.81 6.25 10.5C6.25 11.19 6.81 11.75 7.5 11.75C8.19 11.75 8.75 11.19 8.75 10.5C8.75 9.81 8.19 9.25 7.5 9.25ZM7.25 10.5C7.25 10.36 7.36 10.25 7.5 10.25C7.64 10.25 7.75 10.36 7.75 10.5C7.75 10.78 7.25 10.78 7.25 10.5ZM7.5 4.25C6.81 4.25 6.25 4.81 6.25 5.5C6.25 6.19 6.81 6.75 7.5 6.75C8.19 6.75 8.75 6.19 8.75 5.5C8.75 4.81 8.19 4.25 7.5 4.25ZM7.25 5.5C7.25 5.36 7.36 5.25 7.5 5.25C7.64 5.25 7.75 5.36 7.75 5.5C7.75 5.78 7.25 5.78 7.25 5.5Z\"></path></svg>",
2030
+ "editsmall-16x16": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13.1209 3.05249L12.9509 2.88249C11.8809 1.81249 10.1309 1.81249 9.06089 2.88249L3.47089 8.46249C3.37089 8.56249 3.31089 8.68249 3.27089 8.81249L2.27089 12.8125C2.21089 13.0625 2.28089 13.3425 2.47089 13.5225C2.61089 13.6625 2.80089 13.7425 3.00089 13.7425C3.06089 13.7425 3.12089 13.7425 3.18089 13.7225L7.18089 12.7225C7.31089 12.6925 7.43089 12.6225 7.53089 12.5225L13.1209 6.93249C14.1909 5.86249 14.1909 4.11249 13.1209 3.04249V3.05249ZM6.62089 11.3125L4.04089 11.9625L4.69089 9.38249L8.01089 6.06249L9.95089 8.00249L6.63089 11.3225L6.62089 11.3125ZM12.0609 5.87249L11.0009 6.93249L9.06089 4.99249L10.1209 3.93249C10.6109 3.44249 11.4009 3.44249 11.8909 3.93249L12.0609 4.10249C12.5509 4.59249 12.5509 5.38249 12.0609 5.87249Z\"></path></svg>",
1935
2031
  "expand-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.75 8C11.75 8.41 11.41 8.75 11 8.75H8.75V11C8.75 11.41 8.41 11.75 8 11.75C7.59 11.75 7.25 11.41 7.25 11V8.75H5C4.59 8.75 4.25 8.41 4.25 8C4.25 7.59 4.59 7.25 5 7.25H7.25V5C7.25 4.59 7.59 4.25 8 4.25C8.41 4.25 8.75 4.59 8.75 5V7.25H11C11.41 7.25 11.75 7.59 11.75 8Z\"></path></svg>",
1936
2032
  "expanddetails-16x16": "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.75 8C11.75 8.41 11.41 8.75 11 8.75H8.75V11C8.75 11.41 8.41 11.75 8 11.75C7.59 11.75 7.25 11.41 7.25 11V8.75H5C4.59 8.75 4.25 8.41 4.25 8C4.25 7.59 4.59 7.25 5 7.25H7.25V5C7.25 4.59 7.59 4.25 8 4.25C8.41 4.25 8.75 4.59 8.75 5V7.25H11C11.41 7.25 11.75 7.59 11.75 8Z\"></path></svg>",
1937
2033
  "file-72x72": "<svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M62.83 12.83L53.17 3.17C52.7982 2.79866 52.357 2.50421 51.8714 2.30346C51.3858 2.1027 50.8654 1.99959 50.34 2H14C12.4087 2 10.8826 2.63214 9.75735 3.75736C8.63214 4.88258 8 6.4087 8 8V64C8 65.5913 8.63214 67.1174 9.75735 68.2426C10.8826 69.3679 12.4087 70 14 70H58C59.5913 70 61.1174 69.3679 62.2426 68.2426C63.3679 67.1174 64 65.5913 64 64V15.66C64.0004 15.1346 63.8973 14.6142 63.6965 14.1286C63.4958 13.643 63.2013 13.2018 62.83 12.83ZM52 4.83L61.17 14H56C54.9391 14 53.9217 13.5786 53.1716 12.8284C52.4214 12.0783 52 11.0609 52 10V4.83ZM62 64C62 65.0609 61.5786 66.0783 60.8284 66.8284C60.0783 67.5786 59.0609 68 58 68H14C12.9391 68 11.9217 67.5786 11.1716 66.8284C10.4214 66.0783 10 65.0609 10 64V8C10 6.93914 10.4214 5.92172 11.1716 5.17157C11.9217 4.42143 12.9391 4 14 4H50V10C50 11.5913 50.6321 13.1174 51.7574 14.2426C52.8826 15.3679 54.4087 16 56 16H62V64ZM22 26H50V28H22V26ZM22 32H50V34H22V32ZM22 38H50V40H22V38ZM22 44H50V46H22V44Z\"></path></svg>",
@@ -2809,7 +2905,7 @@ class SurveyQuestionRankingItem extends ReactSurveyElement {
2809
2905
  }
2810
2906
  renderElement() {
2811
2907
  let itemContent = ReactElementFactory.Instance.createElement(this.question.itemComponent, { item: this.item, cssClasses: this.cssClasses });
2812
- return (React.createElement("div", { tabIndex: this.itemTabIndex, className: this.itemClass, onKeyDown: this.handleKeydown, onPointerDown: this.handlePointerDown, onPointerUp: this.handlePointerUp, "data-sv-drop-target-ranking-item": this.index },
2908
+ return (React.createElement("div", { id: this.question.getItemId(this.item), tabIndex: this.itemTabIndex, className: this.itemClass, onKeyDown: this.handleKeydown, onPointerDown: this.handlePointerDown, onPointerUp: this.handlePointerUp, "data-sv-drop-target-ranking-item": this.index },
2813
2909
  React.createElement("div", { tabIndex: -1, style: { outline: "none" } },
2814
2910
  React.createElement("div", { className: this.cssClasses.itemGhostNode }),
2815
2911
  React.createElement("div", { className: this.cssClasses.itemContent },
@@ -2878,10 +2974,10 @@ ReactElementFactory.Instance.registerElement("sv-rating-item", (props) => {
2878
2974
 
2879
2975
  class RatingItemStar extends RatingItemBase {
2880
2976
  render() {
2881
- return (React.createElement("label", { onMouseDown: this.handleOnMouseDown, className: this.question.getItemClass(this.item.itemValue), onMouseOver: e => this.question.onItemMouseIn(this.item), onMouseOut: e => this.question.onItemMouseOut(this.item) },
2977
+ return (React.createElement("label", { onMouseDown: this.handleOnMouseDown, className: this.question.getItemClass(this.item.itemValue), onMouseOver: e => this.question.onItemMouseIn(this.item), onMouseOut: e => this.question.onItemMouseOut(this.item), title: this.item.text },
2882
2978
  React.createElement("input", { type: "radio", className: "sv-visuallyhidden", name: this.question.questionName, id: this.question.getInputId(this.index), value: this.item.value, disabled: this.question.isDisabledAttr, readOnly: this.question.isReadOnlyAttr, checked: this.question.value == this.item.value, onClick: this.props.handleOnClick, onChange: () => { }, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-errormessage": this.question.ariaErrormessage }),
2883
- React.createElement(SvgIcon, { className: "sv-star", size: "auto", iconName: this.question.itemStarIcon, title: this.item.text }),
2884
- React.createElement(SvgIcon, { className: "sv-star-2", size: "auto", iconName: this.question.itemStarIconAlt, title: this.item.text })));
2979
+ React.createElement(SvgIcon, { className: "sv-star", size: "auto", iconName: this.question.itemStarIcon }),
2980
+ React.createElement(SvgIcon, { className: "sv-star-2", size: "auto", iconName: this.question.itemStarIconAlt })));
2885
2981
  }
2886
2982
  }
2887
2983
  ReactElementFactory.Instance.registerElement("sv-rating-item-star", (props) => {
@@ -2890,9 +2986,9 @@ ReactElementFactory.Instance.registerElement("sv-rating-item-star", (props) => {
2890
2986
 
2891
2987
  class RatingItemSmiley extends RatingItemBase {
2892
2988
  render() {
2893
- return (React.createElement("label", { onMouseDown: this.handleOnMouseDown, style: this.question.getItemStyle(this.item.itemValue, this.item.highlight), className: this.question.getItemClass(this.item.itemValue), onMouseOver: e => this.question.onItemMouseIn(this.item), onMouseOut: e => this.question.onItemMouseOut(this.item) },
2989
+ return (React.createElement("label", { onMouseDown: this.handleOnMouseDown, style: this.question.getItemStyle(this.item.itemValue, this.item.highlight), className: this.question.getItemClass(this.item.itemValue), onMouseOver: e => this.question.onItemMouseIn(this.item), onMouseOut: e => this.question.onItemMouseOut(this.item), title: this.item.text },
2894
2990
  React.createElement("input", { type: "radio", className: "sv-visuallyhidden", name: this.question.questionName, id: this.question.getInputId(this.index), value: this.item.value, disabled: this.question.isDisabledAttr, readOnly: this.question.isReadOnlyAttr, checked: this.question.value == this.item.value, onClick: this.props.handleOnClick, onChange: () => { }, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-errormessage": this.question.ariaErrormessage }),
2895
- React.createElement(SvgIcon, { size: "auto", iconName: this.question.getItemSmileyIconName(this.item.itemValue), title: this.item.text })));
2991
+ React.createElement(SvgIcon, { size: "auto", iconName: this.question.getItemSmileyIconName(this.item.itemValue) })));
2896
2992
  }
2897
2993
  }
2898
2994
  ReactElementFactory.Instance.registerElement("sv-rating-item-smiley", (props) => {
@@ -3066,18 +3162,20 @@ class SurveyQuestionDropdownBase extends SurveyQuestionUncontrolledElement {
3066
3162
  return this.questionBase.renderedValue;
3067
3163
  }
3068
3164
  renderReadOnlyElement() {
3069
- return React.createElement("div", null, this.question.readOnlyText);
3165
+ if (this.question.locReadOnlyText) {
3166
+ return this.renderLocString(this.question.locReadOnlyText);
3167
+ }
3168
+ else {
3169
+ return null;
3170
+ }
3070
3171
  }
3071
3172
  renderSelect(cssClasses) {
3072
3173
  var _a, _b;
3073
3174
  let selectElement = null;
3074
3175
  if (this.question.isReadOnly) {
3075
- const text = (this.question.selectedItemLocText) ? this.renderLocString(this.question.selectedItemLocText) : "";
3076
3176
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3077
3177
  // @ts-ignore
3078
- selectElement = React.createElement("div", { id: this.question.inputId, "aria-label": this.question.a11y_input_ariaLabel, "aria-labelledby": this.question.a11y_input_ariaLabelledBy, "aria-describedby": this.question.a11y_input_ariaDescribedBy, tabIndex: this.question.isDisabledAttr ? undefined : 0, className: this.question.getControlClass(), ref: (div) => (this.setControl(div)) },
3079
- text,
3080
- this.renderReadOnlyElement());
3178
+ selectElement = React.createElement("div", { id: this.question.inputId, "aria-label": this.question.a11y_input_ariaLabel, "aria-labelledby": this.question.a11y_input_ariaLabelledBy, "aria-describedby": this.question.a11y_input_ariaDescribedBy, tabIndex: this.question.isDisabledAttr ? undefined : 0, className: this.question.getControlClass(), ref: (div) => (this.setControl(div)) }, this.renderReadOnlyElement());
3081
3179
  }
3082
3180
  else {
3083
3181
  selectElement = React.createElement(React.Fragment, null,
@@ -3541,12 +3639,9 @@ class SurveyQuestionFile extends SurveyQuestionElementBase {
3541
3639
  }
3542
3640
  renderFileDecorator() {
3543
3641
  const actionsContainer = this.question.actionsContainerVisible ? React.createElement(SurveyActionBar, { model: this.question.actionsContainer }) : null;
3544
- const noFileChosen = this.question.isEmpty() ? (React.createElement("span", { className: this.question.cssClasses.noFileChosen }, this.question.noFileChosenCaption)) : null;
3545
3642
  return (React.createElement("div", { className: this.question.getFileDecoratorCss() },
3546
- React.createElement("span", { className: this.question.cssClasses.dragAreaPlaceholder }, this.renderLocString(this.question.locRenderedPlaceholder)),
3547
- React.createElement("div", { className: this.question.cssClasses.wrapper },
3548
- actionsContainer,
3549
- noFileChosen)));
3643
+ this.question.showDragAreaPlaceholder ? React.createElement("span", { className: this.question.cssClasses.dragAreaPlaceholder }, this.renderLocString(this.question.locRenderedPlaceholder)) : false,
3644
+ React.createElement("div", { className: this.question.cssClasses.wrapper }, actionsContainer)));
3550
3645
  }
3551
3646
  renderPreview() {
3552
3647
  return ReactElementFactory.Instance.createElement("sv-file-preview", { question: this.question });
@@ -3925,7 +4020,7 @@ class SurveyQuestionText extends SurveyQuestionUncontrolledElement {
3925
4020
  // disabled={this.isDisplayMode}
3926
4021
  disabled: this.question.isDisabledAttr, readOnly: this.question.isReadOnlyAttr, className: inputClass, type: this.question.inputType,
3927
4022
  //ref={this.controlRef}
3928
- ref: (input) => (this.setControl(input)), style: this.question.inputStyle, maxLength: this.question.getMaxLength(), min: this.question.renderedMin, max: this.question.renderedMax, step: this.question.renderedStep, size: this.question.inputSize, placeholder: placeholder, list: this.question.dataListId, autoComplete: this.question.autocomplete, onBlur: (event) => { this.question.onBlur(event); }, onFocus: (event) => { this.question.onFocus(event); }, onChange: this.question.onChange, onKeyUp: this.question.onKeyUp, onKeyDown: this.question.onKeyDown, onCompositionUpdate: (event) => this.question.onCompositionUpdate(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 }),
4023
+ ref: (input) => (this.setControl(input)), style: this.question.inputStyle, maxLength: this.question.getMaxLength(), min: this.question.renderedMin, max: this.question.renderedMax, step: this.question.renderedStep, size: this.question.inputSize, placeholder: placeholder, list: this.question.dataListId, autoComplete: this.question.autocomplete, onBlur: (event) => { this.question.onBlur(event); }, onFocus: (event) => { this.question.onFocus(event); }, onChange: this.question.onChange, onClick: this.question.readOnlyBlocker, onPointerDown: this.question.readOnlyBlocker, onKeyUp: this.question.onKeyUp, onKeyDown: this.question.onKeyDown, onCompositionUpdate: (event) => this.question.onCompositionUpdate(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 }),
3929
4024
  counter));
3930
4025
  }
3931
4026
  renderElement() {
@@ -4549,12 +4644,7 @@ class SurveyQuestionMatrixDynamic extends SurveyQuestionMatrixDropdownBase {
4549
4644
  return this.renderAddRowButton(cssClasses);
4550
4645
  }
4551
4646
  renderNoRowsContent(cssClasses) {
4552
- const text = this.renderLocString(this.matrix.locNoRowsText);
4553
- const textDiv = React.createElement("div", { className: cssClasses.noRowsText }, text);
4554
- const btn = this.matrix.renderedTable.showAddRow ? this.renderAddRowButton(cssClasses, true) : undefined;
4555
- return (React.createElement("div", { className: cssClasses.noRowsSection },
4556
- textDiv,
4557
- btn));
4647
+ return ReactElementFactory.Instance.createElement("sv-placeholder-matrixdynamic", { cssClasses: cssClasses, question: this.matrix });
4558
4648
  }
4559
4649
  renderAddRowButton(cssClasses, isEmptySection = false) {
4560
4650
  return ReactElementFactory.Instance.createElement("sv-matrixdynamic-add-btn", {
@@ -4584,9 +4674,29 @@ class SurveyQuestionMatrixDynamicAddButton extends ReactSurveyElement {
4584
4674
  return (this.props.isEmptySection ? addButton : React.createElement("div", { className: this.props.cssClasses.footer }, addButton));
4585
4675
  }
4586
4676
  }
4587
- ReactElementFactory.Instance.registerElement("sv-matrixdynamic-add-btn", (props) => {
4588
- return React.createElement(SurveyQuestionMatrixDynamicAddButton, props);
4589
- });
4677
+ class SurveyQuestionMatrixDynamicPlaceholder extends ReactSurveyElement {
4678
+ constructor(props) {
4679
+ super(props);
4680
+ }
4681
+ renderElement() {
4682
+ const cssClasses = this.props.cssClasses;
4683
+ const matrix = this.props.question;
4684
+ const showAddButton = matrix.renderedTable.showAddRow;
4685
+ const text = this.renderLocString(matrix.locNoRowsText);
4686
+ const textDiv = React.createElement("div", { className: cssClasses.noRowsText }, text);
4687
+ const btn = showAddButton ? this.renderAddRowButton(cssClasses, matrix) : undefined;
4688
+ return (React.createElement("div", { className: cssClasses.noRowsSection },
4689
+ textDiv,
4690
+ btn));
4691
+ }
4692
+ renderAddRowButton(cssClasses, question) {
4693
+ return ReactElementFactory.Instance.createElement("sv-matrixdynamic-add-btn", {
4694
+ question: question, cssClasses: cssClasses, isEmptySection: true
4695
+ });
4696
+ }
4697
+ }
4698
+ ReactElementFactory.Instance.registerElement("sv-matrixdynamic-add-btn", (props) => { return React.createElement(SurveyQuestionMatrixDynamicAddButton, props); });
4699
+ ReactElementFactory.Instance.registerElement("sv-placeholder-matrixdynamic", (props) => { return React.createElement(SurveyQuestionMatrixDynamicPlaceholder, props); });
4590
4700
 
4591
4701
  class SurveyQuestionPanelDynamic extends SurveyQuestionElementBase {
4592
4702
  constructor(props) {
@@ -4622,15 +4732,16 @@ class SurveyQuestionPanelDynamic extends SurveyQuestionElementBase {
4622
4732
  }
4623
4733
  renderElement() {
4624
4734
  const panels = [];
4735
+ const cssClasses = this.question.cssClasses;
4625
4736
  this.question.renderedPanels.forEach((panel, index) => {
4626
- panels.push(React.createElement(SurveyQuestionPanelDynamicItem, { key: panel.id, element: panel, question: this.question, index: index, cssClasses: this.question.cssClasses, isDisplayMode: this.isDisplayMode, creator: this.creator }));
4737
+ panels.push(React.createElement(SurveyQuestionPanelDynamicItem, { key: panel.id, element: panel, question: this.question, index: index, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode, creator: this.creator }));
4627
4738
  });
4628
4739
  const rangeTop = this.question.isRangeShowing && this.question.isProgressTopShowing
4629
4740
  ? this.renderRange()
4630
4741
  : null;
4631
4742
  const navV2 = this.renderNavigatorV2();
4632
- const noEntriesPlaceholder = this.renderPlaceholder();
4633
- return (React.createElement("div", { className: this.question.cssClasses.root },
4743
+ const noEntriesPlaceholder = this.renderPlaceholder(cssClasses);
4744
+ return (React.createElement("div", { className: cssClasses.root },
4634
4745
  this.question.hasTabbedMenu ? React.createElement("div", { className: this.question.getTabsContainerCss() },
4635
4746
  React.createElement(SurveyActionBar, { model: this.question.tabbedMenu })) : null,
4636
4747
  noEntriesPlaceholder,
@@ -4657,12 +4768,9 @@ class SurveyQuestionPanelDynamic extends SurveyQuestionElementBase {
4657
4768
  this.question.footerToolbar.visibleActions.length ? (React.createElement("div", { className: this.question.cssClasses.footerButtonsContainer },
4658
4769
  React.createElement(SurveyActionBar, { model: this.question.footerToolbar }))) : null));
4659
4770
  }
4660
- renderPlaceholder() {
4661
- if (this.question.getShowNoEntriesPlaceholder()) {
4662
- return (React.createElement("div", { className: this.question.cssClasses.noEntriesPlaceholder },
4663
- React.createElement("span", null, this.renderLocString(this.question.locNoEntriesText)),
4664
- this.renderAddRowButton()));
4665
- }
4771
+ renderPlaceholder(cssClasses) {
4772
+ if (this.question.getShowNoEntriesPlaceholder())
4773
+ return ReactElementFactory.Instance.createElement("sv-placeholder-paneldynamic", { cssClasses: cssClasses, question: this.question });
4666
4774
  return null;
4667
4775
  }
4668
4776
  }
@@ -4702,6 +4810,24 @@ class SurveyQuestionPanelDynamicItem extends SurveyPanel {
4702
4810
  ReactQuestionFactory.Instance.registerQuestion("paneldynamic", props => {
4703
4811
  return React.createElement(SurveyQuestionPanelDynamic, props);
4704
4812
  });
4813
+ class SurveyQuestionPanelDynamicPlaceholder extends ReactSurveyElement {
4814
+ constructor(props) {
4815
+ super(props);
4816
+ }
4817
+ renderElement() {
4818
+ const cssClasses = this.props.cssClasses;
4819
+ const question = this.props.question;
4820
+ return (React.createElement("div", { className: cssClasses.noEntriesPlaceholder },
4821
+ React.createElement("span", null, this.renderLocString(question.locNoEntriesText)),
4822
+ this.renderAddRowButton(question)));
4823
+ }
4824
+ renderAddRowButton(question) {
4825
+ return ReactElementFactory.Instance.createElement("sv-paneldynamic-add-btn", {
4826
+ data: { question: question }
4827
+ });
4828
+ }
4829
+ }
4830
+ ReactElementFactory.Instance.registerElement("sv-placeholder-paneldynamic", (props) => { return React.createElement(SurveyQuestionPanelDynamicPlaceholder, props); });
4705
4831
 
4706
4832
  class SurveyProgress extends SurveyNavigationBase {
4707
4833
  constructor(props) {
@@ -5380,7 +5506,7 @@ class SurveyQuestionSignaturePad extends SurveyQuestionElementBase {
5380
5506
  renderBackgroundImage() {
5381
5507
  if (!this.question.backgroundImage)
5382
5508
  return null;
5383
- return React.createElement("img", { className: this.question.cssClasses.backgroundImage, src: this.question.backgroundImage, style: { width: this.question.renderedCanvasWidth } });
5509
+ return React.createElement("img", { className: this.question.cssClasses.backgroundImage, src: this.question.backgroundImage, style: { width: this.question.renderedCanvasWidth }, role: "presentation" });
5384
5510
  }
5385
5511
  renderLoadingIndicator() {
5386
5512
  return React.createElement("div", { className: this.question.cssClasses.loadingIndicator },
@@ -5418,6 +5544,9 @@ class SurveyQuestionButtonGroup extends SurveyQuestionElementBase {
5418
5544
  });
5419
5545
  }
5420
5546
  }
5547
+ ReactQuestionFactory.Instance.registerQuestion("buttongroup", (props) => {
5548
+ return React.createElement(SurveyQuestionButtonGroup, props);
5549
+ });
5421
5550
  class SurveyButtonGroupItem extends SurveyElementBase {
5422
5551
  constructor(props) {
5423
5552
  super(props);
@@ -5467,6 +5596,21 @@ class SurveyButtonGroupItem extends SurveyElementBase {
5467
5596
  // return React.createElement(SurveyQuestionButtonGroup, props);
5468
5597
  // });
5469
5598
 
5599
+ class SurveyQuestionButtonGroupDropdown extends SurveyQuestionDropdownBase {
5600
+ constructor(props) {
5601
+ super(props);
5602
+ }
5603
+ renderElement() {
5604
+ const cssClasses = this.question.cssClasses;
5605
+ const select = this.renderSelect(cssClasses);
5606
+ return (React.createElement("div", { className: this.question.cssClasses.rootDropdown }, select));
5607
+ }
5608
+ }
5609
+ ReactQuestionFactory.Instance.registerQuestion("sv-buttongroup-dropdown", (props) => {
5610
+ return React.createElement(SurveyQuestionButtonGroupDropdown, props);
5611
+ });
5612
+ RendererFactory.Instance.registerRenderer("buttongroup", "dropdown", "sv-buttongroup-dropdown");
5613
+
5470
5614
  class SurveyQuestionCustom extends SurveyQuestionUncontrolledElement {
5471
5615
  constructor(props) {
5472
5616
  super(props);
@@ -5933,7 +6077,7 @@ ReactElementFactory.Instance.registerElement(LocalizableString.editableRenderer,
5933
6077
  return React.createElement(SurveyLocStringEditor, props);
5934
6078
  });
5935
6079
 
5936
- checkLibraryVersion(`${"2.0.5"}`, "survey-react-ui");
6080
+ checkLibraryVersion(`${"2.0.7"}`, "survey-react-ui");
5937
6081
 
5938
- 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, Survey, SurveyActionBar, SurveyElementBase, SurveyElementErrors, SurveyFileChooseButton, SurveyFilePreview, SurveyFlowPanel, SurveyHeader, SurveyLocStringEditor, SurveyLocStringViewer, SurveyNavigationBase, SurveyNavigationButton, SurveyPage, SurveyPanel, SurveyProgress, SurveyProgressButtons, SurveyProgressToc, SurveyQuestion, SurveyQuestionAndErrorsCell, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionButtonGroup, 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, SurveyQuestionTagbox, SurveyQuestionTagboxItem, SurveyQuestionText, SurveyRow, SurveyTimerPanel, SurveyWindow, SvgBundleComponent, SvgIcon, TagboxFilterString, TitleActions, TitleElement, attachKey2click };
6082
+ 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, 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, SurveyQuestionTagbox, SurveyQuestionTagboxItem, SurveyQuestionText, SurveyRow, SurveyTimerPanel, SurveyWindow, SvgBundleComponent, SvgIcon, TagboxFilterString, TitleActions, TitleElement, attachKey2click };
5939
6083
  //# sourceMappingURL=survey-react-ui.mjs.map