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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/esm/lib/components/drilldown.wrapper.d.ts +5 -5
  3. package/esm/lib/components/flyout.wrapper.d.ts +5 -5
  4. package/esm/lib/components/modal.wrapper.d.ts +5 -5
  5. package/esm/lib/components/popover.wrapper.d.ts +5 -5
  6. package/esm/lib/components/sheet.wrapper.d.ts +5 -5
  7. package/esm/lib/types.d.ts +11 -0
  8. package/package.json +2 -2
  9. package/skills/pds-knowledge-react/SKILL.md +3 -3
  10. package/skills/pds-knowledge-react/references/components/p-drilldown/p-drilldown.md +1 -1
  11. package/skills/pds-knowledge-react/references/components/p-flyout/p-flyout.md +1 -1
  12. package/skills/pds-knowledge-react/references/components/p-modal/p-modal.md +1 -1
  13. package/skills/pds-knowledge-react/references/components/p-popover/p-popover.md +1 -1
  14. package/skills/pds-knowledge-react/references/components/p-sheet/p-sheet.md +1 -1
  15. package/skills/pds-knowledge-react/references/components/p-table/p-table.md +1 -1
  16. package/ssr/cjs/components/dist/styles/esm/styles-entry.cjs +1 -1
  17. package/ssr/cjs/components/dist/utils/esm/utils-entry.cjs +27 -1
  18. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown.cjs +1 -0
  19. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.cjs +3 -0
  20. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.cjs +3 -0
  21. package/ssr/cjs/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/sheet.cjs +3 -0
  22. package/ssr/esm/components/dist/styles/esm/styles-entry.mjs +1 -1
  23. package/ssr/esm/components/dist/utils/esm/utils-entry.mjs +25 -2
  24. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/drilldown.mjs +1 -0
  25. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/flyout.mjs +4 -1
  26. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/modal.mjs +4 -1
  27. package/ssr/esm/components-react/projects/react-ssr-wrapper/src/lib/dsr-components/sheet.mjs +4 -1
  28. package/ssr/esm/lib/components/drilldown.wrapper.d.ts +5 -5
  29. package/ssr/esm/lib/components/flyout.wrapper.d.ts +5 -5
  30. package/ssr/esm/lib/components/modal.wrapper.d.ts +5 -5
  31. package/ssr/esm/lib/components/popover.wrapper.d.ts +5 -5
  32. package/ssr/esm/lib/components/sheet.wrapper.d.ts +5 -5
  33. package/ssr/esm/lib/dsr-components/drilldown.d.ts +1 -0
  34. package/ssr/esm/lib/dsr-components/flyout.d.ts +3 -0
  35. package/ssr/esm/lib/dsr-components/modal.d.ts +3 -0
  36. package/ssr/esm/lib/dsr-components/sheet.d.ts +3 -0
  37. package/ssr/esm/lib/types.d.ts +11 -0
package/CHANGELOG.md CHANGED
@@ -14,6 +14,31 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
14
14
 
15
15
  ## [Unreleased]
16
16
 
