@porsche-design-system/components-react 3.28.0-rc.1 → 3.28.0-rc.3

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 (21) hide show
  1. package/CHANGELOG.md +684 -657
  2. package/LICENSE.md +1 -1
  3. package/package.json +5 -2
  4. package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +155 -89
  5. package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +0 -5
  6. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/banner.cjs +1 -1
  7. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/canvas.cjs +6 -4
  8. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link.cjs +1 -1
  9. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.cjs +4 -5
  10. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.cjs +6 -2
  11. package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +155 -89
  12. package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +1 -5
  13. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/banner.mjs +1 -1
  14. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/canvas.mjs +6 -4
  15. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/link.mjs +1 -1
  16. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.mjs +4 -5
  17. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.mjs +7 -3
  18. package/ssr/esm/lib/dsr-components/banner.d.ts +1 -1
  19. package/ssr/esm/lib/dsr-components/canvas.d.ts +0 -4
  20. package/ssr/esm/lib/dsr-components/link.d.ts +1 -1
  21. package/tailwind/index.css +348 -0
package/LICENSE.md CHANGED
@@ -21,7 +21,7 @@ update this licensing agreement at any time.
21
21
  Subject to the terms of this Agreement, Porsche grants you a limited, worldwide, royalty-free, non-assignable,
22
22
  non-transferable, non-sublicensable, and non-exclusive license to use the Porsche Design System Assets solely to
23
23
  develop, test, and distribute software applications, websites, and interfaces on behalf of Porsche that are available
24
- via www.porsche.com or any associated websites or other Porsche software (“Applications”).
24
+ via [https://porsche.com](https://porsche.com) or any associated websites or other Porsche software (“Applications”).
25
25
 
26
26
  ### License Restrictions
27
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@porsche-design-system/components-react",
3
- "version": "3.28.0-rc.1",
3
+ "version": "3.28.0-rc.3",
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.28.0-rc.1"
20
+ "@porsche-design-system/components-js": "3.28.0-rc.3"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "ag-grid-community": ">= 33.0.0 <34.0.0",
@@ -75,6 +75,9 @@
75
75
  "import": "./styles/vanilla-extract/esm/vanilla-extract/index.mjs",
76
76
  "default": "./styles/vanilla-extract/cjs/vanilla-extract/index.cjs"
77
77
  },
78
+ "./tailwindcss": {
79
+ "style": "./tailwind/index.css"
80
+ },
78
81
  "./ag-grid": {
79
82
  "types": "./ag-grid/esm/index.d.ts",
80
83
  "import": "./ag-grid/esm/index.mjs",
@@ -4098,6 +4098,10 @@ const getBannerPopoverResetStyles = () => {
4098
4098
  };
4099
4099
  };
4100
4100
 
4101
+ /**
4102
+ * @css-variable {"name": "--p-banner-position-top", "description": "Position top of banner", "defaultValue": "56px"}
4103
+ * @css-variable {"name": "--p-banner-position-bottom", "description": "Position bottom of banner. Only has an effect below breakpoint 's'.", "defaultValue": "56px"}
4104
+ */
4101
4105
  const cssVariableTop = '--p-banner-position-top';
4102
4106
  const cssVariableBottom = '--p-banner-position-bottom';
4103
4107
  const cssVariableZIndex = '--p-internal-banner-z-index';
@@ -5036,6 +5040,9 @@ const getComponentCss$16 = (theme, isSidebarStartOpen, isSidebarEndOpen) => {
5036
5040
  });
5037
5041
  };
5038
5042
 
5043
+ /**
5044
+ * @css-variable {"name": "--p-carousel-prev-next-filter", "description": "CSS Filter applied to the navigation (prev/next buttons)", "defaultValue": "none"}
5045
+ */
5039
5046
  const cssVariablePrevNextFilter = '--p-carousel-prev-next-filter';
