@pine-ds/icons 9.5.1 → 9.6.1

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 (34) hide show
  1. package/components/pds-icon.js +118 -108
  2. package/components/pds-icon.js.map +1 -1
  3. package/dist/cheatsheet.html +7 -5
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/pds-icon.cjs.entry.js +117 -107
  6. package/dist/cjs/pds-icon.cjs.entry.js.map +1 -1
  7. package/dist/cjs/pds-icon.entry.cjs.js.map +1 -1
  8. package/dist/cjs/pds-icons.cjs.js +1 -1
  9. package/dist/collection/components/pds-icon/pds-icon.js +104 -71
  10. package/dist/collection/components/pds-icon/pds-icon.js.map +1 -1
  11. package/dist/collection/components/pds-icon/request.js +16 -39
  12. package/dist/collection/components/pds-icon/request.js.map +1 -1
  13. package/dist/docs.json +5 -5
  14. package/dist/esm/loader.js +1 -1
  15. package/dist/esm/pds-icon.entry.js +117 -107
  16. package/dist/esm/pds-icon.entry.js.map +1 -1
  17. package/dist/esm/pds-icons.js +1 -1
  18. package/dist/pds-icons/p-23a00a5a.entry.js +2 -0
  19. package/dist/pds-icons/p-23a00a5a.entry.js.map +1 -0
  20. package/dist/pds-icons/pds-icon.entry.esm.js.map +1 -1
  21. package/dist/pds-icons/pds-icons.esm.js +1 -1
  22. package/dist/pds-icons.json +11 -1
  23. package/dist/pds-icons.symbols.svg +2 -1
  24. package/dist/svg/switch-vertical.svg +1 -0
  25. package/dist/types/components/pds-icon/pds-icon.d.ts +7 -2
  26. package/dist/types/components/pds-icon/request.d.ts +1 -1
  27. package/dist/types/components.d.ts +2 -2
  28. package/icons/index.d.ts +2 -1
  29. package/icons/index.js +2 -1
  30. package/icons/index.mjs +2 -1
  31. package/icons/package.json +1 -1
  32. package/package.json +1 -1
  33. package/dist/pds-icons/p-560fb565.entry.js +0 -2
  34. package/dist/pds-icons/p-560fb565.entry.js.map +0 -1
@@ -262,7 +262,7 @@ const isEncodedDataUrl = (url) => url.indexOf(';utf8,') !== -1;
262
262
  const pdsIconContent = new Map();
263
263
  const requests = new Map(); // eslint-disable-line @typescript-eslint/no-explicit-any
264
264
  let parser;
