@porsche-design-system/components-react 3.26.0 → 3.27.0-rc.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.
@@ -127,7 +127,7 @@ function createRule(name, decl, options) {
127
127
  return null;
128
128
  }
129
129
 
130
- var join$1 = function join(value, by) {
130
+ var join = function join(value, by) {
131
131
  var result = '';
132
132
 
133
133
  for (var i = 0; i < value.length; i++) {
@@ -157,9 +157,9 @@ var toCssValue = function toCssValue(value) {
157
157
  for (var i = 0; i < value.length; i++) {
158
158
  if (value[i] === '!important') break;
159
159
  if (cssValue) cssValue += ', ';
160
- cssValue += join$1(value[i], ' ');
160
+ cssValue += join(value[i], ' ');
161
161
  }
162
- } else cssValue = join$1(value, ', '); // Add !important, because it was ignored.
162
+ } else cssValue = join(value, ', '); // Add !important, because it was ignored.
163
163
 
164
164
 
165
165
  if (value[value.length - 1] === '!important') {
@@ -4085,7 +4085,6 @@ const getComponentCss$1a = (size, compact, open, theme, sticky) => {
4085
4085
  };
4086
4086
 
4087
4087
  const TOAST_Z_INDEX = 999999;
4088
- const POPOVER_Z_INDEX = 9999;
4089
4088
  const BANNER_Z_INDEX = 99;
4090
4089
 
4091
4090
  const getBannerPopoverResetStyles = () => {
@@ -8856,116 +8855,20 @@ const getComponentCss$y = (hideLabel, state, isDisabled, isLoading, length, them
8856
8855
  });
8857
8856
  };
8858
8857
 
8859
- const safeZonePx = 16;
8858
+ const POPOVER_SAFE_ZONE = 8;
8860
8859
 
8861
- const { canvasColor, canvasTextColor } = getHighContrastColors();
8862
- const directionPositionMap = {
8863
- top: {
8864
- bottom: '100%',
8865
- left: '50%',
8866
- transform: 'translate3d(-50%, 0, 0)', // translate3d used to fix Safari shadow bug
8867
- },
8868
- right: {
8869
- top: '50%',
8870
- left: '100%',
8871
- transform: 'translate3d(0, -50%, 0)',
8872
- },
8873
- bottom: {
8874
- top: '100%',
8875
- left: '50%',
8876
- transform: 'translate3d(-50%, 0, 0)',
8877
- },
8878
- left: {
8879
- top: '50%',
8880
- right: '100%',
8881
- transform: 'translate3d(0, -50%, 0)',
8882
- },
8883
- };
8884
- const borderWidth = '12px';
8885
- const transparentColor = 'transparent';
8886
- const join = (...arr) => arr.join(' ');
8887
- const getDirectionArrowMap = (theme) => {
8888
- const { backgroundColor, backgroundSurfaceColor } = getThemedColors(theme);
8889
- const { backgroundSurfaceColor: backgroundSurfaceColorDark } = getThemedColors('dark');
8890
- const isDark = isThemeDark(theme);
8891
- return {
8892
- top: {
8893
- top: 0,
8894
- left: '50%',
8895
- transform: 'translateX(-50%)',
8896
- borderWidth: join(borderWidth, borderWidth, 0),
8897
- ...(isHighContrastMode
8898
- ? {
8899
- borderColor: join(canvasTextColor, canvasColor, canvasColor),
8900
- }
8901
- : {
8902
- borderColor: join(isDark ? backgroundSurfaceColor : backgroundColor, transparentColor, transparentColor),
8903
- ...prefersColorSchemeDarkMediaQuery(theme, {
8904
- borderColor: join(backgroundSurfaceColorDark, transparentColor, transparentColor),
8905
- }),
8906
- }),
8907
- },
8908
- right: {
8909
- top: '50%',
8910
- right: 0,
8911
- transform: 'translateY(-50%)',
8912
- borderWidth: join(borderWidth, borderWidth, borderWidth, 0),
8913
- ...(isHighContrastMode
8914
- ? {
8915
- borderColor: join(canvasColor, canvasTextColor, canvasColor, canvasColor),
8916
- }
8917
- : {
8918
- borderColor: join(transparentColor, isDark ? backgroundSurfaceColor : backgroundColor, transparentColor, transparentColor),
8919
- ...prefersColorSchemeDarkMediaQuery(theme, {
8920
- borderColor: join(transparentColor, backgroundSurfaceColorDark, transparentColor, transparentColor),
8921
- }),
8922
- }),
8923
- },
8924
- bottom: {
8925
- bottom: 0,
8926
- left: '50%',
8927
- transform: 'translateX(-50%)',
8928
- borderWidth: join(0, borderWidth, borderWidth),
8929
- ...(isHighContrastMode
8930
- ? {
8931
- borderColor: join(canvasColor, canvasColor, canvasTextColor),
8932
- }
8933
- : {
8934
- borderColor: join(transparentColor, transparentColor, isDark ? backgroundSurfaceColor : backgroundColor),
8935
- ...prefersColorSchemeDarkMediaQuery(theme, {
8936
- borderColor: join(transparentColor, transparentColor, backgroundSurfaceColorDark),
8937
- }),
8938
- }),
8939
- },
8940
- left: {
8941
- top: '50%',
8942
- left: 0,
8943
- transform: 'translateY(-50%)',
8944
- borderWidth: join(borderWidth, 0, borderWidth, borderWidth),
8945
- ...(isHighContrastMode
8946
- ? {
8947
- borderColor: join(canvasColor, canvasColor, canvasColor, canvasTextColor),
8948
- }
8949
- : {
8950
- borderColor: join(transparentColor, transparentColor, transparentColor, isDark ? backgroundSurfaceColor : backgroundColor),
8951
- ...prefersColorSchemeDarkMediaQuery(theme, {
8952
- borderColor: join(transparentColor, transparentColor, transparentColor, backgroundSurfaceColorDark),
8953
- }),
8954
- }),
8955
- },
8956
- };
8957
- };
8958
- const getComponentCss$x = (direction, isNativePopoverCase, theme) => {
8860
+ const { canvasTextColor } = getHighContrastColors();
8861
+ const getComponentCss$x = (theme) => {
8959
8862
  const { hoverColor, backgroundColor, primaryColor, backgroundSurfaceColor } = getThemedColors(theme);
8960
8863
  const { hoverColor: hoverColorDark, primaryColor: primaryColorDark, backgroundSurfaceColor: backgroundSurfaceColorDark, } = getThemedColors('dark');
8961
8864
  const shadowColor = 'rgba(0,0,0,0.3)';
8962
8865
  return getCss({
8963
8866
  '@global': {
8964
8867
  ':host': {
8868
+ position: 'relative', // ensures correct reference for floating ui fallback positioning in older browsers
8965
8869
  display: 'inline-block',
8966
8870
  verticalAlign: 'top',
8967
8871
  ...addImportantToEachRule({
8968
- position: 'relative',
8969
8872
  ...colorSchemeStyles,
8970
8873
  ...hostHiddenStyles,
8971
8874
  }),
@@ -8976,18 +8879,13 @@ const getComponentCss$x = (direction, isNativePopoverCase, theme) => {
8976
8879
  margin: 0,
8977
8880
  },
8978
8881
  button: {
8882
+ all: 'unset',
8979
8883
  display: 'block',
8980
- WebkitAppearance: 'none', // iOS safari
8981
- appearance: 'none',
8982
- background: 'transparent',
8983
- border: 0,
8984
- padding: 0,
8985
- cursor: 'pointer',
8986
- ...textSmallStyle,
8884
+ font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width/height definition based on ex-unit
8987
8885
  width: fontLineHeight, // width needed to improve ssr support
8988
8886
  height: fontLineHeight, // height needed to improve ssr support
8989
8887
  borderRadius: '50%',
8990
- // TODO: we should try to use getHoverStyle()
8888
+ cursor: 'pointer',
8991
8889
  ...hoverMediaQuery({
8992
8890
  transition: getTransition('background-color'),
8993
8891
  '&:hover': {
@@ -9005,47 +8903,49 @@ const getComponentCss$x = (direction, isNativePopoverCase, theme) => {
9005
8903
  icon: {
9006
8904
  transform: 'translate3d(0,0,0)', // Fixes movement on hover in Safari
9007
8905
  },
9008
- spacer: {
9009
- ...(isNativePopoverCase
9010
- ? {
9011
- ...getPopoverResetJssStyle(),
9012
- }
9013
- : {
9014
- inset: `${-safeZonePx}px`,
9015
- }),
8906
+ popover: {
8907
+ all: 'unset',
9016
8908
  position: 'absolute',
9017
- zIndex: POPOVER_Z_INDEX,
9018
- filter: `drop-shadow(0 0 16px ${shadowColor})`,
9019
8909
  pointerEvents: 'none',
8910
+ filter: `drop-shadow(0 0 16px ${shadowColor})`,
9020
8911
  animation: `${motionDurationShort} $fadeIn ${motionEasingBase} forwards`
9021
8912
  ,
9022
- '&::before': {
9023
- content: '""',
9024
- position: 'absolute',
9025
- borderStyle: 'solid',
9026
- ...getDirectionArrowMap(theme)[direction],
8913
+ '&:not(:popover-open)': {
8914
+ display: 'none', // ensures popover is not flickering when closed in some situations
8915
+ },
8916
+ '&:-internal-popover-in-top-layer::backdrop': {
8917
+ display: 'none',
9027
8918
  },
9028
- ...prefersColorSchemeDarkMediaQuery(theme, {
9029
- filter: `drop-shadow(0 0 16px ${shadowColor})`,
9030
- }),
9031
8919
  },
9032
- popover: {
8920
+ arrow: {
9033
8921
  position: 'absolute',
9034
- maxWidth: 'min(90vw, 27rem)',
9035
- width: 'max-content',
8922
+ width: '24px',
8923
+ height: '12px',
8924
+ clipPath: 'polygon(50% 0, 100% 110%, 0 110%)',
8925
+ ...(isHighContrastMode
8926
+ ? {
8927
+ background: canvasTextColor,
8928
+ }
8929
+ : {
8930
+ background: isThemeDark(theme) ? backgroundSurfaceColor : backgroundColor,
8931
+ ...prefersColorSchemeDarkMediaQuery(theme, {
8932
+ background: backgroundSurfaceColorDark,
8933
+ }),
8934
+ }),
8935
+ },
8936
+ content: {
8937
+ maxWidth: `min(calc(100dvw - ${POPOVER_SAFE_ZONE * 2}px), 48ch)`,
8938
+ width: 'max-content', // ensures in older browsers correct width
9036
8939
  boxSizing: 'border-box',
9037
- background: isThemeDark(theme) ? backgroundSurfaceColor : backgroundColor,
9038
- padding: '8px 16px',
8940
+ padding: `${spacingStaticSmall} ${spacingStaticMedium}`,
9039
8941
  pointerEvents: 'auto',
9040
- ...directionPositionMap[direction],
9041
- ...textSmallStyle,
9042
- listStyleType: 'none',
9043
- color: primaryColor,
9044
- whiteSpace: 'inherit',
9045
8942
  borderRadius: borderRadiusSmall,
9046
8943
  ...(isHighContrastMode && {
9047
8944
  outline: `1px solid ${canvasTextColor}`,
9048
8945
  }),
8946
+ ...textSmallStyle,
8947
+ background: isThemeDark(theme) ? backgroundSurfaceColor : backgroundColor,
8948
+ color: primaryColor,
9049
8949
  ...prefersColorSchemeDarkMediaQuery(theme, {
9050
8950
  background: backgroundSurfaceColorDark,
9051
8951
  color: primaryColorDark,
@@ -127,7 +127,7 @@ function createRule(name, decl, options) {
127
127
  return null;
128
128
  }
129
129
 
130
- var join$1 = function join(value, by) {
130
+ var join = function join(value, by) {
131
131
  var result = '';
132
132
 
133
133
  for (var i = 0; i < value.length; i++) {
@@ -157,9 +157,9 @@ var toCssValue = function toCssValue(value) {
157
157
  for (var i = 0; i < value.length; i++) {
158
158
  if (value[i] === '!important') break;
159
159
  if (cssValue) cssValue += ', ';
160
- cssValue += join$1(value[i], ' ');
160
+ cssValue += join(value[i], ' ');
161
161
  }
162
- } else cssValue = join$1(value, ', '); // Add !important, because it was ignored.
162
+ } else cssValue = join(value, ', '); // Add !important, because it was ignored.
163
163
 
164
164
 
165
165
  if (value[value.length - 1] === '!important') {
@@ -3539,7 +3539,9 @@ const supportsNativePopover = () => {
3539
3539
  return Object.prototype.hasOwnProperty.call(HTMLElement.prototype, 'popover');
3540
3540
  };
3541
3541
  // determine it once
3542
- supportsNativePopover();
3542
+ const hasNativePopoverSupport = supportsNativePopover();
3543
+ // getter for easy mocking
3544
+ const getHasNativePopoverSupport = () => hasNativePopoverSupport;
3543
3545
 
3544
3546
  const hasDocument = typeof document !== 'undefined';
3545
3547
 
@@ -3906,4 +3908,4 @@ const getTextTagType = (host, tag) => {
3906
3908
  return tag;
3907
3909
  };
3908
3910
 
3909
- export { DISPLAY_TAGS, HEADING_TAGS, HEADLINE_TAGS, ItemType, TEXT_TAGS, _hasShowPickerSupport, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildIconUrl, buildImgSrc, buildSrcSet, createPaginationItems, createRange, crestSize, debounce, displaySizeToTagMap, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getClosestHTMLElement, getComboboxAriaAttributes, getContentAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getHTMLElement, getHeadingTagType, getHeadlineTagType, getIconColor, getInlineNotificationIconName, getInnerManifest, getListAriaAttributes, getOptionAriaAttributes, getRole, getSegmentedControlItemAriaAttributes, getSelectedOptionMap, getSelectedOptionString, getSelectedOptionValues, getSelectedOptions, getStepperHorizontalIconName, getSvgUrl, getSwitchButtonAriaAttributes, getTagName, getTagNameWithoutPrefix, getTextTagType, getTotalPages, hasDocument, hasLocateAction, hasSpecificDirectChildTag, hasVisibleIcon, hasWindow, headerSlot, isCurrentInput, isCustomDropdown, isDisabledOrLoading, isElementOfKind, isInfinitePagination, isListTypeOrdered, isScrollable, isSortable, isStateCompleteOrWarning, isTouchDevice, isType, isUrl, isWithinForm, observedNodesMap, parseAndGetAriaAttributes, parseJSONAttribute, scrollAreaClass, showCustomCalendarOrTimeIndicator, supportsConstructableStylesheets, supportsNativePopover, tempDiv, tempIcon, tempLabel, traverseTreeAndUpdateState, updateFlyoutMultiLevelItemState };
3911
+ export { DISPLAY_TAGS, HEADING_TAGS, HEADLINE_TAGS, ItemType, TEXT_TAGS, _hasShowPickerSupport, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildIconUrl, buildImgSrc, buildSrcSet, createPaginationItems, createRange, crestSize, debounce, displaySizeToTagMap, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getClosestHTMLElement, getComboboxAriaAttributes, getContentAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getHTMLElement, getHasNativePopoverSupport, getHeadingTagType, getHeadlineTagType, getIconColor, getInlineNotificationIconName, getInnerManifest, getListAriaAttributes, getOptionAriaAttributes, getRole, getSegmentedControlItemAriaAttributes, getSelectedOptionMap, getSelectedOptionString, getSelectedOptionValues, getSelectedOptions, getStepperHorizontalIconName, getSvgUrl, getSwitchButtonAriaAttributes, getTagName, getTagNameWithoutPrefix, getTextTagType, getTotalPages, hasDocument, hasLocateAction, hasSpecificDirectChildTag, hasVisibleIcon, hasWindow, headerSlot, isCurrentInput, isCustomDropdown, isDisabledOrLoading, isElementOfKind, isInfinitePagination, isListTypeOrdered, isScrollable, isSortable, isStateCompleteOrWarning, isTouchDevice, isType, isUrl, isWithinForm, observedNodesMap, parseAndGetAriaAttributes, parseJSONAttribute, scrollAreaClass, showCustomCalendarOrTimeIndicator, supportsConstructableStylesheets, supportsNativePopover, tempDiv, tempIcon, tempLabel, traverseTreeAndUpdateState, updateFlyoutMultiLevelItemState };
@@ -5,6 +5,7 @@ import { splitChildren } from '../../splitChildren.mjs';
5
5
  import { minifyCss } from '../../minifyCss.mjs';
6
6
  import { stripFocusAndHoverStyles } from '../../stripFocusAndHoverStyles.mjs';
7
7
  import { getPopoverCss as getComponentCss$x } from '../../../../../../components/dist/styles/esm/styles-entry.mjs';
8
+ import { getHasNativePopoverSupport, parseAndGetAriaAttributes } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
8
9
  import { PIcon } from '../components/icon.wrapper.mjs';
9
10
 
10
11
  /**
@@ -13,16 +14,18 @@ import { PIcon } from '../components/icon.wrapper.mjs';
13
14
  class DSRPopover extends Component {
14
15
  host;
15
16
  open = false;
16
- spacer;
17
17
  popover;
18
18
  button;
19
- isNativePopoverCase = false;
20
- parentTableElement;
19
+ arrow;
20
+ cleanUp;
21
+ hasNativePopoverSupport = getHasNativePopoverSupport();
21
22
  render() {
22
23
  splitChildren(this.props.children);
23
- const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$x(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')));
24
- 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 }),
25
- }), 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] }));
24
+ const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$x(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')));
25
+ return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs(Fragment, { children: [jsxs("button", { type: "button", ...parseAndGetAriaAttributes({
26
+ ...parseAndGetAriaAttributes(this.props.aria),
27
+ ...{ 'aria-expanded': this.props.open },
28
+ }), children: [jsx(PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsx("span", { className: "label", children: "More information" })] }), this.props.open && (jsxs("div", { className: "popover", popover: "auto", children: [jsx("div", { className: "arrow" }), jsx("div", { className: "content", children: this.props.description ? jsx("p", { children: this.props.description }) : jsx("slot", {}) })] }))] })] }), this.props.children] }));
26
29
  }
27
30
  }
28
31
 
@@ -73,6 +73,6 @@ export { PTextarea } from './lib/components/textarea.wrapper.mjs';
73
73
  export { PTextareaWrapper } from './lib/components/textarea-wrapper.wrapper.mjs';
74
74
  export { PToast } from './lib/components/toast.wrapper.mjs';
75
75
  export { PWordmark } from './lib/components/wordmark.wrapper.mjs';
76
- export { PorscheDesignSystemProvider } from './provider.mjs';
76
+ export { PorscheDesignSystemContext, PorscheDesignSystemProvider } from './provider.mjs';
77
77
  export { skipCheckForPorscheDesignSystemProviderDuringTests, useToastManager } from './hooks.mjs';
78
78
  export { skipPorscheDesignSystemCDNRequestsDuringTests } from './utils.mjs';
@@ -5,10 +5,10 @@ import { Component } from 'react';
5
5
  export declare class DSRPopover extends Component<any> {
6
6
  host: HTMLElement;
7
7
  private open;
8
- private spacer;
9
8
  private popover;
10
9
  private button;
11
- private isNativePopoverCase;
12
- private parentTableElement;
10
+ private arrow;
11
+ private cleanUp;
12
+ private hasNativePopoverSupport;
13
13
  render(): JSX.Element;
14
14
  }
@@ -1,6 +1,6 @@
1
1
  export { componentsReady } from '@porsche-design-system/components-js';
2
2
  export * from './lib/components';
3
3
  export * from './lib/types';
4
- export { PorscheDesignSystemProvider } from './provider';
4
+ export { PorscheDesignSystemProvider, PorscheDesignSystemContext } from './provider';
5
5
  export { skipCheckForPorscheDesignSystemProviderDuringTests, useToastManager } from './hooks';
6
6
  export { skipPorscheDesignSystemCDNRequestsDuringTests } from './utils';