5040
5047
  const cssVariableGradientColorWidth = '--p-gradient-color-width';
5041
5048
  const carouselTransitionDuration = motionDurationModerate;
@@ -5529,8 +5536,12 @@ const getFunctionalComponentStateMessageStyles = (theme, state, additionalDefaul
5529
5536
  ...prefersColorSchemeDarkMediaQuery(theme, {
5530
5537
  color: getThemedFormStateColors('dark', state).formStateColor,
5531
5538
  }),
5532
- transition: getTransition('color'),
5539
+ transition: `${getTransition('color')}, ${getTransition('opacity')}`,
5533
5540
  ...additionalDefaultJssStyle,
5541
+ '&:empty': {
5542
+ opacity: '0',
5543
+ position: 'absolute',
5544
+ },
5534
5545
  },
5535
5546
  };
5536
5547
  };
@@ -5637,13 +5648,112 @@ const getComponentCss$14 = (hideLabel, state, isDisabled, isLoading, theme) => {
5637
5648
  });
5638
5649
  };
5639
5650
 
5651
+ const cssVarInternalCheckboxScaling = '--p-internal-checkbox-scaling';
5652
+ const getCheckboxBaseStyles = (theme, isDisabled, isLoading, state, compact) => {
5653
+ const { contrastMediumColor, disabledColor } = getThemedColors(theme);
5654
+ const { contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark } = getThemedColors('dark');
5655
+ const { formStateColor } = getThemedFormStateColors(theme, state);
5656
+ const { formStateColor: formStateColorDark } = getThemedFormStateColors('dark', state);
5657
+ const disabledOrLoading = isDisabledOrLoading(isDisabled, isLoading);
5658
+ // TODO: needs to be extracted into a color function
5659
+ const uncheckedColor = disabledOrLoading ? disabledColor : formStateColor || contrastMediumColor;
5660
+ const uncheckedColorDark = disabledOrLoading ? disabledColorDark : formStateColorDark || contrastMediumColorDark;
5661
+ const background = `transparent 0% 0% / ${fontLineHeight}`;
5662
+ const minimumTouchTargetSize = '24px'; // Minimum touch target size to comply with accessibility guidelines.
5663
+ const scalingVar = `var(${cssVarInternalCheckboxScaling}, ${compact ? 0.6668 : 1})`;
5664
+ // Determines the scaling factor for the checkbox size. In "compact" mode, it uses 0.6668 to achieve a 20px checkbox (compact size).
5665
+ // Defaults to 1 for the standard size and can be overridden by the CSS variable `cssVarInternalCheckboxScaling`.
5666
+ const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${scalingVar} * ${fontLineHeight}))`;
5667
+ // Calculates the checkbox size and ensures a minimum size of 12px (0.75 * SCALING_BASE_VALUE).
5668
+ // Scales proportionally with the line height and the scaling factor.
5669
+ const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
5670
+ const touchTargetSizeDiff = `calc(${minimumTouchTargetSize} - ${dimensionFull})`; // Difference between the minimum touch target size and the checkbox full size.
5671
+ const inset = `calc(-${borderWidthBase} - max(0px, ${touchTargetSizeDiff} / 2))`; // Positions the checkbox ::before pseudo-element with a negative offset to align it with the touch target.
5672
+ return {
5673
+ position: 'relative',
5674
+ '&::before': {
5675
+ // Ensures the touch target is at least 24px, even if the checkbox is smaller than the minimum touch target size.
5676
+ // This pseudo-element expands the clickable area without affecting the visual size of the checkbox itself.
5677
+ content: '""',
5678
+ position: 'absolute',
5679
+ inset,
5680
+ },
5681
+ width: dimension,
5682
+ height: dimension,
5683
+ font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width and height definition based on ex-unit
5684
+ display: 'block',
5685
+ margin: 0,
5686
+ padding: 0,
5687
+ WebkitAppearance: 'none', // iOS safari
5688
+ appearance: 'none',
5689
+ boxSizing: 'content-box',
5690
+ background,
5691
+ transition: `${getTransition('background-color')}, ${getTransition('border-color')}`,
5692
+ border: `${borderWidthBase} solid ${uncheckedColor}`,
5693
+ outline: 0, // TODO: only relevant for VRT testing with forced states - prevents :focus style (in case getFocusJssStyle() condition is not matching)
5694
+ ...(disabledOrLoading
5695
+ ? {
5696
+ pointerEvents: 'none', // to prevent form element becomes clickable/toggleable
5697
+ }
5698
+ : {
5699
+ cursor: 'pointer',
5700
+ }),
5701
+ ...prefersColorSchemeDarkMediaQuery(theme, {
5702
+ borderColor: uncheckedColorDark,
5703
+ }),
5704
+ gridArea: '1/1',
5705
+ borderRadius: borderRadiusSmall,
5706
+ ...addImportantToEachRule({
5707
+ backgroundSize: 'cover',
5708
+ }),
5709
+ };
5710
+ };
5711
+
5640
5712
  const getCheckedSVGBackgroundImage$1 = (fill) => {
5641
5713
  return getInlineSVGBackgroundImage(`<path fill="${fill}" d="m20.22,7.47l-1.47-1.42-9.26,9.02-4.24-4.15-1.47,1.42,5.71,5.6,10.73-10.47Z"/>`);
5642
5714
  };
5715
+ const getCheckboxCheckedBaseStyles = (theme, isDisabled, isLoading, state) => {
5716
+ const { primaryColor, disabledColor } = getThemedColors(theme);
5717
+ const { primaryColor: primaryColorDark, disabledColor: disabledColorDark } = getThemedColors('dark');
5718
+ const { formStateColor } = getThemedFormStateColors(theme, state);
5719
+ const { formStateColor: formStateColorDark } = getThemedFormStateColors('dark', state);
5720
+ const { canvasTextColor } = getHighContrastColors();
5721
+ const disabledOrLoading = isDisabledOrLoading(isDisabled, isLoading);
5722
+ // TODO: needs to be extracted into a color function
5723
+ const checkedColor = isHighContrastMode
5724
+ ? canvasTextColor
5725
+ : disabledOrLoading
5726
+ ? disabledColor
5727
+ : formStateColor || primaryColor;
5728
+ const checkedColorDark = isHighContrastMode
5729
+ ? canvasTextColor
5730
+ : disabledOrLoading
5731
+ ? disabledColorDark
5732
+ : formStateColorDark || primaryColorDark;
5733
+ const checkedIconColor = escapeHashCharacter(getInvertedThemedColors(theme).primaryColor);
5734
+ const checkedIconColorDark = escapeHashCharacter(getInvertedThemedColors('dark').primaryColor);
5735
+ return {
5736
+ borderColor: checkedColor,
5737
+ backgroundColor: checkedColor,
5738
+ backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColor),
5739
+ ...prefersColorSchemeDarkMediaQuery(theme, {
5740
+ backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColorDark),
5741
+ borderColor: checkedColorDark,
5742
+ backgroundColor: checkedColorDark,
5743
+ }),
5744
+ // This is a workaround for Blink based browsers, which do not reflect the high contrast system colors (e.g.: "Canvas" and "CanvasText") when added to background SVG's.
5745
+ ...(isHighContrastMode &&
5746
+ getSchemedHighContrastMediaQuery({
5747
+ backgroundImage: getCheckedSVGBackgroundImage$1('white'),
5748
+ }, {
5749
+ backgroundImage: getCheckedSVGBackgroundImage$1('black'),
5750
+ })),
5751
+ };
5752
+ };
5753
+
5643
5754
  const getIndeterminateSVGBackgroundImage = (fill) => {
5644
5755
  return getInlineSVGBackgroundImage(`<path fill="${fill}" d="m20,11v2H4v-2h16Z"/>`);
5645
5756
  };
5646
- const cssVarInternalCheckboxScaling = '--p-internal-checkbox-scaling';
5647
5757
  const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, theme) => {
5648
5758
  const { primaryColor, contrastMediumColor, contrastHighColor, disabledColor, focusColor } = getThemedColors(theme);
5649
5759
  const { primaryColor: primaryColorDark, contrastMediumColor: contrastMediumColorDark, contrastHighColor: contrastHighColorDark, disabledColor: disabledColorDark, focusColor: focusColorDark, } = getThemedColors('dark');
@@ -5668,8 +5778,6 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
5668
5778
  : formStateColorDark || primaryColorDark;
5669
5779
  const checkedHoverColor = formStateHoverColor || contrastHighColor;
5670
5780
  const checkedHoverColorDark = formStateHoverColorDark || contrastHighColorDark;
5671
- const checkedIconColor = escapeHashCharacter(getInvertedThemedColors(theme).primaryColor);
5672
- const checkedIconColorDark = escapeHashCharacter(getInvertedThemedColors('dark').primaryColor);
5673
5781
  const indeterminateIconColor = escapeHashCharacter(disabledOrLoading ? disabledColorDark : formStateColor || primaryColor);
5674
5782
  const indeterminateIconColorDark = escapeHashCharacter(formStateColorDark || primaryColorDark);
5675
5783
  const indeterminateIconHoverColor = escapeHashCharacter(formStateHoverColor || primaryColor);
@@ -5677,18 +5785,11 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
5677
5785
  const background = `transparent 0% 0% / ${fontLineHeight}`;
5678
5786
  const minimumTouchTargetSize = '24px'; // Minimum touch target size to comply with accessibility guidelines.
5679
5787
  const scalingVar = `var(${cssVarInternalCheckboxScaling}, ${compact ? 0.6668 : 1})`;
5680
- // Determines the scaling factor for the checkbox size. In "compact" mode, it uses 0.6668 to achieve a 20px checkbox (compact size).
5681
- // Defaults to 1 for the standard size and can be overridden by the CSS variable `cssVarInternalCheckboxScaling`.
5682
5788
  const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${scalingVar} * ${fontLineHeight}))`;
