@wavemaker/angular-codegen 11.14.0-rc.6276 → 11.14.1-3.6306

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.
@@ -33117,7 +33117,7 @@ function verifySemanticsOfNgModuleDef$1(moduleType, allowDuplicateDeclarationsIn
33117
33117
  verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);
33118
33118
  verifySemanticsOfNgModuleDef$1(modOrStandaloneCmpt, false, moduleType);
33119
33119
  });
33120
- const exports = maybeUnwrapFn$1(ngModuleDef.exports);
33120
+ const exports$1 = maybeUnwrapFn$1(ngModuleDef.exports);
33121
33121
  declarations.forEach(verifyDeclarationsHaveDefinitions);
33122
33122
  declarations.forEach(verifyDirectivesHaveSelector);
33123
33123
  declarations.forEach((declarationType) => verifyNotStandalone(declarationType, moduleType));
@@ -33125,7 +33125,7 @@ function verifySemanticsOfNgModuleDef$1(moduleType, allowDuplicateDeclarationsIn
33125
33125
  ...declarations.map(resolveForwardRef$1),
33126
33126
  ...flatten$3(imports.map(computeCombinedExports$1)).map(resolveForwardRef$1),
33127
33127
  ];
33128
- exports.forEach(verifyExportsAreDeclaredOrReExported);
33128
+ exports$1.forEach(verifyExportsAreDeclaredOrReExported);
33129
33129
  declarations.forEach((decl) => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
33130
33130
  const ngModule = getAnnotation$1(moduleType, 'NgModule');
33131
33131
  if (ngModule) {
@@ -81193,7 +81193,7 @@ function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRo
81193
81193
  verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);
81194
81194
  verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);
81195
81195
  });
81196
- const exports = maybeUnwrapFn(ngModuleDef.exports);
81196
+ const exports$1 = maybeUnwrapFn(ngModuleDef.exports);
81197
81197
  declarations.forEach(verifyDeclarationsHaveDefinitions);
81198
81198
  declarations.forEach(verifyDirectivesHaveSelector);
81199
81199
  declarations.forEach((declarationType) => verifyNotStandalone(declarationType, moduleType));
@@ -81201,7 +81201,7 @@ function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRo
81201
81201
  ...declarations.map(resolveForwardRef),
81202
81202
  ...flatten$1(imports.map(computeCombinedExports)).map(resolveForwardRef),
81203
81203
  ];
