@pine-ds/core 4.7.0 → 4.7.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 (136) hide show
  1. package/components/pds-box2.js +1 -1
  2. package/components/pds-checkbox2.js +1 -1
  3. package/components/pds-chip2.js +1 -1
  4. package/components/pds-combobox.js +1 -1
  5. package/components/pds-copytext.js +1 -1
  6. package/components/pds-dropdown-menu-item.js +1 -1
  7. package/components/pds-modal2.js +1 -1
  8. package/components/pds-multiselect.js +1 -1
  9. package/components/pds-radio.js +1 -1
  10. package/components/pds-row.js +1 -1
  11. package/components/pds-switch.js +1 -1
  12. package/components/pds-table-cell2.js +1 -1
  13. package/components/pds-text2.js +1 -1
  14. package/components/truncation-tooltip.js +1 -1
  15. package/dist/cjs/pds-box.cjs.entry.js +96 -96
  16. package/dist/cjs/pds-checkbox.cjs.entry.js +16 -4
  17. package/dist/cjs/pds-chip.cjs.entry.js +34 -9
  18. package/dist/cjs/pds-combobox.cjs.entry.js +16 -3
  19. package/dist/cjs/pds-copytext.cjs.entry.js +7 -2
  20. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +2 -2
  21. package/dist/cjs/pds-modal.cjs.entry.js +62 -21
  22. package/dist/cjs/pds-multiselect.cjs.entry.js +37 -7
  23. package/dist/cjs/pds-radio.cjs.entry.js +1 -1
  24. package/dist/cjs/pds-row.cjs.entry.js +7 -7
  25. package/dist/cjs/pds-switch.cjs.entry.js +15 -3
  26. package/dist/cjs/pds-table-cell.cjs.entry.js +24 -4
  27. package/dist/cjs/pds-text.cjs.entry.js +17 -9
  28. package/dist/cjs/{truncation-tooltip-CYgQfBLt.js → truncation-tooltip-DO9xli2e.js} +7 -7
  29. package/dist/collection/components/pds-box/pds-box.js +96 -96
  30. package/dist/collection/components/pds-checkbox/pds-checkbox.css +4 -0
  31. package/dist/collection/components/pds-checkbox/pds-checkbox.js +15 -3
  32. package/dist/collection/components/pds-chip/pds-chip.js +33 -8
  33. package/dist/collection/components/pds-chip/stories/pds-chip.stories.js +17 -0
  34. package/dist/collection/components/pds-combobox/pds-combobox.js +17 -4
  35. package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +1 -1
  36. package/dist/collection/components/pds-copytext/pds-copytext.js +6 -1
  37. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +2 -2
  38. package/dist/collection/components/pds-modal/pds-modal.js +66 -21
  39. package/dist/collection/components/pds-multiselect/pds-multiselect.css +4 -0
  40. package/dist/collection/components/pds-multiselect/pds-multiselect.js +37 -7
  41. package/dist/collection/components/pds-radio/pds-radio.css +6 -0
  42. package/dist/collection/components/pds-row/pds-row.js +7 -7
  43. package/dist/collection/components/pds-switch/pds-switch.js +15 -3
  44. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +23 -3
  45. package/dist/collection/components/pds-text/pds-text.js +16 -8
  46. package/dist/collection/utils/truncation-tooltip.js +7 -7
  47. package/dist/docs.json +7 -3
  48. package/dist/esm/pds-box.entry.js +96 -96
  49. package/dist/esm/pds-checkbox.entry.js +16 -4
  50. package/dist/esm/pds-chip.entry.js +34 -9
  51. package/dist/esm/pds-combobox.entry.js +16 -3
  52. package/dist/esm/pds-copytext.entry.js +7 -2
  53. package/dist/esm/pds-dropdown-menu-item.entry.js +2 -2
  54. package/dist/esm/pds-modal.entry.js +62 -21
  55. package/dist/esm/pds-multiselect.entry.js +37 -7
  56. package/dist/esm/pds-radio.entry.js +1 -1
  57. package/dist/esm/pds-row.entry.js +7 -7
  58. package/dist/esm/pds-switch.entry.js +15 -3
  59. package/dist/esm/pds-table-cell.entry.js +24 -4
  60. package/dist/esm/pds-text.entry.js +17 -9
  61. package/dist/esm/{truncation-tooltip-_902ENWC.js → truncation-tooltip-DRXsdKk1.js} +7 -7
  62. package/dist/esm-es5/pds-box.entry.js +1 -1
  63. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  64. package/dist/esm-es5/pds-chip.entry.js +1 -1
  65. package/dist/esm-es5/pds-combobox.entry.js +1 -1
  66. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  67. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  68. package/dist/esm-es5/pds-modal.entry.js +1 -1
  69. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  70. package/dist/esm-es5/pds-radio.entry.js +1 -1
  71. package/dist/esm-es5/pds-row.entry.js +1 -1
  72. package/dist/esm-es5/pds-switch.entry.js +1 -1
  73. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  74. package/dist/esm-es5/pds-text.entry.js +1 -1
  75. package/dist/esm-es5/truncation-tooltip-DRXsdKk1.js +1 -0
  76. package/dist/pine-core/{p-9af131d6.system.entry.js → p-11d98408.system.entry.js} +1 -1
  77. package/dist/pine-core/p-355e4cf9.entry.js +1 -0
  78. package/dist/pine-core/p-4435fff6.system.entry.js +1 -0
  79. package/dist/pine-core/p-576cf904.system.entry.js +1 -0
  80. package/dist/pine-core/{p-4f94b4f1.system.entry.js → p-645a482b.system.entry.js} +1 -1
  81. package/dist/pine-core/{p-4fa63723.system.entry.js → p-6d603d16.system.entry.js} +1 -1
  82. package/dist/pine-core/p-7fa66cad.entry.js +1 -0
  83. package/dist/pine-core/p-80a698ae.entry.js +1 -0
  84. package/dist/pine-core/{p-bf7ee3b7.system.entry.js → p-80e6f3a0.system.entry.js} +1 -1
  85. package/dist/pine-core/p-88ff1604.entry.js +1 -0
  86. package/dist/pine-core/{p-6eec23a7.system.entry.js → p-97d0b89e.system.entry.js} +1 -1
  87. package/dist/pine-core/p-993d1043.entry.js +1 -0
  88. package/dist/pine-core/p-CuSNnuFu.system.js +1 -1
  89. package/dist/pine-core/p-JtdHT_W5.js +1 -0
  90. package/dist/pine-core/p-a939b471.entry.js +1 -0
  91. package/dist/pine-core/p-aa032a5e.system.entry.js +1 -0
  92. package/dist/pine-core/p-bb73ad66.entry.js +2 -0
  93. package/dist/pine-core/p-bd26a5e8.entry.js +1 -0
  94. package/dist/pine-core/p-c36b490e.entry.js +1 -0
  95. package/dist/pine-core/p-c81d8ac8.entry.js +1 -0
  96. package/dist/pine-core/p-ca0a8f5c.entry.js +1 -0
  97. package/dist/pine-core/p-ca0d48e8.entry.js +1 -0
  98. package/dist/pine-core/p-cfc52b95.system.entry.js +1 -0
  99. package/dist/pine-core/{p-ba1f65c2.system.entry.js → p-d8570b4b.system.entry.js} +1 -1
  100. package/dist/pine-core/{p-9e0f920a.system.entry.js → p-e7a95a49.system.entry.js} +1 -1
  101. package/dist/pine-core/p-e803f629.system.entry.js +1 -0
  102. package/dist/pine-core/{p-5a10784e.system.entry.js → p-e836f3ec.system.entry.js} +2 -2
  103. package/dist/pine-core/{p-b8e8a4ce.entry.js → p-f474d7de.entry.js} +1 -1
  104. package/dist/pine-core/{p-CBu9UrXr.system.js → p-qhdoK1Jp.system.js} +1 -1
  105. package/dist/pine-core/pine-core.esm.js +1 -1
  106. package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +4 -0
  107. package/dist/types/components/pds-combobox/pds-combobox.d.ts +6 -1
  108. package/dist/types/components/pds-modal/pds-modal.d.ts +6 -0
  109. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +8 -2
  110. package/dist/types/components/pds-switch/pds-switch.d.ts +4 -0
  111. package/dist/types/components/pds-table/pds-table-cell/pds-table-cell.d.ts +3 -0
  112. package/dist/types/components/pds-text/pds-text.d.ts +1 -0
  113. package/dist/types/components.d.ts +2 -2
  114. package/dist/types/utils/truncation-tooltip.d.ts +15 -2
  115. package/hydrate/index.js +337 -171
  116. package/hydrate/index.mjs +337 -171
  117. package/package.json +2 -2
  118. package/dist/esm-es5/truncation-tooltip-_902ENWC.js +0 -1
  119. package/dist/pine-core/p-21fe6ee1.system.entry.js +0 -1
  120. package/dist/pine-core/p-24fbbb74.system.entry.js +0 -1
  121. package/dist/pine-core/p-258d5e83.entry.js +0 -1
  122. package/dist/pine-core/p-4849fda7.entry.js +0 -1
  123. package/dist/pine-core/p-4de8f333.entry.js +0 -1
  124. package/dist/pine-core/p-550c2fd3.entry.js +0 -1
  125. package/dist/pine-core/p-6bf853c9.entry.js +0 -1
  126. package/dist/pine-core/p-6d3610f9.entry.js +0 -1
  127. package/dist/pine-core/p-84e9b7da.entry.js +0 -1
  128. package/dist/pine-core/p-945fb0b1.entry.js +0 -1
  129. package/dist/pine-core/p-CnM3cCof.js +0 -1
  130. package/dist/pine-core/p-a0344e30.entry.js +0 -2
  131. package/dist/pine-core/p-a85a6ab9.system.entry.js +0 -1
  132. package/dist/pine-core/p-cf08a6dd.system.entry.js +0 -1
  133. package/dist/pine-core/p-e21ff692.entry.js +0 -1
  134. package/dist/pine-core/p-e800a2b1.entry.js +0 -1
  135. package/dist/pine-core/p-eb5465ce.entry.js +0 -1
  136. package/dist/pine-core/p-f25e4731.system.entry.js +0 -1
