@porsche-design-system/components-react 4.6.0-rc.1 → 4.6.0-rc.2

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.
Files changed (82) hide show
  1. package/CHANGELOG.md +61 -2
  2. package/OSS_NOTICE +5532 -2115
  3. package/cjs/lib/components/ai-tag.wrapper.cjs +1 -1
  4. package/cjs/lib/components/radio-group.wrapper.cjs +1 -1
  5. package/esm/lib/components/ai-tag.wrapper.d.ts +4 -4
  6. package/esm/lib/components/ai-tag.wrapper.mjs +1 -1
  7. package/esm/lib/components/input-number.wrapper.d.ts +6 -6
  8. package/esm/lib/components/input-text.wrapper.d.ts +6 -6
  9. package/esm/lib/components/multi-select-option.wrapper.d.ts +2 -2
  10. package/esm/lib/components/pin-code.wrapper.d.ts +6 -6
  11. package/esm/lib/components/radio-group-option.wrapper.d.ts +4 -4
  12. package/esm/lib/components/radio-group.wrapper.d.ts +4 -6
  13. package/esm/lib/components/radio-group.wrapper.mjs +1 -1
  14. package/esm/lib/components/segmented-control.wrapper.d.ts +4 -4
  15. package/esm/lib/components/wordmark.wrapper.d.ts +2 -2
  16. package/esm/lib/types.d.ts +184 -213
  17. package/package.json +6 -2
  18. package/skills/pds-knowledge-react/SKILL.md +3 -3
  19. package/skills/pds-knowledge-react/references/components/p-ai-tag/p-ai-tag.md +2 -2
  20. package/skills/pds-knowledge-react/references/components/p-button/p-button.md +1 -1
  21. package/skills/pds-knowledge-react/references/components/p-button-pure/p-button-pure.md +1 -1
  22. package/skills/pds-knowledge-react/references/components/p-button-tile/p-button-tile.md +1 -1
  23. package/skills/pds-knowledge-react/references/components/p-carousel/p-carousel.md +1 -1
  24. package/skills/pds-knowledge-react/references/components/p-icon/examples/Overview.tsx +6 -0
  25. package/skills/pds-knowledge-react/references/components/p-icon/p-icon.md +1 -1
  26. package/skills/pds-knowledge-react/references/components/p-inline-notification/p-inline-notification.md +1 -1
  27. package/skills/pds-knowledge-react/references/components/p-input-number/p-input-number.md +3 -3
  28. package/skills/pds-knowledge-react/references/components/p-input-text/p-input-text.md +3 -3
  29. package/skills/pds-knowledge-react/references/components/p-link/p-link.md +1 -1
  30. package/skills/pds-knowledge-react/references/components/p-link-pure/p-link-pure.md +1 -1
  31. package/skills/pds-knowledge-react/references/components/p-multi-select/examples/AsyncFilter.tsx +29 -6
  32. package/skills/pds-knowledge-react/references/components/p-multi-select/p-multi-select.md +2 -2
  33. package/skills/pds-knowledge-react/references/components/p-pin-code/p-pin-code.md +2 -2
  34. package/skills/pds-knowledge-react/references/components/p-radio-group/examples/Form.tsx +2 -2
  35. package/skills/pds-knowledge-react/references/components/p-radio-group/p-radio-group.md +3 -3
  36. package/skills/pds-knowledge-react/references/components/p-segmented-control/p-segmented-control.md +2 -2
  37. package/skills/pds-knowledge-react/references/components/p-select/examples/AsyncFilter.tsx +29 -6
  38. package/skills/pds-knowledge-react/references/components/p-select/p-select.md +1 -1
  39. package/skills/pds-knowledge-react/references/components/p-tag/p-tag.md +1 -1
  40. package/skills/pds-knowledge-react/references/components/p-wordmark/p-wordmark.md +1 -1
  41. package/skills/pds-knowledge-react/references/icons.md +1 -1
  42. package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +203 -4
  43. package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +241 -40
  44. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/components/ai-tag.wrapper.cjs +1 -1
  45. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/components/radio-group.wrapper.cjs +1 -1
  46. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/carousel.cjs +4 -1
  47. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/filter-status-announcer.cjs +7 -0
  48. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.cjs +3 -1
  49. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/no-results-option.cjs +1 -1
  50. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pin-code.cjs +7 -3
  51. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group.cjs +4 -0
  52. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control.cjs +5 -1
  53. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.cjs +3 -4
  54. package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +203 -5
  55. package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +237 -41
  56. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/components/ai-tag.wrapper.mjs +1 -1
  57. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/components/radio-group.wrapper.mjs +1 -1
  58. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/carousel.mjs +4 -1
  59. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/filter-status-announcer.mjs +5 -0
  60. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/multi-select.mjs +3 -1
  61. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/no-results-option.mjs +1 -1
  62. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/pin-code.mjs +7 -3
  63. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/radio-group.mjs +4 -0
  64. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/segmented-control.mjs +5 -1
  65. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/select.mjs +3 -4
  66. package/ssr/esm/lib/components/ai-tag.wrapper.d.ts +4 -4
  67. package/ssr/esm/lib/components/input-number.wrapper.d.ts +6 -6
  68. package/ssr/esm/lib/components/input-text.wrapper.d.ts +6 -6
  69. package/ssr/esm/lib/components/multi-select-option.wrapper.d.ts +2 -2
  70. package/ssr/esm/lib/components/pin-code.wrapper.d.ts +6 -6
  71. package/ssr/esm/lib/components/radio-group-option.wrapper.d.ts +4 -4
  72. package/ssr/esm/lib/components/radio-group.wrapper.d.ts +4 -6
  73. package/ssr/esm/lib/components/segmented-control.wrapper.d.ts +4 -4
  74. package/ssr/esm/lib/components/wordmark.wrapper.d.ts +2 -2
  75. package/ssr/esm/lib/dsr-components/carousel.d.ts +3 -0
  76. package/ssr/esm/lib/dsr-components/filter-status-announcer.d.ts +6 -0
  77. package/ssr/esm/lib/dsr-components/multi-select.d.ts +1 -0
  78. package/ssr/esm/lib/dsr-components/pin-code.d.ts +1 -0
  79. package/ssr/esm/lib/dsr-components/radio-group.d.ts +1 -0
  80. package/ssr/esm/lib/dsr-components/segmented-control.d.ts +1 -0
  81. package/ssr/esm/lib/dsr-components/select.d.ts +1 -1
  82. package/ssr/esm/lib/types.d.ts +184 -213
