@porsche-design-system/components-react 3.13.0-rc.2 → 3.13.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.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
14
14
 
15
15
  ### [Unreleased]
16
16
 
17
+ ### [3.13.1] - 2024-03-20
18
+
19
+ #### Fixed
20
+
21
+ - `Modal`: Unexpected scrolling behavior on iOS >= 17.4
22
+ ([#3128](https://github.com/porsche-design-system/porsche-design-system/pull/3128))
23
+ - `Select`, `Multi-Select`: Cropping issues of select dropdown when used inside `Table` component
24
+ ([#3114](https://github.com/porsche-design-system/porsche-design-system/pull/3114))
25
+ - `Flyout`, `Flyout Navigation`: iOS Safari URL bar overlaying
26
+ ([#3131](https://github.com/porsche-design-system/porsche-design-system/pull/3131))
27
+
28
+ ### [3.13.0] - 2024-03-11
29
+
17
30
  ### [3.13.0-rc.2] - 2024-03-11
18
31
 
19
32
  #### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@porsche-design-system/components-react",
3
- "version": "3.13.0-rc.2",
3
+ "version": "3.13.1",
4
4
  "description": "Porsche Design System is a component library designed to help developers create the best experience for software or services distributed by Dr. Ing. h.c. F. Porsche AG.",
5
5
  "keywords": [
6
6
  "porsche",
@@ -17,7 +17,7 @@
17
17
  "license": "SEE LICENSE IN LICENSE",
18
18
  "homepage": "https://designsystem.porsche.com",
19
19
  "dependencies": {
20
- "@porsche-design-system/components-js": "3.13.0-rc.2"
20
+ "@porsche-design-system/components-js": "3.13.1"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "react": ">=17.0.0 <19.0.0",
@@ -4308,22 +4308,19 @@ const getFontSizeText = (size) => {
4308
4308
  return fontSizeTextMap[size];
4309
4309
  };
4310
4310
 
4311
- // TODO: why not using getHiddenTextJssStyle()?
4312
4311
  // Needed for slotted anchor and hidden label, which then enlarges the hidden label to equal host size and indents the text to be visually hidden.
4313
4312
  const getVisibilityJssStyle = (hideLabel) => {
4314
4313
  return hideLabel
4315
4314
  ? {
4316
- position: 'absolute',
4317
- inset: 0,
4318
4315
  whiteSpace: 'nowrap',
4319
- textIndent: '-999999px', // TODO: check if text-indent still works for RTL-mode in this case
4316
+ textIndent: '-999999px', // Needed because standard sr-only classes don't work here due that we need a bounding box for the focus style
4317
+ overflow: 'hidden',
4320
4318
  }
4321
4319
  : {
4322
- position: 'relative',
4323
- inset: 'auto',
4324
4320
  whiteSpace: 'inherit',
4325
4321
  textIndent: 0,
4326
4322
  zIndex: 1, // fix Firefox bug on :hover (#2583)
4323
+ overflow: 'visible',
4327
4324
  };
4328
4325
  };
4329
4326
  const offsetVertical = '-2px';
@@ -4350,7 +4347,6 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4350
4347
  },
4351
4348
  root: {
4352
4349
  display: 'flex',
4353
- gap: spacingStaticXSmall,
4354
4350
  width: '100%',
4355
4351
  padding: 0,
4356
4352
  margin: 0, // Removes default button margin on safari 15
@@ -4359,7 +4355,9 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4359
4355
  color: isDisabledOrLoading ? disabledColorDark : primaryColorDark,
4360
4356
  }),
4361
4357
  ...textSmallStyle,
4362
- ...mergeDeep(buildResponsiveStyles(stretch, (stretchValue) => ({
4358
+ ...mergeDeep(buildResponsiveStyles(hideLabel, (hidelabelValue) => ({
4359
+ gap: hidelabelValue ? 0 : spacingStaticXSmall,
4360
+ })), buildResponsiveStyles(stretch, (stretchValue) => ({
4363
4361
  justifyContent: stretchValue ? 'space-between' : 'flex-start',
4364
4362
  alignItems: stretchValue ? 'center' : 'flex-start',
4365
4363
  })), buildResponsiveStyles(size, (sizeValue) => ({
@@ -4396,28 +4394,30 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4396
4394
  })),
4397
4395
  ...(!hasSlottedAnchor && getFocusJssStyle(theme, { pseudo: true, offset: '-2px' })),
4398
4396
  },
4399
- label: {
4400
- transition: getTransition('opacity'),
4401
- position: 'relative', // needed for hover state when icon="none" is set
4402
- },
4403
- ...(hasIcon && {
4404
- icon: {
4405
- position: 'relative',
4406
- flexShrink: '0',
4407
- width: fontLineHeight,
4408
- height: fontLineHeight,
4409
- // workaround for Safari to optimize vertical alignment of icons
4410
- // TODO: check if this is still needed after optimized icons are included
4411
- '@supports (width: round(down, 1px, 1px))': {
4412
- width: `round(down, ${fontLineHeight}, 1px)`,
4413
- height: `round(down, ${fontLineHeight}, 1px)`,
4397
+ ...(hasIcon
4398
+ ? {
4399
+ icon: {
4400
+ position: 'relative',
4401
+ flexShrink: '0',
4402
+ width: fontLineHeight,
4403
+ height: fontLineHeight,
4404
+ // workaround for Safari to optimize vertical alignment of icons
4405
+ // TODO: check if this is still needed after optimized icons are included
4406
+ '@supports (width: round(down, 1px, 1px))': {
4407
+ width: `round(down, ${fontLineHeight}, 1px)`,
4408
+ height: `round(down, ${fontLineHeight}, 1px)`,
4409
+ },
4414
4410
  },
4415
- },
4416
- label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
4417
- // TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
4418
- order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
4419
- }))),
4420
- }),
4411
+ label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
4412
+ // TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
4413
+ order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
4414
+ }))),
4415
+ }
4416
+ : {
4417
+ label: {
4418
+ position: 'relative', // needed for hover state when icon="none" is set
4419
+ },
4420
+ }),
4421
4421
  };
4422
4422
  };
4423
4423
 
@@ -5651,8 +5651,8 @@ const getComponentCss$S = (inline, wrap, direction, justifyContent, alignItems,
5651
5651
  const getFlyoutDialogResetJssStyle = () => {
5652
5652
  return {
5653
5653
  position: 'fixed',
5654
- height: '100vh',
5655
- maxHeight: '100vh',
5654
+ height: '100dvh',
5655
+ maxHeight: '100dvh',
5656
5656
  margin: '0',
5657
5657
  padding: '0',
5658
5658
  border: '0',
@@ -7184,6 +7184,22 @@ const getPlaceholderJssStyle = (styles) => ({
7184
7184
  '&:-moz-placeholder': styles /* Firefox 18- */,
7185
7185
  });
7186
7186
 
7187
+ // Used for elements that must overflow `overflow:hidden` containers, are positioned absolute and wrapped within a native `popover` element.
7188
+ const getPopoverResetJssStyle = () => {
7189
+ return {
7190
+ position: 'absolute',
7191
+ border: 'none',
7192
+ background: 'none',
7193
+ pointerEvents: 'all',
7194
+ padding: 0,
7195
+ margin: 0,
7196
+ overflow: 'initial',
7197
+ '&:-internal-popover-in-top-layer::backdrop': {
7198
+ display: 'none',
7199
+ },
7200
+ };
7201
+ };
7202
+
7187
7203
  const getSlottedTextFieldTextareaSelectStyles = (child, state, isLoading, theme, additionalDefaultJssStyle) => {
7188
7204
  const { primaryColor, contrastLowColor, contrastMediumColor, disabledColor } = getThemedColors(theme);
7189
7205
  const { primaryColor: primaryColorDark, contrastLowColor: contrastLowColorDark, contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark, } = getThemedColors('dark');
@@ -7295,7 +7311,7 @@ const getUnitCounterJssStyle = (isDisabled, theme) => {
7295
7311
 
7296
7312
  const INTERNAL_MULTI_SELECT_SLOT = 'internal-select';
7297
7313
 
7298
- const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
7314
+ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
7299
7315
  const { contrastHighColor } = getThemedColors(theme);
7300
7316
  const { contrastHighColor: contrastHighColorDark } = getThemedColors('dark');
7301
7317
  return getCss({
@@ -7366,6 +7382,11 @@ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWi
7366
7382
  ...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
7367
7383
  // .message
7368
7384
  ...getFunctionalComponentStateMessageStyles(theme, state),
7385
+ ...(isNativePopoverCase && {
7386
+ popover: {
7387
+ ...getPopoverResetJssStyle(),
7388
+ },
7389
+ }),
7369
7390
  });
7370
7391
  };
7371
7392
  // TODO: use getSlottedTextFieldTextareaSelectStyles() instead an manipulate selectors like done with PIN Code or even better make it configurable as parameter
@@ -7812,7 +7833,7 @@ const getDirectionArrowMap = (theme) => {
7812
7833
  },
7813
7834
  };
7814
7835
  };
7815
- const getComponentCss$w = (direction, isNative, theme) => {
7836
+ const getComponentCss$w = (direction, isNativePopoverCase, theme) => {
7816
7837
  const { hoverColor, backgroundColor, primaryColor, backgroundSurfaceColor } = getThemedColors(theme);
7817
7838
  const { hoverColor: hoverColorDark, primaryColor: primaryColorDark, backgroundSurfaceColor: backgroundSurfaceColorDark, } = getThemedColors('dark');
7818
7839
  const shadowColor = 'rgba(0,0,0,0.3)';
@@ -7862,13 +7883,9 @@ const getComponentCss$w = (direction, isNative, theme) => {
7862
7883
  transform: 'translate3d(0,0,0)', // Fixes movement on hover in Safari
7863
7884
  },
7864
7885
  spacer: {
7865
- ...(isNative
7886
+ ...(isNativePopoverCase
7866
7887
  ? {
7867
- overflow: 'initial',
7868
- backgroundColor: 'transparent',
7869
- border: 'none',
7870
- margin: 0,
7871
- padding: 0,
7888
+ ...getPopoverResetJssStyle(),
7872
7889
  }
7873
7890
  : {
7874
7891
  inset: `${-safeZonePx}px`,
@@ -8560,7 +8577,7 @@ const getListStyles$1 = (direction, theme) => {
8560
8577
  },
8561
8578
  };
8562
8579
  };
8563
- const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopover, theme) => {
8580
+ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopoverCase, theme) => {
8564
8581
  return getCss(
8565
8582
  // merge because of global styles
8566
8583
  mergeDeep({
@@ -8573,21 +8590,9 @@ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativeP
8573
8590
  'sr-text': {
8574
8591
  display: 'none',
8575
8592
  },
8576
- ...(isNativePopover && {
8593
+ ...(isNativePopoverCase && {
8577
8594
  popover: {
8578
- position: 'absolute',
8579
- bottom: 'auto',
8580
- border: 'none',
8581
- background: 'none',
8582
- pointerEvents: 'all',
8583
- padding: 0,
8584
- margin: 0,
8585
- overflow: 'initial',
8586
- height: 'auto',
8587
- maxHeight: `${8.5 * (OPTION_HEIGHT + 8) + 6 + 2}px`, // 8px = gap, 6px = padding, 2px = border
8588
- '&:-internal-popover-in-top-layer::backdrop': {
8589
- display: 'none',
8590
- },
8595
+ ...getPopoverResetJssStyle(),
8591
8596
  },
8592
8597
  }),
8593
8598
  }, filter
@@ -8739,7 +8744,7 @@ const getOptionStyles = (theme) => {
8739
8744
 
8740
8745
  const INTERNAL_SELECT_SLOT = 'internal-select';
8741
8746
 
8742
- const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
8747
+ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
8743
8748
  return getCss({
8744
8749
  '@global': {
8745
8750
  ':host': addImportantToEachRule({
@@ -8787,6 +8792,11 @@ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWi
8787
8792
  ...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
8788
8793
  // .message
8789
8794
  ...getFunctionalComponentStateMessageStyles(theme, state),
8795
+ ...(isNativePopoverCase && {
8796
+ popover: {
8797
+ ...getPopoverResetJssStyle(),
8798
+ },
8799
+ }),
8790
8800
  });
8791
8801
  };
8792
8802
  // TODO: Rename to JSSStyles
@@ -92,6 +92,9 @@ class DSRMultiSelect extends react.Component {
92
92
  form;
93
93
  isWithinForm;
94
94
  preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
95
+ isNativePopoverCase = false;
96
+ parentTableElement;
97
+ popoverElement;
95
98
  get currentValue() {
96
99
  return utilsEntry.getSelectedOptionValues(this.props.multiSelectOptions);
97
100
  }
@@ -100,8 +103,14 @@ class DSRMultiSelect extends react.Component {
100
103
  const optionsSelectedId = 'options-selected';
101
104
  const dropdownId = 'list';
102
105
  const inputId = 'filter';
103
- const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getMultiSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
104
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxRuntime.jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [utilsEntry.getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsxRuntime.jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxRuntime.jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: "---" }), jsxRuntime.jsx("span", { className: "sr-only", children: "No results found" })] })), jsxRuntime.jsx("slot", {})] })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
106
+ const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getMultiSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
107
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxRuntime.jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [utilsEntry.getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsxRuntime.jsx("div", { ...(this.props.isNativePopoverCase && {
108
+ popover: 'auto',
109
+ className: 'popover',
110
+ ...(this.props.popoverElement?.matches(':popover-open') && {
111
+ 'popover-open': true,
112
+ }),
113
+ }), children: jsxRuntime.jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxRuntime.jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: "---" }), jsxRuntime.jsx("span", { className: "sr-only", children: "No results found" })] })), jsxRuntime.jsx("slot", {})] }) })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
105
114
  }
