@praxisui/dialog 9.0.0-beta.71 → 9.0.0-beta.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/ai/component-registry.json +141 -28
- package/fesm2022/praxisui-dialog.mjs +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -124,6 +124,12 @@ Preset merge order is `type -> variant -> local config`. Use presets for UX poli
|
|
|
124
124
|
|
|
125
125
|
Main exports: `PraxisDialog`, `PraxisDialogComponent`, template directives, `PraxisDialogRef`, dialog config types, dialog tokens, `providePraxisDialogGlobalActions`, `provideDialogGlobalPresetsFromGlobalConfig`, `PRAXIS_DIALOG_METADATA`, and `PRAXIS_DIALOG_AUTHORING_MANIFEST`.
|
|
126
126
|
|
|
127
|
+
## Host theming
|
|
128
|
+
|
|
129
|
+
Theme dialogs through the semantic `--praxis-theme-*` roles exported by `@praxisui/core`, not by targeting Angular Material or MDC internals. The dialog resolves `surface`, `surface-raised`, `surface-overlay`, `on-surface`, `on-surface-muted`, `outline`, `outline-strong`, `focus-outline`, and `elevation` before its Material fallback. This keeps overlays, keyboard focus, and contrast coherent when a host supplies its own light or dark theme.
|
|
130
|
+
|
|
131
|
+
Component-specific dialog variables remain available for deliberate local customization; define either layer in a global theme scope because dialogs are rendered in the CDK overlay container.
|
|
132
|
+
|
|
127
133
|
## Accessibility
|
|
128
134
|
|
|
129
135
|
`PraxisDialog` configures dialog roles, backdrop behavior, Escape handling, focus restoration and `aria-*` fields. Use `ariaRole: 'alertdialog'` for destructive or blocking confirmations, and always provide a visible title or accessible label.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-12T00:55:35.176Z",
|
|
4
4
|
"packageName": "@praxisui/dialog",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.72",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -14,124 +14,168 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "title",
|
|
16
16
|
"type": "string",
|
|
17
|
-
"required": false
|
|
17
|
+
"required": false,
|
|
18
|
+
"description": "Dialog title text.",
|
|
19
|
+
"label": "Title"
|
|
18
20
|
},
|
|
19
21
|
{
|
|
20
22
|
"name": "actions",
|
|
21
23
|
"type": "DialogAction[]",
|
|
22
|
-
"required": false
|
|
24
|
+
"required": false,
|
|
25
|
+
"description": "Dialog footer actions and payloads.",
|
|
26
|
+
"label": "Actions"
|
|
23
27
|
},
|
|
24
28
|
{
|
|
25
29
|
"name": "actionsLayout",
|
|
26
30
|
"type": "ActionsLayout",
|
|
27
|
-
"required": false
|
|
31
|
+
"required": false,
|
|
32
|
+
"description": "Footer action alignment.",
|
|
33
|
+
"label": "Actions layout"
|
|
28
34
|
},
|
|
29
35
|
{
|
|
30
36
|
"name": "width",
|
|
31
37
|
"type": "string | number",
|
|
32
|
-
"required": false
|
|
38
|
+
"required": false,
|
|
39
|
+
"description": "Dialog width.",
|
|
40
|
+
"label": "Width"
|
|
33
41
|
},
|
|
34
42
|
{
|
|
35
43
|
"name": "height",
|
|
36
44
|
"type": "string | number",
|
|
37
|
-
"required": false
|
|
45
|
+
"required": false,
|
|
46
|
+
"description": "Dialog height.",
|
|
47
|
+
"label": "Height"
|
|
38
48
|
},
|
|
39
49
|
{
|
|
40
50
|
"name": "minWidth",
|
|
41
51
|
"type": "string | number",
|
|
42
|
-
"required": false
|
|
52
|
+
"required": false,
|
|
53
|
+
"description": "Minimum dialog width.",
|
|
54
|
+
"label": "Minimum width"
|
|
43
55
|
},
|
|
44
56
|
{
|
|
45
57
|
"name": "maxWidth",
|
|
46
58
|
"type": "string | number",
|
|
47
|
-
"required": false
|
|
59
|
+
"required": false,
|
|
60
|
+
"description": "Maximum dialog width.",
|
|
61
|
+
"label": "Maximum width"
|
|
48
62
|
},
|
|
49
63
|
{
|
|
50
64
|
"name": "minHeight",
|
|
51
65
|
"type": "string | number",
|
|
52
|
-
"required": false
|
|
66
|
+
"required": false,
|
|
67
|
+
"description": "Minimum dialog height.",
|
|
68
|
+
"label": "Minimum height"
|
|
53
69
|
},
|
|
54
70
|
{
|
|
55
71
|
"name": "maxHeight",
|
|
56
72
|
"type": "string | number",
|
|
57
|
-
"required": false
|
|
73
|
+
"required": false,
|
|
74
|
+
"description": "Maximum dialog height.",
|
|
75
|
+
"label": "Maximum height"
|
|
58
76
|
},
|
|
59
77
|
{
|
|
60
78
|
"name": "themeColor",
|
|
61
79
|
"type": "DialogThemeColor",
|
|
62
|
-
"required": false
|
|
80
|
+
"required": false,
|
|
81
|
+
"description": "Dialog visual theme.",
|
|
82
|
+
"label": "Theme color"
|
|
63
83
|
},
|
|
64
84
|
{
|
|
65
85
|
"name": "disableClose",
|
|
66
86
|
"type": "boolean",
|
|
67
|
-
"required": false
|
|
87
|
+
"required": false,
|
|
88
|
+
"description": "Blocks backdrop and Escape close behavior.",
|
|
89
|
+
"label": "Disable close"
|
|
68
90
|
},
|
|
69
91
|
{
|
|
70
92
|
"name": "hasBackdrop",
|
|
71
93
|
"type": "boolean",
|
|
72
|
-
"required": false
|
|
94
|
+
"required": false,
|
|
95
|
+
"description": "Controls whether the dialog renders a backdrop.",
|
|
96
|
+
"label": "Backdrop"
|
|
73
97
|
},
|
|
74
98
|
{
|
|
75
99
|
"name": "closeOnBackdropClick",
|
|
76
100
|
"type": "boolean",
|
|
77
|
-
"required": false
|
|
101
|
+
"required": false,
|
|
102
|
+
"description": "Controls backdrop click close policy.",
|
|
103
|
+
"label": "Close on backdrop click"
|
|
78
104
|
},
|
|
79
105
|
{
|
|
80
106
|
"name": "panelClass",
|
|
81
107
|
"type": "string | string[] | Record<string, boolean>",
|
|
82
|
-
"required": false
|
|
108
|
+
"required": false,
|
|
109
|
+
"description": "Additional CSS class for the dialog panel.",
|
|
110
|
+
"label": "Panel class"
|
|
83
111
|
},
|
|
84
112
|
{
|
|
85
113
|
"name": "backdropClass",
|
|
86
114
|
"type": "string | string[] | Record<string, boolean>",
|
|
87
|
-
"required": false
|
|
115
|
+
"required": false,
|
|
116
|
+
"description": "Additional CSS class for the backdrop.",
|
|
117
|
+
"label": "Backdrop class"
|
|
88
118
|
},
|
|
89
119
|
{
|
|
90
120
|
"name": "position",
|
|
91
121
|
"type": "PraxisDialogPosition",
|
|
92
|
-
"required": false
|
|
122
|
+
"required": false,
|
|
123
|
+
"description": "Dialog position offsets.",
|
|
124
|
+
"label": "Position"
|
|
93
125
|
},
|
|
94
126
|
{
|
|
95
127
|
"name": "ariaRole",
|
|
96
128
|
"type": "'dialog' | 'alertdialog'",
|
|
97
|
-
"required": false
|
|
129
|
+
"required": false,
|
|
130
|
+
"description": "Accessible dialog role.",
|
|
131
|
+
"label": "ARIA role"
|
|
98
132
|
},
|
|
99
133
|
{
|
|
100
134
|
"name": "ariaLabel",
|
|
101
135
|
"type": "string",
|
|
102
|
-
"required": false
|
|
136
|
+
"required": false,
|
|
137
|
+
"description": "Accessible label when no visible title is present.",
|
|
138
|
+
"label": "ARIA label"
|
|
103
139
|
},
|
|
104
140
|
{
|
|
105
141
|
"name": "ariaLabelledBy",
|
|
106
142
|
"type": "string",
|
|
107
|
-
"required": false
|
|
143
|
+
"required": false,
|
|
144
|
+
"description": "External accessible label id.",
|
|
145
|
+
"label": "ARIA labelled by"
|
|
108
146
|
},
|
|
109
147
|
{
|
|
110
148
|
"name": "ariaDescribedBy",
|
|
111
149
|
"type": "string",
|
|
112
|
-
"required": false
|
|
150
|
+
"required": false,
|
|
151
|
+
"description": "External accessible description id.",
|
|
152
|
+
"label": "ARIA described by"
|
|
113
153
|
}
|
|
114
154
|
],
|
|
115
155
|
"outputs": [
|
|
116
156
|
{
|
|
117
157
|
"name": "action",
|
|
118
158
|
"type": "DialogAction",
|
|
119
|
-
"required": false
|
|
159
|
+
"required": false,
|
|
160
|
+
"label": "Action"
|
|
120
161
|
},
|
|
121
162
|
{
|
|
122
163
|
"name": "close",
|
|
123
164
|
"type": "unknown",
|
|
124
|
-
"required": false
|
|
165
|
+
"required": false,
|
|
166
|
+
"label": "Close"
|
|
125
167
|
},
|
|
126
168
|
{
|
|
127
169
|
"name": "opened",
|
|
128
170
|
"type": "void",
|
|
129
|
-
"required": false
|
|
171
|
+
"required": false,
|
|
172
|
+
"label": "Opened"
|
|
130
173
|
},
|
|
131
174
|
{
|
|
132
175
|
"name": "afterClosed",
|
|
133
176
|
"type": "void",
|
|
134
|
-
"required": false
|
|
177
|
+
"required": false,
|
|
178
|
+
"label": "After closed"
|
|
135
179
|
}
|
|
136
180
|
],
|
|
137
181
|
"configSchemaId": null,
|
|
@@ -145,6 +189,75 @@
|
|
|
145
189
|
"authoring"
|
|
146
190
|
],
|
|
147
191
|
"lib": "@praxisui/dialog",
|
|
192
|
+
"actions": [
|
|
193
|
+
{
|
|
194
|
+
"id": "dialog-open",
|
|
195
|
+
"label": "Open dialog",
|
|
196
|
+
"icon": "open_in_new",
|
|
197
|
+
"description": "Opens a dialog shell with governed config.",
|
|
198
|
+
"scope": "any"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "dialog-close",
|
|
202
|
+
"label": "Close dialog",
|
|
203
|
+
"icon": "close",
|
|
204
|
+
"description": "Closes the dialog with an optional payload.",
|
|
205
|
+
"emit": "close",
|
|
206
|
+
"scope": "any"
|
|
207
|
+
}
|
|
208
|
+
],
|
|
209
|
+
"ports": [
|
|
210
|
+
{
|
|
211
|
+
"id": "config",
|
|
212
|
+
"label": "Dialog config",
|
|
213
|
+
"direction": "input",
|
|
214
|
+
"semanticKind": "config-fragment",
|
|
215
|
+
"schema": {
|
|
216
|
+
"id": "PraxisDialogConfig",
|
|
217
|
+
"kind": "ts-type",
|
|
218
|
+
"ref": "PraxisDialogConfig"
|
|
219
|
+
},
|
|
220
|
+
"description": "Dialog shell configuration for title, actions, dimensions, backdrop, close policy and accessibility.",
|
|
221
|
+
"exposure": {
|
|
222
|
+
"public": true,
|
|
223
|
+
"group": "config"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "close",
|
|
228
|
+
"label": "Close",
|
|
229
|
+
"direction": "output",
|
|
230
|
+
"semanticKind": "event",
|
|
231
|
+
"schema": {
|
|
232
|
+
"id": "unknown",
|
|
233
|
+
"kind": "ts-type",
|
|
234
|
+
"ref": "unknown"
|
|
235
|
+
},
|
|
236
|
+
"cardinality": "stream",
|
|
237
|
+
"description": "Emitted when the dialog shell requests close with an optional result payload.",
|
|
238
|
+
"exposure": {
|
|
239
|
+
"public": true,
|
|
240
|
+
"group": "events"
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"id": "action",
|
|
245
|
+
"label": "Action",
|
|
246
|
+
"direction": "output",
|
|
247
|
+
"semanticKind": "event",
|
|
248
|
+
"schema": {
|
|
249
|
+
"id": "DialogAction",
|
|
250
|
+
"kind": "ts-type",
|
|
251
|
+
"ref": "DialogAction"
|
|
252
|
+
},
|
|
253
|
+
"cardinality": "stream",
|
|
254
|
+
"description": "Emitted when a configured dialog action is triggered.",
|
|
255
|
+
"exposure": {
|
|
256
|
+
"public": true,
|
|
257
|
+
"group": "events"
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
],
|
|
148
261
|
"source": "projects/praxis-dialog/src/lib/praxis-dialog.metadata.ts",
|
|
149
262
|
"exportName": "PRAXIS_DIALOG_COMPONENT_METADATA",
|
|
150
263
|
"authoringManifest": {
|
|
@@ -1134,7 +1247,7 @@
|
|
|
1134
1247
|
"chunkIndex": 0,
|
|
1135
1248
|
"chunkKind": "summary",
|
|
1136
1249
|
"content": "Component ID: praxis-dialog\nSelector: praxis-dialog\nFriendly Name: Praxis Dialog\nDescription: Dialog shell for overlay and embedded authoring, with governed size, position, backdrop, close policy, presets and child host delegation.\nLib/Package: @praxisui/dialog\nTags: dialog, overlay, shell, authoring\nInputs:\n - title (string)\n - actions (DialogAction[])\n - actionsLayout (ActionsLayout)\n - width (string | number)\n - height (string | number)\n - minWidth (string | number)\n - maxWidth (string | number)\n - minHeight (string | number)\n - maxHeight (string | number)\n - themeColor (DialogThemeColor)\n - disableClose (boolean)\n - hasBackdrop (boolean)\n - closeOnBackdropClick (boolean)\n - panelClass (string | string[] | Record<string, boolean>)\n - backdropClass (string | string[] | Record<string, boolean>)\n - position (PraxisDialogPosition)\n - ariaRole ('dialog' | 'alertdialog')\n - ariaLabel (string)\n - ariaLabelledBy (string)\n - ariaDescribedBy (string)\nOutputs:\n - action (DialogAction)\n - close (unknown)\n - opened (void)\n - afterClosed (void)\n",
|
|
1137
|
-
"sourcePointer": "
|
|
1250
|
+
"sourcePointer": "projects/praxis-dialog/src/lib/praxis-dialog.metadata.ts",
|
|
1138
1251
|
"contentHash": "31805c5f46dec3934066a5cc7fabeaefe3c437478999140b23b94524447df209",
|
|
1139
1252
|
"sourceKind": "component_definition",
|
|
1140
1253
|
"sourceId": "praxis-dialog",
|
|
@@ -1144,7 +1257,7 @@
|
|
|
1144
1257
|
"chunkIndex": 1,
|
|
1145
1258
|
"chunkKind": "authoring_manifest",
|
|
1146
1259
|
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-dialog\",\n \"ownerPackage\": \"@praxisui/dialog\",\n \"configSchemaId\": \"PraxisDialogConfig\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"config\",\n \"type\": \"PraxisDialogConfig\",\n \"description\": \"Canonical shell configuration consumed by PraxisDialog.open and tag mode.\"\n },\n {\n \"name\": \"content\",\n \"type\": \"ComponentType | TemplateRef | DialogContentDescriptor\",\n \"description\": \"Dialog child host content. Child semantics remain owned by the child component manifest.\"\n },\n {\n \"name\": \"variant\",\n \"type\": \"string\",\n \"description\": \"Optional global preset variant merged after dialog type presets and before local config.\"\n },\n {\n \"name\": \"componentId\",\n \"type\": \"string\",\n \"description\": \"Component metadata or dialog registry id used by global dialog open actions.\"\n },\n {\n \"name\": \"inputs\",\n \"type\": \"Record<string, unknown>\",\n \"description\": \"Inputs applied to the child component after opening the dialog.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"dialogShell\",\n \"resolver\": \"praxis-dialog-config-root\",\n \"description\": \"Top-level PraxisDialogConfig shell fields such as title, role, actions and theme.\"\n },\n {\n \"kind\": \"size\",\n \"resolver\": \"praxis-dialog-size-fields\",\n \"description\": \"Width, height, min/max size fields on PraxisDialogConfig.\"\n },\n {\n \"kind\": \"position\",\n \"resolver\": \"praxis-dialog-position-fields\",\n \"description\": \"Overlay position fields top, bottom, left and right.\"\n },\n {\n \"kind\": \"backdrop\",\n \"resolver\": \"praxis-dialog-backdrop-fields\",\n \"description\": \"Backdrop enablement and backdrop class semantics.\"\n },\n {\n \"kind\": \"closePolicy\",\n \"resolver\": \"praxis-dialog-close-policy-fields\",\n \"description\": \"disableClose, closeOnBackdropClick, closeOnNavigation, restoreFocus and autofocus behavior.\"\n },\n {\n \"kind\": \"preset\",\n \"resolver\": \"praxis-dialog-global-preset-by-type-variant\",\n \"description\": \"Type and variant presets merged through PRAXIS_DIALOG_GLOBAL_PRESETS.\"\n },\n {\n \"kind\": \"childHost\",\n \"resolver\": \"praxis-dialog-child-component-or-template-host\",\n \"description\": \"Component/template registry child host and input/data envelope.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"dialog.shell.set\",\n \"title\": \"Set dialog shell fields\",\n \"scope\": \"global\",\n \"targetKind\": \"dialogShell\",\n \"target\": {\n \"kind\": \"dialogShell\",\n \"resolver\": \"praxis-dialog-config-root\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"title\": {\n \"type\": \"string\"\n },\n \"titleIcon\": {\n \"type\": \"string\"\n },\n \"ariaRole\": {\n \"enum\": [\n \"dialog\",\n \"alertdialog\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"ariaLabelledBy\": {\n \"type\": \"string\"\n },\n \"ariaDescribedBy\": {\n \"type\": \"string\"\n },\n \"themeColor\": {\n \"enum\": [\n \"primary\",\n \"light\",\n \"dark\"\n ]\n },\n \"actionsLayout\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"stretched\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"config\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"accessibility-label-preserved\",\n \"aria-role-valid\",\n \"shell-fields-supported\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config.title\",\n \"config.titleIcon\",\n \"config.ariaRole\",\n \"config.ariaLabel\",\n \"config.ariaLabelledBy\",\n \"config.ariaDescribedBy\",\n \"config.themeColor\",\n \"config.actionsLayout\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"dialog.size.set\",\n \"title\": \"Set dialog size\",\n \"scope\": \"layout\",\n \"targetKind\": \"size\",\n \"target\": {\n \"kind\": \"size\",\n \"resolver\": \"praxis-dialog-size-fields\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"width\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"height\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"minWidth\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"maxWidth\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"minHeight\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"maxHeight\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"number\"\n }\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"config\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"size-values-safe\",\n \"size-min-max-consistent\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config.width\",\n \"config.height\",\n \"config.minWidth\",\n \"config.maxWidth\",\n \"config.minHeight\",\n \"config.maxHeight\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"dialog.position.set\",\n \"title\": \"Set dialog position\",\n \"scope\": \"layout\",\n \"targetKind\": \"position\",\n \"target\": {\n \"kind\": \"position\",\n \"resolver\": \"praxis-dialog-position-fields\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"top\": {\n \"type\": \"string\"\n },\n \"bottom\": {\n \"type\": \"string\"\n },\n \"left\": {\n \"type\": \"string\"\n },\n \"right\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"config.position\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"position-values-safe\",\n \"position-not-conflicting\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config.position\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"dialog.backdrop.set\",\n \"title\": \"Set dialog backdrop\",\n \"scope\": \"skin\",\n \"targetKind\": \"backdrop\",\n \"target\": {\n \"kind\": \"backdrop\",\n \"resolver\": \"praxis-dialog-backdrop-fields\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"hasBackdrop\": {\n \"type\": \"boolean\"\n },\n \"backdropClass\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\"\n },\n {\n \"type\": \"object\"\n }\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"config\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"backdrop-policy-explicit\",\n \"backdrop-class-safe\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config.hasBackdrop\",\n \"config.backdropClass\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"dialog.closePolicy.set\",\n \"title\": \"Set dialog close policy\",\n \"scope\": \"accessibility\",\n \"targetKind\": \"closePolicy\",\n \"target\": {\n \"kind\": \"closePolicy\",\n \"resolver\": \"praxis-dialog-close-policy-fields\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"disableClose\": {\n \"type\": \"boolean\"\n },\n \"closeOnBackdropClick\": {\n \"type\": \"boolean\"\n },\n \"closeOnNavigation\": {\n \"type\": \"boolean\"\n },\n \"restoreFocus\": {\n \"type\": \"boolean\"\n },\n \"autoFocus\": {\n \"type\": \"boolean\"\n },\n \"autoFocusedElement\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"config\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"close-policy-explicit\",\n \"unsafe-close-confirmed-when-needed\",\n \"restore-focus-preserved\",\n \"alertdialog-focus-preserved\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config.disableClose\",\n \"config.closeOnBackdropClick\",\n \"config.closeOnNavigation\",\n \"config.restoreFocus\",\n \"config.autoFocus\",\n \"config.autoFocusedElement\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"dialog.preset.apply\",\n \"title\": \"Apply dialog preset\",\n \"scope\": \"global\",\n \"targetKind\": \"preset\",\n \"target\": {\n \"kind\": \"preset\",\n \"resolver\": \"praxis-dialog-global-preset-by-type-variant\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"dialogType\"\n ],\n \"properties\": {\n \"dialogType\": {\n \"enum\": [\n \"confirm\",\n \"alert\",\n \"prompt\",\n \"custom\"\n ]\n },\n \"variant\": {\n \"type\": \"string\"\n },\n \"localConfig\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"dialog-preset-apply\",\n \"handlerContract\": {\n \"reads\": [\n \"PRAXIS_DIALOG_GLOBAL_PRESETS\",\n \"config\",\n \"variant\"\n ],\n \"writes\": [\n \"config\",\n \"variant\"\n ],\n \"identityKeys\": [\n \"dialogType\",\n \"variant\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"dialogType\"\n ],\n \"properties\": {\n \"dialogType\": {\n \"enum\": [\n \"confirm\",\n \"alert\",\n \"prompt\",\n \"custom\"\n ]\n },\n \"variant\": {\n \"type\": \"string\"\n },\n \"localConfig\": {\n \"type\": \"object\"\n }\n }\n },\n \"failureModes\": [\n \"preset-not-found\",\n \"variant-not-found\",\n \"preset-merge-order-invalid\",\n \"accessibility-regression\"\n ],\n \"description\": \"Applies the canonical merge order type preset -> variant -> local config without mutating child component semantics.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"preset-exists\",\n \"preset-merge-order-preserved\",\n \"accessibility-label-preserved\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"config\",\n \"variant\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"childHost.configure\",\n \"title\": \"Configure dialog child host\",\n \"scope\": \"templating\",\n \"targetKind\": \"childHost\",\n \"target\": {\n \"kind\": \"childHost\",\n \"resolver\": \"praxis-dialog-child-component-or-template-host\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"contentType\"\n ],\n \"properties\": {\n \"contentType\": {\n \"enum\": [\n \"component\",\n \"template\"\n ]\n },\n \"componentId\": {\n \"type\": \"string\"\n },\n \"templateId\": {\n \"type\": \"string\"\n },\n \"inputs\": {\n \"type\": \"object\"\n },\n \"data\": {},\n \"childManifestComponentId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"dialog-child-host-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"ComponentMetadataRegistry\",\n \"PRAXIS_DIALOG_CONTENT_REGISTRY\",\n \"PRAXIS_DIALOG_TEMPLATE_REGISTRY\",\n \"content\",\n \"componentId\",\n \"inputs\",\n \"data\"\n ],\n \"writes\": [\n \"content\",\n \"componentId\",\n \"inputs\",\n \"data\"\n ],\n \"identityKeys\": [\n \"componentId\",\n \"templateId\"\n ],\n \"failureModes\": [\n \"component-not-registered\",\n \"template-not-registered\",\n \"child-inputs-not-serializable\",\n \"child-manifest-required\"\n ],\n \"description\": \"Configures which component/template is hosted in the dialog and serializable host inputs; child config fields remain delegated to the child manifest.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"child-host-registered\",\n \"child-config-delegates-to-child-manifest\",\n \"child-inputs-serializable\",\n \"dialog-round-trip\"\n ],\n \"affectedPaths\": [\n \"content\",\n \"componentId\",\n \"inputs\",\n \"data\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"childOperation.delegate\",\n \"title\": \"Delegate operation to child manifest\",\n \"scope\": \"templating\",\n \"targetKind\": \"childHost\",\n \"target\": {\n \"kind\": \"childHost\",\n \"resolver\": \"praxis-dialog-child-component-or-template-host\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"childManifestComponentId\",\n \"operationId\",\n \"params\"\n ],\n \"properties\": {\n \"childManifestComponentId\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"params\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"dialog-child-operation-delegate\",\n \"handlerContract\": {\n \"reads\": [\n \"childManifestComponentId\",\n \"operationId\",\n \"params\",\n \"componentRegistry.authoringManifest\"\n ],\n \"writes\": [\n \"inputs\",\n \"data\"\n ],\n \"identityKeys\": [\n \"childManifestComponentId\",\n \"operationId\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"childManifestComponentId\",\n \"operationId\",\n \"params\"\n ],\n \"properties\": {\n \"childManifestComponentId\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"params\": {\n \"type\": \"object\"\n }\n }\n },\n \"failureModes\": [\n \"child-manifest-not-found\",\n \"child-operation-not-authorized\",\n \"child-operation-validation-failed\",\n \"dialog-shell-child-boundary-violation\"\n ],\n \"description\": \"Delegates child component configuration edits to the child authoring manifest before projecting the validated patch into the dialog child host inputs/data envelope.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"child-manifest-resolvable\",\n \"child-operation-authorized\",\n \"child-config-delegates-to-child-manifest\",\n \"dialog-shell-boundary-preserved\"\n ],\n \"affectedPaths\": [\n \"inputs\",\n \"data\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"child-host-configured\",\n \"child-manifest-resolved\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"accessibility-label-preserved\",\n \"level\": \"error\",\n \"code\": \"DIALOG_ACCESSIBILITY_LABEL_PRESERVED\",\n \"description\": \"Dialog or alertdialog must keep an accessible title or aria label.\"\n },\n {\n \"validatorId\": \"aria-role-valid\",\n \"level\": \"error\",\n \"code\": \"DIALOG_ARIA_ROLE_VALID\",\n \"description\": \"ariaRole must be dialog or alertdialog.\"\n },\n {\n \"validatorId\": \"shell-fields-supported\",\n \"level\": \"error\",\n \"code\": \"DIALOG_SHELL_FIELDS_SUPPORTED\",\n \"description\": \"Shell edits must target supported PraxisDialogConfig fields.\"\n },\n {\n \"validatorId\": \"size-values-safe\",\n \"level\": \"error\",\n \"code\": \"DIALOG_SIZE_VALUES_SAFE\",\n \"description\": \"Size values must be finite numbers or safe CSS size strings.\"\n },\n {\n \"validatorId\": \"size-min-max-consistent\",\n \"level\": \"error\",\n \"code\": \"DIALOG_SIZE_MIN_MAX_CONSISTENT\",\n \"description\": \"Minimum sizes must not exceed maximum sizes.\"\n },\n {\n \"validatorId\": \"position-values-safe\",\n \"level\": \"error\",\n \"code\": \"DIALOG_POSITION_VALUES_SAFE\",\n \"description\": \"Position values must be safe CSS size strings.\"\n },\n {\n \"validatorId\": \"position-not-conflicting\",\n \"level\": \"warning\",\n \"code\": \"DIALOG_POSITION_NOT_CONFLICTING\",\n \"description\": \"Conflicting position pairs should be explicit and intentional.\"\n },\n {\n \"validatorId\": \"backdrop-policy-explicit\",\n \"level\": \"error\",\n \"code\": \"DIALOG_BACKDROP_POLICY_EXPLICIT\",\n \"description\": \"Backdrop and backdrop-click behavior must be explicit when edited.\"\n },\n {\n \"validatorId\": \"backdrop-class-safe\",\n \"level\": \"error\",\n \"code\": \"DIALOG_BACKDROP_CLASS_SAFE\",\n \"description\": \"Backdrop classes must be serializable safe class values.\"\n },\n {\n \"validatorId\": \"close-policy-explicit\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CLOSE_POLICY_EXPLICIT\",\n \"description\": \"Close behavior must explicitly describe ESC, backdrop and navigation semantics.\"\n },\n {\n \"validatorId\": \"unsafe-close-confirmed-when-needed\",\n \"level\": \"error\",\n \"code\": \"DIALOG_UNSAFE_CLOSE_CONFIRMED\",\n \"description\": \"Disabling safe close affordances or enabling unsafe dismissal requires confirmation.\"\n },\n {\n \"validatorId\": \"restore-focus-preserved\",\n \"level\": \"error\",\n \"code\": \"DIALOG_RESTORE_FOCUS_PRESERVED\",\n \"description\": \"restoreFocus must stay enabled unless intentionally changed with confirmation.\"\n },\n {\n \"validatorId\": \"alertdialog-focus-preserved\",\n \"level\": \"error\",\n \"code\": \"DIALOG_ALERTDIALOG_FOCUS_PRESERVED\",\n \"description\": \"alertdialog focus behavior must keep primary action or configured focus target reachable.\"\n },\n {\n \"validatorId\": \"preset-exists\",\n \"level\": \"error\",\n \"code\": \"DIALOG_PRESET_EXISTS\",\n \"description\": \"Preset type and variant must exist in PRAXIS_DIALOG_GLOBAL_PRESETS or be host-provided.\"\n },\n {\n \"validatorId\": \"preset-merge-order-preserved\",\n \"level\": \"error\",\n \"code\": \"DIALOG_PRESET_MERGE_ORDER_PRESERVED\",\n \"description\": \"Preset merge order must remain type -> variant -> local config.\"\n },\n {\n \"validatorId\": \"child-host-registered\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CHILD_HOST_REGISTERED\",\n \"description\": \"Child component/template must resolve through ComponentMetadataRegistry or dialog registries.\"\n },\n {\n \"validatorId\": \"child-config-delegates-to-child-manifest\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CHILD_CONFIG_DELEGATES\",\n \"description\": \"Child component config edits must be delegated to the child authoring manifest.\"\n },\n {\n \"validatorId\": \"child-inputs-serializable\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CHILD_INPUTS_SERIALIZABLE\",\n \"description\": \"Child inputs/data persisted by authoring must be serializable safe values.\"\n },\n {\n \"validatorId\": \"child-manifest-resolvable\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CHILD_MANIFEST_RESOLVABLE\",\n \"description\": \"Delegated child operation must resolve a child component authoring manifest.\"\n },\n {\n \"validatorId\": \"child-operation-authorized\",\n \"level\": \"error\",\n \"code\": \"DIALOG_CHILD_OPERATION_AUTHORIZED\",\n \"description\": \"Delegated child operation must be declared by the child manifest.\"\n },\n {\n \"validatorId\": \"dialog-shell-boundary-preserved\",\n \"level\": \"error\",\n \"code\": \"DIALOG_SHELL_BOUNDARY_PRESERVED\",\n \"description\": \"Dialog shell operations must not rewrite child component semantics directly.\"\n },\n {\n \"validatorId\": \"dialog-round-trip\",\n \"level\": \"error\",\n \"code\": \"DIALOG_ROUND_TRIP\",\n \"description\": \"Service/tag mode must preserve shell config through open, close, afterClosed and host persistence.\"\n }\n ],\n \"roundTripRequirements\": [\n \"PraxisDialogConfig is the canonical shell config; child component config remains owned by the child manifest.\",\n \"Preset application must preserve merge order: type preset, then variant, then local config.\",\n \"Close policy edits must keep accessibility, focus trap, ESC/backdrop behavior and restoreFocus explicit.\",\n \"Dialog host operations must resolve component/template ids through governed registries instead of ad hoc overlays.\"\n ],\n \"examples\": [\n {\n \"id\": \"set-size\",\n \"request\": \"Open this dialog at 860 by 640 pixels.\",\n \"operationId\": \"dialog.size.set\",\n \"params\": {\n \"width\": \"860px\",\n \"height\": \"640px\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-position\",\n \"request\": \"Anchor the dialog to the right side.\",\n \"operationId\": \"dialog.position.set\",\n \"params\": {\n \"right\": \"24px\",\n \"top\": \"64px\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-backdrop\",\n \"request\": \"Use a backdrop with the default governed backdrop class.\",\n \"operationId\": \"dialog.backdrop.set\",\n \"params\": {\n \"hasBackdrop\": true,\n \"backdropClass\": \"pdx-dialog-backdrop\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-close-policy\",\n \"request\": \"Make this destructive confirm require explicit button close.\",\n \"operationId\": \"dialog.closePolicy.set\",\n \"params\": {\n \"disableClose\": true,\n \"closeOnBackdropClick\": false,\n \"restoreFocus\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"apply-danger-preset\",\n \"request\": \"Apply the danger confirm preset.\",\n \"operationId\": \"dialog.preset.apply\",\n \"params\": {\n \"dialogType\": \"confirm\",\n \"variant\": \"danger\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-child-host\",\n \"request\": \"Host the dynamic page component with customization enabled.\",\n \"operationId\": \"childHost.configure\",\n \"params\": {\n \"contentType\": \"component\",\n \"componentId\": \"praxis-dynamic-page\",\n \"inputs\": {\n \"enableCustomization\": true\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"delegate-child-config\",\n \"request\": \"Change the table column inside the dialog.\",\n \"operationId\": \"childOperation.delegate\",\n \"params\": {\n \"childManifestComponentId\": \"praxis-table\",\n \"operationId\": \"column.label.set\",\n \"params\": {\n \"field\": \"name\",\n \"label\": \"Name\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-shell-label\",\n \"request\": \"Set the dialog title and alertdialog role.\",\n \"operationId\": \"dialog.shell.set\",\n \"params\": {\n \"title\": \"Delete record\",\n \"ariaRole\": \"alertdialog\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-child-shell-mix\",\n \"request\": \"Directly patch the child table config from the dialog shell manifest.\",\n \"operationId\": \"childOperation.delegate\",\n \"params\": {\n \"childManifestComponentId\": \"\",\n \"operationId\": \"patch-raw-child-config\",\n \"params\": {}\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-inaccessible-alert\",\n \"request\": \"Make an alertdialog with no title or aria label.\",\n \"operationId\": \"dialog.shell.set\",\n \"params\": {\n \"ariaRole\": \"alertdialog\",\n \"title\": \"\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-unsafe-close\",\n \"request\": \"Let a destructive dialog close on accidental backdrop click with no confirmation.\",\n \"operationId\": \"dialog.closePolicy.set\",\n \"params\": {\n \"closeOnBackdropClick\": true,\n \"disableClose\": false,\n \"restoreFocus\": false\n },\n \"isPositive\": false\n }\n ]\n}",
|
|
1147
|
-
"sourcePointer": "
|
|
1260
|
+
"sourcePointer": "projects/praxis-dialog/src/lib/ai/praxis-dialog-authoring-manifest.ts",
|
|
1148
1261
|
"contentHash": "bfc079b8ab2cc757b80f178d0aaeeffd9199e87c8397ce98a987fe3f22f35a8b",
|
|
1149
1262
|
"sourceKind": "component_definition",
|
|
1150
1263
|
"sourceId": "praxis-dialog",
|
|
@@ -491,11 +491,11 @@ class PraxisDialogComponent {
|
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
494
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisDialogComponent, isStandalone: true, selector: "praxis-dialog", inputs: { title: "title", actions: "actions", actionsLayout: "actionsLayout", animation: "animation", open: "open", width: "width", height: "height", minWidth: "minWidth", maxWidth: "maxWidth", minHeight: "minHeight", maxHeight: "maxHeight", themeColor: "themeColor", disableClose: "disableClose", hasBackdrop: "hasBackdrop", closeOnBackdropClick: "closeOnBackdropClick", overlayMode: "overlayMode", zIndex: "zIndex", panelClass: "panelClass", backdropClass: "backdropClass", position: "position", autoFocusedElement: "autoFocusedElement", autoFocus: "autoFocus", restoreFocus: "restoreFocus", id: "id", ariaRole: "ariaRole", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", styles: "styles", titleIcon: "titleIcon" }, outputs: { action: "action", close: "close", opened: "opened", afterClosed: "afterClosed" }, host: { properties: { "class": "this.hostClass", "attr.tabindex": "this.tabindex" } }, queries: [{ propertyName: "titleTpl", first: true, predicate: PraxisDialogTitleDirective, descendants: true, read: PraxisDialogTitleDirective }, { propertyName: "actionsTpl", first: true, predicate: PraxisDialogActionsDirective, descendants: true, read: PraxisDialogActionsDirective }, { propertyName: "contentTpl", first: true, predicate: PraxisDialogContentDirective, descendants: true, read: PraxisDialogContentDirective }], viewQueries: [{ propertyName: "contentHost", first: true, predicate: CdkPortalOutlet, descendants: true }, { propertyName: "panelEl", first: true, predicate: ["panel"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@let _titleId = (id ?? 'praxis-dialog') + '-title';\n\n<ng-template #panelHeader>\n @if (titleTpl?.templateRef || title || titleIcon) {\n <div class=\"pdx-dialog__title\">\n @if (titleTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"titleTpl!.templateRef\"></ng-container>\n } @else {\n <div class=\"pdx-dialog__title-row\">\n @if (titleIcon) {\n <mat-icon class=\"pdx-dialog__title-icon\" [praxisIcon]=\"titleIcon\" aria-hidden=\"true\"></mat-icon>\n }\n <h2 class=\"pdx-dialog__title-text\" [attr.id]=\"_titleId\">{{ title }}</h2>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #panelActions>\n <div class=\"pdx-dialog__actions\" [class.is-stretched]=\"actionsLayout==='stretched'\">\n @if (actionsTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"actionsTpl!.templateRef\"></ng-container>\n } @else {\n @for (a of actions; track a?.id ?? a) {\n <button\n type=\"button\"\n class=\"pdx-dialog__action-btn\"\n [attr.data-testid]=\"a.id || null\"\n [attr.data-role]=\"a.role || null\"\n [attr.data-theme]=\"a.themeColor || null\"\n [attr.data-fill]=\"a.fillMode || null\"\n [ngClass]=\"a.cssClass\"\n (click)=\"onActionClick(a)\"\n [attr.cdkFocusInitial]=\"a.role==='primary' && ariaRole==='alertdialog' ? '' : null\"\n >\n @if (a.icon) {\n <mat-icon [praxisIcon]=\"a.icon\"></mat-icon>\n } @else if (a.svgIcon) {\n <mat-icon [svgIcon]=\"a.svgIcon\"></mat-icon>\n }\n {{ a.text }}\n </button>\n }\n }\n </div>\n</ng-template>\n\n@if (overlayMode) {\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n} @else {\n <div class=\"pdx-dialog-overlay\" [class.has-backdrop]=\"hasBackdrop\" [hidden]=\"!isDisplayed\" (click)=\"onBackdrop($event)\" [ngClass]=\"backdropClass\" [style.z-index]=\"zIndex\">\n <div class=\"pdx-dialog-shell\" (click)=\"$event.stopPropagation()\">\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [style.top]=\"position?.top || null\"\n [style.bottom]=\"position?.bottom || null\"\n [style.left]=\"position?.left || null\"\n [style.right]=\"position?.right || null\"\n [class.pdx-has-position]=\"position\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";.pdx-dialog-host{--pdx-dialog-bg: var(--md-sys-color-surface);--pdx-dialog-surface: var(--md-sys-color-surface-container-high);--pdx-dialog-border: var(--md-sys-color-outline-variant);--pdx-dialog-title-fg: var(--md-sys-color-on-surface);--pdx-dialog-elevation: var(--mat-elevation-level4)}.pdx-dialog-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-dialog, 1300);background:transparent}.pdx-dialog-overlay.has-backdrop{background:var(--pdx-dialog-backdrop, rgba(0, 0, 0, .6))}.pdx-dialog-shell{display:contents}.pdx-dialog.pdx-has-position{position:absolute}.pdx-dialog{background:var(--pdx-dialog-container-color, var(--pdx-dialog-surface));color:var(--md-sys-color-on-surface, #111);border:1px solid var(--pdx-dialog-border);border-radius:var(--pdx-dialog-shape, 16px);box-shadow:var(--pdx-dialog-elevation-shadow, var(--pdx-dialog-elevation));max-width:var(--pdx-dialog-max-width, 90vw);max-height:var(--pdx-dialog-max-height, 80vh);display:flex;flex-direction:column;min-width:var(--pdx-dialog-min-width, 280px);outline:0}.pdx-dialog__title{padding:var(--pdx-dialog-headline-padding, 12px 24px 10px);border-bottom:1px solid var(--pdx-dialog-border);color:var(--pdx-dialog-subhead-color, var(--pdx-dialog-title-fg));background:var(--pdx-dialog-title-bg, transparent);flex:0 0 auto}.pdx-dialog__title-row{display:flex;gap:10px}.pdx-dialog__title-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:0 0 24px;font-size:20px;line-height:1;opacity:.87}.pdx-dialog__title-text{margin:0;font-family:var(--pdx-dialog-subhead-font, inherit);font-size:var(--pdx-dialog-subhead-size, 16px);letter-spacing:var(--pdx-dialog-subhead-tracking, normal);font-weight:var(--pdx-dialog-subhead-weight, 600);line-height:1.2}.pdx-dialog__content{padding:var(--pdx-dialog-content-padding, 16px);overflow:auto;flex:1 1 auto;min-height:0;color:var(--pdx-dialog-supporting-text-color, inherit);font-family:var(--pdx-dialog-supporting-text-font, inherit);line-height:var(--pdx-dialog-supporting-text-line-height, 1.4);font-size:var(--pdx-dialog-supporting-text-size, 14px);letter-spacing:var(--pdx-dialog-supporting-text-tracking, normal);font-weight:var(--pdx-dialog-supporting-text-weight, 400)}.pdx-dialog.has-actions .pdx-dialog__content{padding-bottom:var(--pdx-dialog-with-actions-content-padding, var(--pdx-dialog-content-padding, 16px))}.pdx-dialog__actions{display:flex;gap:8px;padding:var(--pdx-dialog-actions-padding, 12px 24px 16px);border-top:1px solid var(--pdx-dialog-border);justify-content:flex-end;align-items:center;background:var(--pdx-dialog-actions-bg, transparent);flex:0 0 auto}.pdx-dialog__actions.is-stretched{justify-content:stretch}.pdx-dialog__actions.is-stretched .pdx-dialog__action-btn{flex:1 1 0;justify-content:center}.pdx-dialog__action-btn{appearance:none;border:1px solid var(--pdx-dialog-border);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);border-radius:var(--pdx-dialog-action-radius, 8px);padding:var(--pdx-dialog-action-padding, 0 14px);min-height:var(--pdx-dialog-action-min-height, 36px);cursor:pointer;display:inline-flex;align-items:center;gap:8px;line-height:1;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.pdx-dialog__action-btn:hover{background:var(--md-sys-color-surface-container)}.pdx-dialog__action-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-dialog__action-btn:disabled{opacity:.6;cursor:not-allowed}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid]{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid]:hover{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-color:var(--md-sys-color-primary-container)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid][data-theme=warn],.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]{background:var(--md-sys-color-error);border-color:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid][data-theme=warn]:hover,.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]:hover{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-color:var(--md-sys-color-error-container)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent],.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]{background:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent]:hover,.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]:hover{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);border-color:var(--md-sys-color-secondary-container)}.pdx-dialog__action-btn[data-fill=outline]{background:transparent;color:var(--md-sys-color-on-surface)}.pdx-dialog__action-btn[data-fill=outline][data-theme=primary],.pdx-dialog__action-btn[data-fill=flat][data-theme=primary]{color:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=accent],.pdx-dialog__action-btn[data-fill=flat][data-theme=accent]{color:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=warn],.pdx-dialog__action-btn[data-fill=flat][data-theme=warn]{color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.pdx-dialog__action-btn[data-fill=flat]{background:transparent;border-color:transparent;color:var(--md-sys-color-primary)}.pdx-dialog__action-btn .mat-icon{font-size:20px;width:20px;height:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.pdx-dialog--primary .pdx-dialog__title{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-bottom-color:var(--md-sys-color-outline-variant)}.pdx-dialog--dark{background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.pdx-dialog{transform-origin:center;transition-property:transform,opacity;transition-duration:var(--pdx-dialog-anim-duration, .3s);transition-timing-function:var(--pdx-dialog-anim-ease, cubic-bezier(.2, 0, 0, 1))}.pdx-dialog.pdx-anim-fade{opacity:1}.pdx-dialog.pdx-anim-zoom{transform:scale(1)}.pdx-dialog.pdx-anim-translate-up,.pdx-dialog.pdx-anim-translate-down{transform:translateY(0)}.pdx-dialog.pdx-anim-translate-left,.pdx-dialog.pdx-anim-translate-right{transform:translate(0)}.pdx-dialog.pdx-state-opening.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-right{transform:translate(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-right{transform:translate(16px);opacity:0}@media(prefers-reduced-motion:reduce){.pdx-dialog{transition:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
494
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisDialogComponent, isStandalone: true, selector: "praxis-dialog", inputs: { title: "title", actions: "actions", actionsLayout: "actionsLayout", animation: "animation", open: "open", width: "width", height: "height", minWidth: "minWidth", maxWidth: "maxWidth", minHeight: "minHeight", maxHeight: "maxHeight", themeColor: "themeColor", disableClose: "disableClose", hasBackdrop: "hasBackdrop", closeOnBackdropClick: "closeOnBackdropClick", overlayMode: "overlayMode", zIndex: "zIndex", panelClass: "panelClass", backdropClass: "backdropClass", position: "position", autoFocusedElement: "autoFocusedElement", autoFocus: "autoFocus", restoreFocus: "restoreFocus", id: "id", ariaRole: "ariaRole", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", styles: "styles", titleIcon: "titleIcon" }, outputs: { action: "action", close: "close", opened: "opened", afterClosed: "afterClosed" }, host: { properties: { "class": "this.hostClass", "attr.tabindex": "this.tabindex" } }, queries: [{ propertyName: "titleTpl", first: true, predicate: PraxisDialogTitleDirective, descendants: true, read: PraxisDialogTitleDirective }, { propertyName: "actionsTpl", first: true, predicate: PraxisDialogActionsDirective, descendants: true, read: PraxisDialogActionsDirective }, { propertyName: "contentTpl", first: true, predicate: PraxisDialogContentDirective, descendants: true, read: PraxisDialogContentDirective }], viewQueries: [{ propertyName: "contentHost", first: true, predicate: CdkPortalOutlet, descendants: true }, { propertyName: "panelEl", first: true, predicate: ["panel"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@let _titleId = (id ?? 'praxis-dialog') + '-title';\n\n<ng-template #panelHeader>\n @if (titleTpl?.templateRef || title || titleIcon) {\n <div class=\"pdx-dialog__title\">\n @if (titleTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"titleTpl!.templateRef\"></ng-container>\n } @else {\n <div class=\"pdx-dialog__title-row\">\n @if (titleIcon) {\n <mat-icon class=\"pdx-dialog__title-icon\" [praxisIcon]=\"titleIcon\" aria-hidden=\"true\"></mat-icon>\n }\n <h2 class=\"pdx-dialog__title-text\" [attr.id]=\"_titleId\">{{ title }}</h2>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #panelActions>\n <div class=\"pdx-dialog__actions\" [class.is-stretched]=\"actionsLayout==='stretched'\">\n @if (actionsTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"actionsTpl!.templateRef\"></ng-container>\n } @else {\n @for (a of actions; track a?.id ?? a) {\n <button\n type=\"button\"\n class=\"pdx-dialog__action-btn\"\n [attr.data-testid]=\"a.id || null\"\n [attr.data-role]=\"a.role || null\"\n [attr.data-theme]=\"a.themeColor || null\"\n [attr.data-fill]=\"a.fillMode || null\"\n [ngClass]=\"a.cssClass\"\n (click)=\"onActionClick(a)\"\n [attr.cdkFocusInitial]=\"a.role==='primary' && ariaRole==='alertdialog' ? '' : null\"\n >\n @if (a.icon) {\n <mat-icon [praxisIcon]=\"a.icon\"></mat-icon>\n } @else if (a.svgIcon) {\n <mat-icon [svgIcon]=\"a.svgIcon\"></mat-icon>\n }\n {{ a.text }}\n </button>\n }\n }\n </div>\n</ng-template>\n\n@if (overlayMode) {\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n} @else {\n <div class=\"pdx-dialog-overlay\" [class.has-backdrop]=\"hasBackdrop\" [hidden]=\"!isDisplayed\" (click)=\"onBackdrop($event)\" [ngClass]=\"backdropClass\" [style.z-index]=\"zIndex\">\n <div class=\"pdx-dialog-shell\" (click)=\"$event.stopPropagation()\">\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [style.top]=\"position?.top || null\"\n [style.bottom]=\"position?.bottom || null\"\n [style.left]=\"position?.left || null\"\n [style.right]=\"position?.right || null\"\n [class.pdx-has-position]=\"position\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";.pdx-dialog-host{--pdx-dialog-bg: var(--praxis-theme-surface, var(--md-sys-color-surface));--pdx-dialog-surface: var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-high));--pdx-dialog-border: var(--praxis-theme-outline, var(--md-sys-color-outline-variant));--pdx-dialog-title-fg: var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));--pdx-dialog-elevation: var(--praxis-theme-elevation, var(--mat-elevation-level4))}.pdx-dialog-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-dialog, 1300);background:transparent}.pdx-dialog-overlay.has-backdrop{background:var(--pdx-dialog-backdrop, rgba(0, 0, 0, .6))}.pdx-dialog-shell{display:contents}.pdx-dialog.pdx-has-position{position:absolute}.pdx-dialog{background:var(--pdx-dialog-container-color, var(--pdx-dialog-surface));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface, #111));border:1px solid var(--pdx-dialog-border);border-radius:var(--pdx-dialog-shape, 16px);box-shadow:var(--pdx-dialog-elevation-shadow, var(--pdx-dialog-elevation));max-width:var(--pdx-dialog-max-width, 90vw);max-height:var(--pdx-dialog-max-height, 80vh);display:flex;flex-direction:column;min-width:var(--pdx-dialog-min-width, 280px);outline:0}.pdx-dialog__title{padding:var(--pdx-dialog-headline-padding, 12px 24px 10px);border-bottom:1px solid var(--pdx-dialog-border);color:var(--pdx-dialog-subhead-color, var(--pdx-dialog-title-fg));background:var(--pdx-dialog-title-bg, transparent);flex:0 0 auto}.pdx-dialog__title-row{display:flex;gap:10px}.pdx-dialog__title-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:0 0 24px;font-size:20px;line-height:1;opacity:.87}.pdx-dialog__title-text{margin:0;font-family:var(--pdx-dialog-subhead-font, inherit);font-size:var(--pdx-dialog-subhead-size, 16px);letter-spacing:var(--pdx-dialog-subhead-tracking, normal);font-weight:var(--pdx-dialog-subhead-weight, 600);line-height:1.2}.pdx-dialog__content{padding:var(--pdx-dialog-content-padding, 16px);overflow:auto;flex:1 1 auto;min-height:0;color:var(--pdx-dialog-supporting-text-color, inherit);font-family:var(--pdx-dialog-supporting-text-font, inherit);line-height:var(--pdx-dialog-supporting-text-line-height, 1.4);font-size:var(--pdx-dialog-supporting-text-size, 14px);letter-spacing:var(--pdx-dialog-supporting-text-tracking, normal);font-weight:var(--pdx-dialog-supporting-text-weight, 400)}.pdx-dialog.has-actions .pdx-dialog__content{padding-bottom:var(--pdx-dialog-with-actions-content-padding, var(--pdx-dialog-content-padding, 16px))}.pdx-dialog__actions{display:flex;gap:8px;padding:var(--pdx-dialog-actions-padding, 12px 24px 16px);border-top:1px solid var(--pdx-dialog-border);justify-content:flex-end;align-items:center;background:var(--pdx-dialog-actions-bg, transparent);flex:0 0 auto}.pdx-dialog__actions.is-stretched{justify-content:stretch}.pdx-dialog__actions.is-stretched .pdx-dialog__action-btn{flex:1 1 0;justify-content:center}.pdx-dialog__action-btn{appearance:none;border:1px solid var(--pdx-dialog-border);background:var(--praxis-theme-surface, var(--md-sys-color-surface-container-low));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));border-radius:var(--pdx-dialog-action-radius, 8px);padding:var(--pdx-dialog-action-padding, 0 14px);min-height:var(--pdx-dialog-action-min-height, 36px);cursor:pointer;display:inline-flex;align-items:center;gap:8px;line-height:1;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.pdx-dialog__action-btn:hover{background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container))}.pdx-dialog__action-btn:focus-visible{outline:2px solid var(--praxis-theme-focus-outline, var(--md-sys-color-primary));outline-offset:2px}.pdx-dialog__action-btn:disabled{opacity:.6;cursor:not-allowed}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid]{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid]:hover{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-color:var(--md-sys-color-primary-container)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid][data-theme=warn],.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]{background:var(--md-sys-color-error);border-color:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid][data-theme=warn]:hover,.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]:hover{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-color:var(--md-sys-color-error-container)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent],.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]{background:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent]:hover,.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]:hover{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);border-color:var(--md-sys-color-secondary-container)}.pdx-dialog__action-btn[data-fill=outline]{background:transparent;color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.pdx-dialog__action-btn[data-fill=outline][data-theme=primary],.pdx-dialog__action-btn[data-fill=flat][data-theme=primary]{color:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=accent],.pdx-dialog__action-btn[data-fill=flat][data-theme=accent]{color:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=warn],.pdx-dialog__action-btn[data-fill=flat][data-theme=warn]{color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.pdx-dialog__action-btn[data-fill=flat]{background:transparent;border-color:transparent;color:var(--md-sys-color-primary)}.pdx-dialog__action-btn .mat-icon{font-size:20px;width:20px;height:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.pdx-dialog--primary .pdx-dialog__title{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-bottom-color:var(--praxis-theme-outline, var(--md-sys-color-outline-variant))}.pdx-dialog--dark{background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.pdx-dialog{transform-origin:center;transition-property:transform,opacity;transition-duration:var(--pdx-dialog-anim-duration, .3s);transition-timing-function:var(--pdx-dialog-anim-ease, cubic-bezier(.2, 0, 0, 1))}.pdx-dialog.pdx-anim-fade{opacity:1}.pdx-dialog.pdx-anim-zoom{transform:scale(1)}.pdx-dialog.pdx-anim-translate-up,.pdx-dialog.pdx-anim-translate-down{transform:translateY(0)}.pdx-dialog.pdx-anim-translate-left,.pdx-dialog.pdx-anim-translate-right{transform:translate(0)}.pdx-dialog.pdx-state-opening.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-right{transform:translate(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-right{transform:translate(16px);opacity:0}@media(prefers-reduced-motion:reduce){.pdx-dialog{transition:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
495
495
|
}
|
|
496
496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisDialogComponent, decorators: [{
|
|
497
497
|
type: Component,
|
|
498
|
-
args: [{ selector: 'praxis-dialog', standalone: true, imports: [CommonModule, PortalModule, A11yModule, MatIconModule, PraxisIconDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@let _titleId = (id ?? 'praxis-dialog') + '-title';\n\n<ng-template #panelHeader>\n @if (titleTpl?.templateRef || title || titleIcon) {\n <div class=\"pdx-dialog__title\">\n @if (titleTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"titleTpl!.templateRef\"></ng-container>\n } @else {\n <div class=\"pdx-dialog__title-row\">\n @if (titleIcon) {\n <mat-icon class=\"pdx-dialog__title-icon\" [praxisIcon]=\"titleIcon\" aria-hidden=\"true\"></mat-icon>\n }\n <h2 class=\"pdx-dialog__title-text\" [attr.id]=\"_titleId\">{{ title }}</h2>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #panelActions>\n <div class=\"pdx-dialog__actions\" [class.is-stretched]=\"actionsLayout==='stretched'\">\n @if (actionsTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"actionsTpl!.templateRef\"></ng-container>\n } @else {\n @for (a of actions; track a?.id ?? a) {\n <button\n type=\"button\"\n class=\"pdx-dialog__action-btn\"\n [attr.data-testid]=\"a.id || null\"\n [attr.data-role]=\"a.role || null\"\n [attr.data-theme]=\"a.themeColor || null\"\n [attr.data-fill]=\"a.fillMode || null\"\n [ngClass]=\"a.cssClass\"\n (click)=\"onActionClick(a)\"\n [attr.cdkFocusInitial]=\"a.role==='primary' && ariaRole==='alertdialog' ? '' : null\"\n >\n @if (a.icon) {\n <mat-icon [praxisIcon]=\"a.icon\"></mat-icon>\n } @else if (a.svgIcon) {\n <mat-icon [svgIcon]=\"a.svgIcon\"></mat-icon>\n }\n {{ a.text }}\n </button>\n }\n }\n </div>\n</ng-template>\n\n@if (overlayMode) {\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n} @else {\n <div class=\"pdx-dialog-overlay\" [class.has-backdrop]=\"hasBackdrop\" [hidden]=\"!isDisplayed\" (click)=\"onBackdrop($event)\" [ngClass]=\"backdropClass\" [style.z-index]=\"zIndex\">\n <div class=\"pdx-dialog-shell\" (click)=\"$event.stopPropagation()\">\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [style.top]=\"position?.top || null\"\n [style.bottom]=\"position?.bottom || null\"\n [style.left]=\"position?.left || null\"\n [style.right]=\"position?.right || null\"\n [class.pdx-has-position]=\"position\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";.pdx-dialog-host{--pdx-dialog-bg: var(--md-sys-color-surface);--pdx-dialog-surface: var(--md-sys-color-surface-container-high);--pdx-dialog-border: var(--md-sys-color-outline-variant);--pdx-dialog-title-fg: var(--md-sys-color-on-surface);--pdx-dialog-elevation: var(--mat-elevation-level4)}.pdx-dialog-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-dialog, 1300);background:transparent}.pdx-dialog-overlay.has-backdrop{background:var(--pdx-dialog-backdrop, rgba(0, 0, 0, .6))}.pdx-dialog-shell{display:contents}.pdx-dialog.pdx-has-position{position:absolute}.pdx-dialog{background:var(--pdx-dialog-container-color, var(--pdx-dialog-surface));color:var(--md-sys-color-on-surface, #111);border:1px solid var(--pdx-dialog-border);border-radius:var(--pdx-dialog-shape, 16px);box-shadow:var(--pdx-dialog-elevation-shadow, var(--pdx-dialog-elevation));max-width:var(--pdx-dialog-max-width, 90vw);max-height:var(--pdx-dialog-max-height, 80vh);display:flex;flex-direction:column;min-width:var(--pdx-dialog-min-width, 280px);outline:0}.pdx-dialog__title{padding:var(--pdx-dialog-headline-padding, 12px 24px 10px);border-bottom:1px solid var(--pdx-dialog-border);color:var(--pdx-dialog-subhead-color, var(--pdx-dialog-title-fg));background:var(--pdx-dialog-title-bg, transparent);flex:0 0 auto}.pdx-dialog__title-row{display:flex;gap:10px}.pdx-dialog__title-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:0 0 24px;font-size:20px;line-height:1;opacity:.87}.pdx-dialog__title-text{margin:0;font-family:var(--pdx-dialog-subhead-font, inherit);font-size:var(--pdx-dialog-subhead-size, 16px);letter-spacing:var(--pdx-dialog-subhead-tracking, normal);font-weight:var(--pdx-dialog-subhead-weight, 600);line-height:1.2}.pdx-dialog__content{padding:var(--pdx-dialog-content-padding, 16px);overflow:auto;flex:1 1 auto;min-height:0;color:var(--pdx-dialog-supporting-text-color, inherit);font-family:var(--pdx-dialog-supporting-text-font, inherit);line-height:var(--pdx-dialog-supporting-text-line-height, 1.4);font-size:var(--pdx-dialog-supporting-text-size, 14px);letter-spacing:var(--pdx-dialog-supporting-text-tracking, normal);font-weight:var(--pdx-dialog-supporting-text-weight, 400)}.pdx-dialog.has-actions .pdx-dialog__content{padding-bottom:var(--pdx-dialog-with-actions-content-padding, var(--pdx-dialog-content-padding, 16px))}.pdx-dialog__actions{display:flex;gap:8px;padding:var(--pdx-dialog-actions-padding, 12px 24px 16px);border-top:1px solid var(--pdx-dialog-border);justify-content:flex-end;align-items:center;background:var(--pdx-dialog-actions-bg, transparent);flex:0 0 auto}.pdx-dialog__actions.is-stretched{justify-content:stretch}.pdx-dialog__actions.is-stretched .pdx-dialog__action-btn{flex:1 1 0;justify-content:center}.pdx-dialog__action-btn{appearance:none;border:1px solid var(--pdx-dialog-border);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);border-radius:var(--pdx-dialog-action-radius, 8px);padding:var(--pdx-dialog-action-padding, 0 14px);min-height:var(--pdx-dialog-action-min-height, 36px);cursor:pointer;display:inline-flex;align-items:center;gap:8px;line-height:1;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.pdx-dialog__action-btn:hover{background:var(--md-sys-color-surface-container)}.pdx-dialog__action-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-dialog__action-btn:disabled{opacity:.6;cursor:not-allowed}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid]{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid]:hover{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-color:var(--md-sys-color-primary-container)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid][data-theme=warn],.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]{background:var(--md-sys-color-error);border-color:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid][data-theme=warn]:hover,.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]:hover{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-color:var(--md-sys-color-error-container)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent],.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]{background:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent]:hover,.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]:hover{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);border-color:var(--md-sys-color-secondary-container)}.pdx-dialog__action-btn[data-fill=outline]{background:transparent;color:var(--md-sys-color-on-surface)}.pdx-dialog__action-btn[data-fill=outline][data-theme=primary],.pdx-dialog__action-btn[data-fill=flat][data-theme=primary]{color:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=accent],.pdx-dialog__action-btn[data-fill=flat][data-theme=accent]{color:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=warn],.pdx-dialog__action-btn[data-fill=flat][data-theme=warn]{color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.pdx-dialog__action-btn[data-fill=flat]{background:transparent;border-color:transparent;color:var(--md-sys-color-primary)}.pdx-dialog__action-btn .mat-icon{font-size:20px;width:20px;height:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.pdx-dialog--primary .pdx-dialog__title{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-bottom-color:var(--md-sys-color-outline-variant)}.pdx-dialog--dark{background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.pdx-dialog{transform-origin:center;transition-property:transform,opacity;transition-duration:var(--pdx-dialog-anim-duration, .3s);transition-timing-function:var(--pdx-dialog-anim-ease, cubic-bezier(.2, 0, 0, 1))}.pdx-dialog.pdx-anim-fade{opacity:1}.pdx-dialog.pdx-anim-zoom{transform:scale(1)}.pdx-dialog.pdx-anim-translate-up,.pdx-dialog.pdx-anim-translate-down{transform:translateY(0)}.pdx-dialog.pdx-anim-translate-left,.pdx-dialog.pdx-anim-translate-right{transform:translate(0)}.pdx-dialog.pdx-state-opening.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-right{transform:translate(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-right{transform:translate(16px);opacity:0}@media(prefers-reduced-motion:reduce){.pdx-dialog{transition:none!important}}\n"] }]
|
|
498
|
+
args: [{ selector: 'praxis-dialog', standalone: true, imports: [CommonModule, PortalModule, A11yModule, MatIconModule, PraxisIconDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@let _titleId = (id ?? 'praxis-dialog') + '-title';\n\n<ng-template #panelHeader>\n @if (titleTpl?.templateRef || title || titleIcon) {\n <div class=\"pdx-dialog__title\">\n @if (titleTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"titleTpl!.templateRef\"></ng-container>\n } @else {\n <div class=\"pdx-dialog__title-row\">\n @if (titleIcon) {\n <mat-icon class=\"pdx-dialog__title-icon\" [praxisIcon]=\"titleIcon\" aria-hidden=\"true\"></mat-icon>\n }\n <h2 class=\"pdx-dialog__title-text\" [attr.id]=\"_titleId\">{{ title }}</h2>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #panelActions>\n <div class=\"pdx-dialog__actions\" [class.is-stretched]=\"actionsLayout==='stretched'\">\n @if (actionsTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"actionsTpl!.templateRef\"></ng-container>\n } @else {\n @for (a of actions; track a?.id ?? a) {\n <button\n type=\"button\"\n class=\"pdx-dialog__action-btn\"\n [attr.data-testid]=\"a.id || null\"\n [attr.data-role]=\"a.role || null\"\n [attr.data-theme]=\"a.themeColor || null\"\n [attr.data-fill]=\"a.fillMode || null\"\n [ngClass]=\"a.cssClass\"\n (click)=\"onActionClick(a)\"\n [attr.cdkFocusInitial]=\"a.role==='primary' && ariaRole==='alertdialog' ? '' : null\"\n >\n @if (a.icon) {\n <mat-icon [praxisIcon]=\"a.icon\"></mat-icon>\n } @else if (a.svgIcon) {\n <mat-icon [svgIcon]=\"a.svgIcon\"></mat-icon>\n }\n {{ a.text }}\n </button>\n }\n }\n </div>\n</ng-template>\n\n@if (overlayMode) {\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n} @else {\n <div class=\"pdx-dialog-overlay\" [class.has-backdrop]=\"hasBackdrop\" [hidden]=\"!isDisplayed\" (click)=\"onBackdrop($event)\" [ngClass]=\"backdropClass\" [style.z-index]=\"zIndex\">\n <div class=\"pdx-dialog-shell\" (click)=\"$event.stopPropagation()\">\n <div\n #panel\n class=\"pdx-dialog pdx-dialog--{{ themeColor }} pdx-dialog--layout-{{ actionsLayout }}\"\n [attr.role]=\"ariaRole\"\n [attr.id]=\"id || null\"\n [attr.aria-modal]=\"true\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"(ariaLabelledBy || (title ? _titleId : null))\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (keydown)=\"onKeydown($event)\"\n cdkTrapFocus\n [ngClass]=\"panelNgClass\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.min-width]=\"minWidth\"\n [style.max-width]=\"maxWidth\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n [style.top]=\"position?.top || null\"\n [style.bottom]=\"position?.bottom || null\"\n [style.left]=\"position?.left || null\"\n [style.right]=\"position?.right || null\"\n [class.pdx-has-position]=\"position\"\n [class.has-actions]=\"(actions.length||0)>0 || !!actionsTpl?.templateRef\"\n >\n <ng-container [ngTemplateOutlet]=\"panelHeader\"></ng-container>\n <div class=\"pdx-dialog__content\">\n @if (contentTpl?.templateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTpl!.templateRef\"></ng-container>\n } @else {\n <ng-template cdkPortalOutlet></ng-template>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"panelActions\"></ng-container>\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";.pdx-dialog-host{--pdx-dialog-bg: var(--praxis-theme-surface, var(--md-sys-color-surface));--pdx-dialog-surface: var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-high));--pdx-dialog-border: var(--praxis-theme-outline, var(--md-sys-color-outline-variant));--pdx-dialog-title-fg: var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));--pdx-dialog-elevation: var(--praxis-theme-elevation, var(--mat-elevation-level4))}.pdx-dialog-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-dialog, 1300);background:transparent}.pdx-dialog-overlay.has-backdrop{background:var(--pdx-dialog-backdrop, rgba(0, 0, 0, .6))}.pdx-dialog-shell{display:contents}.pdx-dialog.pdx-has-position{position:absolute}.pdx-dialog{background:var(--pdx-dialog-container-color, var(--pdx-dialog-surface));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface, #111));border:1px solid var(--pdx-dialog-border);border-radius:var(--pdx-dialog-shape, 16px);box-shadow:var(--pdx-dialog-elevation-shadow, var(--pdx-dialog-elevation));max-width:var(--pdx-dialog-max-width, 90vw);max-height:var(--pdx-dialog-max-height, 80vh);display:flex;flex-direction:column;min-width:var(--pdx-dialog-min-width, 280px);outline:0}.pdx-dialog__title{padding:var(--pdx-dialog-headline-padding, 12px 24px 10px);border-bottom:1px solid var(--pdx-dialog-border);color:var(--pdx-dialog-subhead-color, var(--pdx-dialog-title-fg));background:var(--pdx-dialog-title-bg, transparent);flex:0 0 auto}.pdx-dialog__title-row{display:flex;gap:10px}.pdx-dialog__title-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:0 0 24px;font-size:20px;line-height:1;opacity:.87}.pdx-dialog__title-text{margin:0;font-family:var(--pdx-dialog-subhead-font, inherit);font-size:var(--pdx-dialog-subhead-size, 16px);letter-spacing:var(--pdx-dialog-subhead-tracking, normal);font-weight:var(--pdx-dialog-subhead-weight, 600);line-height:1.2}.pdx-dialog__content{padding:var(--pdx-dialog-content-padding, 16px);overflow:auto;flex:1 1 auto;min-height:0;color:var(--pdx-dialog-supporting-text-color, inherit);font-family:var(--pdx-dialog-supporting-text-font, inherit);line-height:var(--pdx-dialog-supporting-text-line-height, 1.4);font-size:var(--pdx-dialog-supporting-text-size, 14px);letter-spacing:var(--pdx-dialog-supporting-text-tracking, normal);font-weight:var(--pdx-dialog-supporting-text-weight, 400)}.pdx-dialog.has-actions .pdx-dialog__content{padding-bottom:var(--pdx-dialog-with-actions-content-padding, var(--pdx-dialog-content-padding, 16px))}.pdx-dialog__actions{display:flex;gap:8px;padding:var(--pdx-dialog-actions-padding, 12px 24px 16px);border-top:1px solid var(--pdx-dialog-border);justify-content:flex-end;align-items:center;background:var(--pdx-dialog-actions-bg, transparent);flex:0 0 auto}.pdx-dialog__actions.is-stretched{justify-content:stretch}.pdx-dialog__actions.is-stretched .pdx-dialog__action-btn{flex:1 1 0;justify-content:center}.pdx-dialog__action-btn{appearance:none;border:1px solid var(--pdx-dialog-border);background:var(--praxis-theme-surface, var(--md-sys-color-surface-container-low));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));border-radius:var(--pdx-dialog-action-radius, 8px);padding:var(--pdx-dialog-action-padding, 0 14px);min-height:var(--pdx-dialog-action-min-height, 36px);cursor:pointer;display:inline-flex;align-items:center;gap:8px;line-height:1;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.pdx-dialog__action-btn:hover{background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container))}.pdx-dialog__action-btn:focus-visible{outline:2px solid var(--praxis-theme-focus-outline, var(--md-sys-color-primary));outline-offset:2px}.pdx-dialog__action-btn:disabled{opacity:.6;cursor:not-allowed}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid]{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-dialog__action-btn[data-role=primary]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid]:hover{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-color:var(--md-sys-color-primary-container)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]),.pdx-dialog__action-btn[data-fill=solid][data-theme=warn],.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]{background:var(--md-sys-color-error);border-color:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pdx-dialog__action-btn[data-role=danger]:not([data-fill]):hover,.pdx-dialog__action-btn[data-fill=solid][data-theme=warn]:hover,.pdx-dialog__action-btn[data-theme=warn][data-fill=solid]:hover{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-color:var(--md-sys-color-error-container)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent],.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]{background:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pdx-dialog__action-btn[data-fill=solid][data-theme=accent]:hover,.pdx-dialog__action-btn[data-theme=accent][data-fill=solid]:hover{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container);border-color:var(--md-sys-color-secondary-container)}.pdx-dialog__action-btn[data-fill=outline]{background:transparent;color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.pdx-dialog__action-btn[data-fill=outline][data-theme=primary],.pdx-dialog__action-btn[data-fill=flat][data-theme=primary]{color:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=accent],.pdx-dialog__action-btn[data-fill=flat][data-theme=accent]{color:var(--md-sys-color-secondary);border-color:var(--md-sys-color-secondary)}.pdx-dialog__action-btn[data-fill=outline][data-theme=warn],.pdx-dialog__action-btn[data-fill=flat][data-theme=warn]{color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.pdx-dialog__action-btn[data-fill=flat]{background:transparent;border-color:transparent;color:var(--md-sys-color-primary)}.pdx-dialog__action-btn .mat-icon{font-size:20px;width:20px;height:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.pdx-dialog--primary .pdx-dialog__title{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-bottom-color:var(--praxis-theme-outline, var(--md-sys-color-outline-variant))}.pdx-dialog--dark{background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.pdx-dialog{transform-origin:center;transition-property:transform,opacity;transition-duration:var(--pdx-dialog-anim-duration, .3s);transition-timing-function:var(--pdx-dialog-anim-ease, cubic-bezier(.2, 0, 0, 1))}.pdx-dialog.pdx-anim-fade{opacity:1}.pdx-dialog.pdx-anim-zoom{transform:scale(1)}.pdx-dialog.pdx-anim-translate-up,.pdx-dialog.pdx-anim-translate-down{transform:translateY(0)}.pdx-dialog.pdx-anim-translate-left,.pdx-dialog.pdx-anim-translate-right{transform:translate(0)}.pdx-dialog.pdx-state-opening.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-opening.pdx-anim-translate-right{transform:translate(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-fade{opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-zoom{transform:scale(.96);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-up{transform:translateY(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-down{transform:translateY(16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-left{transform:translate(-16px);opacity:0}.pdx-dialog.pdx-state-closing.pdx-anim-translate-right{transform:translate(16px);opacity:0}@media(prefers-reduced-motion:reduce){.pdx-dialog{transition:none!important}}\n"] }]
|
|
499
499
|
}], propDecorators: { title: [{
|
|
500
500
|
type: Input
|
|
501
501
|
}], actions: [{
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dialog",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.72",
|
|
4
4
|
"description": "Dialog helpers and components for Praxis UI with Angular Material integration.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
8
|
"@angular/cdk": "^21.0.0",
|
|
9
9
|
"@angular/forms": "^21.0.0",
|
|
10
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
10
|
+
"@praxisui/core": "^9.0.0-beta.72",
|
|
11
11
|
"@angular/material": "^21.0.0",
|
|
12
12
|
"@angular/platform-browser": "^21.0.0",
|
|
13
13
|
"rxjs": "~7.8.0"
|