@wavemaker/app-ng-runtime 11.14.1-1.6289 → 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.
Files changed (49) hide show
  1. package/components/base/bundles/index.umd.js +87 -17
  2. package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
  3. package/components/base/esm2022/utils/widget-utils.mjs +3 -3
  4. package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
  5. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +7 -3
  6. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
  7. package/components/base/fesm2022/index.mjs +88 -18
  8. package/components/base/fesm2022/index.mjs.map +1 -1
  9. package/components/base/pipes/custom-pipes.d.ts +5 -5
  10. package/components/basic/label/bundles/index.umd.js +9 -1
  11. package/components/basic/label/esm2022/label.directive.mjs +10 -2
  12. package/components/basic/label/fesm2022/index.mjs +9 -1
  13. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  14. package/components/data/table/bundles/index.umd.js +218 -11
  15. package/components/data/table/esm2022/table.component.mjs +219 -12
  16. package/components/data/table/fesm2022/index.mjs +218 -11
  17. package/components/data/table/fesm2022/index.mjs.map +1 -1
  18. package/components/data/table/table.component.d.ts +6 -2
  19. package/components/navigation/menu/bundles/index.umd.js +5 -0
  20. package/components/navigation/menu/esm2022/menu.component.mjs +6 -1
  21. package/components/navigation/menu/fesm2022/index.mjs +5 -0
  22. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  23. package/components/navigation/popover/bundles/index.umd.js +6 -6
  24. package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
  25. package/components/navigation/popover/fesm2022/index.mjs +3 -3
  26. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  27. package/components/navigation/popover/popover.component.d.ts +6 -0
  28. package/core/bundles/index.umd.js +332 -82
  29. package/core/esm2022/public_api.mjs +3 -3
  30. package/core/esm2022/utils/utils.mjs +6 -2
  31. package/core/esm2022/utils/watcher.mjs +323 -81
  32. package/core/fesm2022/index.mjs +331 -84
  33. package/core/fesm2022/index.mjs.map +1 -1
  34. package/core/public_api.d.ts +2 -2
  35. package/core/utils/utils.d.ts +1 -0
  36. package/core/utils/watcher.d.ts +26 -5
  37. package/npm-shrinkwrap.json +2 -2
  38. package/package-lock.json +2 -2
  39. package/package.json +1 -1
  40. package/runtime/base/bundles/index.umd.js +37 -2
  41. package/runtime/base/esm2022/components/app-component/app.component.mjs +7 -2
  42. package/runtime/base/esm2022/components/base-page.component.mjs +9 -2
  43. package/runtime/base/esm2022/components/base-partial.component.mjs +10 -2
  44. package/runtime/base/esm2022/components/base-prefab.component.mjs +10 -2
  45. package/runtime/base/esm2022/components/base-spa-page.component.mjs +9 -2
  46. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
  47. package/runtime/base/fesm2022/index.mjs +38 -3
  48. package/runtime/base/fesm2022/index.mjs.map +1 -1
  49. package/scripts/datatable/datatable.js +19 -2
@@ -1450,11 +1450,11 @@
1450
1450
  }
1451
1451
  };
1452
1452
 
1453
- const $RAF$1 = window.requestAnimationFrame;
1453
+ const $RAF = window.requestAnimationFrame;
1454
1454
  const $RAFQueue = [];
