cronapp-framework-js 2.9.6-SP.3 → 2.9.6-SP.31

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.
Files changed (30) hide show
  1. package/components/crn-calendar.components.json +1 -0
  2. package/components/crn-dynamic-image.components.json +8 -0
  3. package/components/crn-enterprise-combobox-multiple.components.json +7 -0
  4. package/components/crn-navbar.components.json +1 -20
  5. package/components/templates/navbar.template.html +8 -7
  6. package/css/app.css +4 -0
  7. package/css/themes/custom/material-round/custom-material-round.css +897 -28
  8. package/css/themes/custom/material-round/grid-material-round.css +114 -7
  9. package/css/themes/custom/material-round/navbar-material-round.css +14 -4
  10. package/css/themes/custom/material-round/panel-material-round.css +4 -4
  11. package/css/themes/custom/theme-general/menu-vertical-retratil.css +2 -3
  12. package/css/themes/custom/theme-general/theme-general.css +1 -1
  13. package/dist/components/templates/navbar.template.html +1 -1
  14. package/dist/css/app.css +1 -1
  15. package/dist/css/themes/custom/material-round/custom-material-round.css +1 -1
  16. package/dist/css/themes/custom/material-round/grid-material-round.css +1 -1
  17. package/dist/css/themes/custom/material-round/navbar-material-round.css +1 -1
  18. package/dist/css/themes/custom/material-round/panel-material-round.css +1 -1
  19. package/dist/css/themes/custom/theme-general/menu-vertical-retratil.css +1 -1
  20. package/dist/css/themes/custom/theme-general/theme-general.css +1 -1
  21. package/dist/i18n/locale_en_us.json +3 -1
  22. package/dist/i18n/locale_pt_br.json +3 -1
  23. package/dist/js/app.js +1 -1
  24. package/dist/js/directives.js +10 -10
  25. package/i18n/locale_en_us.json +3 -1
  26. package/i18n/locale_pt_br.json +3 -1
  27. package/js/app.js +5 -1
  28. package/js/directives.js +118 -160
  29. package/package.json +9 -4
  30. package/postupdate.json +8 -0
@@ -152,5 +152,7 @@
152
152
  "clear": "Clear",
153
153
  "noDataFound": "No data found",
154
154
  "yes": "Yes",
155
- "no": "No"
155
+ "no": "No",
156
+ "Datasource.Error": "Error",
157
+ "Datasource.Duplicate": "There is more than one data source with the same name, use a unique name for each, check if there is a modal with the data source that has the name: "
156
158
  }
@@ -152,5 +152,7 @@
152
152
  "clear": "Limpar",
153
153
  "noDataFound": "Nenhum dado encontrado",
154
154
  "yes": "Sim",
155
- "no": "Não"
155
+ "no": "Não",
156
+ "Datasource.Error": "Erro",
157
+ "Datasource.Duplicate": "Existem mais de uma fonte de dados com o mesmo nome, utilize nome único para cada, verifique se existe modal com a fonte de dados que tenha o nome: "
156
158
  }