@@ -26,8 +26,12 @@ class DSRPinCode extends Component {
26
26
  initialLoading = false;
27
27
  defaultValue;
28
28
  inputElements = [];
29
+ // Coerce number/null/undefined to string for internal handling
30
+ get parsedValue() {
31
+ return String(this.props.value ?? '');
32
+ }
29
33
  formResetCallback() {
30
- this.props.internals?.setFormValue(this.props.defaultValue);
34
+ this.props.internals?.setFormValue(String(this.props.defaultValue ?? '')); // coerce defaultValue to string for form value
31
35
  }
32
36
  formDisabledCallback() {
33
37
  // Called when a parent fieldset is disabled or enabled
@@ -43,8 +47,8 @@ class DSRPinCode extends Component {
43
47
  const inputDescriptionId = (this.props.description || namedSlotChildren.filter(({ props: { slot } }) => slot === 'description').length > 0) ? descriptionId : undefined;
44
48
  const inputMessageId = (this.props.message || namedSlotChildren.filter(({ props: { slot } }) => slot === 'message').length > 0) && ['success', 'error'].includes(this.props.state) ? messageId : undefined;
45
49
  const style = minifyCss(getComponentCss$w(this.props.hideLabel, this.props.state, this.props.disabled, this.props.loading, this.props.length, this.props.compact));
46
- return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("fieldset", { className: "root", disabled: this.props.disabled, ...getFieldsetAriaAttributes(this.props.required, this.props.state === 'error'), "aria-describedby": setAriaIDREF(this.props.loading && loadingId, inputMessageId, inputDescriptionId), "aria-labelledby": (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) ? labelId : null, 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: currentInputId, isRequired: this.props.required, isLoading: this.props.loading, isDisabled: this.props.disabled }), jsxs("div", { className: "wrapper", dir: "ltr", children: [Array.from(new Array(this.props.length), (_, index) => (jsx("input", { name: this.props.name, form: this.props.form, ...(isCurrentInput(index, this.props.value, this.props.length) && { id: currentInputId }), type: this.props.type === 'number' ? 'text' : this.props.type, "aria-label": `${index + 1}-${this.props.length}`, "aria-describedby": setAriaIDREF(inputLabelId, inputMessageId), "aria-invalid": this.props.state === 'error' ? 'true' : null, "aria-disabled": this.props.loading ? 'true' : null, autoComplete: "one-time-code", pattern: "\\d*", inputMode: "numeric" // get numeric keyboard on mobile
47
- , defaultValue: this.props.value[index] === ' ' ? null : this.props.value[index], disabled: this.props.disabled, required: this.props.required, onBlur: this.props.onInputBlur }, index))), this.props.loading && jsx(PSpinner, { className: "spinner", size: "inherit", "aria-hidden": "true" })] }), 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, host: null }), jsx(LoadingMessage, { loading: this.props.loading, initialLoading: this.props.initialLoading })] })] }), this.props.children] }));
50
+ return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxs("fieldset", { className: "root", disabled: this.props.disabled, ...getFieldsetAriaAttributes(this.props.required, this.props.state === 'error'), "aria-describedby": setAriaIDREF(this.props.loading && loadingId, inputMessageId, inputDescriptionId), "aria-labelledby": (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) ? labelId : null, 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: currentInputId, isRequired: this.props.required, isLoading: this.props.loading, isDisabled: this.props.disabled }), jsxs("div", { className: "wrapper", dir: "ltr", children: [Array.from(new Array(this.props.length), (_, index) => (jsx("input", { name: this.props.name, form: this.props.form, ...(isCurrentInput(index, this.parsedValue, this.props.length) && { id: currentInputId }), type: this.props.type === 'number' ? 'text' : this.props.type, "aria-label": `${index + 1}-${this.props.length}`, "aria-describedby": setAriaIDREF(inputLabelId, inputMessageId), "aria-invalid": this.props.state === 'error' ? 'true' : null, "aria-disabled": this.props.loading ? 'true' : null, autoComplete: "one-time-code", pattern: "\\d*", inputMode: "numeric" // get numeric keyboard on mobile
51
+ , defaultValue: this.parsedValue[index] === ' ' ? null : this.parsedValue[index], disabled: this.props.disabled, required: this.props.required, onBlur: this.props.onInputBlur }, index))), this.props.loading && jsx(PSpinner, { className: "spinner", size: "inherit", "aria-hidden": "true" })] }), 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, host: null }), jsx(LoadingMessage, { loading: this.props.loading, initialLoading: this.props.initialLoading })] })] }), this.props.children] }));
48
52
  }