106
115
  }
107
116
 
@@ -82,13 +82,13 @@ class DSRPopover extends react.Component {
82
82
  spacer;
83
83
  popover;
84
84
  button;
85
- isNative = false;
85
+ isNativePopoverCase = false;
86
86
  parentTableElement;
87
87
  render() {
88
88
  splitChildren.splitChildren(this.props.children);
89
- const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getPopoverCss(this.props.direction, this.props.isNative, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
90
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", ...(this.props.isNative ? { popoverTarget: 'spacer' } : { ...(!this.props.isNative && { 'aria-expanded': this.props.open }),
91
- }), children: [jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsxRuntime.jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNative) && (jsxRuntime.jsx("div", { className: "spacer", ...(this.props.isNative && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsxRuntime.jsx("div", { className: "popover", children: this.props.description ? jsxRuntime.jsx("p", { children: this.props.description }) : jsxRuntime.jsx("slot", {}) }) }))] })] }), this.props.children] }));
89
+ const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getPopoverCss(this.props.direction, this.props.isNativePopoverCase, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
90
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", ...(this.props.isNativePopoverCase ? { popoverTarget: 'spacer' } : { ...(!this.props.isNativePopoverCase && { 'aria-expanded': this.props.open }),
91
+ }), children: [jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsxRuntime.jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNativePopoverCase) && (jsxRuntime.jsx("div", { className: "spacer", ...(this.props.isNativePopoverCase && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsxRuntime.jsx("div", { className: "popover", children: this.props.description ? jsxRuntime.jsx("p", { children: this.props.description }) : jsxRuntime.jsx("slot", {}) }) }))] })] }), this.props.children] }));
92
92
  }
