survey-react 1.12.22 → 1.12.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/modern.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.22
2
+ * surveyjs - Survey JavaScript library v1.12.23
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
  */
package/modern.min.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.22
2
+ * surveyjs - Survey JavaScript library v1.12.23
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
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "survey-react",
3
- "version": "1.12.22",
3
+ "version": "1.12.23",
4
4
  "description": "survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.",
5
5
  "keywords": [
6
6
  "Survey",
package/survey.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.22
2
+ * surveyjs - Survey JavaScript library v1.12.23
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
  */
package/survey.min.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.22
2
+ * surveyjs - Survey JavaScript library v1.12.23
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
  */
package/survey.react.d.ts CHANGED
@@ -1723,6 +1723,8 @@ declare module "packages/survey-core/src/defaultCss/defaultV2Css" {
1723
1723
  progressBtnIcon: string;
1724
1724
  noEntriesPlaceholder: string;
1725
1725
  compact: string;
1726
+ tabsContainer: string;
1727
+ tabsContainerWithHeader: string;
1726
1728
  tabsRoot: string;
1727
1729
  tabsLeft: string;
1728
1730
  tabsRight: string;
@@ -2719,9 +2721,11 @@ declare module "packages/survey-core/src/textPreProcessor" {
2719
2721
  private get hasAllValuesOnLastRunValue();
2720
2722
  private set hasAllValuesOnLastRunValue(value);
2721
2723
  onProcess: (textValue: TextPreProcessorValue) => void;
2722
- process(text: string, returnDisplayValue?: boolean, doEncoding?: boolean): string;
2724
+ process(text: string, returnDisplayValue?: boolean, doEncoding?: boolean, replaceUndefinedValues?: boolean): string;
2723
2725
  processValue(name: string, returnDisplayValue: boolean): TextPreProcessorValue;
2724
2726
  get hasAllValuesOnLastRun(): boolean;
2727
+ processText(text: string, returnDisplayValue: boolean): string;
2728
+ processTextEx(params: ITextProcessorProp): ITextProcessorResult;
2725
2729
  private getItems;
2726
2730
  private isValidItemName;
2727
2731
  private getName;
@@ -2741,7 +2745,7 @@ declare module "packages/survey-core/src/textPreProcessor" {
2741
2745
  private getProcessedTextValue;
2742
2746
  processText(text: string, returnDisplayValue: boolean): string;
2743
2747
  processTextEx(params: ITextProcessorProp): ITextProcessorResult;
2744
- private processTextCore;
2748
+ private addTextPreProcessor;
2745
2749
  }
2746
2750
  }
2747
2751
  declare module "packages/survey-core/src/error" {
@@ -6600,7 +6604,7 @@ declare module "packages/survey-core/src/question_paneldynamic" {
6600
6604
  import { PanelModel } from "packages/survey-core/src/panel";
6601
6605
  import { SurveyError } from "packages/survey-core/src/survey-error";
6602
6606
  import { ActionContainer } from "packages/survey-core/src/actions/container";
6603
- import { IAction } from "packages/survey-core/src/actions/action";
6607
+ import { Action, IAction } from "packages/survey-core/src/actions/action";
6604
6608
  import { AdaptiveActionContainer } from "packages/survey-core/src/actions/adaptive-container";
6605
6609
  import { ITheme } from "packages/survey-core/src/themes";
6606
6610
  import { AnimationProperty, IAnimationGroupConsumer } from "packages/survey-core/src/utils/animation";
@@ -6613,6 +6617,13 @@ declare module "packages/survey-core/src/question_paneldynamic" {
6613
6617
  getSurvey(): ISurvey;
6614
6618
  getRootData(): ISurveyData;
6615
6619
  }
6620
+ interface IPanelDynamicTabbedMenuItem extends IAction {
6621
+ panelId: string;
6622
+ }
6623
+ class PanelDynamicTabbedMenuItem extends Action {
6624
+ panelId: string;
6625
+ constructor(innerItem: IPanelDynamicTabbedMenuItem);
6626
+ }
6616
6627
  export class QuestionPanelDynamicItem implements ISurveyData, ISurveyImpl {
6617
6628
  static ItemVariableName: string;
6618
6629
  static ParentItemVariableName: string;
@@ -7068,7 +7079,6 @@ declare module "packages/survey-core/src/question_paneldynamic" {
7068
7079
  set tabAlign(val: "center" | "left" | "right");
7069
7080
  get isRenderModeList(): boolean;
7070
7081
  get isRenderModeTab(): boolean;
7071
- get hasTitleOnLeftTop(): boolean;
7072
7082
  setVisibleIndex(value: number): number;
7073
7083
  private setPanelVisibleIndex;
7074
7084
  /**
@@ -7242,6 +7252,7 @@ declare module "packages/survey-core/src/question_paneldynamic" {
7242
7252
  get progress(): string;
7243
7253
  getRootCss(): string;
7244
7254
  get cssHeader(): string;
7255
+ getTabsContainerCss(): string;
7245
7256
  getPanelWrapperCss(panel: PanelModel): string;
7246
7257
  getPanelRemoveButtonCss(): string;
7247
7258
  getAddButtonCss(): string;
@@ -7255,9 +7266,9 @@ declare module "packages/survey-core/src/question_paneldynamic" {
7255
7266
  get locNoEntriesText(): LocalizableString;
7256
7267
  getShowNoEntriesPlaceholder(): boolean;
7257
7268
  needResponsiveWidth(): boolean;
7258
- private additionalTitleToolbarValue;
7259
- get hasAdditionalTitleToolbar(): boolean;
7260
- protected getAdditionalTitleToolbar(): AdaptiveActionContainer | null;
7269
+ private tabbedMenuValue;
7270
+ get hasTabbedMenu(): boolean;
7271
+ get tabbedMenu(): AdaptiveActionContainer<PanelDynamicTabbedMenuItem> | null;
7261
7272
  private footerToolbarValue;
7262
7273
  get footerToolbar(): ActionContainer;
7263
7274
  legacyNavigation: boolean;
@@ -7265,7 +7276,7 @@ declare module "packages/survey-core/src/question_paneldynamic" {
7265
7276
  private updateFooterActions;
7266
7277
  private initFooterToolbar;
7267
7278
  private createTabByPanel;
7268
- private getAdditionalTitleToolbarCss;
7279
+ private getTabbedMenuCss;
7269
7280
  private updateTabToolbarItemsPressedState;
7270
7281
  private updateTabToolbar;
7271
7282
  private addTabFromToolbar;
@@ -15111,6 +15122,7 @@ declare module "packages/survey-core/src/base-interfaces" {
15111
15122
  returnDisplayValue?: boolean;
15112
15123
  doEncoding?: boolean;
15113
15124
  runAtDesign?: boolean;
15125
+ replaceUndefinedValues?: boolean;
15114
15126
  }
15115
15127
  export interface ITextProcessorResult {
15116
15128
  text: string;
@@ -15855,7 +15867,7 @@ declare module "packages/survey-core/src/localizablestring" {
15855
15867
  set localizationName(val: string);
15856
15868
  private _allowLineBreaks;
15857
15869
  get allowLineBreaks(): boolean;
15858
- onGetTextCallback: (str: string) => string;
15870
+ onGetTextCallback: (str: string, nonProcessedText?: string) => string;
15859
15871
  storeDefaultText: boolean;
15860
15872
  serializeCallBackText: boolean;
15861
15873
  onGetLocalizationTextCallback: (str: string) => string;
package/survey.react.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.12.22
2
+ * surveyjs - Survey JavaScript library v1.12.23
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
  */
@@ -4466,12 +4466,14 @@ var JsonMetadata = /** @class */ (function () {
4466
4466
  return;
4467
4467
  var schemaProperties = classSchema.properties;
4468
4468
  var requiredProps = [];
4469
- if (classInfo.name === "question" || classInfo.name === "panel") {
4469
+ if (classInfo.name === "question") {
4470
4470
  schemaProperties.type = { type: "string" };
4471
4471
  requiredProps.push("type");
4472
4472
  }
4473
4473
  for (var i = 0; i < classInfo.properties.length; i++) {
4474
4474
  var prop = classInfo.properties[i];
4475
+ if (prop.isSerializable === false)
4476
+ continue;
4475
4477
  if (!!classInfo.parentName && !!Serializer.findProperty(classInfo.parentName, prop.name))
4476
4478
  continue;
4477
4479
  schemaProperties[prop.name] = this.generateSchemaProperty(prop, schemaDef, isRoot);
@@ -15434,15 +15436,13 @@ var localizablestring_LocalizableString = /** @class */ (function () {
15434
15436
  configurable: true
15435
15437
  });
15436
15438
  LocalizableString.prototype.calcText = function () {
15437
- var res = this.pureText;
15438
- if (res &&
15439
- this.owner &&
15440
- this.owner.getProcessedText &&
15441
- res.indexOf("{") > -1) {
15439
+ var pureText = this.pureText;
15440
+ var res = pureText;
15441
+ if (res && this.owner && this.owner.getProcessedText && res.indexOf("{") > -1) {
15442
15442
  res = this.owner.getProcessedText(res);
15443
15443
  }
15444
15444
  if (this.onGetTextCallback)
15445
- res = this.onGetTextCallback(res);
15445
+ res = this.onGetTextCallback(res, pureText);
15446
15446
  return res;
15447
15447
  };
15448
15448
  Object.defineProperty(LocalizableString.prototype, "pureText", {
@@ -19063,8 +19063,8 @@ var question_Question = /** @class */ (function (_super) {
19063
19063
  var _this = this;
19064
19064
  var locTitleValue = _super.prototype.createLocTitleProperty.call(this);
19065
19065
  locTitleValue.storeDefaultText = true;
19066
- locTitleValue.onGetTextCallback = function (text) {
19067
- if (!text) {
19066
+ locTitleValue.onGetTextCallback = function (text, nonProcessedText) {
19067
+ if (!text && !nonProcessedText) {
19068
19068
  text = _this.getDefaultTitle();
19069
19069
  }
19070
19070
  if (!_this.survey)
@@ -21435,8 +21435,10 @@ var question_Question = /** @class */ (function (_super) {
21435
21435
  }
21436
21436
  if (!values)
21437
21437
  values = this.defaultValueExpression ? this.data.getFilteredValues() : {};
21438
- if (!properties)
21438
+ if (!properties) {
21439
21439
  properties = this.defaultValueExpression ? this.data.getFilteredProperties() : {};
21440
+ properties["question"] = this;
21441
+ }
21440
21442
  if (!!runner && runner.canRun) {
21441
21443
  runner.onRunComplete = function (res) {
21442
21444
  if (res == undefined)
@@ -24529,9 +24531,7 @@ var textPreProcessor_TextPreProcessor = /** @class */ (function () {
24529
24531
  enumerable: false,
24530
24532
  configurable: true
24531
24533
  });
24532
- TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding) {
24533
- if (returnDisplayValue === void 0) { returnDisplayValue = false; }
24534
- if (doEncoding === void 0) { doEncoding = false; }
24534
+ TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding, replaceUndefinedValues) {
24535
24535
  this.hasAllValuesOnLastRunValue = true;
24536
24536
  if (!text)
24537
24537
  return text;
@@ -24540,28 +24540,28 @@ var textPreProcessor_TextPreProcessor = /** @class */ (function () {
24540
24540
  var items = this.getItems(text);
24541
24541
  for (var i = items.length - 1; i >= 0; i--) {
24542
24542
  var item = items[i];
24543
- var name = this.getName(text.substring(item.start + 1, item.end));
24544
- if (!name)
24545
- continue;
24546
- var textValue = new TextPreProcessorValue(name, returnDisplayValue);
24547
- this.onProcess(textValue);
24548
- if (!textValue.isExists) {
24549
- if (textValue.canProcess) {
24550
- this.hasAllValuesOnLastRunValue = false;
24543
+ var name_1 = this.getName(text.substring(item.start + 1, item.end));
24544
+ if (!!name_1) {
24545
+ var textValue = new TextPreProcessorValue(name_1, returnDisplayValue === true);
24546
+ this.onProcess(textValue);
24547
+ if (!textValue.isExists) {
24548
+ if (textValue.canProcess) {
24549
+ this.hasAllValuesOnLastRunValue = false;
24550
+ }
24551
+ }
24552
+ if (textValue.isExists || replaceUndefinedValues) {
24553
+ if (helpers_Helpers.isValueEmpty(textValue.value)) {
24554
+ this.hasAllValuesOnLastRunValue = false;
24555
+ }
24556
+ var replacedValue = !helpers_Helpers.isValueEmpty(textValue.value)
24557
+ ? textValue.value
24558
+ : "";
24559
+ if (doEncoding) {
24560
+ replacedValue = encodeURIComponent(replacedValue);
24561
+ }
24562
+ text = text.substring(0, item.start) + replacedValue + text.substring(item.end + 1);
24551
24563
  }
24552
- continue;
24553
- }
24554
- if (helpers_Helpers.isValueEmpty(textValue.value)) {
24555
- this.hasAllValuesOnLastRunValue = false;
24556
- }
24557
- var replacedValue = !helpers_Helpers.isValueEmpty(textValue.value)
24558
- ? textValue.value
24559
- : "";
24560
- if (doEncoding) {
24561
- replacedValue = encodeURIComponent(replacedValue);
24562
24564
  }
24563
- text =
24564
- text.substring(0, item.start) + replacedValue + text.substring(item.end + 1);
24565
24565
  }
24566
24566
  return text;
24567
24567
  };
@@ -24573,12 +24573,19 @@ var textPreProcessor_TextPreProcessor = /** @class */ (function () {
24573
24573
  return textValue;
24574
24574
  };
24575
24575
  Object.defineProperty(TextPreProcessor.prototype, "hasAllValuesOnLastRun", {
24576
- get: function () {
24577
- return !!this.hasAllValuesOnLastRunValue;
24578
- },
24576
+ get: function () { return !!this.hasAllValuesOnLastRunValue; },
24579
24577
  enumerable: false,
24580
24578
  configurable: true
24581
24579
  });
24580
+ TextPreProcessor.prototype.processText = function (text, returnDisplayValue) {
24581
+ return this.process(text, returnDisplayValue);
24582
+ };
24583
+ TextPreProcessor.prototype.processTextEx = function (params) {
24584
+ var res = { hasAllValuesOnLastRun: true, text: params.text };
24585
+ res.text = this.process(params.text, params.returnDisplayValue, params.doEncoding, params.replaceUndefinedValues);
24586
+ res.hasAllValuesOnLastRun = this.hasAllValuesOnLastRun;
24587
+ return res;
24588
+ };
24582
24589
  TextPreProcessor.prototype.getItems = function (text) {
24583
24590
  var items = [];
24584
24591
  var length = text.length;
@@ -24684,27 +24691,31 @@ var textPreProcessor_QuestionTextProcessor = /** @class */ (function () {
24684
24691
  textValue.value = new conditionProcessValue_ProcessValue().getValue(textValue.name, values);
24685
24692
  };
24686
24693
  QuestionTextProcessor.prototype.processText = function (text, returnDisplayValue) {
24687
- if (this.survey && this.survey.isDesignMode)
24688
- return text;
24689
- text = this.textPreProcessor.process(text, returnDisplayValue);
24690
- text = this.processTextCore(this.getParentTextProcessor(), text, returnDisplayValue);
24691
- return this.processTextCore(this.survey, text, returnDisplayValue);
24694
+ var params = { text: text, returnDisplayValue: returnDisplayValue };
24695
+ return this.processTextEx(params).text;
24692
24696
  };
24693
24697
  QuestionTextProcessor.prototype.processTextEx = function (params) {
24694
- params.text = this.processText(params.text, params.returnDisplayValue);
24695
- var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;
24698
+ var _a;
24696
24699
  var res = { hasAllValuesOnLastRun: true, text: params.text };
24697
- if (this.survey) {
24698
- res = this.survey.processTextEx(params);
24700
+ if (!params.runAtDesign && ((_a = this.survey) === null || _a === void 0 ? void 0 : _a.isDesignMode))
24701
+ return res;
24702
+ var processors = new Array();
24703
+ this.addTextPreProcessor(processors, this.textPreProcessor);
24704
+ this.addTextPreProcessor(processors, this.getParentTextProcessor());
24705
+ this.addTextPreProcessor(processors, this.survey);
24706
+ for (var i = 0; i < processors.length; i++) {
24707
+ var processor = processors[i];
24708
+ params.text = res.text;
24709
+ var processorRes = processor.processTextEx(params);
24710
+ res.text = processorRes.text;
24711
+ res.hasAllValuesOnLastRun = res.hasAllValuesOnLastRun && processorRes.hasAllValuesOnLastRun;
24699
24712
  }
24700
- res.hasAllValuesOnLastRun =
24701
- res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;
24702
24713
  return res;
24703
24714
  };
24704
- QuestionTextProcessor.prototype.processTextCore = function (textProcessor, text, returnDisplayValue) {
24705
- if (!textProcessor)
24706
- return text;
24707
- return textProcessor.processText(text, returnDisplayValue);
24715
+ QuestionTextProcessor.prototype.addTextPreProcessor = function (list, textProcessor) {
24716
+ if (!textProcessor || list.indexOf(textProcessor) > -1)
24717
+ return;
24718
+ list.push(textProcessor);
24708
24719
  };
24709
24720
  return QuestionTextProcessor;
24710
24721
  }());
@@ -25638,9 +25649,10 @@ var question_custom_QuestionCompositeModel = /** @class */ (function (_super) {
25638
25649
  }
25639
25650
  this.initElement(res);
25640
25651
  res.readOnly = this.isReadOnly;
25641
- res.questions.forEach(function (q) { return q.onUpdateCssClassesCallback = function (css) {
25642
- _this.onUpdateQuestionCssClasses(q, css);
25643
- }; });
25652
+ res.questions.forEach(function (q) {
25653
+ q.setParentQuestion(_this);
25654
+ q.onUpdateCssClassesCallback = function (css) { _this.onUpdateQuestionCssClasses(q, css); };
25655
+ });
25644
25656
  this.setAfterRenderCallbacks(res);
25645
25657
  return res;
25646
25658
  };
@@ -28609,11 +28621,10 @@ var question_matrixdropdownrendered_QuestionMatrixDropdownRenderedTable = /** @c
28609
28621
  if (this.matrix.isMobile) {
28610
28622
  actions.unshift(new action_Action({
28611
28623
  id: "show-detail-mobile",
28612
- title: "Show Details",
28624
+ title: new ComputedUpdater(function () { return row.isDetailPanelShowing ? _this.matrix.getLocalizationString("hideDetails") : _this.matrix.getLocalizationString("showDetails"); }),
28613
28625
  showTitle: true,
28614
28626
  location: "end",
28615
28627
  action: function (context) {
28616
- context.title = row.isDetailPanelShowing ? _this.matrix.getLocalizationString("showDetails") : _this.matrix.getLocalizationString("hideDetails");
28617
28628
  row.showHideDetailPanelClick();
28618
28629
  },
28619
28630
  }));
@@ -34291,6 +34302,8 @@ var defaultV2Css = {
34291
34302
  progressBtnIcon: "icon-progressbuttonv2",
34292
34303
  noEntriesPlaceholder: "sd-paneldynamic__placeholder sd-question__placeholder",
34293
34304
  compact: "sd-element--with-frame sd-element--compact",
34305
+ tabsContainer: "sd-paneldynamic__tabs-container",
34306
+ tabsContainerWithHeader: "sd-paneldynamic__tabs-container--with-header",
34294
34307
  tabsRoot: "sd-tabs-toolbar",
34295
34308
  tabsLeft: "sd-tabs-toolbar--left",
34296
34309
  tabsRight: "sd-tabs-toolbar--right",
@@ -48065,7 +48078,7 @@ var survey_SurveyModel = /** @class */ (function (_super) {
48065
48078
  var doEncoding = params.doEncoding === undefined ? settings.web.encodeUrlParams : params.doEncoding;
48066
48079
  var text = params.text;
48067
48080
  if (params.runAtDesign || !this.isDesignMode) {
48068
- text = this.textPreProcessor.process(text, params.returnDisplayValue === true, doEncoding);
48081
+ text = this.textPreProcessor.process(text, params.returnDisplayValue === true, doEncoding, params.replaceUndefinedValues);
48069
48082
  }
48070
48083
  var res = { text: text, hasAllValuesOnLastRun: true };
48071
48084
  res.hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;
@@ -66874,6 +66887,13 @@ var QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {
66874
66887
  };
66875
66888
  return QuestionPanelDynamicItemTextProcessor;
66876
66889
  }(textPreProcessor_QuestionTextProcessor));
66890
+ var PanelDynamicTabbedMenuItem = /** @class */ (function (_super) {
66891
+ question_paneldynamic_extends(PanelDynamicTabbedMenuItem, _super);
66892
+ function PanelDynamicTabbedMenuItem(innerItem) {
66893
+ return _super.call(this, innerItem) || this;
66894
+ }
66895
+ return PanelDynamicTabbedMenuItem;
66896
+ }(action_Action));
66877
66897
  var question_paneldynamic_QuestionPanelDynamicItem = /** @class */ (function () {
66878
66898
  function QuestionPanelDynamicItem(data, panel) {
66879
66899
  this.data = data;
@@ -68257,7 +68277,7 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
68257
68277
  set: function (val) {
68258
68278
  this.setPropertyValue("tabAlign", val);
68259
68279
  if (this.isRenderModeTab) {
68260
- this.additionalTitleToolbar.containerCss = this.getAdditionalTitleToolbarCss();
68280
+ this.tabbedMenu.containerCss = this.getTabbedMenuCss();
68261
68281
  }
68262
68282
  },
68263
68283
  enumerable: false,
@@ -68277,18 +68297,6 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
68277
68297
  enumerable: false,
68278
68298
  configurable: true
68279
68299
  });
68280
- Object.defineProperty(QuestionPanelDynamicModel.prototype, "hasTitleOnLeftTop", {
68281
- get: function () {
68282
- if (this.isRenderModeTab && this.visiblePanelCount > 0)
68283
- return true;
68284
- if (!this.hasTitle)
68285
- return false;
68286
- var location = this.getTitleLocation();
68287
- return location === "left" || location === "top";
68288
- },
68289
- enumerable: false,
68290
- configurable: true
68291
- });
68292
68300
  QuestionPanelDynamicModel.prototype.setVisibleIndex = function (value) {
68293
68301
  if (!this.isVisible)
68294
68302
  return 0;
@@ -68675,8 +68683,8 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
68675
68683
  for (var i = 0; i < panels.length; i++) {
68676
68684
  panels[i].locStrsChanged();
68677
68685
  }
68678
- if (this.additionalTitleToolbar) {
68679
- this.additionalTitleToolbar.locStrsChanged();
68686
+ if (this.tabbedMenu) {
68687
+ this.tabbedMenu.locStrsChanged();
68680
68688
  }
68681
68689
  };
68682
68690
  QuestionPanelDynamicModel.prototype.clearIncorrectValues = function () {
@@ -69412,14 +69420,16 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69412
69420
  get: function () {
69413
69421
  var showTab = this.isRenderModeTab && !!this.visiblePanelCount;
69414
69422
  return new CssClassBuilder()
69415
- .append(this.cssClasses.header)
69416
- .append(this.cssClasses.headerTop, this.hasTitleOnTop || showTab)
69417
- .append(this.cssClasses.headerTab, showTab)
69423
+ .append(_super.prototype.getCssHeader.call(this, this.cssClasses))
69424
+ .append(this.cssClasses.headerTab, this.hasTitleOnTop && showTab)
69418
69425
  .toString();
69419
69426
  },
69420
69427
  enumerable: false,
69421
69428
  configurable: true
69422
69429
  });
69430
+ QuestionPanelDynamicModel.prototype.getTabsContainerCss = function () {
69431
+ return new CssClassBuilder().append(this.cssClasses.tabsContainer).append(this.cssClasses.tabsContainerWithHeader, this.hasTitleOnTop).toString();
69432
+ };
69423
69433
  QuestionPanelDynamicModel.prototype.getPanelWrapperCss = function (panel) {
69424
69434
  return new CssClassBuilder()
69425
69435
  .append(this.cssClasses.panelWrapper, !panel || panel.visible)
@@ -69482,25 +69492,29 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69482
69492
  return true;
69483
69493
  return false;
69484
69494
  };
69485
- Object.defineProperty(QuestionPanelDynamicModel.prototype, "hasAdditionalTitleToolbar", {
69495
+ Object.defineProperty(QuestionPanelDynamicModel.prototype, "hasTabbedMenu", {
69486
69496
  get: function () {
69487
69497
  return this.isRenderModeTab && this.visiblePanels.length > 0;
69488
69498
  },
69489
69499
  enumerable: false,
69490
69500
  configurable: true
69491
69501
  });
69492
- QuestionPanelDynamicModel.prototype.getAdditionalTitleToolbar = function () {
69493
- if (!this.isRenderModeTab)
69494
- return null;
69495
- if (!this.additionalTitleToolbarValue) {
69496
- this.additionalTitleToolbarValue = new adaptive_container_AdaptiveActionContainer();
69497
- this.additionalTitleToolbarValue.dotsItem.popupModel.showPointer = false;
69498
- this.additionalTitleToolbarValue.dotsItem.popupModel.verticalPosition = "bottom";
69499
- this.additionalTitleToolbarValue.dotsItem.popupModel.horizontalPosition = "center";
69500
- this.updateElementCss(false);
69501
- }
69502
- return this.additionalTitleToolbarValue;
69503
- };
69502
+ Object.defineProperty(QuestionPanelDynamicModel.prototype, "tabbedMenu", {
69503
+ get: function () {
69504
+ if (!this.isRenderModeTab)
69505
+ return null;
69506
+ if (!this.tabbedMenuValue) {
69507
+ this.tabbedMenuValue = new adaptive_container_AdaptiveActionContainer();
69508
+ this.tabbedMenuValue.dotsItem.popupModel.showPointer = false;
69509
+ this.tabbedMenuValue.dotsItem.popupModel.verticalPosition = "bottom";
69510
+ this.tabbedMenuValue.dotsItem.popupModel.horizontalPosition = "center";
69511
+ this.updateElementCss(false);
69512
+ }
69513
+ return this.tabbedMenuValue;
69514
+ },
69515
+ enumerable: false,
69516
+ configurable: true
69517
+ });
69504
69518
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "footerToolbar", {
69505
69519
  get: function () {
69506
69520
  if (!this.footerToolbarValue) {
@@ -69595,19 +69609,21 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69595
69609
  return options.title;
69596
69610
  };
69597
69611
  locTitle.sharedData = this.locTemplateTabTitle;
69598
- var isActive = this.getPanelVisibleIndexById(panel.id) === this.currentIndex;
69599
- var newItem = new action_Action({
69600
- id: panel.id,
69612
+ var panelId = panel.id;
69613
+ var isActive = this.getPanelVisibleIndexById(panelId) === this.currentIndex;
69614
+ var newItem = new PanelDynamicTabbedMenuItem({
69615
+ id: this.id + "_tab_" + panelId,
69616
+ panelId: panelId,
69601
69617
  pressed: isActive,
69602
69618
  locTitle: locTitle,
69603
69619
  disableHide: isActive,
69604
69620
  action: function () {
69605
- _this.currentIndex = _this.getPanelVisibleIndexById(newItem.id);
69621
+ _this.currentIndex = _this.getPanelVisibleIndexById(panelId);
69606
69622
  }
69607
69623
  });
69608
69624
  return newItem;
69609
69625
  };
69610
- QuestionPanelDynamicModel.prototype.getAdditionalTitleToolbarCss = function (cssClasses) {
69626
+ QuestionPanelDynamicModel.prototype.getTabbedMenuCss = function (cssClasses) {
69611
69627
  var css = cssClasses !== null && cssClasses !== void 0 ? cssClasses : this.cssClasses;
69612
69628
  return new CssClassBuilder()
69613
69629
  .append(css.tabsRoot)
@@ -69622,8 +69638,8 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69622
69638
  if (this.currentIndex < 0 || this.currentIndex >= this.visiblePanelCount)
69623
69639
  return;
69624
69640
  var panel = this.visiblePanelsCore[this.currentIndex];
69625
- this.additionalTitleToolbar.renderedActions.forEach(function (action) {
69626
- var isActive = action.id === panel.id;
69641
+ this.tabbedMenu.renderedActions.forEach(function (action) {
69642
+ var isActive = action.panelId === panel.id;
69627
69643
  action.pressed = isActive;
69628
69644
  action.disableHide = isActive;
69629
69645
  //should raise update if dimensions are not changed but action is active now
@@ -69645,22 +69661,22 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69645
69661
  for (var i = 0; i < visPanels.length; i++) {
69646
69662
  _loop_1(i);
69647
69663
  }
69648
- this.additionalTitleToolbar.setItems(items);
69664
+ this.tabbedMenu.setItems(items);
69649
69665
  };
69650
69666
  QuestionPanelDynamicModel.prototype.addTabFromToolbar = function (panel, index) {
69651
69667
  if (!this.isRenderModeTab)
69652
69668
  return;
69653
69669
  var newItem = this.createTabByPanel(panel, index);
69654
- this.additionalTitleToolbar.actions.splice(index, 0, newItem);
69670
+ this.tabbedMenu.actions.splice(index, 0, newItem);
69655
69671
  this.updateTabToolbarItemsPressedState();
69656
69672
  };
69657
69673
  QuestionPanelDynamicModel.prototype.removeTabFromToolbar = function (panel) {
69658
69674
  if (!this.isRenderModeTab)
69659
69675
  return;
69660
- var removedItem = this.additionalTitleToolbar.getActionById(panel.id);
69676
+ var removedItem = this.tabbedMenu.actions.find(function (a) { return a.panelId == panel.id; });
69661
69677
  if (!removedItem)
69662
69678
  return;
69663
- this.additionalTitleToolbar.actions.splice(this.additionalTitleToolbar.actions.indexOf(removedItem), 1);
69679
+ this.tabbedMenu.actions.splice(this.tabbedMenu.actions.indexOf(removedItem), 1);
69664
69680
  this.updateTabToolbarItemsPressedState();
69665
69681
  };
69666
69682
  Object.defineProperty(QuestionPanelDynamicModel.prototype, "showLegacyNavigation", {
@@ -69684,12 +69700,12 @@ var question_paneldynamic_QuestionPanelDynamicModel = /** @class */ (function (_
69684
69700
  };
69685
69701
  QuestionPanelDynamicModel.prototype.calcCssClasses = function (css) {
69686
69702
  var classes = _super.prototype.calcCssClasses.call(this, css);
69687
- var additionalTitleToolbar = this.additionalTitleToolbar;
69688
- if (!!additionalTitleToolbar) {
69689
- additionalTitleToolbar.containerCss = this.getAdditionalTitleToolbarCss(classes);
69690
- additionalTitleToolbar.cssClasses = classes.tabs;
69691
- additionalTitleToolbar.dotsItem.cssClasses = classes.tabs;
69692
- additionalTitleToolbar.dotsItem.popupModel.contentComponentData.model.cssClasses = css.list;
69703
+ var tabbedMenu = this.tabbedMenu;
69704
+ if (!!tabbedMenu) {
69705
+ tabbedMenu.containerCss = this.getTabbedMenuCss(classes);
69706
+ tabbedMenu.cssClasses = classes.tabs;
69707
+ tabbedMenu.dotsItem.cssClasses = classes.tabs;
69708
+ tabbedMenu.dotsItem.popupModel.contentComponentData.model.cssClasses = css.list;
69693
69709
  }
69694
69710
  return classes;
69695
69711
  };
@@ -72717,9 +72733,9 @@ Serializer.addClass("currencymask", [
72717
72733
 
72718
72734
  var Version;
72719
72735
  var ReleaseDate;
72720
- Version = "" + "1.12.22";
72736
+ Version = "" + "1.12.23";
72721
72737
  settings.version = Version;
72722
- ReleaseDate = "" + "2025-02-05";
72738
+ ReleaseDate = "" + "2025-02-11";
72723
72739
  function checkLibraryVersion(ver, libraryName) {
72724
72740
  if (Version != ver) {
72725
72741
  var str = "survey-core has version '" + Version + "' and " + libraryName
@@ -89759,6 +89775,8 @@ var reactquestion_paneldynamic_SurveyQuestionPanelDynamic = /** @class */ (funct
89759
89775
  var navV2 = this.renderNavigatorV2();
89760
89776
  var noEntriesPlaceholder = this.renderPlaceholder();
89761
89777
  return (external_root_React_commonjs2_react_commonjs_react_amd_react_["createElement"]("div", { className: this.question.cssClasses.root },
89778
+ this.question.hasTabbedMenu ? external_root_React_commonjs2_react_commonjs_react_amd_react_["createElement"]("div", { className: this.question.getTabsContainerCss() },
89779
+ external_root_React_commonjs2_react_commonjs_react_amd_react_["createElement"](action_bar_SurveyActionBar, { model: this.question.tabbedMenu })) : null,
89762
89780
  noEntriesPlaceholder,
89763
89781
  navTop,
89764
89782
  external_root_React_commonjs2_react_commonjs_react_amd_react_["createElement"]("div", { className: this.question.cssClasses.panelsContainer }, panels),