@porsche-design-system/components-react 3.28.0-rc.2 → 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.
- package/CHANGELOG.md +20 -0
- package/package.json +5 -2
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +136 -88
- package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +0 -5
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.cjs +4 -5
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.cjs +6 -2
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +136 -88
- package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +1 -5
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select-option.mjs +4 -5
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.mjs +7 -3
- package/tailwind/index.css +348 -0
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
|
|
|
14
14
|
|
|
15
15
|
## [Unreleased]
|
|
16
16
|
|
|
17
|
+
## [3.28.0-rc.3] - 2025-05-19
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- `Styles`: theme for `tailwindcss` including utilities available under
|
|
22
|
+
`import { … } from '@porsche-design-system/components-{js|angular|react|vue}/tailwindcss';`
|
|
23
|
+
([#3849](https://github.com/porsche-design-system/porsche-design-system/pull/3849))
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Partials: `getInitialStyles` removed default styles for `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `p`, `b` and `strong`
|
|
28
|
+
([#3849](https://github.com/porsche-design-system/porsche-design-system/pull/3849))
|
|
29
|
+
|
|
30
|
+
#### Fixed
|
|
31
|
+
|
|
32
|
+
- `Multi Select`: enable full a11y compliance
|
|
33
|
+
([#3819](https://github.com/porsche-design-system/porsche-design-system/pull/3819))
|
|
34
|
+
- Accessibility: fix ARIA live announcements of form components status messages
|
|
35
|
+
([#3796](https://github.com/porsche-design-system/porsche-design-system/pull/3796))
|
|
36
|
+
|
|
17
37
|
## [3.28.0-rc.2] - 2025-04-23
|
|
18
38
|
|
|
19
39
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porsche-design-system/components-react",
|
|
3
|
-
"version": "3.28.0-rc.
|
|
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.
|
|
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",
|
|
@@ -5536,8 +5536,12 @@ const getFunctionalComponentStateMessageStyles = (theme, state, additionalDefaul
|
|
|
5536
5536
|
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5537
5537
|
color: getThemedFormStateColors('dark', state).formStateColor,
|
|
5538
5538
|
}),
|
|
5539
|
-
transition: getTransition('color'),
|
|
5539
|
+
transition: `${getTransition('color')}, ${getTransition('opacity')}`,
|
|
5540
5540
|
...additionalDefaultJssStyle,
|
|
5541
|
+
'&:empty': {
|
|
5542
|
+
opacity: '0',
|
|
5543
|
+
position: 'absolute',
|
|
5544
|
+
},
|
|
5541
5545
|
},
|
|
5542
5546
|
};
|
|
5543
5547
|
};
|
|
@@ -5644,13 +5648,112 @@ const getComponentCss$14 = (hideLabel, state, isDisabled, isLoading, theme) => {
|
|
|
5644
5648
|
});
|
|
5645
5649
|
};
|
|
5646
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
|
+
|
|
5647
5712
|
const getCheckedSVGBackgroundImage$1 = (fill) => {
|
|
5648
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"/>`);
|
|
5649
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
|
+
|
|
5650
5754
|
const getIndeterminateSVGBackgroundImage = (fill) => {
|
|
5651
5755
|
return getInlineSVGBackgroundImage(`<path fill="${fill}" d="m20,11v2H4v-2h16Z"/>`);
|
|
5652
5756
|
};
|
|
5653
|
-
const cssVarInternalCheckboxScaling = '--p-internal-checkbox-scaling';
|
|
5654
5757
|
const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, theme) => {
|
|
5655
5758
|
const { primaryColor, contrastMediumColor, contrastHighColor, disabledColor, focusColor } = getThemedColors(theme);
|
|
5656
5759
|
const { primaryColor: primaryColorDark, contrastMediumColor: contrastMediumColorDark, contrastHighColor: contrastHighColorDark, disabledColor: disabledColorDark, focusColor: focusColorDark, } = getThemedColors('dark');
|
|
@@ -5675,8 +5778,6 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5675
5778
|
: formStateColorDark || primaryColorDark;
|
|
5676
5779
|
const checkedHoverColor = formStateHoverColor || contrastHighColor;
|
|
5677
5780
|
const checkedHoverColorDark = formStateHoverColorDark || contrastHighColorDark;
|
|
5678
|
-
const checkedIconColor = escapeHashCharacter(getInvertedThemedColors(theme).primaryColor);
|
|
5679
|
-
const checkedIconColorDark = escapeHashCharacter(getInvertedThemedColors('dark').primaryColor);
|
|
5680
5781
|
const indeterminateIconColor = escapeHashCharacter(disabledOrLoading ? disabledColorDark : formStateColor || primaryColor);
|
|
5681
5782
|
const indeterminateIconColorDark = escapeHashCharacter(formStateColorDark || primaryColorDark);
|
|
5682
5783
|
const indeterminateIconHoverColor = escapeHashCharacter(formStateHoverColor || primaryColor);
|
|
@@ -5684,18 +5785,11 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5684
5785
|
const background = `transparent 0% 0% / ${fontLineHeight}`;
|
|
5685
5786
|
const minimumTouchTargetSize = '24px'; // Minimum touch target size to comply with accessibility guidelines.
|
|
5686
5787
|
const scalingVar = `var(${cssVarInternalCheckboxScaling}, ${compact ? 0.6668 : 1})`;
|
|
5687
|
-
// Determines the scaling factor for the checkbox size. In "compact" mode, it uses 0.6668 to achieve a 20px checkbox (compact size).
|
|
5688
|
-
// Defaults to 1 for the standard size and can be overridden by the CSS variable `cssVarInternalCheckboxScaling`.
|
|
5689
5788
|
const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${scalingVar} * ${fontLineHeight}))`;
|
|
5690
|
-
// Calculates the checkbox size and ensures a minimum size of 12px (0.75 * SCALING_BASE_VALUE).
|
|
5691
|
-
// Scales proportionally with the line height and the scaling factor.
|
|
5692
5789
|
const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
|
|
5693
5790
|
const touchTargetSizeDiff = `calc(${minimumTouchTargetSize} - ${dimensionFull})`; // Difference between the minimum touch target size and the checkbox full size.
|
|
5694
5791
|
const paddingInlineStart = `calc(${spacingStaticSmall} - (max(0px, ${touchTargetSizeDiff})))`;
|
|
5695
|
-
// Adjusts padding to maintain consistent spacing when the checkbox is smaller than the minimum touch target size.
|
|
5696
|
-
// Uses asymmetric padding instead of `gap` to ensure there is no non-clickable area between the label and the input.
|
|
5697
5792
|
const paddingTop = `calc((${dimensionFull} - ${fontLineHeight}) / 2)`; // Vertically centers the checkbox label relative to the checkbox size.
|
|
5698
|
-
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.
|
|
5699
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.
|
|
5700
5794
|
return getCss({
|
|
5701
5795
|
'@global': {
|
|
@@ -5707,44 +5801,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5707
5801
|
}),
|
|
5708
5802
|
},
|
|
5709
5803
|
...preventFoucOfNestedElementsStyles,
|
|
5710
|
-
input:
|
|
5711
|
-
position: 'relative',
|
|
5712
|
-
'&::before': {
|
|
5713
|
-
// Ensures the touch target is at least 24px, even if the checkbox is smaller than the minimum touch target size.
|
|
5714
|
-
// This pseudo-element expands the clickable area without affecting the visual size of the checkbox itself.
|
|
5715
|
-
content: '""',
|
|
5716
|
-
position: 'absolute',
|
|
5717
|
-
inset,
|
|
5718
|
-
},
|
|
5719
|
-
width: dimension,
|
|
5720
|
-
height: dimension,
|
|
5721
|
-
font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width and height definition based on ex-unit
|
|
5722
|
-
display: 'block',
|
|
5723
|
-
margin: 0,
|
|
5724
|
-
padding: 0,
|
|
5725
|
-
WebkitAppearance: 'none', // iOS safari
|
|
5726
|
-
appearance: 'none',
|
|
5727
|
-
boxSizing: 'content-box',
|
|
5728
|
-
background,
|
|
5729
|
-
transition: `${getTransition('background-color')}, ${getTransition('border-color')}`,
|
|
5730
|
-
border: `${borderWidthBase} solid ${uncheckedColor}`,
|
|
5731
|
-
outline: 0, // TODO: only relevant for VRT testing with forced states - prevents :focus style (in case getFocusJssStyle() condition is not matching)
|
|
5732
|
-
...(disabledOrLoading
|
|
5733
|
-
? {
|
|
5734
|
-
pointerEvents: 'none', // to prevent form element becomes clickable/toggleable
|
|
5735
|
-
}
|
|
5736
|
-
: {
|
|
5737
|
-
cursor: 'pointer',
|
|
5738
|
-
}),
|
|
5739
|
-
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5740
|
-
borderColor: uncheckedColorDark,
|
|
5741
|
-
}),
|
|
5742
|
-
gridArea: '1/1',
|
|
5743
|
-
borderRadius: borderRadiusSmall,
|
|
5744
|
-
...addImportantToEachRule({
|
|
5745
|
-
backgroundSize: 'cover',
|
|
5746
|
-
}),
|
|
5747
|
-
},
|
|
5804
|
+
input: getCheckboxBaseStyles(theme, isDisabled, isLoading, state, compact),
|
|
5748
5805
|
...(isLoading
|
|
5749
5806
|
? {
|
|
5750
5807
|
'input:checked': {
|
|
@@ -5758,23 +5815,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5758
5815
|
},
|
|
5759
5816
|
}
|
|
5760
5817
|
: {
|
|
5761
|
-
'input:checked':
|
|
5762
|
-
borderColor: checkedColor,
|
|
5763
|
-
backgroundColor: checkedColor,
|
|
5764
|
-
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColor),
|
|
5765
|
-
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5766
|
-
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColorDark),
|
|
5767
|
-
borderColor: checkedColorDark,
|
|
5768
|
-
backgroundColor: checkedColorDark,
|
|
5769
|
-
}),
|
|
5770
|
-
// 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.
|
|
5771
|
-
...(isHighContrastMode &&
|
|
5772
|
-
getSchemedHighContrastMediaQuery({
|
|
5773
|
-
backgroundImage: getCheckedSVGBackgroundImage$1('white'),
|
|
5774
|
-
}, {
|
|
5775
|
-
backgroundImage: getCheckedSVGBackgroundImage$1('black'),
|
|
5776
|
-
})),
|
|
5777
|
-
},
|
|
5818
|
+
'input:checked': getCheckboxCheckedBaseStyles(theme, isDisabled, isLoading, state),
|
|
5778
5819
|
'input:indeterminate': {
|
|
5779
5820
|
background, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
|
|
5780
5821
|
borderColor: uncheckedColor, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
|
|
@@ -7609,12 +7650,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
|
|
|
7609
7650
|
borderColor: primaryColorDark,
|
|
7610
7651
|
}),
|
|
7611
7652
|
},
|
|
7612
|
-
...
|
|
7613
|
-
|
|
7614
|
-
|
|
7653
|
+
...(!disabled &&
|
|
7654
|
+
!readOnly &&
|
|
7655
|
+
hoverMediaQuery({
|
|
7615
7656
|
'&:hover:not(:has(.button:hover, input:focus ))': hoverStyles,
|
|
7616
|
-
}),
|
|
7617
|
-
}),
|
|
7657
|
+
})),
|
|
7618
7658
|
...(disabled && {
|
|
7619
7659
|
cursor: 'not-allowed',
|
|
7620
7660
|
color: disabledColor,
|
|
@@ -7643,14 +7683,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
|
|
|
7643
7683
|
},
|
|
7644
7684
|
}),
|
|
7645
7685
|
// .label / .required
|
|
7646
|
-
...getFunctionalComponentLabelStyles(disabled, hideLabel, theme,
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
}),
|
|
7652
|
-
}),
|
|
7653
|
-
}),
|
|
7686
|
+
...getFunctionalComponentLabelStyles(disabled, hideLabel, theme, !disabled &&
|
|
7687
|
+
!readOnly &&
|
|
7688
|
+
hoverMediaQuery({
|
|
7689
|
+
'&:hover~.wrapper': hoverStyles,
|
|
7690
|
+
})),
|
|
7654
7691
|
// .message
|
|
7655
7692
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
7656
7693
|
});
|
|
@@ -7692,12 +7729,12 @@ const getComponentCss$K = (icon, iconSource, variant, hideLabel, hasSlottedAncho
|
|
|
7692
7729
|
label: {
|
|
7693
7730
|
clip: addImportantToRule('unset'), // to overrule breakpoint customizable hide-label style
|
|
7694
7731
|
},
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7732
|
+
...(isPrimary &&
|
|
7733
|
+
!isHighContrastMode && {
|
|
7734
|
+
icon: {
|
|
7698
7735
|
filter: 'invert(1)',
|
|
7699
|
-
}
|
|
7700
|
-
},
|
|
7736
|
+
},
|
|
7737
|
+
}),
|
|
7701
7738
|
}, hasSlottedAnchor && {
|
|
7702
7739
|
...(isHighContrastMode && {
|
|
7703
7740
|
root: {
|
|
@@ -8580,7 +8617,10 @@ optionHeight, theme) => {
|
|
|
8580
8617
|
};
|
|
8581
8618
|
};
|
|
8582
8619
|
|
|
8583
|
-
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.
|
|
8584
8624
|
return getCss({
|
|
8585
8625
|
'@global': {
|
|
8586
8626
|
':host': {
|
|
@@ -8590,11 +8630,19 @@ const getComponentCss$D = (theme) => {
|
|
|
8590
8630
|
...hostHiddenStyles,
|
|
8591
8631
|
}),
|
|
8592
8632
|
},
|
|
8593
|
-
|
|
8633
|
+
slot: {
|
|
8634
|
+
display: 'block',
|
|
8635
|
+
paddingTop,
|
|
8636
|
+
},
|
|
8637
|
+
},
|
|
8638
|
+
option: {
|
|
8639
|
+
...getOptionJssStyle('multi-select-option', 1, theme),
|
|
8640
|
+
columnGap: '8px',
|
|
8594
8641
|
},
|
|
8595
|
-
option: getOptionJssStyle('multi-select-option', 1, theme),
|
|
8596
8642
|
checkbox: {
|
|
8597
|
-
|
|
8643
|
+
flexShrink: 0,
|
|
8644
|
+
...getCheckboxBaseStyles(theme, isDisabled),
|
|
8645
|
+
...(selected && getCheckboxCheckedBaseStyles(theme, isDisabled)),
|
|
8598
8646
|
},
|
|
8599
8647
|
});
|
|
8600
8648
|
};
|
|
@@ -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;
|
|
@@ -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
|
}
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.cjs
CHANGED
|
@@ -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 (
|
|
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;
|
|
@@ -5534,8 +5534,12 @@ const getFunctionalComponentStateMessageStyles = (theme, state, additionalDefaul
|
|
|
5534
5534
|
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5535
5535
|
color: getThemedFormStateColors('dark', state).formStateColor,
|
|
5536
5536
|
}),
|
|
5537
|
-
transition: getTransition('color'),
|
|
5537
|
+
transition: `${getTransition('color')}, ${getTransition('opacity')}`,
|
|
5538
5538
|
...additionalDefaultJssStyle,
|
|
5539
|
+
'&:empty': {
|
|
5540
|
+
opacity: '0',
|
|
5541
|
+
position: 'absolute',
|
|
5542
|
+
},
|
|
5539
5543
|
},
|
|
5540
5544
|
};
|
|
5541
5545
|
};
|
|
@@ -5642,13 +5646,112 @@ const getComponentCss$14 = (hideLabel, state, isDisabled, isLoading, theme) => {
|
|
|
5642
5646
|
});
|
|
5643
5647
|
};
|
|
5644
5648
|
|
|
5649
|
+
const cssVarInternalCheckboxScaling = '--p-internal-checkbox-scaling';
|
|
5650
|
+
const getCheckboxBaseStyles = (theme, isDisabled, isLoading, state, compact) => {
|
|
5651
|
+
const { contrastMediumColor, disabledColor } = getThemedColors(theme);
|
|
5652
|
+
const { contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark } = getThemedColors('dark');
|
|
5653
|
+
const { formStateColor } = getThemedFormStateColors(theme, state);
|
|
5654
|
+
const { formStateColor: formStateColorDark } = getThemedFormStateColors('dark', state);
|
|
5655
|
+
const disabledOrLoading = isDisabledOrLoading(isDisabled, isLoading);
|
|
5656
|
+
// TODO: needs to be extracted into a color function
|
|
5657
|
+
const uncheckedColor = disabledOrLoading ? disabledColor : formStateColor || contrastMediumColor;
|
|
5658
|
+
const uncheckedColorDark = disabledOrLoading ? disabledColorDark : formStateColorDark || contrastMediumColorDark;
|
|
5659
|
+
const background = `transparent 0% 0% / ${fontLineHeight}`;
|
|
5660
|
+
const minimumTouchTargetSize = '24px'; // Minimum touch target size to comply with accessibility guidelines.
|
|
5661
|
+
const scalingVar = `var(${cssVarInternalCheckboxScaling}, ${compact ? 0.6668 : 1})`;
|
|
5662
|
+
// Determines the scaling factor for the checkbox size. In "compact" mode, it uses 0.6668 to achieve a 20px checkbox (compact size).
|
|
5663
|
+
// Defaults to 1 for the standard size and can be overridden by the CSS variable `cssVarInternalCheckboxScaling`.
|
|
5664
|
+
const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${scalingVar} * ${fontLineHeight}))`;
|
|
5665
|
+
// Calculates the checkbox size and ensures a minimum size of 12px (0.75 * SCALING_BASE_VALUE).
|
|
5666
|
+
// Scales proportionally with the line height and the scaling factor.
|
|
5667
|
+
const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
|
|
5668
|
+
const touchTargetSizeDiff = `calc(${minimumTouchTargetSize} - ${dimensionFull})`; // Difference between the minimum touch target size and the checkbox full size.
|
|
5669
|
+
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.
|
|
5670
|
+
return {
|
|
5671
|
+
position: 'relative',
|
|
5672
|
+
'&::before': {
|
|
5673
|
+
// Ensures the touch target is at least 24px, even if the checkbox is smaller than the minimum touch target size.
|
|
5674
|
+
// This pseudo-element expands the clickable area without affecting the visual size of the checkbox itself.
|
|
5675
|
+
content: '""',
|
|
5676
|
+
position: 'absolute',
|
|
5677
|
+
inset,
|
|
5678
|
+
},
|
|
5679
|
+
width: dimension,
|
|
5680
|
+
height: dimension,
|
|
5681
|
+
font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width and height definition based on ex-unit
|
|
5682
|
+
display: 'block',
|
|
5683
|
+
margin: 0,
|
|
5684
|
+
padding: 0,
|
|
5685
|
+
WebkitAppearance: 'none', // iOS safari
|
|
5686
|
+
appearance: 'none',
|
|
5687
|
+
boxSizing: 'content-box',
|
|
5688
|
+
background,
|
|
5689
|
+
transition: `${getTransition('background-color')}, ${getTransition('border-color')}`,
|
|
5690
|
+
border: `${borderWidthBase} solid ${uncheckedColor}`,
|
|
5691
|
+
outline: 0, // TODO: only relevant for VRT testing with forced states - prevents :focus style (in case getFocusJssStyle() condition is not matching)
|
|
5692
|
+
...(disabledOrLoading
|
|
5693
|
+
? {
|
|
5694
|
+
pointerEvents: 'none', // to prevent form element becomes clickable/toggleable
|
|
5695
|
+
}
|
|
5696
|
+
: {
|
|
5697
|
+
cursor: 'pointer',
|
|
5698
|
+
}),
|
|
5699
|
+
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5700
|
+
borderColor: uncheckedColorDark,
|
|
5701
|
+
}),
|
|
5702
|
+
gridArea: '1/1',
|
|
5703
|
+
borderRadius: borderRadiusSmall,
|
|
5704
|
+
...addImportantToEachRule({
|
|
5705
|
+
backgroundSize: 'cover',
|
|
5706
|
+
}),
|
|
5707
|
+
};
|
|
5708
|
+
};
|
|
5709
|
+
|
|
5645
5710
|
const getCheckedSVGBackgroundImage$1 = (fill) => {
|
|
5646
5711
|
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"/>`);
|
|
5647
5712
|
};
|
|
5713
|
+
const getCheckboxCheckedBaseStyles = (theme, isDisabled, isLoading, state) => {
|
|
5714
|
+
const { primaryColor, disabledColor } = getThemedColors(theme);
|
|
5715
|
+
const { primaryColor: primaryColorDark, disabledColor: disabledColorDark } = getThemedColors('dark');
|
|
5716
|
+
const { formStateColor } = getThemedFormStateColors(theme, state);
|
|
5717
|
+
const { formStateColor: formStateColorDark } = getThemedFormStateColors('dark', state);
|
|
5718
|
+
const { canvasTextColor } = getHighContrastColors();
|
|
5719
|
+
const disabledOrLoading = isDisabledOrLoading(isDisabled, isLoading);
|
|
5720
|
+
// TODO: needs to be extracted into a color function
|
|
5721
|
+
const checkedColor = isHighContrastMode
|
|
5722
|
+
? canvasTextColor
|
|
5723
|
+
: disabledOrLoading
|
|
5724
|
+
? disabledColor
|
|
5725
|
+
: formStateColor || primaryColor;
|
|
5726
|
+
const checkedColorDark = isHighContrastMode
|
|
5727
|
+
? canvasTextColor
|
|
5728
|
+
: disabledOrLoading
|
|
5729
|
+
? disabledColorDark
|
|
5730
|
+
: formStateColorDark || primaryColorDark;
|
|
5731
|
+
const checkedIconColor = escapeHashCharacter(getInvertedThemedColors(theme).primaryColor);
|
|
5732
|
+
const checkedIconColorDark = escapeHashCharacter(getInvertedThemedColors('dark').primaryColor);
|
|
5733
|
+
return {
|
|
5734
|
+
borderColor: checkedColor,
|
|
5735
|
+
backgroundColor: checkedColor,
|
|
5736
|
+
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColor),
|
|
5737
|
+
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5738
|
+
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColorDark),
|
|
5739
|
+
borderColor: checkedColorDark,
|
|
5740
|
+
backgroundColor: checkedColorDark,
|
|
5741
|
+
}),
|
|
5742
|
+
// 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.
|
|
5743
|
+
...(isHighContrastMode &&
|
|
5744
|
+
getSchemedHighContrastMediaQuery({
|
|
5745
|
+
backgroundImage: getCheckedSVGBackgroundImage$1('white'),
|
|
5746
|
+
}, {
|
|
5747
|
+
backgroundImage: getCheckedSVGBackgroundImage$1('black'),
|
|
5748
|
+
})),
|
|
5749
|
+
};
|
|
5750
|
+
};
|
|
5751
|
+
|
|
5648
5752
|
const getIndeterminateSVGBackgroundImage = (fill) => {
|
|
5649
5753
|
return getInlineSVGBackgroundImage(`<path fill="${fill}" d="m20,11v2H4v-2h16Z"/>`);
|
|
5650
5754
|
};
|
|
5651
|
-
const cssVarInternalCheckboxScaling = '--p-internal-checkbox-scaling';
|
|
5652
5755
|
const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, theme) => {
|
|
5653
5756
|
const { primaryColor, contrastMediumColor, contrastHighColor, disabledColor, focusColor } = getThemedColors(theme);
|
|
5654
5757
|
const { primaryColor: primaryColorDark, contrastMediumColor: contrastMediumColorDark, contrastHighColor: contrastHighColorDark, disabledColor: disabledColorDark, focusColor: focusColorDark, } = getThemedColors('dark');
|
|
@@ -5673,8 +5776,6 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5673
5776
|
: formStateColorDark || primaryColorDark;
|
|
5674
5777
|
const checkedHoverColor = formStateHoverColor || contrastHighColor;
|
|
5675
5778
|
const checkedHoverColorDark = formStateHoverColorDark || contrastHighColorDark;
|
|
5676
|
-
const checkedIconColor = escapeHashCharacter(getInvertedThemedColors(theme).primaryColor);
|
|
5677
|
-
const checkedIconColorDark = escapeHashCharacter(getInvertedThemedColors('dark').primaryColor);
|
|
5678
5779
|
const indeterminateIconColor = escapeHashCharacter(disabledOrLoading ? disabledColorDark : formStateColor || primaryColor);
|
|
5679
5780
|
const indeterminateIconColorDark = escapeHashCharacter(formStateColorDark || primaryColorDark);
|
|
5680
5781
|
const indeterminateIconHoverColor = escapeHashCharacter(formStateHoverColor || primaryColor);
|
|
@@ -5682,18 +5783,11 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5682
5783
|
const background = `transparent 0% 0% / ${fontLineHeight}`;
|
|
5683
5784
|
const minimumTouchTargetSize = '24px'; // Minimum touch target size to comply with accessibility guidelines.
|
|
5684
5785
|
const scalingVar = `var(${cssVarInternalCheckboxScaling}, ${compact ? 0.6668 : 1})`;
|
|
5685
|
-
// Determines the scaling factor for the checkbox size. In "compact" mode, it uses 0.6668 to achieve a 20px checkbox (compact size).
|
|
5686
|
-
// Defaults to 1 for the standard size and can be overridden by the CSS variable `cssVarInternalCheckboxScaling`.
|
|
5687
5786
|
const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${scalingVar} * ${fontLineHeight}))`;
|
|
5688
|
-
// Calculates the checkbox size and ensures a minimum size of 12px (0.75 * SCALING_BASE_VALUE).
|
|
5689
|
-
// Scales proportionally with the line height and the scaling factor.
|
|
5690
5787
|
const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
|
|
5691
5788
|
const touchTargetSizeDiff = `calc(${minimumTouchTargetSize} - ${dimensionFull})`; // Difference between the minimum touch target size and the checkbox full size.
|
|
5692
5789
|
const paddingInlineStart = `calc(${spacingStaticSmall} - (max(0px, ${touchTargetSizeDiff})))`;
|
|
5693
|
-
// Adjusts padding to maintain consistent spacing when the checkbox is smaller than the minimum touch target size.
|
|
5694
|
-
// Uses asymmetric padding instead of `gap` to ensure there is no non-clickable area between the label and the input.
|
|
5695
5790
|
const paddingTop = `calc((${dimensionFull} - ${fontLineHeight}) / 2)`; // Vertically centers the checkbox label relative to the checkbox size.
|
|
5696
|
-
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.
|
|
5697
5791
|
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.
|
|
5698
5792
|
return getCss({
|
|
5699
5793
|
'@global': {
|
|
@@ -5705,44 +5799,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5705
5799
|
}),
|
|
5706
5800
|
},
|
|
5707
5801
|
...preventFoucOfNestedElementsStyles,
|
|
5708
|
-
input:
|
|
5709
|
-
position: 'relative',
|
|
5710
|
-
'&::before': {
|
|
5711
|
-
// Ensures the touch target is at least 24px, even if the checkbox is smaller than the minimum touch target size.
|
|
5712
|
-
// This pseudo-element expands the clickable area without affecting the visual size of the checkbox itself.
|
|
5713
|
-
content: '""',
|
|
5714
|
-
position: 'absolute',
|
|
5715
|
-
inset,
|
|
5716
|
-
},
|
|
5717
|
-
width: dimension,
|
|
5718
|
-
height: dimension,
|
|
5719
|
-
font: `${fontSizeTextSmall} ${fontFamily}`, // needed for correct width and height definition based on ex-unit
|
|
5720
|
-
display: 'block',
|
|
5721
|
-
margin: 0,
|
|
5722
|
-
padding: 0,
|
|
5723
|
-
WebkitAppearance: 'none', // iOS safari
|
|
5724
|
-
appearance: 'none',
|
|
5725
|
-
boxSizing: 'content-box',
|
|
5726
|
-
background,
|
|
5727
|
-
transition: `${getTransition('background-color')}, ${getTransition('border-color')}`,
|
|
5728
|
-
border: `${borderWidthBase} solid ${uncheckedColor}`,
|
|
5729
|
-
outline: 0, // TODO: only relevant for VRT testing with forced states - prevents :focus style (in case getFocusJssStyle() condition is not matching)
|
|
5730
|
-
...(disabledOrLoading
|
|
5731
|
-
? {
|
|
5732
|
-
pointerEvents: 'none', // to prevent form element becomes clickable/toggleable
|
|
5733
|
-
}
|
|
5734
|
-
: {
|
|
5735
|
-
cursor: 'pointer',
|
|
5736
|
-
}),
|
|
5737
|
-
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5738
|
-
borderColor: uncheckedColorDark,
|
|
5739
|
-
}),
|
|
5740
|
-
gridArea: '1/1',
|
|
5741
|
-
borderRadius: borderRadiusSmall,
|
|
5742
|
-
...addImportantToEachRule({
|
|
5743
|
-
backgroundSize: 'cover',
|
|
5744
|
-
}),
|
|
5745
|
-
},
|
|
5802
|
+
input: getCheckboxBaseStyles(theme, isDisabled, isLoading, state, compact),
|
|
5746
5803
|
...(isLoading
|
|
5747
5804
|
? {
|
|
5748
5805
|
'input:checked': {
|
|
@@ -5756,23 +5813,7 @@ const getComponentCss$13 = (hideLabel, state, isDisabled, isLoading, compact, th
|
|
|
5756
5813
|
},
|
|
5757
5814
|
}
|
|
5758
5815
|
: {
|
|
5759
|
-
'input:checked':
|
|
5760
|
-
borderColor: checkedColor,
|
|
5761
|
-
backgroundColor: checkedColor,
|
|
5762
|
-
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColor),
|
|
5763
|
-
...prefersColorSchemeDarkMediaQuery(theme, {
|
|
5764
|
-
backgroundImage: getCheckedSVGBackgroundImage$1(checkedIconColorDark),
|
|
5765
|
-
borderColor: checkedColorDark,
|
|
5766
|
-
backgroundColor: checkedColorDark,
|
|
5767
|
-
}),
|
|
5768
|
-
// 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.
|
|
5769
|
-
...(isHighContrastMode &&
|
|
5770
|
-
getSchemedHighContrastMediaQuery({
|
|
5771
|
-
backgroundImage: getCheckedSVGBackgroundImage$1('white'),
|
|
5772
|
-
}, {
|
|
5773
|
-
backgroundImage: getCheckedSVGBackgroundImage$1('black'),
|
|
5774
|
-
})),
|
|
5775
|
-
},
|
|
5816
|
+
'input:checked': getCheckboxCheckedBaseStyles(theme, isDisabled, isLoading, state),
|
|
5776
5817
|
'input:indeterminate': {
|
|
5777
5818
|
background, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
|
|
5778
5819
|
borderColor: uncheckedColor, // Safari fix: ensures proper rendering of 'indeterminate' mode with 'checked' state.
|
|
@@ -7607,12 +7648,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
|
|
|
7607
7648
|
borderColor: primaryColorDark,
|
|
7608
7649
|
}),
|
|
7609
7650
|
},
|
|
7610
|
-
...
|
|
7611
|
-
|
|
7612
|
-
|
|
7651
|
+
...(!disabled &&
|
|
7652
|
+
!readOnly &&
|
|
7653
|
+
hoverMediaQuery({
|
|
7613
7654
|
'&:hover:not(:has(.button:hover, input:focus ))': hoverStyles,
|
|
7614
|
-
}),
|
|
7615
|
-
}),
|
|
7655
|
+
})),
|
|
7616
7656
|
...(disabled && {
|
|
7617
7657
|
cursor: 'not-allowed',
|
|
7618
7658
|
color: disabledColor,
|
|
@@ -7641,14 +7681,11 @@ const getComponentCss$M = (disabled, hideLabel, state, toggle, compact, readOnly
|
|
|
7641
7681
|
},
|
|
7642
7682
|
}),
|
|
7643
7683
|
// .label / .required
|
|
7644
|
-
...getFunctionalComponentLabelStyles(disabled, hideLabel, theme,
|
|
7645
|
-
|
|
7646
|
-
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
}),
|
|
7650
|
-
}),
|
|
7651
|
-
}),
|
|
7684
|
+
...getFunctionalComponentLabelStyles(disabled, hideLabel, theme, !disabled &&
|
|
7685
|
+
!readOnly &&
|
|
7686
|
+
hoverMediaQuery({
|
|
7687
|
+
'&:hover~.wrapper': hoverStyles,
|
|
7688
|
+
})),
|
|
7652
7689
|
// .message
|
|
7653
7690
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
7654
7691
|
});
|
|
@@ -7690,12 +7727,12 @@ const getComponentCss$K = (icon, iconSource, variant, hideLabel, hasSlottedAncho
|
|
|
7690
7727
|
label: {
|
|
7691
7728
|
clip: addImportantToRule('unset'), // to overrule breakpoint customizable hide-label style
|
|
7692
7729
|
},
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
7730
|
+
...(isPrimary &&
|
|
7731
|
+
!isHighContrastMode && {
|
|
7732
|
+
icon: {
|
|
7696
7733
|
filter: 'invert(1)',
|
|
7697
|
-
}
|
|
7698
|
-
},
|
|
7734
|
+
},
|
|
7735
|
+
}),
|
|
7699
7736
|
}, hasSlottedAnchor && {
|
|
7700
7737
|
...(isHighContrastMode && {
|
|
7701
7738
|
root: {
|
|
@@ -8578,7 +8615,10 @@ optionHeight, theme) => {
|
|
|
8578
8615
|
};
|
|
8579
8616
|
};
|
|
8580
8617
|
|
|
8581
|
-
const getComponentCss$D = (theme) => {
|
|
8618
|
+
const getComponentCss$D = (theme, isDisabled, selected) => {
|
|
8619
|
+
const dimension = `calc(max(${SCALING_BASE_VALUE} * 0.75, ${fontLineHeight}))`;
|
|
8620
|
+
const dimensionFull = `calc(${dimension} + ${borderWidthBase} * 2)`; // Calculates the total size of the checkbox including its borders.
|
|
8621
|
+
const paddingTop = `calc((${dimensionFull} - ${fontLineHeight}) / 2)`; // Vertically centers the checkbox label relative to the checkbox size.
|
|
8582
8622
|
return getCss({
|
|
8583
8623
|
'@global': {
|
|
8584
8624
|
':host': {
|
|
@@ -8588,11 +8628,19 @@ const getComponentCss$D = (theme) => {
|
|
|
8588
8628
|
...hostHiddenStyles,
|
|
8589
8629
|
}),
|
|
8590
8630
|
},
|
|
8591
|
-
|
|
8631
|
+
slot: {
|
|
8632
|
+
display: 'block',
|
|
8633
|
+
paddingTop,
|
|
8634
|
+
},
|
|
8635
|
+
},
|
|
8636
|
+
option: {
|
|
8637
|
+
...getOptionJssStyle('multi-select-option', 1, theme),
|
|
8638
|
+
columnGap: '8px',
|
|
8592
8639
|
},
|
|
8593
|
-
option: getOptionJssStyle('multi-select-option', 1, theme),
|
|
8594
8640
|
checkbox: {
|
|
8595
|
-
|
|
8641
|
+
flexShrink: 0,
|
|
8642
|
+
...getCheckboxBaseStyles(theme, isDisabled),
|
|
8643
|
+
...(selected && getCheckboxCheckedBaseStyles(theme, isDisabled)),
|
|
8596
8644
|
},
|
|
8597
8645
|
});
|
|
8598
8646
|
};
|
|
@@ -3447,10 +3447,6 @@ function debounce(fn, ms = 800) {
|
|
|
3447
3447
|
};
|
|
3448
3448
|
}
|
|
3449
3449
|
|
|
3450
|
-
const getRole = (state) => {
|
|
3451
|
-
return state === 'error' ? 'alert' : state === 'success' ? 'status' : null;
|
|
3452
|
-
};
|
|
3453
|
-
|
|
3454
3450
|
const isWithinForm = (host) => !!getClosestHTMLElement(host, 'form');
|
|
3455
3451
|
|
|
3456
3452
|
const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
|
|
@@ -3916,4 +3912,4 @@ const getTextTagType = (host, tag) => {
|
|
|
3916
3912
|
return tag;
|
|
3917
3913
|
};
|
|
3918
3914
|
|
|
3919
|
-
export { DISPLAY_TAGS, HEADING_TAGS, HEADLINE_TAGS, ItemType, TEXT_TAGS, _hasShowPickerSupport, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildIconUrl, buildImgSrc, buildSrcSet, createPaginationItems, createRange, crestSize, debounce, descriptionId, displaySizeToTagMap, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getClosestHTMLElement, getComboboxAriaAttributes, getContentAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getHTMLElement, getHasNativePopoverSupport, getHeadingTagType, getHeadlineTagType, getIconColor, getInlineNotificationIconName, getInnerManifest, getListAriaAttributes, getOptionAriaAttributes,
|
|
3915
|
+
export { DISPLAY_TAGS, HEADING_TAGS, HEADLINE_TAGS, ItemType, TEXT_TAGS, _hasShowPickerSupport, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildIconUrl, buildImgSrc, buildSrcSet, createPaginationItems, createRange, crestSize, debounce, descriptionId, displaySizeToTagMap, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getClosestHTMLElement, getComboboxAriaAttributes, getContentAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getHTMLElement, getHasNativePopoverSupport, getHeadingTagType, getHeadlineTagType, getIconColor, getInlineNotificationIconName, getInnerManifest, getListAriaAttributes, getOptionAriaAttributes, getSegmentedControlItemAriaAttributes, getSelectedOptionMap, getSelectedOptionString, getSelectedOptionValues, getSelectedOptions, getStepperHorizontalIconName, getSvgUrl, getSwitchButtonAriaAttributes, getTagName, getTagNameWithoutPrefix, getTextTagType, getTotalPages, hasDocument, hasLocateAction, hasSpecificDirectChildTag, hasVisibleIcon, hasWindow$1 as hasWindow, headerSlot, isCurrentInput, isCustomDropdown, isDisabledOrLoading, isElementOfKind, isInfinitePagination, isListTypeOrdered, isScrollable, isSortable, isStateCompleteOrWarning, isTouchDevice, isType, isUrl, isWithinForm, labelId, observedNodesMap, parseAndGetAriaAttributes, parseJSONAttribute, scrollAreaClass, showCustomCalendarOrTimeIndicator, supportsConstructableStylesheets, supportsNativePopover, tempDiv, tempIcon, tempLabel, traverseTreeAndUpdateState, updateDrilldownItemState };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { Component } from 'react';
|
|
3
|
-
import '../../provider.mjs';
|
|
4
2
|
import { splitChildren } from '../../splitChildren.mjs';
|
|
3
|
+
import { Component } from 'react';
|
|
5
4
|
import { minifyCss } from '../../minifyCss.mjs';
|
|
6
5
|
import { getMultiSelectOptionCss as getComponentCss$D } from '../../../../../../components/dist/styles/esm/styles-entry.mjs';
|
|
7
6
|
|
|
@@ -12,9 +11,9 @@ class DSRMultiSelectOption extends Component {
|
|
|
12
11
|
host;
|
|
13
12
|
render() {
|
|
14
13
|
splitChildren(this.props.children);
|
|
15
|
-
const { theme = 'light', selected, highlighted } = this.props;
|
|
16
|
-
this.props.disabled || this.props.disabledParent;
|
|
17
|
-
minifyCss(getComponentCss$D(theme));
|
|
14
|
+
const { theme = 'light', selected: isSelected, highlighted } = this.props;
|
|
15
|
+
const isDisabled = this.props.disabled || this.props.disabledParent;
|
|
16
|
+
minifyCss(getComponentCss$D(theme, isDisabled, isSelected));
|
|
18
17
|
return (jsx(Fragment, {}));
|
|
19
18
|
}
|
|
20
19
|
}
|
package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/state-message.mjs
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../provider.mjs';
|
|
4
|
-
import { getRole } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
|
|
5
4
|
import { PIcon } from '../components/icon.wrapper.mjs';
|
|
6
5
|
|
|
7
6
|
const messageId = 'message';
|
|
8
7
|
const StateMessage = ({ hasMessage, state, message, theme }) => {
|
|
9
8
|
const isErrorState = state === 'error';
|
|
10
|
-
return (
|
|
9
|
+
return (
|
|
10
|
+
// needs to be rendered always to have correct behaviour for screen readers
|
|
11
|
+
jsx("span", { id: messageId, className: "message", role: state === 'success' ? 'status' : 'alert', children: hasMessage && [
|
|
12
|
+
jsx(PIcon, { name: isErrorState ? 'exclamation' : 'check', color: isErrorState ? 'notification-error' : 'notification-success', theme: theme, "aria-hidden": "true" }),
|
|
13
|
+
message || jsx("slot", { name: "message" }),
|
|
14
|
+
] }));
|
|
11
15
|
};
|
|
12
16
|
|
|
13
17
|
export { StateMessage, messageId };
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
2
|
+
@theme {
|
|
3
|
+
--color-primary: #010205;
|
|
4
|
+
--color-base: #fff;
|
|
5
|
+
--color-surface: #eeeff2;
|
|
6
|
+
--color-shading: rgba(1, 2, 5, 0.67);
|
|
7
|
+
--color-frosted: hsla(240, 4%, 85%, 0.35);
|
|
8
|
+
--color-contrast-low: #d8d8db;
|
|
9
|
+
--color-contrast-medium: #6b6d70;
|
|
10
|
+
--color-contrast-high: #535457;
|
|
11
|
+
--color-success: #197e10;
|
|
12
|
+
--color-success-soft: #e4ffec;
|
|
13
|
+
--color-warning: #f3be00;
|
|
14
|
+
--color-warning-soft: #fff4d2;
|
|
15
|
+
--color-error: #cc1922;
|
|
16
|
+
--color-error-soft: #ffe2e4;
|
|
17
|
+
--color-info: #2762ec;
|
|
18
|
+
--color-info-soft: #d3e1ff;
|
|
19
|
+
--color-hover: rgba(148, 149, 152, 0.18);
|
|
20
|
+
--color-active: rgba(148, 149, 152, 0.2);
|
|
21
|
+
--color-focus: #1a44ea;
|
|
22
|
+
--color-disabled: #949598;
|
|
23
|
+
--color-skeleton: #f7f7f7;
|
|
24
|
+
--color-primary-light: #010205;
|
|
25
|
+
--color-base-light: #fff;
|
|
26
|
+
--color-surface-light: #eeeff2;
|
|
27
|
+
--color-shading-light: rgba(1, 2, 5, 0.67);
|
|
28
|
+
--color-frosted-light: hsla(240, 4%, 85%, 0.35);
|
|
29
|
+
--color-contrast-low-light: #d8d8db;
|
|
30
|
+
--color-contrast-medium-light: #6b6d70;
|
|
31
|
+
--color-contrast-high-light: #535457;
|
|
32
|
+
--color-success-light: #197e10;
|
|
33
|
+
--color-success-soft-light: #e4ffec;
|
|
34
|
+
--color-warning-light: #f3be00;
|
|
35
|
+
--color-warning-soft-light: #fff4d2;
|
|
36
|
+
--color-error-light: #cc1922;
|
|
37
|
+
--color-error-soft-light: #ffe2e4;
|
|
38
|
+
--color-info-light: #2762ec;
|
|
39
|
+
--color-info-soft-light: #d3e1ff;
|
|
40
|
+
--color-hover-light: rgba(148, 149, 152, 0.18);
|
|
41
|
+
--color-active-light: rgba(148, 149, 152, 0.2);
|
|
42
|
+
--color-focus-light: #1a44ea;
|
|
43
|
+
--color-disabled-light: #949598;
|
|
44
|
+
--color-skeleton-light: #f7f7f7;
|
|
45
|
+
--color-primary-dark: #fbfcff;
|
|
46
|
+
--color-base-dark: #0e0e12;
|
|
47
|
+
--color-surface-dark: #212225;
|
|
48
|
+
--color-shading-dark: rgba(38, 38, 41, 0.67);
|
|
49
|
+
--color-frosted-dark: hsla(240, 3%, 26%, 0.35);
|
|
50
|
+
--color-contrast-low-dark: #404044;
|
|
51
|
+
--color-contrast-medium-dark: #88898c;
|
|
52
|
+
--color-contrast-high-dark: #afb0b3;
|
|
53
|
+
--color-success-dark: #09d087;
|
|
54
|
+
--color-success-soft-dark: #003320;
|
|
55
|
+
--color-warning-dark: #f7cb47;
|
|
56
|
+
--color-warning-soft-dark: #362b0a;
|
|
57
|
+
--color-error-dark: #fc4040;
|
|
58
|
+
--color-error-soft-dark: #3a0f0f;
|
|
59
|
+
--color-info-dark: #178bff;
|
|
60
|
+
--color-info-soft-dark: #04294e;
|
|
61
|
+
--color-hover-dark: rgba(148, 149, 152, 0.18);
|
|
62
|
+
--color-active-dark: rgba(126, 127, 130, 0.2);
|
|
63
|
+
--color-focus-dark: #1a44ea;
|
|
64
|
+
--color-disabled-dark: #7e7f82;
|
|
65
|
+
--color-skeleton-dark: #1a1b1e;
|
|
66
|
+
--font-porsche-next: Porsche Next, Arial Narrow, Arial, Heiti SC, SimHei, sans-serif;
|
|
67
|
+
--font-weight-normal: 400;
|
|
68
|
+
--font-weight-semibold: 600;
|
|
69
|
+
--font-weight-bold: 700;
|
|
70
|
+
--leading-normal: calc(6px + 2.125ex);
|
|
71
|
+
--text-2xs: 0.75rem;
|
|
72
|
+
--text-2xs--line-height: calc(6px + 2.125ex);
|
|
73
|
+
--text-xs: clamp(0.81rem, 0.23vw + 0.77rem, 0.88rem);
|
|
74
|
+
--text-xs--line-height: calc(6px + 2.125ex);
|
|
75
|
+
--text-base: 1rem;
|
|
76
|
+
--text-base--line-height: calc(6px + 2.125ex);
|
|
77
|
+
--text-sm: 1rem;
|
|
78
|
+
--text-sm--line-height: calc(6px + 2.125ex);
|
|
79
|
+
--text-md: clamp(1.13rem, 0.21vw + 1.08rem, 1.33rem);
|
|
80
|
+
--text-md--line-height: calc(6px + 2.125ex);
|
|
81
|
+
--text-lg: clamp(1.27rem, 0.51vw + 1.16rem, 1.78rem);
|
|
82
|
+
--text-lg--line-height: calc(6px + 2.125ex);
|
|
83
|
+
--text-xl: clamp(1.42rem, 0.94vw + 1.23rem, 2.37rem);
|
|
84
|
+
--text-xl--line-height: calc(6px + 2.125ex);
|
|
85
|
+
--text-2xl: clamp(1.6rem, 1.56vw + 1.29rem, 3.16rem);
|
|
86
|
+
--text-2xl--line-height: calc(6px + 2.125ex);
|
|
87
|
+
--breakpoint-xs: 480px;
|
|
88
|
+
--breakpoint-sm: 760px;
|
|
89
|
+
--breakpoint-md: 1000px;
|
|
90
|
+
--breakpoint-lg: 1300px;
|
|
91
|
+
--breakpoint-xl: 1760px;
|
|
92
|
+
--breakpoint-2xl: 1920px;
|
|
93
|
+
--spacing: 0.25rem;
|
|
94
|
+
--spacing-fluid-xs: clamp(4px, 0.25vw + 3px, 8px);
|
|
95
|
+
--spacing-fluid-sm: clamp(8px, 0.5vw + 6px, 16px);
|
|
96
|
+
--spacing-fluid-md: clamp(16px, 1.25vw + 12px, 36px);
|
|
97
|
+
--spacing-fluid-lg: clamp(32px, 2.75vw + 23px, 76px);
|
|
98
|
+
--spacing-fluid-xl: clamp(48px, 3vw + 38px, 96px);
|
|
99
|
+
--spacing-fluid-2xl: clamp(80px, 7.5vw + 56px, 200px);
|
|
100
|
+
--spacing-static-xs: 4px;
|
|
101
|
+
--spacing-static-sm: 8px;
|
|
102
|
+
--spacing-static-md: 16px;
|
|
103
|
+
--spacing-static-lg: 32px;
|
|
104
|
+
--spacing-static-xl: 48px;
|
|
105
|
+
--spacing-static-2xl: 80px;
|
|
106
|
+
--radius-sm: 4px;
|
|
107
|
+
--radius-md: 8px;
|
|
108
|
+
--radius-lg: 12px;
|
|
109
|
+
--default-border-width: 2px;
|
|
110
|
+
--border-width-thin: 1px;
|
|
111
|
+
--blur-frosted: 32px;
|
|
112
|
+
--shadow-low: 0px 3px 8px rgba(0,0,0,.16);
|
|
113
|
+
--shadow-medium: 0px 4px 16px rgba(0,0,0,.16);
|
|
114
|
+
--shadow-high: 0px 8px 40px rgba(0,0,0,.16);
|
|
115
|
+
--default-outline-width: 2px;
|
|
116
|
+
--default-transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
117
|
+
--ease-in-out: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
118
|
+
--ease-in: cubic-bezier(0, 0, 0.2, 1);
|
|
119
|
+
--ease-out: cubic-bezier(0.4, 0, 0.5, 1);
|
|
120
|
+
--default-transition-duration: 0.25s;
|
|
121
|
+
--transition-duration-short: 0.25s;
|
|
122
|
+
--transition-duration-moderate: 0.4s;
|
|
123
|
+
--transition-duration-long: 0.6s;
|
|
124
|
+
--transition-duration-very-long: 1.2s;
|
|
125
|
+
--animate-skeleton: skeleton var(--transition-duration-long) var(--ease-in-out) infinite;
|
|
126
|
+
@keyframes skeleton {
|
|
127
|
+
from {
|
|
128
|
+
background-position-x: 100%;
|
|
129
|
+
}
|
|
130
|
+
to {
|
|
131
|
+
background-position-x: -100%;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
@layer theme {
|
|
136
|
+
.light {
|
|
137
|
+
--color-primary: #010205;
|
|
138
|
+
--color-base: #fff;
|
|
139
|
+
--color-surface: #eeeff2;
|
|
140
|
+
--color-shading: rgba(1, 2, 5, 0.67);
|
|
141
|
+
--color-frosted: hsla(240, 4%, 85%, 0.35);
|
|
142
|
+
--color-contrast-low: #d8d8db;
|
|
143
|
+
--color-contrast-medium: #6b6d70;
|
|
144
|
+
--color-contrast-high: #535457;
|
|
145
|
+
--color-success: #197e10;
|
|
146
|
+
--color-success-soft: #e4ffec;
|
|
147
|
+
--color-warning: #f3be00;
|
|
148
|
+
--color-warning-soft: #fff4d2;
|
|
149
|
+
--color-error: #cc1922;
|
|
150
|
+
--color-error-soft: #ffe2e4;
|
|
151
|
+
--color-info: #2762ec;
|
|
152
|
+
--color-info-soft: #d3e1ff;
|
|
153
|
+
--color-hover: rgba(148, 149, 152, 0.18);
|
|
154
|
+
--color-active: rgba(148, 149, 152, 0.2);
|
|
155
|
+
--color-focus: #1a44ea;
|
|
156
|
+
--color-disabled: #949598;
|
|
157
|
+
--color-skeleton: #f7f7f7;
|
|
158
|
+
}
|
|
159
|
+
.dark {
|
|
160
|
+
--color-primary: #fbfcff;
|
|
161
|
+
--color-base: #0e0e12;
|
|
162
|
+
--color-surface: #212225;
|
|
163
|
+
--color-shading: rgba(38, 38, 41, 0.67);
|
|
164
|
+
--color-frosted: hsla(240, 3%, 26%, 0.35);
|
|
165
|
+
--color-contrast-low: #404044;
|
|
166
|
+
--color-contrast-medium: #88898c;
|
|
167
|
+
--color-contrast-high: #afb0b3;
|
|
168
|
+
--color-success: #09d087;
|
|
169
|
+
--color-success-soft: #003320;
|
|
170
|
+
--color-warning: #f7cb47;
|
|
171
|
+
--color-warning-soft: #362b0a;
|
|
172
|
+
--color-error: #fc4040;
|
|
173
|
+
--color-error-soft: #3a0f0f;
|
|
174
|
+
--color-info: #178bff;
|
|
175
|
+
--color-info-soft: #04294e;
|
|
176
|
+
--color-hover: rgba(148, 149, 152, 0.18);
|
|
177
|
+
--color-active: rgba(126, 127, 130, 0.2);
|
|
178
|
+
--color-focus: #1a44ea;
|
|
179
|
+
--color-disabled: #7e7f82;
|
|
180
|
+
--color-skeleton: #1a1b1e;
|
|
181
|
+
}
|
|
182
|
+
@media (prefers-color-scheme: dark) {
|
|
183
|
+
.auto {
|
|
184
|
+
--color-primary: #fbfcff;
|
|
185
|
+
--color-base: #0e0e12;
|
|
186
|
+
--color-surface: #212225;
|
|
187
|
+
--color-shading: rgba(38, 38, 41, 0.67);
|
|
188
|
+
--color-frosted: hsla(240, 3%, 26%, 0.35);
|
|
189
|
+
--color-contrast-low: #404044;
|
|
190
|
+
--color-contrast-medium: #88898c;
|
|
191
|
+
--color-contrast-high: #afb0b3;
|
|
192
|
+
--color-success: #09d087;
|
|
193
|
+
--color-success-soft: #003320;
|
|
194
|
+
--color-warning: #f7cb47;
|
|
195
|
+
--color-warning-soft: #362b0a;
|
|
196
|
+
--color-error: #fc4040;
|
|
197
|
+
--color-error-soft: #3a0f0f;
|
|
198
|
+
--color-info: #178bff;
|
|
199
|
+
--color-info-soft: #04294e;
|
|
200
|
+
--color-hover: rgba(148, 149, 152, 0.18);
|
|
201
|
+
--color-active: rgba(126, 127, 130, 0.2);
|
|
202
|
+
--color-focus: #1a44ea;
|
|
203
|
+
--color-disabled: #7e7f82;
|
|
204
|
+
--color-skeleton: #1a1b1e;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
@utility bg-fade-to-t {
|
|
209
|
+
@apply bg-linear-[to_top,hsla(0,0%,0%,.8)_0%,hsla(0,0%,0%,.8)_8.1%,hsla(0,0%,0%,.8)_15.5%,hsla(0,0%,0%,.8)_22.5%,hsla(0,0%,0%,.78)_29%,hsla(0,0%,0%,.73)_35.3%,hsla(0,0%,0%,.67)_41.2%,hsla(0,0%,0%,.6)_47.1%,hsla(0,0%,0%,.52)_52.9%,hsla(0,0%,0%,.44)_58.8%,hsla(0,0%,0%,.33)_64.7%,hsla(0,0%,0%,.22)_71%,hsla(0,0%,0%,.12)_77.5%,hsla(0,0%,0%,.05)_84.5%,hsla(0,0%,0%,.011)_91.9%,hsla(0,0%,0%,0)_100%];
|
|
210
|
+
}
|
|
211
|
+
@utility bg-fade-to-r {
|
|
212
|
+
@apply bg-linear-[to_right,hsla(0,0%,0%,.8)_0%,hsla(0,0%,0%,.8)_8.1%,hsla(0,0%,0%,.8)_15.5%,hsla(0,0%,0%,.8)_22.5%,hsla(0,0%,0%,.78)_29%,hsla(0,0%,0%,.73)_35.3%,hsla(0,0%,0%,.67)_41.2%,hsla(0,0%,0%,.6)_47.1%,hsla(0,0%,0%,.52)_52.9%,hsla(0,0%,0%,.44)_58.8%,hsla(0,0%,0%,.33)_64.7%,hsla(0,0%,0%,.22)_71%,hsla(0,0%,0%,.12)_77.5%,hsla(0,0%,0%,.05)_84.5%,hsla(0,0%,0%,.011)_91.9%,hsla(0,0%,0%,0)_100%];
|
|
213
|
+
}
|
|
214
|
+
@utility bg-fade-to-b {
|
|
215
|
+
@apply bg-linear-[to_bottom,hsla(0,0%,0%,.8)_0%,hsla(0,0%,0%,.8)_8.1%,hsla(0,0%,0%,.8)_15.5%,hsla(0,0%,0%,.8)_22.5%,hsla(0,0%,0%,.78)_29%,hsla(0,0%,0%,.73)_35.3%,hsla(0,0%,0%,.67)_41.2%,hsla(0,0%,0%,.6)_47.1%,hsla(0,0%,0%,.52)_52.9%,hsla(0,0%,0%,.44)_58.8%,hsla(0,0%,0%,.33)_64.7%,hsla(0,0%,0%,.22)_71%,hsla(0,0%,0%,.12)_77.5%,hsla(0,0%,0%,.05)_84.5%,hsla(0,0%,0%,.011)_91.9%,hsla(0,0%,0%,0)_100%];
|
|
216
|
+
}
|
|
217
|
+
@utility bg-fade-to-l {
|
|
218
|
+
@apply bg-linear-[to_left,hsla(0,0%,0%,.8)_0%,hsla(0,0%,0%,.8)_8.1%,hsla(0,0%,0%,.8)_15.5%,hsla(0,0%,0%,.8)_22.5%,hsla(0,0%,0%,.78)_29%,hsla(0,0%,0%,.73)_35.3%,hsla(0,0%,0%,.67)_41.2%,hsla(0,0%,0%,.6)_47.1%,hsla(0,0%,0%,.52)_52.9%,hsla(0,0%,0%,.44)_58.8%,hsla(0,0%,0%,.33)_64.7%,hsla(0,0%,0%,.22)_71%,hsla(0,0%,0%,.12)_77.5%,hsla(0,0%,0%,.05)_84.5%,hsla(0,0%,0%,.011)_91.9%,hsla(0,0%,0%,0)_100%];
|
|
219
|
+
}
|
|
220
|
+
@utility grid-template {
|
|
221
|
+
@apply [--pds-internal-grid-safe-zone:max(22px,10.625vw-12px)]
|
|
222
|
+
[--_pds-grid-col:minmax(0,var(--pds-internal-grid-outer-column,calc(var(--pds-internal-grid-safe-zone)-var(--spacing-fluid-md))))]
|
|
223
|
+
grid
|
|
224
|
+
grid-cols-[[full-start]_var(--_pds-grid-col)_[wide-start_extended-start_basic-start_narrow-start]_repeat(6,minmax(0,1fr))_[narrow-end_basic-end_extended-end_wide-end]_var(--_pds-grid-col)_[full-end]]
|
|
225
|
+
gap-(--spacing-fluid-md)
|
|
226
|
+
min-w-[var(--pds-internal-grid-width-min,320px)]
|
|
227
|
+
max-w-[var(--pds-internal-grid-width-max,2560px)]
|
|
228
|
+
box-content
|
|
229
|
+
mx-(--pds-internal-grid-margin,0)
|
|
230
|
+
px-[calc(50%-var(--pds-internal-grid-margin,0px)-2560px/2)]
|
|
231
|
+
sm:[--pds-internal-grid-safe-zone:calc(5vw-16px)]
|
|
232
|
+
sm:grid-cols-[[full-start]_var(--_pds-grid-col)_[wide-start]_minmax(0,1fr)_[extended-start]_minmax(0,1fr)_[basic-start]_repeat(2,minmax(0,1fr))_[narrow-start]_repeat(8,minmax(0,1fr))_[narrow-end]_repeat(2,minmax(0,1fr))_[basic-end]_minmax(0,1fr)_[extended-end]_minmax(0,1fr)_[wide-end]_var(--_pds-grid-col)[full-end]]
|
|
233
|
+
2xl:[--pds-internal-grid-safe-zone:min(50vw-880px,400px)];
|
|
234
|
+
}
|
|
235
|
+
@utility col-narrow {
|
|
236
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:4] col-[narrow];
|
|
237
|
+
}
|
|
238
|
+
@utility col-start-narrow {
|
|
239
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:4] col-start-[narrow-start];
|
|
240
|
+
}
|
|
241
|
+
@utility col-end-narrow {
|
|
242
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:4] col-end-[narrow-end];
|
|
243
|
+
}
|
|
244
|
+
@utility col-basic {
|
|
245
|
+
@apply [--_pds-grid-one-half:3] [--_pds-grid-one-third:2] [--_pds-grid-two-thirds:4] sm:[--_pds-grid-one-half:6] sm:[--_pds-grid-one-third:4] sm:[--_pds-grid-two-thirds:8] col-[basic];
|
|
246
|
+
}
|
|
247
|
+
@utility col-start-basic {
|
|
248
|
+
@apply [--_pds-grid-one-half:3] [--_pds-grid-one-third:2] [--_pds-grid-two-thirds:4] sm:[--_pds-grid-one-half:6] sm:[--_pds-grid-one-third:4] sm:[--_pds-grid-two-thirds:8] col-start-[basic-start];
|
|
249
|
+
}
|
|
250
|
+
@utility col-end-basic {
|
|
251
|
+
@apply [--_pds-grid-one-half:3] [--_pds-grid-one-third:2] [--_pds-grid-two-thirds:4] sm:[--_pds-grid-one-half:6] sm:[--_pds-grid-one-third:4] sm:[--_pds-grid-two-thirds:8] col-end-[basic-end];
|
|
252
|
+
}
|
|
253
|
+
@utility col-extended {
|
|
254
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:7] col-[extended];
|
|
255
|
+
}
|
|
256
|
+
@utility col-start-extended {
|
|
257
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:7] col-start-[extended-start];
|
|
258
|
+
}
|
|
259
|
+
@utility col-end-extended {
|
|
260
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:7] col-end-[extended-end];
|
|
261
|
+
}
|
|
262
|
+
@utility col-wide {
|
|
263
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:8] col-[wide];
|
|
264
|
+
}
|
|
265
|
+
@utility col-start-wide {
|
|
266
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:8] col-start-[wide-start];
|
|
267
|
+
}
|
|
268
|
+
@utility col-end-wide {
|
|
269
|
+
@apply [--_pds-grid-one-half:3] sm:[--_pds-grid-one-half:8] col-end-[wide-end];
|
|
270
|
+
}
|
|
271
|
+
@utility col-full {
|
|
272
|
+
@apply col-[full];
|
|
273
|
+
}
|
|
274
|
+
@utility col-start-full {
|
|
275
|
+
@apply col-start-[full-start];
|
|
276
|
+
}
|
|
277
|
+
@utility col-end-full {
|
|
278
|
+
@apply col-end-[full-end];
|
|
279
|
+
}
|
|
280
|
+
@utility col-span-one-half {
|
|
281
|
+
@apply col-span-(--_pds-grid-one-half,1);
|
|
282
|
+
}
|
|
283
|
+
@utility col-span-one-third {
|
|
284
|
+
@apply col-span-(--_pds-grid-one-third,1);
|
|
285
|
+
}
|
|
286
|
+
@utility col-span-two-thirds {
|
|
287
|
+
@apply col-span-(--_pds-grid-two-thirds,1);
|
|
288
|
+
}
|
|
289
|
+
@utility skeleton {
|
|
290
|
+
@apply animate-skeleton;
|
|
291
|
+
@apply block rounded-sm;
|
|
292
|
+
@apply bg-surface bg-[linear-gradient(to_right,transparent_0%,var(--color-skeleton)_20%,transparent_50%)] bg-position-[0_0] bg-size-[200%_100%];
|
|
293
|
+
}
|
|
294
|
+
@utility skeleton-light {
|
|
295
|
+
@apply animate-skeleton;
|
|
296
|
+
@apply block rounded-sm;
|
|
297
|
+
@apply bg-surface-light bg-[linear-gradient(to_right,transparent_0%,var(--color-skeleton-light)_20%,transparent_50%)] bg-position-[0_0] bg-size-[200%_100%];
|
|
298
|
+
}
|
|
299
|
+
@utility skeleton-dark {
|
|
300
|
+
@apply animate-skeleton;
|
|
301
|
+
@apply block rounded-sm;
|
|
302
|
+
@apply bg-surface-dark bg-[linear-gradient(to_right,transparent_0%,var(--color-skeleton-dark)_20%,transparent_50%)] bg-position-[0_0] bg-size-[200%_100%];
|
|
303
|
+
}
|
|
304
|
+
@utility prose-text-2xs {
|
|
305
|
+
@apply font-porsche-next not-italic font-normal text-2xs text-primary;
|
|
306
|
+
}
|
|
307
|
+
@utility prose-text-xs {
|
|
308
|
+
@apply font-porsche-next not-italic font-normal text-xs text-primary;
|
|
309
|
+
}
|
|
310
|
+
@utility prose-text-sm {
|
|
311
|
+
@apply font-porsche-next not-italic font-normal text-sm text-primary;
|
|
312
|
+
}
|
|
313
|
+
@utility prose-text-md {
|
|
314
|
+
@apply font-porsche-next not-italic font-normal text-md text-primary;
|
|
315
|
+
}
|
|
316
|
+
@utility prose-text-lg {
|
|
317
|
+
@apply font-porsche-next not-italic font-normal text-lg text-primary;
|
|
318
|
+
}
|
|
319
|
+
@utility prose-text-xl {
|
|
320
|
+
@apply font-porsche-next not-italic font-normal text-xl text-primary;
|
|
321
|
+
}
|
|
322
|
+
@utility prose-heading-sm {
|
|
323
|
+
@apply font-porsche-next not-italic font-semibold text-sm text-primary;
|
|
324
|
+
}
|
|
325
|
+
@utility prose-heading-md {
|
|
326
|
+
@apply font-porsche-next not-italic font-semibold text-md text-primary;
|
|
327
|
+
}
|
|
328
|
+
@utility prose-heading-lg {
|
|
329
|
+
@apply font-porsche-next not-italic font-semibold text-lg text-primary;
|
|
330
|
+
}
|
|
331
|
+
@utility prose-heading-xl {
|
|
332
|
+
@apply font-porsche-next not-italic font-semibold text-xl text-primary;
|
|
333
|
+
}
|
|
334
|
+
@utility prose-heading-2xl {
|
|
335
|
+
@apply font-porsche-next not-italic font-semibold text-2xl text-primary;
|
|
336
|
+
}
|
|
337
|
+
@utility prose-display-sm {
|
|
338
|
+
@apply font-porsche-next not-italic font-normal leading-normal text-primary;
|
|
339
|
+
font-size: clamp(1.8rem, 2.41vw + 1.32rem, 4.21rem);
|
|
340
|
+
}
|
|
341
|
+
@utility prose-display-md {
|
|
342
|
+
@apply font-porsche-next not-italic font-normal leading-normal text-primary;
|
|
343
|
+
font-size: clamp(2.03rem, 3.58vw + 1.31rem, 5.61rem);
|
|
344
|
+
}
|
|
345
|
+
@utility prose-display-lg {
|
|
346
|
+
@apply font-porsche-next not-italic font-normal leading-normal text-primary;
|
|
347
|
+
font-size: clamp(2.28rem, 5.2vw + 1.24rem, 7.48rem);
|
|
348
|
+
}
|