93
93
  }
94
94
 
@@ -83,7 +83,7 @@ class DSRSelectWrapperDropdown extends react.Component {
83
83
  searchString = '';
84
84
  inputElement;
85
85
  listElement;
86
- isNativePopover = false;
86
+ isNativePopoverCase = false;
87
87
  parentTableElement;
88
88
  popoverElement;
89
89
  get selectedIndex() {
@@ -96,7 +96,7 @@ class DSRSelectWrapperDropdown extends react.Component {
96
96
  const buttonId = 'value';
97
97
  const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectWrapperDropdownCss(this.props.direction === 'auto'
98
98
  ? 'down'
99
- : this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopover, this.props.theme)));
99
+ : this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopoverCase, this.props.theme)));
100
100
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx(jsxRuntime.Fragment, { children: this.props.filter ? ([
101
101
  jsxRuntime.jsx("input", { type: "text", role: "combobox", disabled: this.props.disabled, placeholder: utilsEntry.getSelectedOptionMap(this.optionMaps)?.value || null, autoComplete: "off", defaultValue: this.searchString }, "input"),
102
102
  jsxRuntime.jsx("span", {
@@ -93,6 +93,9 @@ class DSRSelect extends react.Component {
93
93
  preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
94
94
  searchString = '';
95
95
  searchTimeout = null;
96
+ isNativePopoverCase = false;
97
+ parentTableElement;
98
+ popoverElement;
96
99
  render() {
97
100
  const { children, namedSlotChildren, otherChildren } = splitChildren.splitChildren(this.props.children);
98
101
  const buttonId = 'value';
@@ -102,8 +105,14 @@ class DSRSelect extends react.Component {
102
105
  const ariaDescribedBy = descriptionId && selectMessageId
103
106
  ? `${descriptionId} ${selectMessageId}`
104
107
  : descriptionId || selectMessageId || undefined;
105
- const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
106
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("button", { type: "button", role: "combobox", id: buttonId, ...utilsEntry.getComboboxAriaAttributes(this.props.isOpen, this.props.required, label.labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: utilsEntry.getSelectedOptionString(otherChildren) }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsxRuntime.jsx("div", { id: dropdownId, className: "listbox", ...utilsEntry.getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsxRuntime.jsx("slot", {}) })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
108
+ const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
109
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("button", { type: "button", role: "combobox", id: buttonId, ...utilsEntry.getComboboxAriaAttributes(this.props.isOpen, this.props.required, label.labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: utilsEntry.getSelectedOptionString(otherChildren) }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsxRuntime.jsx("div", { ...(this.props.isNativePopoverCase && {
110
+ popover: 'auto',
111
+ className: 'popover',
112
+ ...(this.props.popoverElement?.matches(':popover-open') && {
113
+ 'popover-open': true,
114
+ }),
115
+ }), children: jsxRuntime.jsx("div", { id: dropdownId, className: "listbox", ...utilsEntry.getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsxRuntime.jsx("slot", {}) }) })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
107
116
  }
108
117
  }
109
118
 
@@ -4306,22 +4306,19 @@ const getFontSizeText = (size) => {
4306
4306
  return fontSizeTextMap[size];
4307
4307
  };
4308
4308
 
4309
- // TODO: why not using getHiddenTextJssStyle()?
4310
4309
  // Needed for slotted anchor and hidden label, which then enlarges the hidden label to equal host size and indents the text to be visually hidden.
4311
4310
  const getVisibilityJssStyle = (hideLabel) => {
4312
4311
  return hideLabel
4313
4312
  ? {
4314
- position: 'absolute',
4315
- inset: 0,
4316
4313
  whiteSpace: 'nowrap',
4317
- textIndent: '-999999px', // TODO: check if text-indent still works for RTL-mode in this case
4314
+ textIndent: '-999999px', // Needed because standard sr-only classes don't work here due that we need a bounding box for the focus style
4315
+ overflow: 'hidden',
4318
4316
  }
4319
4317
  : {
4320
- position: 'relative',
4321
- inset: 'auto',
4322
4318
  whiteSpace: 'inherit',
4323
4319
  textIndent: 0,
4324
4320
  zIndex: 1, // fix Firefox bug on :hover (#2583)
4321
+ overflow: 'visible',
4325
4322
  };
4326
4323
  };
4327
4324
  const offsetVertical = '-2px';
@@ -4348,7 +4345,6 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4348
4345
  },
4349
4346
  root: {
4350
4347
  display: 'flex',
4351
- gap: spacingStaticXSmall,
4352
4348
  width: '100%',
4353
4349
  padding: 0,
4354
4350
  margin: 0, // Removes default button margin on safari 15
@@ -4357,7 +4353,9 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4357
4353
  color: isDisabledOrLoading ? disabledColorDark : primaryColorDark,
4358
4354
  }),
4359
4355
  ...textSmallStyle,
4360
- ...mergeDeep(buildResponsiveStyles(stretch, (stretchValue) => ({
4356
+ ...mergeDeep(buildResponsiveStyles(hideLabel, (hidelabelValue) => ({
4357
+ gap: hidelabelValue ? 0 : spacingStaticXSmall,
4358
+ })), buildResponsiveStyles(stretch, (stretchValue) => ({
4361
4359
  justifyContent: stretchValue ? 'space-between' : 'flex-start',
4362
4360
  alignItems: stretchValue ? 'center' : 'flex-start',
4363
4361
  })), buildResponsiveStyles(size, (sizeValue) => ({
@@ -4394,28 +4392,30 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
4394
4392
  })),
4395
4393
  ...(!hasSlottedAnchor && getFocusJssStyle(theme, { pseudo: true, offset: '-2px' })),
4396
4394
  },
4397
- label: {
4398
- transition: getTransition('opacity'),
4399
- position: 'relative', // needed for hover state when icon="none" is set
4400
- },
4401
- ...(hasIcon && {
4402
- icon: {
4403
- position: 'relative',
4404
- flexShrink: '0',
4405
- width: fontLineHeight,
4406
- height: fontLineHeight,
4407
- // workaround for Safari to optimize vertical alignment of icons
4408
- // TODO: check if this is still needed after optimized icons are included
4409
- '@supports (width: round(down, 1px, 1px))': {
4410
- width: `round(down, ${fontLineHeight}, 1px)`,
4411
- height: `round(down, ${fontLineHeight}, 1px)`,
4395
+ ...(hasIcon
4396
+ ? {
4397
+ icon: {
4398
+ position: 'relative',
4399
+ flexShrink: '0',
4400
+ width: fontLineHeight,
4401
+ height: fontLineHeight,
4402
+ // workaround for Safari to optimize vertical alignment of icons
4403
+ // TODO: check if this is still needed after optimized icons are included
4404
+ '@supports (width: round(down, 1px, 1px))': {
4405
+ width: `round(down, ${fontLineHeight}, 1px)`,
4406
+ height: `round(down, ${fontLineHeight}, 1px)`,
4407
+ },
4412
4408
  },
4413
- },
4414
- label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
4415
- // TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
4416
- order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
4417
- }))),
4418
- }),
4409
+ label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
4410
+ // TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
4411
+ order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
4412
+ }))),
4413
+ }
4414
+ : {
4415
+ label: {
4416
+ position: 'relative', // needed for hover state when icon="none" is set
4417
+ },
4418
+ }),
4419
4419
  };
4420
4420
  };
4421
4421
 
@@ -5649,8 +5649,8 @@ const getComponentCss$S = (inline, wrap, direction, justifyContent, alignItems,
5649
5649
  const getFlyoutDialogResetJssStyle = () => {
5650
5650
  return {
5651
5651
  position: 'fixed',
5652
- height: '100vh',
5653
- maxHeight: '100vh',
5652
+ height: '100dvh',
5653
+ maxHeight: '100dvh',
5654
5654
  margin: '0',
5655
5655
  padding: '0',
5656
5656
  border: '0',
@@ -7182,6 +7182,22 @@ const getPlaceholderJssStyle = (styles) => ({
7182
7182
  '&:-moz-placeholder': styles /* Firefox 18- */,
7183
7183
  });
7184
7184
 
7185
+ // Used for elements that must overflow `overflow:hidden` containers, are positioned absolute and wrapped within a native `popover` element.
7186
+ const getPopoverResetJssStyle = () => {
7187
+ return {
7188
+ position: 'absolute',
7189
+ border: 'none',
7190
+ background: 'none',
7191
+ pointerEvents: 'all',
7192
+ padding: 0,
7193
+ margin: 0,
7194
+ overflow: 'initial',
7195
+ '&:-internal-popover-in-top-layer::backdrop': {
7196
+ display: 'none',
7197
+ },
7198
+ };
7199
+ };
7200
+
7185
7201
  const getSlottedTextFieldTextareaSelectStyles = (child, state, isLoading, theme, additionalDefaultJssStyle) => {
7186
7202
  const { primaryColor, contrastLowColor, contrastMediumColor, disabledColor } = getThemedColors(theme);
7187
7203
  const { primaryColor: primaryColorDark, contrastLowColor: contrastLowColorDark, contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark, } = getThemedColors('dark');
@@ -7293,7 +7309,7 @@ const getUnitCounterJssStyle = (isDisabled, theme) => {
7293
7309
 
7294
7310
  const INTERNAL_MULTI_SELECT_SLOT = 'internal-select';
7295
7311
 
7296
- const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
7312
+ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
7297
7313
  const { contrastHighColor } = getThemedColors(theme);
7298
7314
  const { contrastHighColor: contrastHighColorDark } = getThemedColors('dark');
7299
7315
  return getCss({
@@ -7364,6 +7380,11 @@ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWi
7364
7380
  ...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
7365
7381
  // .message
7366
7382
  ...getFunctionalComponentStateMessageStyles(theme, state),
7383
+ ...(isNativePopoverCase && {
7384
+ popover: {
7385
+ ...getPopoverResetJssStyle(),
7386
+ },
7387
+ }),
7367
7388
  });
7368
7389
  };
7369
7390
  // TODO: use getSlottedTextFieldTextareaSelectStyles() instead an manipulate selectors like done with PIN Code or even better make it configurable as parameter
@@ -7810,7 +7831,7 @@ const getDirectionArrowMap = (theme) => {
7810
7831
  },
7811
7832
  };
7812
7833
  };
7813
- const getComponentCss$w = (direction, isNative, theme) => {
7834
+ const getComponentCss$w = (direction, isNativePopoverCase, theme) => {
7814
7835
  const { hoverColor, backgroundColor, primaryColor, backgroundSurfaceColor } = getThemedColors(theme);
7815
7836
  const { hoverColor: hoverColorDark, primaryColor: primaryColorDark, backgroundSurfaceColor: backgroundSurfaceColorDark, } = getThemedColors('dark');
7816
7837
  const shadowColor = 'rgba(0,0,0,0.3)';
@@ -7860,13 +7881,9 @@ const getComponentCss$w = (direction, isNative, theme) => {
7860
7881
  transform: 'translate3d(0,0,0)', // Fixes movement on hover in Safari
7861
7882
  },
7862
7883
  spacer: {
7863
- ...(isNative
7884
+ ...(isNativePopoverCase
7864
7885
  ? {
7865
- overflow: 'initial',
7866
- backgroundColor: 'transparent',
7867
- border: 'none',
7868
- margin: 0,
7869
- padding: 0,
7886
+ ...getPopoverResetJssStyle(),
7870
7887
  }
7871
7888
  : {
7872
7889
  inset: `${-safeZonePx}px`,
@@ -8558,7 +8575,7 @@ const getListStyles$1 = (direction, theme) => {
8558
8575
  },
8559
8576
  };
8560
8577
  };
8561
- const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopover, theme) => {
8578
+ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopoverCase, theme) => {
8562
8579
  return getCss(
8563
8580
  // merge because of global styles
8564
8581
  mergeDeep({
@@ -8571,21 +8588,9 @@ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativeP
8571
8588
  'sr-text': {
8572
8589
  display: 'none',
8573
8590
  },
8574
- ...(isNativePopover && {
8591
+ ...(isNativePopoverCase && {
8575
8592
  popover: {
8576
- position: 'absolute',
8577
- bottom: 'auto',
8578
- border: 'none',
8579
- background: 'none',
8580
- pointerEvents: 'all',
8581
- padding: 0,
8582
- margin: 0,
8583
- overflow: 'initial',
8584
- height: 'auto',
8585
- maxHeight: `${8.5 * (OPTION_HEIGHT + 8) + 6 + 2}px`, // 8px = gap, 6px = padding, 2px = border
8586
- '&:-internal-popover-in-top-layer::backdrop': {
8587
- display: 'none',
8588
- },
8593
+ ...getPopoverResetJssStyle(),
8589
8594
  },
8590
8595
  }),
8591
8596
  }, filter
@@ -8737,7 +8742,7 @@ const getOptionStyles = (theme) => {
8737
8742
 
8738
8743
  const INTERNAL_SELECT_SLOT = 'internal-select';
8739
8744
 
8740
- const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
8745
+ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
8741
8746
  return getCss({
8742
8747
  '@global': {
8743
8748
  ':host': addImportantToEachRule({
@@ -8785,6 +8790,11 @@ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWi
8785
8790
  ...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
8786
8791
  // .message
8787
8792
  ...getFunctionalComponentStateMessageStyles(theme, state),
8793
+ ...(isNativePopoverCase && {
8794
+ popover: {
8795
+ ...getPopoverResetJssStyle(),
8796
+ },
8797
+ }),
8788
8798
  });
8789
8799
  };
8790
8800
  // TODO: Rename to JSSStyles
@@ -90,6 +90,9 @@ class DSRMultiSelect extends Component {
90
90
  form;
91
91
  isWithinForm;
92
92
  preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
93
+ isNativePopoverCase = false;
94
+ parentTableElement;
95
+ popoverElement;
93
96
  get currentValue() {
94
97
  return getSelectedOptionValues(this.props.multiSelectOptions);
95
98
  }
@@ -98,8 +101,14 @@ class DSRMultiSelect extends Component {
98
101
  const optionsSelectedId = 'options-selected';
99
102
  const dropdownId = 'list';
100
103
  const inputId = 'filter';
101
- const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$z('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
102
- return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsx(PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsx("span", { "aria-hidden": "true", children: "---" }), jsx("span", { className: "sr-only", children: "No results found" })] })), jsx("slot", {})] })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
104
+ const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$z('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
105
+ return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsx(PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsx("div", { ...(this.props.isNativePopoverCase && {
106
+ popover: 'auto',
107
+ className: 'popover',
108
+ ...(this.props.popoverElement?.matches(':popover-open') && {
109
+ 'popover-open': true,
110
+ }),
111
+ }), children: jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsx("span", { "aria-hidden": "true", children: "---" }), jsx("span", { className: "sr-only", children: "No results found" })] })), jsx("slot", {})] }) })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
103
112
  }
104
113
  }
105
114
 
@@ -80,13 +80,13 @@ class DSRPopover extends Component {
80
80
  spacer;
81
81
  popover;
82
82
  button;
83
- isNative = false;
83
+ isNativePopoverCase = false;
84
84
  parentTableElement;
85
85
  render() {
86
86
  splitChildren(this.props.children);
87
- const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$w(this.props.direction, this.props.isNative, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
88
- return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs(Fragment, { children: [jsxs("button", { type: "button", ...(this.props.isNative ? { popoverTarget: 'spacer' } : { ...(!this.props.isNative && { 'aria-expanded': this.props.open }),
89
- }), children: [jsx(PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNative) && (jsx("div", { className: "spacer", ...(this.props.isNative && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsx("div", { className: "popover", children: this.props.description ? jsx("p", { children: this.props.description }) : jsx("slot", {}) }) }))] })] }), this.props.children] }));
87
+ const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$w(this.props.direction, this.props.isNativePopoverCase, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
88
+ return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs(Fragment, { children: [jsxs("button", { type: "button", ...(this.props.isNativePopoverCase ? { popoverTarget: 'spacer' } : { ...(!this.props.isNativePopoverCase && { 'aria-expanded': this.props.open }),
89
+ }), children: [jsx(PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNativePopoverCase) && (jsx("div", { className: "spacer", ...(this.props.isNativePopoverCase && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsx("div", { className: "popover", children: this.props.description ? jsx("p", { children: this.props.description }) : jsx("slot", {}) }) }))] })] }), this.props.children] }));
90
90
  }
91
91
  }
92
92
 
@@ -81,7 +81,7 @@ class DSRSelectWrapperDropdown extends Component {
81
81
  searchString = '';
82
82
  inputElement;
83
83
  listElement;
84
- isNativePopover = false;
84
+ isNativePopoverCase = false;
85
85
  parentTableElement;
86
86
  popoverElement;
87
87
  get selectedIndex() {
@@ -94,7 +94,7 @@ class DSRSelectWrapperDropdown extends Component {
94
94
  const buttonId = 'value';
95
95
  const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$r(this.props.direction === 'auto'
96
96
  ? 'down'
97
- : this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopover, this.props.theme)));
97
+ : this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopoverCase, this.props.theme)));
98
98
  return (jsx(Fragment, { children: jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsx(Fragment, { children: this.props.filter ? ([
99
99
  jsx("input", { type: "text", role: "combobox", disabled: this.props.disabled, placeholder: getSelectedOptionMap(this.optionMaps)?.value || null, autoComplete: "off", defaultValue: this.searchString }, "input"),
100
100
  jsx("span", {
@@ -91,6 +91,9 @@ class DSRSelect extends Component {
91
91
  preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
92
92
  searchString = '';
93
93
  searchTimeout = null;
94
+ isNativePopoverCase = false;
95
+ parentTableElement;
96
+ popoverElement;
94
97
  render() {
95
98
  const { children, namedSlotChildren, otherChildren } = splitChildren(this.props.children);
96
99
  const buttonId = 'value';
@@ -100,8 +103,14 @@ class DSRSelect extends Component {
100
103
  const ariaDescribedBy = descriptionId && selectMessageId
101
104
  ? `${descriptionId} ${selectMessageId}`
102
105
  : descriptionId || selectMessageId || undefined;
103
- const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$o('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
104
- return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("button", { type: "button", role: "combobox", id: buttonId, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: getSelectedOptionString(otherChildren) }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsx("div", { id: dropdownId, className: "listbox", ...getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsx("slot", {}) })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
106
+ const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$o('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
107
+ return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("button", { type: "button", role: "combobox", id: buttonId, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: getSelectedOptionString(otherChildren) }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsx("div", { ...(this.props.isNativePopoverCase && {
108
+ popover: 'auto',
109
+ className: 'popover',
110
+ ...(this.props.popoverElement?.matches(':popover-open') && {
111
+ 'popover-open': true,
112
+ }),
113
+ }), children: jsx("div", { id: dropdownId, className: "listbox", ...getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsx("slot", {}) }) })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
105
114
  }
106
115
  }
107
116
 
@@ -12,6 +12,9 @@ export declare class DSRMultiSelect extends Component<any> {
12
12
  private form;
13
13
  private isWithinForm;
14
14
  private preventOptionUpdate;
15
+ private isNativePopoverCase;
16
+ private parentTableElement;
17
+ private popoverElement;
15
18
  private get currentValue();
16
19
  render(): JSX.Element;
17
20
  }
@@ -5,7 +5,7 @@ export declare class DSRPopover extends Component<any> {
5
5
  private spacer;
6
6
  private popover;
7
7
  private button;
8
- private isNative;
8
+ private isNativePopoverCase;
9
9
  private parentTableElement;
10
10
  render(): JSX.Element;
11
11
  }
@@ -6,7 +6,7 @@ export declare class DSRSelectWrapperDropdown extends Component<any> {
6
6
  private searchString;
7
7
  private inputElement;
8
8
  private listElement;
9
- private isNativePopover;
9
+ private isNativePopoverCase;
10
10
  private parentTableElement;
11
11
  private popoverElement;
12
12
  private get selectedIndex();
@@ -13,5 +13,8 @@ export declare class DSRSelect extends Component<any> {
13
13
  private preventOptionUpdate;
14
14
  private searchString;
15
15
  private searchTimeout;
16
+ private isNativePopoverCase;
17
+ private parentTableElement;
18
+ private popoverElement;
16
19
  render(): JSX.Element;
17
20
  }