@progress/telerik-jquery-report-viewer 26.25.716 → 27.25.813

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/README.md CHANGED
@@ -1,9 +1,38 @@
1
- # Progress Telerik jQuery Report Viewer
1
+ # Progress® Telerik HTML5 jQuery Report Viewer
2
2
 
3
3
  This package is part of [Telerik Reporting](https://www.telerik.com/reporting).
4
4
 
5
- This version of Telerik jQuery Report Viewer requires Telerik Report Server or Telerik Reporting REST Service 19.1.25.716.
5
+ The Telerik Reporting HTML5 Report Viewer is an HTML5/jQuery-based component that enables the display of Telerik Reports within a web page. Its rich preview capabilities, easy customization, and extensive API allow for seamless integration into a wide range of web applications.
6
6
 
7
- __Intended for internal purposes only.__
7
+ Major features:
8
8
 
9
- Read more for Telerik Reporting Report Viewers here: [Telerik Report Viewers Overview](https://docs.telerik.com/reporting/embedding-reports/display-reports-in-applications/overview)
9
+ * Preview Telerik Reports in desktop or mobile browsers.
10
+
11
+ * Browse the report pages on screen.
12
+
13
+ * Navigate through the history of visited reports.
14
+
15
+ * Use built-in interactivity features such as navigating to external URLs, other reports or bookmarks, performing drill-down actions, sorting by table columns, etc.
16
+
17
+ * Print or export the report to supported formats including PDF, Word, Excel, and PowerPoint.
18
+
19
+ * Use the viewer's API for customizing and extending its behavior.
20
+
21
+ This version of Telerik jQuery Report Viewer requires either Telerik Report Server or Telerik Reporting REST Service 19.2.25.813.
22
+
23
+ Learn more about Telerik Reporting Viewers here: [Telerik Report Viewers Overview](https://docs.telerik.com/reporting/embedding-reports/display-reports-in-applications/overview)
24
+
25
+ ## License
26
+
27
+ **IMPORTANT** This is commercial software. To use it, you must agree to the
28
+ [Telerik End User License Agreement for Telerik Reporting](https://www.telerik.com/purchase/license-agreement/reporting-dlw-s).
29
+
30
+ If you do not have a commercial license, the usage of this product is governed by the trial license terms.
31
+
32
+ Telerik Reporting requires activation using a license key — this applies to both the trial and commercial versions of the product.
33
+
34
+ Telerik Reporting licenses can be obtained through the [Telerik Reporting page](https://www.telerik.com/purchase/individual/reporting). For more information on licensing, configuration, and troubleshooting, refer to the product documentation's [License section](https://docs.telerik.com/reporting/licensing/setting-up-your-telerik-reporting-license-key).
35
+
36
+ _Copyright © 2025 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved._
37
+
38
+ _Progress, Telerik, and certain product names used herein are trademarks or registered trademarks of Progress Software Corporation and/or one of its subsidiaries or affiliates in the U.S. and/or other countries._
@@ -62,9 +62,9 @@ class AiPrompt {
62
62
  this.pagesAreaContainer = this.reportViewerWrapper.find('[data-id="trv-pages-area"]');
63
63
  this.aiPromptDialogInitialized = false;
64
64
  this.aiPromptInitialized = false;
65
- const aiConfigurationOptions = this.controller.getAiConfigurationOptions();
66
- this.requireConsent = aiConfigurationOptions.requireConsent;
67
- this.allowCustomPrompts = aiConfigurationOptions.allowCustomPrompts;
65
+ this.requireConsent = false;
66
+ this.allowCustomPrompts = true;
67
+ this.predefinedPrompts = [];
68
68
  this.init();
69
69
  }
70
70
  init() {
@@ -72,10 +72,8 @@ class AiPrompt {
72
72
  return;
73
73
  }
74
74
  replaceStringResources(this.$element);
75
- if (this.requireConsent) {
76
- this._initAiConsentDialog();
77
- this._attachAiConsentDialogCommands();
78
- }
75
+ this._initAiConsentDialog();
76
+ this._attachAiConsentDialogCommands();
79
77
  this._initAiPromptDialog();
80
78
  this._attachEvents();
81
79
  this.aiPromptDialogInitialized = true;
@@ -108,7 +106,10 @@ class AiPrompt {
108
106
  this.kendoAiConsentDialog.close();
109
107
  this.controller.saveToSessionStorage("trvAiConsent", "true");
110
108
  this.controller.setAiPromptInitiated(true);
111
- this.open();
109
+ if (this.kendoAiPromptDialog) {
110
+ this._initAiPrompt(this.predefinedPrompts);
111
+ this.kendoAiPromptDialog.open();
112
+ }
112
113
  })
113
114
  };
114
115
  binder.Binder.attachCommands(this.kendoAiConsentDialog.element.find(".trv-ai-consent-actions"), optionsCommandSet, this.viewerOptions);
@@ -120,7 +121,7 @@ class AiPrompt {
120
121
  return;
121
122
  }
122
123
  this.kendoAiConsentDialog = new kendo.ui.Window(aiConsentDialogElement, {
123
- title: "Before you start with AI",
124
+ title: stringResources.stringResources["aiPromptDialogConsentTitle"] || "",
124
125
  width: 500,
125
126
  minWidth: 400,
126
127
  minHeight: 106,
@@ -222,14 +223,14 @@ class AiPrompt {
222
223
  if (this.allowCustomPrompts) {
223
224
  return;
224
225
  }
225
- let aiPromptTextAreaPlaceholder = "Enter your prompt";
226
+ let aiPromptTextAreaPlaceholder = stringResources.stringResources["aiPromptDialogTextAreaPlaceholder"];
226
227
  const aiPromptTextArea = this.kendoAiPrompt.element.find(".k-prompt-content .k-prompt-view textarea");
227
228
  if (!hasPromptSuggestions) {
228
229
  const aiPromptGenerateButton = this.kendoAiPrompt.element.find(".k-prompt-footer .k-actions");
229
230
  aiPromptGenerateButton && aiPromptGenerateButton.addClass("k-disabled");
230
- aiPromptTextAreaPlaceholder = "Custom prompts are disabled and there are no predefined prompts configured. Please allow custom prompts or add predefined prompts to use the AI feature.";
231
+ aiPromptTextAreaPlaceholder = stringResources.stringResources["aiPromptDialogNoPredefinedAndCustomPromptsPlaceholder"] || "";
231
232
  } else {
232
- aiPromptTextAreaPlaceholder = "Custom prompts are disabled, please select one of the predefined suggestions below";
233
+ aiPromptTextAreaPlaceholder = stringResources.stringResources["aiPromptDialogNoCustomPromptsPlaceholder"] || "";
233
234
  }
234
235
  aiPromptTextArea && aiPromptTextArea.attr("placeholder", aiPromptTextAreaPlaceholder) && aiPromptTextArea.addClass("k-disabled");
235
236
  }
@@ -281,17 +282,20 @@ class AiPrompt {
281
282
  }
282
283
  }
283
284
  open() {
284
- if (this.kendoAiConsentDialog && this.requireConsent && this.controller.loadFromSessionStorage("trvAiConsent") !== "true") {
285
- this.kendoAiConsentDialog.open();
286
- return;
287
- }
288
- if (this.kendoAiPromptDialog) {
289
- this.controller.createAIThread().then((data) => {
285
+ this.controller.createAIThread().then((data) => {
286
+ this.predefinedPrompts = data?.predefinedPrompts;
287
+ this.allowCustomPrompts = data?.allowCustomPrompts;
288
+ if (this.kendoAiConsentDialog && data.requireConsent && this.controller.loadFromSessionStorage("trvAiConsent") !== "true") {
289
+ $(".trv-ai-consent-content").html(data?.consentMessage);
290
+ this.kendoAiConsentDialog.open();
291
+ return;
292
+ }
293
+ if (this.kendoAiPromptDialog) {
290
294
  this.controller.setAiPromptInitiated(true);
291
- this._initAiPrompt(data?.predefinedPrompts);
295
+ this._initAiPrompt(this.predefinedPrompts);
292
296
  this.kendoAiPromptDialog.open();
293
- });
294
- }
297
+ }
298
+ });
295
299
  }
296
300
  close() {
297
301
  this.controller.setAiPromptInitiated(false);
@@ -134,9 +134,9 @@ class DocumentMapArea {
134
134
  }
135
135
  showDocumentMap(show) {
136
136
  var splitter = $("#" + this.options.viewerSelector + "-document-map-splitter").getKendoSplitter();
137
- var sibling = this.$element.next();
137
+ var sibling = this.$element.next(".k-splitbar");
138
138
  if (this.options.documentMapAreaPosition === enums.DocumentMapAreaPositions.RIGHT) {
139
- sibling = this.$element.prev();
139
+ sibling = this.$element.prev(".k-splitbar");
140
140
  }
141
141
  if (splitter) {
142
142
  (this.documentMapNecessary ? $.fn.removeClass : $.fn.addClass).call(sibling, "k-hidden");
package/dist/cjs/index.js CHANGED
@@ -45,6 +45,9 @@ exports.parameterEditorsMatch = parameters.parameterEditorsMatch;
45
45
  exports.ParameterValidators = parameterValidators.ParameterValidators;
46
46
  exports.PerspectiveManager = perspectives.PerspectiveManager;
47
47
  exports.ReportViewer = reportViewer.ReportViewer;
48
+ exports.ReportViewerController = reportViewer.ReportViewerController;
49
+ exports.ReportViewerNotificationService = reportViewer.ReportViewerNotificationService;
50
+ exports.ReportViewerServiceClient = reportViewer.ReportViewerServiceClient;
48
51
  exports.TouchBehavior = touch.TouchBehavior;
49
52
  exports.UIController = uiController.UIController;
50
53
  exports.ParametersArea = parametersArea.ParametersArea;
@@ -446,9 +446,9 @@ class ParametersArea {
446
446
  if (!splitter) {
447
447
  return;
448
448
  }
449
- var sibling = this.$element.prev();
449
+ var sibling = this.$element.prev(".k-splitbar");
450
450
  if (this.options.parametersAreaPosition === enums.ParametersAreaPositions.TOP || this.options.parametersAreaPosition === enums.ParametersAreaPositions.LEFT) {
451
- sibling = this.$element.next();
451
+ sibling = this.$element.next(".k-splitbar");
452
452
  }
453
453
  (this.parametersAreaNecessary ? $.fn.removeClass : $.fn.addClass).call(sibling, "k-hidden");
454
454
  splitter.toggle(".trv-parameters-area", show);
@@ -465,8 +465,10 @@ class ParametersArea {
465
465
  _attachEvents() {
466
466
  this.controller.on("reloadParameters", (controllerLoadParametersPromise) => {
467
467
  this.showError();
468
- kendo.destroy(this._parametersWrapper);
469
- this._parametersWrapper.innerHTML = "";
468
+ if (this._parametersWrapper) {
469
+ kendo.destroy(this._parametersWrapper);
470
+ this._parametersWrapper.innerHTML = "";
471
+ }
470
472
  this.acceptParameters(controllerLoadParametersPromise, this.onLoadParametersSuccess.bind(this));
471
473
  }).onAsync("beforeLoadReport", async () => {
472
474
  this.loadingCount = 0;
@@ -125,7 +125,8 @@ function getDefaultOptions(serviceUrl, version) {
125
125
  searchMetadataOnDemand: false,
126
126
  initialPageAreaImageUrl: null,
127
127
  keepClientAlive: true,
128
- webDesignerPreview: false
128
+ webDesignerPreview: false,
129
+ serverPreview: false
129
130
  };
130
131
  }
131
132
  function ReportViewer(dom, options) {
@@ -154,7 +155,7 @@ function ReportViewer(dom, options) {
154
155
  if (!validateOptions(options)) {
155
156
  return;
156
157
  }
157
- var version = "19.1.25.716";
158
+ var version = "19.2.25.813";
158
159
  options = $.extend({}, getDefaultOptions(svcApiUrl, version), options);
159
160
  settings = new reportViewerSettings.ReportViewerSettings(
160
161
  persistanceKey,
@@ -169,7 +170,8 @@ function ReportViewer(dom, options) {
169
170
  parametersAreaPosition: options.parametersAreaPosition,
170
171
  documentMapAreaPosition: options.documentMapAreaPosition,
171
172
  keepClientAlive: options.keepClientAlive,
172
- webDesignerPreview: options.webDesignerPreview
173
+ webDesignerPreview: options.webDesignerPreview,
174
+ serverPreview: options.serverPreview
173
175
  }
174
176
  );
175
177
  notificationService$1 = new notificationService.NotificationService();
@@ -647,7 +649,7 @@ function ReportViewer(dom, options) {
647
649
  function start() {
648
650
  var pendingRefresh = false;
649
651
  init();
650
- if (!options.webDesignerPreview) {
652
+ if (!(options.webDesignerPreview || options.serverPreview)) {
651
653
  if (controller.shouldShowLicenseBanner()) {
652
654
  $(".trv-content-wrapper")?.prepend('<span class="trv-license-banner"></span>');
653
655
  const licenseBanner = $(".trv-license-banner").kendoNotification({
@@ -817,13 +819,21 @@ function ReportViewer(dom, options) {
817
819
  return Promise.resolve();
818
820
  }
819
821
  var kendoUrl = utils.rTrim(svcApiUrl, "\\/") + "/resources/js/telerikReportViewer.kendo-" + version2 + ".min.js/";
820
- return utils.loadScript(kendoUrl).catch((errorData) => {
822
+ return fetch(kendoUrl).then((response) => {
823
+ if (!response.ok) {
824
+ return Promise.reject({ error: "Failed to fetch data - status code " + response.status });
825
+ }
826
+ return response.text();
827
+ }).then((kendoScript) => {
828
+ const scriptElement = document.createElement("script");
829
+ scriptElement.textContent = kendoScript;
830
+ document.head.appendChild(scriptElement);
831
+ }).catch((errorData) => {
821
832
  utils.logError("Kendo could not be loaded automatically. Make sure 'options.serviceUrl' / 'options.reportServer.url' is correct and accessible. The error is: " + errorData.error);
822
833
  });
823
834
  }
824
835
  function main(version2) {
825
836
  ensureKendo(version2).then(() => {
826
- }).then(() => {
827
837
  viewer.authenticationToken(options.authenticationToken);
828
838
  controller.getServiceConfiguration().catch((ex) => {
829
839
  var errorOutput = utils.isApplicationExceptionInstance(ex) ? ex.exceptionMessage : utils.stringFormat(stringResources.stringResources.errorServiceUrl, [utils.escapeHtml(svcApiUrl)]);
@@ -859,6 +869,15 @@ function ReportViewer(dom, options) {
859
869
  }
860
870
  return viewer;
861
871
  }
872
+ function ReportViewerServiceClient(serviceClientOptions) {
873
+ return new RCV__namespace.ServiceClient(serviceClientOptions);
874
+ }
875
+ function ReportViewerController(controllerOptions) {
876
+ return new RCV__namespace.ReportController(controllerOptions?.serviceClient, controllerOptions?.settings);
877
+ }
878
+ function ReportViewerNotificationService() {
879
+ return new notificationService.NotificationService();
880
+ }
862
881
  var pluginName = "telerik_ReportViewer";
863
882
  $.fn[pluginName] = function(options) {
864
883
  if (this.selector && !options.selector) {
@@ -919,3 +938,6 @@ plugins.forEach((plugin) => {
919
938
  });
920
939
 
921
940
  exports.ReportViewer = ReportViewer;
941
+ exports.ReportViewerController = ReportViewerController;
942
+ exports.ReportViewerNotificationService = ReportViewerNotificationService;
943
+ exports.ReportViewerServiceClient = ReportViewerServiceClient;
package/dist/cjs/sr.js CHANGED
@@ -164,9 +164,12 @@ var sr = {
164
164
  sendEmailValidationSingleEmail: "The field accepts a single email address only",
165
165
  sendEmailValidationFormatRequired: "Format field is required",
166
166
  errorSendingDocument: "Error sending report document (Report = '{0}').",
167
- aiPromptConsentDialogTitle: "Before you start with AI",
168
- aiPromptConsentAgreeLabel: "Consent",
169
- aiPromptConsentRejectLabel: "Cancel"
167
+ aiPromptDialogConsentTitle: "Before you start with AI",
168
+ aiPromptDialogConsentAccept: "Consent",
169
+ aiPromptDialogConsentReject: "Cancel",
170
+ aiPromptDialogTextAreaPlaceholder: "Enter your prompt",
171
+ aiPromptDialogNoPredefinedAndCustomPromptsPlaceholder: "Custom prompts are disabled and there are no predefined prompts configured. Please allow custom prompts or add predefined prompts to use the AI feature.",
172
+ aiPromptDialogNoCustomPromptsPlaceholder: "Custom prompts are disabled, please select one of the predefined suggestions below"
170
173
  };
171
174
  window.telerikReportViewer ||= {};
172
175
  window.telerikReportViewer.sr ||= sr;
@@ -82,7 +82,7 @@ class Toolbar {
82
82
  }
83
83
  createToolbarItem(elementData) {
84
84
  const cmdName = (elementData.dataset?.command || "").replace("telerik_ReportViewer_", "");
85
- if (cmdName === "toggleAiPromptDialog" && !this._options.controller.getAiConfigurationOptions()?.isAvailable) {
85
+ if (cmdName === "toggleAiPromptDialog" && !this._options.controller.isAiInsightsEnabled()) {
86
86
  return;
87
87
  }
88
88
  const id = elementData.id;
package/dist/cjs/utils.js CHANGED
@@ -34,13 +34,6 @@ function isSpecialKey() {
34
34
  return false;
35
35
  };
36
36
  }
37
- function toXhrErrorData(xhr, status, error) {
38
- return {
39
- xhr,
40
- status,
41
- error
42
- };
43
- }
44
37
  function rectangle(left, top, width, height) {
45
38
  return {
46
39
  left,
@@ -193,13 +186,6 @@ function getExceptionInstance(xhr) {
193
186
  }
194
187
  return parseJSON(xhr.responseText);
195
188
  }
196
- function loadScript(url) {
197
- var ajaxOptions = {
198
- dataType: "script",
199
- cache: true
200
- };
201
- return $ajax(url, ajaxOptions);
202
- }
203
189
  function filterUniqueLastOccurrence(array) {
204
190
  function onlyLastUnique(value, index, self) {
205
191
  return self.lastIndexOf(value) === index;
@@ -249,15 +235,6 @@ function getColorAlphaValue(color) {
249
235
  var alpha = colorComponents.length === 4 ? parseFloat((parseFloat(colorComponents[3].replace(/[()]/g, "")) / 255).toFixed(2)) : 1;
250
236
  return alpha;
251
237
  }
252
- function $ajax(url, ajaxSettings) {
253
- return new Promise(function(resolve, reject) {
254
- $.ajax(url, ajaxSettings).done(function(data) {
255
- return resolve(data);
256
- }).fail(function(xhr, status, error) {
257
- reject(toXhrErrorData(xhr, status, error));
258
- });
259
- });
260
- }
261
238
 
262
239
  Object.defineProperty(exports, 'parseToLocalDate', {
263
240
  enumerable: true,
@@ -275,7 +252,6 @@ Object.defineProperty(exports, 'tryParseInt', {
275
252
  enumerable: true,
276
253
  get: function () { return RCV.tryParseInt; }
277
254
  });
278
- exports.$ajax = $ajax;
279
255
  exports.adjustTimezone = adjustTimezone;
280
256
  exports.areEqual = areEqual;
281
257
  exports.areEqualArrays = areEqualArrays;
@@ -290,7 +266,6 @@ exports.isApplicationExceptionInstance = isApplicationExceptionInstance;
290
266
  exports.isRgbColor = isRgbColor;
291
267
  exports.isSpecialKey = isSpecialKey;
292
268
  exports.lTrim = lTrim;
293
- exports.loadScript = loadScript;
294
269
  exports.logError = logError;
295
270
  exports.parseJSON = parseJSON;
296
271
  exports.rTrim = rTrim;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * TelerikReporting v19.1.25.716 (https://www.telerik.com/products/reporting.aspx)
2
+ * TelerikReporting v19.2.25.813 (https://www.telerik.com/products/reporting.aspx)
3
3
  * Copyright 2025 Progress Software EAD. All rights reserved.
4
4
  *
5
5
  * Telerik Reporting commercial licenses may be obtained at
@@ -10,14 +10,14 @@
10
10
  font-family: "ReportingIcons";
11
11
  font-style: normal;
12
12
  font-weight: normal;
13
- src: url("../ReportingIcons-19.1.25.716.ttf/") format("truetype");
13
+ src: url("../ReportingIcons-19.2.25.813.ttf/") format("truetype");
14
14
  /*unicode-range: U+E0ED, U+E0EE, U+E0E6, U+E132, U+E12F, U+E008, U+E00B, U+E09C, U+E096, U+E07E, U+E086, U+E06C, U+E07F, U+E080, U+E081, U+E149, U+E087;*/
15
15
  }
16
16
  @font-face {
17
17
  font-family: "WebComponentsIcons";
18
18
  font-style: normal;
19
19
  font-weight: normal;
20
- src: url("../ReportingIcons-19.1.25.716.ttf/") format("truetype");
20
+ src: url("../ReportingIcons-19.2.25.813.ttf/") format("truetype");
21
21
  }
22
22
  .k-icon {
23
23
  /* use !important to prevent issues with browser extensions that change fonts */
@@ -4256,4 +4256,4 @@
4256
4256
  .trv-report-viewer .t-i-scroll:before {
4257
4257
  content: "\e022";
4258
4258
  }
4259
- /* DO NOT MODIFY OR DELETE THIS LINE! UPGRADE WIZARD CHECKSUM 3754da3df5c79a28bac0331a5e7a18e1 */
4259
+ /* DO NOT MODIFY OR DELETE THIS LINE! UPGRADE WIZARD CHECKSUM 13afab675da2be218389d6d0045b16be */