5683
- // Calculates the checkbox size and ensures a minimum size of 12px (0.75 * SCALING_BASE_VALUE).
5684
- // Scales proportionally with the line height and the scaling factor.
5685
5789
  const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
5686
5790
  const touchTargetSizeDiff = `calc(${minimumTouchTargetSize} - ${dimensionFull})`; // Difference between the minimum touch target size and the checkbox full size.
5687
5791
  const paddingInlineStart = `calc(${spacingStaticSmall} - (max(0px, ${touchTargetSizeDiff})))`;
5688
- // Adjusts padding to maintain consistent spacing when the checkbox is smaller than the minimum touch target size.
5689
- // Uses asymmetric padding instead of `gap` to ensure there is no non-clickable area between the label and the input.
5690
5792
  const paddingTop = `calc((${dimensionFull} - ${fontLineHeight}) / 2)`; // Vertically centers the checkbox label relative to the checkbox size.
5691
- const inset = `calc(-${borderWidthBase} - max(0px, ${touchTargetSizeDiff} / 2))`; // Positions the checkbox ::before pseudo-element with a negative offset to align it with the touch target.
5692
5793
  const height = `calc(max(${fontLineHeight}, ${dimensionFull}))`; // Ensures the wrapper height matches either the font's line height or the full size of the checkbox, whichever is larger.
