@wavemaker/angular-codegen 11.14.1-1.6289 → 11.14.1-10.6348

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,223 @@ 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;
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);
147863
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 + 5);
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 destroyFn = () => $unwatch$1(identifier);
148002
+ const watchInfo = {
148003
+ fn: fn.bind(null, $scope, $locals),
147895
148004
  listener,
147896
148005
  expr,
147897
148006
  last: FIRST_TIME_WATCH$1,
147898
148007
  doNotClone,
147899
- isMuted: isMuted
147900
- });
147901
- return () => $unwatch$1(identifier);
148008
+ isMuted,
148009
+ scopeType,
148010
+ scopeName,
148011
+ destroyFn
148012
+ };
148013
+ // Store in registry
148014
+ const widgetId = getWidgetId$1(identifier);
148015
+ if (widgetId) {
148016
+ const propertyName = getPropertyName$1(identifier);
148017
+ if (!registry$1.has(widgetId)) {
148018
+ registry$1.set(widgetId, {});
148019
+ }
148020
+ const widgetGroup = registry$1.get(widgetId);
148021
+ widgetGroup[propertyName] = watchInfo;
148022
+ }
148023
+ else {
148024
+ registry$1.set(identifier, watchInfo);
148025
+ }
148026
+ return destroyFn;
148027
+ };
148028
+ /**
148029
+ * Unwatches a single identifier
148030
+ */
148031
+ const $unwatch$1 = (identifier) => {
148032
+ const widgetId = getWidgetId$1(identifier);
148033
+ if (widgetId) {
148034
+ const propertyName = getPropertyName$1(identifier);
148035
+ const widgetGroup = registry$1.get(widgetId);
148036
+ //@ts-ignore
148037
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
148038
+ const watchInfo = widgetGroup[propertyName];
148039
+ if (watchInfo) {
148040
+ delete widgetGroup[propertyName];
148041
+ // Clean up empty widget groups
148042
+ if (Object.keys(widgetGroup).length === 0) {
148043
+ registry$1.delete(widgetId);
148044
+ }
148045
+ return true;
148046
+ }
148047
+ }
148048
+ }
148049
+ // Fallback to direct lookup
148050
+ if (registry$1.has(identifier)) {
148051
+ registry$1.delete(identifier);
148052
+ return true;
148053
+ }
148054
+ return false;
147902
148055
  };