49
53
  }
50
54
 
@@ -26,6 +26,10 @@ class DSRRadioGroup extends Component {
26
26
  defaultValue;
27
27
  radioGroupOptions = [];
28
28
  preventOptionUpdate = false; // Used to prevent value watcher from updating options when options are already updated
29
+ setFormValue() {
30
+ // `null`/`undefined` → `undefined`, removing the radio group from form submission
31
+ this.props.internals?.setFormValue(this.props.value === null || this.props.value === undefined ? undefined : String(this.props.value));
32
+ }
29
33
  formResetCallback() {
30
34
  // triggers value watcher
31
35
  }
@@ -22,8 +22,12 @@ class DSRSegmentedControl extends Component {
22
22
  host;
23
23
  internals;
24
24
  defaultValue;
25
+ setFormValue() {
26
+ // `null`/`undefined` → `undefined`, removing the segmented-control from form submission
27
+ this.props.internals?.setFormValue(this.props.value === null || this.props.value === undefined ? undefined : String(this.props.value));
28
+ }
25
29
  formResetCallback() {
26
- this.props.internals?.setFormValue(this.props.defaultValue?.toString());
30
+ // triggers value watcher
27
31
  }
28
32
  formDisabledCallback() {
29
33
  // Called when a parent fieldset is disabled or enabled
@@ -9,6 +9,7 @@ import { Label } from './label.mjs';
9
9
  import { messageId, StateMessage } from './state-message.mjs';
10
10
  import { PIcon } from '../components/icon.wrapper.mjs';
11
11
  import { PInputSearch } from '../components/input-search.wrapper.mjs';
12
+ import { FilterStatusAnnouncer } from './filter-status-announcer.mjs';
12
13
  import { NoResultsOption } from './no-results-option.mjs';
13
14
 
14
15
  /**
@@ -29,6 +30,7 @@ class DSRSelect extends Component {
29
30
  // In the React wrapper, all props are synced as properties on the element ref, so reflecting "name" as an attribute ensures it is properly handled in the form submission process.
30
31
  isOpen = false;
31
32
  hasFilterResults = true;
33
+ filterStatusMessage = '';
32
34
  selectedOption;
33
35
  internals;
34
36
  defaultValue;
@@ -45,9 +47,6 @@ class DSRSelect extends Component {
45
47
  hasNativePopoverSupport = getHasNativePopoverSupport();
46
48
  cleanUpAutoUpdate;
47
49
  currentlyHighlightedOption = null;
48
- get hasFilter() {
49
- return !!(this.props.filter || this.props.filterSlot);
50
- }
51
50
  setFormValue() {
52
51
  // `null`/`undefined` → `undefined`, removing the select from form submission (mirrors native behavior)
53
52
  this.props.internals?.setFormValue(this.props.value === null || this.props.value === undefined ? undefined : String(this.props.value));
@@ -71,7 +70,7 @@ class DSRSelect extends Component {
71
70
  const style = minifyCss(getComponentCss$o(this.props.isOpen, this.props.disabled, this.props.hideLabel, this.props.state, this.props.compact));
72
71
  return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", shadowrootdelegatesfocus: "true", 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("button", { "aria-invalid": this.props.state === 'error' ? 'true' : null, type: "button", role: "combobox", id: buttonId,
73
72
  // only needed for Safari to recognize focus state on click
74
- tabIndex: 0, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) && labelId, selectMessageId, selectDescriptionId, listboxId), "aria-autocomplete": "none", disabled: this.props.disabled, onBlur: this.props.onComboBlur, children: [hasCustomSelectedSlot ? (jsx("slot", { name: "selected" })) : (jsxs(Fragment, { children: [this.selectedOption?.querySelector?.('img') && (jsx("img", { src: this.selectedOption.querySelector('img').src, alt: "" })), jsx("span", { children: this.selectedOption?.textContent ?? '' })] })), jsx(PIcon, { className: "icon", name: "arrow-head-down", color: "primary", "aria-hidden": "true" })] }), jsxs("div", { popover: "manual", tabIndex: 0, children: [this.props.filter && !hasCustomFilterSlot && (jsx(PInputSearch, { className: "filter", name: "filter", label: "Filter options", hideLabel: true, autoComplete: "off", clear: true, indicator: true, compact: true, onBlur: (e) => e.stopPropagation() })), hasCustomFilterSlot && jsx("slot", { name: "filter" }), jsxs("div", { id: listboxId, className: "options", ...getListboxAriaAttributes(this.props.required, (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) && labelId, selectMessageId, selectDescriptionId, false), tabIndex: -1, onPointerMove: this.props.onPointerMove, onBlur: (e) => e.stopPropagation(), children: [this.props.filter && !this.props.hasFilterResults && jsx(NoResultsOption, {}), jsx("slot", { name: "options-status" }), 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, host: null })] })] }), this.props.children] }));
73
+ tabIndex: 0, ...getComboboxAriaAttributes(this.props.isOpen, this.props.required, (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) && labelId, selectMessageId, selectDescriptionId, listboxId), "aria-autocomplete": "none", disabled: this.props.disabled, onBlur: this.props.onComboBlur, children: [hasCustomSelectedSlot ? (jsx("slot", { name: "selected" })) : (jsxs(Fragment, { children: [this.selectedOption?.querySelector?.('img') && (jsx("img", { src: this.selectedOption.querySelector('img').src, alt: "" })), jsx("span", { children: this.selectedOption?.textContent ?? '' })] })), jsx(PIcon, { className: "icon", name: "arrow-head-down", color: "primary", "aria-hidden": "true" })] }), jsxs("div", { popover: "manual", tabIndex: 0, children: [this.props.filter && !hasCustomFilterSlot && (jsxs(Fragment, { children: [jsx(PInputSearch, { className: "filter", name: "filter", label: "Filter options", hideLabel: true, autoComplete: "off", clear: true, indicator: true, compact: true, onBlur: (e) => e.stopPropagation() }), jsx(FilterStatusAnnouncer, { message: this.props.filterStatusMessage })] })), hasCustomFilterSlot && jsx("slot", { name: "filter" }), jsxs("div", { id: listboxId, className: "options", ...getListboxAriaAttributes(this.props.required, (this.props.label || namedSlotChildren.filter(({ props: { slot } }) => slot === 'label').length > 0) && labelId, selectMessageId, selectDescriptionId, false), tabIndex: -1, onPointerMove: this.props.onPointerMove, onBlur: (e) => e.stopPropagation(), children: [this.props.filter && !this.props.hasFilterResults && jsx(NoResultsOption, {}), jsx("slot", { name: "options-status" }), 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, host: null })] })] }), this.props.children] }));
75
74
  }
76
75
  }
77
76
 
@@ -2,8 +2,8 @@ import type { BaseProps } from '../../BaseProps';
2
2
  import type { AiTagLocale, AiTagVariant } from '../types';
3
3
  export type PAiTagProps = BaseProps & {
4
4
  /**
5
- * Locale for the AI text (ISO format, e.g. "de_DE").
6
- * @default 'en_US'
5
+ * Market locale for the AI text (BCP47, e.g. `en-US`). Language-only `en` is supported for international markets. POSIX forms (e.g. `en_US`) are deprecated but still accepted. Copy is resolved by language; unknown languages fall back to English.
6
+ * @default 'en-US'
7
7
  */
8
8
  locale?: AiTagLocale;
9
9
  /**
@@ -14,8 +14,8 @@ export type PAiTagProps = BaseProps & {
14
14
  };
15
15
  export declare const PAiTag: import("react").ForwardRefExoticComponent<Omit<import("react").DOMAttributes<{}>, "onChange" | "onInput" | "onToggle"> & Pick<import("react").HTMLAttributes<{}>, "suppressHydrationWarning" | "autoFocus" | "className" | "dir" | "hidden" | "id" | "inert" | "inputMode" | "lang" | "slot" | "style" | "tabIndex" | "title" | "translate" | "role"> & {
16
16
  /**
17
- * Locale for the AI text (ISO format, e.g. "de_DE").
18
- * @default 'en_US'
17
+ * Market locale for the AI text (BCP47, e.g. `en-US`). Language-only `en` is supported for international markets. POSIX forms (e.g. `en_US`) are deprecated but still accepted. Copy is resolved by language; unknown languages fall back to English.
18
+ * @default 'en-US'
19
19
  */
20
20
  locale?: AiTagLocale;
21
21
  /**
@@ -66,11 +66,11 @@ export type PInputNumberProps = BaseProps & {
66
66
  */
67
67
  onBlur?: (event: CustomEvent<InputNumberBlurEventDetail>) => void;
68
68
  /**
69
- * Emitted when the number input loses focus after its value was changed.
69
+ * Emitted when the number input loses focus after its value was changed. The component value and native event target value are strings after user input.
70
70
  */
71
71
  onChange?: (event: CustomEvent<InputNumberChangeEventDetail>) => void;
72
72
  /**
73
- * Emitted when the value has been changed as a direct result of a user action.
73
+ * Emitted when the value has been changed as a direct result of a user action. The component value and native event target value are strings.
74
74
  */
75
75
  onInput?: (event: CustomEvent<InputNumberInputEventDetail>) => void;
76
76
  /**
@@ -99,7 +99,7 @@ export type PInputNumberProps = BaseProps & {
99
99
  */
100
100
  step?: number;
101
101
  /**
102
- * Sets the current numeric value of the field.
102
+ * Sets the current numeric value. Strings and numbers are accepted for programmatic assignment, but user input updates the value as a string to mirror native input behavior.
103
103
  * @default ''
104
104
  */
105
105
  value?: string | number | null;
@@ -170,11 +170,11 @@ export declare const PInputNumber: import("react").ForwardRefExoticComponent<Omi
170
170
  */
171
171
  onBlur?: (event: CustomEvent<InputNumberBlurEventDetail>) => void;
172
172
  /**
173
- * Emitted when the number input loses focus after its value was changed.
173
+ * Emitted when the number input loses focus after its value was changed. The component value and native event target value are strings after user input.
174
174
  */
175
175
  onChange?: (event: CustomEvent<InputNumberChangeEventDetail>) => void;
176
176
  /**
177
- * Emitted when the value has been changed as a direct result of a user action.
177
+ * Emitted when the value has been changed as a direct result of a user action. The component value and native event target value are strings.
178
178
  */
179
179
  onInput?: (event: CustomEvent<InputNumberInputEventDetail>) => void;
180
180
  /**
@@ -203,7 +203,7 @@ export declare const PInputNumber: import("react").ForwardRefExoticComponent<Omi
203
203
  */
204
204
  step?: number;
205
205
  /**
206
- * Sets the current numeric value of the field.
206
+ * Sets the current numeric value. Strings and numbers are accepted for programmatic assignment, but user input updates the value as a string to mirror native input behavior.
207
207
  * @default ''
208
208
  */
209
209
  value?: string | number | null;
@@ -66,11 +66,11 @@ export type PInputTextProps = BaseProps & {
66
66
  */
67
67
  onBlur?: (event: CustomEvent<InputTextBlurEventDetail>) => void;
68
68
  /**
69
- * Emitted when the input loses focus after its value was changed.
69
+ * Emitted when the input loses focus after its value was changed. The component value and native event target value are strings after user input.
70
70
  */
71
71
  onChange?: (event: CustomEvent<InputTextChangeEventDetail>) => void;
72
72
  /**
73
- * Emitted on every value change as the user types.
73
+ * Emitted on every value change as the user types. The component value and native event target value are strings.
74
74
  */
75
75
  onInput?: (event: CustomEvent<InputTextInputEventDetail>) => void;
76
76
  /**
@@ -98,7 +98,7 @@ export type PInputTextProps = BaseProps & {
98
98
  */
99
99
  state?: InputTextState;
100
100
  /**
101
- * Sets the current text value of the input field.
101
+ * Sets the current text value. Numbers are accepted for programmatic assignment, but user input updates the value as a string.
102
102
  * @default ''
103
103
  */
104
104
  value?: string | number | null;
@@ -169,11 +169,11 @@ export declare const PInputText: import("react").ForwardRefExoticComponent<Omit<
169
169
  */
170
170
  onBlur?: (event: CustomEvent<InputTextBlurEventDetail>) => void;
171
171
  /**
172
- * Emitted when the input loses focus after its value was changed.
172
+ * Emitted when the input loses focus after its value was changed. The component value and native event target value are strings after user input.
173
173
  */
174
174
  onChange?: (event: CustomEvent<InputTextChangeEventDetail>) => void;
175
175
  /**
176
- * Emitted on every value change as the user types.
176
+ * Emitted on every value change as the user types. The component value and native event target value are strings.
177
177
  */
178
178
  onInput?: (event: CustomEvent<InputTextInputEventDetail>) => void;
179
179
  /**
@@ -201,7 +201,7 @@ export declare const PInputText: import("react").ForwardRefExoticComponent<Omit<
201
201
  */
202
202
  state?: InputTextState;
203
203
  /**
204
- * Sets the current text value of the input field.
204
+ * Sets the current text value. Numbers are accepted for programmatic assignment, but user input updates the value as a string.
205
205
  * @default ''
206
206
  */
207
207
  value?: string | number | null;
@@ -6,7 +6,7 @@ export type PMultiSelectOptionProps = BaseProps & {
6
6
  */
7
7
  disabled?: boolean;
8
8
  /**
9
- * Sets the value submitted with the form data when this option is selected in the parent multi-select.
9
+ * Sets the required option value submitted with the form data when selected. Must be a string or number.
10
10
  */
11
11
  value: string | number;
12
12
  };
@@ -17,7 +17,7 @@ export declare const PMultiSelectOption: import("react").ForwardRefExoticCompone
17
17
  */
18
18
  disabled?: boolean;
19
19
  /**
20
- * Sets the value submitted with the form data when this option is selected in the parent multi-select.
20
+ * Sets the required option value submitted with the form data when selected. Must be a string or number.
21
21
  */
22
22
  value: string | number;
23
23
  } & {
@@ -54,7 +54,7 @@ export type PPinCodeProps = BaseProps & {
54
54
  */
55
55
  onBlur?: (event: CustomEvent<void>) => void;
56
56
  /**
57
- * Emitted when the pin code value changes as the user types, carrying the new concatenated value in the event detail.
57
+ * Emitted when the pin code value changes as the user types, carrying `{ value: string; isComplete: boolean }` in the event detail.
58
58
  */
59
59
  onChange?: (event: CustomEvent<PinCodeChangeEventDetail>) => void;
60
60
  /**
@@ -73,10 +73,10 @@ export type PPinCodeProps = BaseProps & {
73
73
  */
74
74
  type?: PinCodeType;
75
75
  /**
76
- * Sets the current concatenated value of all pin code fields and allows setting the initial value.
76
+ * Sets the current concatenated value. Numbers are accepted for programmatic assignment, but user input updates the value as a string.
77
77
  * @default ''
78
78
  */
79
- value?: string;
79
+ value?: string | number | null;
80
80
  };
81
81
  export declare const PPinCode: import("react").ForwardRefExoticComponent<Omit<import("react").DOMAttributes<{}>, "onChange" | "onInput" | "onToggle"> & Pick<import("react").HTMLAttributes<{}>, "suppressHydrationWarning" | "autoFocus" | "className" | "dir" | "hidden" | "id" | "inert" | "inputMode" | "lang" | "slot" | "style" | "tabIndex" | "title" | "translate" | "role"> & {
82
82
  /**
@@ -132,7 +132,7 @@ export declare const PPinCode: import("react").ForwardRefExoticComponent<Omit<im
132
132
  */
133
133
  onBlur?: (event: CustomEvent<void>) => void;
134
134
  /**
135
- * Emitted when the pin code value changes as the user types, carrying the new concatenated value in the event detail.
135
+ * Emitted when the pin code value changes as the user types, carrying `{ value: string; isComplete: boolean }` in the event detail.
136
136
  */
137
137
  onChange?: (event: CustomEvent<PinCodeChangeEventDetail>) => void;
138
138
  /**
@@ -151,10 +151,10 @@ export declare const PPinCode: import("react").ForwardRefExoticComponent<Omit<im
151
151
  */
152
152
  type?: PinCodeType;
153
153
  /**
154
- * Sets the current concatenated value of all pin code fields and allows setting the initial value.
154
+ * Sets the current concatenated value. Numbers are accepted for programmatic assignment, but user input updates the value as a string.
155
155
  * @default ''
156
156
  */
157
- value?: string;
157
+ value?: string | number | null;
158
158
  } & {
159
159
  children?: import("react").ReactNode | undefined;
160
160
  } & import("react").RefAttributes<HTMLElement>>;
@@ -15,9 +15,9 @@ export type PRadioGroupOptionProps = BaseProps & {
15
15
  */
16
16
  loading?: boolean;
17
17
  /**
18
- * Sets the value submitted with the form data when this radio option is selected within its parent group.
18
+ * Sets the required option value. Must be a string or number and is selected when it strictly matches the parent `p-radio-group` value by type and value.
19
19
  */
20
- value?: string;
20
+ value: string | number;
21
21
  };
22
22
  export declare const PRadioGroupOption: import("react").ForwardRefExoticComponent<Omit<import("react").DOMAttributes<{}>, "onChange" | "onInput" | "onToggle"> & Pick<import("react").HTMLAttributes<{}>, "suppressHydrationWarning" | "autoFocus" | "className" | "dir" | "hidden" | "id" | "inert" | "inputMode" | "lang" | "slot" | "style" | "tabIndex" | "title" | "translate" | "role"> & {
23
23
  /**
@@ -35,9 +35,9 @@ export declare const PRadioGroupOption: import("react").ForwardRefExoticComponen
35
35
  */
36
36
  loading?: boolean;
37
37
  /**
38
- * Sets the value submitted with the form data when this radio option is selected within its parent group.
38
+ * Sets the required option value. Must be a string or number and is selected when it strictly matches the parent `p-radio-group` value by type and value.
39
39
  */
40
- value?: string;
40
+ value: string | number;
41
41
  } & {
42
42
  children?: import("react").ReactNode | undefined;
43
43
  } & import("react").RefAttributes<HTMLElement>>;
@@ -68,10 +68,9 @@ export type PRadioGroupProps = BaseProps & {
68
68
  */
69
69
  state?: RadioGroupState;
70
70
  /**
71
- * Sets the currently selected value that pre-selects the matching radio option and reflects user changes.
72
- * @default ''
71
+ * Sets the currently selected value that pre-selects the matching radio option and reflects user changes. Matches an option strictly by type and value, meaning string or number only match an option whose value has the same type and equal value. Use undefined or null for no preselection; these values never match an option because every option requires a string or number value. Please note that FormData always serializes values as strings, so when participating in a native (uncontrolled) form a number value is restored as string via formStateRestoreCallback and will no longer strictly match a number-typed option. This limitation only applies to native form state restoration; in controlled forms (where the consumer manages value directly via the change event), the number type is preserved end-to-end.
73
72
  */
74
- value?: string;
73
+ value?: string | number | null;
75
74
  };
76
75
  export declare const PRadioGroup: import("react").ForwardRefExoticComponent<Omit<import("react").DOMAttributes<{}>, "onChange" | "onInput" | "onToggle"> & Pick<import("react").HTMLAttributes<{}>, "suppressHydrationWarning" | "autoFocus" | "className" | "dir" | "hidden" | "id" | "inert" | "inputMode" | "lang" | "slot" | "style" | "tabIndex" | "title" | "translate" | "role"> & {
77
76
  /**
@@ -141,10 +140,9 @@ export declare const PRadioGroup: import("react").ForwardRefExoticComponent<Omit
141
140
  */
142
141
  state?: RadioGroupState;
143
142
  /**
144
- * Sets the currently selected value that pre-selects the matching radio option and reflects user changes.
145
- * @default ''
143
+ * Sets the currently selected value that pre-selects the matching radio option and reflects user changes. Matches an option strictly by type and value, meaning string or number only match an option whose value has the same type and equal value. Use undefined or null for no preselection; these values never match an option because every option requires a string or number value. Please note that FormData always serializes values as strings, so when participating in a native (uncontrolled) form a number value is restored as string via formStateRestoreCallback and will no longer strictly match a number-typed option. This limitation only applies to native form state restoration; in controlled forms (where the consumer manages value directly via the change event), the number type is preserved end-to-end.
146
144
  */
147
- value?: string;
145
+ value?: string | number | null;
148
146
  } & {
149
147
  children?: import("react").ReactNode | undefined;
150
148
  } & import("react").RefAttributes<HTMLElement>>;
@@ -68,9 +68,9 @@ export type PSegmentedControlProps = BaseProps & {
68
68
  */
69
69
  state?: SegmentedControlState;
70
70
  /**
71
- * Sets the currently selected item's value and pre-selects the matching option when the component renders.
71
+ * Sets the currently selected item's value and pre-selects the matching option when the component renders. Matches an item strictly by type and value, meaning string or number only match an item whose value has the same type and equal value. Use undefined or null for no preselection. Please note that FormData always serializes values as strings, so when participating in a native (uncontrolled) form a number value is restored as string via formStateRestoreCallback and will no longer strictly match a number-typed item. This limitation only applies to native form state restoration; in controlled forms (where the consumer manages value directly via the change event), the number type is preserved end-to-end.
72
72
  */
73
- value?: string | number;
73
+ value?: string | number | null;
74
74
  };
75
75
  export declare const PSegmentedControl: import("react").ForwardRefExoticComponent<Omit<import("react").DOMAttributes<{}>, "onChange" | "onInput" | "onToggle"> & Pick<import("react").HTMLAttributes<{}>, "suppressHydrationWarning" | "autoFocus" | "className" | "dir" | "hidden" | "id" | "inert" | "inputMode" | "lang" | "slot" | "style" | "tabIndex" | "title" | "translate" | "role"> & {
76
76
  /**
@@ -140,9 +140,9 @@ export declare const PSegmentedControl: import("react").ForwardRefExoticComponen
140
140
  */
141
141
  state?: SegmentedControlState;
142
142
  /**
143
- * Sets the currently selected item's value and pre-selects the matching option when the component renders.
143
+ * Sets the currently selected item's value and pre-selects the matching option when the component renders. Matches an item strictly by type and value, meaning string or number only match an item whose value has the same type and equal value. Use undefined or null for no preselection. Please note that FormData always serializes values as strings, so when participating in a native (uncontrolled) form a number value is restored as string via formStateRestoreCallback and will no longer strictly match a number-typed item. This limitation only applies to native form state restoration; in controlled forms (where the consumer manages value directly via the change event), the number type is preserved end-to-end.
144
144
  */
145
- value?: string | number;
145
+ value?: string | number | null;
146
146
  } & {
147
147
  children?: import("react").ReactNode | undefined;
148
148
  } & import("react").RefAttributes<HTMLElement>>;
@@ -10,7 +10,7 @@ export type PWordmarkProps = BaseProps & {
10
10
  */
11
11
  href?: string;
12
12
  /**
13
- * Sets the display size of the Porsche wordmark SVG using predefined PDS size tokens (`small`, `medium`, `large`, `inherit`).
13
+ * Sets the display size of the Porsche wordmark SVG using predefined PDS size tokens.
14
14
  * @default 'small'
15
15
  */
16
16
  size?: WordmarkSize;
@@ -30,7 +30,7 @@ export declare const PWordmark: import("react").ForwardRefExoticComponent<Omit<i
30
30
  */
31
31
  href?: string;
32
32
  /**
33
- * Sets the display size of the Porsche wordmark SVG using predefined PDS size tokens (`small`, `medium`, `large`, `inherit`).
33
+ * Sets the display size of the Porsche wordmark SVG using predefined PDS size tokens.
34
34
  * @default 'small'
35
35
  */
36
36
  size?: WordmarkSize;
@@ -16,7 +16,10 @@ export declare class DSRCarousel extends Component<any> {
16
16
  private btnPrev;
17
17
  private btnNext;
18
18
  private paginationEl;
19
+ private slideStatusEl;
19
20
  private slides;
21
+ /** Skips the next live-region update when navigation was caused by focusing a slide. */
22
+ private suppressNextStatusAnnounce;
20
23
  private get splideSlides();
21
24
  private get hasNavigation();
22
25
  render(): JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { FC } from 'react';
2
+ type FilterStatusAnnouncerProps = {
3
+ message: string;
4
+ };
5
+ export declare const FilterStatusAnnouncer: FC<FilterStatusAnnouncerProps>;
6
+ export {};
@@ -16,6 +16,7 @@ export declare class DSRMultiSelect extends Component<any> {
16
16
  host: HTMLElement;
17
17
  private isOpen;
18
18
  private hasFilterResults;
19
+ private filterStatusMessage;
19
20
  private selectedOptions;
20
21
  private internals;
21
22
  private defaultValue;
@@ -14,6 +14,7 @@ export declare class DSRPinCode extends Component<any> {
14
14
  private initialLoading;
15
15
  private defaultValue;
16
16
  private inputElements;
17
+ private get parsedValue();
17
18
  formResetCallback(): void;
18
19
  formDisabledCallback(): void;
19
20
  formStateRestoreCallback(): void;
@@ -14,6 +14,7 @@ export declare class DSRRadioGroup extends Component<any> {
14
14
  private defaultValue;
15
15
  private radioGroupOptions;
16
16
  private preventOptionUpdate;
17
+ setFormValue(): void;
17
18
  formResetCallback(): void;
18
19
  formDisabledCallback(): void;
19
20
  formStateRestoreCallback(): void;
@@ -13,6 +13,7 @@ export declare class DSRSegmentedControl extends Component<any> {
13
13
  host: HTMLElement;
14
14
  private internals;
15
15
  private defaultValue;
16
+ setFormValue(): void;
16
17
  formResetCallback(): void;
17
18
  formDisabledCallback(): void;
18
19
  formStateRestoreCallback(): void;
@@ -16,6 +16,7 @@ export declare class DSRSelect extends Component<any> {
16
16
  host: HTMLElement;
17
17
  private isOpen;
18
18
  private hasFilterResults;
19
+ private filterStatusMessage;
19
20
  private selectedOption;
20
21
  private internals;
21
22
  private defaultValue;
@@ -32,7 +33,6 @@ export declare class DSRSelect extends Component<any> {
32
33
  private hasNativePopoverSupport;
33
34
  private cleanUpAutoUpdate;
34
35
  private currentlyHighlightedOption;
35
- private get hasFilter();
36
36
  setFormValue(): void;
37
37
  formDisabledCallback(): void;
38
38
  formStateRestoreCallback(): void;