5693
5794
  return getCss({
5694
5795
  '@global': {
@@ -5700,44 +5801,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
5700
5801
  }),
5701
5802
  },
5702
5803
  ...preventFoucOfNestedElementsStyles,
5703
- input: {
5704
- position: 'relative',
5705
- '&::before': {
5706
- // Ensures the touch target is at least 24px, even if the checkbox is smaller than the minimum touch target size.
5707
- // This pseudo-element expands the clickable area without affecting the visual size of the checkbox itself.
5708
- content: '""',
5709
- position: 'absolute',
5710
- inset,
5711
- },
5712
- width: dimension,
5713
- height: dimension,
5714
- font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width and height definition based on ex-unit
5715
- display: 'block',
5716
- margin: 0,
5717
- padding: 0,
5718
- WebkitAppearance: 'none', // iOS safari
5719
- appearance: 'none',
5720
- boxSizing: 'content-box',
5721
- background,
5722
- transition: `${getTransition('background-color')}, ${getTransition('border-color')}`,
5723
- border: `${borderWidthBase} solid ${uncheckedColor}`,
5724
- outline: 0, // TODO: only relevant for VRT testing with forced states - prevents :focus style (in case getFocusJssStyle() condition is not matching)
5725
- ...(disabledOrLoading
5726
- ? {
5727
- pointerEvents: 'none', // to prevent form element becomes clickable/toggleable
5728
- }
5729
- : {
5730
- cursor: 'pointer',
5731
- }),
5732
- ...prefersColorSchemeDarkMediaQuery(theme, {
5733
- borderColor: uncheckedColorDark,
5734
- }),
5735
- gridArea: '1/1',
5736
- borderRadius: borderRadiusSmall,
5737
- ...addImportantToEachRule({
5738
- backgroundSize: 'cover',
5739
- }),
5740
- },
5804
+ input: getCheckboxBaseStyles(theme, isDisabled, isLoading, state, compact),
5741
5805
  ...(isLoading
5742
5806
  ? {
5743
5807
  'input:checked': {
@@ -5751,23 +5815,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
5751
5815
  },
5752
5816
  }
5753
5817
  : {
5754
- 'input:checked': {
5755
- borderColor: checkedColor,
5756
- backgroundColor: checkedColor,
5757
- backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColor),
5758
- ...prefersColorSchemeDarkMediaQuery(theme, {
5759
- backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColorDark),
5760
- borderColor: checkedColorDark,
5761
- backgroundColor: checkedColorDark,
5762
- }),
5763
- // This is a workaround for Blink based browsers, which do not reflect the high contrast system colors (e.g.: "Canvas" and "CanvasText") when added to background SVG's.
5764
- ...(isHighContrastMode &&
5765
- getSchemedHighContrastMediaQuery({
5766
- backgroundImage: getCheckedSVGBackgroundImage$1('white'),
5767
- }, {
5768
- backgroundImage: getCheckedSVGBackgroundImage$1('black'),
5769
- })),
5770
- },
5818
+ 'input:checked': getCheckboxCheckedBaseStyles(theme, isDisabled, isLoading, state),
5771
5819
  'input:indeterminate': {
5772
5820
  background, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
5773
5821
  borderColor: uncheckedColor, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
@@ -6925,6 +6973,9 @@ const getDialogStickyAreaJssStyle = (area, theme) => {
6925
6973
  };
6926
6974
  };