package/js/app.js CHANGED
@@ -546,7 +546,11 @@ window.camelCaseToSentenceCase = function(str){
546
546
  const keyCodeFormActions = {
547
547
  initialize: () => $(document).on("keypress", "form[crn-datasource]", keyCodeFormActions.handle),
548
548
  handle: (e) => !keyCodeFormActions[e.keyCode || e.which] || keyCodeFormActions[e.keyCode || e.which](e),
549
- 13: (e) => e.preventDefault()
549
+ 13: (e) => {
550
+ if (!e.target || e.target.type !== 'textarea') {
551
+ e.preventDefault();
552
+ }
553
+ }
550
554
  };
551
555
  keyCodeFormActions.initialize();
552
556
 
package/js/directives.js CHANGED
@@ -102,11 +102,11 @@
102
102
  const expressionOnChange = options.expressionOnChange;
103
103
  const expressionOnNavigate = options.expressionOnNavigate;
104
104
 
105
- const initialDate = expressionInitialDate ? await scope.$eval(generateBlocklyCall(expressionInitialDate)) : new Date();
106
- const selectDates = (expressionSelectDates && options.isSelectableMultiple) ? await scope.$eval(generateBlocklyCall(expressionSelectDates)) : [];
107
- const disableDates = expressionDisableDates ? await scope.$eval(generateBlocklyCall(expressionDisableDates)) : null;
108
- const min = expressionMinDate ? await scope.$eval(generateBlocklyCall(expressionMinDate)) : new Date(1900, 0, 1);
109
- const max = expressionMaxDate ? await scope.$eval(generateBlocklyCall(expressionMaxDate)) : new Date(2099, 11, 31);
105
+ const initialDate = expressionInitialDate ? await scope.$eval(generateBlocklyCall(expressionInitialDate, true)) : new Date();
106
+ const selectDates = (expressionSelectDates && options.isSelectableMultiple) ? await scope.$eval(generateBlocklyCall(expressionSelectDates, true)) : [];
107
+ const disableDates = expressionDisableDates ? await scope.$eval(generateBlocklyCall(expressionDisableDates, true)) : null;
108
+ const min = expressionMinDate ? await scope.$eval(generateBlocklyCall(expressionMinDate, true)) : new Date(1900, 0, 1);
109
+ const max = expressionMaxDate ? await scope.$eval(generateBlocklyCall(expressionMaxDate), true) : new Date(2099, 11, 31);
110
110
 
111
111
  cronCalendarElement.kendoCalendar({
112
112
  culture: culture.startsWith('pt') ? 'pt-BR' : 'en-US',
@@ -221,7 +221,7 @@
221
221
 
222
222
  app.directive('textarea', transformText);
223
223
 
224
- var generateBlocklyCall = function(blocklyInfo) {
224
+ var generateBlocklyCall = function(blocklyInfo, hasToPromise) {
225
225
  var call = "";
226
226
  if (!blocklyInfo) return call;
227
227
 
@@ -238,7 +238,7 @@
238
238
  }
239
239
  else if (blocklyInfo.type == "server") {
240
240
  var blocklyName = blocklyInfo.blocklyClass + '.' + blocklyInfo.blocklyMethod;
241
- call = "cronapi.server('"+blocklyName+"')";
241
+ call = "cronapi.server('"+blocklyName+"')" + (hasToPromise ? '.toPromise()' : '');
242
242
 
243
243
  var params = "";
244
244
  blocklyInfo.blocklyParams.forEach(function(p) {
@@ -355,7 +355,7 @@
355
355
  var required = (attr.ngRequired && attr.ngRequired == "true"?"required":"");
356
356
  var content = element.html();
357
357
  const objectFit = attr.objectFit || 'unset';
358
- let templateDyn =`<div ngf-drop="" ngf-drag-over-class="dragover" style="display: flex; justify-content: center; width: 100%; height: 100%; ">
358
+ let templateDyn =`<div ngf-drop="" ngf-drag-over-class="dragover" style="display: flex; justify-content: center; width: 100%; height: 100%; position: relative; ">
359
359
  <img alt="$picture$" style="width: 100%; object-fit: ${objectFit}" ng-if="$ngModel$"
360
360
  data-ng-src="{{$ngModel$.startsWith(\'http\') || ($ngModel$.startsWith(\'/\') && $ngModel$.length < 1000)? $ngModel$ : \'data:image/png;base64,\' + $ngModel$}}">
361
361
  <input id="$id$" aria-label="$userHtml$" ng-if="!$ngModel$" autocomplete="off" tabindex="-1"
@@ -394,6 +394,12 @@
394
394
  .split('$picture$').join($translate.instant(imgAltText))
395
395
  );
396
396
 
397
+ var readOnly = attr.readOnly == 'true';
398
+ if (readOnly) {
399
+ templateDyn.find('.remove-image-button').remove();
400
+ templateDyn.find('.start-camera-button-attribute').remove();
401
+ }
402
+
397
403
  element.html(templateDyn);
398
404
  $compile(templateDyn)(element.scope());
399
405
  }
@@ -1288,7 +1294,7 @@
1288
1294
  var tinyMCEOptions = {
1289
1295
  menubar: false,
1290
1296
  statusbar: false,
1291
- plugins: "bdesk_photo advlist anchor autolink autoresize autosave charmap code colorpicker contextmenu directionality emoticons fullpage fullscreen hr image imagetools importcss insertdatetime legacyoutput link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace tabfocus table template toc visualblocks visualchars wordcount tiny_mce_wiris",
1297
+ plugins: "bdesk_photo advlist anchor autolink autoresize autosave charmap code colorpicker contextmenu directionality emoticons fullpage fullscreen hr image imagetools importcss insertdatetime legacyoutput link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace tabfocus table template toc visualblocks visualchars wordcount tiny_mce_wiris colorpicker textcolor",
1292
1298
  toolbar: "",
1293
1299
  content_style: ""
1294
1300
  };
@@ -1299,6 +1305,8 @@
1299
1305
  tinyMCEOptions.toolbar += " " + toolbarGroup[key];
1300
1306
  }
1301
1307
  }
1308
+
1309
+ tinyMCEOptions.toolbar += " forecolor backcolor ";
1302
1310
  tinyMCEOptions.menubar = optionsSelected.showMenuBar;
1303
1311
  tinyMCEOptions.statusbar = optionsSelected.showStatusBar;
1304
1312
  tinyMCEOptions.content_style = optionsSelected.contentStyle;
@@ -1550,8 +1558,8 @@
1550
1558
  return datasource.active;
1551
1559
  }
1552
1560
  },
1553
- getSchedulerProperties: function(options, datasource, scope) {
1554
- let schedulerStartDate = (options.initialDateStrategy === 'Expression' ? scope.$eval(generateBlocklyCall(options.initialDateBlocklyInfo)) : options.initialDate);
1561
+ getSchedulerProperties: async function(options, datasource, scope) {
1562
+ let schedulerStartDate = (options.initialDateStrategy === 'Expression' ? await scope.$eval(generateBlocklyCall(options.initialDateBlocklyInfo, true)) : options.initialDate);
1555
1563
  let lastSearchedPeriod = {start: null, end: null};
1556
1564
 
1557
1565
  let needsToFetchData = function(searchablePeriod) {
@@ -1988,11 +1996,11 @@
1988
1996
 
1989
1997
  this.initCulture();
1990
1998
 
1991
- $.getScript(baseUrl, function() {
1999
+ $.getScript(baseUrl, async function() {
1992
2000
 
1993
2001
  let kendoDatasource = app.kendoHelper.getDataSource(options.dataSourceScreen.entityDataSource, scope, true, options.dataSourceScreen.rowsPerPage);
1994
2002
 
1995
- let schedulerProperties = this.getSchedulerProperties(options, datasource, scope);
2003
+ let schedulerProperties = await this.getSchedulerProperties(options, datasource, scope);
1996
2004
 
1997
2005
  schedulerElement.kendoScheduler(schedulerProperties);
1998
2006
 
@@ -3470,6 +3478,10 @@
3470
3478
  }
3471
3479
 
3472
3480
  $element = $(element);
3481
+ let $grid = $element.find('[data-role="grid"]');
3482
+ if ($grid.length) {
3483
+ $element = $grid;
3484
+ }
3473
3485
  let style = $element.attr("style")||"";
3474
3486
  if (style) {
3475
3487
  style += ", ";
@@ -4216,7 +4228,13 @@
4216
4228
  value = null;
4217
4229
  }
4218
4230
 
4219
- await combobox.value(value);
4231
+ let comboValue = combobox.value();
4232
+ comboValue = comboValue !== undefined && comboValue !== null ? comboValue.trim() : comboValue;
4233
+ let valueToCheck = value !== undefined && value !== null ? ('' + value).trim() : value;
4234
+
4235
+ if (valueToCheck !== comboValue) {
4236
+ await combobox.value(value);
4237
+ }
4220
4238
 
4221
4239
  if (select.changeCursor) {
4222
4240
  scope.safeApply(() => {
@@ -4580,11 +4598,21 @@
4580
4598
 
4581
4599
  }.bind(relactionDS);
4582
4600
 
4601
+ var hideSelectedItem = attrs.crnHideSelectedItem == 'true';
4602
+ var onSelectedItem = () => {
4603
+ if (hideSelectedItem) {
4604
+ if (combobox.list && combobox.list.length > 0) {
4605
+ combobox.list.find('.k-item').show();
4606
+ combobox.list.find('.k-item.k-state-selected').hide();
4607
+ }
4608
+ }
4609
+ }
4610
+
4583
4611
  options['change'] = attrs.ngChange ? function (){_scope.$eval(attrs.ngChange)}: undefined;
4584
4612
  options['close'] = attrs.ngClose ? function (){_scope.$eval(attrs.ngClose)}: undefined;
4585
4613
  options['dataBound'] = attrs.ngDatabound ? function (){_scope.$eval(attrs.ngDatabound)}: undefined;
4586
4614
  options['filtering'] = attrs.ngFiltering ? function (){_scope.$eval(attrs.ngFiltering)}: undefined;
4587
- options['open'] = attrs.ngOpen ? function (){_scope.$eval(attrs.ngOpen)}: undefined;
4615
+ options['open'] = attrs.ngOpen ? function (){_scope.$eval(attrs.ngOpen); onSelectedItem();}: onSelectedItem;
4588
4616
  options['cascade'] = attrs.ngCascade ? function (){_scope.$eval(attrs.ngCascade)}: undefined;
4589
4617
  evtSelect = attrs.ngSelect ? function (){_scope.$eval(attrs.ngSelect)}: undefined;
4590
4618
  deselect = attrs.ngDeselect ? function (){_scope.$eval(attrs.ngDeselect)}: undefined;
@@ -5108,7 +5136,7 @@
5108
5136
  items.forEach(function (item) {
5109
5137
 
5110
5138
  var security = (item.security && item.security != null) ? ` cronapp-security="${item.security }" ` : '';
5111
- var action = (item.action && item.action != null) ? ` ng-click="${item.action}" ` : '';
5139
+ var action = (item.action && item.action != null) ? ` ng-click="cronapi.internal.lastCronappMenuClick('${item.id}');${item.action}" ` : '';
5112
5140
  var hide = (item.hide && item.hide != null) ? ` ng-hide="${item.hide}" ` : '';
5113
5141
  var iconClass = (item.iconClass && item.iconClass != null) ? `<i class="${item.iconClass}" id="menu-tag-i-${item.id}"></i>&nbsp;` : '';
5114
5142
  var title = `<span id="menu-tag-span-${item.id}"></span>`;
@@ -5235,168 +5263,98 @@
5235
5263
  };
5236
5264
  }])
5237
5265
 
5238
- .directive('cronBreadcrumbs', function () {
5266
+ .directive('cronBreadcrumbs', function ($rootScope) {
5239
5267
  'use strict';
5240
5268
  return {
5241
5269
  restrict: 'E',
5242
5270
  replace: true,
5243
5271
  link: function (scope, element, attrs) {
5244
5272
 
5245
- let crnDelimiterIcon = attrs.crnDelimiterIcon;
5246
- let crnTypeMenu = attrs.typeMenu;
5247
- let idMenu = attrs.idMenu ? attrs.idMenu : null;
5248
- let breadcrumb = [];
5249
- let actionBlockly = attrs.ngInit ? attrs.ngInit : null;
5250
- let idBreadcrumb = attrs.id;
5251
- let arrayPaiBreadcrumb = [];
5273
+ var bcAction = attrs.ngInit ? attrs.ngInit : null;
5274
+ const bcDelimiterIcon = attrs.crnDelimiterIcon;
5275
+ const bcTypeMenu = attrs.typeMenu;
5276
+ const bcMenuId = attrs.idMenu ? attrs.idMenu : null;
5277
+ const bcId = attrs.id;
5278
+ const bcIconRoot = attrs.breadcrumbIcon ? attrs.breadcrumbIcon : null;
5279
+ const bcList = [];
5252
5280
 
5253
- let iconRoot = attrs.breadcrumbIcon ? attrs.breadcrumbIcon : null;
5281
+ const fillAction = async () => {
5282
+ const shortVersion = bcAction.replace("cronapi.client('js.", 'blockly.js.');
5283
+ bcAction = shortVersion.replace("').run()", '');
5284
+ bcAction = scope.$eval(bcAction);
5285
+ bcList = await bcAction();
5254
5286
 
5255
- async function functionActionBlockly() {
5256
- let shortVersion = actionBlockly.replace("cronapi.client('js.", 'blockly.js.');
5257
- actionBlockly = shortVersion.replace("').run()", '');
5258
- actionBlockly = scope.$eval(actionBlockly);
5259
- breadcrumb = await actionBlockly();
5260
-
5261
- var onclick = async (e) => {
5262
- if (e.item.action) {
5263
- e.item.action();
5264
- }
5265
- };
5287
+ const onclick = async (e) => {
5288
+ if (e.item.action) {
5289
+ e.item.action();
5290
+ }
5291
+ };
5266
5292
 
5267
- $(`#${idBreadcrumb}`).kendoBreadcrumb({
5268
- items: breadcrumb,
5269
- delimiterIcon: crnDelimiterIcon,
5270
- navigational: true,
5271
- click : onclick
5272
- });
5293
+ $(`#${bcId}`).kendoBreadcrumb({
5294
+ items: bcList,
5295
+ delimiterIcon: bcDelimiterIcon,
5296
+ navigational: true,
5297
+ click : onclick
5298
+ });
5273
5299
  }
5274
5300
 
5301
+ const clearAction = (action) => {
5302
+ if (action) {
5303
+ return action.replace("cronapi.screen.changeView('", '').replace("', [])", '');
5304
+ }
5305
+ return "#/home";
5306
+ }
5275
5307
 
5276
- if (actionBlockly && crnTypeMenu === "idBloco") {
5277
- functionActionBlockly()
5278
-
5308
+ if (bcAction && bcTypeMenu === "idBloco") {
5309
+ fillAction();
5279
5310
  } else {
5280
- setTimeout(() => {
5281
- // Capturar o json do menu
5282
- let menuOptions = $(`#${idMenu}`)[0].parentElement.attributes['options'];
5283
- menuOptions = JSON.parse(menuOptions.value);
5284
- let subMenuOptions = menuOptions.subMenuOptions;
5285
-
5286
- // Capturar a url da pagina
5287
- let page = document.location.hash;
5288
- if (page === "") {
5289
- page = "home"
5290
- } else {
5291
- page = page.split("/");
5292
- }
5293
-
5294
- inicio(subMenuOptions);
5295
-
5296
- function inicio(items) {
5297
- let x = false;
5298
-
5299
- for (let i in items) {
5300
-
5301
- let action = items[i].action;
5302
- if (action && action != "") {
5303
- action = action.replace("cronapi.screen.changeView('", '');
5304
- action = action.replace("', [])", '')
5305
- action = action.split("/");
5306
- } else {
5307
- action = null
5308
- }
5309
-
5310
- if (items[i].level === 1) {
5311
- arrayPaiBreadcrumb = [];
5312
- }
5313
-
5314
- if (arrayPaiBreadcrumb.length != 0 && items[i].level === arrayPaiBreadcrumb[arrayPaiBreadcrumb.length - 1].level) {
5315
- if (!action) {
5316
- arrayPaiBreadcrumb[arrayPaiBreadcrumb.length - 1] = {
5317
- level: items[i].level,
5318
- title: items[i].title,
5319
- href: '#'
5320
- };
5321
-
5322
- } else if (action) {
5323
- arrayPaiBreadcrumb[arrayPaiBreadcrumb.length - 1] = {
5324
- level: items[i].level,
5325
- title: items[i].title,
5326
- href: document.location.origin + '/' + action.join("/")
5327
- };
5328
-
5329
- }
5330
-
5331
- } else {
5332
- if (!action) {
5333
- arrayPaiBreadcrumb.push({
5334
- level: items[i].level,
5335
- title: items[i].title,
5336
- href: '#'
5337
- });
5338
- } else if (action) {
5339
- arrayPaiBreadcrumb.push({
5340
- level: items[i].level,
5341
- title: items[i].title,
5342
- href: document.location.origin + '/' + action.join("/")
5343
- });
5344
- }
5345
- }
5346
-
5347
- if (items[i].menuItems.length > 0) {
5348
- inicio(items[i].menuItems);
5349
-
5350
- } else {
5351
- if (action) {
5352
- if (action[action.length - 1] === page[page.length - 1] || action[action.length - 1] === page) {
5353
- x = true;
5311
+ var observer = new MutationObserver((mutation, observer) => {
5312
+ const $parent = $(`#${bcMenuId}`).parent();
5313
+ const attrOptions = $parent.attr('options');
5314
+ if (attrOptions) {
5315
+ observer.disconnect(); // stop observing
5316
+
5317
+ const options = JSON.parse(attrOptions);
5318
+ const page = document.location.hash || 'home';
5319
+
5320
+ const findTrace = (array, action, path = []) => {
5321
+ for (let i = 0; i < array.length; i++) {
5322
+ var item = array[i];
5323
+ item.action = clearAction(item.action);
5324
+ if (item.action === action) {
5325
+ return [...path, item];
5326
+ }
5327
+ if (item.menuItems) {
5328
+ const result = findTrace(item.menuItems, action, [...path, item]);
5329
+ if (result) {
5330
+ return result;
5331
+ }
5332
+ }
5354
5333
  }
5334
+ return null;
5355
5335
  }
5356
- }
5357
5336
 
5358
- if (x) {
5359
- for (let y in arrayPaiBreadcrumb) {
5360
-
5361
- if (y == 0 && arrayPaiBreadcrumb[y].level == 1) {
5362
- breadcrumb.push({
5363
- type: "rootitem",
5364
- href: arrayPaiBreadcrumb[y].href,
5365
- text: arrayPaiBreadcrumb[y].title,
5366
- showText: true,
5367
- showIcon: false
5368
- })
5369
- } else if (y == 0 && arrayPaiBreadcrumb[y].level != 1) {
5370
- breadcrumb.push({
5371
- type: "rootitem",
5372
- href: arrayPaiBreadcrumb[y].href,
5373
- text: arrayPaiBreadcrumb[y].title,
5374
- showText: true,
5375
- showIcon: false
5376
- })
5377
- } else {
5378
- breadcrumb.push({
5379
- type: "item",
5380
- href: arrayPaiBreadcrumb[y].href,
5381
- text: arrayPaiBreadcrumb[y].title,
5382
- showText: true,
5383
- showIcon: false
5384
- })
5385
- }
5337
+ const trace = findTrace(options.subMenuOptions, page);
5338
+ if (trace) {
5339
+ for (var index in trace) {
5340
+ const item = trace[index];
5341
+ bcList.push({
5342
+ type: index == 0 ? 'rootitem' : 'item',
5343
+ href: item.action,
5344
+ text: item.title,
5345
+ showText: true,
5346
+ showIcon: false
5347
+ });
5348
+ }
5349
+ $(`#${bcId}`).kendoBreadcrumb({
5350
+ items: bcList,
5351
+ delimiterIcon: bcDelimiterIcon,
5352
+ navigational: true
5353
+ });
5386
5354
  }
5387
-
5388
- return breadcrumb
5389
- }
5390
5355
  }
5391
- }
5392
-
5393
- $(`#${idBreadcrumb}`).kendoBreadcrumb({
5394
- items: breadcrumb,
5395
- delimiterIcon: crnDelimiterIcon,
5396
- navigational: true
5397
- });
5398
-
5399
- }, 800);
5356
+ });
5357
+ observer.observe(document.body, { childList : true});
5400
5358
  }
5401
5359
  }
5402
5360
  }
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "cronapp-framework-js",
3
- "version": "2.9.6-SP.3",
3
+ "version": "2.9.6-SP.31",
4
4
  "description": "Javascript library for CronApp's projects",
5
5
  "main": "cronapp.framework.js",
6
6
  "scripts": {
7
7
  "build": "npm i && gulp",
8
- "test": "echo \"Error: no test specified\" && exit 1"
8
+ "test": "echo \"Error: no test specified\" && exit 1",
9
+ "preinstall": "npx force-resolutions"
9
10
  },
10
11
  "repository": {
11
12
  "type": "git",
@@ -63,14 +64,18 @@
63
64
  "angular-ui-notification": "0.3.6",
64
65
  "ui-select": "0.18.1",
65
66
  "bootstrap": "3.4.1",
66
- "chart.js": "2.7.0",
67
+ "chart.js": "2.9.4",
67
68
  "cpf_cnpj": "0.2.0",
68
69
  "font-awesome": "4.4.0",
69
70
  "jquery": "3.5.1",
70
71
  "justgage": "1.3.5",
71
- "moment": "2.29.1",
72
+ "moment": "2.29.4",
72
73
  "moment-timezone": "0.5.33",
73
74
  "ng-file-upload": "12.2.13",
74
75
  "signature_pad": "^3.0.0-beta.4"
76
+ },
77
+ "resolutions": {
78
+ "chart.js": "2.9.4",
79
+ "moment": "2.29.4"
75
80
  }
76
81
  }
package/postupdate.json CHANGED
@@ -387,6 +387,10 @@
387
387
  "old": "plugins/chart.js/dist/Chart.min.js",
388
388
  "new": "node_modules/chart.js/dist/Chart.min.js"
389
389
  },
390
+ {
391
+ "old": "node_modules/cronapp-lib-js/dist/js/chart.js/Chart.min.js",
392
+ "new": "node_modules/chart.js/dist/Chart.min.js"
393
+ },
390
394
  {
391
395
  "old": "plugins/angular-chart.js/dist/angular-chart.min.js",
392
396
  "new": "node_modules/angular-chart.js/dist/angular-chart.min.js"
@@ -471,6 +475,10 @@
471
475
  "old": "plugins/moment/min/moment-with-locales.min.js",
472
476
  "new": "node_modules/moment/min/moment-with-locales.min.js"
473
477
  },
478
+ {
479
+ "old": "node_modules/cronapp-lib-js/dist/js/moment/moment-with-locales.min.js",
480
+ "new": "node_modules/moment/min/moment-with-locales.min.js"
481
+ },
474
482
  {
475
483
  "old": "plugins/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js",
476
484
  "new": "node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"