147903
- const $unwatch$1 = identifier => registry$1.delete(identifier);
147904
- window.watchRegistry = registry$1;
147905
148056
  const $appDigest$1 = (() => {
147906
- return (force) => {
148057
+ return (force = false) => {
147907
148058
  {
147908
148059
  return;
147909
148060
  }
147910
148061
  };
147911
148062
  })();
148063
+ // Export registry for debugging
148064
+ window.watchRegistry = registry$1;
147912
148065
 
147913
148066
  var ComponentType$1;
147914
148067
  (function (ComponentType) {
@@ -147964,8 +148117,8 @@ var Operation$1;
147964
148117
  const DataSource$1 = {
147965
148118
  Operation: Operation$1
147966
148119
  };
147967
- class App {
147968
- }
148120
+ let App$1 = class App {
148121
+ };
147969
148122
  let AbstractI18nService$1 = class AbstractI18nService {
147970
148123
  };
147971
148124
 
@@ -147983,6 +148136,7 @@ const REGEX$1 = {
147983
148136
  SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
147984
148137
  SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
147985
148138
  VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
148139
+ VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
147986
148140
  REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
147987
148141
  DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
147988
148142
  ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
@@ -148205,6 +148359,9 @@ const isVideoFile$1 = (fileName) => {
148205
148359
  const isValidWebURL$1 = (url) => {
148206
148360
  return (REGEX$1.VALID_WEB_URL).test(url);
148207
148361
  };
148362
+ const isValidImageUrl$1 = (url) => {
148363
+ return (REGEX$1.VALID_IMAGE_URL).test(url?.trim());
148364
+ };
148208
148365
  /*This function returns the url to the resource after checking the validity of url*/
148209
148366
  const getResourceURL$1 = (urlString) => {
148210
148367
  return urlString;
@@ -149458,6 +149615,7 @@ var Utils$1 = /*#__PURE__*/Object.freeze({
149458
149615
  isPageable: isPageable$1,
149459
149616
  isSafari: isSafari$1,
149460
149617
  isTablet: isTablet$1,
149618
+ isValidImageUrl: isValidImageUrl$1,
149461
149619
  isValidWebURL: isValidWebURL$1,
149462
149620
  isVideoFile: isVideoFile$1,
149463
149621
  loadScript: loadScript$1,
@@ -150692,14 +150850,14 @@ class ToDatePipe extends WmPipe {
150692
150850
  }
150693
150851
  return this.returnFn('', arguments, this.app.Variables);
150694
150852
  }
150695
- constructor(datePipe, i18nService, customPipeManager) {
150853
+ constructor(datePipe, i18nService, app, customPipeManager) {
150696
150854
  super('toDate', customPipeManager);
150697
150855
  this.datePipe = datePipe;
150698
150856
  this.i18nService = i18nService;
150857
+ this.app = app;
150699
150858
  this.customPipeManager = customPipeManager;
150700
- this.app = inject(App);
150701
150859
  }
150702
- static { this.ɵfac = function ToDatePipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ToDatePipe)(ɵɵdirectiveInject(DatePipe, 16), ɵɵdirectiveInject(AbstractI18nService$1, 16), ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150860
+ 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
150861
  static { this.ɵpipe = /*@__PURE__*/ ɵɵdefinePipe({ name: "toDate", type: ToDatePipe, pure: true, standalone: true }); }
150704
150862
  }
150705
150863
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ToDatePipe, [{
@@ -150708,7 +150866,7 @@ class ToDatePipe extends WmPipe {
150708
150866
  standalone: true,
150709
150867
  name: 'toDate'
150710
150868
  }]
150711
- }], () => [{ type: DatePipe }, { type: AbstractI18nService$1 }, { type: CustomPipeManager$1 }], null); })();
150869
+ }], () => [{ type: DatePipe }, { type: AbstractI18nService$1 }, { type: App$1 }, { type: CustomPipeManager$1 }], null); })();
150712
150870
  class ToNumberPipe {
150713
150871
  transform(data, fracSize) {
150714
150872
  if (fracSize && !String(fracSize).match(/^(\d+)?\.((\d+)(-(\d+))?)?$/)) {
@@ -150796,9 +150954,9 @@ class SuffixPipe {
150796
150954
  * Custom pipe: It is work as interceptor between the user custom pipe function and angular pipe
150797
150955
  */
150798
150956
  class CustomPipe {
150799
- constructor(custmeUserPipe) {
150957
+ constructor(app, custmeUserPipe) {
150958
+ this.app = app;
150800
150959
  this.custmeUserPipe = custmeUserPipe;
150801
- this.app = inject(App);
150802
150960
  }
150803
150961
  transform(data, pipename) {
150804
150962
  let argumentArr = [];
@@ -150818,7 +150976,7 @@ class CustomPipe {
150818
150976
  return data;
150819
150977
  }
150820
150978
  }
150821
- static { this.ɵfac = function CustomPipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CustomPipe)(ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150979
+ static { this.ɵfac = function CustomPipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CustomPipe)(ɵɵdirectiveInject(App$1, 16), ɵɵdirectiveInject(CustomPipeManager$1, 16)); }; }
150822
150980
  static { this.ɵpipe = /*@__PURE__*/ ɵɵdefinePipe({ name: "custom", type: CustomPipe, pure: true, standalone: true }); }
150823
150981
  }
150824
150982
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CustomPipe, [{
@@ -150827,7 +150985,7 @@ class CustomPipe {
150827
150985
  standalone: true,
150828
150986
  name: 'custom'
150829
150987
  }]
150830
- }], () => [{ type: CustomPipeManager$1 }], null); })();
150988
+ }], () => [{ type: App$1 }, { type: CustomPipeManager$1 }], null); })();
150831
150989
  class TimeFromNowPipe {
150832
150990
  transform(data) {
150833
150991
  let timestamp;
@@ -158694,14 +158852,14 @@ function createNgModuleType(meta) {
158694
158852
  if (meta.kind === R3NgModuleMetadataKind.Local) {
158695
158853
  return new ExpressionType$1(meta.type.value);
158696
158854
  }
158697
- const { type: moduleType, declarations, exports, imports, includeImportTypes, publicDeclarationTypes, } = meta;
158855
+ const { type: moduleType, declarations, exports: exports$1, imports, includeImportTypes, publicDeclarationTypes, } = meta;
158698
158856
  return new ExpressionType$1(importExpr(Identifiers.NgModuleDeclaration, [
158699
158857
  new ExpressionType$1(moduleType.type),
158700
158858
  publicDeclarationTypes === null
158701
158859
  ? tupleTypeOf(declarations)
158702
158860
  : tupleOfTypes(publicDeclarationTypes),
158703
158861
  includeImportTypes ? tupleTypeOf(imports) : NONE_TYPE,
158704
- tupleTypeOf(exports),
158862
+ tupleTypeOf(exports$1),
158705
158863
  ]));
158706
158864
  }
158707
158865
  /**
@@ -189724,7 +189882,7 @@ var hasRequiredEntities;
189724
189882
  function requireEntities () {
189725
189883
  if (hasRequiredEntities) return entities;
189726
189884
  hasRequiredEntities = 1;
189727
- (function (exports) {
189885
+ (function (exports$1) {
189728
189886
 
189729
189887
  var freeze = requireConventions().freeze;
189730
189888
 
@@ -189735,7 +189893,7 @@ function requireEntities () {
189735
189893
  * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0
189736
189894
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia
189737
189895
  */
189738
- exports.XML_ENTITIES = freeze({
189896
+ exports$1.XML_ENTITIES = freeze({
189739
189897
  amp: '&',
189740
189898
  apos: "'",
189741
189899
  gt: '>',
@@ -189757,7 +189915,7 @@ function requireEntities () {
189757
189915
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)
189758
189916
  * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)
189759
189917
  */
189760
- exports.HTML_ENTITIES = freeze({
189918
+ exports$1.HTML_ENTITIES = freeze({
189761
189919
  Aacute: '\u00C1',
189762
189920
  aacute: '\u00E1',
189763
189921
  Abreve: '\u0102',
@@ -191889,7 +192047,7 @@ function requireEntities () {
191889
192047
  * @deprecated use `HTML_ENTITIES` instead
191890
192048
  * @see HTML_ENTITIES
191891
192049
  */
191892
- exports.entityMap = exports.HTML_ENTITIES;
192050
+ exports$1.entityMap = exports$1.HTML_ENTITIES;
191893
192051
  } (entities));
191894
192052
  return entities;
191895
192053
  }
@@ -193697,7 +193855,7 @@ var hasRequiredMoment;
193697
193855
  function requireMoment () {
193698
193856
  if (hasRequiredMoment) return moment$1.exports;
193699
193857
  hasRequiredMoment = 1;
193700
- (function (module, exports) {
193858
+ (function (module, exports$1) {
193701
193859
  (function (global, factory) {
193702
193860
  module.exports = factory() ;
193703
193861
  }(this, (function () {
@@ -202909,11 +203067,11 @@ var DEFAULT_FORMATS;
202909
203067
  DEFAULT_FORMATS["DATE_TIME"] = "yyyy-MM-dd HH:mm:ss";
202910
203068
  })(DEFAULT_FORMATS || (DEFAULT_FORMATS = {}));
202911
203069
 
202912
- const $RAF$1 = window.requestAnimationFrame;
203070
+ const $RAF = window.requestAnimationFrame;
202913
203071
  const $RAFQueue = [];
202914
203072
  const invokeLater = fn => {
202915
203073
  if (!$RAFQueue.length) {
202916
- $RAF$1(() => {
203074
+ $RAF(() => {
202917
203075
  $RAFQueue.forEach(f => f());
202918
203076
  $RAFQueue.length = 0;
202919
203077
  });
@@ -203455,70 +203613,223 @@ const getFnForEventExpr = (expr) => {
203455
203613
  return fnExecutor(expr, ExpressionType.Action);
203456
203614
  };
203457
203615
 
203616
+ // Constants
203617
+ const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
203618
+ const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
203619
+ const ARRAY_INDEX_PLACEHOLDER = '[$i]';
203620
+ const ARRAY_INDEX_ZERO = '[0]';
203458
203621
  const registry = new Map();
203459
203622
  const watchIdGenerator = new IDGenerator('watch-id-');
203460
- const FIRST_TIME_WATCH = {};
203461
- Object.freeze(FIRST_TIME_WATCH);
203623
+ const FIRST_TIME_WATCH = Object.freeze({});
203624
+ /**
203625
+ * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
203626
+ */
203627
+ const getWidgetId = (identifier) => {
203628
+ if (!identifier || typeof identifier !== 'string') {
203629
+ return null;
203630
+ }
203631
+ const match = identifier.match(WIDGET_ID_REGEX);
203632
+ return match ? match[1] : null;
203633
+ };
203634
+ /**
203635
+ * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
203636
+ */
203637
+ const getPropertyName = (identifier) => {
203638
+ if (!identifier || typeof identifier !== 'string') {
203639
+ return identifier;
203640
+ }
203641
+ const match = identifier.match(WIDGET_PROPERTY_REGEX);
203642
+ return match ? match[1] : identifier;
203643
+ };
203644
+ /**
203645
+ * Array consumer wrapper for array-based expressions
203646
+ */
203462
203647
  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);
203648
+ if (!isArray(newVal)) {
203649
+ return;
203473
203650
  }
203651
+ let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
203652
+ // Flatten if result is array of arrays
203653
+ if (isArray(formattedData[0])) {
203654
+ formattedData = flatten(formattedData);
203655
+ }
203656
+ listenerFn(formattedData, oldVal);
203474
203657
  };
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]';
203658
+ /**
203659
+ * Updates watch info for array expressions
203660
+ */
203661
+ const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
203662
+ const regex = /\[\$i\]/g;
203479
203663
  if (!acceptsArray) {
203480
203664
  return {
203481
- 'expr': expr.replace(regex, $0),
203482
- 'listener': listener
203665
+ expr: expr.replace(regex, ARRAY_INDEX_ZERO),
203666
+ listener
203483
203667
  };
203484
203668
  }
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
- }
203669
+ const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
203670
+ const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
203671
+ const restExpr = expr.substring(lastIndex + 5);
203672
+ const arrayConsumerFn = restExpr
203673
+ ? arrayConsumer.bind(undefined, listener, restExpr)
203674
+ : listener;
203491
203675
  return {
203492
- 'expr': _expr,
203493
- 'listener': arrayConsumerFn
203676
+ expr: baseExpr,
203677
+ listener: arrayConsumerFn
203494
203678
  };
203495
203679
  };
203680
+ /**
203681
+ * Determines if an expression is static (doesn't need to be watched)
203682
+ */
203683
+ const STATIC_EXPRESSION_NAMES = [
203684
+ "row.getProperty('investment')",
203685
+ "row.getProperty('factsheetLink')",
203686
+ "row.getProperty('isRebalanceEligible')"
203687
+ ];
203688
+ const isStaticExpression = (expr) => {
203689
+ if (typeof expr !== 'string') {
203690
+ return false;
203691
+ }
203692
+ const trimmedExpr = expr.trim();
203693
+ // Expressions that always evaluate to localization strings
203694
+ // if (trimmedExpr.includes('appLocale')) {
203695
+ // return true;
203696
+ // }
203697
+ // Hard-coded static expression names
203698
+ if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
203699
+ return true;
203700
+ }
203701
+ return false;
203702
+ };
203703
+ /**
203704
+ * Gets the scope type from the scope object
203705
+ */
203706
+ const getScopeType = ($scope) => {
203707
+ if (!$scope) {
203708
+ return null;
203709
+ }
203710
+ if ($scope.pageName)
203711
+ return 'Page';
203712
+ if ($scope.prefabName)
203713
+ return 'Prefab';
203714
+ if ($scope.partialName)
203715
+ return 'Partial';
203716
+ // Check for App scope
203717
+ if ($scope.Variables !== undefined &&
203718
+ $scope.Actions !== undefined &&
203719
+ !$scope.pageName &&
203720
+ !$scope.prefabName &&
203721
+ !$scope.partialName) {
203722
+ return 'App';
203723
+ }
203724
+ if ($scope.constructor?.name === 'AppRef') {
203725
+ return 'App';
203726
+ }
203727
+ return null;
203728
+ };
203729
+ /**
203730
+ * Gets scope name based on scope type
203731
+ */
203732
+ const getScopeName = ($scope, scopeType) => {
203733
+ if (!scopeType || !$scope) {
203734
+ return null;
203735
+ }
203736
+ switch (scopeType) {
203737
+ case 'Prefab': return $scope.prefabName || null;
203738
+ case 'Partial': return $scope.partialName || null;
203739
+ case 'Page': return $scope.pageName || null;
203740
+ default: return null;
203741
+ }
203742
+ };
203743
+ /**
203744
+ * Main watch function
203745
+ */
203496
203746
  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);
203747
+ // Handle array expressions
203748
+ if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
203749
+ const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
203499
203750
  expr = watchInfo.expr;
203500
203751
  listener = watchInfo.listener;
203501
203752
  }
203753
+ // Handle static expressions
203754
+ if (isStaticExpression(expr)) {
203755
+ try {
203756
+ const fn = $parseExpr(expr);
203757
+ const staticValue = fn($scope, $locals);
203758
+ listener(staticValue, FIRST_TIME_WATCH);
203759
+ }
203760
+ catch (e) {
203761
+ console.warn(`Error evaluating static expression '${expr}':`, e);
203762
+ listener(undefined, FIRST_TIME_WATCH);
203763
+ }
203764
+ return () => { }; // No-op unsubscribe
203765
+ }
203502
203766
  const fn = $parseExpr();
203503
- registry.set(identifier, {
203504
- fn: fn.bind(expr, $scope, $locals),
203767
+ const scopeType = getScopeType($scope);
203768
+ const scopeName = getScopeName($scope, scopeType);
203769
+ const destroyFn = () => $unwatch(identifier);
203770
+ const watchInfo = {
203771
+ fn: fn.bind(null, $scope, $locals),
203505
203772
  listener,
203506
203773
  expr,
203507
203774
  last: FIRST_TIME_WATCH,
203508
203775
  doNotClone,
203509
- isMuted: isMuted
203510
- });
203511
- return () => $unwatch(identifier);
203776
+ isMuted,
203777
+ scopeType,
203778
+ scopeName,
203779
+ destroyFn
203780
+ };
203781
+ // Store in registry
203782
+ const widgetId = getWidgetId(identifier);
203783
+ if (widgetId) {
203784
+ const propertyName = getPropertyName(identifier);
203785
+ if (!registry.has(widgetId)) {
203786
+ registry.set(widgetId, {});
203787
+ }
203788
+ const widgetGroup = registry.get(widgetId);
203789
+ widgetGroup[propertyName] = watchInfo;
203790
+ }
203791
+ else {
203792
+ registry.set(identifier, watchInfo);
203793
+ }
203794
+ return destroyFn;
203795
+ };
203796
+ /**
203797
+ * Unwatches a single identifier
203798
+ */
203799
+ const $unwatch = (identifier) => {
203800
+ const widgetId = getWidgetId(identifier);
203801
+ if (widgetId) {
203802
+ const propertyName = getPropertyName(identifier);
203803
+ const widgetGroup = registry.get(widgetId);
203804
+ //@ts-ignore
203805
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
203806
+ const watchInfo = widgetGroup[propertyName];
203807
+ if (watchInfo) {
203808
+ delete widgetGroup[propertyName];
203809
+ // Clean up empty widget groups
203810
+ if (Object.keys(widgetGroup).length === 0) {
203811
+ registry.delete(widgetId);
203812
+ }
203813
+ return true;
203814
+ }
203815
+ }
203816
+ }
203817
+ // Fallback to direct lookup
203818
+ if (registry.has(identifier)) {
203819
+ registry.delete(identifier);
203820
+ return true;
203821
+ }
203822
+ return false;
203512
203823
  };
203513
- const $unwatch = identifier => registry.delete(identifier);
203514
- window.watchRegistry = registry;
203515
203824
  const $appDigest = (() => {
203516
- return (force) => {
203825
+ return (force = false) => {
203517
203826
  {
203518
203827
  return;
203519
203828
  }
203520
203829
  };
203521
203830
  })();
203831
+ // Export registry for debugging
203832
+ window.watchRegistry = registry;
203522
203833
 
203523
203834
  var ComponentType;
203524
203835
  (function (ComponentType) {
@@ -203574,6 +203885,8 @@ var Operation;
203574
203885
  const DataSource = {
203575
203886
  Operation
203576
203887
  };
203888
+ class App {
203889
+ }
203577
203890
  class AbstractI18nService {
203578
203891
  }
203579
203892
 
@@ -203591,6 +203904,7 @@ const REGEX = {
203591
203904
  SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
203592
203905
  SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
203593
203906
  VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
203907
+ VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
203594
203908
  REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
203595
203909
  DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
203596
203910
  ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
@@ -203813,6 +204127,9 @@ const isVideoFile = (fileName) => {
203813
204127
  const isValidWebURL = (url) => {
203814
204128
  return (REGEX.VALID_WEB_URL).test(url);
203815
204129
  };
204130
+ const isValidImageUrl = (url) => {
204131
+ return (REGEX.VALID_IMAGE_URL).test(url?.trim());
204132
+ };
203816
204133
  /*This function returns the url to the resource after checking the validity of url*/
203817
204134
  const getResourceURL = (urlString) => {
203818
204135
  return urlString;
@@ -205066,6 +205383,7 @@ var Utils = /*#__PURE__*/Object.freeze({
205066
205383
  isPageable: isPageable,
205067
205384
  isSafari: isSafari,
205068
205385
  isTablet: isTablet,
205386
+ isValidImageUrl: isValidImageUrl,
205069
205387
  isValidWebURL: isValidWebURL,
205070
205388
  isVideoFile: isVideoFile,
205071
205389
  loadScript: loadScript,
@@ -207905,7 +208223,7 @@ class PipeProvider {
207905
208223
  this.preparePipeMeta(CurrencyPipe$1, 'currency', true, [this._locale]),
207906
208224
  this.preparePipeMeta(DatePipe$1, 'date', true, [this._locale]),
207907
208225
  this.preparePipeMeta(ToDatePipe, 'toDate', true, [
207908
- new DatePipe$1(this._locale), undefined, this.injector.get(CustomPipeManager)
208226
+ new DatePipe$1(this._locale), undefined, this.injector.get(App), this.injector.get(CustomPipeManager)
207909
208227
  ]),
207910
208228
  this.preparePipeMeta(ToNumberPipe, 'toNumber', true, [
207911
208229
  new DecimalPipe$1(this._locale),
@@ -207922,7 +208240,7 @@ class PipeProvider {
207922
208240
  new DecimalPipe$1(this._locale)
207923
208241
  ]),
207924
208242
  this.preparePipeMeta(StringToNumberPipe, 'stringToNumber', true),
207925
- this.preparePipeMeta(CustomPipe, 'custom', true, [this.injector.get(CustomPipeManager)]),
208243
+ this.preparePipeMeta(CustomPipe, 'custom', true, [this.injector.get(App), this.injector.get(CustomPipeManager)]),
207926
208244
  this.preparePipeMeta(TrustAsPipe, 'trustAs', true, [this.domSanitizer]),
207927
208245
  this.preparePipeMeta(SanitizePipe, 'sanitize', true, [this.domSanitizer]),
207928
208246
  this.preparePipeMeta(TemplateReplacePipe, 'templateReplace', true),