81204
- exports.forEach(verifyExportsAreDeclaredOrReExported);
81204
+ exports$1.forEach(verifyExportsAreDeclaredOrReExported);
81205
81205
  declarations.forEach((decl) => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
81206
81206
  const ngModule = getAnnotation(moduleType, 'NgModule');
81207
81207
  if (ngModule) {
@@ -102019,14 +102019,14 @@ function createNgModuleType$1(meta) {
102019
102019
  if (meta.kind === R3NgModuleMetadataKind$1.Local) {
102020
102020
  return new ExpressionType$1$1(meta.type.value);
102021
102021
  }
102022
- const { type: moduleType, declarations, exports, imports, includeImportTypes, publicDeclarationTypes, } = meta;
102022
+ const { type: moduleType, declarations, exports: exports$1, imports, includeImportTypes, publicDeclarationTypes, } = meta;
102023
102023
  return new ExpressionType$1$1(importExpr$1(Identifiers$1.NgModuleDeclaration, [
102024
102024
  new ExpressionType$1$1(moduleType.type),
102025
102025
  publicDeclarationTypes === null
102026
102026
  ? tupleTypeOf$1(declarations)
102027
102027
  : tupleOfTypes$1(publicDeclarationTypes),
102028
102028
  includeImportTypes ? tupleTypeOf$1(imports) : NONE_TYPE$1,
102029
- tupleTypeOf$1(exports),
102029
+ tupleTypeOf$1(exports$1),
102030
102030
  ]));
102031
102031
  }
102032
102032
  /**
@@ -133049,7 +133049,7 @@ var hasRequiredEntities$1;
133049
133049
  function requireEntities$1 () {
133050
133050
  if (hasRequiredEntities$1) return entities$1;
133051
133051
  hasRequiredEntities$1 = 1;
133052
- (function (exports) {
133052
+ (function (exports$1) {
133053
133053
 
133054
133054
  var freeze = requireConventions$1().freeze;
133055
133055
 
@@ -133060,7 +133060,7 @@ function requireEntities$1 () {
133060
133060
  * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0
133061
133061
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia
133062
133062
  */
133063
- exports.XML_ENTITIES = freeze({
133063
+ exports$1.XML_ENTITIES = freeze({
133064
133064
  amp: '&',
133065
133065
  apos: "'",
133066
133066
  gt: '>',
@@ -133082,7 +133082,7 @@ function requireEntities$1 () {
133082
133082
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)
133083
133083
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)
133084
133084
  */
133085
- exports.HTML_ENTITIES = freeze({
133085
+ exports$1.HTML_ENTITIES = freeze({
133086
133086
  Aacute: '\u00C1',
133087
133087
  aacute: '\u00E1',
133088
133088
  Abreve: '\u0102',
@@ -135214,7 +135214,7 @@ function requireEntities$1 () {
135214
135214
  * @deprecated use `HTML_ENTITIES` instead
135215
135215
  * @see HTML_ENTITIES
135216
135216
  */
135217
- exports.entityMap = exports.HTML_ENTITIES;
135217
+ exports$1.entityMap = exports$1.HTML_ENTITIES;
135218
135218
  } (entities$1));
135219
135219
  return entities$1;
135220
135220
  }
@@ -137022,7 +137022,7 @@ var hasRequiredMoment$1;
137022
137022
  function requireMoment$1 () {
137023
137023
  if (hasRequiredMoment$1) return moment$2.exports;
137024
137024
  hasRequiredMoment$1 = 1;
137025
- (function (module, exports) {
137025
+ (function (module, exports$1) {
137026
137026
  (function (global, factory) {
137027
137027
  module.exports = factory() ;
137028
137028
  }(this, (function () {
@@ -147299,11 +147299,11 @@ const CURRENCY_INFO = {
147299
147299
  }
147300
147300
  };
147301
147301
 
147302
- const $RAF$1$1 = window.requestAnimationFrame;
147302
+ const $RAF$1 = window.requestAnimationFrame;
147303
147303
  const $RAFQueue$1 = [];
147304
147304
  const invokeLater$1 = fn => {
147305
147305
  if (!$RAFQueue$1.length) {
147306
- $RAF$1$1(() => {
147306
+ $RAF$1(() => {
147307
147307
  $RAFQueue$1.forEach(f => f());
147308
147308
  $RAFQueue$1.length = 0;
147309
147309
  });
@@ -147845,70 +147845,220 @@ const getFnForEventExpr$1 = (expr) => {
147845
147845
  return fnExecutor$1(expr, ExpressionType$2.Action);
147846
147846
  };
147847
147847
 
147848
+ // Constants
147849
+ const WIDGET_ID_REGEX$1 = /^(widget-[^_]+)/;
147850
+ const WIDGET_PROPERTY_REGEX$1 = /^widget-[^_]+_(.+)$/;
147851
+ const ARRAY_INDEX_PLACEHOLDER$1 = '[$i]';
147852
+ const ARRAY_INDEX_ZERO$1 = '[0]';
147848
147853
  const registry$1 = new Map();
147849
147854
  const watchIdGenerator$1 = new IDGenerator$1('watch-id-');
147850
- const FIRST_TIME_WATCH$1 = {};
147851
- Object.freeze(FIRST_TIME_WATCH$1);
147855
+ const FIRST_TIME_WATCH$1 = Object.freeze({});
147856
+ /**
147857
+ * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
147858
+ */
147859
+ const getWidgetId$1 = (identifier) => {
147860
+ if (!identifier || typeof identifier !== 'string') {
147861
+ return null;
147862
+ }
147863
+ const match = identifier.match(WIDGET_ID_REGEX$1);
147864
+ return match ? match[1] : null;
147865
+ };
147866
+ /**
147867
+ * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
147868
+ */
147869
+ const getPropertyName$1 = (identifier) => {
147870
+ if (!identifier || typeof identifier !== 'string') {
147871
+ return identifier;
147872
+ }
147873
+ const match = identifier.match(WIDGET_PROPERTY_REGEX$1);
147874
+ return match ? match[1] : identifier;
147875
+ };
147876
+ /**
147877
+ * Array consumer wrapper for array-based expressions
147878
+ */
147852
147879
  const arrayConsumer$1 = (listenerFn, restExpr, newVal, oldVal) => {
147853
- let data = newVal, formattedData;
147854
- if (isArray$1(data)) {
147855
- formattedData = data.map(function (datum) {
147856
- return findValueOf$1(datum, restExpr);
147857
- });
147858
- // If resulting structure is an array of array, flatten it
147859
- if (isArray$1(formattedData[0])) {
147860
- formattedData = flatten$2(formattedData);
147861
- }
147862
- listenerFn(formattedData, oldVal);
147880
+ if (!isArray$1(newVal)) {
147881
+ return;
147863
147882
  }
147883
+ let formattedData = newVal.map(datum => findValueOf$1(datum, restExpr));
147884
+ // Flatten if result is array of arrays
147885
+ if (isArray$1(formattedData[0])) {
147886
+ formattedData = flatten$2(formattedData);
147887
+ }
147888
+ listenerFn(formattedData, oldVal);
147864
147889
  };
147865
- const getUpdatedWatcInfo$1 = (expr, acceptsArray, listener) => {
147866
- // listener doesn't accept array
147867
- // replace all `[$i]` with `[0]` and return the expression
147868
- let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
147890
+ /**
147891
+ * Updates watch info for array expressions
147892
+ */
147893
+ const getUpdatedWatchInfo$1 = (expr, acceptsArray, listener) => {
147894
+ const regex = /\[\$i\]/g;
147869
147895
  if (!acceptsArray) {
147870
147896
  return {
147871
- 'expr': expr.replace(regex, $0),
147872
- 'listener': listener
147897
+ expr: expr.replace(regex, ARRAY_INDEX_ZERO$1),
147898
+ listener
147873
147899
  };
147874
147900
  }
147875
- // listener accepts array
147876
- // replace all except the last `[$i]` with `[0]` and return the expression.
147877
- var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
147878
- if (restExpr) {
147879
- arrayConsumerFn = arrayConsumer$1.bind(undefined, listener, restExpr);
147880
- }
147901
+ const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER$1);
147902
+ const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER$1, ARRAY_INDEX_ZERO$1);
147903
+ const restExpr = expr.substring(lastIndex + ARRAY_INDEX_PLACEHOLDER$1.length);
147904
+ const arrayConsumerFn = restExpr
147905
+ ? arrayConsumer$1.bind(undefined, listener, restExpr)
147906
+ : listener;
147881
147907
  return {
147882
- 'expr': _expr,
147883
- 'listener': arrayConsumerFn
147908
+ expr: baseExpr,
147909
+ listener: arrayConsumerFn
147884
147910
  };
147885
147911
  };
147912
+ /**
147913
+ * Determines if an expression is static (doesn't need to be watched)
147914
+ */
147915
+ const STATIC_EXPRESSION_NAMES$1 = [
147916
+ "row.getProperty('investment')",
147917
+ "row.getProperty('factsheetLink')",
147918
+ "row.getProperty('isRebalanceEligible')"
147919
+ ];
147920
+ const isStaticExpression$1 = (expr) => {
147921
+ if (typeof expr !== 'string') {
147922
+ return false;
147923
+ }
147924
+ const trimmedExpr = expr.trim();
147925
+ // Expressions that always evaluate to localization strings
147926
+ if (trimmedExpr.includes('appLocale')) {
147927
+ return true;
147928
+ }
147929
+ // Hard-coded static expression names
147930
+ if (STATIC_EXPRESSION_NAMES$1.includes(trimmedExpr)) {
147931
+ return true;
147932
+ }
147933
+ return false;
147934
+ };
147935
+ /**
147936
+ * Gets the scope type from the scope object
147937
+ */
147938
+ const getScopeType$1 = ($scope) => {
147939
+ if (!$scope) {
147940
+ return null;
147941
+ }
147942
+ if ($scope.pageName)
147943
+ return 'Page';
147944
+ if ($scope.prefabName)
147945
+ return 'Prefab';
147946
+ if ($scope.partialName)
147947
+ return 'Partial';
147948
+ // Check for App scope
147949
+ if ($scope.Variables !== undefined &&
147950
+ $scope.Actions !== undefined &&
147951
+ !$scope.pageName &&
147952
+ !$scope.prefabName &&
147953
+ !$scope.partialName) {
147954
+ return 'App';
147955
+ }
147956
+ if ($scope.constructor?.name === 'AppRef') {
147957
+ return 'App';
147958
+ }
147959
+ return null;
147960
+ };
147961
+ /**
147962
+ * Gets scope name based on scope type
147963
+ */
147964
+ const getScopeName$1 = ($scope, scopeType) => {
147965
+ if (!scopeType || !$scope) {
147966
+ return null;
147967
+ }
147968
+ switch (scopeType) {
147969
+ case 'Prefab': return $scope.prefabName || null;
147970
+ case 'Partial': return $scope.partialName || null;
147971
+ case 'Page': return $scope.pageName || null;
147972
+ default: return null;
147973
+ }
147974
+ };
147975
+ /**
147976
+ * Main watch function
147977
+ */
147886
147978
  const $watch$1 = (expr, $scope, $locals, listener, identifier = watchIdGenerator$1.nextUid(), doNotClone = false, config = {}, isMuted) => {
147887
- if (expr.indexOf('[$i]') !== -1) {
147888
- let watchInfo = getUpdatedWatcInfo$1(expr, config && (config.arrayType || config.isList), listener);
147979
+ // Handle array expressions
147980
+ if (expr.includes(ARRAY_INDEX_PLACEHOLDER$1)) {
147981
+ const watchInfo = getUpdatedWatchInfo$1(expr, config.arrayType || config.isList || false, listener);
147889
147982
  expr = watchInfo.expr;
147890
147983
  listener = watchInfo.listener;
147891
147984
  }
147985
+ // Handle static expressions
147986
+ if (isStaticExpression$1(expr)) {
147987
+ try {
147988
+ const fn = $parseExpr$1(expr);
147989
+ const staticValue = fn($scope, $locals);
147990
+ listener(staticValue, FIRST_TIME_WATCH$1);
147991
+ }
147992
+ catch (e) {
147993
+ console.warn(`Error evaluating static expression '${expr}':`, e);
147994
+ listener(undefined, FIRST_TIME_WATCH$1);
147995
+ }
147996
+ return () => { }; // No-op unsubscribe
147997
+ }
147892
147998
  const fn = $parseExpr$1();
147893
- registry$1.set(identifier, {
147894
- fn: fn.bind(expr, $scope, $locals),
147999
+ const scopeType = getScopeType$1($scope);
148000
+ const scopeName = getScopeName$1($scope, scopeType);
148001
+ const watchInfo = {
148002
+ fn: fn.bind(null, $scope, $locals),
147895
148003
  listener,
147896
148004
  expr,
147897
148005
  last: FIRST_TIME_WATCH$1,
147898
148006
  doNotClone,
147899
- isMuted: isMuted
147900
- });
148007
+ isMuted,
148008
+ scopeType,
148009
+ scopeName
148010
+ };
148011
+ // Store in registry
148012
+ const widgetId = getWidgetId$1(identifier);
148013
+ if (widgetId) {
148014
+ const propertyName = getPropertyName$1(identifier);
148015
+ if (!registry$1.has(widgetId)) {
148016
+ registry$1.set(widgetId, {});
148017
+ }
148018
+ const widgetGroup = registry$1.get(widgetId);
148019
+ widgetGroup[propertyName] = watchInfo;
148020
+ }
148021
+ else {
148022
+ registry$1.set(identifier, watchInfo);
148023
+ }
147901
148024
  return () => $unwatch$1(identifier);
147902
148025
  };
147903
- const $unwatch$1 = identifier => registry$1.delete(identifier);
147904
- window.watchRegistry = registry$1;
148026
+ /**
148027
+ * Unwatches a single identifier
148028
+ */
148029
+ const $unwatch$1 = (identifier) => {
148030
+ const widgetId = getWidgetId$1(identifier);
148031
+ if (widgetId) {
148032
+ const propertyName = getPropertyName$1(identifier);
148033
+ const widgetGroup = registry$1.get(widgetId);
148034
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
148035
+ const watchInfo = widgetGroup[propertyName];
148036
+ if (watchInfo) {
148037
+ delete widgetGroup[propertyName];
148038
+ // Clean up empty widget groups
148039
+ if (Object.keys(widgetGroup).length === 0) {
148040
+ registry$1.delete(widgetId);
148041
+ }
148042
+ return true;
148043
+ }
148044
+ }
148045
+ }
148046
+ // Fallback to direct lookup
148047
+ if (registry$1.has(identifier)) {
148048
+ registry$1.delete(identifier);
148049
+ return true;
148050
+ }
148051
+ return false;
148052
+ };
147905
148053
  const $appDigest$1 = (() => {
147906
- return (force) => {
148054
+ return (force = false) => {
147907
148055
  {
147908
148056
  return;
147909
148057
  }
147910
148058
  };
147911
148059
  })();
148060
+ // Export registry for debugging
148061
+ // (window as any).watchRegistry = registry;
147912
148062
 
147913
148063
  var ComponentType$1;
147914
148064
  (function (ComponentType) {
@@ -147964,8 +148114,8 @@ var Operation$1;
147964
148114
  const DataSource$1 = {
147965
148115
  Operation: Operation$1
147966
148116
  };
147967
- class App {
147968
- }
148117
+ let App$1 = class App {
148118
+ };
147969
148119
  let AbstractI18nService$1 = class AbstractI18nService {
147970
148120
  };
147971
148121
 
@@ -147983,6 +148133,7 @@ const REGEX$1 = {
147983
148133
  SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
147984
148134
  SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
147985
148135
  VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
148136
+ VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
147986
148137
  REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
147987
148138
  DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
147988
148139
  ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
@@ -148205,6 +148356,9 @@ const isVideoFile$1 = (fileName) => {
148205
148356
  const isValidWebURL$1 = (url) => {
148206
148357
  return (REGEX$1.VALID_WEB_URL).test(url);
148207
148358
  };
148359
+ const isValidImageUrl$1 = (url) => {
148360
+ return (REGEX$1.VALID_IMAGE_URL).test(url?.trim());
148361
+ };
148208
148362
  /*This function returns the url to the resource after checking the validity of url*/
148209
148363
  const getResourceURL$1 = (urlString) => {
148210
148364
  return urlString;
@@ -149458,6 +149612,7 @@ var Utils$1 = /*#__PURE__*/Object.freeze({
149458
149612
  isPageable: isPageable$1,
149459
149613
  isSafari: isSafari$1,
149460
149614
  isTablet: isTablet$1,
149615
+ isValidImageUrl: isValidImageUrl$1,
149461
149616
  isValidWebURL: isValidWebURL$1,
149462
149617
  isVideoFile: isVideoFile$1,
149463
149618
  loadScript: loadScript$1,
@@ -150692,14 +150847,14 @@ class ToDatePipe extends WmPipe {
150692
150847
  }
150693
150848
  return this.returnFn('', arguments, this.app.Variables);
150694
150849
  }
150695
- constructor(datePipe, i18nService, customPipeManager) {
150850
+ constructor(datePipe, i18nService, app, customPipeManager) {
150696
150851
  super('toDate', customPipeManager);
150697
150852
  this.datePipe = datePipe;
150698
150853
  this.i18nService = i18nService;
150854
+ this.app = app;
150699
150855
  this.customPipeManager = customPipeManager;
150700
- this.app = inject(App);
150701
150856
  }
150702
- static { this.ɵfac = function ToDatePipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ToDatePipe)(ɵɵdirectiveInject(DatePipe, 16), ɵɵdirectiveInject(AbstractI18nService$1, 16), ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150857
+ static { this.ɵfac = function ToDatePipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ToDatePipe)(ɵɵdirectiveInject(DatePipe, 16), ɵɵdirectiveInject(AbstractI18nService$1, 16), ɵɵdirectiveInject(App$1, 16), ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150703
150858
  static { this.ɵpipe = /*@__PURE__*/ ɵɵdefinePipe({ name: "toDate", type: ToDatePipe, pure: true, standalone: true }); }
150704
150859
  }
150705
150860
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ToDatePipe, [{
@@ -150708,7 +150863,7 @@ class ToDatePipe extends WmPipe {
150708
150863
  standalone: true,
150709
150864
  name: 'toDate'
150710
150865
  }]
150711
- }], () => [{ type: DatePipe }, { type: AbstractI18nService$1 }, { type: CustomPipeManager$1 }], null); })();
150866
+ }], () => [{ type: DatePipe }, { type: AbstractI18nService$1 }, { type: App$1 }, { type: CustomPipeManager$1 }], null); })();
150712
150867
  class ToNumberPipe {
150713
150868
  transform(data, fracSize) {
150714
150869
  if (fracSize && !String(fracSize).match(/^(\d+)?\.((\d+)(-(\d+))?)?$/)) {
@@ -150796,9 +150951,9 @@ class SuffixPipe {
150796
150951
  * Custom pipe: It is work as interceptor between the user custom pipe function and angular pipe
150797
150952
  */
150798
150953
  class CustomPipe {
150799
- constructor(custmeUserPipe) {
150954
+ constructor(app, custmeUserPipe) {
150955
+ this.app = app;
150800
150956
  this.custmeUserPipe = custmeUserPipe;
150801
- this.app = inject(App);
150802
150957
  }
150803
150958
  transform(data, pipename) {
150804
150959
  let argumentArr = [];
@@ -150818,7 +150973,7 @@ class CustomPipe {
150818
150973
  return data;
150819
150974
  }
150820
150975
  }
150821
- static { this.ɵfac = function CustomPipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CustomPipe)(ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150976
+ static { this.ɵfac = function CustomPipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CustomPipe)(ɵɵdirectiveInject(App$1, 16), ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150822
150977
  static { this.ɵpipe = /*@__PURE__*/ ɵɵdefinePipe({ name: "custom", type: CustomPipe, pure: true, standalone: true }); }
150823
150978
  }
150824
150979
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CustomPipe, [{
@@ -150827,7 +150982,7 @@ class CustomPipe {
150827
150982
  standalone: true,
150828
150983
  name: 'custom'
150829
150984
  }]
150830
- }], () => [{ type: CustomPipeManager$1 }], null); })();
150985
+ }], () => [{ type: App$1 }, { type: CustomPipeManager$1 }], null); })();
150831
150986
  class TimeFromNowPipe {
150832
150987
  transform(data) {
150833
150988
  let timestamp;
@@ -158694,14 +158849,14 @@ function createNgModuleType(meta) {
158694
158849
  if (meta.kind === R3NgModuleMetadataKind.Local) {
158695
158850
  return new ExpressionType$1(meta.type.value);
158696
158851
  }
158697
- const { type: moduleType, declarations, exports, imports, includeImportTypes, publicDeclarationTypes, } = meta;
158852
+ const { type: moduleType, declarations, exports: exports$1, imports, includeImportTypes, publicDeclarationTypes, } = meta;
158698
158853
  return new ExpressionType$1(importExpr(Identifiers.NgModuleDeclaration, [
158699
158854
  new ExpressionType$1(moduleType.type),
158700
158855
  publicDeclarationTypes === null
158701
158856
  ? tupleTypeOf(declarations)
158702
158857
  : tupleOfTypes(publicDeclarationTypes),
158703
158858
  includeImportTypes ? tupleTypeOf(imports) : NONE_TYPE,
158704
- tupleTypeOf(exports),
158859
+ tupleTypeOf(exports$1),
158705
158860
  ]));
158706
158861
  }
158707
158862
  /**
@@ -189724,7 +189879,7 @@ var hasRequiredEntities;
189724
189879
  function requireEntities () {
189725
189880
  if (hasRequiredEntities) return entities;
189726
189881
  hasRequiredEntities = 1;
189727
- (function (exports) {
189882
+ (function (exports$1) {
189728
189883
 
189729
189884
  var freeze = requireConventions().freeze;
189730
189885
 
@@ -189735,7 +189890,7 @@ function requireEntities () {
189735
189890
  * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0
189736
189891
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia
189737
189892
  */
189738
- exports.XML_ENTITIES = freeze({
189893
+ exports$1.XML_ENTITIES = freeze({
189739
189894
  amp: '&',
189740
189895
  apos: "'",
189741
189896
  gt: '>',
@@ -189757,7 +189912,7 @@ function requireEntities () {
189757
189912
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)
189758
189913
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)
189759
189914
  */
189760
- exports.HTML_ENTITIES = freeze({
189915
+ exports$1.HTML_ENTITIES = freeze({
189761
189916
  Aacute: '\u00C1',
189762
189917
  aacute: '\u00E1',
189763
189918
  Abreve: '\u0102',
@@ -191889,7 +192044,7 @@ function requireEntities () {
191889
192044
  * @deprecated use `HTML_ENTITIES` instead
191890
192045
  * @see HTML_ENTITIES
191891
192046
  */
191892
- exports.entityMap = exports.HTML_ENTITIES;
192047
+ exports$1.entityMap = exports$1.HTML_ENTITIES;
191893
192048
  } (entities));
191894
192049
  return entities;
191895
192050
  }
@@ -193697,7 +193852,7 @@ var hasRequiredMoment;
193697
193852
  function requireMoment () {
193698
193853
  if (hasRequiredMoment) return moment$1.exports;
193699
193854
  hasRequiredMoment = 1;
193700
- (function (module, exports) {
193855
+ (function (module, exports$1) {
193701
193856
  (function (global, factory) {
193702
193857
  module.exports = factory() ;
193703
193858
  }(this, (function () {
@@ -202909,11 +203064,11 @@ var DEFAULT_FORMATS;
202909
203064
  DEFAULT_FORMATS["DATE_TIME"] = "yyyy-MM-dd HH:mm:ss";
202910
203065
  })(DEFAULT_FORMATS || (DEFAULT_FORMATS = {}));
202911
203066
 
202912
- const $RAF$1 = window.requestAnimationFrame;
203067
+ const $RAF = window.requestAnimationFrame;
202913
203068
  const $RAFQueue = [];
202914
203069
  const invokeLater = fn => {
202915
203070
  if (!$RAFQueue.length) {
202916
- $RAF$1(() => {
203071
+ $RAF(() => {
202917
203072
  $RAFQueue.forEach(f => f());
202918
203073
  $RAFQueue.length = 0;
202919
203074
  });
@@ -203455,70 +203610,220 @@ const getFnForEventExpr = (expr) => {
203455
203610
  return fnExecutor(expr, ExpressionType.Action);
203456
203611
  };
203457
203612
 
203613
+ // Constants
203614
+ const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
203615
+ const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
203616
+ const ARRAY_INDEX_PLACEHOLDER = '[$i]';
203617
+ const ARRAY_INDEX_ZERO = '[0]';
203458
203618
  const registry = new Map();
203459
203619
  const watchIdGenerator = new IDGenerator('watch-id-');
203460
- const FIRST_TIME_WATCH = {};
203461
- Object.freeze(FIRST_TIME_WATCH);
203620
+ const FIRST_TIME_WATCH = Object.freeze({});
203621
+ /**
203622
+ * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
203623
+ */
203624
+ const getWidgetId = (identifier) => {
203625
+ if (!identifier || typeof identifier !== 'string') {
203626
+ return null;
203627
+ }
203628
+ const match = identifier.match(WIDGET_ID_REGEX);
203629
+ return match ? match[1] : null;
203630
+ };
203631
+ /**
203632
+ * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
203633
+ */
203634
+ const getPropertyName = (identifier) => {
203635
+ if (!identifier || typeof identifier !== 'string') {
203636
+ return identifier;
203637
+ }
203638
+ const match = identifier.match(WIDGET_PROPERTY_REGEX);
203639
+ return match ? match[1] : identifier;
203640
+ };
203641
+ /**
203642
+ * Array consumer wrapper for array-based expressions
203643
+ */
203462
203644
  const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
203463
- let data = newVal, formattedData;
203464
- if (isArray(data)) {
203465
- formattedData = data.map(function (datum) {
203466
- return findValueOf(datum, restExpr);
203467
- });
203468
- // If resulting structure is an array of array, flatten it
203469
- if (isArray(formattedData[0])) {
203470
- formattedData = flatten(formattedData);
203471
- }
203472
- listenerFn(formattedData, oldVal);
203645
+ if (!isArray(newVal)) {
203646
+ return;
203473
203647
  }
203648
+ let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
203649
+ // Flatten if result is array of arrays
203650
+ if (isArray(formattedData[0])) {
203651
+ formattedData = flatten(formattedData);
203652
+ }
203653
+ listenerFn(formattedData, oldVal);
203474
203654
  };
203475
- const getUpdatedWatcInfo = (expr, acceptsArray, listener) => {
203476
- // listener doesn't accept array
203477
- // replace all `[$i]` with `[0]` and return the expression
203478
- let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
203655
+ /**
203656
+ * Updates watch info for array expressions
203657
+ */
203658
+ const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
203659
+ const regex = /\[\$i\]/g;
203479
203660
  if (!acceptsArray) {
203480
203661
  return {
203481
- 'expr': expr.replace(regex, $0),
203482
- 'listener': listener
203662
+ expr: expr.replace(regex, ARRAY_INDEX_ZERO),
203663
+ listener
203483
203664
  };
203484
203665
  }
203485
- // listener accepts array
203486
- // replace all except the last `[$i]` with `[0]` and return the expression.
203487
- var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
203488
- if (restExpr) {
203489
- arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);
203490
- }
203666
+ const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
203667
+ const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
203668
+ const restExpr = expr.substring(lastIndex + ARRAY_INDEX_PLACEHOLDER.length);
203669
+ const arrayConsumerFn = restExpr
203670
+ ? arrayConsumer.bind(undefined, listener, restExpr)
203671
+ : listener;
203491
203672
  return {
203492
- 'expr': _expr,
203493
- 'listener': arrayConsumerFn
203673
+ expr: baseExpr,
203674
+ listener: arrayConsumerFn
203494
203675
  };
203495
203676
  };
203677
+ /**
203678
+ * Determines if an expression is static (doesn't need to be watched)
203679
+ */
203680
+ const STATIC_EXPRESSION_NAMES = [
203681
+ "row.getProperty('investment')",
203682
+ "row.getProperty('factsheetLink')",
203683
+ "row.getProperty('isRebalanceEligible')"
203684
+ ];
203685
+ const isStaticExpression = (expr) => {
203686
+ if (typeof expr !== 'string') {
203687
+ return false;
203688
+ }
203689
+ const trimmedExpr = expr.trim();
203690
+ // Expressions that always evaluate to localization strings
203691
+ if (trimmedExpr.includes('appLocale')) {
203692
+ return true;
203693
+ }
203694
+ // Hard-coded static expression names
203695
+ if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
203696
+ return true;
203697
+ }
203698
+ return false;
203699
+ };
203700
+ /**
203701
+ * Gets the scope type from the scope object
203702
+ */
203703
+ const getScopeType = ($scope) => {
203704
+ if (!$scope) {
203705
+ return null;
203706
+ }
203707
+ if ($scope.pageName)
203708
+ return 'Page';
203709
+ if ($scope.prefabName)
203710
+ return 'Prefab';
203711
+ if ($scope.partialName)
203712
+ return 'Partial';
203713
+ // Check for App scope
203714
+ if ($scope.Variables !== undefined &&
203715
+ $scope.Actions !== undefined &&
203716
+ !$scope.pageName &&
203717
+ !$scope.prefabName &&
203718
+ !$scope.partialName) {
203719
+ return 'App';
203720
+ }
203721
+ if ($scope.constructor?.name === 'AppRef') {
203722
+ return 'App';
203723
+ }
203724
+ return null;
203725
+ };
203726
+ /**
203727
+ * Gets scope name based on scope type
203728
+ */
203729
+ const getScopeName = ($scope, scopeType) => {
203730
+ if (!scopeType || !$scope) {
203731
+ return null;
203732
+ }
203733
+ switch (scopeType) {
203734
+ case 'Prefab': return $scope.prefabName || null;
203735
+ case 'Partial': return $scope.partialName || null;
203736
+ case 'Page': return $scope.pageName || null;
203737
+ default: return null;
203738
+ }
203739
+ };
203740
+ /**
203741
+ * Main watch function
203742
+ */
203496
203743
  const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
203497
- if (expr.indexOf('[$i]') !== -1) {
203498
- let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);
203744
+ // Handle array expressions
203745
+ if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
203746
+ const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
203499
203747
  expr = watchInfo.expr;
203500
203748
  listener = watchInfo.listener;
203501
203749
  }
203750
+ // Handle static expressions
203751
+ if (isStaticExpression(expr)) {
203752
+ try {
203753
+ const fn = $parseExpr(expr);
203754
+ const staticValue = fn($scope, $locals);
203755
+ listener(staticValue, FIRST_TIME_WATCH);
203756
+ }
203757
+ catch (e) {
203758
+ console.warn(`Error evaluating static expression '${expr}':`, e);
203759
+ listener(undefined, FIRST_TIME_WATCH);
203760
+ }
203761
+ return () => { }; // No-op unsubscribe
203762
+ }
203502
203763
  const fn = $parseExpr();
203503
- registry.set(identifier, {
203504
- fn: fn.bind(expr, $scope, $locals),
203764
+ const scopeType = getScopeType($scope);
203765
+ const scopeName = getScopeName($scope, scopeType);
203766
+ const watchInfo = {
203767
+ fn: fn.bind(null, $scope, $locals),
203505
203768
  listener,
203506
203769
  expr,
203507
203770
  last: FIRST_TIME_WATCH,
203508
203771
  doNotClone,
203509
- isMuted: isMuted
203510
- });
203772
+ isMuted,
203773
+ scopeType,
203774
+ scopeName
203775
+ };
203776
+ // Store in registry
203777
+ const widgetId = getWidgetId(identifier);
203778
+ if (widgetId) {
203779
+ const propertyName = getPropertyName(identifier);
203780
+ if (!registry.has(widgetId)) {
203781
+ registry.set(widgetId, {});
203782
+ }
203783
+ const widgetGroup = registry.get(widgetId);
203784
+ widgetGroup[propertyName] = watchInfo;
203785
+ }
203786
+ else {
203787
+ registry.set(identifier, watchInfo);
203788
+ }
203511
203789
  return () => $unwatch(identifier);
203512
203790
  };
203513
- const $unwatch = identifier => registry.delete(identifier);
203514
- window.watchRegistry = registry;
203791
+ /**
203792
+ * Unwatches a single identifier
203793
+ */
203794
+ const $unwatch = (identifier) => {
203795
+ const widgetId = getWidgetId(identifier);
203796
+ if (widgetId) {
203797
+ const propertyName = getPropertyName(identifier);
203798
+ const widgetGroup = registry.get(widgetId);
203799
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
203800
+ const watchInfo = widgetGroup[propertyName];
203801
+ if (watchInfo) {
203802
+ delete widgetGroup[propertyName];
203803
+ // Clean up empty widget groups
203804
+ if (Object.keys(widgetGroup).length === 0) {
203805
+ registry.delete(widgetId);
203806
+ }
203807
+ return true;
203808
+ }
203809
+ }
203810
+ }
203811
+ // Fallback to direct lookup
203812
+ if (registry.has(identifier)) {
203813
+ registry.delete(identifier);
203814
+ return true;
203815
+ }
203816
+ return false;
203817
+ };
203515
203818
  const $appDigest = (() => {
203516
- return (force) => {
203819
+ return (force = false) => {
203517
203820
  {
203518
203821
  return;
203519
203822
  }
203520
203823
  };
203521
203824
  })();
203825
+ // Export registry for debugging
203826
+ // (window as any).watchRegistry = registry;
203522
203827
 
203523
203828
  var ComponentType;
203524
203829
  (function (ComponentType) {
@@ -203574,6 +203879,8 @@ var Operation;
203574
203879
  const DataSource = {
203575
203880
  Operation
203576
203881
  };
203882
+ class App {
203883
+ }
203577
203884
  class AbstractI18nService {
203578
203885
  }
203579
203886
 
@@ -203591,6 +203898,7 @@ const REGEX = {
203591
203898
  SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
203592
203899
  SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
203593
203900
  VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
203901
+ VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
203594
203902
  REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
203595
203903
  DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
203596
203904
  ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
@@ -203813,6 +204121,9 @@ const isVideoFile = (fileName) => {
203813
204121
  const isValidWebURL = (url) => {
203814
204122
  return (REGEX.VALID_WEB_URL).test(url);
203815
204123
  };
204124
+ const isValidImageUrl = (url) => {
204125
+ return (REGEX.VALID_IMAGE_URL).test(url?.trim());
204126
+ };
203816
204127
  /*This function returns the url to the resource after checking the validity of url*/
203817
204128
  const getResourceURL = (urlString) => {
203818
204129
  return urlString;
@@ -205066,6 +205377,7 @@ var Utils = /*#__PURE__*/Object.freeze({
205066
205377
  isPageable: isPageable,
205067
205378
  isSafari: isSafari,
205068
205379
  isTablet: isTablet,
205380
+ isValidImageUrl: isValidImageUrl,
205069
205381
  isValidWebURL: isValidWebURL,
205070
205382
  isVideoFile: isVideoFile,
205071
205383
  loadScript: loadScript,
@@ -207905,7 +208217,7 @@ class PipeProvider {
207905
208217
  this.preparePipeMeta(CurrencyPipe$1, 'currency', true, [this._locale]),
207906
208218
  this.preparePipeMeta(DatePipe$1, 'date', true, [this._locale]),
207907
208219
  this.preparePipeMeta(ToDatePipe, 'toDate', true, [
207908
- new DatePipe$1(this._locale), undefined, this.injector.get(CustomPipeManager)
208220
+ new DatePipe$1(this._locale), undefined, this.injector.get(App), this.injector.get(CustomPipeManager)
207909
208221
  ]),
207910
208222
  this.preparePipeMeta(ToNumberPipe, 'toNumber', true, [
207911
208223
  new DecimalPipe$1(this._locale),
@@ -207922,7 +208234,7 @@ class PipeProvider {
207922
208234
  new DecimalPipe$1(this._locale)
207923
208235
  ]),
207924
208236
  this.preparePipeMeta(StringToNumberPipe, 'stringToNumber', true),
207925
- this.preparePipeMeta(CustomPipe, 'custom', true, [this.injector.get(CustomPipeManager)]),
208237
+ this.preparePipeMeta(CustomPipe, 'custom', true, [this.injector.get(App), this.injector.get(CustomPipeManager)]),
207926
208238
  this.preparePipeMeta(TrustAsPipe, 'trustAs', true, [this.domSanitizer]),
207927
208239
  this.preparePipeMeta(SanitizePipe, 'sanitize', true, [this.domSanitizer]),
207928
208240
  this.preparePipeMeta(TemplateReplacePipe, 'templateReplace', true),