@@ -78,6 +78,20 @@ function oneRadioPerGroup(elements) {
78
78
  const stops = new Set(groups.map((radios) => { var _a; return (_a = radios.find((radio) => radio.checked)) !== null && _a !== void 0 ? _a : radios[0]; }));
79
79
  return elements.filter((el) => groupedRadio(el) === null || stops.has(el));
80
80
  }
81
+ /** The controls Tab reaches in `root`, in order: visible ones, and one radio per group. */
82
+ function tabbableIn(root) {
83
+ const found = [];
84
+ collectTabbable(root, found);
85
+ // checkVisibility() also drops an element inside a hidden ancestor, whose own computed
86
+ // display isn't none; such an element can't take focus.
87
+ const visible = found.filter(el => {
88
+ if (typeof el.checkVisibility === 'function')
89
+ return el.checkVisibility({ checkVisibilityCSS: true });
90
+ const style = window.getComputedStyle(el);
91
+ return style.display !== 'none' && style.visibility !== 'hidden';
92
+ });
93
+ return oneRadioPerGroup(visible);
94
+ }
81
95
  /** Whether `node` is `ancestor` or inside it, crossing shadow roots, which `Node.contains` doesn't. */
82
96
  function containsComposed(ancestor, node) {
83
97
  for (let current = node; current; current = current instanceof ShadowRoot ? current.host : current.parentNode) {
@@ -361,17 +375,7 @@ const PdsModal = class {
361
375
  updateFocusableElements() {
362
376
  if (!this.modalRef)
363
377
  return;
364
- this.focusableElements = [];
365
- collectTabbable(this.modalRef, this.focusableElements);
366
- // checkVisibility() also drops an element inside a hidden ancestor, whose own computed
367
- // display isn't none; such an element can't take focus, so it can't anchor the trap.
368
- this.focusableElements = this.focusableElements.filter(el => {
369
- if (typeof el.checkVisibility === 'function')
370
- return el.checkVisibility({ checkVisibilityCSS: true });
371
- const style = window.getComputedStyle(el);
372
- return style.display !== 'none' && style.visibility !== 'hidden';
373
- });
374
- this.focusableElements = oneRadioPerGroup(this.focusableElements);
378
+ this.focusableElements = tabbableIn(this.modalRef);
375
379
  }
376
380
  /**
377
381
  * Sets focus to the first focusable element in the modal
@@ -395,10 +399,13 @@ const PdsModal = class {
395
399
  * Opens the modal
396
400
  */
397
401
  async showModal() {
402
+ var _a;
398
403
  if (this.modalRef) {
399
404
  try {
400
- // Store the currently focused element to restore focus when modal closes
401
- this.previousActiveElement = document.activeElement;
405
+ // Store the currently focused element to restore focus when modal closes. Showing an open
406
+ // modal again (the open watcher does) would record a control inside it instead.
407
+ if (!this.modalRef.open)
408
+ this.previousActiveElement = document.activeElement;
402
409
  // showModal() promotes the dialog to the browser top layer (and makes the
403
410
  // rest of the page inert), which prevents any overlay outside the dialog
404
411
  // from ever painting above it. show() opens a non-modal dialog that stays
@@ -415,9 +422,20 @@ const PdsModal = class {
415
422
  openModals.set(this.el, ++openSequence);
416
423
  // Update focusable elements and set initial focus
417
424
  // Using a longer timeout to ensure all components are fully rendered
425
+ const openedAs = (_a = openModals.get(this.el)) !== null && _a !== void 0 ? _a : 0;
418
426
  setTimeout(() => {
419
427
  var _a, _b;
420
428
  this.updateFocusableElements();
429
+ // A modal opened above this one in the meantime has focus; don't take it back. Not this
430
+ // modal itself (moving it gives it a new place), and not a disableTopLayer modal outside
431
+ // it while this one is in the top layer, which sits below it.
432
+ const openedAbove = Array.from(openModals).some(([modal, sequence]) => sequence > openedAs &&
433
+ modal !== this.el &&
434
+ (containsComposed(this.el, modal) || !modal.disableTopLayer || this.disableTopLayer));
435
+ if (openedAbove) {
436
+ this.pdsModalOpen.emit();
437
+ return;
438
+ }
421
439
  if (this.disableInitialFocus) {
422
440
  // show()/showModal() also move focus into the dialog natively (the
423
441
  // HTML spec's "dialog focusing steps") — that native step isn't
@@ -461,6 +479,7 @@ const PdsModal = class {
461
479
  * Closes the modal
462
480
  */
463
481
  async hideModal() {
482
+ var _a;
464
483
  if (this.modalRef) {
465
484
  try {
466
485
  // Capture before close(): with the async task queue, a prop change
@@ -476,11 +495,18 @@ const PdsModal = class {
476
495
  this.modalRef.close();
477
496
  this.open = false;
478
497
  openModals.delete(this.el);
479
- // Restore focus to the element that was focused before the modal was opened
480
- if (!focusAlreadyMovedElsewhere &&
481
- this.previousActiveElement &&
482
- typeof this.previousActiveElement.focus === 'function') {
483
- this.previousActiveElement.focus();
498
+ // Restore focus to the element that was focused before the modal was opened. If that's
499
+ // gone or can't take focus (disabled, hidden, or nothing), fall back to the open modal now
500
+ // on top, so focus doesn't land on an inert page behind it.
501
+ if (!focusAlreadyMovedElsewhere) {
502
+ const previous = this.previousActiveElement;
503
+ if (previous && previous !== document.body && previous.isConnected)
504
+ (_a = previous.focus) === null || _a === void 0 ? void 0 : _a.call(previous);
505
+ const active = deepActiveElement();
506
+ // document.body isn't a real restore target — it's just where focus lands when nothing
507
+ // was focused before opening, so landing back there never counts as a successful restore.
508
+ if (!previous || previous === document.body || !containsComposed(previous, active) || containsComposed(this.el, active))
509
+ this.focusTopModal();
484
510
  }
485
511
  this.pdsModalClose.emit();
486
512
  }
@@ -489,6 +515,21 @@ const PdsModal = class {
489
515
  }
490
516
  }
491
517
  }
518
+ /**
519
+ * Focuses the first control of the open modal now on top, when the page behind it is inert: that
520
+ * modal is in the top layer (or paints there inside a top-layer one), or it wraps this one. A
521
+ * non-modal one over an interactive page, like a drawer, is left alone.
522
+ */
523
+ focusTopModal() {
524
+ var _a;
525
+ const top = this.innermostOpenModal();
526
+ const dialog = top === null || top === void 0 ? void 0 : top.querySelector('.pds-modal__backdrop');
527
+ if (!dialog)
528
+ return;
529
+ if (!closest.closest('dialog:modal', dialog) && !containsComposed(top, this.el))
530
+ return;
531
+ (_a = tabbableIn(dialog).find(el => !containsComposed(this.el, el))) === null || _a === void 0 ? void 0 : _a.focus();
532
+ }
492
533
  /**
493
534
  * Gets the z-index of a modal's backdrop element
494
535
  */
@@ -610,14 +651,14 @@ const PdsModal = class {
610
651
  }
611
652
  render() {
612
653
  const [sizeClass = 'md', customSize] = this.resolveSize();
613
- return (index.h("dialog", { key: '0633d4e8a7cb81f2f9280e754564960a00a4d60b', class: {
654
+ return (index.h("dialog", { key: '0b187f36910a859afe57b891f1ebffd1d2d49ab7', class: {
614
655
  'pds-modal__backdrop': true,
615
656
  'open': this.open
616
- }, "aria-modal": this.disableTopLayer ? 'false' : 'true', "aria-labelledby": `${this.componentId}-heading`, onClick: this.handleBackdropClick, onCancel: this.handleCancel }, index.h("div", { key: '466f8a3476cf066817554f47ec7d3a0e3ab10b89', class: {
657
+ }, "aria-modal": this.disableTopLayer ? 'false' : 'true', "aria-labelledby": `${this.componentId}-heading`, onClick: this.handleBackdropClick, onCancel: this.handleCancel }, index.h("div", { key: 'f5e652d4dae0e7c272b37b63eb9c65f04c69536a', class: {
617
658
  'pds-modal': true,
618
659
  [`pds-modal--${sizeClass}`]: true,
619
660
  'pds-modal--scrollable': this.scrollable
620
- }, style: customSize !== undefined ? { '--pds-modal-max-width': customSize } : undefined, part: "modal" }, index.h("slot", { key: '01ca45c96540416216a1082bad52b137720f0f4d' }))));
661
+ }, style: customSize !== undefined ? { '--pds-modal-max-width': customSize } : undefined, part: "modal" }, index.h("slot", { key: 'a954e1694741f78230599c476b270079797a263e' }))));
621
662
  }
622
663
  get el() { return index.getElement(this); }
623
664
  static get watchers() { return {
@@ -8,7 +8,7 @@ var index$1 = require('./index-5Azb8EQG.js');
8
8
  var i18nFormat = require('./i18n-format-BD0PmYzT.js');
9
9
  require('./keep-hydrated-CiXgkEYd.js');
10
10
 
11
- const pdsMultiselectCss = () => `:host{display:block}:host([aria-disabled=true]) .pds-multiselect__trigger{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}:host([aria-disabled=true]) .pds-multiselect__icon{color:var(--pine-color-text-disabled)}.pds-multiselect{position:relative}.pds-multiselect__label{color:var(--pine-color-text-label);display:block;font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs)}.pds-multiselect__wrapper{position:relative}.pds-multiselect__trigger{-ms-flex-align:center;align-items:center;background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-dimension-125);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);gap:var(--pine-dimension-xs);-ms-flex-pack:justify;justify-content:space-between;letter-spacing:var(--pine-letter-spacing);min-height:var(--pine-dimension-450);padding:var(--pine-dimension-xs) var(--pine-dimension-sm);position:relative;text-align:start;-webkit-transition:border-color var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, box-shadow var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;width:100%}.pds-multiselect__trigger:hover:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-hover)}.pds-multiselect__trigger:focus:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-multiselect__trigger.pds-multiselect__trigger--open{border-color:var(--pine-color-border-active)}.pds-multiselect__trigger.pds-multiselect__trigger--invalid{background-color:var(--pine-color-red-050);border-color:var(--pine-color-border-danger)}.pds-multiselect__trigger.pds-multiselect__trigger--invalid:focus{outline-color:var(--pine-color-focus-ring-danger)}.pds-multiselect__trigger.pds-multiselect__trigger--disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}.pds-multiselect__trigger-text{color:var(--pine-color-text-strong);-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pds-multiselect__trigger-text.pds-multiselect__trigger-text--placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__trigger--disabled .pds-multiselect__trigger-text{color:var(--pine-color-text-disabled)}.pds-multiselect__icon{color:var(--pine-color-icon);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__pill-list{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--pine-dimension-2xs)}.pds-multiselect__pill-list--inline{-ms-flex:1;flex:1;min-width:0}.pds-multiselect__pill-list--below{-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-multiselect__pill-overflow{color:var(--pine-color-text-muted);font:var(--pine-typography-body-sm-medium);white-space:nowrap}.pds-multiselect__trigger--pill-inline{-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--pine-dimension-2xs);min-height:var(--pine-dimension-450);padding:var(--pine-dimension-2xs) var(--pine-dimension-sm)}.pds-multiselect__trigger--pill-inline.pds-multiselect__trigger--open{border-color:var(--pine-color-border-active)}.pds-multiselect__trigger--pill-inline:focus-within:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-multiselect__trigger--pill-inline.pds-multiselect__trigger--invalid:focus-within{outline-color:var(--pine-color-focus-ring-danger)}.pds-multiselect__pill-toggle{-ms-flex-align:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border-width:0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0}.pds-multiselect__pill-toggle:focus{outline:3px solid transparent}.pds-multiselect__trigger--disabled .pds-multiselect__pill-toggle{cursor:not-allowed;pointer-events:none}.pds-multiselect__panel{background:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);-webkit-box-sizing:border-box;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:fixed;z-index:var(--pine-z-index-raised)}.pds-multiselect__search{-ms-flex-align:center;align-items:center;-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-multiselect__search pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__search-input{background:transparent;border:var(--pine-dimension-none);color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-width:var(--pine-dimension-none);outline:none}.pds-multiselect__search-input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__selected-section{-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);padding:var(--pine-dimension-xs)}.pds-multiselect__selected-list{list-style:none;margin:var(--pine-dimension-none);padding:var(--pine-dimension-none)}.pds-multiselect__selected-item{color:var(--pine-color-text-strong);font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);overflow:hidden;padding:var(--pine-dimension-2xs) var(--pine-dimension-xs);text-overflow:ellipsis;white-space:nowrap}.pds-multiselect__listbox{background:transparent;border:var(--pine-dimension-none);-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:var(--pine-dimension-none);overflow-y:auto;padding:var(--pine-dimension-xs)}.pds-multiselect__group-header{color:var(--pine-color-text-muted);display:block;font:var(--pine-typography-body-sm-medium);letter-spacing:var(--pine-letter-spacing);padding:var(--pine-dimension-sm) var(--pine-dimension-xs) var(--pine-dimension-2xs);text-transform:uppercase}.pds-multiselect__listbox>li:first-child>.pds-multiselect__group-header{-webkit-padding-before:var(--pine-dimension-xs);padding-block-start:var(--pine-dimension-xs)}.pds-multiselect__group-list{list-style:none;margin:var(--pine-dimension-none);padding:var(--pine-dimension-none)}.pds-multiselect__option{-ms-flex-align:center;align-items:center;background:transparent;border-radius:var(--pine-dimension-xs);cursor:pointer;display:-ms-flexbox;display:flex;padding:var(--pine-dimension-2xs) var(--pine-dimension-xs);-webkit-transition:background 0.15s;transition:background 0.15s}.pds-multiselect__option pds-checkbox{pointer-events:none;width:100%}.pds-multiselect__option:hover:not(.pds-multiselect__option--disabled),.pds-multiselect__option.pds-multiselect__option--highlighted:not(.pds-multiselect__option--disabled){background:var(--pine-color-background-muted)}.pds-multiselect__option.pds-multiselect__option--disabled{cursor:not-allowed;opacity:0.5}.pds-multiselect__option:focus-visible{outline:var(--pine-dimension-none)}.pds-multiselect__option-action{-ms-flex-align:center;align-items:center;block-size:var(--pine-dimension-md);color:var(--pine-color-icon);cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;inline-size:var(--pine-dimension-md);-ms-flex-pack:center;justify-content:center;-webkit-margin-start:var(--pine-dimension-xs);margin-inline-start:var(--pine-dimension-xs)}.pds-multiselect__create-option{color:var(--pine-color-text-strong);width:100%}.pds-multiselect__create-option pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__empty,.pds-multiselect__loading{-ms-flex-align:center;align-items:center;color:var(--pine-color-text-muted);display:-ms-flexbox;display:flex;font:var(--pine-typography-body);-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-sm)}.pds-multiselect__load-more{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-xs)}.pds-multiselect__footer{-webkit-border-before:var(--pine-border);border-block-start:var(--pine-border);border-block-start-color:var(--pine-color-border-subtle);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-multiselect__helper{color:var(--pine-color-text-message);font:var(--pine-typography-body-sm-medium);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs);-webkit-margin-start:var(--pine-dimension-none);margin-inline-start:var(--pine-dimension-none)}.pds-multiselect__error{-ms-flex-align:start;align-items:flex-start;color:var(--pine-color-text-message-danger);display:-ms-flexbox;display:flex;font:var(--pine-typography-body-sm-medium);gap:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs);-webkit-margin-start:var(--pine-dimension-none);margin-inline-start:var(--pine-dimension-none)}.pds-multiselect__error pds-icon{-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none);-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.visually-hidden{border:var(--pine-dimension-none);clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:var(--pine-dimension-none);position:absolute;white-space:nowrap;width:1px}`;
11
+ const pdsMultiselectCss = () => `:host{display:block}:host([aria-disabled=true]) .pds-multiselect__trigger{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}:host([aria-disabled=true]) .pds-multiselect__icon{color:var(--pine-color-text-disabled)}.pds-multiselect{position:relative}.pds-multiselect__label{color:var(--pine-color-text-label);display:block;font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs)}.pds-multiselect__wrapper{position:relative}.pds-multiselect__trigger{-ms-flex-align:center;align-items:center;background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-dimension-125);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);gap:var(--pine-dimension-xs);-ms-flex-pack:justify;justify-content:space-between;letter-spacing:var(--pine-letter-spacing);min-height:var(--pine-dimension-450);padding:var(--pine-dimension-xs) var(--pine-dimension-sm);position:relative;text-align:start;-webkit-transition:border-color var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, box-shadow var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease, box-shadow var(--pine-motion-duration-base) ease, -webkit-box-shadow var(--pine-motion-duration-base) ease;width:100%}.pds-multiselect__trigger:hover:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-hover)}.pds-multiselect__trigger:focus:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-multiselect__trigger.pds-multiselect__trigger--open{border-color:var(--pine-color-border-active)}.pds-multiselect__trigger.pds-multiselect__trigger--invalid{background-color:var(--pine-color-red-050);border-color:var(--pine-color-border-danger)}.pds-multiselect__trigger.pds-multiselect__trigger--invalid:focus{outline-color:var(--pine-color-focus-ring-danger)}.pds-multiselect__trigger.pds-multiselect__trigger--disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}.pds-multiselect__trigger-text{color:var(--pine-color-text-strong);-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pds-multiselect__trigger-text.pds-multiselect__trigger-text--placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__trigger--disabled .pds-multiselect__trigger-text{color:var(--pine-color-text-disabled)}.pds-multiselect__icon{color:var(--pine-color-icon);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__pill-list{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--pine-dimension-2xs)}.pds-multiselect__pill-list--inline{-ms-flex:1;flex:1;min-width:0}.pds-multiselect__pill-list--below{-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-multiselect__pill-overflow{color:var(--pine-color-text-muted);font:var(--pine-typography-body-sm-medium);white-space:nowrap}.pds-multiselect__trigger--pill-inline{-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--pine-dimension-2xs);min-height:var(--pine-dimension-450);padding:var(--pine-dimension-2xs) var(--pine-dimension-sm)}.pds-multiselect__trigger--pill-inline.pds-multiselect__trigger--open{border-color:var(--pine-color-border-active)}.pds-multiselect__trigger--pill-inline:focus-within:not(.pds-multiselect__trigger--disabled){border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-multiselect__trigger--pill-inline.pds-multiselect__trigger--invalid:focus-within{outline-color:var(--pine-color-focus-ring-danger)}.pds-multiselect__pill-toggle{-ms-flex-align:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border-width:0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0}.pds-multiselect__pill-toggle:focus{outline:3px solid transparent}.pds-multiselect__trigger--disabled .pds-multiselect__pill-toggle{cursor:not-allowed;pointer-events:none}.pds-multiselect__panel{background:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);-webkit-box-sizing:border-box;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:fixed;z-index:var(--pine-z-index-raised)}.pds-multiselect__search{-ms-flex-align:center;align-items:center;-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-multiselect__search pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__search-input{background:transparent;border:var(--pine-dimension-none);color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-width:var(--pine-dimension-none);outline:none}.pds-multiselect__search-input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__search-input::placeholder{color:var(--pine-color-text-placeholder)}.pds-multiselect__selected-section{-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);padding:var(--pine-dimension-xs)}.pds-multiselect__selected-list{list-style:none;margin:var(--pine-dimension-none);padding:var(--pine-dimension-none)}.pds-multiselect__selected-item{color:var(--pine-color-text-strong);font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);overflow:hidden;padding:var(--pine-dimension-2xs) var(--pine-dimension-xs);text-overflow:ellipsis;white-space:nowrap}.pds-multiselect__listbox{background:transparent;border:var(--pine-dimension-none);-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:var(--pine-dimension-none);overflow-y:auto;padding:var(--pine-dimension-xs)}.pds-multiselect__group-header{color:var(--pine-color-text-muted);display:block;font:var(--pine-typography-body-sm-medium);letter-spacing:var(--pine-letter-spacing);padding:var(--pine-dimension-sm) var(--pine-dimension-xs) var(--pine-dimension-2xs);text-transform:uppercase}.pds-multiselect__listbox>li:first-child>.pds-multiselect__group-header{-webkit-padding-before:var(--pine-dimension-xs);padding-block-start:var(--pine-dimension-xs)}.pds-multiselect__group-list{list-style:none;margin:var(--pine-dimension-none);padding:var(--pine-dimension-none)}.pds-multiselect__option{-ms-flex-align:center;align-items:center;background:transparent;border-radius:var(--pine-dimension-xs);cursor:pointer;display:-ms-flexbox;display:flex;padding:var(--pine-dimension-2xs) var(--pine-dimension-xs);-webkit-transition:background 0.15s;transition:background 0.15s}.pds-multiselect__option pds-checkbox{min-width:var(--pine-dimension-none);pointer-events:none;width:100%}.pds-multiselect__option pds-chip{pointer-events:auto}.pds-multiselect__option:hover:not(.pds-multiselect__option--disabled),.pds-multiselect__option.pds-multiselect__option--highlighted:not(.pds-multiselect__option--disabled){background:var(--pine-color-background-muted)}.pds-multiselect__option.pds-multiselect__option--disabled{cursor:not-allowed;opacity:0.5}.pds-multiselect__option:focus-visible{outline:var(--pine-dimension-none)}.pds-multiselect__option-action{-ms-flex-align:center;align-items:center;block-size:var(--pine-dimension-md);color:var(--pine-color-icon);cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;inline-size:var(--pine-dimension-md);-ms-flex-pack:center;justify-content:center;-webkit-margin-start:var(--pine-dimension-xs);margin-inline-start:var(--pine-dimension-xs)}.pds-multiselect__create-option{color:var(--pine-color-text-strong);width:100%}.pds-multiselect__create-option pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none)}.pds-multiselect__empty,.pds-multiselect__loading{-ms-flex-align:center;align-items:center;color:var(--pine-color-text-muted);display:-ms-flexbox;display:flex;font:var(--pine-typography-body);-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-sm)}.pds-multiselect__load-more{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-xs)}.pds-multiselect__footer{-webkit-border-before:var(--pine-border);border-block-start:var(--pine-border);border-block-start-color:var(--pine-color-border-subtle);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-multiselect__helper{color:var(--pine-color-text-message);font:var(--pine-typography-body-sm-medium);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs);-webkit-margin-start:var(--pine-dimension-none);margin-inline-start:var(--pine-dimension-none)}.pds-multiselect__error{-ms-flex-align:start;align-items:flex-start;color:var(--pine-color-text-message-danger);display:-ms-flexbox;display:flex;font:var(--pine-typography-body-sm-medium);gap:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs);-webkit-margin-start:var(--pine-dimension-none);margin-inline-start:var(--pine-dimension-none)}.pds-multiselect__error pds-icon{-ms-flex-negative:var(--pine-dimension-none);flex-shrink:var(--pine-dimension-none);-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.visually-hidden{border:var(--pine-dimension-none);clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:var(--pine-dimension-none);position:absolute;white-space:nowrap;width:1px}`;
12
12
 
13
13
  // Names only: pds-icon's `icon` prop also fetches URLs and data: SVGs, unsanitized.
14
14
  const PINE_ICON_NAME = /^[a-z0-9-]+$/i;
@@ -349,6 +349,11 @@ const PdsMultiselect = class {
349
349
  e.preventDefault(); // Prevent focus change
350
350
  this.toggleOption(option);
351
351
  };
352
+ // mousedown already toggled the option. Without this, a click on the chip reaches the
353
+ // checkbox through its label and toggles it a second time.
354
+ this.handleOptionClick = (e) => {
355
+ e.preventDefault();
356
+ };
352
357
  this.handleOptionMouseEnter = (index, option) => () => {
353
358
  if (option.disabled)
354
359
  return;
@@ -407,6 +412,18 @@ const PdsMultiselect = class {
407
412
  this.internals = this.el.attachInternals();
408
413
  }
409
414
  }
415
+ /**
416
+ * Form Associated Custom Elements API: Called when the form is disabled
417
+ */
418
+ formDisabledCallback(disabled) {
419
+ // Also fires when this element's own `disabled` attribute is merely present, even as the
420
+ // literal string "false" (a consumer's or React's attribute serialization can write that) —
421
+ // the platform treats any value as disabled, independent of fieldset state. A real disabled
422
+ // fieldset ancestor confirms this is genuinely that, not this element's own attribute.
423
+ if (disabled && !this.el.closest('fieldset[disabled]'))
424
+ return;
425
+ this.disabled = disabled;
426
+ }
410
427
  componentWillLoad() {
411
428
  this.originalSearchEmitter = this.pdsMultiselectSearch;
412
429
  this.syncSelectedItems();
@@ -505,8 +522,20 @@ const PdsMultiselect = class {
505
522
  var _a;
506
523
  (_a = this.slottedTriggerEl) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', String(this.isOpen));
507
524
  }
508
- disabledChanged() {
525
+ disabledChanged(disabled) {
526
+ var _a, _b;
509
527
  this.syncSlottedTrigger();
528
+ // A disabled control can't stay open, or its options could still be toggled.
529
+ if (!disabled || !this.isOpen)
530
+ return;
531
+ const activeElement = document.activeElement;
532
+ const focusInside = !!(((_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.contains(activeElement)) || this.el.contains(activeElement));
533
+ this.closeDropdown();
534
+ // A disabled built-in trigger can't take focus back (falls to <body>, as natively); a slotted
535
+ // trigger without its own disabled property only gets aria-disabled and stays focusable, so
536
+ // focus would otherwise stay stranded on the closed panel's former content.
537
+ if (focusInside)
538
+ (_b = this.activeTriggerEl) === null || _b === void 0 ? void 0 : _b.focus();
510
539
  }
511
540
  /**
512
541
  * Sets focus on the trigger button.
@@ -516,7 +545,8 @@ const PdsMultiselect = class {
516
545
  (_a = this.activeTriggerEl) === null || _a === void 0 ? void 0 : _a.focus();
517
546
  }
518
547
  /**
519
- * Clears all selected values and resets the component.
548
+ * Clears all selected values and resets the component. Works while disabled too, as setting a
549
+ * native control's value from script does.
520
550
  */
521
551
  async clear() {
522
552
  const hadValues = this.value.length > 0 || this.searchQuery !== '';
@@ -1152,7 +1182,7 @@ const PdsMultiselect = class {
1152
1182
  'pds-multiselect__option--selected': isSelected,
1153
1183
  'pds-multiselect__option--create': isCreateOption,
1154
1184
  'pds-multiselect__option--disabled': isDisabled || isCreateDisabled,
1155
- }, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": isDisabled || isCreateDisabled ? 'true' : undefined, "aria-label": isCreateOption ? i18nFormat.formatMessage(this.createOptionAriaLabel, { text: option.text }) : undefined, "aria-describedby": hasAction ? `${optionId}-action-description` : undefined, "data-index": index$1, onMouseDown: this.handleOptionMouseDown(option), onMouseEnter: this.handleOptionMouseEnter(index$1, option) }, isCreateOption ? (index.h("pds-box", { class: "pds-multiselect__create-option", "align-items": "center", gap: "xs" }, index.h("pds-icon", { name: "add", size: "small" }), index.h("pds-text", null, i18nFormat.formatMessage(this.createOptionLabel, { text: option.text })))) : (index.h("pds-checkbox", { componentId: `${this.componentId}-checkbox-${index$1}`, checked: isSelected, label: option.text, disabled: isDisabled, style: { pointerEvents: 'none' } }, this.optionDisplay === 'chip' && (index.h("pds-chip", { slot: "label", sentiment: "subtle", dot: !!option.dotColor, "dot-color": option.dotColor }, option.text)))), hasAction && this.renderOptionAction(option, optionId, isHighlighted)));
1185
+ }, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": isDisabled || isCreateDisabled ? 'true' : undefined, "aria-label": isCreateOption ? i18nFormat.formatMessage(this.createOptionAriaLabel, { text: option.text }) : undefined, "aria-describedby": hasAction ? `${optionId}-action-description` : undefined, "data-index": index$1, onMouseDown: this.handleOptionMouseDown(option), onClick: this.handleOptionClick, onMouseEnter: this.handleOptionMouseEnter(index$1, option) }, isCreateOption ? (index.h("pds-box", { class: "pds-multiselect__create-option", "align-items": "center", gap: "xs" }, index.h("pds-icon", { name: "add", size: "small" }), index.h("pds-text", null, i18nFormat.formatMessage(this.createOptionLabel, { text: option.text })))) : (index.h("pds-checkbox", { componentId: `${this.componentId}-checkbox-${index$1}`, checked: isSelected, label: option.text, disabled: isDisabled, style: { pointerEvents: 'none' } }, this.optionDisplay === 'chip' && (index.h("pds-chip", { slot: "label", sentiment: "subtle", dot: !!option.dotColor, "dot-color": option.dotColor, "max-width": "100%" }, option.text)))), hasAction && this.renderOptionAction(option, optionId, isHighlighted)));
1156
1186
  }
1157
1187
  renderOptionAction(option, optionId, isHighlighted) {
1158
1188
  var _a;
@@ -1234,10 +1264,10 @@ const PdsMultiselect = class {
1234
1264
  }
1235
1265
  render() {
1236
1266
  const hasSelections = this.selectedItems.length > 0;
1237
- return (index.h(index.Host, { key: 'fcc35a82c16d5cf35a49ce997f19618104f9cc45', "aria-disabled": this.disabled ? 'true' : null }, index.h("div", { key: '72d1fdf759d9173f54bac80ec50aff651fd2b357', class: "pds-multiselect", onFocusout: this.handleContainerFocusOut }, this.label && (index.h("label", { key: 'e28f02c2beb23dc2c0deefadbd0645b20d938d91', id: `${this.componentId}-label`, htmlFor: this.componentId, class: {
1267
+ return (index.h(index.Host, { key: 'a7806379c53598d41af91be63ee5bd300cc87755', "aria-disabled": this.disabled ? 'true' : null }, index.h("div", { key: '0213d40953f1735b84c038e0e0afd1bc289d45ad', class: "pds-multiselect", onFocusout: this.handleContainerFocusOut }, this.label && (index.h("label", { key: 'fa91c2337cdc9f5dea62173aeaa6b56e118a1316', id: `${this.componentId}-label`, htmlFor: this.componentId, class: {
1238
1268
  'pds-multiselect__label': true,
1239
1269
  'visually-hidden': this.hideLabel,
1240
- } }, this.label)), index.h("div", { key: '06539bf2c4b8da2889505a9f042d5cd6721b1853', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), style: { width: this.triggerWidth } }, this.slottedTriggerEl ? (index.h("slot", { name: "trigger" })) : this.selectedDisplay === 'pill' && this.pillPosition === 'inline' ? (index.h("div", { ref: el => (this.pillInlineTriggerEl = el || undefined), part: "trigger", class: {
1270
+ } }, this.label)), index.h("div", { key: '54209b3edfb3583ab1bcecd2b1df973955abfcc3', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), style: { width: this.triggerWidth } }, this.slottedTriggerEl ? (index.h("slot", { name: "trigger" })) : this.selectedDisplay === 'pill' && this.pillPosition === 'inline' ? (index.h("div", { ref: el => (this.pillInlineTriggerEl = el || undefined), part: "trigger", class: {
1241
1271
  'pds-multiselect__trigger': true,
1242
1272
  'pds-multiselect__trigger--open': this.isOpen,
1243
1273
  'pds-multiselect__trigger--disabled': this.disabled,
@@ -1253,7 +1283,7 @@ const PdsMultiselect = class {
1253
1283
  }, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": form.assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, index.h("span", { class: {
1254
1284
  'pds-multiselect__trigger-text': true,
1255
1285
  'pds-multiselect__trigger-text--placeholder': !hasSelections || (this.selectedDisplay === 'pill' && this.pillPosition === 'below'),
1256
- } }, this.getTriggerText()), index.h("pds-icon", { "aria-hidden": "true", class: "pds-multiselect__icon", icon: index$1.enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), index.h("span", { key: '3364fc00bc744fcd599436a9cb6dc563564d89d9', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (index.h("p", { key: 'bf712c65b9acb66e2998a43686fed408fc1ff48a', class: "pds-multiselect__helper", id: form.messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (index.h("p", { key: 'b485db6c2c3ae312cce2b90db60e850ad6dfdcf5', class: "pds-multiselect__error", id: form.messageId(this.componentId, 'error') }, index.h("pds-icon", { key: '20daf861cf9584f33f5a9574e9581acc487e7dfe', icon: index$1.danger, size: "small" }), this.errorMessage)), index.h("div", { key: '018d333254771695a8c191f1cea40af6e78427a2', style: { display: 'none' } }, index.h("slot", { key: '2ef4a01fbe5d294a9ead5cc1183c28341834539b' })))));
1286
+ } }, this.getTriggerText()), index.h("pds-icon", { "aria-hidden": "true", class: "pds-multiselect__icon", icon: index$1.enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), index.h("span", { key: 'e3c1bb5c484d851b332e994cd2a528ae95cbfc4d', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (index.h("p", { key: '2009f6487118252ef1ec14170ddd0c6853ad279f', class: "pds-multiselect__helper", id: form.messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (index.h("p", { key: 'c740f4845ff0c1ccff4633810c1d9d92fb2e8a78', class: "pds-multiselect__error", id: form.messageId(this.componentId, 'error') }, index.h("pds-icon", { key: 'b2406ab3b0957a440593b4b986c98476258349be', icon: index$1.danger, size: "small" }), this.errorMessage)), index.h("div", { key: '6d2db6563864c71ab92ed9a8d4133efca23b1c55', style: { display: 'none' } }, index.h("slot", { key: '2af0e0a7e2410b9850fd15ef524fb388c32dc320' })))));
1257
1287
  }
1258
1288
  static get formAssociated() { return true; }
1259
1289
  get el() { return index.getElement(this); }
@@ -8,7 +8,7 @@ require('./keep-hydrated-CiXgkEYd.js');
8
8
 
9
9
  const labelCss = () => `.sc-pds-radio-h{display:inline-block}[aria-disabled=true].sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-disabled)}[aria-readonly=true].sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-readonly)}label.sc-pds-radio{color:var(--pine-color-text-label);font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing)}`;
10
10
 
11
- const pdsRadioCss = () => `.sc-pds-radio-h{--sizing-check-size:6px;--sizing-input-size:var(--pine-dimension-sm);--sizing-margin-block-start:6px;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;position:relative}.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}.has-border.sc-pds-radio-h{-ms-flex-align:start;align-items:flex-start;border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-column-gap:var(--pine-dimension-xs);-moz-column-gap:var(--pine-dimension-xs);column-gap:var(--pine-dimension-xs);display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;padding:var(--pine-dimension-md)}@media (max-width: 767px){.has-border.sc-pds-radio-h{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%;min-width:0}}.has-border.sc-pds-radio-h:hover{border:var(--pine-border-hover)}.has-border.sc-pds-radio-h:has(input:checked){-webkit-box-shadow:0 0 0 2px var(--pine-color-primary-hover);box-shadow:0 0 0 2px var(--pine-color-primary-hover)}.has-border.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text);font-weight:var(--pine-font-weight-semi-bold)}.has-border.sc-pds-radio-h label.sc-pds-radio::after{content:"";cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.has-border.sc-pds-radio-h:has(input:disabled){background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}.has-border.sc-pds-radio-h:has(input:disabled) label.sc-pds-radio{color:var(--pine-color-text-label-disabled);cursor:not-allowed}.has-border.sc-pds-radio-h:has(input:disabled) label.sc-pds-radio::after{cursor:not-allowed}.has-border.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}input.sc-pds-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-border-radius-full);-ms-flex:none;flex:none;height:var(--sizing-input-size);margin:0;-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025);position:relative;width:var(--sizing-input-size)}input.visually-hidden.sc-pds-radio{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}input.sc-pds-radio:hover{background:var(--pine-color-background-container-hover);border:var(--pine-border-hover)}input.sc-pds-radio:checked{background:var(--pine-color-accent);border-color:var(--pine-color-accent)}input.sc-pds-radio:checked:hover{background:var(--pine-color-accent-hover);border-color:var(--pine-color-accent-hover)}input.sc-pds-radio:checked::after{background:var(--pine-color-text-primary);border-radius:var(--pine-border-radius-full);content:"";display:block;height:var(--sizing-check-size);left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:var(--sizing-check-size)}input.sc-pds-radio:disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}input.sc-pds-radio:disabled:checked{background-color:var(--pine-color-accent-disabled);border-color:var(--pine-color-border-disabled)}input.sc-pds-radio:disabled:checked::after{border-color:var(--pine-color-border-disabled)}input.sc-pds-radio:focus-visible{outline:var(--pine-outline-focus)}label.sc-pds-radio{display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs)}label.sc-pds-radio:has(input:disabled){color:var(--pine-color-text-label-disabled);cursor:not-allowed}.sc-pds-radio-h:has(input:disabled) .pds-radio__message.sc-pds-radio{color:var(--pine-color-text-label-disabled)}.visually-hidden.sc-pds-radio{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-radio__message.sc-pds-radio{color:var(--pine-color-text-message);-ms-flex-preferred-size:100%;flex-basis:100%;font:var(--pine-typography-body);-webkit-margin-start:var(--pine-dimension-md);margin-inline-start:var(--pine-dimension-md);width:100%}.pds-radio__message--error.sc-pds-radio{display:-ms-flexbox;display:flex;gap:var(--pine-dimension-2xs)}.pds-radio__message--error.sc-pds-radio pds-icon.sc-pds-radio{-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.has-image.sc-pds-radio-h{-ms-flex-align:center;align-items:center;border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-column-gap:var(--pine-dimension-xs);-moz-column-gap:var(--pine-dimension-xs);column-gap:var(--pine-dimension-xs);display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;padding:var(--pine-dimension-md)}@media (max-width: 767px){.has-image.sc-pds-radio-h{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%;min-width:0}}.has-image.sc-pds-radio-h:hover{border:var(--pine-border-hover)}.has-image.sc-pds-radio-h:has(input:checked){-webkit-box-shadow:0 0 0 2px var(--pine-color-primary-hover);box-shadow:0 0 0 2px var(--pine-color-primary-hover)}.has-image.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text);display:-ms-flexbox;display:flex;font-weight:var(--pine-font-weight-semi-bold);gap:var(--pine-dimension-xs)}.has-image.sc-pds-radio-h label.sc-pds-radio::after{content:"";cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio{-ms-flex-align:center;align-items:center;align-self:center;border:var(--pine-border);border-radius:var(--pine-border-radius-full);cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex:none;flex:none;grid-area:image;-ms-flex-pack:center;justify-content:center;overflow:hidden;position:relative;-webkit-transition:all var(--pine-motion-duration-base) ease;transition:all var(--pine-motion-duration-base) ease}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio:hover{border-color:var(--pine-color-border-hover)}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio .pds-radio__image.sc-pds-radio{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.has-image.sc-pds-radio-h .pds-radio__message.sc-pds-radio{grid-area:message;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-start:0;margin-inline-start:0}.has-image.is-disabled.sc-pds-radio-h{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio{border-color:var(--pine-color-border-disabled);cursor:not-allowed;opacity:0.5}.has-image.is-disabled.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio:hover{border-color:var(--pine-color-border-disabled)}.has-image.is-disabled.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-disabled);cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h label.sc-pds-radio::after{cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h .pds-radio__message.sc-pds-radio{color:var(--pine-color-text-label-disabled)}.has-image.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}`;
11
+ const pdsRadioCss = () => `.sc-pds-radio-h{--sizing-check-size:6px;--sizing-input-size:var(--pine-dimension-sm);--sizing-margin-block-start:6px;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;position:relative}.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}.has-border.sc-pds-radio-h{-ms-flex-align:start;align-items:flex-start;border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-column-gap:var(--pine-dimension-xs);-moz-column-gap:var(--pine-dimension-xs);column-gap:var(--pine-dimension-xs);display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;padding:var(--pine-dimension-md)}@media (max-width: 767px){.has-border.sc-pds-radio-h{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%;min-width:0}}.has-border.sc-pds-radio-h:hover{border:var(--pine-border-hover)}.has-border.sc-pds-radio-h:has(input:checked){-webkit-box-shadow:0 0 0 2px var(--pine-color-primary-hover);box-shadow:0 0 0 2px var(--pine-color-primary-hover)}.has-border.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text);font-weight:var(--pine-font-weight-semi-bold)}.has-border.sc-pds-radio-h label.sc-pds-radio::after{content:"";cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.has-border.sc-pds-radio-h:has(input:disabled){background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}.has-border.sc-pds-radio-h:has(input:disabled) label.sc-pds-radio{color:var(--pine-color-text-label-disabled);cursor:not-allowed}.has-border.sc-pds-radio-h:has(input:disabled) label.sc-pds-radio::after{cursor:not-allowed}.has-border.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}input.sc-pds-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-border-radius-full);-ms-flex:none;flex:none;height:var(--sizing-input-size);margin:0;-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025);position:relative;width:var(--sizing-input-size)}input.visually-hidden.sc-pds-radio{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}input.sc-pds-radio:hover{background:var(--pine-color-background-container-hover);border:var(--pine-border-hover)}input.sc-pds-radio:checked{background:var(--pine-color-accent);border-color:var(--pine-color-accent)}input.sc-pds-radio:checked:hover{background:var(--pine-color-accent-hover);border-color:var(--pine-color-accent-hover)}input.sc-pds-radio:checked::after{background:var(--pine-color-text-primary);border-radius:var(--pine-border-radius-full);content:"";display:block;height:var(--sizing-check-size);left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:var(--sizing-check-size)}input.sc-pds-radio:disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}input.sc-pds-radio:disabled:checked{background-color:var(--pine-color-accent-disabled);border-color:var(--pine-color-border-disabled)}input.sc-pds-radio:disabled:checked::after{border-color:var(--pine-color-border-disabled)}input.sc-pds-radio:focus-visible{outline:var(--pine-outline-focus)}label.sc-pds-radio{display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs)}label.sc-pds-radio:has(input:disabled){color:var(--pine-color-text-label-disabled);cursor:not-allowed}.sc-pds-radio-h:has(input:disabled) .pds-radio__message.sc-pds-radio{color:var(--pine-color-text-label-disabled)}.visually-hidden.sc-pds-radio{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-radio__message.sc-pds-radio{color:var(--pine-color-text-message);-ms-flex-preferred-size:100%;flex-basis:100%;font:var(--pine-typography-body);-webkit-margin-start:var(--pine-dimension-md);margin-inline-start:var(--pine-dimension-md);width:100%}.pds-radio__message--error.sc-pds-radio{display:-ms-flexbox;display:flex;gap:var(--pine-dimension-2xs)}.pds-radio__message--error.sc-pds-radio pds-icon.sc-pds-radio{-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.has-image.sc-pds-radio-h{-ms-flex-align:center;align-items:center;border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-column-gap:var(--pine-dimension-xs);-moz-column-gap:var(--pine-dimension-xs);column-gap:var(--pine-dimension-xs);display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:row;flex-direction:row;padding:var(--pine-dimension-md)}@media (max-width: 767px){.has-image.sc-pds-radio-h{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%;min-width:0}}.has-image.sc-pds-radio-h:hover{border:var(--pine-border-hover)}.has-image.sc-pds-radio-h:has(input:checked){-webkit-box-shadow:0 0 0 2px var(--pine-color-primary-hover);box-shadow:0 0 0 2px var(--pine-color-primary-hover)}.has-image.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text);display:-ms-flexbox;display:flex;font-weight:var(--pine-font-weight-semi-bold);gap:var(--pine-dimension-xs)}.has-image.sc-pds-radio-h label.sc-pds-radio::after{content:"";cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio{-ms-flex-align:center;align-items:center;align-self:center;border:var(--pine-border);border-radius:var(--pine-border-radius-full);cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex:none;flex:none;grid-area:image;-ms-flex-pack:center;justify-content:center;overflow:hidden;position:relative;-webkit-transition:all var(--pine-motion-duration-base) ease;transition:all var(--pine-motion-duration-base) ease}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio:hover{border-color:var(--pine-color-border-hover)}.has-image.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio .pds-radio__image.sc-pds-radio{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.has-image.sc-pds-radio-h .pds-radio__content-wrapper.sc-pds-radio{-ms-flex:1;flex:1;min-width:0;overflow-wrap:anywhere}.has-image.sc-pds-radio-h .pds-radio__message.sc-pds-radio{grid-area:message;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-start:0;margin-inline-start:0}.has-image.is-disabled.sc-pds-radio-h{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio{border-color:var(--pine-color-border-disabled);cursor:not-allowed;opacity:0.5}.has-image.is-disabled.sc-pds-radio-h .pds-radio__image-container.sc-pds-radio:hover{border-color:var(--pine-color-border-disabled)}.has-image.is-disabled.sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-disabled);cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h label.sc-pds-radio::after{cursor:not-allowed}.has-image.is-disabled.sc-pds-radio-h .pds-radio__message.sc-pds-radio{color:var(--pine-color-text-label-disabled)}.has-image.is-invalid.sc-pds-radio-h .pds-radio__message--error.sc-pds-radio{color:var(--pine-color-text-message-danger)}`;
12
12
 
13
13
  const PdsRadio = class {
14
14
  constructor(hostRef) {
@@ -55,23 +55,23 @@ const PdsRow = class {
55
55
  }
56
56
  render() {
57
57
  const rowClasses = `
58
- ${this.alignItems !== undefined && this.alignItems.trim() !== '' ? `pds-align-items-${this.alignItems}` : ''}
58
+ ${this.alignItems != null && this.alignItems.trim() !== '' ? `pds-align-items-${this.alignItems}` : ''}
59
59
  ${this.border ? 'pds-row--border' : ''}
60
- ${this.justifyContent !== undefined && this.justifyContent.trim() !== '' ? `pds-justify-content-${this.justifyContent}` : ''}
60
+ ${this.justifyContent != null && this.justifyContent.trim() !== '' ? `pds-justify-content-${this.justifyContent}` : ''}
61
61
  ${this.noWrap ? 'pds-row--no-wrap' : ''}
62
62
  `;
63
63
  const rowInlineStyles = Object.assign(Object.assign(Object.assign(Object.assign({}, (this.colGap && {
64
- '--row-gap-x': this.colGap !== undefined && this.colGap.trim() !== '' ? this.colGapMap[this.colGap] : '',
65
- '--row-gap-y': this.colGap !== undefined && this.colGap.trim() !== '' ? this.colGapMap[this.colGap] : '',
64
+ '--row-gap-x': this.colGap != null && this.colGap.trim() !== '' ? this.colGapMap[this.colGap] : '',
65
+ '--row-gap-y': this.colGap != null && this.colGap.trim() !== '' ? this.colGapMap[this.colGap] : '',
66
66
  })), (this.colGapBlock && {
67
- '--row-gap-y': this.colGapBlock !== undefined && this.colGapBlock.trim() !== '' ? this.colGapMap[this.colGapBlock] : '',
67
+ '--row-gap-y': this.colGapBlock != null && this.colGapBlock.trim() !== '' ? this.colGapMap[this.colGapBlock] : '',
68
68
  })), (this.colGapInline && {
69
- '--row-gap-x': this.colGapInline !== undefined && this.colGapInline.trim() !== '' ? this.colGapMap[this.colGapInline] : '',
69
+ '--row-gap-x': this.colGapInline != null && this.colGapInline.trim() !== '' ? this.colGapMap[this.colGapInline] : '',
70
70
  })), (this.minHeight && {
71
71
  'min-height': this.minHeight,
72
72
  }));
73
73
  this.hostKeeper.record(`pds-row ${rowClasses}`, rowInlineStyles);
74
- return index.h(index.Host, { key: '78a505fef7132f9545916155d2485a6d2df8f4a5', class: `pds-row ${rowClasses}`, style: rowInlineStyles });
74
+ return index.h(index.Host, { key: '452882c1105868f5d392e7cb165311b1abc4a243', class: `pds-row ${rowClasses}`, style: rowInlineStyles });
75
75
  }
76
76
  get el() { return index.getElement(this); }
77
77
  };
@@ -100,6 +100,18 @@ const PdsSwitch = class {
100
100
  this.checked = state === (this.value || 'on');
101
101
  }
102
102
  }
103
+ /**
104
+ * Form Associated Custom Elements API: Called when the form is disabled
105
+ */
106
+ formDisabledCallback(disabled) {
107
+ // Also fires when this element's own `disabled` attribute is merely present, even as the
108
+ // literal string "false" (a consumer's or React's attribute serialization can write that) —
109
+ // the platform treats any value as disabled, independent of fieldset state. A real disabled
110
+ // fieldset ancestor confirms this is genuinely that, not this element's own attribute.
111
+ if (disabled && !this.el.closest('fieldset[disabled]'))
112
+ return;
113
+ this.disabled = disabled;
114
+ }
103
115
  componentWillLoad() {
104
116
  this.inheritedAttributes = Object.assign({}, attributes.inheritAriaAttributes(this.el));
105
117
  this.updateHasLabelSlot();
@@ -108,9 +120,9 @@ const PdsSwitch = class {
108
120
  const hostClass = this.switchClassNames();
109
121
  const ariaDisabled = this.disabled ? 'true' : null;
110
122
  this.hostKeeper.record(hostClass, {}, { 'aria-disabled': ariaDisabled });
111
- return (index.h(index.Host, { key: 'ee8576e523348ff9eed1b6087626849bb0966608', class: hostClass, "aria-disabled": ariaDisabled }, index.h("label", { key: '09433b5356d718be65f4f2eb61f35fff1d000e10', htmlFor: this.componentId }, index.h("input", Object.assign({ key: 'f996a0fad56119674cfb7d95e1444bf411b64396', "aria-describedby": form.assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), index.h("span", { key: '4b23305d3cc0f5b37b23c6b79a14cfba57c16816', class: this.hideLabel ? 'visually-hidden' : '' }, index.h("slot", { key: '258b5ccf0d4b01518df3a37772d694cb37569ffa', name: "label", onSlotchange: this.updateHasLabelSlot }), !this.hasLabelSlot && this.label)), this.helperMessage &&
112
- index.h("div", { key: 'c8196fa2ce832de3a8c6d987a78fd65d791c4c59', class: `pds-switch__message`, id: form.messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
113
- index.h("div", { key: '948894dd2e642689af6cad545a0b31f7c4711d87', class: `pds-switch__message pds-switch__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: 'd4b72b49bfd38a396b8f7c0686e1b2ef92d65491', icon: index$1.danger, size: "small" }), this.errorMessage)));
123
+ return (index.h(index.Host, { key: 'b8bd2870be101081aa8a65cdee45397bc4c21435', class: hostClass, "aria-disabled": ariaDisabled }, index.h("label", { key: '1e223f22f7fc6c576098353ad67dc11500def8b4', htmlFor: this.componentId }, index.h("input", Object.assign({ key: 'edf59869e165a65b97465ea9de06f7ea82fbc9a6', "aria-describedby": form.assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), index.h("span", { key: '1c252b9455471069f8c6ea6c13f2e88c99308b41', class: this.hideLabel ? 'visually-hidden' : '' }, index.h("slot", { key: 'ce0d471918bd3018f5e55d0d1e6c5c2247790f81', name: "label", onSlotchange: this.updateHasLabelSlot }), !this.hasLabelSlot && this.label)), this.helperMessage &&
124
+ index.h("div", { key: '64874b15403f1f42344715ac34febdfb8d94042a', class: `pds-switch__message`, id: form.messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
125
+ index.h("div", { key: '560ea486859124bb0ac2f75ab4bd34b0bca7efbc', class: `pds-switch__message pds-switch__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: 'f49caaba976579eb5588e442499595c7dba7ceff', icon: index$1.danger, size: "small" }), this.errorMessage)));
114
126
  }
115
127
  static get formAssociated() { return true; }
116
128
  get el() { return index.getElement(this); }
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var scroll = require('./scroll-2XcoE_6Q.js');
5
- var truncationTooltip = require('./truncation-tooltip-CYgQfBLt.js');
5
+ var truncationTooltip = require('./truncation-tooltip-DO9xli2e.js');
6
6
  require('./keep-hydrated-CiXgkEYd.js');
7
7
  require('./floating-ui.dom-Dc8Anyel.js');
8
8
 
@@ -14,6 +14,7 @@ const PdsTableCell = class {
14
14
  this.scrollContainer = null;
15
15
  this.setupRetries = 0;
16
16
  this.truncationCleanup = null;
17
+ this.hasLoaded = false;
17
18
  /**
18
19
  * Determines if the table is currently scrolling.
19
20
  * @defaultValue false
@@ -39,8 +40,23 @@ const PdsTableCell = class {
39
40
  componentWillRender() {
40
41
  this.tableRef = this.hostElement.closest('pds-table');
41
42
  }
43
+ // Fires again each time the cell is moved (a sort re-appends every row), unlike componentDidLoad,
44
+ // so it re-binds what disconnectedCallback tore down. The tooltip binds to the host, which exists before load.
45
+ connectedCallback() {
46
+ if (!this.hasLoaded)
47
+ return;
48
+ this.tableRef = this.hostElement.closest('pds-table');
49
+ this.cleanupScrollListener();
50
+ if (this.needsScrollShadow) {
51
+ this.setupScrollListener();
52
+ }
53
+ if (this.truncate) {
54
+ this.initTruncationTooltip();
55
+ }
56
+ }
42
57
  componentDidLoad() {
43
- if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {
58
+ this.hasLoaded = true;
59
+ if (this.needsScrollShadow) {
44
60
  // For responsive tables with fixed columns, set up scroll detection
45
61
  // This enables the first column to show a shadow when the table is scrolled horizontally
46
62
  this.setupScrollListener();
@@ -53,6 +69,10 @@ const PdsTableCell = class {
53
69
  this.cleanupScrollListener();
54
70
  this.destroyTruncationTooltip();
55
71
  }
72
+ get needsScrollShadow() {
73
+ var _a;
74
+ return Boolean(((_a = this.tableRef) === null || _a === void 0 ? void 0 : _a.responsive) && this.tableRef.fixedColumn);
75
+ }
56
76
  setupScrollListener() {
57
77
  var _a;
58
78
  if (!this.tableRef)
@@ -131,11 +151,11 @@ const PdsTableCell = class {
131
151
  return classNames.join(' ');
132
152
  }
133
153
  render() {
134
- return (index.h(index.Host, { key: 'bedaeeb5723299656f872a760ed1dd80c7fe8793', class: this.classNames(), role: "gridcell", part: "cell", style: this.tableRef &&
154
+ return (index.h(index.Host, { key: 'de70a1002cc46e204f87349069b86ca43aa2129a', class: this.classNames(), role: "gridcell", part: "cell", style: this.tableRef &&
135
155
  this.tableRef.fixedColumn &&
136
156
  this.tableRef.selectable
137
157
  ? { '--fixed-cell-position': '40px' }
138
- : {} }, index.h("slot", { key: '45182ee3e004097660432f552780b3d27671bd46' })));
158
+ : {} }, index.h("slot", { key: '5e2b3308291e480323d7a1ac0575035758fb3695' })));
139
159
  }
140
160
  get hostElement() { return index.getElement(this); }
141
161
  static get watchers() { return {
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var utils = require('./utils-BhRmyxT8.js');
5
- var truncationTooltip = require('./truncation-tooltip-CYgQfBLt.js');
5
+ var truncationTooltip = require('./truncation-tooltip-DO9xli2e.js');
6
6
  var index$1 = require('./index.cjs.js');
7
7
  require('./keep-hydrated-CiXgkEYd.js');
8
8
  require('./floating-ui.dom-Dc8Anyel.js');
@@ -28,9 +28,10 @@ const PdsText = class {
28
28
  }
29
29
  validateSize(newValue) {
30
30
  // Skip when the prop is omitted or explicitly cleared (an empty string is a
31
- // common "unset" sentinel). Any other unsupported value — including a
31
+ // common "unset" sentinel), or its attribute was removed (Stencil sets the
32
+ // prop to `null`). Any other unsupported value — including a
32
33
  // whitespace-only string — is a developer mistake worth warning about.
33
- if (newValue === undefined || newValue === '') {
34
+ if (newValue == null || newValue === '') {
34
35
  return;
35
36
  }
36
37
  if (!index$1.TEXT_SIZES.includes(newValue)) {
@@ -43,6 +44,13 @@ const PdsText = class {
43
44
  // any attempt to apply an unknown size class. @Watch covers later changes.
44
45
  this.validateSize(this.size);
45
46
  }
47
+ // componentDidLoad runs once, so a moved element re-binds here what disconnectedCallback tore
48
+ // down. Before the first render there's no contentEl yet, and componentDidLoad binds it.
49
+ connectedCallback() {
50
+ if (this.truncate && this.contentEl) {
51
+ this.initTruncationTooltip();
52
+ }
53
+ }
46
54
  componentDidLoad() {
47
55
  if (this.truncate) {
48
56
  this.initTruncationTooltip();
@@ -72,23 +80,23 @@ const PdsText = class {
72
80
  const Tag = this.tag;
73
81
  const typeClasses = `
74
82
  pds-text
75
- ${this.align !== undefined && this.align.trim() !== ''
83
+ ${this.align != null && this.align.trim() !== ''
76
84
  ? `pds-text--align-${this.align}`
77
85
  : ''}
78
- ${this.gutter !== undefined && this.gutter.trim() !== ''
86
+ ${this.gutter != null && this.gutter.trim() !== ''
79
87
  ? `pds-text--gutter-${this.gutter}`
80
88
  : ''}
81
- ${this.size !== undefined && this.size.trim() !== ''
89
+ ${this.size != null && this.size.trim() !== ''
82
90
  ? `pds-text--size-${this.size}`
83
91
  : ''}
84
- ${this.weight !== undefined && this.weight.trim() !== ''
92
+ ${this.weight != null && this.weight.trim() !== ''
85
93
  ? `pds-text--weight-${this.weight}`
86
94
  : ''}
87
- ${this.decoration !== undefined && this.decoration.trim() !== ''
95
+ ${this.decoration != null && this.decoration.trim() !== ''
88
96
  ? `pds-text--decoration-${this.decoration}`
89
97
  : ''}
90
98
  `;
91
- return (index.h(Tag, { key: '6ae89af63963745cd4e8fa734a62f37bc27c59ac', ref: (el) => (this.contentEl = el), style: this.color && utils.setColor(this.color), class: typeClasses, part: "content" }, index.h("slot", { key: '008f5852aeb4b43cff1a2fea9be9d8fbba9f7934' })));
99
+ return (index.h(Tag, { key: '6460288f1d395080a39aec214e55cab87fdaec9f', ref: (el) => (this.contentEl = el), style: this.color && utils.setColor(this.color), class: typeClasses, part: "content" }, index.h("slot", { key: 'a8be0d96f72d8ee44288d7c8615155dc68d92663' })));
92
100
  }
93
101
  get el() { return index.getElement(this); }
94
102
  static get watchers() { return {
@@ -72,7 +72,7 @@ function isOverflowing(el) {
72
72
  * @returns A cleanup function that removes all listeners, observers, and DOM elements.
73
73
  */
74
74
  function setupTruncationTooltip(options) {
75
- const { hostEl, contentEl, getTooltipText, placement = 'top', manageTabIndex = true } = options;
75
+ const { hostEl, contentEl, getTooltipText, placement = 'top', reference = hostEl, manageTabIndex = true, focusEl = hostEl } = options;
76
76
  injectStyles();
77
77
  let portalEl = null;
78
78
  let isHovering = false;
@@ -167,7 +167,7 @@ function setupTruncationTooltip(options) {
167
167
  if (!portalEl)
168
168
  return;
169
169
  try {
170
- const { x, y } = await floatingUi_dom.computePosition(hostEl, portalEl, {
170
+ const { x, y } = await floatingUi_dom.computePosition(reference, portalEl, {
171
171
  placement,
172
172
  strategy: 'fixed',
173
173
  middleware: [floatingUi_dom.offset(4), floatingUi_dom.flip(), floatingUi_dom.shift({ padding: 5 })],
@@ -180,7 +180,7 @@ function setupTruncationTooltip(options) {
180
180
  catch (_a) {
181
181
  // Fallback: position above the element with bounds checking
182
182
  if (portalEl) {
183
- const rect = hostEl.getBoundingClientRect();
183
+ const rect = reference.getBoundingClientRect();
184
184
  const portalRect = portalEl.getBoundingClientRect();
185
185
  const padding = 5;
186
186
  // Ensure tooltip stays within viewport bounds
@@ -266,8 +266,8 @@ function setupTruncationTooltip(options) {
266
266
  }
267
267
  hostEl.addEventListener('mouseenter', handleMouseEnter);
268
268
  hostEl.addEventListener('mouseleave', handleMouseLeave);
269
- hostEl.addEventListener('focusin', handleFocusIn);
270
- hostEl.addEventListener('focusout', handleFocusOut);
269
+ focusEl.addEventListener('focusin', handleFocusIn);
270
+ focusEl.addEventListener('focusout', handleFocusOut);
271
271
  // Return cleanup function
272
272
  return () => {
273
273
  disposed = true;
@@ -287,8 +287,8 @@ function setupTruncationTooltip(options) {
287
287
  }
288
288
  hostEl.removeEventListener('mouseenter', handleMouseEnter);
289
289
  hostEl.removeEventListener('mouseleave', handleMouseLeave);
290
- hostEl.removeEventListener('focusin', handleFocusIn);
291
- hostEl.removeEventListener('focusout', handleFocusOut);
290
+ focusEl.removeEventListener('focusin', handleFocusIn);
291
+ focusEl.removeEventListener('focusout', handleFocusOut);
292
292
  removePortal();
293
293
  };
294
294
  }