265
- const getSvgContent = (url, sanitize = false, retryCount = 0) => {
265
+ const getSvgContent = (url, sanitize = false) => {
266
266
  let req = requests.get(url);
267
267
  if (!req) {
268
268
  if (typeof fetch != 'undefined' && typeof document !== 'undefined') {
@@ -277,67 +277,44 @@ const getSvgContent = (url, sanitize = false, retryCount = 0) => {
277
277
  pdsIconContent.set(url, svg.outerHTML);
278
278
  }
279
279
  else {
280
- console.warn(`No SVG found in data URL: ${url}`);
281
280
  pdsIconContent.set(url, '');
282
281
  }
283
282
  }
284
283
  catch (error) {
285
- console.error(`Failed to parse SVG data URL: ${url}`, error);
286
284
  pdsIconContent.set(url, '');
287
285
  }
288
286
  return Promise.resolve();
289
287
  }
290
288
  else {
291
- // Add retry logic and better error handling
292
- req = fetch(url, {
293
- method: 'GET',
294
- headers: {
295
- 'Accept': 'image/svg+xml,text/plain,*/*'
296
- },
297
- cache: 'force-cache' // Aggressive caching for icons
298
- }).then((rsp) => {
289
+ // we don't have a request
290
+ req = fetch(url).then((rsp) => {
299
291
  if (rsp.ok) {
300
292
  return rsp.text().then((svgContent) => {
301
293
  if (svgContent && sanitize !== false) {
302
- svgContent = validateContent(svgContent);
303
- }
304
- if (svgContent) {
305
- pdsIconContent.set(url, svgContent);
306
- }
307
- else {
308
- console.warn(`Empty SVG content received for: ${url}`);
309
- pdsIconContent.set(url, '');
294
+ try {
295
+ svgContent = validateContent(svgContent);
296
+ }
297
+ catch (validationError) {
298
+ svgContent = '';
299
+ }
310
300
  }
301
+ pdsIconContent.set(url, svgContent || '');
311
302
  });
312
303
  }
313
304
  else {
314
- throw new Error(`HTTP ${rsp.status}: ${rsp.statusText}`);
305
+ // Handle HTTP errors
306
+ throw new Error(`Failed to load SVG: ${rsp.status} ${rsp.statusText}`);
315
307
  }
316
308
  }).catch((error) => {
317
- console.error(`Failed to fetch icon ${url}:`, error);
318
- // Retry logic - attempt up to 3 times with exponential backoff
319
- if (retryCount < 3) {
320
- const delay = Math.pow(2, retryCount) * 1000; // 1s, 2s, 4s
321
- console.log(`Retrying icon load in ${delay}ms (attempt ${retryCount + 1}/3): ${url}`);
322
- return new Promise((resolve) => {
323
- setTimeout(() => {
324
- // Clear the failed request from cache to allow retry
325
- requests.delete(url);
326
- resolve(getSvgContent(url, sanitize, retryCount + 1));
327
- }, delay);
328
- });
329
- }
330
- else {
331
- // Final failure - set empty content to prevent infinite loading
332
- pdsIconContent.set(url, '');
333
- throw error;
334
- }
309
+ // Handle all fetch errors gracefully
310
+ console.warn('Failed to load SVG:', url, error);
311
+ pdsIconContent.set(url, '');
312
+ // Don't re-throw to prevent unhandled promise rejections
335
313
  });
336
314
  requests.set(url, req);
337
315
  }
338
316
  }
339
317
  else {
340
- console.warn('Fetch or document not available, setting empty icon content');
341
318
  pdsIconContent.set(url, '');
342
319
  return Promise.resolve();
343
320
  }
@@ -385,14 +362,24 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
385
362
  }
386
363
  componentDidLoad() {
387
364
  this.setCSSVariables();
388
- // Always attempt to load icon, but add delay for IntersectionObserver to complete
365
+ if (!this.didLoadIcon) {
366
+ this.loadIcon();
367
+ }
368
+ // Fallback: Ensure icon loads even if IntersectionObserver doesn't fire
389
369
  setTimeout(() => {
390
- if (!this.didLoadIcon || !this.svgContent) {
391
- console.warn('Icon not loaded after component mount, forcing load attempt');
392
- this.isVisible = true; // Force visibility for fallback loading
370
+ if (!this.svgContent && !this.isVisible) {
371
+ this.isVisible = true;
372
+ this.loadIcon();
373
+ }
374
+ }, 100);
375
+ // Additional fallback for client-side navigation (React Router, etc.)
376
+ // React's useLayoutEffect and rendering cycles can delay visibility detection
377
+ setTimeout(() => {
378
+ if (!this.svgContent && !this.isVisible) {
379
+ this.isVisible = true;
393
380
  this.loadIcon();
394
381
  }
395
- }, 50);
382
+ }, 500);
396
383
  }
397
384
  componentWillLoad() {
398
385
  this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
@@ -404,20 +391,18 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
404
391
  this.el.style.setProperty(`--color-icon-fill`, typeof this.color !== 'undefined' ? this.color : 'currentColor');
405
392
  }
406
393
  connectedCallback() {
407
- // Set a fallback timeout in case IntersectionObserver never fires
408
- // This prevents icons from never loading due to intersection issues
409
- const fallbackTimeout = setTimeout(() => {
410
- if (!this.isVisible) {
411
- console.warn('IntersectionObserver timeout, forcing icon visibility');
394
+ // Handle re-connection during client-side navigation
395
+ if (!this.isVisible && !this.svgContent) {
396
+ this.waitUntilVisible(this.el, '50px', () => {
412
397
  this.isVisible = true;
413
398
  this.loadIcon();
414
- }
415
- }, 100); // 100ms fallback
416
- this.waitUntilVisible(this.el, '50px', () => {
417
- clearTimeout(fallbackTimeout);
399
+ });
400
+ }
401
+ // Immediate load attempt if already visible (e.g., during React navigation)
402
+ if (this.isElementInViewport(this.el)) {
418
403
  this.isVisible = true;
419
404
  this.loadIcon();
420
- });
405
+ }
421
406
  }
422
407
  disconnectedCallback() {
423
408
  if (this.io) {
@@ -429,29 +414,27 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
429
414
  this.setCSSVariables();
430
415
  }
431
416
  loadIcon() {
432
- if (Build.isBrowser) {
417
+ // Reset load state when URL changes
418
+ this.didLoadIcon = false;
419
+ // Clear existing content to prevent stale content when switching icons
420
+ this.svgContent = undefined;
421
+ if (Build.isBrowser && this.isVisible) {
433
422
  const url = getUrl(this);
434
423
  if (url) {
435
424
  if (pdsIconContent.has(url)) {
436
425
  this.svgContent = pdsIconContent.get(url);
437
426
  }
438
427
  else {
439
- // Add comprehensive error handling and timeout
440
- const timeoutPromise = new Promise((_, reject) => {
441
- setTimeout(() => reject(new Error('Icon loading timeout')), 10000); // 10 second timeout
442
- });
443
- Promise.race([getSvgContent(url), timeoutPromise])
428
+ // Fix: Ensure promise callback triggers re-render and handle errors
429
+ getSvgContent(url)
444
430
  .then(() => {
445
- this.svgContent = pdsIconContent.get(url);
446
- // Force re-render if content was loaded after initial render
447
- if (!this.svgContent) {
448
- console.warn(`Icon content not found after successful load: ${url}`);
449
- }
431
+ // Force re-render by setting state in next tick
432
+ setTimeout(() => {
433
+ this.svgContent = pdsIconContent.get(url);
434
+ }, 0);
450
435
  })
451
- .catch((error) => {
452
- console.error(`Failed to load icon: ${url}`, error);
453
- // Set empty content to prevent infinite loading state
454
- pdsIconContent.set(url, '');
436
+ .catch(() => {
437
+ // Handle fetch errors gracefully
455
438
  this.svgContent = '';
456
439
  });
457
440
  }
@@ -469,54 +452,33 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
469
452
  ? shouldRtlFlipIcon(iconName, this.el) && flipRtl !== false
470
453
  : false;
471
454
  const shouldFlip = flipRtl || shouldIconAutoFlip;
472
- // Debug information when enabled
473
- this.debugIconState();
474
- return (h(Host, Object.assign({ key: '82420f9d474c932c9ed82bbf61b075cbbc67b6db', "aria-label": ariaLabel !== undefined && !this.hasAriaHidden() ? ariaLabel : null, alt: "", role: "img", class: Object.assign(Object.assign({}, createColorClasses(this.color)), { 'flip-rtl': shouldFlip, 'icon-rtl': shouldFlip && isRTL(this.el) }) }, inheritedAttributes), Build.isBrowser && this.svgContent ? (h("div", { class: "icon-inner", innerHTML: this.svgContent })) : (h("div", { class: "icon-inner" }))));
455
+ return (h(Host, Object.assign({ key: '48056743bf1a60bbf905a0779702fd366b86659d', "aria-label": ariaLabel !== undefined && !this.hasAriaHidden() ? ariaLabel : null, alt: "", role: "img", class: Object.assign(Object.assign({}, createColorClasses(this.color)), { 'flip-rtl': shouldFlip, 'icon-rtl': shouldFlip && isRTL(this.el) }) }, inheritedAttributes), Build.isBrowser && this.svgContent ? (h("div", { class: "icon-inner", innerHTML: this.svgContent })) : (h("div", { class: "icon-inner" }))));
475
456
  }
476
457
  /*****
477
458
  * Private Methods
478
459
  ****/
479
- debugIconState() {
480
- if (typeof window !== 'undefined' && window.__PDS_ICON_DEBUG__) {
481
- console.log('PDS Icon Debug:', {
482
- name: this.name,
483
- src: this.src,
484
- icon: this.icon,
485
- isVisible: this.isVisible,
486
- didLoadIcon: this.didLoadIcon,
487
- svgContent: this.svgContent ? 'loaded' : 'empty',
488
- url: getUrl(this),
489
- hasIntersectionObserver: !!this.io,
490
- element: this.el
491
- });
492
- }
493
- }
494
460
  waitUntilVisible(el, rootMargin, cb) {
495
461
  if (Build.isBrowser && typeof window !== 'undefined' && (window).IntersectionObserver) {
496
- try {
497
- const io = (this.io = new (window).IntersectionObserver((data) => {
498
- if (data[0].isIntersecting) {
499
- io.disconnect();
500
- this.io = undefined;
501
- cb();
502
- }
503
- }, { rootMargin }));
504
- io.observe(el);
505
- // Add a safety timeout for IntersectionObserver
506
- setTimeout(() => {
507
- if (this.io) {
508
- console.warn('IntersectionObserver did not trigger within 5 seconds, forcing callback');
462
+ const io = (this.io = new (window).IntersectionObserver((data) => {
463
+ if (data[0].isIntersecting) {
464
+ io.disconnect();
465
+ this.io = undefined;
466
+ cb();
467
+ }
468
+ }, { rootMargin }));
469
+ io.observe(el);
470
+ // Safety timeout for client-side navigation scenarios
471
+ // Sometimes IntersectionObserver doesn't fire during React navigation
472
+ setTimeout(() => {
473
+ if (this.io && !this.isVisible) {
474
+ // Check if element is actually visible in viewport
475
+ if (this.isElementInViewport(el)) {
509
476
  this.io.disconnect();
510
477
  this.io = undefined;
511
478
  cb();
512
479
  }
513
- }, 5000);
514
- }
515
- catch (error) {
516
- console.error('IntersectionObserver initialization failed:', error);
517
- // Fall back to immediate execution
518
- cb();
519
- }
480
+ }
481
+ }, 1000);
520
482
  }
521
483
  else {
522
484
  // browser doesn't support IntersectionObserver
@@ -524,6 +486,54 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
524
486
  cb();
525
487
  }
526
488
  }
489
+ isElementInViewport(el) {
490
+ if (!el || !el.isConnected)
491
+ return false;
492
+ const rect = el.getBoundingClientRect();
493
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
494
+ const windowWidth = window.innerWidth || document.documentElement.clientWidth;
495
+ return (rect.top >= 0 &&
496
+ rect.left >= 0 &&
497
+ rect.bottom <= windowHeight &&
498
+ rect.right <= windowWidth) || (
499
+ // Also consider partially visible elements
500
+ rect.top < windowHeight &&
501
+ rect.bottom > 0 &&
502
+ rect.left < windowWidth &&
503
+ rect.right > 0);
504
+ }
505
+ /**
506
+ * Debug method to help diagnose loading issues
507
+ * Call from browser console: document.querySelector('pds-icon').debugIconState()
508
+ */
509
+ debugIconState() {
510
+ var _a;
511
+ const url = getUrl(this);
512
+ const rect = this.el.getBoundingClientRect();
513
+ console.log('PdsIcon Debug State:', {
514
+ name: this.name,
515
+ src: this.src,
516
+ icon: this.icon,
517
+ iconName: this.iconName,
518
+ url,
519
+ isVisible: this.isVisible,
520
+ didLoadIcon: this.didLoadIcon,
521
+ hasSvgContent: !!this.svgContent,
522
+ svgContentLength: ((_a = this.svgContent) === null || _a === void 0 ? void 0 : _a.length) || 0,
523
+ isInCache: url ? pdsIconContent.has(url) : false,
524
+ cachedContent: url ? pdsIconContent.get(url) : null,
525
+ element: this.el,
526
+ // Client-side navigation specific debug info
527
+ isConnected: this.el.isConnected,
528
+ isInViewport: this.isElementInViewport(this.el),
529
+ hasIntersectionObserver: !!this.io,
530
+ boundingClientRect: rect,
531
+ windowDimensions: {
532
+ width: window.innerWidth || document.documentElement.clientWidth,
533
+ height: window.innerHeight || document.documentElement.clientHeight
534
+ }
535
+ });
536
+ }
527
537
  static get assetsDirs() { return ["svg"]; }
528
538
  get el() { return this; }
529
539
  static get watchers() { return {
@@ -537,7 +547,7 @@ const PdsIcon$1 = /*@__PURE__*/ proxyCustomElement(class PdsIcon extends HTMLEle
537
547
  }, [1, "pds-icon", {
538
548
  "color": [1],
539
549
  "flipRtl": [4, "flip-rtl"],
540
- "icon": [1],
550
+ "icon": [8],
541
551
  "name": [513],
542
552
  "size": [513],
543
553
  "src": [1],
@@ -1 +1 @@
1
- {"file":"pds-icon.js","mappings":"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","names":["PdsIcon","__stencil_proxyCustomElement"],"sources":["src/components/pds-icon/assetPath.ts","src/components/pds-icon/utils.ts","src/components/pds-icon/validate.ts","src/components/pds-icon/request.ts","src/components/pds-icon/pds-icon.scss?tag=pds-icon&encapsulation=shadow","src/components/pds-icon/pds-icon.tsx"],"sourcesContent":["import { Build } from '@stencil/core';\n\nlet missingAssetPathWarning = false;\n\ndeclare global {\n interface Window {\n __PINE_ASSET_PATH__?: string\n }\n}\n\n/**\n *\n * Reads the component asset path config from meta tag or a global variable.\n * This is a temporary workaround until these issues have been addressed:\n *\n * https://github.com/ionic-team/stencil/issues/2826/\n * https://github.com/ionic-team/stencil/issues/3470\n * https://github.com/ionic-team/stencil-ds-output-targets/issues/186\n */\nexport const getAssetPath = (path: string) => {\n const metaPineAssetPath = document.head.querySelector<HTMLMetaElement>('meta[data-pine-asset-path]')?.dataset.pineAssetPath;\n\n // Get the asset path from the window object if available\n const windowAssetPath = window.__PINE_ASSET_PATH__;\n\n // Set the CDN Asset path using the latest version\n const cdnAssetPath = 'https://cdn.jsdelivr.net/npm/@pine-ds/icons/dist/';\n\n const assetBasePath = Build.isTesting ? '/dist/pds-icons' : metaPineAssetPath || windowAssetPath || cdnAssetPath || '/'\n\n // Display a warning if the assets are fetched from the CDN.\n if ( assetBasePath.startsWith('https://cdn.jsdelivr.net/npm/') && !missingAssetPathWarning ) {\n missingAssetPathWarning = true;\n console.warn(`\n Fetching Pine assets from jsDelivr CDN.\\n\\n It's recommended that you bundle Pine Assets with your application and set the path accordingly.\\n\\nFor more information, read the documentation: \\nhttps://pine-design-system.netlify.app/?path=/docs/resources-assets--docs\n `)\n }\n\n let assetPath = path;\n\n if ( path.startsWith ('./') ) {\n assetPath = path.substring(2);\n }\n\n if ( !assetBasePath.endsWith('/') ) {\n assetPath = '/' + assetPath;\n }\n\n return assetBasePath + assetPath;\n}\n\n\nexport {};\n","import { getAssetPath } from './assetPath';\n\nimport { PdsIcon } from './pds-icon';\n\nlet CACHED_MAP: Map<string, string>;\n\nexport const addIcons = (icons: { [name: string]: string; }) => {\n const map = getIconMap();\n Object.keys(icons).forEach(name => map.set(name, icons[name]));\n}\n\nexport const getIconMap = (): Map<string, string> => {\n if (typeof window === 'undefined') {\n return new Map();\n } else {\n if (!CACHED_MAP) {\n const win = window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n win.PdsIcons = win.PdsIcons || {};\n CACHED_MAP = win.PdsIcons.map = win.PdsIcons.map || new Map();\n }\n\n return CACHED_MAP;\n }\n}\n\nexport const getName = (\n iconName: string | undefined,\n icon: string | undefined\n ) => {\n\n if(!iconName && icon && !isSrc(icon)) {\n iconName = icon;\n }\n\n if (isStr(iconName)) {\n iconName = toLower(iconName);\n }\n\n if (!isStr(iconName) || iconName.trim() === '') {\n return null;\n }\n\n const invalidChars = iconName.replace(/[a-z]|-|\\d/gi,'');\n if (invalidChars != '') { return null; }\n\n return iconName;\n}\n\nconst getNamedUrl = (iconName: string) => {\n const url = getIconMap().get(iconName);\n if (url) {\n return url;\n }\n\n return getAssetPath(`svg/${iconName}.svg`);\n};\n\nexport const getSrc = (src: string | undefined) => {\n if (isStr(src)) {\n src = src.trim();\n\n if (isSrc(src)) {\n return src;\n }\n }\n\n return null;\n}\n\nexport const getUrl = (pdsIcon: PdsIcon) => {\n let url = getSrc(pdsIcon.src);\n if (url) {\n return url;\n }\n\n url = getName(pdsIcon.name, pdsIcon.icon);\n if (url) {\n return getNamedUrl(url);\n }\n\n if (pdsIcon.icon) {\n url = getSrc(pdsIcon.icon);\n\n if(url) {\n return url;\n }\n }\n\n return null;\n};\n\n\n/**\n * Returns `true` if the document or host element\n * has a `dir` set to `rtl`. The host value will always\n * take priority over the root document value.\n */\nexport const isRTL = (hostEl?: Pick<HTMLElement, 'dir'>) => {\n if (hostEl) {\n if (hostEl.dir !== '') {\n return hostEl.dir.toLowerCase() === 'rtl';\n }\n }\n return document?.dir.toLowerCase() === 'rtl';\n};\n\nexport const isSrc = (str: string) => str.length > 0 && /(\\/|\\.)/.test(str);\nexport const isStr = (val: any): val is string => typeof val === 'string'; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport const toLower = (val: string) => val.toLowerCase();\n\n/**\n * Elements inside of web components sometimes need to inherit global attributes\n * set on the host. For example, the inner input in `pds-input` should inherit\n * the `title` attribute that developers set directly on `pds-input`. This\n * helper function should be called in componentWillLoad and assigned to a variable\n * that is later used in the render function.\n *\n * This does not need to be reactive as changing attributes on the host element\n * does not trigger a re-render.\n */\n export const inheritAttributes = (el: HTMLElement, attributes: string[] = []) => {\n const attributeObject: { [k: string]: any } = {}; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n attributes.forEach(attr => {\n if (el.hasAttribute(attr)) {\n const value = el.getAttribute(attr);\n if (value !== null) {\n attributeObject[attr] = el.getAttribute(attr);\n }\n el.removeAttribute(attr);\n }\n });\n\n return attributeObject;\n}\n\n/**\n * Determines if an icon should be flipped when RTL is enabled\n * @param iconName - The name of the icon to check\n * @param hostEl - Optional host element to check for RTL direction\n * @returns {boolean} - True if the icon should be flipped in RTL mode, false otherwise\n */\nexport const shouldRtlFlipIcon = (iconName: string, hostEl?: Pick<HTMLElement, 'dir'>): boolean => {\n // First check if we're in RTL mode\n const rtlEnabled = isRTL(hostEl);\n\n // Only flip if we're in RTL mode and the icon is in the flip list\n return rtlEnabled && ICONS_TO_FLIP.includes(iconName);\n}\n\n/**\n * Array of available icon names\n */\nexport const ICONS_TO_FLIP = [\n 'align-horizontal-bottom',\n 'align-horizontal-center',\n 'align-horizontal-top',\n 'align-left',\n 'align-right',\n 'align-vertical-left',\n 'align-vertical-right',\n 'arrow-corner',\n 'arrow-left',\n 'arrow-right',\n 'calendar-schedule',\n 'caret-left',\n 'caret-right',\n 'cart',\n 'cart-add',\n 'comment',\n 'comment-no',\n 'conversation',\n 'copy',\n 'copy-07',\n 'delete-key',\n 'delete-x',\n 'downsell',\n 'drawer-collapse',\n 'drawer-expand',\n 'duplicate',\n 'feedback',\n 'file-lock',\n 'file-search',\n 'form-field',\n 'form-filled',\n 'left-small',\n 'launch',\n 'list-bullet',\n 'list-numbers',\n 'margin-left',\n 'margin-right',\n 'move-left',\n 'move-right',\n 'newsletter-2',\n 'one-off-session',\n 'quote',\n 'redo',\n 'reset-password',\n 'right-small',\n 'send-message',\n 'share',\n 'super-admin',\n 'tablet-landscape',\n 'undo',\n 'user-star',\n 'user-star-filled',\n 'users',\n 'users-filled',\n 'users-tone'\n];\n\n","import { isStr } from './utils';\n\nexport const validateContent = (svgContent: string) => {\n const div = document.createElement('div');\n div.innerHTML = svgContent;\n\n // setup this way to ensure it works on our buddy IE\n for (let i = div.childNodes.length - 1; i >= 0; i--) {\n if (div.childNodes[i].nodeName.toLowerCase() !== 'svg') {\n div.removeChild(div.childNodes[i]);\n }\n }\n\n // must only have 1 root element\n const svgElm = div.firstElementChild;\n if (svgElm && svgElm.nodeName.toLowerCase() === 'svg') {\n const svgClass = svgElm.getAttribute('class') || '';\n svgElm.setAttribute('class', (svgClass + ' s-pds-icon').trim());\n\n // root element must be an svg\n // lets double check we've got valid elements\n // do not allow scripts\n if (isValid(svgElm as HTMLElement)) {\n return div.innerHTML;\n }\n }\n return '';\n};\n\nexport const isValid = (elm: HTMLElement) => {\n if (elm.nodeType === 1) {\n if (elm.nodeName.toLowerCase() === 'script') {\n return false;\n }\n\n for (let i = 0; i < elm.attributes.length; i++) {\n const name = elm.attributes[i].name;\n if (isStr(name) && name.toLowerCase().indexOf('on') === 0) {\n return false;\n }\n }\n\n for (let i = 0; i < elm.childNodes.length; i++) {\n if (!isValid(elm.childNodes[i] as HTMLElement)) {\n return false;\n }\n }\n }\n return true;\n};\n\nexport const isSvgDataUrl = (url: string) => url.startsWith('data:image/svg+xml');\nexport const isEncodedDataUrl = (url: string) => url.indexOf(';utf8,') !== -1;\n","import { isEncodedDataUrl, isSvgDataUrl, validateContent } from './validate';\n\nexport const pdsIconContent = new Map<string, string>();\nconst requests = new Map<string, Promise<any>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\nlet parser: DOMParser;\n\nexport const getSvgContent = (url: string, sanitize = false, retryCount = 0) => {\n let req = requests.get(url);\n\n if(!req) {\n if (typeof fetch != 'undefined' && typeof document !== 'undefined') {\n if (isSvgDataUrl(url) && isEncodedDataUrl(url)) {\n if (!parser) {\n parser = new DOMParser();\n }\n\n try {\n const doc = parser.parseFromString(url, 'text/html');\n const svg = doc.querySelector('svg');\n\n if (svg) {\n pdsIconContent.set(url, svg.outerHTML);\n } else {\n console.warn(`No SVG found in data URL: ${url}`);\n pdsIconContent.set(url, '');\n }\n } catch (error) {\n console.error(`Failed to parse SVG data URL: ${url}`, error);\n pdsIconContent.set(url, '');\n }\n\n return Promise.resolve();\n } else {\n // Add retry logic and better error handling\n req = fetch(url, {\n method: 'GET',\n headers: {\n 'Accept': 'image/svg+xml,text/plain,*/*'\n },\n cache: 'force-cache' // Aggressive caching for icons\n }).then((rsp) => {\n if (rsp.ok) {\n return rsp.text().then((svgContent) => {\n if (svgContent && sanitize !== false) {\n svgContent = validateContent(svgContent);\n }\n if (svgContent) {\n pdsIconContent.set(url, svgContent);\n } else {\n console.warn(`Empty SVG content received for: ${url}`);\n pdsIconContent.set(url, '');\n }\n });\n } else {\n throw new Error(`HTTP ${rsp.status}: ${rsp.statusText}`);\n }\n }).catch((error) => {\n console.error(`Failed to fetch icon ${url}:`, error);\n\n // Retry logic - attempt up to 3 times with exponential backoff\n if (retryCount < 3) {\n const delay = Math.pow(2, retryCount) * 1000; // 1s, 2s, 4s\n console.log(`Retrying icon load in ${delay}ms (attempt ${retryCount + 1}/3): ${url}`);\n\n return new Promise((resolve) => {\n setTimeout(() => {\n // Clear the failed request from cache to allow retry\n requests.delete(url);\n resolve(getSvgContent(url, sanitize, retryCount + 1));\n }, delay);\n });\n } else {\n // Final failure - set empty content to prevent infinite loading\n pdsIconContent.set(url, '');\n throw error;\n }\n });\n\n requests.set(url, req);\n }\n } else {\n console.warn('Fetch or document not available, setting empty icon content');\n pdsIconContent.set(url, '');\n return Promise.resolve();\n }\n }\n\n return req;\n}\n",":host {\n --dimension-icon-height: 16px;\n --dimension-icon-width: 16px;\n --color-icon-fill: currentColor;\n\n contain: strict;\n display: inline-block;\n fill: var(--color-icon-fill);\n flex-shrink: 0;\n height: var(--dimension-icon-height);\n width: var(--dimension-icon-width);\n\n .pdsicon {\n fill: var(--color-icon-fill);\n }\n}\n\n.pds-icon-fill-none {\n fill: none;\n}\n\n.icon-inner,\n.pds-icon,\nsvg {\n display: block;\n height: 100%;\n width: 100%;\n}\n\n/* :host-context is supported in chromium; :dir is supported in safari & firefox */\n:host(.flip-rtl):host-context([dir='rtl']) .icon-inner {\n transform: scaleX(-1);\n}\n\n:host(.flip-rtl:dir(rtl)) .icon-inner {\n transform: scaleX(-1);\n}\n\n/**\n * This is needed for WebKit otherwise the fallback\n * will always cause the icon to be flipped if the document\n * loads in RTL.\n */\n:host(.flip-rtl:dir(ltr)) .icon-inner {\n transform: scaleX(1);\n}\n\n","import { Build, Component, Element, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { getSvgContent, pdsIconContent } from './request';\nimport { getName, getUrl, inheritAttributes, isRTL, shouldRtlFlipIcon } from './utils';\n\n@Component({\n tag: 'pds-icon',\n assetsDirs: ['svg'],\n styleUrl: 'pds-icon.scss',\n shadow: true,\n})\nexport class PdsIcon {\n private didLoadIcon = false;\n private iconName: string | null = null;\n private io?: IntersectionObserver;\n private inheritedAttributes: { [k: string]: any } = {}; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n @Element() el!: HTMLPdsIconElement;\n\n @State() private ariaLabel?: string;\n @State() private isVisible = false;\n @State() private svgContent?: string;\n\n /**\n *\n * The color of the icon\n *\n */\n @Prop() color?: string;\n\n /**\n * Determines if the icon should be flipped when the `dir` is right-to-left (`\"rtl\"`).\n * This is automatically enabled for icons that are in the `ICONS_TO_FLIP` list and\n * when the `dir` is `\"rtl\"`. If `flipRtl` is set to `false`, the icon will not be flipped\n * even if the `dir` is `\"rtl\"`.\n */\n @Prop() flipRtl?: boolean;\n\n /**\n * This is a combination of both `name` and `src`. If a `src` URL is detected,\n * it will set the `src` property. Otherwise it assumes it's a built-in named\n * SVG and sets the `name` property.\n */\n @Prop() icon?: string;\n\n /**\n * The name of the icon to use from\n * the built-in set.\n */\n @Prop({ reflect: true }) name?: string;\n\n /**\n * The size of the icon. This can be\n * 'small', 'regular', 'medium', 'large', or a\n * custom value (40px, 1rem, etc)\n *\n */\n @Prop({ reflect: true }) size?:\n | 'small' // 12px\n | 'regular' // 16px\n | 'medium' // 20px\n | 'large' // 24px\n | 'auto'\n | string = 'regular'\n\n /**\n *\n * Specifies the exact `src` of an SVG file to use.\n */\n @Prop() src?: string;\n\n private iconSize() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sizes: { [key: string]: any } = {\n small: '12px',\n regular: '16px',\n medium: '20px',\n large: '24px',\n }\n\n if (sizes[this.size]) {\n return sizes[this.size];\n } else {\n return this.size;\n }\n }\n\n componentDidLoad() {\n this.setCSSVariables();\n\n // Always attempt to load icon, but add delay for IntersectionObserver to complete\n setTimeout(() => {\n if (!this.didLoadIcon || !this.svgContent) {\n console.warn('Icon not loaded after component mount, forcing load attempt');\n this.isVisible = true; // Force visibility for fallback loading\n this.loadIcon();\n }\n }, 50);\n }\n\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);\n this.setCSSVariables();\n }\n\n setCSSVariables() {\n this.el.style.setProperty(`--dimension-icon-height`, this.iconSize());\n this.el.style.setProperty(`--dimension-icon-width`, this.iconSize());\n this.el.style.setProperty(`--color-icon-fill`, typeof this.color !== 'undefined' ? this.color : 'currentColor');\n }\n\n connectedCallback() {\n // Set a fallback timeout in case IntersectionObserver never fires\n // This prevents icons from never loading due to intersection issues\n const fallbackTimeout = setTimeout(() => {\n if (!this.isVisible) {\n console.warn('IntersectionObserver timeout, forcing icon visibility');\n this.isVisible = true;\n this.loadIcon();\n }\n }, 100); // 100ms fallback\n\n this.waitUntilVisible(this.el, '50px', () => {\n clearTimeout(fallbackTimeout);\n this.isVisible = true;\n this.loadIcon();\n })\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n }\n\n @Watch('size')\n @Watch('color')\n updateStyles() {\n this.setCSSVariables();\n }\n\n @Watch('name')\n @Watch('src')\n @Watch('icon')\n loadIcon() {\n if (Build.isBrowser) {\n const url = getUrl(this);\n if (url) {\n if (pdsIconContent.has(url)) {\n this.svgContent = pdsIconContent.get(url);\n } else {\n // Add comprehensive error handling and timeout\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Icon loading timeout')), 10000); // 10 second timeout\n });\n\n Promise.race([getSvgContent(url), timeoutPromise])\n .then(() => {\n this.svgContent = pdsIconContent.get(url);\n // Force re-render if content was loaded after initial render\n if (!this.svgContent) {\n console.warn(`Icon content not found after successful load: ${url}`);\n }\n })\n .catch((error) => {\n console.error(`Failed to load icon: ${url}`, error);\n // Set empty content to prevent infinite loading state\n pdsIconContent.set(url, '');\n this.svgContent = '';\n });\n }\n this.didLoadIcon = true;\n }\n }\n\n this.iconName = getName(this.name, this.icon);\n\n if (this.iconName) {\n this.ariaLabel = this.iconName.replace(/\\-/g, ' ');\n }\n }\n\n render() {\n const { ariaLabel, flipRtl, iconName,inheritedAttributes } = this;\n const shouldIconAutoFlip = iconName\n ? shouldRtlFlipIcon(iconName, this.el) && flipRtl !== false\n : false;\n const shouldFlip = flipRtl || shouldIconAutoFlip;\n\n // Debug information when enabled\n this.debugIconState();\n\n return (\n\n <Host\n aria-label={ariaLabel !== undefined && !this.hasAriaHidden() ? ariaLabel : null }\n alt=\"\"\n role=\"img\"\n class={{\n ...createColorClasses(this.color),\n 'flip-rtl': shouldFlip,\n 'icon-rtl': shouldFlip && isRTL(this.el)\n }}\n {...inheritedAttributes}\n >\n {Build.isBrowser && this.svgContent ? (\n <div class=\"icon-inner\" innerHTML={this.svgContent}></div>\n ) : (\n <div class=\"icon-inner\"></div>\n )}\n </Host>\n )\n }\n\n /*****\n * Private Methods\n ****/\n\n private debugIconState() {\n if (typeof window !== 'undefined' && (window as Window & { __PDS_ICON_DEBUG__?: boolean }).__PDS_ICON_DEBUG__) {\n console.log('PDS Icon Debug:', {\n name: this.name,\n src: this.src,\n icon: this.icon,\n isVisible: this.isVisible,\n didLoadIcon: this.didLoadIcon,\n svgContent: this.svgContent ? 'loaded' : 'empty',\n url: getUrl(this),\n hasIntersectionObserver: !!this.io,\n element: this.el\n });\n }\n }\n\n private waitUntilVisible(el: HTMLElement, rootMargin: string, cb: () => void) {\n if (Build.isBrowser && typeof window !== 'undefined' && (window).IntersectionObserver) {\n try {\n const io = (this.io = new (window).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n if (data[0].isIntersecting) {\n io.disconnect();\n this.io = undefined;\n cb();\n }\n },\n { rootMargin },\n ));\n\n io.observe(el);\n\n // Add a safety timeout for IntersectionObserver\n setTimeout(() => {\n if (this.io) {\n console.warn('IntersectionObserver did not trigger within 5 seconds, forcing callback');\n this.io.disconnect();\n this.io = undefined;\n cb();\n }\n }, 5000);\n } catch (error) {\n console.error('IntersectionObserver initialization failed:', error);\n // Fall back to immediate execution\n cb();\n }\n } else {\n // browser doesn't support IntersectionObserver\n // so just fallback to always show it\n cb();\n }\n }\n\n private hasAriaHidden = () => {\n const { el } = this;\n\n return el.hasAttribute('aria-hidden') && el.getAttribute('aria-hidden') === 'true';\n }\n}\n\nconst createColorClasses = (color: string | undefined) => {\n return color\n ? {\n 'pds-color': true,\n [`pds-color-${color}`]: true,\n }\n : null;\n };\n"],"version":3}
1
+ {"file":"pds-icon.js","mappings":"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","names":["PdsIcon","__stencil_proxyCustomElement"],"sources":["src/components/pds-icon/assetPath.ts","src/components/pds-icon/utils.ts","src/components/pds-icon/validate.ts","src/components/pds-icon/request.ts","src/components/pds-icon/pds-icon.scss?tag=pds-icon&encapsulation=shadow","src/components/pds-icon/pds-icon.tsx"],"sourcesContent":["import { Build } from '@stencil/core';\n\nlet missingAssetPathWarning = false;\n\ndeclare global {\n interface Window {\n __PINE_ASSET_PATH__?: string\n }\n}\n\n/**\n *\n * Reads the component asset path config from meta tag or a global variable.\n * This is a temporary workaround until these issues have been addressed:\n *\n * https://github.com/ionic-team/stencil/issues/2826/\n * https://github.com/ionic-team/stencil/issues/3470\n * https://github.com/ionic-team/stencil-ds-output-targets/issues/186\n */\nexport const getAssetPath = (path: string) => {\n const metaPineAssetPath = document.head.querySelector<HTMLMetaElement>('meta[data-pine-asset-path]')?.dataset.pineAssetPath;\n\n // Get the asset path from the window object if available\n const windowAssetPath = window.__PINE_ASSET_PATH__;\n\n // Set the CDN Asset path using the latest version\n const cdnAssetPath = 'https://cdn.jsdelivr.net/npm/@pine-ds/icons/dist/';\n\n const assetBasePath = Build.isTesting ? '/dist/pds-icons' : metaPineAssetPath || windowAssetPath || cdnAssetPath || '/'\n\n // Display a warning if the assets are fetched from the CDN.\n if ( assetBasePath.startsWith('https://cdn.jsdelivr.net/npm/') && !missingAssetPathWarning ) {\n missingAssetPathWarning = true;\n console.warn(`\n Fetching Pine assets from jsDelivr CDN.\\n\\n It's recommended that you bundle Pine Assets with your application and set the path accordingly.\\n\\nFor more information, read the documentation: \\nhttps://pine-design-system.netlify.app/?path=/docs/resources-assets--docs\n `)\n }\n\n let assetPath = path;\n\n if ( path.startsWith ('./') ) {\n assetPath = path.substring(2);\n }\n\n if ( !assetBasePath.endsWith('/') ) {\n assetPath = '/' + assetPath;\n }\n\n return assetBasePath + assetPath;\n}\n\n\nexport {};\n","import { getAssetPath } from './assetPath';\n\nimport { PdsIcon } from './pds-icon';\n\nlet CACHED_MAP: Map<string, string>;\n\nexport const addIcons = (icons: { [name: string]: string; }) => {\n const map = getIconMap();\n Object.keys(icons).forEach(name => map.set(name, icons[name]));\n}\n\nexport const getIconMap = (): Map<string, string> => {\n if (typeof window === 'undefined') {\n return new Map();\n } else {\n if (!CACHED_MAP) {\n const win = window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n win.PdsIcons = win.PdsIcons || {};\n CACHED_MAP = win.PdsIcons.map = win.PdsIcons.map || new Map();\n }\n\n return CACHED_MAP;\n }\n}\n\nexport const getName = (\n iconName: string | undefined,\n icon: string | undefined\n ) => {\n\n if(!iconName && icon && !isSrc(icon)) {\n iconName = icon;\n }\n\n if (isStr(iconName)) {\n iconName = toLower(iconName);\n }\n\n if (!isStr(iconName) || iconName.trim() === '') {\n return null;\n }\n\n const invalidChars = iconName.replace(/[a-z]|-|\\d/gi,'');\n if (invalidChars != '') { return null; }\n\n return iconName;\n}\n\nconst getNamedUrl = (iconName: string) => {\n const url = getIconMap().get(iconName);\n if (url) {\n return url;\n }\n\n return getAssetPath(`svg/${iconName}.svg`);\n};\n\nexport const getSrc = (src: string | undefined) => {\n if (isStr(src)) {\n src = src.trim();\n\n if (isSrc(src)) {\n return src;\n }\n }\n\n return null;\n}\n\nexport const getUrl = (pdsIcon: PdsIcon) => {\n let url = getSrc(pdsIcon.src);\n if (url) {\n return url;\n }\n\n url = getName(pdsIcon.name, pdsIcon.icon);\n if (url) {\n return getNamedUrl(url);\n }\n\n if (pdsIcon.icon) {\n url = getSrc(pdsIcon.icon);\n\n if(url) {\n return url;\n }\n }\n\n return null;\n};\n\n\n/**\n * Returns `true` if the document or host element\n * has a `dir` set to `rtl`. The host value will always\n * take priority over the root document value.\n */\nexport const isRTL = (hostEl?: Pick<HTMLElement, 'dir'>) => {\n if (hostEl) {\n if (hostEl.dir !== '') {\n return hostEl.dir.toLowerCase() === 'rtl';\n }\n }\n return document?.dir.toLowerCase() === 'rtl';\n};\n\nexport const isSrc = (str: string) => str.length > 0 && /(\\/|\\.)/.test(str);\nexport const isStr = (val: any): val is string => typeof val === 'string'; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport const toLower = (val: string) => val.toLowerCase();\n\n/**\n * Elements inside of web components sometimes need to inherit global attributes\n * set on the host. For example, the inner input in `pds-input` should inherit\n * the `title` attribute that developers set directly on `pds-input`. This\n * helper function should be called in componentWillLoad and assigned to a variable\n * that is later used in the render function.\n *\n * This does not need to be reactive as changing attributes on the host element\n * does not trigger a re-render.\n */\n export const inheritAttributes = (el: HTMLElement, attributes: string[] = []) => {\n const attributeObject: { [k: string]: any } = {}; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n attributes.forEach(attr => {\n if (el.hasAttribute(attr)) {\n const value = el.getAttribute(attr);\n if (value !== null) {\n attributeObject[attr] = el.getAttribute(attr);\n }\n el.removeAttribute(attr);\n }\n });\n\n return attributeObject;\n}\n\n/**\n * Determines if an icon should be flipped when RTL is enabled\n * @param iconName - The name of the icon to check\n * @param hostEl - Optional host element to check for RTL direction\n * @returns {boolean} - True if the icon should be flipped in RTL mode, false otherwise\n */\nexport const shouldRtlFlipIcon = (iconName: string, hostEl?: Pick<HTMLElement, 'dir'>): boolean => {\n // First check if we're in RTL mode\n const rtlEnabled = isRTL(hostEl);\n\n // Only flip if we're in RTL mode and the icon is in the flip list\n return rtlEnabled && ICONS_TO_FLIP.includes(iconName);\n}\n\n/**\n * Array of available icon names\n */\nexport const ICONS_TO_FLIP = [\n 'align-horizontal-bottom',\n 'align-horizontal-center',\n 'align-horizontal-top',\n 'align-left',\n 'align-right',\n 'align-vertical-left',\n 'align-vertical-right',\n 'arrow-corner',\n 'arrow-left',\n 'arrow-right',\n 'calendar-schedule',\n 'caret-left',\n 'caret-right',\n 'cart',\n 'cart-add',\n 'comment',\n 'comment-no',\n 'conversation',\n 'copy',\n 'copy-07',\n 'delete-key',\n 'delete-x',\n 'downsell',\n 'drawer-collapse',\n 'drawer-expand',\n 'duplicate',\n 'feedback',\n 'file-lock',\n 'file-search',\n 'form-field',\n 'form-filled',\n 'left-small',\n 'launch',\n 'list-bullet',\n 'list-numbers',\n 'margin-left',\n 'margin-right',\n 'move-left',\n 'move-right',\n 'newsletter-2',\n 'one-off-session',\n 'quote',\n 'redo',\n 'reset-password',\n 'right-small',\n 'send-message',\n 'share',\n 'super-admin',\n 'tablet-landscape',\n 'undo',\n 'user-star',\n 'user-star-filled',\n 'users',\n 'users-filled',\n 'users-tone'\n];\n\n","import { isStr } from './utils';\n\nexport const validateContent = (svgContent: string) => {\n const div = document.createElement('div');\n div.innerHTML = svgContent;\n\n // setup this way to ensure it works on our buddy IE\n for (let i = div.childNodes.length - 1; i >= 0; i--) {\n if (div.childNodes[i].nodeName.toLowerCase() !== 'svg') {\n div.removeChild(div.childNodes[i]);\n }\n }\n\n // must only have 1 root element\n const svgElm = div.firstElementChild;\n if (svgElm && svgElm.nodeName.toLowerCase() === 'svg') {\n const svgClass = svgElm.getAttribute('class') || '';\n svgElm.setAttribute('class', (svgClass + ' s-pds-icon').trim());\n\n // root element must be an svg\n // lets double check we've got valid elements\n // do not allow scripts\n if (isValid(svgElm as HTMLElement)) {\n return div.innerHTML;\n }\n }\n return '';\n};\n\nexport const isValid = (elm: HTMLElement) => {\n if (elm.nodeType === 1) {\n if (elm.nodeName.toLowerCase() === 'script') {\n return false;\n }\n\n for (let i = 0; i < elm.attributes.length; i++) {\n const name = elm.attributes[i].name;\n if (isStr(name) && name.toLowerCase().indexOf('on') === 0) {\n return false;\n }\n }\n\n for (let i = 0; i < elm.childNodes.length; i++) {\n if (!isValid(elm.childNodes[i] as HTMLElement)) {\n return false;\n }\n }\n }\n return true;\n};\n\nexport const isSvgDataUrl = (url: string) => url.startsWith('data:image/svg+xml');\nexport const isEncodedDataUrl = (url: string) => url.indexOf(';utf8,') !== -1;\n","import { isEncodedDataUrl, isSvgDataUrl, validateContent } from './validate';\n\nexport const pdsIconContent = new Map<string, string>();\nconst requests = new Map<string, Promise<any>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\nlet parser: DOMParser;\n\nexport const getSvgContent = (url: string, sanitize = false) => {\n let req = requests.get(url);\n\n if(!req) {\n if (typeof fetch != 'undefined' && typeof document !== 'undefined') {\n if (isSvgDataUrl(url) && isEncodedDataUrl(url)) {\n if (!parser) {\n parser = new DOMParser();\n }\n\n try {\n const doc = parser.parseFromString(url, 'text/html');\n const svg = doc.querySelector('svg');\n\n if (svg) {\n pdsIconContent.set(url, svg.outerHTML);\n } else {\n pdsIconContent.set(url, '');\n }\n } catch (error) {\n pdsIconContent.set(url, '');\n }\n\n return Promise.resolve();\n } else {\n // we don't have a request\n req = fetch(url).then((rsp) => {\n if (rsp.ok) {\n return rsp.text().then((svgContent) => {\n if (svgContent && sanitize !== false) {\n try {\n svgContent = validateContent(svgContent);\n } catch (validationError) {\n svgContent = '';\n }\n }\n pdsIconContent.set(url, svgContent || '');\n });\n } else {\n // Handle HTTP errors\n throw new Error(`Failed to load SVG: ${rsp.status} ${rsp.statusText}`);\n }\n }).catch((error) => {\n // Handle all fetch errors gracefully\n console.warn('Failed to load SVG:', url, error);\n pdsIconContent.set(url, '');\n // Don't re-throw to prevent unhandled promise rejections\n });\n\n requests.set(url, req);\n }\n } else {\n pdsIconContent.set(url, '');\n return Promise.resolve();\n }\n }\n\n return req;\n}\n",":host {\n --dimension-icon-height: 16px;\n --dimension-icon-width: 16px;\n --color-icon-fill: currentColor;\n\n contain: strict;\n display: inline-block;\n fill: var(--color-icon-fill);\n flex-shrink: 0;\n height: var(--dimension-icon-height);\n width: var(--dimension-icon-width);\n\n .pdsicon {\n fill: var(--color-icon-fill);\n }\n}\n\n.pds-icon-fill-none {\n fill: none;\n}\n\n.icon-inner,\n.pds-icon,\nsvg {\n display: block;\n height: 100%;\n width: 100%;\n}\n\n/* :host-context is supported in chromium; :dir is supported in safari & firefox */\n:host(.flip-rtl):host-context([dir='rtl']) .icon-inner {\n transform: scaleX(-1);\n}\n\n:host(.flip-rtl:dir(rtl)) .icon-inner {\n transform: scaleX(-1);\n}\n\n/**\n * This is needed for WebKit otherwise the fallback\n * will always cause the icon to be flipped if the document\n * loads in RTL.\n */\n:host(.flip-rtl:dir(ltr)) .icon-inner {\n transform: scaleX(1);\n}\n\n","import { Build, Component, Element, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { getSvgContent, pdsIconContent } from './request';\nimport { getName, getUrl, inheritAttributes, isRTL, shouldRtlFlipIcon } from './utils';\n\n@Component({\n tag: 'pds-icon',\n assetsDirs: ['svg'],\n styleUrl: 'pds-icon.scss',\n shadow: true,\n})\nexport class PdsIcon {\n private didLoadIcon = false;\n private iconName: string | null = null;\n private io?: IntersectionObserver;\n private inheritedAttributes: { [k: string]: any } = {}; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n @Element() el!: HTMLPdsIconElement;\n\n @State() private ariaLabel?: string;\n @State() private isVisible = false;\n @State() private svgContent?: string;\n\n /**\n *\n * The color of the icon\n *\n */\n @Prop() color?: string;\n\n /**\n * Determines if the icon should be flipped when the `dir` is right-to-left (`\"rtl\"`).\n * This is automatically enabled for icons that are in the `ICONS_TO_FLIP` list and\n * when the `dir` is `\"rtl\"`. If `flipRtl` is set to `false`, the icon will not be flipped\n * even if the `dir` is `\"rtl\"`.\n */\n @Prop() flipRtl?: boolean;\n\n /**\n * This is a combination of both `name` and `src`. If a `src` URL is detected,\n * it will set the `src` property. Otherwise it assumes it's a built-in named\n * SVG and sets the `name` property.\n */\n @Prop() icon?: any;\n\n /**\n * The name of the icon to use from\n * the built-in set.\n */\n @Prop({ reflect: true }) name?: string;\n\n /**\n * The size of the icon. This can be\n * 'small', 'regular', 'medium', 'large', or a\n * custom value (40px, 1rem, etc)\n *\n */\n @Prop({ reflect: true }) size?:\n | 'small' // 12px\n | 'regular' // 16px\n | 'medium' // 20px\n | 'large' // 24px\n | 'auto'\n | string = 'regular'\n\n /**\n *\n * Specifies the exact `src` of an SVG file to use.\n */\n @Prop() src?: string;\n\n private iconSize() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sizes: { [key: string]: any } = {\n small: '12px',\n regular: '16px',\n medium: '20px',\n large: '24px',\n }\n\n if (sizes[this.size]) {\n return sizes[this.size];\n } else {\n return this.size;\n }\n }\n\n componentDidLoad() {\n this.setCSSVariables();\n\n if (!this.didLoadIcon) {\n this.loadIcon();\n }\n\n // Fallback: Ensure icon loads even if IntersectionObserver doesn't fire\n setTimeout(() => {\n if (!this.svgContent && !this.isVisible) {\n this.isVisible = true;\n this.loadIcon();\n }\n }, 100);\n\n // Additional fallback for client-side navigation (React Router, etc.)\n // React's useLayoutEffect and rendering cycles can delay visibility detection\n setTimeout(() => {\n if (!this.svgContent && !this.isVisible) {\n this.isVisible = true;\n this.loadIcon();\n }\n }, 500);\n }\n\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);\n this.setCSSVariables();\n }\n\n setCSSVariables() {\n this.el.style.setProperty(`--dimension-icon-height`, this.iconSize());\n this.el.style.setProperty(`--dimension-icon-width`, this.iconSize());\n this.el.style.setProperty(`--color-icon-fill`, typeof this.color !== 'undefined' ? this.color : 'currentColor');\n }\n\n connectedCallback() {\n // Handle re-connection during client-side navigation\n if (!this.isVisible && !this.svgContent) {\n this.waitUntilVisible(this.el, '50px', () => {\n this.isVisible = true;\n this.loadIcon();\n });\n }\n\n // Immediate load attempt if already visible (e.g., during React navigation)\n if (this.isElementInViewport(this.el)) {\n this.isVisible = true;\n this.loadIcon();\n }\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n }\n\n @Watch('size')\n @Watch('color')\n updateStyles() {\n this.setCSSVariables();\n }\n\n @Watch('name')\n @Watch('src')\n @Watch('icon')\n loadIcon() {\n // Reset load state when URL changes\n this.didLoadIcon = false;\n\n // Clear existing content to prevent stale content when switching icons\n this.svgContent = undefined;\n\n if (Build.isBrowser && this.isVisible) {\n const url = getUrl(this);\n if (url) {\n if (pdsIconContent.has(url)) {\n this.svgContent = pdsIconContent.get(url);\n } else {\n // Fix: Ensure promise callback triggers re-render and handle errors\n getSvgContent(url)\n .then(() => {\n // Force re-render by setting state in next tick\n setTimeout(() => {\n this.svgContent = pdsIconContent.get(url);\n }, 0);\n })\n .catch(() => {\n // Handle fetch errors gracefully\n this.svgContent = '';\n });\n }\n this.didLoadIcon = true;\n }\n }\n\n this.iconName = getName(this.name, this.icon);\n\n if (this.iconName) {\n this.ariaLabel = this.iconName.replace(/\\-/g, ' ');\n }\n }\n\n render() {\n const { ariaLabel, flipRtl, iconName,inheritedAttributes } = this;\n const shouldIconAutoFlip = iconName\n ? shouldRtlFlipIcon(iconName, this.el) && flipRtl !== false\n : false;\n const shouldFlip = flipRtl || shouldIconAutoFlip;\n\n return (\n\n <Host\n aria-label={ariaLabel !== undefined && !this.hasAriaHidden() ? ariaLabel : null }\n alt=\"\"\n role=\"img\"\n class={{\n ...createColorClasses(this.color),\n 'flip-rtl': shouldFlip,\n 'icon-rtl': shouldFlip && isRTL(this.el)\n }}\n {...inheritedAttributes}\n >\n {Build.isBrowser && this.svgContent ? (\n <div class=\"icon-inner\" innerHTML={this.svgContent}></div>\n ) : (\n <div class=\"icon-inner\"></div>\n )}\n </Host>\n )\n }\n\n /*****\n * Private Methods\n ****/\n\n private waitUntilVisible(el: HTMLElement, rootMargin: string, cb: () => void) {\n if (Build.isBrowser && typeof window !== 'undefined' && (window).IntersectionObserver) {\n const io = (this.io = new (window).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n if (data[0].isIntersecting) {\n io.disconnect();\n this.io = undefined;\n cb();\n }\n },\n { rootMargin },\n ));\n\n io.observe(el);\n\n // Safety timeout for client-side navigation scenarios\n // Sometimes IntersectionObserver doesn't fire during React navigation\n setTimeout(() => {\n if (this.io && !this.isVisible) {\n // Check if element is actually visible in viewport\n if (this.isElementInViewport(el)) {\n this.io.disconnect();\n this.io = undefined;\n cb();\n }\n }\n }, 1000);\n } else {\n // browser doesn't support IntersectionObserver\n // so just fallback to always show it\n cb();\n }\n }\n\n private isElementInViewport(el: HTMLElement): boolean {\n if (!el || !el.isConnected) return false;\n\n const rect = el.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= windowHeight &&\n rect.right <= windowWidth\n ) || (\n // Also consider partially visible elements\n rect.top < windowHeight &&\n rect.bottom > 0 &&\n rect.left < windowWidth &&\n rect.right > 0\n );\n }\n\n private hasAriaHidden = () => {\n const { el } = this;\n\n return el.hasAttribute('aria-hidden') && el.getAttribute('aria-hidden') === 'true';\n }\n\n /**\n * Debug method to help diagnose loading issues\n * Call from browser console: document.querySelector('pds-icon').debugIconState()\n */\n debugIconState() {\n const url = getUrl(this);\n const rect = this.el.getBoundingClientRect();\n\n console.log('PdsIcon Debug State:', {\n name: this.name,\n src: this.src,\n icon: this.icon,\n iconName: this.iconName,\n url,\n isVisible: this.isVisible,\n didLoadIcon: this.didLoadIcon,\n hasSvgContent: !!this.svgContent,\n svgContentLength: this.svgContent?.length || 0,\n isInCache: url ? pdsIconContent.has(url) : false,\n cachedContent: url ? pdsIconContent.get(url) : null,\n element: this.el,\n // Client-side navigation specific debug info\n isConnected: this.el.isConnected,\n isInViewport: this.isElementInViewport(this.el),\n hasIntersectionObserver: !!this.io,\n boundingClientRect: rect,\n windowDimensions: {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n }\n });\n }\n}\n\nconst createColorClasses = (color: string | undefined) => {\n return color\n ? {\n 'pds-color': true,\n [`pds-color-${color}`]: true,\n }\n : null;\n };\n"],"version":3}
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>Pine icons Library - 9.5.0</title>
5
+ <title>Pine icons Library - 9.6.0</title>
6
6
  <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🌲</text></svg>"/>
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -199,11 +199,11 @@
199
199
  </head>
200
200
  <body>
201
201
  <div class="icon-count-container">
202
- <p class="icon-count">368 icons</p>
202
+ <p class="icon-count">369 icons</p>
203
203
  </div>
204
- <h1>Pine Icons - 9.5.0</h1>
204
+ <h1>Pine Icons - 9.6.0</h1>
205
205
  <div class="search-container">
206
- <label for="search" class="visually-hidden">Search all 368 icons</label>
206
+ <label for="search" class="visually-hidden">Search all 369 icons</label>
207
207
  <input type="text" id="search" class="search-input" placeholder="Search icons by name or tag..." oninput="filterIcons(this.value)">
208
208
  </div>
209
209
 
@@ -534,6 +534,7 @@
534
534
  <button class="icon-button" title="Copy subscriptions code snippet" data-tags="arrow,back,currency,dollar,exchange,money,payment,refund,refundable,revery" data-icon-name="subscriptions"><pds-icon name="subscriptions"></pds-icon><span class="visually-hidden">Copy subscriptions icon code</span></button>
535
535
  <button class="icon-button" title="Copy super-admin code snippet" data-tags="CX,super admin" data-icon-name="super-admin"><pds-icon name="super-admin"></pds-icon><span class="visually-hidden">Copy super-admin icon code</span></button>
536
536
  <button class="icon-button" title="Copy superscript code snippet" data-tags="editor,rich text,subscript,text,type" data-icon-name="superscript"><pds-icon name="superscript"></pds-icon><span class="visually-hidden">Copy superscript icon code</span></button>
537
+ <button class="icon-button" title="Copy switch-vertical code snippet" data-tags="arrows,swap,switch,vertical" data-icon-name="switch-vertical"><pds-icon name="switch-vertical"></pds-icon><span class="visually-hidden">Copy switch-vertical icon code</span></button>
537
538
  <button class="icon-button" title="Copy sync code snippet" data-tags="clockwise,cw,refresh,refresh,rotate" data-icon-name="sync"><pds-icon name="sync"></pds-icon><span class="visually-hidden">Copy sync icon code</span></button>
538
539
  <button class="icon-button" title="Copy tablet-landscape code snippet" data-tags="ipad,landscape,tablet" data-icon-name="tablet-landscape"><pds-icon name="tablet-landscape"></pds-icon><span class="visually-hidden">Copy tablet-landscape icon code</span></button>
539
540
  <button class="icon-button" title="Copy tablet-portrait code snippet" data-tags="ipad,tablet" data-icon-name="tablet-portrait"><pds-icon name="tablet-portrait"></pds-icon><span class="visually-hidden">Copy tablet-portrait icon code</span></button>
@@ -579,7 +580,7 @@
579
580
  <button class="icon-button" title="Copy wrench code snippet" data-tags="preferences,settings,spanner,tool,tools" data-icon-name="wrench"><pds-icon name="wrench"></pds-icon><span class="visually-hidden">Copy wrench icon code</span></button>
580
581
  <button class="icon-button" title="Copy zoom-in code snippet" data-tags="plus,zoom,zoom in" data-icon-name="zoom-in"><pds-icon name="zoom-in"></pds-icon><span class="visually-hidden">Copy zoom-in icon code</span></button>
581
582
  <button class="icon-button" title="Copy zoom-out code snippet" data-tags="minus,zoom,zoom out" data-icon-name="zoom-out"><pds-icon name="zoom-out"></pds-icon><span class="visually-hidden">Copy zoom-out icon code</span></button>
582
- <svg data-pdsicons="9.5.0" style="display:none">
583
+ <svg data-pdsicons="9.6.0" style="display:none">
583
584
  <style>
584
585
  .pdsicon {
585
586
  fill: currentColor;
@@ -914,6 +915,7 @@
914
915
  <symbol id="subscriptions" viewBox="0 0 24 24" class="pdsicon"><path d="M18.404 3.071A11 11 0 0 1 21.72 6.86 11 11 0 1 1 1 12a.92.92 0 1 1 1.83 0 9.16 9.16 0 0 0 14.43 7.53 9.161 9.161 0 1 0-12-13.74L8.02 5a.928.928 0 0 1 .49 1.79L3.22 8.2a.9.9 0 0 1-.28 0h-.07a.9.9 0 0 1-.31-.09L2.39 8l-.08-.08a1.2 1.2 0 0 1-.15-.27.13.13 0 0 0 0-.06 1 1 0 0 1 0-.27v-.08l.67-5.28a.92.92 0 0 1 1-.8.93.93 0 0 1 .8 1l-.24 1.92a11 11 0 0 1 14.014-1.009"/><path d="M10.98 15.49h1.87a1.31 1.31 0 0 0 0-2.62h-1.74a3.05 3.05 0 1 1 0-6.1v-.43a.87.87 0 0 1 1.74 0v.43h.14a2.91 2.91 0 0 1 2.91 2.91.87.87 0 0 1-1.74 0 1.16 1.16 0 0 0-1.12-1.16h-1.88a1.31 1.31 0 1 0 0 2.61h1.74a3.05 3.05 0 1 1 0 6.1v.43a.87.87 0 0 1-1.74 0v-.43h-.18a2.9 2.9 0 0 1-2.9-2.91.87.87 0 0 1 1.74 0 1.16 1.16 0 0 0 1.16 1.17"/></symbol>
915
916
  <symbol id="super-admin" viewBox="0 0 24 24" class="pdsicon"><path d="M11.542 7.417c1.008 0 1.833.825 1.833 1.833v.458c0 .55-.183 1.1-.55 1.559S12 12 11.542 12c-.459 0-.917-.275-1.284-.733a2.5 2.5 0 0 1-.55-1.559V9.25c0-1.008.825-1.833 1.834-1.833M15.208 12.917c.275 0 .459.183.459.458v.917h-.917v-.917c0-.275.183-.458.458-.458M13.833 16.583v-1.375h2.75v1.375z"/><path fill-rule="evenodd" d="M12 1C5.95 1 1 5.95 1 12s4.95 11 11 11 11-4.95 11-11S18.05 1 12 1m-.458 11.917a8.9 8.9 0 0 0-3.025.55.88.88 0 0 0-.642.825v1.375h3.208c.275 0 .459.183.459.458s-.184.458-.459.458H7.417c-.275 0-.459-.183-.459-.458v-1.833c0-.825.459-1.467 1.284-1.742.285-.114.606-.193.962-.28q.324-.078.688-.178l-.275-.275c-.459-.642-.734-1.375-.734-2.109V9.25c0-1.558 1.192-2.75 2.75-2.75s2.75 1.192 2.75 2.75v.458c0 .734-.275 1.559-.733 2.109-.642.641-1.283 1.1-2.108 1.1m5.958 4.125c0 .275-.183.458-.458.458h-3.667c-.275 0-.458-.183-.458-.458V14.75c0-.275.183-.458.458-.458h.458v-.917c0-.733.642-1.375 1.375-1.375.734 0 1.375.642 1.375 1.375v.917h.459c.275 0 .458.183.458.458z"/></symbol>
916
917
  <symbol id="superscript" viewBox="0 0 24 24" class="pdsicon"><path d="M17 11.002h4c.265 0 .52-.056.707-.243A1 1 0 0 0 21 9.05h-2.85c.13-.27.38-.4.8-.6q.037-.016.073-.034C20.17 7.875 22 7.009 22 5.05a3 3 0 0 0-.73-2 3.1 3.1 0 0 0-3.87-.64 3 3 0 0 0-1.34 1.6 1.002 1.002 0 0 0 .985 1.394 1 1 0 0 0 .895-.724 1 1 0 0 1 .45-.53 1.11 1.11 0 0 1 1.37.22.94.94 0 0 1 .24.63c0 .6-.86 1.1-1.93 1.6a3.22 3.22 0 0 0-2.07 3.4 1 1 0 0 0 1 1M12.616 17.926A1 1 0 0 0 13 18a1 1 0 0 0 .71-1.71L9.41 12l4.3-4.29A1.005 1.005 0 0 0 13 5.996a1 1 0 0 0-.71.294L8 10.59l-4.29-4.3a1.004 1.004 0 0 0-1.42 1.42L6.59 12l-4.3 4.29a1.004 1.004 0 0 0 1.42 1.42L8 13.41l4.29 4.3a1 1 0 0 0 .326.216"/></symbol>
918
+ <symbol id="switch-vertical" viewBox="0 0 24 24" class="pdsicon"><path d="M6 20V6.414L3.707 8.707a1 1 0 1 1-1.414-1.414l4-4 .076-.068a1 1 0 0 1 1.338.068l4 4 .068.076a1 1 0 0 1-1.406 1.406l-.076-.068L8 6.414V20a1 1 0 1 1-2 0M16 4a1 1 0 1 1 2 0v13.586l2.293-2.293a1 1 0 1 1 1.414 1.414l-4 4a1 1 0 0 1-1.414 0l-4-4-.068-.076a1 1 0 0 1 1.406-1.406l.076.068L16 17.586z"/></symbol>
917
919
  <symbol id="sync" viewBox="0 0 24 24" class="pdsicon"><path fill-rule="evenodd" d="M17.645 7.06a7.502 7.502 0 0 0-13.104 4.153A1 1 0 0 1 2.55 11 9.49 9.49 0 0 1 7.25 3.773c4.129-2.384 9.303-1.316 12.182 2.308l.109-.406a1 1 0 1 1 1.931.518l-.732 2.732a1 1 0 0 1-1.224.707L16.784 8.9a1 1 0 1 1 .517-1.932zM20.56 11.9a1 1 0 0 1 .888 1.1 9.49 9.49 0 0 1-4.698 7.228c-4.128 2.384-9.302 1.317-12.181-2.307l-.109.405a1 1 0 0 1-1.932-.518l.732-2.732a1 1 0 0 1 1.225-.707l2.732.732a1 1 0 0 1-.518 1.932l-.344-.092a7.503 7.503 0 0 0 13.105-4.153 1 1 0 0 1 1.1-.888"/></symbol>
918
920
  <symbol id="tablet-landscape" viewBox="0 0 24 24" class="pdsicon"><path fill-rule="evenodd" d="M1 16.839V7.16c0-.527 0-.981.03-1.356.033-.395.104-.789.297-1.167a3 3 0 0 1 1.311-1.311c.378-.193.772-.264 1.167-.296C4.18 3 4.635 3 5.161 3H18.84c.527 0 .982 0 1.356.03.395.033.789.104 1.167.297a3 3 0 0 1 1.311 1.311c.193.378.264.772.296 1.167.031.375.031.83.031 1.356v9.678c0 .527 0 .982-.03 1.356-.033.395-.104.789-.297 1.167a3 3 0 0 1-1.311 1.311c-.378.193-.772.264-1.167.296-.375.031-.83.031-1.357.031H5.162c-.527 0-.981 0-1.356-.03-.395-.033-.789-.104-1.167-.297a3 3 0 0 1-1.311-1.311c-.193-.378-.264-.772-.296-1.167C1 17.82 1 17.365 1 16.838m2.024 1.193c.022.272.06.372.085.422a1 1 0 0 0 .437.437c.05.025.15.063.422.085C4.25 19 4.623 19 5.2 19h13.6c.577 0 .949 0 1.232-.024.272-.022.373-.06.422-.085a1 1 0 0 0 .437-.437c.025-.05.063-.15.085-.422C21 17.75 21 17.377 21 16.8V7.2c0-.577 0-.949-.024-1.232-.022-.272-.06-.373-.085-.422a1 1 0 0 0-.437-.437c-.05-.025-.15-.063-.422-.085C19.75 5 19.377 5 18.8 5H5.2c-.577 0-.949 0-1.232.024-.272.022-.373.06-.422.085a1 1 0 0 0-.437.437c-.025.05-.063.15-.085.422C3 6.25 3 6.623 3 7.2v9.6c0 .577 0 .949.024 1.232M17.5 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3"/></symbol>
919
921
  <symbol id="tablet-portrait" viewBox="0 0 24 24" class="pdsicon"><path fill-rule="evenodd" d="M7.161 1h9.678c.527 0 .982 0 1.356.03.395.033.789.104 1.167.297a3 3 0 0 1 1.311 1.311c.193.378.264.772.296 1.167.031.375.031.83.031 1.356V18.84c0 .527 0 .982-.03 1.356-.033.395-.104.789-.297 1.167a3 3 0 0 1-1.311 1.311c-.378.193-.772.264-1.167.296-.375.031-.83.031-1.356.031H7.16c-.527 0-.981 0-1.356-.03-.395-.033-.789-.104-1.167-.297a3 3 0 0 1-1.311-1.311c-.193-.378-.264-.772-.296-1.167A18 18 0 0 1 3 18.838V5.162c0-.527 0-.981.03-1.356.033-.395.104-.789.297-1.167a3 3 0 0 1 1.311-1.311c.378-.193.772-.264 1.167-.296C6.18 1 6.635 1 7.161 1M5.968 3.024c-.272.022-.373.06-.422.085a1 1 0 0 0-.437.437c-.025.05-.063.15-.085.422C5 4.25 5 4.623 5 5.2v13.6c0 .577 0 .949.024 1.232.022.272.06.373.085.422a1 1 0 0 0 .437.437c.05.025.15.063.422.085C6.25 21 6.623 21 7.2 21h9.6c.577 0 .949 0 1.232-.024.272-.022.372-.06.422-.085a1 1 0 0 0 .437-.437c.025-.05.063-.15.085-.422C19 19.75 19 19.377 19 18.8V5.2c0-.577 0-.949-.024-1.232-.022-.272-.06-.373-.085-.422a1 1 0 0 0-.437-.437c-.05-.025-.15-.063-.422-.085C17.75 3 17.377 3 16.8 3H7.2c-.577 0-.949 0-1.232.024M10.5 17.5a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0"/></symbol>
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-V2Kpy_OQ.js');
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["pds-icon.cjs",[[1,"pds-icon",{"color":[1],"flipRtl":[4,"flip-rtl"],"icon":[1],"name":[513],"size":[513],"src":[1],"ariaLabel":[32],"isVisible":[32],"svgContent":[32]},null,{"size":["updateStyles"],"color":["updateStyles"],"name":["loadIcon"],"src":["loadIcon"],"icon":["loadIcon"]}]]]], options);
9
+ return index.bootstrapLazy([["pds-icon.cjs",[[1,"pds-icon",{"color":[1],"flipRtl":[4,"flip-rtl"],"icon":[8],"name":[513],"size":[513],"src":[1],"ariaLabel":[32],"isVisible":[32],"svgContent":[32]},null,{"size":["updateStyles"],"color":["updateStyles"],"name":["loadIcon"],"src":["loadIcon"],"icon":["loadIcon"]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;