6927
6975
 
6976
+ /**
6977
+ * @css-variable {"name": "--p-flyout-width", "description": "Width of the flyout.", "defaultValue": "auto"}
6978
+ */
6928
6979
  const cssVariableWidth$2 = '--p-flyout-width';
6929
6980
  // TODO: we shouldn't expose --p-flyout-max-width
6930
6981
  const cssVariableMaxWidth = '--p-flyout-max-width';
@@ -7525,7 +7576,7 @@ const getUnitCounterJssStyle = (isDisabled, isReadonly, theme) => {
7525
7576
  }),
7526
7577
  ...(isReadonly && {
7527
7578
  color: contrastHighColor,
7528
- })
7579
+ }),
7529
7580
  };
7530
7581
  };
7531
7582
 
@@ -7599,12 +7650,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
7599
7650
  borderColor: primaryColorDark,
7600
7651
  }),
7601
7652
  },
7602
- ...hoverMediaQuery({
7603
- ...(!disabled &&
7604
- !readOnly && {
7653
+ ...(!disabled &&
7654
+ !readOnly &&
7655
+ hoverMediaQuery({
7605
7656
  '&:hover:not(:has(.button:hover, input:focus ))': hoverStyles,
7606
- }),
7607
- }),
7657
+ })),
7608
7658
  ...(disabled && {
7609
7659
  cursor: 'not-allowed',
7610
7660
  color: disabledColor,
@@ -7633,14 +7683,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
7633
7683
  },
7634
7684
  }),