1455
1455
  const invokeLater = fn => {
1456
1456
  if (!$RAFQueue.length) {
1457
- $RAF$1(() => {
1457
+ $RAF(() => {
1458
1458
  $RAFQueue.forEach(f => f());
1459
1459
  $RAFQueue.length = 0;
1460
1460
  });
@@ -2191,14 +2191,25 @@
2191
2191
  return fnExecutor(expr, ExpressionType.Action);
2192
2192
  };
2193
2193
 
2194
+ // Constants
2195
+ const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
2196
+ const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
2197
+ const ARRAY_INDEX_PLACEHOLDER = '[$i]';
2198
+ const ARRAY_INDEX_ZERO = '[0]';
2199
+ const DEBOUNCE_WAIT = 100;
2200
+ const MAX_WATCH_CYCLES = 5;
2194
2201
  const registry = new Map();
2195
2202
  const watchIdGenerator = new IDGenerator('watch-id-');
2196
- const FIRST_TIME_WATCH = {};
2197
- Object.freeze(FIRST_TIME_WATCH);
2198
- const isFirstTimeChange = v => v === FIRST_TIME_WATCH;
2203
+ const FIRST_TIME_WATCH = Object.freeze({});
2204
+ // State
2199
2205
  let muted = false;
2206
+ let changedByWatch = false;
2207
+ let skipWatchers = false;
2208
+ let ngZone;
2200
2209
  let appRef;
2201
- const debounce = (fn, wait = 50) => {
2210
+ // Utility functions
2211
+ const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
2212
+ const debounce = (fn, wait = DEBOUNCE_WAIT) => {
2202
2213
  let timeout;
2203
2214
  return (...args) => {
2204
2215
  window['__zone_symbol__clearTimeout'](timeout);
@@ -2212,115 +2223,345 @@
2212
2223
  muted = false;
2213
2224
  triggerWatchers();
2214
2225
  };
2226
+ /**
2227
+ * Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
2228
+ */
2229
+ const getWidgetId = (identifier) => {
2230
+ if (!identifier || typeof identifier !== 'string') {
2231
+ return null;
2232
+ }
2233
+ const match = identifier.match(WIDGET_ID_REGEX);
2234
+ return match ? match[1] : null;
2235
+ };
2236
+ /**
2237
+ * Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
2238
+ */
2239
+ const getPropertyName = (identifier) => {
2240
+ if (!identifier || typeof identifier !== 'string') {
2241
+ return identifier;
2242
+ }
2243
+ const match = identifier.match(WIDGET_PROPERTY_REGEX);
2244
+ return match ? match[1] : identifier;
2245
+ };
2246
+ /**
2247
+ * Array consumer wrapper for array-based expressions
2248
+ */
2215
2249
  const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
2216
- let data = newVal, formattedData;
2217
- if (lodashEs.isArray(data)) {
2218
- formattedData = data.map(function (datum) {
2219
- return findValueOf(datum, restExpr);
2220
- });
2221
- // If resulting structure is an array of array, flatten it
2222
- if (lodashEs.isArray(formattedData[0])) {
2223
- formattedData = lodashEs.flatten(formattedData);
2224
- }
2225
- listenerFn(formattedData, oldVal);
2250
+ if (!lodashEs.isArray(newVal)) {
2251
+ return;
2226
2252
  }
2253
+ let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
2254
+ // Flatten if result is array of arrays
2255
+ if (lodashEs.isArray(formattedData[0])) {
2256
+ formattedData = lodashEs.flatten(formattedData);
2257
+ }
2258
+ listenerFn(formattedData, oldVal);
2227
2259
  };
2228
- const getUpdatedWatcInfo = (expr, acceptsArray, listener) => {
2229
- // listener doesn't accept array
2230
- // replace all `[$i]` with `[0]` and return the expression
2231
- let regex = /\[\$i\]/g, $I = '[$i]', $0 = '[0]';
2260
+ /**
2261
+ * Updates watch info for array expressions
2262
+ */
2263
+ const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
2264
+ const regex = /\[\$i\]/g;
2232
2265
  if (!acceptsArray) {
2233
2266
  return {
2234
- 'expr': expr.replace(regex, $0),
2235
- 'listener': listener
2267
+ expr: expr.replace(regex, ARRAY_INDEX_ZERO),
2268
+ listener
2236
2269
  };
2237
2270
  }
2238
- // listener accepts array
2239
- // replace all except the last `[$i]` with `[0]` and return the expression.
2240
- var index = expr.lastIndexOf($I), _expr = expr.substr(0, index).replace($I, $0), restExpr = expr.substr(index + 5), arrayConsumerFn = listener;
2241
- if (restExpr) {
2242
- arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);
2243
- }
2271
+ const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
2272
+ const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
2273
+ const restExpr = expr.substring(lastIndex + ARRAY_INDEX_PLACEHOLDER.length);
2274
+ const arrayConsumerFn = restExpr
2275
+ ? arrayConsumer.bind(undefined, listener, restExpr)
2276
+ : listener;
2244
2277
  return {
2245
- 'expr': _expr,
2246
- 'listener': arrayConsumerFn
2278
+ expr: baseExpr,
2279
+ listener: arrayConsumerFn
2247
2280
  };
2248
2281
  };
2282
+ /**
2283
+ * Determines if an expression is static (doesn't need to be watched)
2284
+ */
2285
+ const STATIC_EXPRESSION_NAMES = [
2286
+ "row.getProperty('investment')",
2287
+ "row.getProperty('factsheetLink')",
2288
+ "row.getProperty('isRebalanceEligible')"
2289
+ ];
2290
+ const isStaticExpression = (expr) => {
2291
+ if (typeof expr !== 'string') {
2292
+ return false;
2293
+ }
2294
+ const trimmedExpr = expr.trim();
2295
+ // Expressions that always evaluate to localization strings
2296
+ if (trimmedExpr.includes('appLocale')) {
2297
+ return true;
2298
+ }
2299
+ // Hard-coded static expression names
2300
+ if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
2301
+ return true;
2302
+ }
2303
+ return false;
2304
+ };
2305
+ /**
2306
+ * Gets the scope type from the scope object
2307
+ */
2308
+ const getScopeType = ($scope) => {
2309
+ if (!$scope) {
2310
+ return null;
2311
+ }
2312
+ if ($scope.pageName)
2313
+ return 'Page';
2314
+ if ($scope.prefabName)
2315
+ return 'Prefab';
2316
+ if ($scope.partialName)
2317
+ return 'Partial';
2318
+ // Check for App scope
2319
+ if ($scope.Variables !== undefined &&
2320
+ $scope.Actions !== undefined &&
2321
+ !$scope.pageName &&
2322
+ !$scope.prefabName &&
2323
+ !$scope.partialName) {
2324
+ return 'App';
2325
+ }
2326
+ if ($scope.constructor?.name === 'AppRef') {
2327
+ return 'App';
2328
+ }
2329
+ return null;
2330
+ };
2331
+ /**
2332
+ * Gets scope name based on scope type
2333
+ */
2334
+ const getScopeName = ($scope, scopeType) => {
2335
+ if (!scopeType || !$scope) {
2336
+ return null;
2337
+ }
2338
+ switch (scopeType) {
2339
+ case 'Prefab': return $scope.prefabName || null;
2340
+ case 'Partial': return $scope.partialName || null;
2341
+ case 'Page': return $scope.pageName || null;
2342
+ default: return null;
2343
+ }
2344
+ };
2345
+ /**
2346
+ * Main watch function
2347
+ */
2249
2348
  const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
2250
- if (expr.indexOf('[$i]') !== -1) {
2251
- let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);
2349
+ // Handle array expressions
2350
+ if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
2351
+ const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
2252
2352
  expr = watchInfo.expr;
2253
2353
  listener = watchInfo.listener;
2254
2354
  }
2355
+ // Handle static expressions
2356
+ if (isStaticExpression(expr)) {
2357
+ try {
2358
+ const fn = $parseExpr(expr);
2359
+ const staticValue = fn($scope, $locals);
2360
+ listener(staticValue, FIRST_TIME_WATCH);
2361
+ }
2362
+ catch (e) {
2363
+ console.warn(`Error evaluating static expression '${expr}':`, e);
2364
+ listener(undefined, FIRST_TIME_WATCH);
2365
+ }
2366
+ return () => { }; // No-op unsubscribe
2367
+ }
2255
2368
  const fn = $parseExpr(expr);
2256
- registry.set(identifier, {
2257
- fn: fn.bind(expr, $scope, $locals),
2369
+ const scopeType = getScopeType($scope);
2370
+ const scopeName = getScopeName($scope, scopeType);
2371
+ const watchInfo = {
2372
+ fn: fn.bind(null, $scope, $locals),
2258
2373
  listener,
2259
2374
  expr,
2260
2375
  last: FIRST_TIME_WATCH,
2261
2376
  doNotClone,
2262
- isMuted: isMuted
2263
- });
2377
+ isMuted,
2378
+ scopeType,
2379
+ scopeName
2380
+ };
2381
+ // Store in registry
2382
+ const widgetId = getWidgetId(identifier);
2383
+ if (widgetId) {
2384
+ const propertyName = getPropertyName(identifier);
2385
+ if (!registry.has(widgetId)) {
2386
+ registry.set(widgetId, {});
2387
+ }
2388
+ const widgetGroup = registry.get(widgetId);
2389
+ widgetGroup[propertyName] = watchInfo;
2390
+ }
2391
+ else {
2392
+ registry.set(identifier, watchInfo);
2393
+ }
2264
2394
  return () => $unwatch(identifier);
2265
2395
  };
2266
- const $unwatch = identifier => registry.delete(identifier);
2267
- let changedByWatch = false;
2268
- const $RAF = window.requestAnimationFrame;
2269
- let ngZone;
2270
- const triggerWatchers = (ignoreMuted) => {
2396
+ /**
2397
+ * Unwatches a single identifier
2398
+ */
2399
+ const $unwatch = (identifier) => {
2400
+ const widgetId = getWidgetId(identifier);
2401
+ if (widgetId) {
2402
+ const propertyName = getPropertyName(identifier);
2403
+ const widgetGroup = registry.get(widgetId);
2404
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
2405
+ const watchInfo = widgetGroup[propertyName];
2406
+ if (watchInfo) {
2407
+ delete widgetGroup[propertyName];
2408
+ // Clean up empty widget groups
2409
+ if (Object.keys(widgetGroup).length === 0) {
2410
+ registry.delete(widgetId);
2411
+ }
2412
+ return true;
2413
+ }
2414
+ }
2415
+ }
2416
+ // Fallback to direct lookup
2417
+ if (registry.has(identifier)) {
2418
+ registry.delete(identifier);
2419
+ return true;
2420
+ }
2421
+ return false;
2422
+ };
2423
+ /**
2424
+ * Unwatches all watchers for a specific widget ID
2425
+ */
2426
+ const $unwatchAll = (widgetId) => {
2427
+ if (!widgetId || typeof widgetId !== 'string') {
2428
+ return 0;
2429
+ }
2430
+ const widgetGroup = registry.get(widgetId);
2431
+ if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
2432
+ const count = Object.keys(widgetGroup).length;
2433
+ registry.delete(widgetId);
2434
+ return count;
2435
+ }
2436
+ // Fallback: find all identifiers starting with this widget ID
2437
+ let removedCount = 0;
2438
+ const identifiersToRemove = [];
2439
+ registry.forEach((_, key) => {
2440
+ if (key.startsWith(widgetId + '_')) {
2441
+ identifiersToRemove.push(key);
2442
+ }
2443
+ });
2444
+ identifiersToRemove.forEach(identifier => {
2445
+ if ($unwatch(identifier)) {
2446
+ removedCount++;
2447
+ }
2448
+ });
2449
+ return removedCount;
2450
+ };
2451
+ /**
2452
+ * Unwatches all watchers for a specific scope (Page, Prefab, Partial, or App)
2453
+ * Now works directly with the main registry instead of separate scoped registries
2454
+ */
2455
+ const $unwatchAllByScope = (scopeType, scopeName) => {
2456
+ if (!scopeType) {
2457
+ return 0;
2458
+ }
2459
+ let removedCount = 0;
2460
+ const identifiersToRemove = [];
2461
+ registry.forEach((value, key) => {
2462
+ // Handle grouped structure (widget groups)
2463
+ if (value && typeof value === 'object' && !value.fn) {
2464
+ Object.entries(value).forEach(([propertyName, watchInfo]) => {
2465
+ if (watchInfo?.scopeType === scopeType &&
2466
+ (!scopeName || watchInfo.scopeName === scopeName)) {
2467
+ identifiersToRemove.push(`${key}_${propertyName}`);
2468
+ }
2469
+ });
2470
+ }
2471
+ else {
2472
+ // Direct watchInfo
2473
+ const watchInfo = value;
2474
+ if (watchInfo?.scopeType === scopeType &&
2475
+ (!scopeName || watchInfo.scopeName === scopeName)) {
2476
+ identifiersToRemove.push(key);
2477
+ }
2478
+ }
2479
+ });
2480
+ // Unwatch all collected identifiers
2481
+ identifiersToRemove.forEach(identifier => {
2482
+ if ($unwatch(identifier)) {
2483
+ removedCount++;
2484
+ }
2485
+ });
2486
+ return removedCount;
2487
+ };
2488
+ /**
2489
+ * Processes a single watch info during trigger cycle
2490
+ */
2491
+ const processWatchInfo = (watchInfo) => {
2492
+ if (!watchInfo?.fn || (watchInfo.isMuted?.() ?? false)) {
2493
+ return false;
2494
+ }
2495
+ let newValue;
2496
+ try {
2497
+ newValue = watchInfo.fn();
2498
+ }
2499
+ catch (e) {
2500
+ console.warn(`Error executing expression: '${watchInfo.expr}'`, e);
2501
+ return false;
2502
+ }
2503
+ if (lodashEs.isEqual(newValue, watchInfo.last)) {
2504
+ return false;
2505
+ }
2506
+ // Change detected
2507
+ changedByWatch = true;
2508
+ watchInfo.last = lodashEs.isObject(newValue) && !watchInfo.doNotClone
2509
+ ? lodashEs.clone(newValue)
2510
+ : newValue;
2511
+ watchInfo.listener(newValue, watchInfo.last === newValue ? FIRST_TIME_WATCH : watchInfo.last);
2512
+ changedByWatch = false;
2513
+ return true;
2514
+ };
2515
+ /**
2516
+ * Triggers all watchers
2517
+ */
2518
+ const triggerWatchers = (ignoreMuted = false) => {
2271
2519
  if (muted && !ignoreMuted) {
2272
2520
  return;
2273
2521
  }
2274
- const limit = 5;
2275
2522
  let pass = 1;
2276
2523
  let changeDetected;
2277
2524
  do {
2278
2525
  changeDetected = false;
2279
- registry.forEach(watchInfo => {
2280
- if (watchInfo.isMuted && watchInfo.isMuted()) {
2281
- return;
2282
- }
2283
- const fn = watchInfo.fn;
2284
- const listener = watchInfo.listener;
2285
- const ov = watchInfo.last;
2286
- let nv;
2287
- try {
2288
- nv = fn();
2289
- }
2290
- catch (e) {
2291
- console.warn(`error in executing expression: '${watchInfo.expr}'`);
2526
+ registry.forEach((value) => {
2527
+ // Handle grouped structure
2528
+ if (value && typeof value === 'object' && !value.fn) {
2529
+ Object.values(value).forEach((watchInfo) => {
2530
+ if (processWatchInfo(watchInfo)) {
2531
+ changeDetected = true;
2532
+ }
2533
+ });
2292
2534
  }
2293
- if (!lodashEs.isEqual(nv, ov)) {
2294
- changeDetected = true;
2295
- changedByWatch = true;
2296
- watchInfo.last = nv;
2297
- // @ts-ignore
2298
- if (lodashEs.isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
2299
- watchInfo.last = lodashEs.clone(nv);
2535
+ else {
2536
+ // Direct watchInfo
2537
+ if (processWatchInfo(value)) {
2538
+ changeDetected = true;
2300
2539
  }
2301
- listener(nv, ov);
2302
- resetChangeFromWatch();
2303
2540
  }
2304
2541
  });
2305
2542
  pass++;
2306
- } while (changeDetected && pass < limit);
2307
- if (changeDetected && pass === limit) {
2308
- console.warn(`Number of watch cycles gone above set limit of: ${limit} `);
2543
+ } while (changeDetected && pass < MAX_WATCH_CYCLES);
2544
+ if (changeDetected && pass === MAX_WATCH_CYCLES) {
2545
+ console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
2309
2546
  }
2310
2547
  };
2311
- const setNgZone = zone => ngZone = zone;
2312
- const setAppRef = ref => {
2548
+ // Angular zone integration
2549
+ const setNgZone = (zone) => {
2550
+ ngZone = zone;
2551
+ };
2552
+ const setAppRef = (ref) => {
2313
2553
  appRef = ref;
2314
2554
  };
2315
2555
  const isChangeFromWatch = () => changedByWatch;
2316
- const resetChangeFromWatch = () => changedByWatch = false;
2317
- window.watchRegistry = registry;
2318
- let skipWatchers;
2556
+ const resetChangeFromWatch = () => {
2557
+ changedByWatch = false;
2558
+ };
2559
+ // Debounced trigger
2319
2560
  const debouncedTriggerWatchers = debounce(() => {
2320
2561
  skipWatchers = true;
2321
2562
  ngZone.run(() => triggerWatchers());
2322
- }, 100);
2323
- const $invokeWatchers = (force, ignoreMuted) => {
2563
+ }, DEBOUNCE_WAIT);
2564
+ const $invokeWatchers = (force = false, ignoreMuted = false) => {
2324
2565
  if (force) {
2325
2566
  triggerWatchers(ignoreMuted);
2326
2567
  }
@@ -2334,7 +2575,8 @@
2334
2575
  };
2335
2576
  const $appDigest = (() => {
2336
2577
  let queued = false;
2337
- return (force) => {
2578
+ const $RAF = window.requestAnimationFrame;
2579
+ return (force = false) => {
2338
2580
  if (!appRef) {
2339
2581
  return;
2340
2582
  }
@@ -2346,16 +2588,16 @@
2346
2588
  if (queued) {
2347
2589
  return;
2348
2590
  }
2349
- else {
2350
- queued = true;
2351
- $RAF(() => {
2352
- ngZone.run(() => appRef.tick());
2353
- queued = false;
2354
- });
2355
- }
2591
+ queued = true;
2592
+ $RAF(() => {
2593
+ ngZone.run(() => appRef.tick());
2594
+ queued = false;
2595
+ });
2356
2596
  }
2357
2597
  };
2358
2598
  })();
2599
+ // Export registry for debugging
2600
+ // (window as any).watchRegistry = registry;
2359
2601
 
2360
2602
  exports.ComponentType = void 0;
2361
2603
  (function (ComponentType) {
@@ -2452,6 +2694,7 @@
2452
2694
  SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
2453
2695
  SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
2454
2696
  VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
2697
+ VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
2455
2698
  REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
2456
2699
  DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
2457
2700
  ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
@@ -2674,6 +2917,9 @@
2674
2917
  const isValidWebURL = (url) => {
2675
2918
  return (REGEX.VALID_WEB_URL).test(url);
2676
2919
  };
2920
+ const isValidImageUrl = (url) => {
2921
+ return (REGEX.VALID_IMAGE_URL).test(url?.trim());
2922
+ };
2677
2923
  /*This function returns the url to the resource after checking the validity of url*/
2678
2924
  const getResourceURL = (urlString) => {
2679
2925
  return urlString;
@@ -3927,6 +4173,7 @@
3927
4173
  isPageable: isPageable,
3928
4174
  isSafari: isSafari,
3929
4175
  isTablet: isTablet,
4176
+ isValidImageUrl: isValidImageUrl,
3930
4177
  isValidWebURL: isValidWebURL,
3931
4178
  isVideoFile: isVideoFile,
3932
4179
  loadScript: loadScript,
@@ -5159,6 +5406,8 @@
5159
5406
  exports.$parseEvent = $parseEvent;
5160
5407
  exports.$parseExpr = $parseExpr;
5161
5408
  exports.$unwatch = $unwatch;
5409
+ exports.$unwatchAll = $unwatchAll;
5410
+ exports.$unwatchAllByScope = $unwatchAllByScope;
5162
5411
  exports.$watch = $watch;
5163
5412
  exports.AbstractDialogService = AbstractDialogService;
5164
5413
  exports.AbstractHttpService = AbstractHttpService;
@@ -5282,6 +5531,7 @@
5282
5531
  exports.isObject = isObject;
5283
5532
  exports.isPageable = isPageable;
5284
5533
  exports.isSafari = isSafari;
5534
+ exports.isValidImageUrl = isValidImageUrl;
5285
5535
  exports.isValidWebURL = isValidWebURL;
5286
5536
  exports.isVideoFile = isVideoFile;
5287
5537
  exports.loadScript = loadScript;
@@ -7,8 +7,8 @@ export { appendNode, insertBefore, insertAfter, removeNode, removeClass, addClas
7
7
  export * from './enums/enums';
8
8
  export * from './utils/event-notifier';
9
9
  export { $parseExpr, $parseEvent, registerFnByExpr, setPipeProvider, getFnByExpr, getFnForBindExpr, getFnForEventExpr } from './utils/expression-parser';
10
- export { isDefined, isObject, toBoolean, isIE, isAndroid, isAndroidTablet, isIphone, isIpod, isIpad, isIos, isSafari, isLargeTabletLandscape, isLargeTabletPortrait, isMobile, getAndroidVersion, isKitkatDevice, encodeUrl, encodeUrlParams, initCaps, spaceSeparate, replaceAt, periodSeparate, prettifyLabel, deHyphenate, prettifyLabels, isInsecureContentRequest, stringStartsWith, getEvaluatedExprValue, isImageFile, isAudioFile, isVideoFile, isValidWebURL, getResourceURL, triggerFn, hasOffsetStr, getFormattedDate, getDateObj, addEventListenerOnElement, getClonedObject, getFiles, generateGUId, validateAccessRoles, getValidJSON, xmlToJson, findValueOf, extractType, isNumberType, isEmptyObject, scrollToElement, isElementInViewport, isPageable, replace, isDateTimeType, getValidDateObject, getNativeDateObject, getBlob, isEqualWithFields, loadStyleSheet, loadStyleSheets, loadScript, loadScripts, _WM_APP_PROJECT, setSessionStorageItem, getSessionStorageItem, noop, convertToBlob, AppConstants, openLink, fetchContent, toPromise, retryIfFails, getAbortableDefer, createCSSRule, getUrlParams, getMomentLocaleObject, getRouteNameFromLink, isAppleProduct, defer, executePromiseChain, isDataSourceEqual, validateDataSourceCtx, processFilterExpBindNode, extendProto, removeExtraSlashes, getDisplayDateTimeFormat, addForIdAttributes, adjustContainerPosition, adjustContainerRightEdges, setTranslation3dPosition, getWebkitTraslationMatrix, closePopover, detectChanges, triggerItemAction, getDatasourceFromExpr, extractCurrentItemExpr, findRootContainer, VALIDATOR, transformFileURI, appendScriptToHead, getAppSetting, setListClass, findParent, getNavClass, getSheetPositionClass } from './utils/utils';
11
- export { FIRST_TIME_WATCH, isFirstTimeChange, debounce, muteWatchers, unMuteWatchers, $watch, $unwatch, setNgZone, setAppRef, isChangeFromWatch, resetChangeFromWatch, $invokeWatchers, $appDigest } from './utils/watcher';
10
+ export { isDefined, isObject, toBoolean, isIE, isAndroid, isAndroidTablet, isIphone, isIpod, isIpad, isIos, isSafari, isLargeTabletLandscape, isLargeTabletPortrait, isMobile, getAndroidVersion, isKitkatDevice, encodeUrl, encodeUrlParams, initCaps, spaceSeparate, replaceAt, periodSeparate, prettifyLabel, deHyphenate, prettifyLabels, isInsecureContentRequest, stringStartsWith, getEvaluatedExprValue, isImageFile, isAudioFile, isVideoFile, isValidImageUrl, isValidWebURL, getResourceURL, triggerFn, hasOffsetStr, getFormattedDate, getDateObj, addEventListenerOnElement, getClonedObject, getFiles, generateGUId, validateAccessRoles, getValidJSON, xmlToJson, findValueOf, extractType, isNumberType, isEmptyObject, scrollToElement, isElementInViewport, isPageable, replace, isDateTimeType, getValidDateObject, getNativeDateObject, getBlob, isEqualWithFields, loadStyleSheet, loadStyleSheets, loadScript, loadScripts, _WM_APP_PROJECT, setSessionStorageItem, getSessionStorageItem, noop, convertToBlob, AppConstants, openLink, fetchContent, toPromise, retryIfFails, getAbortableDefer, createCSSRule, getUrlParams, getMomentLocaleObject, getRouteNameFromLink, isAppleProduct, defer, executePromiseChain, isDataSourceEqual, validateDataSourceCtx, processFilterExpBindNode, extendProto, removeExtraSlashes, getDisplayDateTimeFormat, addForIdAttributes, adjustContainerPosition, adjustContainerRightEdges, setTranslation3dPosition, getWebkitTraslationMatrix, closePopover, detectChanges, triggerItemAction, getDatasourceFromExpr, extractCurrentItemExpr, findRootContainer, VALIDATOR, transformFileURI, appendScriptToHead, getAppSetting, setListClass, findParent, getNavClass, getSheetPositionClass } from './utils/utils';
11
+ export { FIRST_TIME_WATCH, isFirstTimeChange, debounce, muteWatchers, unMuteWatchers, $watch, $unwatch, $unwatchAll, $unwatchAllByScope, setNgZone, setAppRef, isChangeFromWatch, resetChangeFromWatch, $invokeWatchers, $appDigest } from './utils/watcher';
12
12
  export * from './utils/id-generator';
13
13
  export * from './types/types';
14
14
  export { Viewport } from './services/viewport.service';
@@ -23,4 +23,4 @@ export { StatePersistence } from './services/state-persistence.service';
23
23
  export { PaginationService } from './services/pagination.service';
24
24
  export * from './utils/wm-project-properties';
25
25
  export * from './utils/lru-cache';
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsUUFBUSxFQUNSLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxFQUNYLGVBQWUsRUFDZixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksRUFDSixhQUFhLEVBQ2IsWUFBWSxFQUNaLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxLQUFLLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLGFBQWEsRUFDYixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLHFCQUFxQixFQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsWUFBWSxFQUNaLGNBQWMsRUFDZCxNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb3JlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvYnVpbGQtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvY3VycmVuY3ktY29uc3RhbnRzJztcbmV4cG9ydCB7XG4gICAgYXBwZW5kTm9kZSxcbiAgICBpbnNlcnRCZWZvcmUsXG4gICAgaW5zZXJ0QWZ0ZXIsXG4gICAgcmVtb3ZlTm9kZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBhZGRDbGFzcyxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICBzZXRDU1MsXG4gICAgc2V0Q1NTRnJvbU9iaixcbiAgICBzZXRQcm9wZXJ0eSxcbiAgICBzZXRBdHRyLFxuICAgIHNldEh0bWwsXG4gICAgcmVtb3ZlQXR0cixcbiAgICBjcmVhdGVFbGVtZW50LFxuICAgIHRvRGltZW5zaW9uXG59IGZyb20gJy4vdXRpbHMvZG9tJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9ldmVudC1ub3RpZmllcic7XG5leHBvcnQge1xuICAgIFBhcnNlRXhwclJlc3VsdCxcbiAgICAkcGFyc2VFeHByLFxuICAgICRwYXJzZUV2ZW50LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHIsXG4gICAgc2V0UGlwZVByb3ZpZGVyLFxuICAgIGdldEZuQnlFeHByLFxuICAgIGdldEZuRm9yQmluZEV4cHIsXG4gICAgZ2V0Rm5Gb3JFdmVudEV4cHJcbn0gZnJvbSAnLi91dGlscy9leHByZXNzaW9uLXBhcnNlcic7XG5leHBvcnQge1xuICAgIEVWRU5UX0xJRkUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzT2JqZWN0LFxuICAgIHRvQm9vbGVhbixcbiAgICBpc0lFLFxuICAgIGlzQW5kcm9pZCxcbiAgICBpc0FuZHJvaWRUYWJsZXQsXG4gICAgaXNJcGhvbmUsXG4gICAgaXNJcG9kLFxuICAgIGlzSXBhZCxcbiAgICBpc0lvcyxcbiAgICBpc1NhZmFyaSxcbiAgICBpc0xhcmdlVGFibGV0TGFuZHNjYXBlLFxuICAgIGlzTGFyZ2VUYWJsZXRQb3J0cmFpdCxcbiAgICBpc01vYmlsZSxcbiAgICBnZXRBbmRyb2lkVmVyc2lvbixcbiAgICBpc0tpdGthdERldmljZSxcbiAgICBlbmNvZGVVcmwsXG4gICAgZW5jb2RlVXJsUGFyYW1zLFxuICAgIGluaXRDYXBzLFxuICAgIHNwYWNlU2VwYXJhdGUsXG4gICAgcmVwbGFjZUF0LFxuICAgIHBlcmlvZFNlcGFyYXRlLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0LFxuICAgIHN0cmluZ1N0YXJ0c1dpdGgsXG4gICAgZ2V0RXZhbHVhdGVkRXhwclZhbHVlLFxuICAgIGlzSW1hZ2VGaWxlLFxuICAgIGlzQXVkaW9GaWxlLFxuICAgIGlzVmlkZW9GaWxlLFxuICAgIGlzVmFsaWRXZWJVUkwsXG4gICAgZ2V0UmVzb3VyY2VVUkwsXG4gICAgdHJpZ2dlckZuLFxuICAgIGhhc09mZnNldFN0cixcbiAgICBnZXRGb3JtYXR0ZWREYXRlLFxuICAgIGdldERhdGVPYmosXG4gICAgYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudCxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgZ2V0RmlsZXMsXG4gICAgZ2VuZXJhdGVHVUlkLFxuICAgIHZhbGlkYXRlQWNjZXNzUm9sZXMsXG4gICAgZ2V0VmFsaWRKU09OLFxuICAgIHhtbFRvSnNvbixcbiAgICBmaW5kVmFsdWVPZixcbiAgICBleHRyYWN0VHlwZSxcbiAgICBpc051bWJlclR5cGUsXG4gICAgaXNFbXB0eU9iamVjdCxcbiAgICBzY3JvbGxUb0VsZW1lbnQsXG4gICAgaXNFbGVtZW50SW5WaWV3cG9ydCxcbiAgICBpc1BhZ2VhYmxlLFxuICAgIHJlcGxhY2UsXG4gICAgaXNEYXRlVGltZVR5cGUsXG4gICAgZ2V0VmFsaWREYXRlT2JqZWN0LFxuICAgIGdldE5hdGl2ZURhdGVPYmplY3QsXG4gICAgZ2V0QmxvYixcbiAgICBpc0VxdWFsV2l0aEZpZWxkcyxcbiAgICBsb2FkU3R5bGVTaGVldCxcbiAgICBsb2FkU3R5bGVTaGVldHMsXG4gICAgbG9hZFNjcmlwdCxcbiAgICBsb2FkU2NyaXB0cyxcbiAgICBfV01fQVBQX1BST0pFQ1QsXG4gICAgc2V0U2Vzc2lvblN0b3JhZ2VJdGVtLFxuICAgIGdldFNlc3Npb25TdG9yYWdlSXRlbSxcbiAgICBub29wLFxuICAgIGNvbnZlcnRUb0Jsb2IsXG4gICAgQXBwQ29uc3RhbnRzLFxuICAgIG9wZW5MaW5rLFxuICAgIGZldGNoQ29udGVudCxcbiAgICB0b1Byb21pc2UsXG4gICAgcmV0cnlJZkZhaWxzLFxuICAgIGdldEFib3J0YWJsZURlZmVyLFxuICAgIGNyZWF0ZUNTU1J1bGUsXG4gICAgZ2V0VXJsUGFyYW1zLFxuICAgIGdldE1vbWVudExvY2FsZU9iamVjdCxcbiAgICBnZXRSb3V0ZU5hbWVGcm9tTGluayxcbiAgICBpc0FwcGxlUHJvZHVjdCxcbiAgICBkZWZlcixcbiAgICBleGVjdXRlUHJvbWlzZUNoYWluLFxuICAgIGlzRGF0YVNvdXJjZUVxdWFsLFxuICAgIHZhbGlkYXRlRGF0YVNvdXJjZUN0eCxcbiAgICBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgcmVtb3ZlRXh0cmFTbGFzaGVzLFxuICAgIGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCxcbiAgICBhZGRGb3JJZEF0dHJpYnV0ZXMsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24sXG4gICAgZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgZGV0ZWN0Q2hhbmdlcyxcbiAgICB0cmlnZ2VySXRlbUFjdGlvbixcbiAgICBnZXREYXRhc291cmNlRnJvbUV4cHIsXG4gICAgZXh0cmFjdEN1cnJlbnRJdGVtRXhwcixcbiAgICBmaW5kUm9vdENvbnRhaW5lcixcbiAgICBWQUxJREFUT1IsXG4gICAgdHJhbnNmb3JtRmlsZVVSSSxcbiAgICBhcHBlbmRTY3JpcHRUb0hlYWQsXG4gICAgZ2V0QXBwU2V0dGluZyxcbiAgICBzZXRMaXN0Q2xhc3MsXG4gICAgZmluZFBhcmVudCxcbiAgICBnZXROYXZDbGFzcyxcbiAgICBnZXRTaGVldFBvc2l0aW9uQ2xhc3Ncbn0gZnJvbSAnLi91dGlscy91dGlscyc7XG5leHBvcnQge1xuICAgIEZJUlNUX1RJTUVfV0FUQ0gsXG4gICAgaXNGaXJzdFRpbWVDaGFuZ2UsXG4gICAgZGVib3VuY2UsXG4gICAgbXV0ZVdhdGNoZXJzLFxuICAgIHVuTXV0ZVdhdGNoZXJzLFxuICAgICR3YXRjaCxcbiAgICAkdW53YXRjaCxcbiAgICBzZXROZ1pvbmUsXG4gICAgc2V0QXBwUmVmLFxuICAgIGlzQ2hhbmdlRnJvbVdhdGNoLFxuICAgIHJlc2V0Q2hhbmdlRnJvbVdhdGNoLFxuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkYXBwRGlnZXN0XG59IGZyb20gJy4vdXRpbHMvd2F0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2lkLWdlbmVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL3R5cGVzJztcbmV4cG9ydCB7IFZpZXdwb3J0LCBWaWV3cG9ydEV2ZW50IH0gZnJvbSAnLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29uc3RhbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC10eXBlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC13aWRnZXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3NjcmlwdC1sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3VzZXItY3VzdG9tLXBpcGUtbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY3VzdG9tLWljb25zLWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCB7IFN0YXRlUGVyc2lzdGVuY2UgfSBmcm9tICcuL3NlcnZpY2VzL3N0YXRlLXBlcnNpc3RlbmNlLnNlcnZpY2UnO1xuZXhwb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2xydS1jYWNoZSc7XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLE9BQU8sRUFFSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLFlBQVksRUFDWixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxxQkFBcUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsVUFBVSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb3JlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvYnVpbGQtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvY3VycmVuY3ktY29uc3RhbnRzJztcbmV4cG9ydCB7XG4gICAgYXBwZW5kTm9kZSxcbiAgICBpbnNlcnRCZWZvcmUsXG4gICAgaW5zZXJ0QWZ0ZXIsXG4gICAgcmVtb3ZlTm9kZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBhZGRDbGFzcyxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICBzZXRDU1MsXG4gICAgc2V0Q1NTRnJvbU9iaixcbiAgICBzZXRQcm9wZXJ0eSxcbiAgICBzZXRBdHRyLFxuICAgIHNldEh0bWwsXG4gICAgcmVtb3ZlQXR0cixcbiAgICBjcmVhdGVFbGVtZW50LFxuICAgIHRvRGltZW5zaW9uXG59IGZyb20gJy4vdXRpbHMvZG9tJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9ldmVudC1ub3RpZmllcic7XG5leHBvcnQge1xuICAgIFBhcnNlRXhwclJlc3VsdCxcbiAgICAkcGFyc2VFeHByLFxuICAgICRwYXJzZUV2ZW50LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHIsXG4gICAgc2V0UGlwZVByb3ZpZGVyLFxuICAgIGdldEZuQnlFeHByLFxuICAgIGdldEZuRm9yQmluZEV4cHIsXG4gICAgZ2V0Rm5Gb3JFdmVudEV4cHJcbn0gZnJvbSAnLi91dGlscy9leHByZXNzaW9uLXBhcnNlcic7XG5leHBvcnQge1xuICAgIEVWRU5UX0xJRkUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzT2JqZWN0LFxuICAgIHRvQm9vbGVhbixcbiAgICBpc0lFLFxuICAgIGlzQW5kcm9pZCxcbiAgICBpc0FuZHJvaWRUYWJsZXQsXG4gICAgaXNJcGhvbmUsXG4gICAgaXNJcG9kLFxuICAgIGlzSXBhZCxcbiAgICBpc0lvcyxcbiAgICBpc1NhZmFyaSxcbiAgICBpc0xhcmdlVGFibGV0TGFuZHNjYXBlLFxuICAgIGlzTGFyZ2VUYWJsZXRQb3J0cmFpdCxcbiAgICBpc01vYmlsZSxcbiAgICBnZXRBbmRyb2lkVmVyc2lvbixcbiAgICBpc0tpdGthdERldmljZSxcbiAgICBlbmNvZGVVcmwsXG4gICAgZW5jb2RlVXJsUGFyYW1zLFxuICAgIGluaXRDYXBzLFxuICAgIHNwYWNlU2VwYXJhdGUsXG4gICAgcmVwbGFjZUF0LFxuICAgIHBlcmlvZFNlcGFyYXRlLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0LFxuICAgIHN0cmluZ1N0YXJ0c1dpdGgsXG4gICAgZ2V0RXZhbHVhdGVkRXhwclZhbHVlLFxuICAgIGlzSW1hZ2VGaWxlLFxuICAgIGlzQXVkaW9GaWxlLFxuICAgIGlzVmlkZW9GaWxlLFxuICAgIGlzVmFsaWRJbWFnZVVybCxcbiAgICBpc1ZhbGlkV2ViVVJMLFxuICAgIGdldFJlc291cmNlVVJMLFxuICAgIHRyaWdnZXJGbixcbiAgICBoYXNPZmZzZXRTdHIsXG4gICAgZ2V0Rm9ybWF0dGVkRGF0ZSxcbiAgICBnZXREYXRlT2JqLFxuICAgIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldEZpbGVzLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICB2YWxpZGF0ZUFjY2Vzc1JvbGVzLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICB4bWxUb0pzb24sXG4gICAgZmluZFZhbHVlT2YsXG4gICAgZXh0cmFjdFR5cGUsXG4gICAgaXNOdW1iZXJUeXBlLFxuICAgIGlzRW1wdHlPYmplY3QsXG4gICAgc2Nyb2xsVG9FbGVtZW50LFxuICAgIGlzRWxlbWVudEluVmlld3BvcnQsXG4gICAgaXNQYWdlYWJsZSxcbiAgICByZXBsYWNlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGdldFZhbGlkRGF0ZU9iamVjdCxcbiAgICBnZXROYXRpdmVEYXRlT2JqZWN0LFxuICAgIGdldEJsb2IsXG4gICAgaXNFcXVhbFdpdGhGaWVsZHMsXG4gICAgbG9hZFN0eWxlU2hlZXQsXG4gICAgbG9hZFN0eWxlU2hlZXRzLFxuICAgIGxvYWRTY3JpcHQsXG4gICAgbG9hZFNjcmlwdHMsXG4gICAgX1dNX0FQUF9QUk9KRUNULFxuICAgIHNldFNlc3Npb25TdG9yYWdlSXRlbSxcbiAgICBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgbm9vcCxcbiAgICBjb252ZXJ0VG9CbG9iLFxuICAgIEFwcENvbnN0YW50cyxcbiAgICBvcGVuTGluayxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgdG9Qcm9taXNlLFxuICAgIHJldHJ5SWZGYWlscyxcbiAgICBnZXRBYm9ydGFibGVEZWZlcixcbiAgICBjcmVhdGVDU1NSdWxlLFxuICAgIGdldFVybFBhcmFtcyxcbiAgICBnZXRNb21lbnRMb2NhbGVPYmplY3QsXG4gICAgZ2V0Um91dGVOYW1lRnJvbUxpbmssXG4gICAgaXNBcHBsZVByb2R1Y3QsXG4gICAgZGVmZXIsXG4gICAgZXhlY3V0ZVByb21pc2VDaGFpbixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICB2YWxpZGF0ZURhdGFTb3VyY2VDdHgsXG4gICAgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlLFxuICAgIGV4dGVuZFByb3RvLFxuICAgIHJlbW92ZUV4dHJhU2xhc2hlcyxcbiAgICBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQsXG4gICAgYWRkRm9ySWRBdHRyaWJ1dGVzLFxuICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLFxuICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMsXG4gICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uLFxuICAgIGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgsXG4gICAgY2xvc2VQb3BvdmVyLFxuICAgIGRldGVjdENoYW5nZXMsXG4gICAgdHJpZ2dlckl0ZW1BY3Rpb24sXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgVkFMSURBVE9SLFxuICAgIHRyYW5zZm9ybUZpbGVVUkksXG4gICAgYXBwZW5kU2NyaXB0VG9IZWFkLFxuICAgIGdldEFwcFNldHRpbmcsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIGZpbmRQYXJlbnQsXG4gICAgZ2V0TmF2Q2xhc3MsXG4gICAgZ2V0U2hlZXRQb3NpdGlvbkNsYXNzXG59IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IHtcbiAgICBGSVJTVF9USU1FX1dBVENILFxuICAgIGlzRmlyc3RUaW1lQ2hhbmdlLFxuICAgIGRlYm91bmNlLFxuICAgIG11dGVXYXRjaGVycyxcbiAgICB1bk11dGVXYXRjaGVycyxcbiAgICAkd2F0Y2gsXG4gICAgJHVud2F0Y2gsXG4gICAgJHVud2F0Y2hBbGwsXG4gICAgJHVud2F0Y2hBbGxCeVNjb3BlLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRBcHBSZWYsXG4gICAgaXNDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRhcHBEaWdlc3Rcbn0gZnJvbSAnLi91dGlscy93YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvdHlwZXMnO1xuZXhwb3J0IHsgVmlld3BvcnQsIFZpZXdwb3J0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb25zdGFudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLXdpZGdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdXNlci1jdXN0b20tcGlwZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20taWNvbnMtbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgU3RhdGVQZXJzaXN0ZW5jZSB9IGZyb20gJy4vc2VydmljZXMvc3RhdGUtcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5leHBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbHJ1LWNhY2hlJztcbiJdfQ==