17
+ ## [4.6.0] - 2026-08-20
18
+
19
+ ## [4.6.0-rc.3] - 2026-08-19
20
+
21
+ ### Added
22
+
23
+ - **Testing**: the `testing` sub-package now provides a `Shadow` counterpart for every Testing Library query, so
24
+ elements rendered inside Shadow DOM can be queried directly. Eight query families (`AltText`, `DisplayValue`,
25
+ `LabelText`, `PlaceholderText`, `Role`, `TestId`, `Text`, `Title`) in six variants each, plus `screen`, `within`,
26
+ `deepQuerySelector` and `deepQuerySelectorAll`. The existing `getByRoleShadowed`, `getByLabelTextShadowed` and
27
+ `getByTextShadowed` helpers remain available.
28
+ ([#4492](https://github.com/porsche-design-system/porsche-design-system/pull/4492))
29
+
30
+ ### Changed
31
+
32
+ - **Testing**: the `testing` sub-package requires a DOM. Importing it where no DOM is available now throws an explicit
33
+ error on import. ([#4492](https://github.com/porsche-design-system/porsche-design-system/pull/4492))
34
+ - `Flyout`, `Modal`, `Sheet`, `Drilldown`: the `dismiss` event now carries a payload identifying how the component was
35
+ closed. The event detail changed from `void` to `{ reason: 'dismiss-button' | 'backdrop' | 'escape' }`, exported as
36
+ `FlyoutDismissEventDetail`, `ModalDismissEventDetail`, `SheetDismissEventDetail` and `DrilldownDismissEventDetail`.
37
+ ([#4675](https://github.com/porsche-design-system/porsche-design-system/pull/4675))
38
+ - `Popover`: the `dismiss` event now carries a payload identifying how the component was closed. The event detail
39
+ changed from `void` to `{ reason: 'outside-click' | 'focus-out' | 'escape' }`, exported as
40
+ `PopoverDismissEventDetail`. ([#4675](https://github.com/porsche-design-system/porsche-design-system/pull/4675))
41
+
17
42
  ## [4.6.0-rc.2] - 2026-08-13
18
43
 
19
44
  ### Added
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, DrilldownAriaAttribute, DrilldownUpdateEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, DrilldownAriaAttribute, DrilldownDismissEventDetail, DrilldownUpdateEventDetail } from '../types';
3
3
  export type PDrilldownProps = BaseProps & {
4
4
  /**
5
5
  * Sets which `p-drilldown-item` (by `identifier`) is currently expanded to show its sub-navigation level.
@@ -10,9 +10,9 @@ export type PDrilldownProps = BaseProps & {
10
10
  */
11
11
  aria?: SelectedAriaAttributes<DrilldownAriaAttribute>;
12
12
  /**
13
- * Emitted when the user closes the drilldown via the close button or Escape key.
13
+ * Emitted when the user closes the drilldown via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
14
14
  */
15
- onDismiss?: (event: CustomEvent<void>) => void;
15
+ onDismiss?: (event: CustomEvent<DrilldownDismissEventDetail>) => void;
16
16
  /**
17
17
  * Emitted when the active navigation level changes, with the new `activeIdentifier` in the event detail.
18
18
  */
@@ -33,9 +33,9 @@ export declare const PDrilldown: import("react").ForwardRefExoticComponent<Omit<
33
33
  */
34
34
  aria?: SelectedAriaAttributes<DrilldownAriaAttribute>;
35
35
  /**
36
- * Emitted when the user closes the drilldown via the close button or Escape key.
36
+ * Emitted when the user closes the drilldown via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
37
37
  */
38
- onDismiss?: (event: CustomEvent<void>) => void;
38
+ onDismiss?: (event: CustomEvent<DrilldownDismissEventDetail>) => void;
39
39
  /**
40
40
  * Emitted when the active navigation level changes, with the new `activeIdentifier` in the event detail.
41
41
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, FlyoutAriaAttribute, FlyoutBackdrop, FlyoutBackground, FlyoutFooterBehavior, BreakpointCustomizable, FlyoutMotionHiddenEndEventDetail, FlyoutMotionVisibleEndEventDetail, FlyoutPosition } from '../types';
2
+ import type { SelectedAriaAttributes, FlyoutAriaAttribute, FlyoutBackdrop, FlyoutBackground, FlyoutFooterBehavior, BreakpointCustomizable, FlyoutDismissEventDetail, FlyoutMotionHiddenEndEventDetail, FlyoutMotionVisibleEndEventDetail, FlyoutPosition } from '../types';
3
3
  export type PFlyoutProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the flyout dialog element for improved screen reader accessibility.
@@ -31,9 +31,9 @@ export type PFlyoutProps = BaseProps & {
31
31
  */
32
32
  fullscreen?: BreakpointCustomizable<boolean>;
33
33
  /**
34
- * Emitted when the user closes the flyout via the close button, backdrop click, or Escape key.
34
+ * Emitted when the user closes the flyout via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
35
35
  */
36
- onDismiss?: (event: CustomEvent<void>) => void;
36
+ onDismiss?: (event: CustomEvent<FlyoutDismissEventDetail>) => void;
37
37
  /**
38
38
  * Emitted after the flyout's close transition completes and the panel is fully hidden.
39
39
  */
@@ -84,9 +84,9 @@ export declare const PFlyout: import("react").ForwardRefExoticComponent<Omit<imp
84
84
  */
85
85
  fullscreen?: BreakpointCustomizable<boolean>;
86
86
  /**
87
- * Emitted when the user closes the flyout via the close button, backdrop click, or Escape key.
87
+ * Emitted when the user closes the flyout via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
88
88
  */
89
- onDismiss?: (event: CustomEvent<void>) => void;
89
+ onDismiss?: (event: CustomEvent<FlyoutDismissEventDetail>) => void;
90
90
  /**
91
91
  * Emitted after the flyout's close transition completes and the panel is fully hidden.
92
92
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, ModalAriaAttribute, ModalBackdrop, ModalBackground, BreakpointCustomizable, ModalMotionHiddenEndEventDetail, ModalMotionVisibleEndEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, ModalAriaAttribute, ModalBackdrop, ModalBackground, BreakpointCustomizable, ModalDismissEventDetail, ModalMotionHiddenEndEventDetail, ModalMotionVisibleEndEventDetail } from '../types';
3
3
  export type PModalProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the dialog element for improved accessibility when no visible heading is present.
@@ -31,9 +31,9 @@ export type PModalProps = BaseProps & {
31
31
  */
32
32
  fullscreen?: BreakpointCustomizable<boolean>;
33
33
  /**
34
- * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key.
34
+ * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
35
35
  */
36
- onDismiss?: (event: CustomEvent<void>) => void;
36
+ onDismiss?: (event: CustomEvent<ModalDismissEventDetail>) => void;
37
37
  /**
38
38
  * Emitted after the modal's close transition completes and the dialog is fully hidden.
39
39
  */
@@ -79,9 +79,9 @@ export declare const PModal: import("react").ForwardRefExoticComponent<Omit<impo
79
79
  */
80
80
  fullscreen?: BreakpointCustomizable<boolean>;
81
81
  /**
82
- * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key.
82
+ * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
83
83
  */
84
- onDismiss?: (event: CustomEvent<void>) => void;
84
+ onDismiss?: (event: CustomEvent<ModalDismissEventDetail>) => void;
85
85
  /**
86
86
  * Emitted after the modal's close transition completes and the dialog is fully hidden.
87
87
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, PopoverAriaAttribute, PopoverDirection } from '../types';
2
+ import type { SelectedAriaAttributes, PopoverAriaAttribute, PopoverDirection, PopoverDismissEventDetail } from '../types';
3
3
  export type PPopoverProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the popover panel to improve accessibility for screen readers.
@@ -19,9 +19,9 @@ export type PPopoverProps = BaseProps & {
19
19
  */
20
20
  direction?: PopoverDirection;
21
21
  /**
22
- * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab).
22
+ * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). The event detail identifies which of the three was used.
23
23
  */
24
- onDismiss?: (event: CustomEvent<void>) => void;
24
+ onDismiss?: (event: CustomEvent<PopoverDismissEventDetail>) => void;
25
25
  /**
26
26
  * Controls whether the popover is visible. When set (controlled mode), visibility follows this prop and the consumer owns the open state via a slotted `button`. When omitted (uncontrolled mode), the component manages visibility itself.
27
27
  */
@@ -46,9 +46,9 @@ export declare const PPopover: import("react").ForwardRefExoticComponent<Omit<im
46
46
  */
47
47
  direction?: PopoverDirection;
48
48
  /**
49
- * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab).
49
+ * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). The event detail identifies which of the three was used.
50
50
  */
51
- onDismiss?: (event: CustomEvent<void>) => void;
51
+ onDismiss?: (event: CustomEvent<PopoverDismissEventDetail>) => void;
52
52
  /**
53
53
  * Controls whether the popover is visible. When set (controlled mode), visibility follows this prop and the consumer owns the open state via a slotted `button`. When omitted (uncontrolled mode), the component manages visibility itself.
54
54
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, SheetAriaAttribute, SheetBackground, SheetMotionHiddenEndEventDetail, SheetMotionVisibleEndEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, SheetAriaAttribute, SheetBackground, SheetDismissEventDetail, SheetMotionHiddenEndEventDetail, SheetMotionVisibleEndEventDetail } from '../types';
3
3
  export type PSheetProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the sheet dialog element for improved accessibility when the default `aria-label` is insufficient.
@@ -21,9 +21,9 @@ export type PSheetProps = BaseProps & {
21
21
  */
22
22
  dismissButton?: boolean;
23
23
  /**
24
- * Emitted when the user dismisses the sheet via the close button, backdrop click, or Escape key.
24
+ * Emitted when the user closes the sheet via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
25
25
  */
26
- onDismiss?: (event: CustomEvent<void>) => void;
26
+ onDismiss?: (event: CustomEvent<SheetDismissEventDetail>) => void;
27
27
  /**
28
28
  * Emitted after the sheet's close transition has fully completed and the panel is hidden.
29
29
  */
@@ -59,9 +59,9 @@ export declare const PSheet: import("react").ForwardRefExoticComponent<Omit<impo
59
59
  */
60
60
  dismissButton?: boolean;
61
61
  /**
62
- * Emitted when the user dismisses the sheet via the close button, backdrop click, or Escape key.
62
+ * Emitted when the user closes the sheet via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
63
63
  */
64
- onDismiss?: (event: CustomEvent<void>) => void;
64
+ onDismiss?: (event: CustomEvent<SheetDismissEventDetail>) => void;
65
65
  /**
66
66
  * Emitted after the sheet's close transition has fully completed and the panel is hidden.
67
67
  */
@@ -697,6 +697,10 @@ export type BreakpointValues<T> = {
697
697
  base: T;
698
698
  };
699
699
  export type BreakpointCustomizable<T> = T | BreakpointValues<T>;
700
+ export type DialogDismissReason = "dismiss-button" | "backdrop" | "escape";
701
+ export type DialogDismissEventDetail = {
702
+ reason: DialogDismissReason;
703
+ };
700
704
  declare const LINK_TARGETS: readonly [
701
705
  "_self",
702
706
  "_blank",
@@ -1129,6 +1133,7 @@ export type DrilldownAriaAttribute = (typeof DRILLDOWN_ARIA_ATTRIBUTES)[number];
1129
1133
  export type DrilldownUpdateEventDetail = {
1130
1134
  activeIdentifier: string | undefined;
1131
1135
  };
1136
+ export type DrilldownDismissEventDetail = DialogDismissEventDetail;
1132
1137
  export type DrilldownLinkTarget = LinkTarget;
1133
1138
  export type DrilldownLinkAriaAttribute = LinkAriaAttribute;
1134
1139
  declare const FIELDSET_LABEL_SIZES: readonly [
@@ -1188,6 +1193,7 @@ declare const FLYOUT_ARIA_ATTRIBUTES: readonly [
1188
1193
  export type FlyoutAriaAttribute = (typeof FLYOUT_ARIA_ATTRIBUTES)[number];
1189
1194
  export type FlyoutMotionVisibleEndEventDetail = TransitionEvent;
1190
1195
  export type FlyoutMotionHiddenEndEventDetail = TransitionEvent;
1196
+ export type FlyoutDismissEventDetail = DialogDismissEventDetail;
1191
1197
  export type FlyoutBackdrop = Backdrop;
1192
1198
  declare const HEADING_TAGS: readonly [
1193
1199
  "h1",
@@ -1417,6 +1423,7 @@ export type ModalBackground = (typeof MODAL_BACKGROUNDS)[number];
1417
1423
  export type ModalBackdrop = Backdrop;
1418
1424
  export type ModalMotionVisibleEndEventDetail = TransitionEvent;
1419
1425
  export type ModalMotionHiddenEndEventDetail = TransitionEvent;
1426
+ export type ModalDismissEventDetail = DialogDismissEventDetail;
1420
1427
  declare const MODEL_SIGNATURES_MANIFEST: {
1421
1428
  "718": {
1422
1429
  src: string;
@@ -1539,6 +1546,9 @@ declare const POPOVER_ARIA_ATTRIBUTES: readonly [
1539
1546
  "aria-label"
1540
1547
  ];
1541
1548
  export type PopoverAriaAttribute = (typeof POPOVER_ARIA_ATTRIBUTES)[number];
1549
+ export type PopoverDismissEventDetail = {
1550
+ reason: "outside-click" | "focus-out" | "escape";
1551
+ };
1542
1552
  declare const GROUP_DIRECTIONS: readonly [
1543
1553
  "row",
1544
1554
  "column"
@@ -1587,6 +1597,7 @@ declare const SHEET_BACKGROUNDS: readonly [
1587
1597
  export type SheetBackground = (typeof SHEET_BACKGROUNDS)[number];
1588
1598
  export type SheetMotionVisibleEndEventDetail = TransitionEvent;
1589
1599
  export type SheetMotionHiddenEndEventDetail = TransitionEvent;
1600
+ export type SheetDismissEventDetail = DialogDismissEventDetail;
1590
1601
  declare const SPINNER_COLORS: readonly [
1591
1602
  "primary",
1592
1603
  "inherit"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@porsche-design-system/components-react",
3
- "version": "4.6.0-rc.2",
3
+ "version": "4.6.0",
4
4
  "description": "Porsche Design System is a component library designed to help developers create the best experience for software or services distributed by Dr. Ing. h.c. F. Porsche AG.",
5
5
  "keywords": [
6
6
  "porsche",
@@ -21,7 +21,7 @@
21
21
  "url": "https://github.com/porsche-design-system/porsche-design-system"
22
22
  },
23
23
  "dependencies": {
24
- "@porsche-design-system/components-js": "4.6.0-rc.2"
24
+ "@porsche-design-system/components-js": "4.6.0"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "ag-grid-community": ">= 36.0.0 <37.0.0",
@@ -15,11 +15,11 @@ Prefer Porsche Design System components and tokens for new UI, even when the use
15
15
 
16
16
  This skill currently covers components, global stylesheets and theming, tokens, and styling integrations. It does not yet include complete getting-started, setup, and installation guidance; the v3-to-v4 migration guide; the changelog; partials; patterns and templates; the AG Grid theme; or the Storefront’s Must Know and Help sections.
17
17
 
18
- Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.6.0-rc.2`; prefer the [exact-version Porsche Design System Storefront](https://designsystem.porsche.com/v4.6.0-rc.2/). Major-version URLs such as `/v4/` always serve the latest v4 release and may describe APIs or setup introduced after the installed version. Use them only as a fallback and verify relevant details against the installed package.
18
+ Before using documentation outside this skill or the installed package, match it to the installed PDS version. This skill was generated for `4.6.0`; prefer the [exact-version Porsche Design System Storefront](https://designsystem.porsche.com/v4.6.0/). Major-version URLs such as `/v4/` always serve the latest v4 release and may describe APIs or setup introduced after the installed version. Use them only as a fallback and verify relevant details against the installed package.
19
19
 
20
20
  For runnable patterns and templates, consult the [Porsche Design System examples repository](https://github.com/porsche-design-system/examples), selecting a release tag or commit that matches the installed package instead of assuming its default branch is compatible. For release-specific changes, read `../../CHANGELOG.md`.
21
21
 
22
- For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.6.0-rc.2/packages/components/src/components) under the repository's `packages/components/src/components/<component>` directory. Do not use the default branch, which may represent a newer release.
22
+ For exact API facts, inspect the installed typings and metadata first. When readable implementation details are necessary, use the [exact-version component source](https://github.com/porsche-design-system/porsche-design-system/tree/v4.6.0/packages/components/src/components) under the repository's `packages/components/src/components/<component>` directory. Do not use the default branch, which may represent a newer release.
23
23
 
24
24
  For deployed browser behavior, inspect component requests in the Network panel. Treat these minified, content-hashed CDN artifacts as a debugging fallback; use the exact-version repository source for readable implementation details.
25
25
 
@@ -110,7 +110,7 @@ import { PButton, PorscheDesignSystemProvider } from '@porsche-design-system/com
110
110
 
111
111
  On the server, the `/ssr` build emits component markup and styles as Declarative Shadow DOM so the browser can create the Shadow DOM before JavaScript runs. In the browser, it initializes like the standard React wrapper. The framework build must replace `process.browser` for its server and client targets and eliminate the unused branch.
112
112
 
113
- Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.6.0-rc.2/developing/next-js/getting-started/) or the [React Router integration guide](https://designsystem.porsche.com/v4.6.0-rc.2/developing/react-router/getting-started/). Remix users should follow the React Router guidance because Remix v2 was upstreamed into React Router.
113
+ Framework setup differs. Follow the [Next.js integration guide](https://designsystem.porsche.com/v4.6.0/developing/next-js/getting-started/) or the [React Router integration guide](https://designsystem.porsche.com/v4.6.0/developing/react-router/getting-started/). Remix users should follow the React Router guidance because Remix v2 was upstreamed into React Router.
114
114
 
115
115
  ## Stylesheets
116
116
 
@@ -92,7 +92,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
92
92
 
93
93
  | Event | Type | Description |
94
94
  | --- | --- | --- |
95
- | `dismiss` | `CustomEvent<void>` | Emitted when the user closes the drilldown via the close button or Escape key. |
95
+ | `dismiss` | `CustomEvent<DrilldownDismissEventDetail>`<br>`{ reason: 'dismiss-button' | 'backdrop' | 'escape' }` | Emitted when the user closes the drilldown via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used. |
96
96
  | `update` | `CustomEvent<DrilldownUpdateEventDetail>`<br>`{ activeIdentifier: string | undefined }` | Emitted when the active navigation level changes, with the new `activeIdentifier` in the event detail. |
97
97
 
98
98
  ### Controlled properties
@@ -95,7 +95,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
95
95
 
96
96
  | Event | Type | Description |
97
97
  | --- | --- | --- |
98
- | `dismiss` | `CustomEvent<void>` | Emitted when the user closes the flyout via the close button, backdrop click, or Escape key. |
98
+ | `dismiss` | `CustomEvent<FlyoutDismissEventDetail>`<br>`{ reason: 'dismiss-button' | 'backdrop' | 'escape' }` | Emitted when the user closes the flyout via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used. |
99
99
  | `motionHiddenEnd` | `CustomEvent<FlyoutMotionHiddenEndEventDetail>`<br>`TransitionEvent` | Emitted after the flyout's close transition completes and the panel is fully hidden. |
100
100
  | `motionVisibleEnd` | `CustomEvent<FlyoutMotionVisibleEndEventDetail>`<br>`TransitionEvent` | Emitted after the flyout's open transition completes and the panel is fully visible. |
101
101
 
@@ -102,7 +102,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
102
102
 
103
103
  | Event | Type | Description |
104
104
  | --- | --- | --- |
105
- | `dismiss` | `CustomEvent<void>` | Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. |
105
+ | `dismiss` | `CustomEvent<ModalDismissEventDetail>`<br>`{ reason: 'dismiss-button' | 'backdrop' | 'escape' }` | Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used. |
106
106
  | `motionHiddenEnd` | `CustomEvent<ModalMotionHiddenEndEventDetail>`<br>`TransitionEvent` | Emitted after the modal's close transition completes and the dialog is fully hidden. |
107
107
  | `motionVisibleEnd` | `CustomEvent<ModalMotionVisibleEndEventDetail>`<br>`TransitionEvent` | Emitted after the modal's open transition completes and the dialog is fully visible. |
108
108
 
@@ -85,7 +85,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
85
85
 
86
86
  | Event | Type | Description |
87
87
  | --- | --- | --- |
88
- | `dismiss` | `CustomEvent<void>` | Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). |
88
+ | `dismiss` | `CustomEvent<PopoverDismissEventDetail>`<br>`{ reason: 'outside-click' | 'focus-out' | 'escape' }` | Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). The event detail identifies which of the three was used. |
89
89
 
90
90
  ### Controlled properties
91
91
 
@@ -95,7 +95,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
95
95
 
96
96
  | Event | Type | Description |
97
97
  | --- | --- | --- |
98
- | `dismiss` | `CustomEvent<void>` | Emitted when the user dismisses the sheet via the close button, backdrop click, or Escape key. |
98
+ | `dismiss` | `CustomEvent<SheetDismissEventDetail>`<br>`{ reason: 'dismiss-button' | 'backdrop' | 'escape' }` | Emitted when the user closes the sheet via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used. |
99
99
  | `motionHiddenEnd` | `CustomEvent<SheetMotionHiddenEndEventDetail>`<br>`TransitionEvent` | Emitted after the sheet's close transition has fully completed and the panel is hidden. |
100
100
  | `motionVisibleEnd` | `CustomEvent<SheetMotionVisibleEndEventDetail>`<br>`TransitionEvent` | Emitted after the sheet's open transition has fully completed and the panel is visible. |
101
101
 
@@ -86,7 +86,7 @@ See [accessibility integration examples](./accessibility.md) for paired anti-pat
86
86
 
87
87
  | Event | Type | Description |
88
88
  | --- | --- | --- |
89
- | `update` | `CustomEvent<TableUpdateEventDetail>`<br>`{ id: string; active?: boolean; direction?: Direction }` | Emitted when the user clicks a sortable column header, carrying the new sort configuration in the event detail. |
89
+ | `update` | `CustomEvent<TableUpdateEventDetail>`<br>`{ id: string; active?: boolean; direction?: 'asc' | 'desc' }` | Emitted when the user clicks a sortable column header, carrying the new sort configuration in the event detail. |
90
90
 
91
91
  ### Slots
92
92
 
@@ -3849,7 +3849,7 @@ const OPTION_LIST_SAFE_ZONE = 6;
3849
3849
 
3850
3850
  const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
3851
3851
 
3852
- const prefix = `[Porsche Design System v${"4.6.0-rc.2"}]` // this part isn't covered by unit tests
3852
+ const prefix = `[Porsche Design System v${"4.6.0"}]` // this part isn't covered by unit tests
3853
3853
  ;
3854
3854
  const consoleError = (...messages) => {
3855
3855
  console.error(prefix, ...messages);
@@ -3473,6 +3473,29 @@ const showDialog = (dialog, scrollArea) => {
3473
3473
  dialog.inert = false; // Re-enable focus on dialog element
3474
3474
  dialog.focus(); // set focus programmatically to dialog element to prevent transition bug in Safari
3475
3475
  };
3476
+ // Callers map this to the `escape` dismiss reason, which only holds because we never set `closedby`. With
3477
+ // `closedby="any"` the native `cancel` fires for outside clicks too, indistinguishably, so they would be reported as
3478
+ // `escape` and no test would catch it. Backdrop clicks are detected separately via `isDialogBackdropTarget`.
3479
+ const onCancelDialog = (e, cb, disable = false) => {
3480
+ e.preventDefault(); // prevent closing the dialog uncontrolled by ESC
3481
+ if (!disable) {
3482
+ cb();
3483
+ }
3484
+ };
3485
+ // A click/press lands on the backdrop when its target is the `<dialog>` element itself or the `.scroller` wrapper
3486
+ // (both cover the area around the panel). Any deeper target means the interaction happened inside the panel content.
3487
+ const isDialogBackdropTarget = (e) => {
3488
+ const target = e.target;
3489
+ return target.className === 'scroller' || target.tagName === 'DIALOG';
3490
+ };
3491
+ const onClickDialog = (e, cb, disable, isPointerDownInside = false) => {
3492
+ // Skip dismissal when the pointer gesture *started* inside the panel (e.g. a text selection dragged out and released
3493
+ // on the backdrop). A `click` only fires on the nearest common ancestor of `mousedown`/`mouseup`, so such a gesture
3494
+ // retargets the resulting `click` to the backdrop and would otherwise wrongly dismiss. Mirrors `p-popover`.
3495
+ if (!disable && !isPointerDownInside && isDialogBackdropTarget(e)) {
3496
+ cb(); // dismiss dialog when clicked on backdrop
3497
+ }
3498
+ };
3476
3499
 
3477
3500
  const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
3478
3501
 
@@ -3482,7 +3505,7 @@ const hasShowPickerSupport = () => (hasDocument &&
3482
3505
  'showPicker' in HTMLInputElement.prototype &&
3483
3506
  CSS.supports('selector(::-webkit-calendar-picker-indicator)'));
3484
3507
 
3485
- const prefix = `[Porsche Design System v${"4.6.0-rc.2"}]` // this part isn't covered by unit tests
3508
+ const prefix = `[Porsche Design System v${"4.6.0"}]` // this part isn't covered by unit tests
3486
3509
  ;
3487
3510
  const consoleError$1 = (...messages) => {
3488
3511
  console.error(prefix, ...messages);
@@ -4441,6 +4464,7 @@ exports.hasWindow = hasWindow$1;
4441
4464
  exports.headerSlot = headerSlot;
4442
4465
  exports.internalDrilldown = internalDrilldown;
4443
4466
  exports.isCurrentInput = isCurrentInput;
4467
+ exports.isDialogBackdropTarget = isDialogBackdropTarget;
4444
4468
  exports.isDisabledOrLoading = isDisabledOrLoading;
4445
4469
  exports.isElementOfKind = isElementOfKind;
4446
4470
  exports.isInfinitePagination = isInfinitePagination;
@@ -4452,6 +4476,8 @@ exports.labelId = labelId;
4452
4476
  exports.mergeInputNativeAria = mergeInputNativeAria;
4453
4477
  exports.normalizeAiTagLocale = normalizeAiTagLocale;
4454
4478
  exports.observedNodesMap = observedNodesMap;
4479
+ exports.onCancelDialog = onCancelDialog;
4480
+ exports.onClickDialog = onClickDialog;
4455
4481
  exports.parseAndGetAriaAttributes = parseAndGetAriaAttributes;
4456
4482
  exports.parseJSONAttribute = parseJSONAttribute;
4457
4483
  exports.resolveAiTagTranslationLanguage = resolveAiTagTranslationLanguage;
@@ -39,6 +39,7 @@ class DSRDrilldown extends react.Component {
39
39
  const style = minifyCss.minifyCss(stylesEntry.getDrilldownCss(this.props.open, this.primary, this.isSecondaryDrawerVisible));
40
40
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsxRuntime.jsx("dialog", { inert: !this.props.open, ...utilsEntry.parseAndGetAriaAttributes(this.props.aria), children: jsxRuntime.jsxs("div", { className: "drawer", children: [jsxRuntime.jsx(buttonPure_wrapper.PButtonPure, { className: "back", type: "button", size: "small", alignLabel: "end", stretch: true, icon: "arrow-left", hideLabel: true, children: "Back" }), jsxRuntime.jsx(button_wrapper.PButton, { className: "dismiss-mobile", type: "button", icon: "close", compact: true, variant: "secondary", hideLabel: true, children: "Dismiss drilldown" }), jsxRuntime.jsx(button_wrapper.PButton, { className: "dismiss-desktop", type: "button", icon: "close", variant: "secondary", hideLabel: true, children: "Dismiss drilldown" }), jsxRuntime.jsx("div", { className: "scroller", children: jsxRuntime.jsx("slot", {}) })] }) })] }), this.props.children] }));
41
41
  }
42
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
42
43
  }
43
44
 
44
45
  exports.DSRDrilldown = DSRDrilldown;
@@ -56,6 +56,9 @@ class DSRFlyout extends react.Component {
56
56
  ...utilsEntry.parseAndGetAriaAttributes(this.props.aria),
57
57
  }), children: jsxRuntime.jsx("slot", {}) })] }), this.props.children] }));
58
58
  }
59
+ onDialogCancel = (e) => utilsEntry.onCancelDialog(e, () => this.props.dismissDialog('escape'));
60
+ onDialogBackdropClick = (e) => utilsEntry.onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
61
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
59
62
  }
60
63
 
61
64
  exports.DSRFlyout = DSRFlyout;
@@ -54,6 +54,9 @@ class DSRModal extends react.Component {
54
54
  ...utilsEntry.parseAndGetAriaAttributes(this.props.aria),
55
55
  }), children: jsxRuntime.jsx("slot", {}) })] }), this.props.children] }));
56
56
  }
57
+ onDialogCancel = (e) => utilsEntry.onCancelDialog(e, () => this.props.dismissDialog('escape'), !this.props.dismissButton);
58
+ onDialogBackdropClick = (e) => utilsEntry.onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
59
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
57
60
  }
58
61
 
59
62
  exports.DSRModal = DSRModal;
@@ -51,6 +51,9 @@ class DSRSheet extends react.Component {
51
51
  ...utilsEntry.parseAndGetAriaAttributes(this.props.aria),
52
52
  }), children: jsxRuntime.jsx("slot", {}) })] }), this.props.children] }));
53
53
  }
54
+ onDialogCancel = (e) => utilsEntry.onCancelDialog(e, () => this.props.dismissDialog('escape'), !this.props.dismissButton);
55
+ onDialogBackdropClick = (e) => utilsEntry.onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
56
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
54
57
  }
55
58
 
56
59
  exports.DSRSheet = DSRSheet;
@@ -3847,7 +3847,7 @@ const OPTION_LIST_SAFE_ZONE = 6;
3847
3847
 
3848
3848
  const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
3849
3849
 
3850
- const prefix = `[Porsche Design System v${"4.6.0-rc.2"}]` // this part isn't covered by unit tests
3850
+ const prefix = `[Porsche Design System v${"4.6.0"}]` // this part isn't covered by unit tests
3851
3851
  ;
3852
3852
  const consoleError = (...messages) => {
3853
3853
  console.error(prefix, ...messages);
@@ -3471,6 +3471,29 @@ const showDialog = (dialog, scrollArea) => {
3471
3471
  dialog.inert = false; // Re-enable focus on dialog element
3472
3472
  dialog.focus(); // set focus programmatically to dialog element to prevent transition bug in Safari
3473
3473
  };
3474
+ // Callers map this to the `escape` dismiss reason, which only holds because we never set `closedby`. With
3475
+ // `closedby="any"` the native `cancel` fires for outside clicks too, indistinguishably, so they would be reported as
3476
+ // `escape` and no test would catch it. Backdrop clicks are detected separately via `isDialogBackdropTarget`.
3477
+ const onCancelDialog = (e, cb, disable = false) => {
3478
+ e.preventDefault(); // prevent closing the dialog uncontrolled by ESC
3479
+ if (!disable) {
3480
+ cb();
3481
+ }
3482
+ };
3483
+ // A click/press lands on the backdrop when its target is the `<dialog>` element itself or the `.scroller` wrapper
3484
+ // (both cover the area around the panel). Any deeper target means the interaction happened inside the panel content.
3485
+ const isDialogBackdropTarget = (e) => {
3486
+ const target = e.target;
3487
+ return target.className === 'scroller' || target.tagName === 'DIALOG';
3488
+ };
3489
+ const onClickDialog = (e, cb, disable, isPointerDownInside = false) => {
3490
+ // Skip dismissal when the pointer gesture *started* inside the panel (e.g. a text selection dragged out and released
3491
+ // on the backdrop). A `click` only fires on the nearest common ancestor of `mousedown`/`mouseup`, so such a gesture
3492
+ // retargets the resulting `click` to the backdrop and would otherwise wrongly dismiss. Mirrors `p-popover`.
3493
+ if (!disable && !isPointerDownInside && isDialogBackdropTarget(e)) {
3494
+ cb(); // dismiss dialog when clicked on backdrop
3495
+ }
3496
+ };
3474
3497
 
3475
3498
  const getCDNBaseURL = () => global.PORSCHE_DESIGN_SYSTEM_CDN_URL + "/porsche-design-system";
3476
3499
 
@@ -3480,7 +3503,7 @@ const hasShowPickerSupport = () => (hasDocument &&
3480
3503
  'showPicker' in HTMLInputElement.prototype &&
3481
3504
  CSS.supports('selector(::-webkit-calendar-picker-indicator)'));
3482
3505
 
3483
- const prefix = `[Porsche Design System v${"4.6.0-rc.2"}]` // this part isn't covered by unit tests
3506
+ const prefix = `[Porsche Design System v${"4.6.0"}]` // this part isn't covered by unit tests
3484
3507
  ;
3485
3508
  const consoleError$1 = (...messages) => {
3486
3509
  console.error(prefix, ...messages);
@@ -4385,4 +4408,4 @@ const getTextTagType = (host, tag) => {
4385
4408
  return tag;
4386
4409
  };
4387
4410
 
4388
- export { AI_TAG_LOCALES_DEPRECATED, AI_TAG_TRANSLATIONS, DISPLAY_TAGS, HEADING_TAGS, ItemType, MARKET_LOCALES, TEXT_TAGS, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildFlagUrl, buildIconUrl, consoleError$1 as consoleError, createPaginationItems, createRange, createTopLayerController, crestSize, descriptionId, displaySizeToTagMap, getAiTagLanguage, getAiTagTranslation, getBannerAriaAttributes, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getComboboxAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getFieldsetAriaAttributes, getHTMLElement, getHasNativePopoverSupport, getHeadingTagType, getInlineNotificationAriaAttributes, getListboxAriaAttributes, getMaxTransitionDurationMs, getSanitizedActiveTabIndex, getSegmentedControlItemAriaAttributes, getStepperHorizontalIconName, getSvgUrl, getSwitchButtonAriaAttributes, getTagName, getTagNameWithoutPrefix, getTextTagType, getTotalPages, hasDocument, hasShowPickerSupport, hasSpecificDirectChildTag, hasVisibleIcon, hasWindow$1 as hasWindow, headerSlot, internalDrilldown, isCurrentInput, isDisabledOrLoading, isElementOfKind, isInfinitePagination, isListTypeOrdered, isSortable, isStateCompleteOrWarning, isUrl, labelId, mergeInputNativeAria, normalizeAiTagLocale, observedNodesMap, parseAndGetAriaAttributes, parseJSONAttribute, resolveAiTagTranslationLanguage, setAriaIDREF, showDialog, supportsConstructableStylesheets, supportsNativePopover, supportsOverlayTransition, tempDiv, tempIcon, tempLabel, traverseTreeAndUpdateState, updateDrilldownItemState };
4411
+ export { AI_TAG_LOCALES_DEPRECATED, AI_TAG_TRANSLATIONS, DISPLAY_TAGS, HEADING_TAGS, ItemType, MARKET_LOCALES, TEXT_TAGS, anchorSlot, attributeMutationMap, buildCrestImgSrc, buildCrestSrcSet, buildFlagUrl, buildIconUrl, consoleError$1 as consoleError, createPaginationItems, createRange, createTopLayerController, crestSize, descriptionId, displaySizeToTagMap, getAiTagLanguage, getAiTagTranslation, getBannerAriaAttributes, getButtonAriaAttributes, getButtonBaseAriaAttributes, getButtonPureAriaAttributes, getCDNBaseURL, getComboboxAriaAttributes, getCurrentActivePage, getDirectChildHTMLElement, getDisplayTagType, getFieldsetAriaAttributes, getHTMLElement, getHasNativePopoverSupport, getHeadingTagType, getInlineNotificationAriaAttributes, getListboxAriaAttributes, getMaxTransitionDurationMs, getSanitizedActiveTabIndex, getSegmentedControlItemAriaAttributes, getStepperHorizontalIconName, getSvgUrl, getSwitchButtonAriaAttributes, getTagName, getTagNameWithoutPrefix, getTextTagType, getTotalPages, hasDocument, hasShowPickerSupport, hasSpecificDirectChildTag, hasVisibleIcon, hasWindow$1 as hasWindow, headerSlot, internalDrilldown, isCurrentInput, isDialogBackdropTarget, isDisabledOrLoading, isElementOfKind, isInfinitePagination, isListTypeOrdered, isSortable, isStateCompleteOrWarning, isUrl, labelId, mergeInputNativeAria, normalizeAiTagLocale, observedNodesMap, onCancelDialog, onClickDialog, parseAndGetAriaAttributes, parseJSONAttribute, resolveAiTagTranslationLanguage, setAriaIDREF, showDialog, supportsConstructableStylesheets, supportsNativePopover, supportsOverlayTransition, tempDiv, tempIcon, tempLabel, traverseTreeAndUpdateState, updateDrilldownItemState };
@@ -37,6 +37,7 @@ class DSRDrilldown extends Component {
37
37
  const style = minifyCss(getComponentCss$_(this.props.open, this.primary, this.isSecondaryDrawerVisible));
38
38
  return (jsxs(Fragment, { children: [jsxs("template", { shadowroot: "open", shadowrootmode: "open", children: [jsx("style", { dangerouslySetInnerHTML: { __html: style } }), jsx("dialog", { inert: !this.props.open, ...parseAndGetAriaAttributes(this.props.aria), children: jsxs("div", { className: "drawer", children: [jsx(PButtonPure, { className: "back", type: "button", size: "small", alignLabel: "end", stretch: true, icon: "arrow-left", hideLabel: true, children: "Back" }), jsx(PButton, { className: "dismiss-mobile", type: "button", icon: "close", compact: true, variant: "secondary", hideLabel: true, children: "Dismiss drilldown" }), jsx(PButton, { className: "dismiss-desktop", type: "button", icon: "close", variant: "secondary", hideLabel: true, children: "Dismiss drilldown" }), jsx("div", { className: "scroller", children: jsx("slot", {}) })] }) })] }), this.props.children] }));
39
39
  }
40
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
40
41
  }
41
42
 
42
43
  export { DSRDrilldown };
@@ -3,7 +3,7 @@ import { splitChildren } from '../../splitChildren.mjs';
3
3
  import { Component } from 'react';
4
4
  import { minifyCss } from '../../minifyCss.mjs';
5
5
  import { getFlyoutCss as getComponentCss$V } from '../../../../../../components/dist/styles/esm/styles-entry.mjs';
6
- import { createTopLayerController, parseAndGetAriaAttributes, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
6
+ import { createTopLayerController, parseAndGetAriaAttributes, onCancelDialog, onClickDialog, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
7
7
  import { DialogBase } from './dialog-base.mjs';
8
8
 
9
9
  /**
@@ -54,6 +54,9 @@ class DSRFlyout extends Component {
54
54
  ...parseAndGetAriaAttributes(this.props.aria),
55
55
  }), children: jsx("slot", {}) })] }), this.props.children] }));
56
56
  }
57
+ onDialogCancel = (e) => onCancelDialog(e, () => this.props.dismissDialog('escape'));
58
+ onDialogBackdropClick = (e) => onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
59
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
57
60
  }
58
61
 
59
62
  export { DSRFlyout };
@@ -3,7 +3,7 @@ import { splitChildren } from '../../splitChildren.mjs';
3
3
  import { Component } from 'react';
4
4
  import { minifyCss } from '../../minifyCss.mjs';
5
5
  import { getModalCss as getComponentCss$C } from '../../../../../../components/dist/styles/esm/styles-entry.mjs';
6
- import { createTopLayerController, parseAndGetAriaAttributes, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
6
+ import { createTopLayerController, parseAndGetAriaAttributes, onCancelDialog, onClickDialog, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
7
7
  import { DialogBase } from './dialog-base.mjs';
8
8
 
9
9
  /**
@@ -52,6 +52,9 @@ class DSRModal extends Component {
52
52
  ...parseAndGetAriaAttributes(this.props.aria),
53
53
  }), children: jsx("slot", {}) })] }), this.props.children] }));
54
54
  }
55
+ onDialogCancel = (e) => onCancelDialog(e, () => this.props.dismissDialog('escape'), !this.props.dismissButton);
56
+ onDialogBackdropClick = (e) => onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
57
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
55
58
  }
56
59
 
57
60
  export { DSRModal };
@@ -3,7 +3,7 @@ import { splitChildren } from '../../splitChildren.mjs';
3
3
  import { Component } from 'react';
4
4
  import { minifyCss } from '../../minifyCss.mjs';
5
5
  import { getSheetCss as getComponentCss$n } from '../../../../../../components/dist/styles/esm/styles-entry.mjs';
6
- import { createTopLayerController, parseAndGetAriaAttributes, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
6
+ import { createTopLayerController, parseAndGetAriaAttributes, onCancelDialog, onClickDialog, showDialog } from '../../../../../../components/dist/utils/esm/utils-entry.mjs';
7
7
  import { DialogBase } from './dialog-base.mjs';
8
8
 
9
9
  /**
@@ -49,6 +49,9 @@ class DSRSheet extends Component {
49
49
  ...parseAndGetAriaAttributes(this.props.aria),
50
50
  }), children: jsx("slot", {}) })] }), this.props.children] }));
51
51
  }
52
+ onDialogCancel = (e) => onCancelDialog(e, () => this.props.dismissDialog('escape'), !this.props.dismissButton);
53
+ onDialogBackdropClick = (e) => onClickDialog(e, () => this.props.dismissDialog('backdrop'), this.props.disableBackdropClick, this.props.isPointerDownInside);
54
+ onDismissButtonClick = () => this.props.dismissDialog('dismiss-button');
52
55
  }
53
56
 
54
57
  export { DSRSheet };
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, DrilldownAriaAttribute, DrilldownUpdateEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, DrilldownAriaAttribute, DrilldownDismissEventDetail, DrilldownUpdateEventDetail } from '../types';
3
3
  export type PDrilldownProps = BaseProps & {
4
4
  /**
5
5
  * Sets which `p-drilldown-item` (by `identifier`) is currently expanded to show its sub-navigation level.
@@ -10,9 +10,9 @@ export type PDrilldownProps = BaseProps & {
10
10
  */
11
11
  aria?: SelectedAriaAttributes<DrilldownAriaAttribute>;
12
12
  /**
13
- * Emitted when the user closes the drilldown via the close button or Escape key.
13
+ * Emitted when the user closes the drilldown via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
14
14
  */
15
- onDismiss?: (event: CustomEvent<void>) => void;
15
+ onDismiss?: (event: CustomEvent<DrilldownDismissEventDetail>) => void;
16
16
  /**
17
17
  * Emitted when the active navigation level changes, with the new `activeIdentifier` in the event detail.
18
18
  */
@@ -33,9 +33,9 @@ export declare const PDrilldown: import("react").ForwardRefExoticComponent<Omit<
33
33
  */
34
34
  aria?: SelectedAriaAttributes<DrilldownAriaAttribute>;
35
35
  /**
36
- * Emitted when the user closes the drilldown via the close button or Escape key.
36
+ * Emitted when the user closes the drilldown via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
37
37
  */
38
- onDismiss?: (event: CustomEvent<void>) => void;
38
+ onDismiss?: (event: CustomEvent<DrilldownDismissEventDetail>) => void;
39
39
  /**
40
40
  * Emitted when the active navigation level changes, with the new `activeIdentifier` in the event detail.
41
41
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, FlyoutAriaAttribute, FlyoutBackdrop, FlyoutBackground, FlyoutFooterBehavior, BreakpointCustomizable, FlyoutMotionHiddenEndEventDetail, FlyoutMotionVisibleEndEventDetail, FlyoutPosition } from '../types';
2
+ import type { SelectedAriaAttributes, FlyoutAriaAttribute, FlyoutBackdrop, FlyoutBackground, FlyoutFooterBehavior, BreakpointCustomizable, FlyoutDismissEventDetail, FlyoutMotionHiddenEndEventDetail, FlyoutMotionVisibleEndEventDetail, FlyoutPosition } from '../types';
3
3
  export type PFlyoutProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the flyout dialog element for improved screen reader accessibility.
@@ -31,9 +31,9 @@ export type PFlyoutProps = BaseProps & {
31
31
  */
32
32
  fullscreen?: BreakpointCustomizable<boolean>;
33
33
  /**
34
- * Emitted when the user closes the flyout via the close button, backdrop click, or Escape key.
34
+ * Emitted when the user closes the flyout via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
35
35
  */
36
- onDismiss?: (event: CustomEvent<void>) => void;
36
+ onDismiss?: (event: CustomEvent<FlyoutDismissEventDetail>) => void;
37
37
  /**
38
38
  * Emitted after the flyout's close transition completes and the panel is fully hidden.
39
39
  */
@@ -84,9 +84,9 @@ export declare const PFlyout: import("react").ForwardRefExoticComponent<Omit<imp
84
84
  */
85
85
  fullscreen?: BreakpointCustomizable<boolean>;
86
86
  /**
87
- * Emitted when the user closes the flyout via the close button, backdrop click, or Escape key.
87
+ * Emitted when the user closes the flyout via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
88
88
  */
89
- onDismiss?: (event: CustomEvent<void>) => void;
89
+ onDismiss?: (event: CustomEvent<FlyoutDismissEventDetail>) => void;
90
90
  /**
91
91
  * Emitted after the flyout's close transition completes and the panel is fully hidden.
92
92
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, ModalAriaAttribute, ModalBackdrop, ModalBackground, BreakpointCustomizable, ModalMotionHiddenEndEventDetail, ModalMotionVisibleEndEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, ModalAriaAttribute, ModalBackdrop, ModalBackground, BreakpointCustomizable, ModalDismissEventDetail, ModalMotionHiddenEndEventDetail, ModalMotionVisibleEndEventDetail } from '../types';
3
3
  export type PModalProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the dialog element for improved accessibility when no visible heading is present.
@@ -31,9 +31,9 @@ export type PModalProps = BaseProps & {
31
31
  */
32
32
  fullscreen?: BreakpointCustomizable<boolean>;
33
33
  /**
34
- * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key.
34
+ * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
35
35
  */
36
- onDismiss?: (event: CustomEvent<void>) => void;
36
+ onDismiss?: (event: CustomEvent<ModalDismissEventDetail>) => void;
37
37
  /**
38
38
  * Emitted after the modal's close transition completes and the dialog is fully hidden.
39
39
  */
@@ -79,9 +79,9 @@ export declare const PModal: import("react").ForwardRefExoticComponent<Omit<impo
79
79
  */
80
80
  fullscreen?: BreakpointCustomizable<boolean>;
81
81
  /**
82
- * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key.
82
+ * Emitted when the user closes the modal via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
83
83
  */
84
- onDismiss?: (event: CustomEvent<void>) => void;
84
+ onDismiss?: (event: CustomEvent<ModalDismissEventDetail>) => void;
85
85
  /**
86
86
  * Emitted after the modal's close transition completes and the dialog is fully hidden.
87
87
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, PopoverAriaAttribute, PopoverDirection } from '../types';
2
+ import type { SelectedAriaAttributes, PopoverAriaAttribute, PopoverDirection, PopoverDismissEventDetail } from '../types';
3
3
  export type PPopoverProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the popover panel to improve accessibility for screen readers.
@@ -19,9 +19,9 @@ export type PPopoverProps = BaseProps & {
19
19
  */
20
20
  direction?: PopoverDirection;
21
21
  /**
22
- * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab).
22
+ * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). The event detail identifies which of the three was used.
23
23
  */
24
- onDismiss?: (event: CustomEvent<void>) => void;
24
+ onDismiss?: (event: CustomEvent<PopoverDismissEventDetail>) => void;
25
25
  /**
26
26
  * Controls whether the popover is visible. When set (controlled mode), visibility follows this prop and the consumer owns the open state via a slotted `button`. When omitted (uncontrolled mode), the component manages visibility itself.
27
27
  */
@@ -46,9 +46,9 @@ export declare const PPopover: import("react").ForwardRefExoticComponent<Omit<im
46
46
  */
47
47
  direction?: PopoverDirection;
48
48
  /**
49
- * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab).
49
+ * Emitted in controlled mode when the user requests to close the popover via the Escape key, an outside click, or when keyboard focus leaves the popover (Tab / Shift+Tab). The event detail identifies which of the three was used.
50
50
  */
51
- onDismiss?: (event: CustomEvent<void>) => void;
51
+ onDismiss?: (event: CustomEvent<PopoverDismissEventDetail>) => void;
52
52
  /**
53
53
  * Controls whether the popover is visible. When set (controlled mode), visibility follows this prop and the consumer owns the open state via a slotted `button`. When omitted (uncontrolled mode), the component manages visibility itself.
54
54
  */
@@ -1,5 +1,5 @@
1
1
  import type { BaseProps } from '../../BaseProps';
2
- import type { SelectedAriaAttributes, SheetAriaAttribute, SheetBackground, SheetMotionHiddenEndEventDetail, SheetMotionVisibleEndEventDetail } from '../types';
2
+ import type { SelectedAriaAttributes, SheetAriaAttribute, SheetBackground, SheetDismissEventDetail, SheetMotionHiddenEndEventDetail, SheetMotionVisibleEndEventDetail } from '../types';
3
3
  export type PSheetProps = BaseProps & {
4
4
  /**
5
5
  * Sets ARIA attributes on the sheet dialog element for improved accessibility when the default `aria-label` is insufficient.
@@ -21,9 +21,9 @@ export type PSheetProps = BaseProps & {
21
21
  */
22
22
  dismissButton?: boolean;
23
23
  /**
24
- * Emitted when the user dismisses the sheet via the close button, backdrop click, or Escape key.
24
+ * Emitted when the user closes the sheet via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
25
25
  */
26
- onDismiss?: (event: CustomEvent<void>) => void;
26
+ onDismiss?: (event: CustomEvent<SheetDismissEventDetail>) => void;
27
27
  /**
28
28
  * Emitted after the sheet's close transition has fully completed and the panel is hidden.
29
29
  */
@@ -59,9 +59,9 @@ export declare const PSheet: import("react").ForwardRefExoticComponent<Omit<impo
59
59
  */
60
60
  dismissButton?: boolean;
61
61
  /**
62
- * Emitted when the user dismisses the sheet via the close button, backdrop click, or Escape key.
62
+ * Emitted when the user closes the sheet via the dismiss button, backdrop click, or Escape key. The event detail identifies which of the three was used.
63
63
  */
64
- onDismiss?: (event: CustomEvent<void>) => void;
64
+ onDismiss?: (event: CustomEvent<SheetDismissEventDetail>) => void;
65
65
  /**
66
66
  * Emitted after the sheet's close transition has fully completed and the panel is hidden.
67
67
  */
@@ -19,4 +19,5 @@ export declare class DSRDrilldown extends Component<any> {
19
19
  private isPointerDownInside;
20
20
  componentWillLoad(): Promise<void>;
21
21
  render(): JSX.Element;
22
+ private onDismissButtonClick;
22
23
  }
@@ -20,4 +20,7 @@ export declare class DSRFlyout extends Component<any> {
20
20
  private isPointerDownInside;
21
21
  private topLayer;
22
22
  render(): JSX.Element;
23
+ private onDialogCancel;
24
+ private onDialogBackdropClick;
25
+ private onDismissButtonClick;
23
26
  }
@@ -17,4 +17,7 @@ export declare class DSRModal extends Component<any> {
17
17
  private isPointerDownInside;
18
18
  private topLayer;
19
19
  render(): JSX.Element;
20
+ private onDialogCancel;
21
+ private onDialogBackdropClick;
22
+ private onDismissButtonClick;
20
23
  }
@@ -14,4 +14,7 @@ export declare class DSRSheet extends Component<any> {
14
14
  private isPointerDownInside;
15
15
  private topLayer;
16
16
  render(): JSX.Element;
17
+ private onDialogCancel;
18
+ private onDialogBackdropClick;
19
+ private onDismissButtonClick;
17
20
  }
@@ -697,6 +697,10 @@ export type BreakpointValues<T> = {
697
697
  base: T;
698
698
  };
699
699
  export type BreakpointCustomizable<T> = T | BreakpointValues<T>;
700
+ export type DialogDismissReason = "dismiss-button" | "backdrop" | "escape";
701
+ export type DialogDismissEventDetail = {
702
+ reason: DialogDismissReason;
703
+ };
700
704
  declare const LINK_TARGETS: readonly [
701
705
  "_self",
702
706
  "_blank",
@@ -1129,6 +1133,7 @@ export type DrilldownAriaAttribute = (typeof DRILLDOWN_ARIA_ATTRIBUTES)[number];
1129
1133
  export type DrilldownUpdateEventDetail = {
1130
1134
  activeIdentifier: string | undefined;
1131
1135
  };
1136
+ export type DrilldownDismissEventDetail = DialogDismissEventDetail;
1132
1137
  export type DrilldownLinkTarget = LinkTarget;
1133
1138
  export type DrilldownLinkAriaAttribute = LinkAriaAttribute;
1134
1139
  declare const FIELDSET_LABEL_SIZES: readonly [
@@ -1188,6 +1193,7 @@ declare const FLYOUT_ARIA_ATTRIBUTES: readonly [
1188
1193
  export type FlyoutAriaAttribute = (typeof FLYOUT_ARIA_ATTRIBUTES)[number];
1189
1194
  export type FlyoutMotionVisibleEndEventDetail = TransitionEvent;
1190
1195
  export type FlyoutMotionHiddenEndEventDetail = TransitionEvent;
1196
+ export type FlyoutDismissEventDetail = DialogDismissEventDetail;
1191
1197
  export type FlyoutBackdrop = Backdrop;
1192
1198
  declare const HEADING_TAGS: readonly [
1193
1199
  "h1",
@@ -1417,6 +1423,7 @@ export type ModalBackground = (typeof MODAL_BACKGROUNDS)[number];
1417
1423
  export type ModalBackdrop = Backdrop;
1418
1424
  export type ModalMotionVisibleEndEventDetail = TransitionEvent;
1419
1425
  export type ModalMotionHiddenEndEventDetail = TransitionEvent;
1426
+ export type ModalDismissEventDetail = DialogDismissEventDetail;
1420
1427
  declare const MODEL_SIGNATURES_MANIFEST: {
1421
1428
  "718": {
1422
1429
  src: string;
@@ -1539,6 +1546,9 @@ declare const POPOVER_ARIA_ATTRIBUTES: readonly [
1539
1546
  "aria-label"
1540
1547
  ];
1541
1548
  export type PopoverAriaAttribute = (typeof POPOVER_ARIA_ATTRIBUTES)[number];
1549
+ export type PopoverDismissEventDetail = {
1550
+ reason: "outside-click" | "focus-out" | "escape";
1551
+ };
1542
1552
  declare const GROUP_DIRECTIONS: readonly [
1543
1553
  "row",
1544
1554
  "column"
@@ -1587,6 +1597,7 @@ declare const SHEET_BACKGROUNDS: readonly [
1587
1597
  export type SheetBackground = (typeof SHEET_BACKGROUNDS)[number];
1588
1598
  export type SheetMotionVisibleEndEventDetail = TransitionEvent;
1589
1599
  export type SheetMotionHiddenEndEventDetail = TransitionEvent;
1600
+ export type SheetDismissEventDetail = DialogDismissEventDetail;
1590
1601
  declare const SPINNER_COLORS: readonly [
1591
1602
  "primary",
1592
1603
  "inherit"