7635
7685
  // .label / .required
7636
- ...getFunctionalComponentLabelStyles(disabled, hideLabel, theme, {
7637
- ...hoverMediaQuery({
7638
- ...(!disabled &&
7639
- !readOnly && {
7640
- '&:hover~.wrapper': hoverStyles,
7641
- }),
7642
- }),
7643
- }),
7686
+ ...getFunctionalComponentLabelStyles(disabled, hideLabel, theme, !disabled &&
7687
+ !readOnly &&
7688
+ hoverMediaQuery({
7689
+ '&:hover~.wrapper': hoverStyles,
7690
+ })),
7644
7691
  // .message
7645
7692
  ...getFunctionalComponentStateMessageStyles(theme, state),
7646
7693
  });
@@ -7682,12 +7729,12 @@ const getComponentCss$K = (icon, iconSource, variant, hideLabel, hasSlottedAncho
7682
7729
  label: {
7683
7730
  clip: addImportantToRule('unset'), // to overrule breakpoint customizable hide-label style
7684
7731
  },
7685
- icon: {
7686
- ...(isPrimary &&
7687
- !isHighContrastMode && {
7732
+ ...(isPrimary &&
7733
+ !isHighContrastMode && {
7734
+ icon: {
7688
7735
  filter: 'invert(1)',
7689
- }),
7690
- },
7736
+ },
7737
+ }),
7691
7738
  }, hasSlottedAnchor && {
7692
7739
  ...(isHighContrastMode && {
7693
7740
  root: {
@@ -8175,6 +8222,11 @@ const getComponentCss$G = (size) => {
8175
8222
  });
8176
8223
  };
8177
8224
 
8225
+ /**
8226
+ * @css-variable {"name": "--p-modal-width", "description": "Width of the modal.", "defaultValue": "auto"}
8227
+ * @css-variable {"name": "--p-modal-spacing-top", "description": "Spacing of the modal to the top.", "defaultValue": "clamp(16px, 10vh, 192px)"}
8228
+ * @css-variable {"name": "--p-modal-spacing-bottom", "description": "Spacing of the modal to the bottom.", "defaultValue": "clamp(16px, 10vh, 192px)"}
8229
+ */
8178
8230
  const cssVariableWidth$1 = '--p-modal-width';
8179
8231
  const cssVariableSpacingTop = '--p-modal-spacing-top'; // TODO: maybe --p-modal-spacing-block-start would be more precise?
8180
8232
  const cssVariableSpacingBottom = '--p-modal-spacing-bottom'; // TODO: maybe --p-modal-spacing-block-end would be more precise?
@@ -8565,7 +8617,10 @@ optionHeight, theme) => {
8565
8617
  };
8566
8618
  };
8567
8619
 
