@porsche-design-system/components-react 4.4.0 → 4.5.0-rc.0
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 +14 -0
- package/package.json +5 -5
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +36 -14
- package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +1 -1
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +36 -14
- package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
|
|
|
14
14
|
|
|
15
15
|
## [Unreleased]
|
|
16
16
|
|
|
17
|
+
## [4.5.0-rc.0] - 2026-07-17
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- `AG Grid`: Bumped peer dependency to support AG Grid new major version 36
|
|
22
|
+
([#4553](https://github.com/porsche-design-system/porsche-design-system/pull/4553))
|
|
23
|
+
- `Popover`: Aligned shadowed popover trigger button style with button-pure
|
|
24
|
+
([#4596](https://github.com/porsche-design-system/porsche-design-system/pull/4596))
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- `Popover`: A `margin` set on the host is now applied to the shadowed trigger button
|
|
29
|
+
([#4596](https://github.com/porsche-design-system/porsche-design-system/pull/4596))
|
|
30
|
+
|
|
17
31
|
## [4.4.0] - 2026-07-15
|
|
18
32
|
|
|
19
33
|
## [4.4.0-rc.1] - 2026-07-10
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porsche-design-system/components-react",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0-rc.0",
|
|
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",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"url": "https://github.com/porsche-design-system/porsche-design-system"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@porsche-design-system/components-js": "4.
|
|
24
|
+
"@porsche-design-system/components-js": "4.5.0-rc.0"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"ag-grid-community": ">=
|
|
28
|
-
"ag-grid-enterprise": ">=
|
|
29
|
-
"ag-grid-react": ">=
|
|
27
|
+
"ag-grid-community": ">= 36.0.0 <37.0.0",
|
|
28
|
+
"ag-grid-enterprise": ">= 36.0.0 <37.0.0",
|
|
29
|
+
"ag-grid-react": ">= 36.0.0 <37.0.0",
|
|
30
30
|
"react": ">=19.0.0 <20.0.0",
|
|
31
31
|
"react-dom": ">=19.0.0 <20.0.0",
|
|
32
32
|
"tailwindcss": ">= 4.0.0 <5.0.0"
|
|
@@ -3849,7 +3849,7 @@ const OPTION_LIST_SAFE_ZONE = 6;
|
|
|
3849
3849
|
|
|
3850
3850
|
const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
|
|
3851
3851
|
|
|
3852
|
-
const prefix = `[Porsche Design System v${"4.
|
|
3852
|
+
const prefix = `[Porsche Design System v${"4.5.0-rc.0"}]` // this part isn't covered by unit tests
|
|
3853
3853
|
;
|
|
3854
3854
|
const consoleError = (...messages) => {
|
|
3855
3855
|
console.error(prefix, ...messages);
|
|
@@ -5751,8 +5751,6 @@ const getFunctionalComponentLabelAfterStyles = () => {
|
|
|
5751
5751
|
// last line. `:host(:has([slot="label-after"]))` would be an alternative but lacks reliable Chrome support for now.
|
|
5752
5752
|
'&::slotted(*)': {
|
|
5753
5753
|
...addImportantToEachRule({
|
|
5754
|
-
display: 'inline-block',
|
|
5755
|
-
verticalAlign: 'top',
|
|
5756
5754
|
marginInlineStart: ref(spacingStaticXs$1),
|
|
5757
5755
|
}),
|
|
5758
5756
|
},
|
|
@@ -8442,6 +8440,13 @@ const getComponentCss$w = (hideLabel, state, isDisabled, isLoading, length, isCo
|
|
|
8442
8440
|
// Minimum gap (in px) kept between the panel and the viewport edges. Used both as Floating UI `shift`/`flip` padding
|
|
8443
8441
|
// and to inset the panel's default max-width/height (`100dvw/dvh - 2 * POPOVER_SAFE_ZONE`) so it never touches the edge.
|
|
8444
8442
|
const POPOVER_SAFE_ZONE = 8;
|
|
8443
|
+
// Arrow geometry (in px), single source of truth shared by the JSS `.arrow` rule (`popover-styles.ts`) and the
|
|
8444
|
+
// runtime positioning/orientation logic (`popover.tsx`). Named by geometry rather than `width`/`height` because the
|
|
8445
|
+
// arrow is rotated per placement, so its rendered CSS `width`/`height` swap depending on the panel edge it attaches to.
|
|
8446
|
+
// - `POPOVER_ARROW_BASE`: length of the triangle's base along the panel edge.
|
|
8447
|
+
// - `POPOVER_ARROW_THICKNESS`: depth of the triangle perpendicular to the panel edge (how far it protrudes).
|
|
8448
|
+
const POPOVER_ARROW_BASE = 24;
|
|
8449
|
+
const POPOVER_ARROW_THICKNESS = 12;
|
|
8445
8450
|
|
|
8446
8451
|
/**
|
|
8447
8452
|
* @css-variable {"name": "--p-popover-w", "description": "Width of the popover.", "defaultValue": "max-content"}
|
|
@@ -8505,6 +8510,9 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8505
8510
|
// flow. Enabled by anchoring Floating UI to the assigned trigger element (see `triggerElement` in popover.tsx)
|
|
8506
8511
|
// instead of the `<slot>` box, so the slot no longer needs a layout box of its own.
|
|
8507
8512
|
display: 'contents',
|
|
8513
|
+
// Explicit baseline (matches the `margin` initial value) that the trigger button inherits via `margin: inherit`.
|
|
8514
|
+
// A consumer margin on the host (`p-popover { margin: … }`) overrides this and thus flows through to the button.
|
|
8515
|
+
margin: '0',
|
|
8508
8516
|
...addImportantToEachRule(hostHiddenStyles),
|
|
8509
8517
|
},
|
|
8510
8518
|
'slot:not([name]), p': {
|
|
@@ -8522,30 +8530,43 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8522
8530
|
},
|
|
8523
8531
|
button: {
|
|
8524
8532
|
all: 'unset',
|
|
8533
|
+
// The :host uses `display: contents` and thus has no box of its own, so a consumer-defined margin on the host
|
|
8534
|
+
// (e.g. `p-popover { margin: … }`) would be dropped. `inherit` forwards that margin onto the actual trigger button.
|
|
8535
|
+
margin: 'inherit',
|
|
8525
8536
|
display: 'inline-grid',
|
|
8526
8537
|
verticalAlign: 'top',
|
|
8527
8538
|
font: `${ref(typescaleSm$1)} ${ref(fontPorscheNext$1)}`, // needed for correct width/height definition based on ex-unit
|
|
8528
8539
|
width: ref(leadingNormal$1),
|
|
8529
8540
|
height: ref(leadingNormal$1),
|
|
8530
|
-
borderRadius: ref(radiusFull),
|
|
8531
8541
|
cursor: 'pointer',
|
|
8532
|
-
background: ref(colorFrosted),
|
|
8533
|
-
transition: getTransition('background-color'),
|
|
8534
|
-
WebkitBackdropFilter: ref(blurFrosted),
|
|
8535
|
-
backdropFilter: ref(blurFrosted),
|
|
8536
8542
|
...hoverMediaQuery({
|
|
8537
|
-
'&:hover': {
|
|
8538
|
-
background: ref(
|
|
8543
|
+
'&:hover::before': {
|
|
8544
|
+
background: ref(colorFrostedStrong),
|
|
8545
|
+
WebkitBackdropFilter: ref(blurFrosted),
|
|
8546
|
+
backdropFilter: ref(blurFrosted),
|
|
8539
8547
|
},
|
|
8540
8548
|
}),
|
|
8541
|
-
'&:focus-visible': getFocusBaseStyles(),
|
|
8549
|
+
'&:focus-visible::before': getFocusBaseStyles(),
|
|
8550
|
+
'&::before': {
|
|
8551
|
+
gridArea: '1/1',
|
|
8552
|
+
content: '""',
|
|
8553
|
+
margin: '-2px',
|
|
8554
|
+
transition: getTransition('background-color'),
|
|
8555
|
+
borderRadius: ref(radiusFull),
|
|
8556
|
+
...(isOpen && {
|
|
8557
|
+
background: ref(colorFrosted),
|
|
8558
|
+
WebkitBackdropFilter: ref(blurFrosted),
|
|
8559
|
+
backdropFilter: ref(blurFrosted),
|
|
8560
|
+
}),
|
|
8561
|
+
},
|
|
8542
8562
|
'&::after': {
|
|
8563
|
+
gridArea: '1/1',
|
|
8543
8564
|
content: '""',
|
|
8544
8565
|
WebkitMask: `${iconInfo} center/contain no-repeat`, // necessary for Sogou browser support :-)
|
|
8545
8566
|
mask: `${iconInfo} center/contain no-repeat`,
|
|
8546
8567
|
background: ref(colorPrimary),
|
|
8547
8568
|
...forcedColorsMediaQuery({
|
|
8548
|
-
background: '
|
|
8569
|
+
background: 'ButtonText',
|
|
8549
8570
|
}),
|
|
8550
8571
|
},
|
|
8551
8572
|
},
|
|
@@ -8606,8 +8627,9 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8606
8627
|
},
|
|
8607
8628
|
arrow: {
|
|
8608
8629
|
position: 'absolute',
|
|
8609
|
-
|
|
8610
|
-
|
|
8630
|
+
// Resting orientation (bottom placement): base spans the panel edge, thickness protrudes towards the trigger.
|
|
8631
|
+
width: `${POPOVER_ARROW_BASE}px`,
|
|
8632
|
+
height: `${POPOVER_ARROW_THICKNESS}px`,
|
|
8611
8633
|
clipPath: 'polygon(50% 0, 100% 110%, 0 110%)',
|
|
8612
8634
|
background: 'inherit',
|
|
8613
8635
|
...forcedColorsMediaQuery({
|
|
@@ -3482,7 +3482,7 @@ const hasShowPickerSupport = () => (hasDocument &&
|
|
|
3482
3482
|
'showPicker' in HTMLInputElement.prototype &&
|
|
3483
3483
|
CSS.supports('selector(::-webkit-calendar-picker-indicator)'));
|
|
3484
3484
|
|
|
3485
|
-
const prefix = `[Porsche Design System v${"4.
|
|
3485
|
+
const prefix = `[Porsche Design System v${"4.5.0-rc.0"}]` // this part isn't covered by unit tests
|
|
3486
3486
|
;
|
|
3487
3487
|
const consoleError$1 = (...messages) => {
|
|
3488
3488
|
console.error(prefix, ...messages);
|
|
@@ -3847,7 +3847,7 @@ const OPTION_LIST_SAFE_ZONE = 6;
|
|
|
3847
3847
|
|
|
3848
3848
|
const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
|
|
3849
3849
|
|
|
3850
|
-
const prefix = `[Porsche Design System v${"4.
|
|
3850
|
+
const prefix = `[Porsche Design System v${"4.5.0-rc.0"}]` // this part isn't covered by unit tests
|
|
3851
3851
|
;
|
|
3852
3852
|
const consoleError = (...messages) => {
|
|
3853
3853
|
console.error(prefix, ...messages);
|
|
@@ -5749,8 +5749,6 @@ const getFunctionalComponentLabelAfterStyles = () => {
|
|
|
5749
5749
|
// last line. `:host(:has([slot="label-after"]))` would be an alternative but lacks reliable Chrome support for now.
|
|
5750
5750
|
'&::slotted(*)': {
|
|
5751
5751
|
...addImportantToEachRule({
|
|
5752
|
-
display: 'inline-block',
|
|
5753
|
-
verticalAlign: 'top',
|
|
5754
5752
|
marginInlineStart: ref(spacingStaticXs$1),
|
|
5755
5753
|
}),
|
|
5756
5754
|
},
|
|
@@ -8440,6 +8438,13 @@ const getComponentCss$w = (hideLabel, state, isDisabled, isLoading, length, isCo
|
|
|
8440
8438
|
// Minimum gap (in px) kept between the panel and the viewport edges. Used both as Floating UI `shift`/`flip` padding
|
|
8441
8439
|
// and to inset the panel's default max-width/height (`100dvw/dvh - 2 * POPOVER_SAFE_ZONE`) so it never touches the edge.
|
|
8442
8440
|
const POPOVER_SAFE_ZONE = 8;
|
|
8441
|
+
// Arrow geometry (in px), single source of truth shared by the JSS `.arrow` rule (`popover-styles.ts`) and the
|
|
8442
|
+
// runtime positioning/orientation logic (`popover.tsx`). Named by geometry rather than `width`/`height` because the
|
|
8443
|
+
// arrow is rotated per placement, so its rendered CSS `width`/`height` swap depending on the panel edge it attaches to.
|
|
8444
|
+
// - `POPOVER_ARROW_BASE`: length of the triangle's base along the panel edge.
|
|
8445
|
+
// - `POPOVER_ARROW_THICKNESS`: depth of the triangle perpendicular to the panel edge (how far it protrudes).
|
|
8446
|
+
const POPOVER_ARROW_BASE = 24;
|
|
8447
|
+
const POPOVER_ARROW_THICKNESS = 12;
|
|
8443
8448
|
|
|
8444
8449
|
/**
|
|
8445
8450
|
* @css-variable {"name": "--p-popover-w", "description": "Width of the popover.", "defaultValue": "max-content"}
|
|
@@ -8503,6 +8508,9 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8503
8508
|
// flow. Enabled by anchoring Floating UI to the assigned trigger element (see `triggerElement` in popover.tsx)
|
|
8504
8509
|
// instead of the `<slot>` box, so the slot no longer needs a layout box of its own.
|
|
8505
8510
|
display: 'contents',
|
|
8511
|
+
// Explicit baseline (matches the `margin` initial value) that the trigger button inherits via `margin: inherit`.
|
|
8512
|
+
// A consumer margin on the host (`p-popover { margin: … }`) overrides this and thus flows through to the button.
|
|
8513
|
+
margin: '0',
|
|
8506
8514
|
...addImportantToEachRule(hostHiddenStyles),
|
|
8507
8515
|
},
|
|
8508
8516
|
'slot:not([name]), p': {
|
|
@@ -8520,30 +8528,43 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8520
8528
|
},
|
|
8521
8529
|
button: {
|
|
8522
8530
|
all: 'unset',
|
|
8531
|
+
// The :host uses `display: contents` and thus has no box of its own, so a consumer-defined margin on the host
|
|
8532
|
+
// (e.g. `p-popover { margin: … }`) would be dropped. `inherit` forwards that margin onto the actual trigger button.
|
|
8533
|
+
margin: 'inherit',
|
|
8523
8534
|
display: 'inline-grid',
|
|
8524
8535
|
verticalAlign: 'top',
|
|
8525
8536
|
font: `${ref(typescaleSm$1)} ${ref(fontPorscheNext$1)}`, // needed for correct width/height definition based on ex-unit
|
|
8526
8537
|
width: ref(leadingNormal$1),
|
|
8527
8538
|
height: ref(leadingNormal$1),
|
|
8528
|
-
borderRadius: ref(radiusFull),
|
|
8529
8539
|
cursor: 'pointer',
|
|
8530
|
-
background: ref(colorFrosted),
|
|
8531
|
-
transition: getTransition('background-color'),
|
|
8532
|
-
WebkitBackdropFilter: ref(blurFrosted),
|
|
8533
|
-
backdropFilter: ref(blurFrosted),
|
|
8534
8540
|
...hoverMediaQuery({
|
|
8535
|
-
'&:hover': {
|
|
8536
|
-
background: ref(
|
|
8541
|
+
'&:hover::before': {
|
|
8542
|
+
background: ref(colorFrostedStrong),
|
|
8543
|
+
WebkitBackdropFilter: ref(blurFrosted),
|
|
8544
|
+
backdropFilter: ref(blurFrosted),
|
|
8537
8545
|
},
|
|
8538
8546
|
}),
|
|
8539
|
-
'&:focus-visible': getFocusBaseStyles(),
|
|
8547
|
+
'&:focus-visible::before': getFocusBaseStyles(),
|
|
8548
|
+
'&::before': {
|
|
8549
|
+
gridArea: '1/1',
|
|
8550
|
+
content: '""',
|
|
8551
|
+
margin: '-2px',
|
|
8552
|
+
transition: getTransition('background-color'),
|
|
8553
|
+
borderRadius: ref(radiusFull),
|
|
8554
|
+
...(isOpen && {
|
|
8555
|
+
background: ref(colorFrosted),
|
|
8556
|
+
WebkitBackdropFilter: ref(blurFrosted),
|
|
8557
|
+
backdropFilter: ref(blurFrosted),
|
|
8558
|
+
}),
|
|
8559
|
+
},
|
|
8540
8560
|
'&::after': {
|
|
8561
|
+
gridArea: '1/1',
|
|
8541
8562
|
content: '""',
|
|
8542
8563
|
WebkitMask: `${iconInfo} center/contain no-repeat`, // necessary for Sogou browser support :-)
|
|
8543
8564
|
mask: `${iconInfo} center/contain no-repeat`,
|
|
8544
8565
|
background: ref(colorPrimary),
|
|
8545
8566
|
...forcedColorsMediaQuery({
|
|
8546
|
-
background: '
|
|
8567
|
+
background: 'ButtonText',
|
|
8547
8568
|
}),
|
|
8548
8569
|
},
|
|
8549
8570
|
},
|
|
@@ -8604,8 +8625,9 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8604
8625
|
},
|
|
8605
8626
|
arrow: {
|
|
8606
8627
|
position: 'absolute',
|
|
8607
|
-
|
|
8608
|
-
|
|
8628
|
+
// Resting orientation (bottom placement): base spans the panel edge, thickness protrudes towards the trigger.
|
|
8629
|
+
width: `${POPOVER_ARROW_BASE}px`,
|
|
8630
|
+
height: `${POPOVER_ARROW_THICKNESS}px`,
|
|
8609
8631
|
clipPath: 'polygon(50% 0, 100% 110%, 0 110%)',
|
|
8610
8632
|
background: 'inherit',
|
|
8611
8633
|
...forcedColorsMediaQuery({
|
|
@@ -3480,7 +3480,7 @@ const hasShowPickerSupport = () => (hasDocument &&
|
|
|
3480
3480
|
'showPicker' in HTMLInputElement.prototype &&
|
|
3481
3481
|
CSS.supports('selector(::-webkit-calendar-picker-indicator)'));
|
|
3482
3482
|
|
|
3483
|
-
const prefix = `[Porsche Design System v${"4.
|
|
3483
|
+
const prefix = `[Porsche Design System v${"4.5.0-rc.0"}]` // this part isn't covered by unit tests
|
|
3484
3484
|
;
|
|
3485
3485
|
const consoleError$1 = (...messages) => {
|
|
3486
3486
|
console.error(prefix, ...messages);
|