@porsche-design-system/components-react 4.5.0-rc.0 → 4.5.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 +12 -0
- package/package.json +2 -2
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +24 -17
- package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +1 -1
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +24 -17
- package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,18 @@ 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] - 2026-07-21
|
|
18
|
+
|
|
19
|
+
## [4.5.0-rc.1] - 2026-07-20
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- `Flyout`, `Modal`, `Sheet` ([#4602](https://github.com/porsche-design-system/porsche-design-system/pull/4602)):
|
|
24
|
+
- focus ring color of dismiss button
|
|
25
|
+
- hover color visibility of dismiss button
|
|
26
|
+
- `Popover`: Trigger icon no longer gets squished when placed inside a constrained flex/grid parent
|
|
27
|
+
([#4602](https://github.com/porsche-design-system/porsche-design-system/pull/4602))
|
|
28
|
+
|
|
17
29
|
## [4.5.0-rc.0] - 2026-07-17
|
|
18
30
|
|
|
19
31
|
### Changed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porsche-design-system/components-react",
|
|
3
|
-
"version": "4.5.0
|
|
3
|
+
"version": "4.5.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,7 +21,7 @@
|
|
|
21
21
|
"url": "https://github.com/porsche-design-system/porsche-design-system"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@porsche-design-system/components-js": "4.5.0
|
|
24
|
+
"@porsche-design-system/components-js": "4.5.0"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"ag-grid-community": ">= 36.0.0 <37.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.5.0
|
|
3852
|
+
const prefix = `[Porsche Design System v${"4.5.0"}]` // this part isn't covered by unit tests
|
|
3853
3853
|
;
|
|
3854
3854
|
const consoleError = (...messages) => {
|
|
3855
3855
|
console.error(prefix, ...messages);
|
|
@@ -4289,17 +4289,19 @@ const weightMap = {
|
|
|
4289
4289
|
// Inlined `close` icon (mirrors packages/assets/projects/icons/src/close.svg) rendered as a CSS mask, so the dismiss
|
|
4290
4290
|
// button needs neither a nested `p-button` nor a `p-icon` (which would fetch the SVG from the CDN asynchronously).
|
|
4291
4291
|
const iconClose = getInlineSVGBackgroundImage('<path d="m18 6.706-5.294 5.294 5.294 5.294-.706.706-5.294-5.294-5.294 5.294-.706-.706 5.294-5.294-5.294-5.294.706-.706 5.294 5.294 5.294-5.294z"/>');
|
|
4292
|
-
// NOTE: Values copied (and reduced to the fixed `compact` + `hideLabel` case the dismiss button always uses) from
|
|
4293
|
-
// `getVariantColors` in `packages/components/src/styles/link-button-styles.ts` to keep the visual identical to the
|
|
4294
|
-
// previously nested `p-button`. If the shared button styling changes, mirror it here (or extract a shared helper).
|
|
4295
4292
|
const getVariantColors$1 = (variant) => {
|
|
4296
4293
|
const colors = {
|
|
4297
|
-
|
|
4298
|
-
textColor: ref(
|
|
4299
|
-
backgroundColor: ref(
|
|
4300
|
-
backgroundColorHover: ref(
|
|
4294
|
+
canvas: {
|
|
4295
|
+
textColor: ref(colorPrimary),
|
|
4296
|
+
backgroundColor: ref(colorCanvas),
|
|
4297
|
+
backgroundColorHover: ref(colorSurface),
|
|
4301
4298
|
},
|
|
4302
|
-
|
|
4299
|
+
surface: {
|
|
4300
|
+
textColor: ref(colorPrimary),
|
|
4301
|
+
backgroundColor: ref(colorSurface),
|
|
4302
|
+
backgroundColorHover: ref(colorCanvas),
|
|
4303
|
+
},
|
|
4304
|
+
frosted: {
|
|
4303
4305
|
textColor: ref(colorPrimary),
|
|
4304
4306
|
backgroundColor: ref(colorFrostedStrong),
|
|
4305
4307
|
backgroundColorHover: ref(colorFrosted),
|
|
@@ -4333,7 +4335,7 @@ const getFCDismissButtonStyles = (variant) => {
|
|
|
4333
4335
|
// opaque `primary` background it is invisible AND — because the dialog consumer additionally applies
|
|
4334
4336
|
// `filter: invert(1)` on the same element (see `getDialogDismissButtonJssStyle`) — the blurred backdrop bleeds past
|
|
4335
4337
|
// the circular edge and the invert amplifies it into a visible glow/halo. So it is applied for `secondary` only.
|
|
4336
|
-
...(variant === '
|
|
4338
|
+
...(variant === 'frosted' && {
|
|
4337
4339
|
WebkitBackdropFilter: ref(blurFrosted),
|
|
4338
4340
|
backdropFilter: ref(blurFrosted),
|
|
4339
4341
|
}),
|
|
@@ -4417,7 +4419,7 @@ const getFunctionalComponentNotificationBaseStyles = (state, hasAction, hasDismi
|
|
|
4417
4419
|
...(hasDismissButton && {
|
|
4418
4420
|
dismiss: {
|
|
4419
4421
|
// native dismiss button visual (secondary variant); grid positioning is applied on top
|
|
4420
|
-
...getFCDismissButtonStyles('
|
|
4422
|
+
...getFCDismissButtonStyles('frosted'),
|
|
4421
4423
|
gridArea: `1/4/-1`,
|
|
4422
4424
|
alignSelf: 'flex-start',
|
|
4423
4425
|
marginBlock: `calc(-6 * ${ref(spacingStatic2Xs)})`,
|
|
@@ -6040,11 +6042,11 @@ const getDialogTransitionJssStyle = (isVisible, slideIn) => {
|
|
|
6040
6042
|
transition: `${getTransition('opacity', duration, easing)}, ${getTransition('transform', duration, easing)}`,
|
|
6041
6043
|
};
|
|
6042
6044
|
};
|
|
6043
|
-
const getDialogDismissButtonJssStyle = () => {
|
|
6045
|
+
const getDialogDismissButtonJssStyle = (variant) => {
|
|
6044
6046
|
return {
|
|
6045
6047
|
// native dismiss button visual (primary variant); positioning + the `invert` filter (renders it light on the
|
|
6046
6048
|
// dialog) are applied on top below
|
|
6047
|
-
...getFCDismissButtonStyles(
|
|
6049
|
+
...getFCDismissButtonStyles(variant),
|
|
6048
6050
|
gridArea: '1/3',
|
|
6049
6051
|
zIndex: 5, // controls layering + creates new stacking context (prevents content within to be above other dialog areas)
|
|
6050
6052
|
position: 'sticky',
|
|
@@ -6052,7 +6054,6 @@ const getDialogDismissButtonJssStyle = () => {
|
|
|
6052
6054
|
marginTop: `calc(-1 * ${dialogPaddingTop} + ${ref(spacingFluidSm)})`,
|
|
6053
6055
|
marginInlineEnd: ref(spacingFluidSm),
|
|
6054
6056
|
placeSelf: 'flex-start flex-end',
|
|
6055
|
-
filter: 'invert(1) brightness(1.02)',
|
|
6056
6057
|
};
|
|
6057
6058
|
};
|
|
6058
6059
|
const getSlotJssStyle = () => {
|
|
@@ -7252,7 +7253,7 @@ const getComponentCss$V = (isOpen, background, backdrop, position, hasHeader, ha
|
|
|
7252
7253
|
gridTemplateRows: hasHeader ? 'auto 1fr auto' : '1fr',
|
|
7253
7254
|
}),
|
|
7254
7255
|
},
|
|
7255
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
7256
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
7256
7257
|
});
|
|
7257
7258
|
};
|
|
7258
7259
|
|
|
@@ -8066,7 +8067,7 @@ const getComponentCss$C = (isOpen, background, backdrop, fullscreen, hasDismissB
|
|
|
8066
8067
|
}),
|
|
8067
8068
|
},
|
|
8068
8069
|
...(hasDismissButton && {
|
|
8069
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
8070
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
8070
8071
|
}),
|
|
8071
8072
|
});
|
|
8072
8073
|
};
|
|
@@ -8538,6 +8539,12 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8538
8539
|
font: `${ref(typescaleSm$1)} ${ref(fontPorscheNext$1)}`, // needed for correct width/height definition based on ex-unit
|
|
8539
8540
|
width: ref(leadingNormal$1),
|
|
8540
8541
|
height: ref(leadingNormal$1),
|
|
8542
|
+
// The :host uses `display: contents`, so this fixed-size trigger button becomes the flex/grid item in the
|
|
8543
|
+
// consumer's layout (e.g. p-accordion's `summary-after` slot, which is `display: flex`). Its visible box is drawn
|
|
8544
|
+
// purely by the `::before`/`::after` pseudo-elements (icon `mask`), so it has no intrinsic content width and its
|
|
8545
|
+
// automatic minimum size collapses towards 0 — a competing sibling (e.g. long summary text) would otherwise
|
|
8546
|
+
// squeeze the info icon flat. `flex: none` keeps the icon at its intended size instead of shrinking.
|
|
8547
|
+
flex: 'none',
|
|
8541
8548
|
cursor: 'pointer',
|
|
8542
8549
|
...hoverMediaQuery({
|
|
8543
8550
|
'&:hover::before': {
|
|
@@ -9277,7 +9284,7 @@ const getComponentCss$n = (isOpen, background, hasDismissButton) => {
|
|
|
9277
9284
|
}),
|
|
9278
9285
|
},
|
|
9279
9286
|
...(hasDismissButton && {
|
|
9280
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
9287
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
9281
9288
|
}),
|
|
9282
9289
|
});
|
|
9283
9290
|
};
|
|
@@ -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.5.0
|
|
3485
|
+
const prefix = `[Porsche Design System v${"4.5.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.5.0
|
|
3850
|
+
const prefix = `[Porsche Design System v${"4.5.0"}]` // this part isn't covered by unit tests
|
|
3851
3851
|
;
|
|
3852
3852
|
const consoleError = (...messages) => {
|
|
3853
3853
|
console.error(prefix, ...messages);
|
|
@@ -4287,17 +4287,19 @@ const weightMap = {
|
|
|
4287
4287
|
// Inlined `close` icon (mirrors packages/assets/projects/icons/src/close.svg) rendered as a CSS mask, so the dismiss
|
|
4288
4288
|
// button needs neither a nested `p-button` nor a `p-icon` (which would fetch the SVG from the CDN asynchronously).
|
|
4289
4289
|
const iconClose = getInlineSVGBackgroundImage('<path d="m18 6.706-5.294 5.294 5.294 5.294-.706.706-5.294-5.294-5.294 5.294-.706-.706 5.294-5.294-5.294-5.294.706-.706 5.294 5.294 5.294-5.294z"/>');
|
|
4290
|
-
// NOTE: Values copied (and reduced to the fixed `compact` + `hideLabel` case the dismiss button always uses) from
|
|
4291
|
-
// `getVariantColors` in `packages/components/src/styles/link-button-styles.ts` to keep the visual identical to the
|
|
4292
|
-
// previously nested `p-button`. If the shared button styling changes, mirror it here (or extract a shared helper).
|
|
4293
4290
|
const getVariantColors$1 = (variant) => {
|
|
4294
4291
|
const colors = {
|
|
4295
|
-
|
|
4296
|
-
textColor: ref(
|
|
4297
|
-
backgroundColor: ref(
|
|
4298
|
-
backgroundColorHover: ref(
|
|
4292
|
+
canvas: {
|
|
4293
|
+
textColor: ref(colorPrimary),
|
|
4294
|
+
backgroundColor: ref(colorCanvas),
|
|
4295
|
+
backgroundColorHover: ref(colorSurface),
|
|
4299
4296
|
},
|
|
4300
|
-
|
|
4297
|
+
surface: {
|
|
4298
|
+
textColor: ref(colorPrimary),
|
|
4299
|
+
backgroundColor: ref(colorSurface),
|
|
4300
|
+
backgroundColorHover: ref(colorCanvas),
|
|
4301
|
+
},
|
|
4302
|
+
frosted: {
|
|
4301
4303
|
textColor: ref(colorPrimary),
|
|
4302
4304
|
backgroundColor: ref(colorFrostedStrong),
|
|
4303
4305
|
backgroundColorHover: ref(colorFrosted),
|
|
@@ -4331,7 +4333,7 @@ const getFCDismissButtonStyles = (variant) => {
|
|
|
4331
4333
|
// opaque `primary` background it is invisible AND — because the dialog consumer additionally applies
|
|
4332
4334
|
// `filter: invert(1)` on the same element (see `getDialogDismissButtonJssStyle`) — the blurred backdrop bleeds past
|
|
4333
4335
|
// the circular edge and the invert amplifies it into a visible glow/halo. So it is applied for `secondary` only.
|
|
4334
|
-
...(variant === '
|
|
4336
|
+
...(variant === 'frosted' && {
|
|
4335
4337
|
WebkitBackdropFilter: ref(blurFrosted),
|
|
4336
4338
|
backdropFilter: ref(blurFrosted),
|
|
4337
4339
|
}),
|
|
@@ -4415,7 +4417,7 @@ const getFunctionalComponentNotificationBaseStyles = (state, hasAction, hasDismi
|
|
|
4415
4417
|
...(hasDismissButton && {
|
|
4416
4418
|
dismiss: {
|
|
4417
4419
|
// native dismiss button visual (secondary variant); grid positioning is applied on top
|
|
4418
|
-
...getFCDismissButtonStyles('
|
|
4420
|
+
...getFCDismissButtonStyles('frosted'),
|
|
4419
4421
|
gridArea: `1/4/-1`,
|
|
4420
4422
|
alignSelf: 'flex-start',
|
|
4421
4423
|
marginBlock: `calc(-6 * ${ref(spacingStatic2Xs)})`,
|
|
@@ -6038,11 +6040,11 @@ const getDialogTransitionJssStyle = (isVisible, slideIn) => {
|
|
|
6038
6040
|
transition: `${getTransition('opacity', duration, easing)}, ${getTransition('transform', duration, easing)}`,
|
|
6039
6041
|
};
|
|
6040
6042
|
};
|
|
6041
|
-
const getDialogDismissButtonJssStyle = () => {
|
|
6043
|
+
const getDialogDismissButtonJssStyle = (variant) => {
|
|
6042
6044
|
return {
|
|
6043
6045
|
// native dismiss button visual (primary variant); positioning + the `invert` filter (renders it light on the
|
|
6044
6046
|
// dialog) are applied on top below
|
|
6045
|
-
...getFCDismissButtonStyles(
|
|
6047
|
+
...getFCDismissButtonStyles(variant),
|
|
6046
6048
|
gridArea: '1/3',
|
|
6047
6049
|
zIndex: 5, // controls layering + creates new stacking context (prevents content within to be above other dialog areas)
|
|
6048
6050
|
position: 'sticky',
|
|
@@ -6050,7 +6052,6 @@ const getDialogDismissButtonJssStyle = () => {
|
|
|
6050
6052
|
marginTop: `calc(-1 * ${dialogPaddingTop} + ${ref(spacingFluidSm)})`,
|
|
6051
6053
|
marginInlineEnd: ref(spacingFluidSm),
|
|
6052
6054
|
placeSelf: 'flex-start flex-end',
|
|
6053
|
-
filter: 'invert(1) brightness(1.02)',
|
|
6054
6055
|
};
|
|
6055
6056
|
};
|
|
6056
6057
|
const getSlotJssStyle = () => {
|
|
@@ -7250,7 +7251,7 @@ const getComponentCss$V = (isOpen, background, backdrop, position, hasHeader, ha
|
|
|
7250
7251
|
gridTemplateRows: hasHeader ? 'auto 1fr auto' : '1fr',
|
|
7251
7252
|
}),
|
|
7252
7253
|
},
|
|
7253
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
7254
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
7254
7255
|
});
|
|
7255
7256
|
};
|
|
7256
7257
|
|
|
@@ -8064,7 +8065,7 @@ const getComponentCss$C = (isOpen, background, backdrop, fullscreen, hasDismissB
|
|
|
8064
8065
|
}),
|
|
8065
8066
|
},
|
|
8066
8067
|
...(hasDismissButton && {
|
|
8067
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
8068
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
8068
8069
|
}),
|
|
8069
8070
|
});
|
|
8070
8071
|
};
|
|
@@ -8536,6 +8537,12 @@ const getComponentCss$v = (isOpen, isCompact, skipEntryTransition) => {
|
|
|
8536
8537
|
font: `${ref(typescaleSm$1)} ${ref(fontPorscheNext$1)}`, // needed for correct width/height definition based on ex-unit
|
|
8537
8538
|
width: ref(leadingNormal$1),
|
|
8538
8539
|
height: ref(leadingNormal$1),
|
|
8540
|
+
// The :host uses `display: contents`, so this fixed-size trigger button becomes the flex/grid item in the
|
|
8541
|
+
// consumer's layout (e.g. p-accordion's `summary-after` slot, which is `display: flex`). Its visible box is drawn
|
|
8542
|
+
// purely by the `::before`/`::after` pseudo-elements (icon `mask`), so it has no intrinsic content width and its
|
|
8543
|
+
// automatic minimum size collapses towards 0 — a competing sibling (e.g. long summary text) would otherwise
|
|
8544
|
+
// squeeze the info icon flat. `flex: none` keeps the icon at its intended size instead of shrinking.
|
|
8545
|
+
flex: 'none',
|
|
8539
8546
|
cursor: 'pointer',
|
|
8540
8547
|
...hoverMediaQuery({
|
|
8541
8548
|
'&:hover::before': {
|
|
@@ -9275,7 +9282,7 @@ const getComponentCss$n = (isOpen, background, hasDismissButton) => {
|
|
|
9275
9282
|
}),
|
|
9276
9283
|
},
|
|
9277
9284
|
...(hasDismissButton && {
|
|
9278
|
-
dismiss: getDialogDismissButtonJssStyle(),
|
|
9285
|
+
dismiss: getDialogDismissButtonJssStyle(background),
|
|
9279
9286
|
}),
|
|
9280
9287
|
});
|
|
9281
9288
|
};
|
|
@@ -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.5.0
|
|
3483
|
+
const prefix = `[Porsche Design System v${"4.5.0"}]` // this part isn't covered by unit tests
|
|
3484
3484
|
;
|
|
3485
3485
|
const consoleError$1 = (...messages) => {
|
|
3486
3486
|
console.error(prefix, ...messages);
|