8568
- const getComponentCss$D = (theme) => {
8620
+ const getComponentCss$D = (theme, isDisabled, selected) => {
8621
+ const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${fontLineHeight}))`;
8622
+ const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
8623
+ const paddingTop = `calc((${dimensionFull} - ${fontLineHeight}) / 2)`; // Vertically centers the checkbox label relative to the checkbox size.
8569
8624
  return getCss({
8570
8625
  '@global': {
8571
8626
  ':host': {
@@ -8575,11 +8630,19 @@ const getComponentCss$D = (theme) => {
8575
8630
  ...hostHiddenStyles,
8576
8631
  }),
8577
8632
  },
8578
- ...preventFoucOfNestedElementsStyles,
8633
+ slot: {
8634
+ display: 'block',
8635
+ paddingTop,
8636
+ },
8637
+ },
8638
+ option: {
8639
+ ...getOptionJssStyle('multi-select-option', 1, theme),
8640
+ columnGap: '8px',
8579
8641
  },
8580
- option: getOptionJssStyle('multi-select-option', 1, theme),
8581
8642
  checkbox: {
8582
- pointerEvents: 'none', // Avoid checkbox label click which updates input within p-checkbox-wrapper
8643
+ flexShrink: 0,
8644
+ ...getCheckboxBaseStyles(theme, isDisabled),
8645
+ ...(selected && getCheckboxCheckedBaseStyles(theme, isDisabled)),
8583
8646
  },
8584
8647
  });
8585
8648
  };
@@ -11175,6 +11238,9 @@ const getComponentCss$3 = (isDisabled, isReadonly, hideLabel, state, hasCounter,
11175
11238
  });
11176
11239
  };
11177
11240
 
11241
+ /**
11242
+ * @css-variable {"name": "--p-toast-position-bottom", "description": "Defines the spacing between the toast and the bottom edge of its container.", "defaultValue": "56px"}
11243
+ */
11178
11244
  const cssVariablePositionBottom = '--p-toast-position-bottom'; // CSS custom property exposed as public interface
11179
11245
  const cssVariablePositionBottomInternal = '--p-internal-toast-position-bottom';
11180
11246
  const ANIMATION_DURATION = motionDurationModerate;
@@ -3449,10 +3449,6 @@ function debounce(fn, ms = 800) {
3449
3449
  };
3450
3450
  }
3451
3451
 
3452
- const getRole = (state) => {
3453
- return state === 'error' ? 'alert' : state === 'success' ? 'status' : null;
3454
- };
3455
-
3456
3452
  const isWithinForm = (host) => !!getClosestHTMLElement(host, 'form');
3457
3453
 
3458
3454
  const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
@@ -3955,7 +3951,6 @@ exports.getInlineNotificationIconName = getInlineNotificationIconName;
3955
3951
  exports.getInnerManifest = getInnerManifest;
3956
3952
  exports.getListAriaAttributes = getListAriaAttributes;
3957
3953
  exports.getOptionAriaAttributes = getOptionAriaAttributes;
3958
- exports.getRole = getRole;
3959
3954
  exports.getSegmentedControlItemAriaAttributes = getSegmentedControlItemAriaAttributes;
3960
3955
  exports.getSelectedOptionMap = getSelectedOptionMap;
3961
3956
  exports.getSelectedOptionString = getSelectedOptionString;
@@ -10,7 +10,7 @@ var inlineNotification_wrapper = require('../components/inline-notification.wrap
10
10
 
11
11
  /**
12
12
  * @slot {"name": "heading", "description": "Defines the heading used in the banner. Can be used alternatively to the heading prop. Can be used for rich content.", "hasAltProp": true }
13
- * @slot {"name": "title", "description": "Defines the title used in the banner. Can be used alternatively to the heading prop. Can be used for rich content.", "hasAltProp": true }
13
+ * @slot {"name": "title", "description": "Please use the heading prop or slot=\"heading\" instead.", "hasAltProp": true, "isDeprecated": true }
14
14
  * @slot {"name": "description", "description": "Defines the description used in the banner. Can be used alternatively to the description prop. Can be used for rich content.", "hasAltProp": true }
15
15
  *
16
16
  * @controlled {"props": ["open"], "event": "dismiss"}
@@ -33,10 +33,12 @@ class DSRCanvas extends react.Component {
33
33
  hasSidebarEndHeader;
34
34
  hasFooter;
35
35
  hasBackground;
36
- sidebarStart;
37
- sidebarEnd;
38
- root;
39
- header;
36
+ // TODO: Produces bug when using text-field-wrapper which looses focus
37
+ // private sidebarStart: any;
38
+ // private sidebarEnd: any;
39
+ // private root: any;
40
+ // private header: any;
41
+ //
40
42
  render() {
41
43
  const { children, namedSlotChildren, otherChildren } = splitChildren.splitChildren(this.props.children);
42
44
  const hasTitle = namedSlotChildren.filter(({ props: { slot } }) => slot === 'title').length > 0;
@@ -10,7 +10,7 @@ var utilsEntry = require('../../../../../../components/dist/utils/esm/utils-entr
10
10
  var icon_wrapper = require('../components/icon.wrapper.cjs');
11
11
 
12
12
  /**
13
- * @slot {"name": "", "description": "Default slot to render the link label." }
13
+ * @slot {"name": "", "description": "Default slot to render the link label. This slot can be used to slot an anchor tag instead of using the href prop." }
14
14
  */
15
15
  class DSRLink extends react.Component {
16
16
  host;
@@ -1,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
- require('../../provider.cjs');
6
4
  var splitChildren = require('../../splitChildren.cjs');
5
+ var react = require('react');
7
6
  var minifyCss = require('../../minifyCss.cjs');
8
7
  var stylesEntry = require('../../../../../../components/dist/styles/esm/styles-entry.cjs');
9
8
 
@@ -14,9 +13,9 @@ class DSRMultiSelectOption extends react.Component {
14
13
  host;
15
14
  render() {
16
15
  splitChildren.splitChildren(this.props.children);
17
- const { theme = 'light', selected, highlighted } = this.props;
18
- this.props.disabled || this.props.disabledParent;
19
- minifyCss.minifyCss(stylesEntry.getMultiSelectOptionCss(theme));
16
+ const { theme = 'light', selected: isSelected, highlighted } = this.props;
17
+ const isDisabled = this.props.disabled || this.props.disabledParent;
18
+ minifyCss.minifyCss(stylesEntry.getMultiSelectOptionCss(theme, isDisabled, isSelected));
20
19
  return (jsxRuntime.jsx(jsxRuntime.Fragment, {}));
21
20
  }
22
21
  }
@@ -3,13 +3,17 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  require('react');
5
5
  require('../../provider.cjs');
6
- var utilsEntry = require('../../../../../../components/dist/utils/esm/utils-entry.cjs');
7
6
  var icon_wrapper = require('../components/icon.wrapper.cjs');
8
7
 
9
8
  const messageId = 'message';
10
9
  const StateMessage = ({ hasMessage, state, message, theme }) => {
11
10
  const isErrorState = state === 'error';
12
- return (hasMessage && (jsxRuntime.jsxs("span", { id: messageId, className: "message", role: utilsEntry.getRole(state), children: [jsxRuntime.jsx(icon_wrapper.PIcon, { name: isErrorState ? 'exclamation' : 'check', color: isErrorState ? 'notification-error' : 'notification-success', theme: theme, "aria-hidden": "true" }), message || jsxRuntime.jsx("slot", { name: "message" })] })));
11
+ return (
12
+ // needs to be rendered always to have correct behaviour for screen readers
13
+ jsxRuntime.jsx("span", { id: messageId, className: "message", role: state === 'success' ? 'status' : 'alert', children: hasMessage && [
14
+ jsxRuntime.jsx(icon_wrapper.PIcon, { name: isErrorState ? 'exclamation' : 'check', color: isErrorState ? 'notification-error' : 'notification-success', theme: theme, "aria-hidden": "true" }),
15
+ message || jsxRuntime.jsx("slot", { name: "message" }),
16
+ ] }));
13
17
  };
14
18
 
15
19
  exports.StateMessage = StateMessage;