@pine-ds/core 4.7.0 → 4.7.2

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