@porsche-design-system/components-react 3.13.0-rc.2 → 3.13.1
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 +13 -0
- package/package.json +2 -2
- package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +65 -55
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs +11 -2
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.cjs +4 -4
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select-wrapper-dropdown.cjs +2 -2
- package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.cjs +11 -2
- package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +65 -55
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.mjs +11 -2
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.mjs +4 -4
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select-wrapper-dropdown.mjs +2 -2
- package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.mjs +11 -2
- package/ssr/esm/lib/dsr-components/multi-select.d.ts +3 -0
- package/ssr/esm/lib/dsr-components/popover.d.ts +1 -1
- package/ssr/esm/lib/dsr-components/select-wrapper-dropdown.d.ts +1 -1
- package/ssr/esm/lib/dsr-components/select.d.ts +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
|
|
|
14
14
|
|
|
15
15
|
### [Unreleased]
|
|
16
16
|
|
|
17
|
+
### [3.13.1] - 2024-03-20
|
|
18
|
+
|
|
19
|
+
#### Fixed
|
|
20
|
+
|
|
21
|
+
- `Modal`: Unexpected scrolling behavior on iOS >= 17.4
|
|
22
|
+
([#3128](https://github.com/porsche-design-system/porsche-design-system/pull/3128))
|
|
23
|
+
- `Select`, `Multi-Select`: Cropping issues of select dropdown when used inside `Table` component
|
|
24
|
+
([#3114](https://github.com/porsche-design-system/porsche-design-system/pull/3114))
|
|
25
|
+
- `Flyout`, `Flyout Navigation`: iOS Safari URL bar overlaying
|
|
26
|
+
([#3131](https://github.com/porsche-design-system/porsche-design-system/pull/3131))
|
|
27
|
+
|
|
28
|
+
### [3.13.0] - 2024-03-11
|
|
29
|
+
|
|
17
30
|
### [3.13.0-rc.2] - 2024-03-11
|
|
18
31
|
|
|
19
32
|
#### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porsche-design-system/components-react",
|
|
3
|
-
"version": "3.13.
|
|
3
|
+
"version": "3.13.1",
|
|
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.13.
|
|
20
|
+
"@porsche-design-system/components-js": "3.13.1"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"react": ">=17.0.0 <19.0.0",
|
|
@@ -4308,22 +4308,19 @@ const getFontSizeText = (size) => {
|
|
|
4308
4308
|
return fontSizeTextMap[size];
|
|
4309
4309
|
};
|
|
4310
4310
|
|
|
4311
|
-
// TODO: why not using getHiddenTextJssStyle()?
|
|
4312
4311
|
// Needed for slotted anchor and hidden label, which then enlarges the hidden label to equal host size and indents the text to be visually hidden.
|
|
4313
4312
|
const getVisibilityJssStyle = (hideLabel) => {
|
|
4314
4313
|
return hideLabel
|
|
4315
4314
|
? {
|
|
4316
|
-
position: 'absolute',
|
|
4317
|
-
inset: 0,
|
|
4318
4315
|
whiteSpace: 'nowrap',
|
|
4319
|
-
textIndent: '-999999px', //
|
|
4316
|
+
textIndent: '-999999px', // Needed because standard sr-only classes don't work here due that we need a bounding box for the focus style
|
|
4317
|
+
overflow: 'hidden',
|
|
4320
4318
|
}
|
|
4321
4319
|
: {
|
|
4322
|
-
position: 'relative',
|
|
4323
|
-
inset: 'auto',
|
|
4324
4320
|
whiteSpace: 'inherit',
|
|
4325
4321
|
textIndent: 0,
|
|
4326
4322
|
zIndex: 1, // fix Firefox bug on :hover (#2583)
|
|
4323
|
+
overflow: 'visible',
|
|
4327
4324
|
};
|
|
4328
4325
|
};
|
|
4329
4326
|
const offsetVertical = '-2px';
|
|
@@ -4350,7 +4347,6 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4350
4347
|
},
|
|
4351
4348
|
root: {
|
|
4352
4349
|
display: 'flex',
|
|
4353
|
-
gap: spacingStaticXSmall,
|
|
4354
4350
|
width: '100%',
|
|
4355
4351
|
padding: 0,
|
|
4356
4352
|
margin: 0, // Removes default button margin on safari 15
|
|
@@ -4359,7 +4355,9 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4359
4355
|
color: isDisabledOrLoading ? disabledColorDark : primaryColorDark,
|
|
4360
4356
|
}),
|
|
4361
4357
|
...textSmallStyle,
|
|
4362
|
-
...mergeDeep(buildResponsiveStyles(
|
|
4358
|
+
...mergeDeep(buildResponsiveStyles(hideLabel, (hidelabelValue) => ({
|
|
4359
|
+
gap: hidelabelValue ? 0 : spacingStaticXSmall,
|
|
4360
|
+
})), buildResponsiveStyles(stretch, (stretchValue) => ({
|
|
4363
4361
|
justifyContent: stretchValue ? 'space-between' : 'flex-start',
|
|
4364
4362
|
alignItems: stretchValue ? 'center' : 'flex-start',
|
|
4365
4363
|
})), buildResponsiveStyles(size, (sizeValue) => ({
|
|
@@ -4396,28 +4394,30 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4396
4394
|
})),
|
|
4397
4395
|
...(!hasSlottedAnchor && getFocusJssStyle(theme, { pseudo: true, offset: '-2px' })),
|
|
4398
4396
|
},
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
width: `round(down, ${fontLineHeight}, 1px)`,
|
|
4413
|
-
height: `round(down, ${fontLineHeight}, 1px)`,
|
|
4397
|
+
...(hasIcon
|
|
4398
|
+
? {
|
|
4399
|
+
icon: {
|
|
4400
|
+
position: 'relative',
|
|
4401
|
+
flexShrink: '0',
|
|
4402
|
+
width: fontLineHeight,
|
|
4403
|
+
height: fontLineHeight,
|
|
4404
|
+
// workaround for Safari to optimize vertical alignment of icons
|
|
4405
|
+
// TODO: check if this is still needed after optimized icons are included
|
|
4406
|
+
'@supports (width: round(down, 1px, 1px))': {
|
|
4407
|
+
width: `round(down, ${fontLineHeight}, 1px)`,
|
|
4408
|
+
height: `round(down, ${fontLineHeight}, 1px)`,
|
|
4409
|
+
},
|
|
4414
4410
|
},
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
}
|
|
4420
|
-
|
|
4411
|
+
label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
|
|
4412
|
+
// TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
|
|
4413
|
+
order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
|
|
4414
|
+
}))),
|
|
4415
|
+
}
|
|
4416
|
+
: {
|
|
4417
|
+
label: {
|
|
4418
|
+
position: 'relative', // needed for hover state when icon="none" is set
|
|
4419
|
+
},
|
|
4420
|
+
}),
|
|
4421
4421
|
};
|
|
4422
4422
|
};
|
|
4423
4423
|
|
|
@@ -5651,8 +5651,8 @@ const getComponentCss$S = (inline, wrap, direction, justifyContent, alignItems,
|
|
|
5651
5651
|
const getFlyoutDialogResetJssStyle = () => {
|
|
5652
5652
|
return {
|
|
5653
5653
|
position: 'fixed',
|
|
5654
|
-
height: '
|
|
5655
|
-
maxHeight: '
|
|
5654
|
+
height: '100dvh',
|
|
5655
|
+
maxHeight: '100dvh',
|
|
5656
5656
|
margin: '0',
|
|
5657
5657
|
padding: '0',
|
|
5658
5658
|
border: '0',
|
|
@@ -7184,6 +7184,22 @@ const getPlaceholderJssStyle = (styles) => ({
|
|
|
7184
7184
|
'&:-moz-placeholder': styles /* Firefox 18- */,
|
|
7185
7185
|
});
|
|
7186
7186
|
|
|
7187
|
+
// Used for elements that must overflow `overflow:hidden` containers, are positioned absolute and wrapped within a native `popover` element.
|
|
7188
|
+
const getPopoverResetJssStyle = () => {
|
|
7189
|
+
return {
|
|
7190
|
+
position: 'absolute',
|
|
7191
|
+
border: 'none',
|
|
7192
|
+
background: 'none',
|
|
7193
|
+
pointerEvents: 'all',
|
|
7194
|
+
padding: 0,
|
|
7195
|
+
margin: 0,
|
|
7196
|
+
overflow: 'initial',
|
|
7197
|
+
'&:-internal-popover-in-top-layer::backdrop': {
|
|
7198
|
+
display: 'none',
|
|
7199
|
+
},
|
|
7200
|
+
};
|
|
7201
|
+
};
|
|
7202
|
+
|
|
7187
7203
|
const getSlottedTextFieldTextareaSelectStyles = (child, state, isLoading, theme, additionalDefaultJssStyle) => {
|
|
7188
7204
|
const { primaryColor, contrastLowColor, contrastMediumColor, disabledColor } = getThemedColors(theme);
|
|
7189
7205
|
const { primaryColor: primaryColorDark, contrastLowColor: contrastLowColorDark, contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark, } = getThemedColors('dark');
|
|
@@ -7295,7 +7311,7 @@ const getUnitCounterJssStyle = (isDisabled, theme) => {
|
|
|
7295
7311
|
|
|
7296
7312
|
const INTERNAL_MULTI_SELECT_SLOT = 'internal-select';
|
|
7297
7313
|
|
|
7298
|
-
const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
|
|
7314
|
+
const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
|
|
7299
7315
|
const { contrastHighColor } = getThemedColors(theme);
|
|
7300
7316
|
const { contrastHighColor: contrastHighColorDark } = getThemedColors('dark');
|
|
7301
7317
|
return getCss({
|
|
@@ -7366,6 +7382,11 @@ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWi
|
|
|
7366
7382
|
...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
|
|
7367
7383
|
// .message
|
|
7368
7384
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
7385
|
+
...(isNativePopoverCase && {
|
|
7386
|
+
popover: {
|
|
7387
|
+
...getPopoverResetJssStyle(),
|
|
7388
|
+
},
|
|
7389
|
+
}),
|
|
7369
7390
|
});
|
|
7370
7391
|
};
|
|
7371
7392
|
// TODO: use getSlottedTextFieldTextareaSelectStyles() instead an manipulate selectors like done with PIN Code or even better make it configurable as parameter
|
|
@@ -7812,7 +7833,7 @@ const getDirectionArrowMap = (theme) => {
|
|
|
7812
7833
|
},
|
|
7813
7834
|
};
|
|
7814
7835
|
};
|
|
7815
|
-
const getComponentCss$w = (direction,
|
|
7836
|
+
const getComponentCss$w = (direction, isNativePopoverCase, theme) => {
|
|
7816
7837
|
const { hoverColor, backgroundColor, primaryColor, backgroundSurfaceColor } = getThemedColors(theme);
|
|
7817
7838
|
const { hoverColor: hoverColorDark, primaryColor: primaryColorDark, backgroundSurfaceColor: backgroundSurfaceColorDark, } = getThemedColors('dark');
|
|
7818
7839
|
const shadowColor = 'rgba(0,0,0,0.3)';
|
|
@@ -7862,13 +7883,9 @@ const getComponentCss$w = (direction, isNative, theme) => {
|
|
|
7862
7883
|
transform: 'translate3d(0,0,0)', // Fixes movement on hover in Safari
|
|
7863
7884
|
},
|
|
7864
7885
|
spacer: {
|
|
7865
|
-
...(
|
|
7886
|
+
...(isNativePopoverCase
|
|
7866
7887
|
? {
|
|
7867
|
-
|
|
7868
|
-
backgroundColor: 'transparent',
|
|
7869
|
-
border: 'none',
|
|
7870
|
-
margin: 0,
|
|
7871
|
-
padding: 0,
|
|
7888
|
+
...getPopoverResetJssStyle(),
|
|
7872
7889
|
}
|
|
7873
7890
|
: {
|
|
7874
7891
|
inset: `${-safeZonePx}px`,
|
|
@@ -8560,7 +8577,7 @@ const getListStyles$1 = (direction, theme) => {
|
|
|
8560
8577
|
},
|
|
8561
8578
|
};
|
|
8562
8579
|
};
|
|
8563
|
-
const getComponentCss$r = (direction, isOpen, state, disabled, filter,
|
|
8580
|
+
const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopoverCase, theme) => {
|
|
8564
8581
|
return getCss(
|
|
8565
8582
|
// merge because of global styles
|
|
8566
8583
|
mergeDeep({
|
|
@@ -8573,21 +8590,9 @@ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativeP
|
|
|
8573
8590
|
'sr-text': {
|
|
8574
8591
|
display: 'none',
|
|
8575
8592
|
},
|
|
8576
|
-
...(
|
|
8593
|
+
...(isNativePopoverCase && {
|
|
8577
8594
|
popover: {
|
|
8578
|
-
|
|
8579
|
-
bottom: 'auto',
|
|
8580
|
-
border: 'none',
|
|
8581
|
-
background: 'none',
|
|
8582
|
-
pointerEvents: 'all',
|
|
8583
|
-
padding: 0,
|
|
8584
|
-
margin: 0,
|
|
8585
|
-
overflow: 'initial',
|
|
8586
|
-
height: 'auto',
|
|
8587
|
-
maxHeight: `${8.5 * (OPTION_HEIGHT + 8) + 6 + 2}px`, // 8px = gap, 6px = padding, 2px = border
|
|
8588
|
-
'&:-internal-popover-in-top-layer::backdrop': {
|
|
8589
|
-
display: 'none',
|
|
8590
|
-
},
|
|
8595
|
+
...getPopoverResetJssStyle(),
|
|
8591
8596
|
},
|
|
8592
8597
|
}),
|
|
8593
8598
|
}, filter
|
|
@@ -8739,7 +8744,7 @@ const getOptionStyles = (theme) => {
|
|
|
8739
8744
|
|
|
8740
8745
|
const INTERNAL_SELECT_SLOT = 'internal-select';
|
|
8741
8746
|
|
|
8742
|
-
const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
|
|
8747
|
+
const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
|
|
8743
8748
|
return getCss({
|
|
8744
8749
|
'@global': {
|
|
8745
8750
|
':host': addImportantToEachRule({
|
|
@@ -8787,6 +8792,11 @@ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWi
|
|
|
8787
8792
|
...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
|
|
8788
8793
|
// .message
|
|
8789
8794
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
8795
|
+
...(isNativePopoverCase && {
|
|
8796
|
+
popover: {
|
|
8797
|
+
...getPopoverResetJssStyle(),
|
|
8798
|
+
},
|
|
8799
|
+
}),
|
|
8790
8800
|
});
|
|
8791
8801
|
};
|
|
8792
8802
|
// TODO: Rename to JSSStyles
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs
CHANGED
|
@@ -92,6 +92,9 @@ class DSRMultiSelect extends react.Component {
|
|
|
92
92
|
form;
|
|
93
93
|
isWithinForm;
|
|
94
94
|
preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
|
|
95
|
+
isNativePopoverCase = false;
|
|
96
|
+
parentTableElement;
|
|
97
|
+
popoverElement;
|
|
95
98
|
get currentValue() {
|
|
96
99
|
return utilsEntry.getSelectedOptionValues(this.props.multiSelectOptions);
|
|
97
100
|
}
|
|
@@ -100,8 +103,14 @@ class DSRMultiSelect extends react.Component {
|
|
|
100
103
|
const optionsSelectedId = 'options-selected';
|
|
101
104
|
const dropdownId = 'list';
|
|
102
105
|
const inputId = 'filter';
|
|
103
|
-
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.theme)));
|
|
104
|
-
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.
|
|
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: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsxRuntime.jsx("div", { ...(this.props.isNativePopoverCase && {
|
|
108
|
+
popover: 'auto',
|
|
109
|
+
className: 'popover',
|
|
110
|
+
...(this.props.popoverElement?.matches(':popover-open') && {
|
|
111
|
+
'popover-open': true,
|
|
112
|
+
}),
|
|
113
|
+
}), children: jsxRuntime.jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxRuntime.jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: "---" }), jsxRuntime.jsx("span", { className: "sr-only", children: "No results found" })] })), jsxRuntime.jsx("slot", {})] }) })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
|
|
105
114
|
}
|
|
106
115
|
}
|
|
107
116
|
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.cjs
CHANGED
|
@@ -82,13 +82,13 @@ class DSRPopover extends react.Component {
|
|
|
82
82
|
spacer;
|
|
83
83
|
popover;
|
|
84
84
|
button;
|
|
85
|
-
|
|
85
|
+
isNativePopoverCase = false;
|
|
86
86
|
parentTableElement;
|
|
87
87
|
render() {
|
|
88
88
|
splitChildren.splitChildren(this.props.children);
|
|
89
|
-
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getPopoverCss(this.props.direction, this.props.
|
|
90
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", ...(this.props.
|
|
91
|
-
}), children: [jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsxRuntime.jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.
|
|
89
|
+
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getPopoverCss(this.props.direction, this.props.isNativePopoverCase, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
|
|
90
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", ...(this.props.isNativePopoverCase ? { popoverTarget: 'spacer' } : { ...(!this.props.isNativePopoverCase && { 'aria-expanded': this.props.open }),
|
|
91
|
+
}), children: [jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsxRuntime.jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNativePopoverCase) && (jsxRuntime.jsx("div", { className: "spacer", ...(this.props.isNativePopoverCase && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsxRuntime.jsx("div", { className: "popover", children: this.props.description ? jsxRuntime.jsx("p", { children: this.props.description }) : jsxRuntime.jsx("slot", {}) }) }))] })] }), this.props.children] }));
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -83,7 +83,7 @@ class DSRSelectWrapperDropdown extends react.Component {
|
|
|
83
83
|
searchString = '';
|
|
84
84
|
inputElement;
|
|
85
85
|
listElement;
|
|
86
|
-
|
|
86
|
+
isNativePopoverCase = false;
|
|
87
87
|
parentTableElement;
|
|
88
88
|
popoverElement;
|
|
89
89
|
get selectedIndex() {
|
|
@@ -96,7 +96,7 @@ class DSRSelectWrapperDropdown extends react.Component {
|
|
|
96
96
|
const buttonId = 'value';
|
|
97
97
|
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectWrapperDropdownCss(this.props.direction === 'auto'
|
|
98
98
|
? 'down'
|
|
99
|
-
: this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.
|
|
99
|
+
: this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopoverCase, this.props.theme)));
|
|
100
100
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx(jsxRuntime.Fragment, { children: this.props.filter ? ([
|
|
101
101
|
jsxRuntime.jsx("input", { type: "text", role: "combobox", disabled: this.props.disabled, placeholder: utilsEntry.getSelectedOptionMap(this.optionMaps)?.value || null, autoComplete: "off", defaultValue: this.searchString }, "input"),
|
|
102
102
|
jsxRuntime.jsx("span", {
|
package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.cjs
CHANGED
|
@@ -93,6 +93,9 @@ class DSRSelect extends react.Component {
|
|
|
93
93
|
preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
|
|
94
94
|
searchString = '';
|
|
95
95
|
searchTimeout = null;
|
|
96
|
+
isNativePopoverCase = false;
|
|
97
|
+
parentTableElement;
|
|
98
|
+
popoverElement;
|
|
96
99
|
render() {
|
|
97
100
|
const { children, namedSlotChildren, otherChildren } = splitChildren.splitChildren(this.props.children);
|
|
98
101
|
const buttonId = 'value';
|
|
@@ -102,8 +105,14 @@ class DSRSelect extends react.Component {
|
|
|
102
105
|
const ariaDescribedBy = descriptionId && selectMessageId
|
|
103
106
|
? `${descriptionId} ${selectMessageId}`
|
|
104
107
|
: descriptionId || selectMessageId || undefined;
|
|
105
|
-
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
|
|
106
|
-
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: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("button", { type: "button", role: "combobox", id: buttonId, ...utilsEntry.getComboboxAriaAttributes(this.props.isOpen, this.props.required, label.labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: utilsEntry.getSelectedOptionString(otherChildren) }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsxRuntime.jsx("div", {
|
|
108
|
+
const style = minifyCss.minifyCss(stripFocusAndHoverStyles.stripFocusAndHoverStyles(stylesEntry.getSelectCss('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
|
|
109
|
+
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: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxRuntime.jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsxRuntime.jsx("button", { type: "button", role: "combobox", id: buttonId, ...utilsEntry.getComboboxAriaAttributes(this.props.isOpen, this.props.required, label.labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: utilsEntry.getSelectedOptionString(otherChildren) }), jsxRuntime.jsx(icon_wrapper.PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsxRuntime.jsx("div", { ...(this.props.isNativePopoverCase && {
|
|
110
|
+
popover: 'auto',
|
|
111
|
+
className: 'popover',
|
|
112
|
+
...(this.props.popoverElement?.matches(':popover-open') && {
|
|
113
|
+
'popover-open': true,
|
|
114
|
+
}),
|
|
115
|
+
}), children: jsxRuntime.jsx("div", { id: dropdownId, className: "listbox", ...utilsEntry.getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsxRuntime.jsx("slot", {}) }) })] }), jsxRuntime.jsx(stateMessage.StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsxRuntime.jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsxRuntime.jsx("slot", { name: utilsEntry.INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
|
|
107
116
|
}
|
|
108
117
|
}
|
|
109
118
|
|
|
@@ -4306,22 +4306,19 @@ const getFontSizeText = (size) => {
|
|
|
4306
4306
|
return fontSizeTextMap[size];
|
|
4307
4307
|
};
|
|
4308
4308
|
|
|
4309
|
-
// TODO: why not using getHiddenTextJssStyle()?
|
|
4310
4309
|
// Needed for slotted anchor and hidden label, which then enlarges the hidden label to equal host size and indents the text to be visually hidden.
|
|
4311
4310
|
const getVisibilityJssStyle = (hideLabel) => {
|
|
4312
4311
|
return hideLabel
|
|
4313
4312
|
? {
|
|
4314
|
-
position: 'absolute',
|
|
4315
|
-
inset: 0,
|
|
4316
4313
|
whiteSpace: 'nowrap',
|
|
4317
|
-
textIndent: '-999999px', //
|
|
4314
|
+
textIndent: '-999999px', // Needed because standard sr-only classes don't work here due that we need a bounding box for the focus style
|
|
4315
|
+
overflow: 'hidden',
|
|
4318
4316
|
}
|
|
4319
4317
|
: {
|
|
4320
|
-
position: 'relative',
|
|
4321
|
-
inset: 'auto',
|
|
4322
4318
|
whiteSpace: 'inherit',
|
|
4323
4319
|
textIndent: 0,
|
|
4324
4320
|
zIndex: 1, // fix Firefox bug on :hover (#2583)
|
|
4321
|
+
overflow: 'visible',
|
|
4325
4322
|
};
|
|
4326
4323
|
};
|
|
4327
4324
|
const offsetVertical = '-2px';
|
|
@@ -4348,7 +4345,6 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4348
4345
|
},
|
|
4349
4346
|
root: {
|
|
4350
4347
|
display: 'flex',
|
|
4351
|
-
gap: spacingStaticXSmall,
|
|
4352
4348
|
width: '100%',
|
|
4353
4349
|
padding: 0,
|
|
4354
4350
|
margin: 0, // Removes default button margin on safari 15
|
|
@@ -4357,7 +4353,9 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4357
4353
|
color: isDisabledOrLoading ? disabledColorDark : primaryColorDark,
|
|
4358
4354
|
}),
|
|
4359
4355
|
...textSmallStyle,
|
|
4360
|
-
...mergeDeep(buildResponsiveStyles(
|
|
4356
|
+
...mergeDeep(buildResponsiveStyles(hideLabel, (hidelabelValue) => ({
|
|
4357
|
+
gap: hidelabelValue ? 0 : spacingStaticXSmall,
|
|
4358
|
+
})), buildResponsiveStyles(stretch, (stretchValue) => ({
|
|
4361
4359
|
justifyContent: stretchValue ? 'space-between' : 'flex-start',
|
|
4362
4360
|
alignItems: stretchValue ? 'center' : 'flex-start',
|
|
4363
4361
|
})), buildResponsiveStyles(size, (sizeValue) => ({
|
|
@@ -4394,28 +4392,30 @@ const getLinkButtonPureStyles = (icon, iconSource, active, isDisabledOrLoading,
|
|
|
4394
4392
|
})),
|
|
4395
4393
|
...(!hasSlottedAnchor && getFocusJssStyle(theme, { pseudo: true, offset: '-2px' })),
|
|
4396
4394
|
},
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
width: `round(down, ${fontLineHeight}, 1px)`,
|
|
4411
|
-
height: `round(down, ${fontLineHeight}, 1px)`,
|
|
4395
|
+
...(hasIcon
|
|
4396
|
+
? {
|
|
4397
|
+
icon: {
|
|
4398
|
+
position: 'relative',
|
|
4399
|
+
flexShrink: '0',
|
|
4400
|
+
width: fontLineHeight,
|
|
4401
|
+
height: fontLineHeight,
|
|
4402
|
+
// workaround for Safari to optimize vertical alignment of icons
|
|
4403
|
+
// TODO: check if this is still needed after optimized icons are included
|
|
4404
|
+
'@supports (width: round(down, 1px, 1px))': {
|
|
4405
|
+
width: `round(down, ${fontLineHeight}, 1px)`,
|
|
4406
|
+
height: `round(down, ${fontLineHeight}, 1px)`,
|
|
4407
|
+
},
|
|
4412
4408
|
},
|
|
4413
|
-
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
}
|
|
4418
|
-
|
|
4409
|
+
label: mergeDeep(buildResponsiveStyles(hideLabel, getVisibilityJssStyle), buildResponsiveStyles(alignLabel, (alignLabelValue) => ({
|
|
4410
|
+
// TODO: we should remove 'left' here and map the value in the component class already to 'start' but might be difficult due to breakpoint customizable prop value
|
|
4411
|
+
order: alignLabelValue === 'left' || alignLabelValue === 'start' ? -1 : 0,
|
|
4412
|
+
}))),
|
|
4413
|
+
}
|
|
4414
|
+
: {
|
|
4415
|
+
label: {
|
|
4416
|
+
position: 'relative', // needed for hover state when icon="none" is set
|
|
4417
|
+
},
|
|
4418
|
+
}),
|
|
4419
4419
|
};
|
|
4420
4420
|
};
|
|
4421
4421
|
|
|
@@ -5649,8 +5649,8 @@ const getComponentCss$S = (inline, wrap, direction, justifyContent, alignItems,
|
|
|
5649
5649
|
const getFlyoutDialogResetJssStyle = () => {
|
|
5650
5650
|
return {
|
|
5651
5651
|
position: 'fixed',
|
|
5652
|
-
height: '
|
|
5653
|
-
maxHeight: '
|
|
5652
|
+
height: '100dvh',
|
|
5653
|
+
maxHeight: '100dvh',
|
|
5654
5654
|
margin: '0',
|
|
5655
5655
|
padding: '0',
|
|
5656
5656
|
border: '0',
|
|
@@ -7182,6 +7182,22 @@ const getPlaceholderJssStyle = (styles) => ({
|
|
|
7182
7182
|
'&:-moz-placeholder': styles /* Firefox 18- */,
|
|
7183
7183
|
});
|
|
7184
7184
|
|
|
7185
|
+
// Used for elements that must overflow `overflow:hidden` containers, are positioned absolute and wrapped within a native `popover` element.
|
|
7186
|
+
const getPopoverResetJssStyle = () => {
|
|
7187
|
+
return {
|
|
7188
|
+
position: 'absolute',
|
|
7189
|
+
border: 'none',
|
|
7190
|
+
background: 'none',
|
|
7191
|
+
pointerEvents: 'all',
|
|
7192
|
+
padding: 0,
|
|
7193
|
+
margin: 0,
|
|
7194
|
+
overflow: 'initial',
|
|
7195
|
+
'&:-internal-popover-in-top-layer::backdrop': {
|
|
7196
|
+
display: 'none',
|
|
7197
|
+
},
|
|
7198
|
+
};
|
|
7199
|
+
};
|
|
7200
|
+
|
|
7185
7201
|
const getSlottedTextFieldTextareaSelectStyles = (child, state, isLoading, theme, additionalDefaultJssStyle) => {
|
|
7186
7202
|
const { primaryColor, contrastLowColor, contrastMediumColor, disabledColor } = getThemedColors(theme);
|
|
7187
7203
|
const { primaryColor: primaryColorDark, contrastLowColor: contrastLowColorDark, contrastMediumColor: contrastMediumColorDark, disabledColor: disabledColorDark, } = getThemedColors('dark');
|
|
@@ -7293,7 +7309,7 @@ const getUnitCounterJssStyle = (isDisabled, theme) => {
|
|
|
7293
7309
|
|
|
7294
7310
|
const INTERNAL_MULTI_SELECT_SLOT = 'internal-select';
|
|
7295
7311
|
|
|
7296
|
-
const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
|
|
7312
|
+
const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
|
|
7297
7313
|
const { contrastHighColor } = getThemedColors(theme);
|
|
7298
7314
|
const { contrastHighColor: contrastHighColorDark } = getThemedColors('dark');
|
|
7299
7315
|
return getCss({
|
|
@@ -7364,6 +7380,11 @@ const getComponentCss$z = (direction, isOpen, isDisabled, hideLabel, state, isWi
|
|
|
7364
7380
|
...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
|
|
7365
7381
|
// .message
|
|
7366
7382
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
7383
|
+
...(isNativePopoverCase && {
|
|
7384
|
+
popover: {
|
|
7385
|
+
...getPopoverResetJssStyle(),
|
|
7386
|
+
},
|
|
7387
|
+
}),
|
|
7367
7388
|
});
|
|
7368
7389
|
};
|
|
7369
7390
|
// TODO: use getSlottedTextFieldTextareaSelectStyles() instead an manipulate selectors like done with PIN Code or even better make it configurable as parameter
|
|
@@ -7810,7 +7831,7 @@ const getDirectionArrowMap = (theme) => {
|
|
|
7810
7831
|
},
|
|
7811
7832
|
};
|
|
7812
7833
|
};
|
|
7813
|
-
const getComponentCss$w = (direction,
|
|
7834
|
+
const getComponentCss$w = (direction, isNativePopoverCase, theme) => {
|
|
7814
7835
|
const { hoverColor, backgroundColor, primaryColor, backgroundSurfaceColor } = getThemedColors(theme);
|
|
7815
7836
|
const { hoverColor: hoverColorDark, primaryColor: primaryColorDark, backgroundSurfaceColor: backgroundSurfaceColorDark, } = getThemedColors('dark');
|
|
7816
7837
|
const shadowColor = 'rgba(0,0,0,0.3)';
|
|
@@ -7860,13 +7881,9 @@ const getComponentCss$w = (direction, isNative, theme) => {
|
|
|
7860
7881
|
transform: 'translate3d(0,0,0)', // Fixes movement on hover in Safari
|
|
7861
7882
|
},
|
|
7862
7883
|
spacer: {
|
|
7863
|
-
...(
|
|
7884
|
+
...(isNativePopoverCase
|
|
7864
7885
|
? {
|
|
7865
|
-
|
|
7866
|
-
backgroundColor: 'transparent',
|
|
7867
|
-
border: 'none',
|
|
7868
|
-
margin: 0,
|
|
7869
|
-
padding: 0,
|
|
7886
|
+
...getPopoverResetJssStyle(),
|
|
7870
7887
|
}
|
|
7871
7888
|
: {
|
|
7872
7889
|
inset: `${-safeZonePx}px`,
|
|
@@ -8558,7 +8575,7 @@ const getListStyles$1 = (direction, theme) => {
|
|
|
8558
8575
|
},
|
|
8559
8576
|
};
|
|
8560
8577
|
};
|
|
8561
|
-
const getComponentCss$r = (direction, isOpen, state, disabled, filter,
|
|
8578
|
+
const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativePopoverCase, theme) => {
|
|
8562
8579
|
return getCss(
|
|
8563
8580
|
// merge because of global styles
|
|
8564
8581
|
mergeDeep({
|
|
@@ -8571,21 +8588,9 @@ const getComponentCss$r = (direction, isOpen, state, disabled, filter, isNativeP
|
|
|
8571
8588
|
'sr-text': {
|
|
8572
8589
|
display: 'none',
|
|
8573
8590
|
},
|
|
8574
|
-
...(
|
|
8591
|
+
...(isNativePopoverCase && {
|
|
8575
8592
|
popover: {
|
|
8576
|
-
|
|
8577
|
-
bottom: 'auto',
|
|
8578
|
-
border: 'none',
|
|
8579
|
-
background: 'none',
|
|
8580
|
-
pointerEvents: 'all',
|
|
8581
|
-
padding: 0,
|
|
8582
|
-
margin: 0,
|
|
8583
|
-
overflow: 'initial',
|
|
8584
|
-
height: 'auto',
|
|
8585
|
-
maxHeight: `${8.5 * (OPTION_HEIGHT + 8) + 6 + 2}px`, // 8px = gap, 6px = padding, 2px = border
|
|
8586
|
-
'&:-internal-popover-in-top-layer::backdrop': {
|
|
8587
|
-
display: 'none',
|
|
8588
|
-
},
|
|
8593
|
+
...getPopoverResetJssStyle(),
|
|
8589
8594
|
},
|
|
8590
8595
|
}),
|
|
8591
8596
|
}, filter
|
|
@@ -8737,7 +8742,7 @@ const getOptionStyles = (theme) => {
|
|
|
8737
8742
|
|
|
8738
8743
|
const INTERNAL_SELECT_SLOT = 'internal-select';
|
|
8739
8744
|
|
|
8740
|
-
const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, theme) => {
|
|
8745
|
+
const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWithinForm, isNativePopoverCase, theme) => {
|
|
8741
8746
|
return getCss({
|
|
8742
8747
|
'@global': {
|
|
8743
8748
|
':host': addImportantToEachRule({
|
|
@@ -8785,6 +8790,11 @@ const getComponentCss$o = (direction, isOpen, isDisabled, hideLabel, state, isWi
|
|
|
8785
8790
|
...getFunctionalComponentLabelStyles(isDisabled, hideLabel, theme),
|
|
8786
8791
|
// .message
|
|
8787
8792
|
...getFunctionalComponentStateMessageStyles(theme, state),
|
|
8793
|
+
...(isNativePopoverCase && {
|
|
8794
|
+
popover: {
|
|
8795
|
+
...getPopoverResetJssStyle(),
|
|
8796
|
+
},
|
|
8797
|
+
}),
|
|
8788
8798
|
});
|
|
8789
8799
|
};
|
|
8790
8800
|
// TODO: Rename to JSSStyles
|
package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.mjs
CHANGED
|
@@ -90,6 +90,9 @@ class DSRMultiSelect extends Component {
|
|
|
90
90
|
form;
|
|
91
91
|
isWithinForm;
|
|
92
92
|
preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
|
|
93
|
+
isNativePopoverCase = false;
|
|
94
|
+
parentTableElement;
|
|
95
|
+
popoverElement;
|
|
93
96
|
get currentValue() {
|
|
94
97
|
return getSelectedOptionValues(this.props.multiSelectOptions);
|
|
95
98
|
}
|
|
@@ -98,8 +101,14 @@ class DSRMultiSelect extends Component {
|
|
|
98
101
|
const optionsSelectedId = 'options-selected';
|
|
99
102
|
const dropdownId = 'list';
|
|
100
103
|
const inputId = 'filter';
|
|
101
|
-
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$z('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
|
|
102
|
-
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(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 && (jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsx(PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })),
|
|
104
|
+
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$z('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
|
|
105
|
+
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(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 && (jsxs("span", { id: optionsSelectedId, className: "sr-only", children: [getSelectedOptions(this.props.multiSelectOptions).length, " options selected"] })), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("input", { id: inputId, role: "combobox", autoComplete: "off", disabled: this.props.disabled, required: this.props.required, "aria-invalid": this.props.state === 'error' ? 'true' : null }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, "aria-hidden": "true" }), this.props.currentValue && (jsx(PButtonPure, { className: "button", icon: "close", hideLabel: "true", theme: this.props.theme, disabled: this.props.disabled, children: "Reset selection" })), jsx("div", { ...(this.props.isNativePopoverCase && {
|
|
106
|
+
popover: 'auto',
|
|
107
|
+
className: 'popover',
|
|
108
|
+
...(this.props.popoverElement?.matches(':popover-open') && {
|
|
109
|
+
'popover-open': true,
|
|
110
|
+
}),
|
|
111
|
+
}), children: jsxs("div", { id: dropdownId, className: "listbox", children: [!this.props.hasFilterResults && (jsxs("div", { className: "no-results", "aria-live": "polite", role: "status", children: [jsx("span", { "aria-hidden": "true", children: "---" }), jsx("span", { className: "sr-only", children: "No results found" })] })), jsx("slot", {})] }) })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_MULTI_SELECT_SLOT })] })] }), this.props.children] }));
|
|
103
112
|
}
|
|
104
113
|
}
|
|
105
114
|
|
package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/popover.mjs
CHANGED
|
@@ -80,13 +80,13 @@ class DSRPopover extends Component {
|
|
|
80
80
|
spacer;
|
|
81
81
|
popover;
|
|
82
82
|
button;
|
|
83
|
-
|
|
83
|
+
isNativePopoverCase = false;
|
|
84
84
|
parentTableElement;
|
|
85
85
|
render() {
|
|
86
86
|
splitChildren(this.props.children);
|
|
87
|
-
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$w(this.props.direction, this.props.
|
|
88
|
-
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs(Fragment, { children: [jsxs("button", { type: "button", ...(this.props.
|
|
89
|
-
}), children: [jsx(PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.
|
|
87
|
+
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$w(this.props.direction, this.props.isNativePopoverCase, this.props.theme).replace(/(:host {[\S\s]+?})[\S\s]+(button {[\S\s]+?})[\S\s]+(.icon {[\S\s]+?})[\S\s]+(.label {[\S\s]+?})[\S\s]+/, '$1\n$2\n$3\n$4')));
|
|
88
|
+
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs(Fragment, { children: [jsxs("button", { type: "button", ...(this.props.isNativePopoverCase ? { popoverTarget: 'spacer' } : { ...(!this.props.isNativePopoverCase && { 'aria-expanded': this.props.open }),
|
|
89
|
+
}), children: [jsx(PIcon, { className: "icon", name: "information", theme: this.props.theme }), jsx("span", { className: "label", children: "More information" })] }), (this.props.open || this.props.isNativePopoverCase) && (jsx("div", { className: "spacer", ...(this.props.isNativePopoverCase && { popover: 'auto', id: 'spacer', onToggle: this.props.onToggle }), children: jsx("div", { className: "popover", children: this.props.description ? jsx("p", { children: this.props.description }) : jsx("slot", {}) }) }))] })] }), this.props.children] }));
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
@@ -81,7 +81,7 @@ class DSRSelectWrapperDropdown extends Component {
|
|
|
81
81
|
searchString = '';
|
|
82
82
|
inputElement;
|
|
83
83
|
listElement;
|
|
84
|
-
|
|
84
|
+
isNativePopoverCase = false;
|
|
85
85
|
parentTableElement;
|
|
86
86
|
popoverElement;
|
|
87
87
|
get selectedIndex() {
|
|
@@ -94,7 +94,7 @@ class DSRSelectWrapperDropdown extends Component {
|
|
|
94
94
|
const buttonId = 'value';
|
|
95
95
|
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$r(this.props.direction === 'auto'
|
|
96
96
|
? 'down'
|
|
97
|
-
: this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.
|
|
97
|
+
: this.props.direction, this.isOpen, this.props.state, this.props.disabled, this.props.filter, this.props.isNativePopoverCase, this.props.theme)));
|
|
98
98
|
return (jsx(Fragment, { children: jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsx(Fragment, { children: this.props.filter ? ([
|
|
99
99
|
jsx("input", { type: "text", role: "combobox", disabled: this.props.disabled, placeholder: getSelectedOptionMap(this.optionMaps)?.value || null, autoComplete: "off", defaultValue: this.searchString }, "input"),
|
|
100
100
|
jsx("span", {
|
package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.mjs
CHANGED
|
@@ -91,6 +91,9 @@ class DSRSelect extends Component {
|
|
|
91
91
|
preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
|
|
92
92
|
searchString = '';
|
|
93
93
|
searchTimeout = null;
|
|
94
|
+
isNativePopoverCase = false;
|
|
95
|
+
parentTableElement;
|
|
96
|
+
popoverElement;
|
|
94
97
|
render() {
|
|
95
98
|
const { children, namedSlotChildren, otherChildren } = splitChildren(this.props.children);
|
|
96
99
|
const buttonId = 'value';
|
|
@@ -100,8 +103,14 @@ class DSRSelect extends Component {
|
|
|
100
103
|
const ariaDescribedBy = descriptionId && selectMessageId
|
|
101
104
|
? `${descriptionId} ${selectMessageId}`
|
|
102
105
|
: descriptionId || selectMessageId || undefined;
|
|
103
|
-
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$o('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.theme)));
|
|
104
|
-
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(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: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("button", { type: "button", role: "combobox", id: buttonId, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: getSelectedOptionString(otherChildren) }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsx("div", {
|
|
106
|
+
const style = minifyCss(stripFocusAndHoverStyles(getComponentCss$o('down', this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.isWithinForm, this.props.isNativePopoverCase, this.props.theme)));
|
|
107
|
+
return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("div", { className: "root", children: [jsx(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: buttonId, isRequired: this.props.required, isDisabled: this.props.disabled }), jsxs("div", { className: `wrapper${this.props.disabled ? ' disabled' : ''}`, children: [jsx("button", { type: "button", role: "combobox", id: buttonId, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, labelId, ariaDescribedBy, dropdownId), disabled: this.props.disabled, children: getSelectedOptionString(otherChildren) }), jsx(PIcon, { className: "icon", name: "arrow-head-down", theme: this.props.theme, color: this.props.disabled ? 'state-disabled' : 'primary', "aria-hidden": "true" }), jsx("div", { ...(this.props.isNativePopoverCase && {
|
|
108
|
+
popover: 'auto',
|
|
109
|
+
className: 'popover',
|
|
110
|
+
...(this.props.popoverElement?.matches(':popover-open') && {
|
|
111
|
+
'popover-open': true,
|
|
112
|
+
}),
|
|
113
|
+
}), children: jsx("div", { id: dropdownId, className: "listbox", ...getListAriaAttributes(this.props.label, this.props.required, false, this.props.isOpen), children: jsx("slot", {}) }) })] }), jsx(StateMessage, { hasMessage: (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state), state: this.props.state, message: this.props.message, theme: this.props.theme, host: null }), jsx("span", { className: "sr-only", role: "status", "aria-live": "assertive", "aria-relevant": "additions text", children: this.props.srHighlightedOptionText }), this.props.isWithinForm && jsx("slot", { name: INTERNAL_SELECT_SLOT })] })] }), this.props.children] }));
|
|
105
114
|
}
|
|
106
115
|
}
|
|
107
116
|
|
|
@@ -12,6 +12,9 @@ export declare class DSRMultiSelect extends Component<any> {
|
|
|
12
12
|
private form;
|
|
13
13
|
private isWithinForm;
|
|
14
14
|
private preventOptionUpdate;
|
|
15
|
+
private isNativePopoverCase;
|
|
16
|
+
private parentTableElement;
|
|
17
|
+
private popoverElement;
|
|
15
18
|
private get currentValue();
|
|
16
19
|
render(): JSX.Element;
|
|
17
20
|
}
|
|
@@ -6,7 +6,7 @@ export declare class DSRSelectWrapperDropdown extends Component<any> {
|
|
|
6
6
|
private searchString;
|
|
7
7
|
private inputElement;
|
|
8
8
|
private listElement;
|
|
9
|
-
private
|
|
9
|
+
private isNativePopoverCase;
|
|
10
10
|
private parentTableElement;
|
|
11
11
|
private popoverElement;
|
|
12
12
|
private get selectedIndex();
|