@porsche-design-system/components-react 3.15.1 → 3.16.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 +41 -0
- package/cjs/lib/components/flyout.wrapper.cjs +3 -3
- package/esm/lib/components/carousel.wrapper.d.ts +2 -2
- package/esm/lib/components/flyout.wrapper.d.ts +8 -0
- package/esm/lib/components/flyout.wrapper.mjs +3 -3
- package/esm/lib/components/modal.wrapper.d.ts +2 -2
- package/esm/lib/components/pagination.wrapper.d.ts +1 -1
- package/esm/lib/types.d.ts +4 -4
- package/package.json +2 -2
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +347 -320
- package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +13 -9
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/components/flyout.wrapper.cjs +4 -4
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout-navigation-item.cjs +5 -1
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout-navigation.cjs +5 -1
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.cjs +11 -5
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.cjs +13 -7
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs +1 -1
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +347 -320
- package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +13 -9
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/components/flyout.wrapper.mjs +4 -4
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout-navigation-item.mjs +5 -1
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout-navigation.mjs +5 -1
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.mjs +11 -5
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.mjs +13 -7
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.mjs +1 -1
- package/ssr/esm/lib/components/flyout.wrapper.d.ts +8 -0
- package/ssr/esm/lib/components/modal.wrapper.d.ts +2 -2
- package/ssr/esm/lib/dsr-components/banner.d.ts +8 -0
- package/ssr/esm/lib/dsr-components/flyout.d.ts +1 -3
- package/ssr/esm/lib/types.d.ts +4 -4
|
@@ -3192,15 +3192,19 @@ const isDisabledOrLoading = (disabled, loading) => {
|
|
|
3192
3192
|
};
|
|
3193
3193
|
|
|
3194
3194
|
const parseJSONAttribute = (attribute) => {
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3195
|
+
// Input is object, e.g. { 'aria-label': 'Some label' }
|
|
3196
|
+
if (typeof attribute !== 'string') {
|
|
3197
|
+
return attribute;
|
|
3198
|
+
}
|
|
3199
|
+
return JSON.parse(attribute
|
|
3200
|
+
// Convert single quotes to double quotes except the ones which are escaped by backslash
|
|
3201
|
+
.replace(/\\'/g, '__escaped_single_quote__')
|
|
3202
|
+
.replace(/'/g, '"')
|
|
3203
|
+
.replace(/__escaped_single_quote__/g, '\\\'')
|
|
3204
|
+
// Remove string escapes except the ones followed by unicode u0027
|
|
3205
|
+
.replace(/([^\\])\\(?!u0027)/g, '$1')
|
|
3206
|
+
// Wrap keys in double quotes
|
|
3207
|
+
.replace(/[\s"]?([\w-]+)[\s"]?:/g, '"$1":'));
|
|
3204
3208
|
};
|
|
3205
3209
|
|
|
3206
3210
|
const hasWindow = typeof window !== 'undefined';
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/components/flyout.wrapper.cjs
CHANGED
|
@@ -7,14 +7,14 @@ var hooks = require('../../hooks.cjs');
|
|
|
7
7
|
var utils = require('../../utils.cjs');
|
|
8
8
|
var flyout = require('../dsr-components/flyout.cjs');
|
|
9
9
|
|
|
10
|
-
const PFlyout = react.forwardRef(({ aria, onDismiss, open = false, position = 'end', theme, className, children, ...rest }, ref) => {
|
|
10
|
+
const PFlyout = react.forwardRef(({ aria, disableBackdropClick = false, onDismiss, open = false, position = 'end', theme, className, children, ...rest }, ref) => {
|
|
11
11
|
const elementRef = react.useRef();
|
|
12
12
|
hooks.useEventCallback(elementRef, 'dismiss', onDismiss);
|
|
13
13
|
const WebComponentTag = hooks.usePrefix('p-flyout');
|
|
14
|
-
const propsToSync = [aria, open, position, theme || hooks.useTheme()];
|
|
14
|
+
const propsToSync = [aria, disableBackdropClick, open, position, theme || hooks.useTheme()];
|
|
15
15
|
hooks.useBrowserLayoutEffect(() => {
|
|
16
16
|
const { current } = elementRef;
|
|
17
|
-
['aria', 'open', 'position', 'theme'].forEach((propName, i) => (current[propName] = propsToSync[i]));
|
|
17
|
+
['aria', 'disableBackdropClick', 'open', 'position', 'theme'].forEach((propName, i) => (current[propName] = propsToSync[i]));
|
|
18
18
|
}, propsToSync);
|
|
19
19
|
// @ts-ignore
|
|
20
20
|
if (!process.browser) {
|
|
@@ -25,7 +25,7 @@ const PFlyout = react.forwardRef(({ aria, onDismiss, open = false, position = 'e
|
|
|
25
25
|
// @ts-ignore
|
|
26
26
|
...(!process.browser
|
|
27
27
|
? {
|
|
28
|
-
children: (jsxRuntime.jsx(flyout.DSRFlyout, { aria, open, position, theme: theme || hooks.useTheme(), children })),
|
|
28
|
+
children: (jsxRuntime.jsx(flyout.DSRFlyout, { aria, disableBackdropClick, open, position, theme: theme || hooks.useTheme(), children })),
|
|
29
29
|
}
|
|
30
30
|
: {
|
|
31
31
|
children,
|
|
@@ -88,7 +88,11 @@ class DSRFlyoutNavigationItem extends react.Component {
|
|
|
88
88
|
render() {
|
|
89
89
|
splitChildren.splitChildren(this.props.children);
|
|
90
90
|
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getFlyoutNavigationItemCss(this.open, this.theme)));
|
|
91
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", type: "button", size: "medium", alignLabel: "start", stretch: true, icon: "arrow-head-right", active: this.open, aria: { 'aria-expanded': this.open }, theme: this.theme, children: this.props.label }), jsxRuntime.jsxs("div", { className: "scroller",
|
|
91
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", type: "button", size: "medium", alignLabel: "start", stretch: true, icon: "arrow-head-right", active: this.open, aria: { 'aria-expanded': this.open }, theme: this.theme, children: this.props.label }), jsxRuntime.jsxs("div", { className: "scroller",
|
|
92
|
+
// "inert" will be known from React 19 onwards, see https://github.com/facebook/react/pull/24730
|
|
93
|
+
// eslint-disable-next-line
|
|
94
|
+
/* @ts-ignore */
|
|
95
|
+
inert: this.open ? null : '', children: [jsxRuntime.jsxs("div", { className: "header", children: [jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "back", type: "button", size: "medium", icon: "arrow-head-left", hideLabel: true, theme: this.theme, children: "Back" }), jsxRuntime.jsx("h2", { className: "heading", children: this.props.label })] }), jsxRuntime.jsx("div", { className: "content", children: jsxRuntime.jsx("slot", {}) })] })] })] }), this.props.children] }));
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
|
|
@@ -86,7 +86,11 @@ class DSRFlyoutNavigation extends react.Component {
|
|
|
86
86
|
render() {
|
|
87
87
|
splitChildren.splitChildren(this.props.children);
|
|
88
88
|
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getFlyoutNavigationCss(this.props.open, !!this.props.activeIdentifier, this.props.theme)));
|
|
89
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("dialog", {
|
|
89
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("dialog", {
|
|
90
|
+
// "inert" will be known from React 19 onwards, see https://github.com/facebook/react/pull/24730
|
|
91
|
+
// eslint-disable-next-line
|
|
92
|
+
/* @ts-ignore */
|
|
93
|
+
inert: this.props.open ? null : '', tabIndex: -1, children: [jsxRuntime.jsx("div", { className: "header", children: jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "dismiss", type: "button", size: "medium", icon: "close", hideLabel: true, theme: this.props.theme, children: "Dismiss flyout" }) }), jsxRuntime.jsx("div", { className: "scroller", children: jsxRuntime.jsx("nav", { className: "content", ...utilsEntry.parseAndGetAriaAttributes(this.props.aria), children: jsxRuntime.jsx("slot", {}) }) })] })] }), this.props.children] }));
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
96
|
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.cjs
CHANGED
|
@@ -80,11 +80,9 @@ var utilsEntry = require('../../../../../../components/dist/utils/esm/utils-entr
|
|
|
80
80
|
class DSRFlyout extends react.Component {
|
|
81
81
|
host;
|
|
82
82
|
dialog;
|
|
83
|
-
|
|
84
|
-
dismissBtn;
|
|
83
|
+
scroller;
|
|
85
84
|
header;
|
|
86
85
|
footer;
|
|
87
|
-
subFooter;
|
|
88
86
|
hasHeader;
|
|
89
87
|
hasFooter;
|
|
90
88
|
hasSubFooter;
|
|
@@ -97,8 +95,16 @@ class DSRFlyout extends react.Component {
|
|
|
97
95
|
const hasHeader = namedSlotChildren.filter(({ props: { slot } }) => slot === 'header').length > 0;
|
|
98
96
|
const hasFooter = namedSlotChildren.filter(({ props: { slot } }) => slot === 'footer').length > 0;
|
|
99
97
|
const hasSubFooter = namedSlotChildren.filter(({ props: { slot } }) => slot === 'sub-footer').length > 0;
|
|
100
|
-
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getFlyoutCss(this.props.open, (positionDeprecationMap[this.props.position] || this.props.position), hasFooter, hasSubFooter, this.props.theme)));
|
|
101
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx("dialog", {
|
|
98
|
+
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getFlyoutCss(this.props.open, (positionDeprecationMap[this.props.position] || this.props.position), hasHeader, hasFooter, hasSubFooter, this.props.theme)));
|
|
99
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx("dialog", {
|
|
100
|
+
// "inert" will be known from React 19 onwards, see https://github.com/facebook/react/pull/24730
|
|
101
|
+
// eslint-disable-next-line
|
|
102
|
+
/* @ts-ignore */
|
|
103
|
+
inert: this.props.open ? null : '', tabIndex: -1, ...utilsEntry.parseAndGetAriaAttributes({
|
|
104
|
+
'aria-modal': true,
|
|
105
|
+
'aria-hidden': !this.props.open,
|
|
106
|
+
...utilsEntry.parseAndGetAriaAttributes(this.props.aria),
|
|
107
|
+
}), children: jsxRuntime.jsx("div", { className: "scroller", children: jsxRuntime.jsxs("div", { className: "flyout", children: [jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "dismiss", type: "button", hideLabel: true, icon: "close", theme: this.props.theme, children: "Dismiss flyout" }), hasHeader && jsxRuntime.jsx("slot", { name: "header" }), jsxRuntime.jsx("slot", {}), hasFooter && jsxRuntime.jsx("slot", { name: "footer" }), hasSubFooter && jsxRuntime.jsx("slot", { name: "sub-footer" })] }) }) })] }), this.props.children] }));
|
|
102
108
|
}
|
|
103
109
|
}
|
|
104
110
|
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.cjs
CHANGED
|
@@ -81,17 +81,23 @@ class DSRModal extends react.Component {
|
|
|
81
81
|
host;
|
|
82
82
|
render() {
|
|
83
83
|
const { children, namedSlotChildren, otherChildren } = splitChildren.splitChildren(this.props.children);
|
|
84
|
-
const hasHeader = (this.props.heading || namedSlotChildren.filter(({ props: { slot } }) => slot === 'heading').length > 0);
|
|
84
|
+
const hasHeader = (this.props.heading || namedSlotChildren.filter(({ props: { slot } }) => slot === 'heading').length > 0) || namedSlotChildren.filter(({ props: { slot } }) => slot === 'header').length > 0;
|
|
85
85
|
const hasFooter = namedSlotChildren.filter(({ props: { slot } }) => slot === 'footer').length > 0;
|
|
86
86
|
const hasDismissButton = this.props.disableCloseButton ? false : this.props.dismissButton;
|
|
87
|
+
// TODO: why do we validate only when opened?
|
|
87
88
|
if (this.props.open) ;
|
|
88
89
|
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getModalCss(this.props.open, this.props.backdrop, this.props.fullscreen, hasDismissButton, hasHeader, hasFooter, this.props.theme)));
|
|
89
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx("dialog", {
|
|
91
|
+
// "inert" will be known from React 19 onwards, see https://github.com/facebook/react/pull/24730
|
|
92
|
+
// eslint-disable-next-line
|
|
93
|
+
/* @ts-ignore */
|
|
94
|
+
inert: this.props.open ? null : '', tabIndex: -1, ...utilsEntry.parseAndGetAriaAttributes({
|
|
95
|
+
'aria-modal': true,
|
|
96
|
+
'aria-label': this.props.heading,
|
|
97
|
+
'aria-hidden': !this.props.open,
|
|
98
|
+
...utilsEntry.parseAndGetAriaAttributes(this.props.aria),
|
|
99
|
+
}), children: jsxRuntime.jsx("div", { className: "scroller", children: jsxRuntime.jsxs("div", { className: "modal", children: [hasDismissButton && (jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "dismiss", type: "button", hideLabel: true, icon: "close", theme: this.props.theme, children: "Dismiss modal" })), hasHeader &&
|
|
100
|
+
(this.props.heading ? (jsxRuntime.jsx("h2", { children: this.props.heading })) : namedSlotChildren.filter(({ props: { slot } }) => slot === 'heading').length > 0 ? (jsxRuntime.jsx("slot", { name: "heading" })) : (jsxRuntime.jsx("slot", { name: "header" }))), jsxRuntime.jsx("slot", {}), hasFooter && jsxRuntime.jsx("slot", { name: "footer" })] }) }) })] }), this.props.children] }));
|
|
95
101
|
}
|
|
96
102
|
}
|
|
97
103
|
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs
CHANGED
|
@@ -104,7 +104,7 @@ class DSRMultiSelect extends react.Component {
|
|
|
104
104
|
const dropdownId = 'list';
|
|
105
105
|
const inputId = 'filter';
|
|
106
106
|
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getMultiSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
|
|
107
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxRuntime.jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [utilsEntry.getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", icon: "close", hideLabel:
|
|
107
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs("div", { className: "root", children: [jsxRuntime.jsx(label.Label, { hasLabel: this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0, hasDescription: this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0, host: null, label: this.props.label, description: this.props.description, htmlFor: inputId, isRequired: this.props.required, isDisabled: this.props.disabled }), this.props.currentValue && (jsxRuntime.jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [utilsEntry.getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "button", icon: "close", hideLabel: true, theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsxRuntime.jsx("div", { ...(this.props.isNativePopoverCase && {
|
|
108
108
|
popover: 'auto',
|
|
109
109
|
className: 'popover',
|
|
110
110
|
...(this.props.popoverElement?.matches(':popover-open') && {
|