@progressive-development/pd-dialog 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/pd-assistant-dialog/PdAssistantDialog.d.ts +46 -0
- package/dist/pd-assistant-dialog/PdAssistantDialog.d.ts.map +1 -0
- package/dist/pd-assistant-dialog/PdAssistantDialog.js +193 -0
- package/dist/pd-assistant-dialog/pd-assistant-dialog.d.ts +3 -0
- package/dist/pd-assistant-dialog/pd-assistant-dialog.d.ts.map +1 -0
- package/dist/pd-assistant-dialog.d.ts +2 -0
- package/dist/pd-assistant-dialog.js +8 -0
- package/dist/pd-assistant-input-bar/PdAssistantInputBar.d.ts +30 -0
- package/dist/pd-assistant-input-bar/PdAssistantInputBar.d.ts.map +1 -0
- package/dist/pd-assistant-input-bar/PdAssistantInputBar.js +100 -0
- package/dist/pd-assistant-input-bar/pd-assistant-input-bar.d.ts +3 -0
- package/dist/pd-assistant-input-bar/pd-assistant-input-bar.d.ts.map +1 -0
- package/dist/pd-assistant-input-bar.d.ts +2 -0
- package/dist/pd-assistant-input-bar.js +8 -0
- package/package.json +7 -5
- package/dist/pd-confirm-dialog/pd-confirm-dialog.stories.d.ts +0 -107
- package/dist/pd-confirm-dialog/pd-confirm-dialog.stories.d.ts.map +0 -1
- package/dist/pd-form-dialog/pd-form-dialog.stories.d.ts +0 -118
- package/dist/pd-form-dialog/pd-form-dialog.stories.d.ts.map +0 -1
- package/dist/pd-popup/pd-popup.stories.d.ts +0 -58
- package/dist/pd-popup/pd-popup.stories.d.ts.map +0 -1
- package/dist/pd-popup-dialog/pd-popup-dialog.stories.d.ts +0 -55
- package/dist/pd-popup-dialog/pd-popup-dialog.stories.d.ts.map +0 -1
- package/dist/pd-submit-dialog/pd-submit-dialog.stories.d.ts +0 -50
- package/dist/pd-submit-dialog/pd-submit-dialog.stories.d.ts.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { BUTTON_KEY_CANCEL, BUTTON_KEY_CONFIRM, EVENT_CONFIRM, EVENT_CANCEL, } f
|
|
|
6
6
|
export type { PdDialogType } from './pd-confirm-dialog/pd-confirm-dialog.js';
|
|
7
7
|
export { PdFormDialog } from './pd-form-dialog/pd-form-dialog.js';
|
|
8
8
|
export { EVENT_FORM_SUBMIT } from './pd-form-dialog/pd-form-dialog.js';
|
|
9
|
+
export { PdAssistantInputBar } from './pd-assistant-input-bar/pd-assistant-input-bar.js';
|
|
10
|
+
export { PdAssistantDialog } from './pd-assistant-dialog/pd-assistant-dialog.js';
|
|
9
11
|
export type { PdDialogButton, PdSubmitDialogProps, PdSubmitDialogStatus, } from './types.js';
|
|
10
12
|
export { templates as beTemplates } from './generated/locales/be.js';
|
|
11
13
|
export { templates as deTemplates } from './generated/locales/de.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,0CAA0C,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,0CAA0C,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAGjF,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,13 @@ import './pd-popup-dialog.js';
|
|
|
3
3
|
import './pd-submit-dialog.js';
|
|
4
4
|
export { BUTTON_KEY_CANCEL, BUTTON_KEY_CONFIRM, EVENT_CANCEL, EVENT_CONFIRM, PdConfirmDialog } from './pd-confirm-dialog/PdConfirmDialog.js';
|
|
5
5
|
export { EVENT_FORM_SUBMIT, PdFormDialog } from './pd-form-dialog/PdFormDialog.js';
|
|
6
|
+
import './pd-assistant-input-bar.js';
|
|
7
|
+
import './pd-assistant-dialog.js';
|
|
6
8
|
export { templates as beTemplates } from './locales/be.js';
|
|
7
9
|
export { templates as deTemplates } from './locales/de.js';
|
|
8
10
|
export { templates as enTemplates } from './locales/en.js';
|
|
11
|
+
export { PdAssistantDialog } from './pd-assistant-dialog/PdAssistantDialog.js';
|
|
12
|
+
export { PdAssistantInputBar } from './pd-assistant-input-bar/PdAssistantInputBar.js';
|
|
9
13
|
export { PdPopup } from './pd-popup/PdPopup.js';
|
|
10
14
|
export { PdPopupDialog } from './pd-popup-dialog/PdPopupDialog.js';
|
|
11
15
|
export { PdSubmitDialog } from './pd-submit-dialog/PdSubmitDialog.js';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { LitElement, CSSResultGroup, PropertyValues } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* Assistant-style dialog shell with header, scrollable content area, and input bar footer.
|
|
4
|
+
* Wraps pd-popup via composition. Reusable for AI chat, image search, etc.
|
|
5
|
+
*
|
|
6
|
+
* @tagname pd-assistant-dialog
|
|
7
|
+
* @summary Assistant dialog with header, content slot, and input bar.
|
|
8
|
+
*
|
|
9
|
+
* @event pd-assistant-dialog-close - Fired when dialog is closed.
|
|
10
|
+
* @event pd-assistant-submit - Bubbles from the input bar on submit.
|
|
11
|
+
*
|
|
12
|
+
* @slot - Default slot for main content (results, messages, etc.).
|
|
13
|
+
*
|
|
14
|
+
* @cssprop --pd-assistant-dialog-width - Dialog width. Default: `min(520px, 90vw)`.
|
|
15
|
+
* @cssprop --pd-assistant-dialog-content-min-height - Min content height. Default: `120px`.
|
|
16
|
+
* @cssprop --pd-assistant-dialog-content-max-height - Max content height. Default: `50vh`.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PdAssistantDialog extends LitElement {
|
|
19
|
+
/** Whether the dialog is open. Reactive — controls pd-popup visibility. */
|
|
20
|
+
open: boolean;
|
|
21
|
+
/** Dialog title shown in the header. */
|
|
22
|
+
dialogTitle: string;
|
|
23
|
+
/** Icon displayed next to the title. */
|
|
24
|
+
dialogIcon: string;
|
|
25
|
+
/** Placeholder for the input bar. */
|
|
26
|
+
inputPlaceholder: string;
|
|
27
|
+
/** Button text for the input bar. */
|
|
28
|
+
inputButtonText: string;
|
|
29
|
+
/** Disable the input bar. */
|
|
30
|
+
inputDisabled: boolean;
|
|
31
|
+
/** Hide the input bar entirely. */
|
|
32
|
+
hideInput: boolean;
|
|
33
|
+
private _popup;
|
|
34
|
+
static styles: CSSResultGroup;
|
|
35
|
+
updated(changed: PropertyValues<this>): void;
|
|
36
|
+
render(): import('lit').TemplateResult<1>;
|
|
37
|
+
/** Open the dialog. */
|
|
38
|
+
show(): void;
|
|
39
|
+
/** Close the dialog. */
|
|
40
|
+
hide(): void;
|
|
41
|
+
/** Clear the input bar value. */
|
|
42
|
+
clearInput(): void;
|
|
43
|
+
private _onPopupClose;
|
|
44
|
+
private _onCloseKeyDown;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=PdAssistantDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdAssistantDialog.d.ts","sourceRoot":"","sources":["../../src/pd-assistant-dialog/PdAssistantDialog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EAIV,cAAc,EACd,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAIb,OAAO,0CAA0C,CAAC;AAGlD,OAAO,yBAAyB,CAAC;AAEjC,OAAO,qDAAqD,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,2EAA2E;IAE3E,IAAI,UAAS;IAEb,wCAAwC;IAExC,WAAW,SAAM;IAEjB,wCAAwC;IAExC,UAAU,SAAM;IAEhB,qCAAqC;IAErC,gBAAgB,SAA6B;IAE7C,qCAAqC;IAErC,eAAe,SAAY;IAE3B,6BAA6B;IAE7B,aAAa,UAAS;IAEtB,mCAAmC;IAEnC,SAAS,UAAS;IAGlB,OAAO,CAAC,MAAM,CAAW;IAEzB,OAAgB,MAAM,EAAE,cAAc,CAsDpC;IAEO,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAU5C,MAAM;IAgDf,uBAAuB;IAChB,IAAI,IAAI,IAAI;IAInB,wBAAwB;IACjB,IAAI,IAAI,IAAI;IAInB,iCAAiC;IAC1B,UAAU,IAAI,IAAI;IAOzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;CAMxB"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { LitElement, css, nothing, html } from 'lit';
|
|
2
|
+
import { property, query } from 'lit/decorators.js';
|
|
3
|
+
import { pdIcons } from '@progressive-development/pd-icon';
|
|
4
|
+
import '@progressive-development/pd-icon/pd-icon';
|
|
5
|
+
import '../pd-popup.js';
|
|
6
|
+
import '../pd-assistant-input-bar.js';
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
10
|
+
var result = void 0 ;
|
|
11
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12
|
+
if (decorator = decorators[i])
|
|
13
|
+
result = (decorator(target, key, result) ) || result;
|
|
14
|
+
if (result) __defProp(target, key, result);
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
class PdAssistantDialog extends LitElement {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.open = false;
|
|
21
|
+
this.dialogTitle = "";
|
|
22
|
+
this.dialogIcon = "";
|
|
23
|
+
this.inputPlaceholder = "Suchbegriff eingeben...";
|
|
24
|
+
this.inputButtonText = "Suchen";
|
|
25
|
+
this.inputDisabled = false;
|
|
26
|
+
this.hideInput = false;
|
|
27
|
+
}
|
|
28
|
+
static {
|
|
29
|
+
this.styles = css`
|
|
30
|
+
:host {
|
|
31
|
+
display: contents;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
pd-popup {
|
|
35
|
+
--pd-popup-width: var(--pd-assistant-dialog-width, min(520px, 90vw));
|
|
36
|
+
--pd-popup-max-width: var(--pd-assistant-dialog-width, min(520px, 90vw));
|
|
37
|
+
--pd-popup-modal-padding: 0;
|
|
38
|
+
--pd-popup-modal-padding-bottom: 0;
|
|
39
|
+
--pd-popup-modal-padding-top: 10vh;
|
|
40
|
+
--pd-popup-border-radius: 12px;
|
|
41
|
+
--pd-popup-modal-slot-max-width: 100%;
|
|
42
|
+
--pd-popup-modal-slot-margin: 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.dialog-header {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
gap: 8px;
|
|
49
|
+
padding: 16px 20px;
|
|
50
|
+
border-bottom: 1px solid var(--pd-default-light-col, #e0e0e0);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.dialog-header h3 {
|
|
54
|
+
margin: 0;
|
|
55
|
+
font-size: 1rem;
|
|
56
|
+
font-weight: 600;
|
|
57
|
+
flex: 1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.dialog-header .header-icon {
|
|
61
|
+
--pd-icon-size: 1.25rem;
|
|
62
|
+
color: var(--pd-default-col, #0066cc);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.close-icon {
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
--pd-icon-size: 1.25rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.close-icon:focus {
|
|
71
|
+
outline: 2px solid var(--pd-default-col);
|
|
72
|
+
outline-offset: 2px;
|
|
73
|
+
border-radius: var(--pd-radius-sm, 2px);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.dialog-content {
|
|
77
|
+
flex: 1;
|
|
78
|
+
overflow-y: auto;
|
|
79
|
+
min-height: var(--pd-assistant-dialog-content-min-height, 120px);
|
|
80
|
+
max-height: var(--pd-assistant-dialog-content-max-height, 50vh);
|
|
81
|
+
padding: 16px 20px;
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
}
|
|
85
|
+
updated(changed) {
|
|
86
|
+
if (changed.has("open")) {
|
|
87
|
+
if (this.open) {
|
|
88
|
+
this._popup?.showPopup();
|
|
89
|
+
} else {
|
|
90
|
+
this._popup?.hidePopup();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
render() {
|
|
95
|
+
return html`
|
|
96
|
+
<pd-popup
|
|
97
|
+
closeByEscape
|
|
98
|
+
closeByBackdrop
|
|
99
|
+
blockScroll
|
|
100
|
+
hideCloseIcon
|
|
101
|
+
popupLabel="${this.dialogTitle}"
|
|
102
|
+
@popup-close="${this._onPopupClose}"
|
|
103
|
+
>
|
|
104
|
+
<div slot="content">
|
|
105
|
+
<div class="dialog-header">
|
|
106
|
+
${this.dialogIcon ? html`<pd-icon
|
|
107
|
+
class="header-icon"
|
|
108
|
+
.icon="${this.dialogIcon}"
|
|
109
|
+
></pd-icon>` : nothing}
|
|
110
|
+
<h3>${this.dialogTitle}</h3>
|
|
111
|
+
<pd-icon
|
|
112
|
+
class="close-icon"
|
|
113
|
+
.icon="${pdIcons.ICON_CLOSE}"
|
|
114
|
+
tabindex="0"
|
|
115
|
+
role="button"
|
|
116
|
+
aria-label="Schließen"
|
|
117
|
+
@click="${this.hide}"
|
|
118
|
+
@keydown="${this._onCloseKeyDown}"
|
|
119
|
+
></pd-icon>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div class="dialog-content">
|
|
123
|
+
<slot></slot>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
${this.hideInput ? nothing : html`
|
|
127
|
+
<pd-assistant-input-bar
|
|
128
|
+
placeholder="${this.inputPlaceholder}"
|
|
129
|
+
buttonText="${this.inputButtonText}"
|
|
130
|
+
?disabled="${this.inputDisabled}"
|
|
131
|
+
></pd-assistant-input-bar>
|
|
132
|
+
`}
|
|
133
|
+
</div>
|
|
134
|
+
</pd-popup>
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
/** Open the dialog. */
|
|
138
|
+
show() {
|
|
139
|
+
this.open = true;
|
|
140
|
+
}
|
|
141
|
+
/** Close the dialog. */
|
|
142
|
+
hide() {
|
|
143
|
+
this.open = false;
|
|
144
|
+
}
|
|
145
|
+
/** Clear the input bar value. */
|
|
146
|
+
clearInput() {
|
|
147
|
+
const inputBar = this.renderRoot.querySelector(
|
|
148
|
+
"pd-assistant-input-bar"
|
|
149
|
+
);
|
|
150
|
+
inputBar?.clear();
|
|
151
|
+
}
|
|
152
|
+
_onPopupClose() {
|
|
153
|
+
this.open = false;
|
|
154
|
+
this.dispatchEvent(
|
|
155
|
+
new CustomEvent("pd-assistant-dialog-close", {
|
|
156
|
+
bubbles: true,
|
|
157
|
+
composed: true
|
|
158
|
+
})
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
_onCloseKeyDown(e) {
|
|
162
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
163
|
+
e.preventDefault();
|
|
164
|
+
this.hide();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
__decorateClass([
|
|
169
|
+
property({ type: Boolean, reflect: true })
|
|
170
|
+
], PdAssistantDialog.prototype, "open");
|
|
171
|
+
__decorateClass([
|
|
172
|
+
property({ type: String })
|
|
173
|
+
], PdAssistantDialog.prototype, "dialogTitle");
|
|
174
|
+
__decorateClass([
|
|
175
|
+
property({ type: String })
|
|
176
|
+
], PdAssistantDialog.prototype, "dialogIcon");
|
|
177
|
+
__decorateClass([
|
|
178
|
+
property({ type: String })
|
|
179
|
+
], PdAssistantDialog.prototype, "inputPlaceholder");
|
|
180
|
+
__decorateClass([
|
|
181
|
+
property({ type: String })
|
|
182
|
+
], PdAssistantDialog.prototype, "inputButtonText");
|
|
183
|
+
__decorateClass([
|
|
184
|
+
property({ type: Boolean })
|
|
185
|
+
], PdAssistantDialog.prototype, "inputDisabled");
|
|
186
|
+
__decorateClass([
|
|
187
|
+
property({ type: Boolean })
|
|
188
|
+
], PdAssistantDialog.prototype, "hideInput");
|
|
189
|
+
__decorateClass([
|
|
190
|
+
query("pd-popup")
|
|
191
|
+
], PdAssistantDialog.prototype, "_popup");
|
|
192
|
+
|
|
193
|
+
export { PdAssistantDialog };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-assistant-dialog.d.ts","sourceRoot":"","sources":["../../src/pd-assistant-dialog/pd-assistant-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LitElement, CSSResultGroup } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* Input bar for assistant-style dialogs (search, chat).
|
|
4
|
+
*
|
|
5
|
+
* @tagname pd-assistant-input-bar
|
|
6
|
+
* @summary Text input with submit button for assistant dialogs.
|
|
7
|
+
*
|
|
8
|
+
* @event pd-assistant-submit - Fired on submit. Detail: `{ value: string }`.
|
|
9
|
+
*
|
|
10
|
+
* @cssprop --pd-assistant-input-bar-gap - Gap between input and button. Default: `8px`.
|
|
11
|
+
* @cssprop --pd-assistant-input-bar-padding - Bar padding. Default: `12px 20px 16px`.
|
|
12
|
+
*/
|
|
13
|
+
export declare class PdAssistantInputBar extends LitElement {
|
|
14
|
+
/** Placeholder text for the input field. */
|
|
15
|
+
placeholder: string;
|
|
16
|
+
/** Icon for the submit button. */
|
|
17
|
+
buttonIcon: any;
|
|
18
|
+
/** Button label text (shown if no icon, or as tooltip). */
|
|
19
|
+
buttonText: string;
|
|
20
|
+
/** Disable the input bar. */
|
|
21
|
+
disabled: boolean;
|
|
22
|
+
private _value;
|
|
23
|
+
static styles: CSSResultGroup;
|
|
24
|
+
render(): import('lit').TemplateResult<1>;
|
|
25
|
+
private _onInputChange;
|
|
26
|
+
private _onSubmit;
|
|
27
|
+
/** Clear the input field. */
|
|
28
|
+
clear(): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=PdAssistantInputBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdAssistantInputBar.d.ts","sourceRoot":"","sources":["../../src/pd-assistant-input-bar/PdAssistantInputBar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAI5D,OAAO,0CAA0C,CAAC;AAClD,OAAO,4CAA4C,CAAC;AACpD,OAAO,6CAA6C,CAAC;AAErD;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,4CAA4C;IAE5C,WAAW,SAA6B;IAExC,kCAAkC;IAElC,UAAU,MAAuB;IAEjC,2DAA2D;IAE3D,UAAU,SAAY;IAEtB,6BAA6B;IAE7B,QAAQ,UAAS;IAER,OAAO,CAAC,MAAM,CAAM;IAE7B,OAAgB,MAAM,EAAE,cAAc,CAiBpC;IAEO,MAAM;IAoBf,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IAajB,6BAA6B;IACtB,KAAK,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { LitElement, css, html } from 'lit';
|
|
2
|
+
import { property, state } from 'lit/decorators.js';
|
|
3
|
+
import { pdIcons } from '@progressive-development/pd-icon';
|
|
4
|
+
import '@progressive-development/pd-icon/pd-icon';
|
|
5
|
+
import '@progressive-development/pd-forms/pd-input';
|
|
6
|
+
import '@progressive-development/pd-forms/pd-button';
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
10
|
+
var result = void 0 ;
|
|
11
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12
|
+
if (decorator = decorators[i])
|
|
13
|
+
result = (decorator(target, key, result) ) || result;
|
|
14
|
+
if (result) __defProp(target, key, result);
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
class PdAssistantInputBar extends LitElement {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.placeholder = "Suchbegriff eingeben...";
|
|
21
|
+
this.buttonIcon = pdIcons.ICON_SEARCH;
|
|
22
|
+
this.buttonText = "Suchen";
|
|
23
|
+
this.disabled = false;
|
|
24
|
+
this._value = "";
|
|
25
|
+
}
|
|
26
|
+
static {
|
|
27
|
+
this.styles = css`
|
|
28
|
+
:host {
|
|
29
|
+
display: block;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.input-row {
|
|
33
|
+
display: flex;
|
|
34
|
+
gap: var(--pd-assistant-input-bar-gap, 8px);
|
|
35
|
+
padding: var(--pd-assistant-input-bar-padding, 12px 20px 16px);
|
|
36
|
+
border-top: 1px solid var(--pd-default-light-col, #e0e0e0);
|
|
37
|
+
align-items: center;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.input-row pd-input {
|
|
41
|
+
flex: 1;
|
|
42
|
+
--pd-input-field-width: 100%;
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
render() {
|
|
47
|
+
return html`
|
|
48
|
+
<div class="input-row">
|
|
49
|
+
<pd-input
|
|
50
|
+
placeHolder="${this.placeholder}"
|
|
51
|
+
.value="${this._value}"
|
|
52
|
+
?disabled="${this.disabled}"
|
|
53
|
+
@pd-form-element-change="${this._onInputChange}"
|
|
54
|
+
@enter-pressed="${this._onSubmit}"
|
|
55
|
+
></pd-input>
|
|
56
|
+
<pd-button
|
|
57
|
+
text="${this.buttonText}"
|
|
58
|
+
primary
|
|
59
|
+
?disabled="${this.disabled || !this._value.trim()}"
|
|
60
|
+
@button-clicked="${this._onSubmit}"
|
|
61
|
+
></pd-button>
|
|
62
|
+
</div>
|
|
63
|
+
`;
|
|
64
|
+
}
|
|
65
|
+
_onInputChange(e) {
|
|
66
|
+
this._value = e.detail.value;
|
|
67
|
+
}
|
|
68
|
+
_onSubmit() {
|
|
69
|
+
const value = this._value.trim();
|
|
70
|
+
if (!value || this.disabled) return;
|
|
71
|
+
this.dispatchEvent(
|
|
72
|
+
new CustomEvent("pd-assistant-submit", {
|
|
73
|
+
bubbles: true,
|
|
74
|
+
composed: true,
|
|
75
|
+
detail: { value }
|
|
76
|
+
})
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
/** Clear the input field. */
|
|
80
|
+
clear() {
|
|
81
|
+
this._value = "";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
__decorateClass([
|
|
85
|
+
property({ type: String })
|
|
86
|
+
], PdAssistantInputBar.prototype, "placeholder");
|
|
87
|
+
__decorateClass([
|
|
88
|
+
property({ type: String })
|
|
89
|
+
], PdAssistantInputBar.prototype, "buttonIcon");
|
|
90
|
+
__decorateClass([
|
|
91
|
+
property({ type: String })
|
|
92
|
+
], PdAssistantInputBar.prototype, "buttonText");
|
|
93
|
+
__decorateClass([
|
|
94
|
+
property({ type: Boolean })
|
|
95
|
+
], PdAssistantInputBar.prototype, "disabled");
|
|
96
|
+
__decorateClass([
|
|
97
|
+
state()
|
|
98
|
+
], PdAssistantInputBar.prototype, "_value");
|
|
99
|
+
|
|
100
|
+
export { PdAssistantInputBar };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-assistant-input-bar.d.ts","sourceRoot":"","sources":["../../src/pd-assistant-input-bar/pd-assistant-input-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progressive-development/pd-dialog",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Progressive Development dialog components.",
|
|
5
5
|
"author": "PD Progressive Development",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
"./pd-popup-dialog": "./dist/pd-popup-dialog.js",
|
|
17
17
|
"./pd-popup": "./dist/pd-popup.js",
|
|
18
18
|
"./pd-submit-dialog": "./dist/pd-submit-dialog.js",
|
|
19
|
+
"./pd-assistant-input-bar": "./dist/pd-assistant-input-bar.js",
|
|
20
|
+
"./pd-assistant-dialog": "./dist/pd-assistant-dialog.js",
|
|
19
21
|
"./locales/be": "./dist/locales/be.js",
|
|
20
22
|
"./locales/de": "./dist/locales/de.js",
|
|
21
23
|
"./locales/en": "./dist/locales/en.js"
|
|
@@ -30,10 +32,10 @@
|
|
|
30
32
|
"lit": "^3.3.1",
|
|
31
33
|
"@lit/localize": "^0.12.2",
|
|
32
34
|
"tslib": "^2.8.1",
|
|
33
|
-
"@progressive-development/pd-shared-styles": "0.
|
|
34
|
-
"@progressive-development/pd-
|
|
35
|
-
"@progressive-development/pd-
|
|
36
|
-
"@progressive-development/pd-
|
|
35
|
+
"@progressive-development/pd-shared-styles": "0.4.0",
|
|
36
|
+
"@progressive-development/pd-price": "1.0.2",
|
|
37
|
+
"@progressive-development/pd-icon": "1.1.0",
|
|
38
|
+
"@progressive-development/pd-forms": "1.1.0"
|
|
37
39
|
},
|
|
38
40
|
"customElements": "custom-elements.json",
|
|
39
41
|
"keywords": [
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { HTMLTemplateResult, CSSResultGroup } from 'lit';
|
|
2
|
-
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
3
|
-
import { PdConfirmDialog, PdDialogType } from './PdConfirmDialog.js';
|
|
4
|
-
/**
|
|
5
|
-
* Example: Simple confirm dialog with warning
|
|
6
|
-
*/
|
|
7
|
-
declare class ExampleDeleteConfirm extends PdConfirmDialog {
|
|
8
|
-
protected _dialogTitle: string;
|
|
9
|
-
protected _dialogType: PdDialogType;
|
|
10
|
-
protected _singleButton: boolean;
|
|
11
|
-
itemName: string;
|
|
12
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Example: Info dialog with single button
|
|
16
|
-
*/
|
|
17
|
-
declare class ExampleInfoDialog extends PdConfirmDialog {
|
|
18
|
-
protected _dialogTitle: string;
|
|
19
|
-
protected _dialogType: PdDialogType;
|
|
20
|
-
protected _singleButton: boolean;
|
|
21
|
-
message: string;
|
|
22
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Example: Error dialog with custom content
|
|
26
|
-
*/
|
|
27
|
-
declare class ExampleErrorDialog extends PdConfirmDialog {
|
|
28
|
-
protected _dialogTitle: string;
|
|
29
|
-
protected _dialogType: PdDialogType;
|
|
30
|
-
protected _singleButton: boolean;
|
|
31
|
-
errorCode: string;
|
|
32
|
-
errorMessage: string;
|
|
33
|
-
static styles: CSSResultGroup;
|
|
34
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Example: Help dialog with formatted content
|
|
38
|
-
*/
|
|
39
|
-
declare class ExampleHelpDialog extends PdConfirmDialog {
|
|
40
|
-
protected _dialogTitle: string;
|
|
41
|
-
protected _dialogType: PdDialogType;
|
|
42
|
-
protected _singleButton: boolean;
|
|
43
|
-
static styles: CSSResultGroup;
|
|
44
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
45
|
-
}
|
|
46
|
-
declare global {
|
|
47
|
-
interface HTMLElementTagNameMap {
|
|
48
|
-
"example-delete-confirm": ExampleDeleteConfirm;
|
|
49
|
-
"example-info-dialog": ExampleInfoDialog;
|
|
50
|
-
"example-error-dialog": ExampleErrorDialog;
|
|
51
|
-
"example-help-dialog": ExampleHelpDialog;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Story arguments interface for pd-confirm-dialog examples.
|
|
56
|
-
* Maps to the example components' properties.
|
|
57
|
-
*/
|
|
58
|
-
interface PdConfirmDialogArgs {
|
|
59
|
-
/** Item name for delete confirmation */
|
|
60
|
-
itemName: string;
|
|
61
|
-
/** Confirm button text */
|
|
62
|
-
confirmButtonText: string;
|
|
63
|
-
/** Cancel button text */
|
|
64
|
-
cancelButtonText: string;
|
|
65
|
-
/** Enable closing with Escape key */
|
|
66
|
-
closeByEscape: boolean;
|
|
67
|
-
/** Enable closing by clicking the backdrop */
|
|
68
|
-
closeByBackdrop: boolean;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* ## PdConfirmDialog (Abstract Base Class)
|
|
72
|
-
*
|
|
73
|
-
* Abstract base class for creating standardized confirmation dialogs.
|
|
74
|
-
* Not used directly -- extend it and implement the required abstract members.
|
|
75
|
-
*
|
|
76
|
-
* ### Features
|
|
77
|
-
* - Dialog types: info, warn, error, help with corresponding icons
|
|
78
|
-
* - Two-button mode (confirm + cancel) or single-button mode
|
|
79
|
-
* - Configurable button text via properties
|
|
80
|
-
* - Escape key and backdrop click close support
|
|
81
|
-
* - Standardized events: `pd-dialog-confirm` and `pd-dialog-cancel`
|
|
82
|
-
*
|
|
83
|
-
* ### How to Extend
|
|
84
|
-
* Implement these abstract members:
|
|
85
|
-
* - `_dialogTitle`: Dialog title string
|
|
86
|
-
* - `_dialogType`: One of `"info" | "warn" | "error" | "help"`
|
|
87
|
-
* - `_singleButton`: `true` for single confirm button, `false` for confirm + cancel
|
|
88
|
-
* - `_renderContent()`: Returns the dialog body as `HTMLTemplateResult`
|
|
89
|
-
*
|
|
90
|
-
* ### Exported Constants
|
|
91
|
-
* - `BUTTON_KEY_CONFIRM` / `BUTTON_KEY_CANCEL`: Button key identifiers
|
|
92
|
-
* - `EVENT_CONFIRM` / `EVENT_CANCEL`: Event name constants
|
|
93
|
-
*/
|
|
94
|
-
declare const meta: Meta<PdConfirmDialogArgs>;
|
|
95
|
-
export default meta;
|
|
96
|
-
type Story = StoryObj<PdConfirmDialogArgs>;
|
|
97
|
-
/** Warning dialog with confirm and cancel buttons. Typical use case: Delete confirmation. */
|
|
98
|
-
export declare const Default: Story;
|
|
99
|
-
/** Overview of all four dialog types: warning, info, error, and help. */
|
|
100
|
-
export declare const AllTypes: Story;
|
|
101
|
-
/** Info dialog with single button -- typical success notification. */
|
|
102
|
-
export declare const InfoNotification: Story;
|
|
103
|
-
/** Error dialog with styled error details section. */
|
|
104
|
-
export declare const ErrorWithDetails: Story;
|
|
105
|
-
/** Help dialog with formatted keyboard shortcuts list. */
|
|
106
|
-
export declare const HelpDialog: Story;
|
|
107
|
-
//# sourceMappingURL=pd-confirm-dialog.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pd-confirm-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/pd-confirm-dialog/pd-confirm-dialog.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,kBAAkB,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EACL,eAAe,EACf,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,cACM,oBAAqB,SAAQ,eAAe;IAChD,SAAS,CAAC,YAAY,SAAiB;IACvC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAU;IAC7C,SAAS,CAAC,aAAa,UAAS;IAGhC,QAAQ,SAAe;IAEvB,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAM/C;AAED;;GAEG;AACH,cACM,iBAAkB,SAAQ,eAAe;IAC7C,SAAS,CAAC,YAAY,SAAiB;IACvC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAU;IAC7C,SAAS,CAAC,aAAa,UAAQ;IAG/B,OAAO,SAAuC;IAE9C,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAG/C;AAED;;GAEG;AACH,cACM,kBAAmB,SAAQ,eAAe;IAC9C,SAAS,CAAC,YAAY,SAAoB;IAC1C,SAAS,CAAC,WAAW,EAAE,YAAY,CAAW;IAC9C,SAAS,CAAC,aAAa,UAAQ;IAG/B,SAAS,SAAU;IAGnB,YAAY,SAAmC;IAE/C,MAAM,CAAC,MAAM,EAaR,cAAc,CAAC;IAEpB,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAM/C;AAED;;GAEG;AACH,cACM,iBAAkB,SAAQ,eAAe;IAC7C,SAAS,CAAC,YAAY,SAAwB;IAC9C,SAAS,CAAC,WAAW,EAAE,YAAY,CAAU;IAC7C,SAAS,CAAC,aAAa,UAAQ;IAE/B,MAAM,CAAC,MAAM,EAoBR,cAAc,CAAC;IAEpB,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAY/C;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,oBAAoB,CAAC;QAC/C,qBAAqB,EAAE,iBAAiB,CAAC;QACzC,sBAAsB,EAAE,kBAAkB,CAAC;QAC3C,qBAAqB,EAAE,iBAAiB,CAAC;KAC1C;CACF;AAMD;;;GAGG;AACH,UAAU,mBAAmB;IAC3B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAgFnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAM3C,6FAA6F;AAC7F,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAMF,yEAAyE;AACzE,eAAO,MAAM,QAAQ,EAAE,KAmDtB,CAAC;AAMF,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,EAAE,KAoB9B,CAAC;AAMF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,KAqB9B,CAAC;AAMF,0DAA0D;AAC1D,eAAO,MAAM,UAAU,EAAE,KAmBxB,CAAC"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { HTMLTemplateResult, CSSResultGroup } from 'lit';
|
|
2
|
-
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
3
|
-
import { PdFormDialog } from './PdFormDialog.js';
|
|
4
|
-
/**
|
|
5
|
-
* Example: Contact form data interface
|
|
6
|
-
*/
|
|
7
|
-
interface ContactFormData {
|
|
8
|
-
name: string;
|
|
9
|
-
email: string;
|
|
10
|
-
message: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Example: Contact form dialog
|
|
14
|
-
*/
|
|
15
|
-
declare class ExampleContactForm extends PdFormDialog<ContactFormData> {
|
|
16
|
-
protected _dialogTitle: string;
|
|
17
|
-
protected _formData: ContactFormData;
|
|
18
|
-
static styles: CSSResultGroup;
|
|
19
|
-
protected _isValidFormData(): boolean;
|
|
20
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Example: User profile form data interface
|
|
24
|
-
*/
|
|
25
|
-
interface ProfileFormData {
|
|
26
|
-
displayName: string;
|
|
27
|
-
bio: string;
|
|
28
|
-
language: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Example: User profile form dialog
|
|
32
|
-
*/
|
|
33
|
-
declare class ExampleProfileForm extends PdFormDialog<ProfileFormData> {
|
|
34
|
-
protected _dialogTitle: string;
|
|
35
|
-
protected _formData: ProfileFormData;
|
|
36
|
-
static styles: CSSResultGroup;
|
|
37
|
-
protected _isValidFormData(): boolean;
|
|
38
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Example: Simple feedback form data interface
|
|
42
|
-
*/
|
|
43
|
-
interface FeedbackFormData {
|
|
44
|
-
rating: string;
|
|
45
|
-
feedback: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Example: Feedback form dialog with custom rating UI
|
|
49
|
-
*/
|
|
50
|
-
declare class ExampleFeedbackForm extends PdFormDialog<FeedbackFormData> {
|
|
51
|
-
protected _dialogTitle: string;
|
|
52
|
-
protected _formData: FeedbackFormData;
|
|
53
|
-
static styles: CSSResultGroup;
|
|
54
|
-
protected _isValidFormData(): boolean;
|
|
55
|
-
private _selectRating;
|
|
56
|
-
protected _renderContent(): HTMLTemplateResult;
|
|
57
|
-
}
|
|
58
|
-
declare global {
|
|
59
|
-
interface HTMLElementTagNameMap {
|
|
60
|
-
"example-contact-form": ExampleContactForm;
|
|
61
|
-
"example-profile-form": ExampleProfileForm;
|
|
62
|
-
"example-feedback-form": ExampleFeedbackForm;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Story arguments interface for pd-form-dialog examples.
|
|
67
|
-
* Maps to the example components' properties.
|
|
68
|
-
*/
|
|
69
|
-
interface PdFormDialogArgs {
|
|
70
|
-
/** Save button text */
|
|
71
|
-
saveButtonText: string;
|
|
72
|
-
/** Cancel button text */
|
|
73
|
-
cancelButtonText: string;
|
|
74
|
-
/** Show required field info text */
|
|
75
|
-
showRequiredFieldInfo: boolean;
|
|
76
|
-
/** Double-submit prevention timeout in ms */
|
|
77
|
-
submitDisableTimeout: number;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* ## PdFormDialog<T> (Abstract Base Class)
|
|
81
|
-
*
|
|
82
|
-
* Generic abstract base class for form dialogs with integrated validation.
|
|
83
|
-
* Not used directly -- extend it with a type parameter for your form data.
|
|
84
|
-
*
|
|
85
|
-
* ### Features
|
|
86
|
-
* - Integrated form validation via `pd-form-container`
|
|
87
|
-
* - Save button automatically disabled until form is valid
|
|
88
|
-
* - Double-submit prevention with configurable timeout
|
|
89
|
-
* - Type-safe form data handling via generic `T` parameter
|
|
90
|
-
* - Standardized events: `pd-form-submit` (with typed payload) and `pd-dialog-cancel`
|
|
91
|
-
* - Required field info display (optional)
|
|
92
|
-
*
|
|
93
|
-
* ### How to Extend
|
|
94
|
-
* Implement these abstract members:
|
|
95
|
-
* - `_dialogTitle`: Dialog title string
|
|
96
|
-
* - `_formData`: Your typed form data object
|
|
97
|
-
* - `_isValidFormData()`: Additional validation beyond field-level validation
|
|
98
|
-
* - `_renderContent()`: Returns form fields as `HTMLTemplateResult`
|
|
99
|
-
*
|
|
100
|
-
* ### Validation Flow
|
|
101
|
-
* 1. Each form field validates individually (via pd-form-container)
|
|
102
|
-
* 2. `_isValidFormData()` runs additional cross-field validation
|
|
103
|
-
* 3. Save button enables only when both pass
|
|
104
|
-
*/
|
|
105
|
-
declare const meta: Meta<PdFormDialogArgs>;
|
|
106
|
-
export default meta;
|
|
107
|
-
type Story = StoryObj<PdFormDialogArgs>;
|
|
108
|
-
/** Contact form dialog with name, email, and message fields. Interactive via Controls panel. */
|
|
109
|
-
export declare const Default: Story;
|
|
110
|
-
/** User profile form with display name, bio, and language selection. */
|
|
111
|
-
export declare const ProfileForm: Story;
|
|
112
|
-
/** Feedback form with custom rating buttons and optional text area. */
|
|
113
|
-
export declare const FeedbackForm: Story;
|
|
114
|
-
/** Overview of all three form dialog implementations side by side. */
|
|
115
|
-
export declare const AllForms: Story;
|
|
116
|
-
/** Demonstrates the validation flow: Save button is disabled until form is valid. */
|
|
117
|
-
export declare const ValidationBehavior: Story;
|
|
118
|
-
//# sourceMappingURL=pd-form-dialog.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pd-form-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/pd-form-dialog/pd-form-dialog.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,kBAAkB,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,4CAA4C,CAAC;AACpD,OAAO,iDAAiD,CAAC;AACzD,OAAO,6CAA6C,CAAC;AAErD,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AAOpE;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,cACM,kBAAmB,SAAQ,YAAY,CAAC,eAAe,CAAC;IAC5D,SAAS,CAAC,YAAY,SAAgB;IAGtC,SAAS,CAAC,SAAS,EAAE,eAAe,CAIlC;IAEF,MAAM,CAAC,MAAM,EASR,cAAc,CAAC;IAEpB,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC,SAAS,CAAC,cAAc,IAAI,kBAAkB;CA4B/C;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cACM,kBAAmB,SAAQ,YAAY,CAAC,eAAe,CAAC;IAC5D,SAAS,CAAC,YAAY,SAAkB;IAGxC,SAAS,CAAC,SAAS,EAAE,eAAe,CAIlC;IAEF,MAAM,CAAC,MAAM,EASR,cAAc,CAAC;IAEpB,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAgC/C;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cACM,mBAAoB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC9D,SAAS,CAAC,YAAY,SAAqB;IAG3C,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAGnC;IAEF,MAAM,CAAC,MAAM,EA6BR,cAAc,CAAC;IAEpB,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC,OAAO,CAAC,aAAa;IAKrB,SAAS,CAAC,cAAc,IAAI,kBAAkB;CAiC/C;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;QAC3C,sBAAsB,EAAE,kBAAkB,CAAC;QAC3C,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAMD;;;GAGG;AACH,UAAU,gBAAgB;IACxB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,6CAA6C;IAC7C,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,gBAAgB,CA0GhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAMxC,gGAAgG;AAChG,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAMF,wEAAwE;AACxE,eAAO,MAAM,WAAW,EAAE,KAoBzB,CAAC;AAMF,uEAAuE;AACvE,eAAO,MAAM,YAAY,EAAE,KAqB1B,CAAC;AAMF,sEAAsE;AACtE,eAAO,MAAM,QAAQ,EAAE,KAwCtB,CAAC;AAMF,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,EAAE,KA6BhC,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
-
/**
|
|
3
|
-
* Story arguments interface for pd-popup component.
|
|
4
|
-
* Maps to the component's public API.
|
|
5
|
-
*/
|
|
6
|
-
interface PdPopupArgs {
|
|
7
|
-
/** Content for the trigger slot */
|
|
8
|
-
smallViewSlot: string;
|
|
9
|
-
/** Content displayed in the popup */
|
|
10
|
-
contentSlot: string;
|
|
11
|
-
/** Enable closing with Escape key */
|
|
12
|
-
closeByEscape: boolean;
|
|
13
|
-
/** Enable closing by clicking the backdrop overlay */
|
|
14
|
-
closeByBackdrop: boolean;
|
|
15
|
-
/** Hide the built-in close icon */
|
|
16
|
-
hideCloseIcon: boolean;
|
|
17
|
-
/** Block body scroll when popup is open */
|
|
18
|
-
blockScroll: boolean;
|
|
19
|
-
/** Accessible label for the popup */
|
|
20
|
-
popupLabel: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* ## pd-popup
|
|
24
|
-
*
|
|
25
|
-
* A modal popup component triggered by clicking a slot element.
|
|
26
|
-
*
|
|
27
|
-
* ### Features
|
|
28
|
-
* - Trigger element via `small-view` slot (click to open)
|
|
29
|
-
* - Full-screen modal overlay with centered content
|
|
30
|
-
* - Built-in close icon (keyboard accessible, can be hidden)
|
|
31
|
-
* - Optional close on Escape key press (`closeByEscape`)
|
|
32
|
-
* - Optional close on backdrop click (`closeByBackdrop`)
|
|
33
|
-
* - Programmatic control via `showPopup()` and `hidePopup()` methods
|
|
34
|
-
* - Body scroll blocking when open (`blockScroll`)
|
|
35
|
-
* - Accessibility: `role="dialog"`, `aria-modal="true"`, `aria-label`
|
|
36
|
-
*
|
|
37
|
-
* ### Accessibility
|
|
38
|
-
* - Uses `role="dialog"` and `aria-modal="true"` on the modal container
|
|
39
|
-
* - `aria-label` set via `popupLabel` property
|
|
40
|
-
* - Close icon is keyboard focusable with `role="button"` and `aria-label`
|
|
41
|
-
* - Supports Escape key and backdrop click for closing
|
|
42
|
-
*/
|
|
43
|
-
declare const meta: Meta<PdPopupArgs>;
|
|
44
|
-
export default meta;
|
|
45
|
-
type Story = StoryObj<PdPopupArgs>;
|
|
46
|
-
/** Default popup with simple text content. Interactive via Controls panel. */
|
|
47
|
-
export declare const Default: Story;
|
|
48
|
-
/** Popup with structured HTML content including headings, text, and lists. */
|
|
49
|
-
export declare const RichContent: Story;
|
|
50
|
-
/** Demonstrates the three closing mechanisms: close icon, Escape key, and backdrop click. */
|
|
51
|
-
export declare const ClosingOptions: Story;
|
|
52
|
-
/** Popup with the built-in close icon hidden. Content provides its own close mechanism. */
|
|
53
|
-
export declare const HiddenCloseIcon: Story;
|
|
54
|
-
/** Demonstrates opening and closing the popup programmatically via `showPopup()` / `hidePopup()`. */
|
|
55
|
-
export declare const ProgrammaticControl: Story;
|
|
56
|
-
/** CSS Custom Properties -- Branded and Redesigned variants. */
|
|
57
|
-
export declare const CustomStyling: Story;
|
|
58
|
-
//# sourceMappingURL=pd-popup.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pd-popup.stories.d.ts","sourceRoot":"","sources":["../../src/pd-popup/pd-popup.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,eAAe,CAAC;AAMvB;;;GAGG;AACH,UAAU,WAAW;IACnB,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,CA8F3B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAMnC,8EAA8E;AAC9E,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAMjC,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,cAAc,EAAE,KAiE5B,CAAC;AAMF,2FAA2F;AAC3F,eAAO,MAAM,eAAe,EAAE,KA6B7B,CAAC;AAMF,qGAAqG;AACrG,eAAO,MAAM,mBAAmB,EAAE,KA6CjC,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KAyG3B,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
-
import { PdDialogButton } from '../types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Story arguments interface for pd-popup-dialog component.
|
|
5
|
-
* Maps to the component's public API.
|
|
6
|
-
*/
|
|
7
|
-
interface PdPopupDialogArgs {
|
|
8
|
-
/** Dialog title text */
|
|
9
|
-
title: string;
|
|
10
|
-
/** Dialog type: info, warn, error, help */
|
|
11
|
-
type: "info" | "warn" | "error" | "help";
|
|
12
|
-
/** Footer button configurations */
|
|
13
|
-
buttons: PdDialogButton[];
|
|
14
|
-
/** Enable closing with Escape key */
|
|
15
|
-
closeByEscape: boolean;
|
|
16
|
-
/** Enable closing by clicking the backdrop overlay */
|
|
17
|
-
closeByBackdrop: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* ## pd-popup-dialog
|
|
21
|
-
*
|
|
22
|
-
* A structured modal dialog with colored header, content slot, and configurable footer buttons.
|
|
23
|
-
*
|
|
24
|
-
* ### Features
|
|
25
|
-
* - Dialog types: info, warn, error, help (each with corresponding icon)
|
|
26
|
-
* - Colored header with icon and title text
|
|
27
|
-
* - Content area via `content` slot
|
|
28
|
-
* - Configurable footer buttons via `buttons` array property
|
|
29
|
-
* - Optional close on Escape key (`closeByEscape`)
|
|
30
|
-
* - Optional close on backdrop click (`closeByBackdrop`)
|
|
31
|
-
* - Programmatic control via `showPopup()` / `hidePopup()` methods
|
|
32
|
-
* - Mobile-responsive: buttons stack vertically on small screens
|
|
33
|
-
*
|
|
34
|
-
* ### Accessibility
|
|
35
|
-
* - Uses `role="dialog"` and `aria-modal="true"`
|
|
36
|
-
* - Title linked via `aria-labelledby` for screen readers
|
|
37
|
-
* - Footer buttons use native `<pd-button>` with keyboard support
|
|
38
|
-
* - Escape key close support
|
|
39
|
-
*/
|
|
40
|
-
declare const meta: Meta<PdPopupDialogArgs>;
|
|
41
|
-
export default meta;
|
|
42
|
-
type Story = StoryObj<PdPopupDialogArgs>;
|
|
43
|
-
/** Default info dialog with OK and Cancel buttons. Interactive via Controls panel. */
|
|
44
|
-
export declare const Default: Story;
|
|
45
|
-
/** All four dialog types with their corresponding icons side by side. */
|
|
46
|
-
export declare const AllTypes: Story;
|
|
47
|
-
/** Different footer button configurations: single, two, and three buttons. */
|
|
48
|
-
export declare const ButtonConfigurations: Story;
|
|
49
|
-
/** Demonstrates opening/closing the dialog programmatically via `showPopup()` / `hidePopup()`. */
|
|
50
|
-
export declare const ProgrammaticControl: Story;
|
|
51
|
-
/** Dialog with a long title that wraps to multiple lines. */
|
|
52
|
-
export declare const LongTitle: Story;
|
|
53
|
-
/** CSS Custom Properties -- Branded and Redesigned variants. */
|
|
54
|
-
export declare const CustomStyling: Story;
|
|
55
|
-
//# sourceMappingURL=pd-popup-dialog.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pd-popup-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/pd-popup-dialog/pd-popup-dialog.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,sBAAsB,CAAC;AAM9B;;;GAGG;AACH,UAAU,iBAAiB;IACzB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACzC,mCAAmC;IACnC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAyBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,iBAAiB,CA+FjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAMzC,sFAAsF;AACtF,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAMjC,yEAAyE;AACzE,eAAO,MAAM,QAAQ,EAAE,KA0DtB,CAAC;AAMF,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,KA+DlC,CAAC;AAMF,kGAAkG;AAClG,eAAO,MAAM,mBAAmB,EAAE,KAyDjC,CAAC;AAMF,6DAA6D;AAC7D,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KA4H3B,CAAC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
-
import { PdSubmitDialogStatus } from '../types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Story arguments interface for pd-submit-dialog component.
|
|
5
|
-
* Maps to the component's public API.
|
|
6
|
-
*/
|
|
7
|
-
interface PdSubmitDialogArgs {
|
|
8
|
-
/** Dialog title text */
|
|
9
|
-
title: string;
|
|
10
|
-
/** Current status: SEND (1), SUCCESS (2), or FAILED (3) */
|
|
11
|
-
status: PdSubmitDialogStatus;
|
|
12
|
-
/** Optional status message text */
|
|
13
|
-
statusMsg: string;
|
|
14
|
-
/** Confirmation email address */
|
|
15
|
-
confirmMail: string;
|
|
16
|
-
/** Custom progress text map */
|
|
17
|
-
progressTxtMap: Map<number, string>;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* ## pd-submit-dialog
|
|
21
|
-
*
|
|
22
|
-
* A progress dialog that shows loading, success, and failure states during async operations.
|
|
23
|
-
*
|
|
24
|
-
* ### Features
|
|
25
|
-
* - Three progress states: SEND (loading spinner), SUCCESS (check icon), FAILED (error icon)
|
|
26
|
-
* - Custom progress text per state via `progressTxtMap`
|
|
27
|
-
* - Optional status message below the progress indicator
|
|
28
|
-
* - Dynamic footer buttons based on current status (no buttons while loading)
|
|
29
|
-
* - Content slot for additional information above the progress area
|
|
30
|
-
* - Built on top of `pd-popup-dialog`
|
|
31
|
-
*
|
|
32
|
-
* ### Status Flow
|
|
33
|
-
* 1. `PdSubmitDialogStatus.SEND` (1) -- Loading spinner, no buttons
|
|
34
|
-
* 2. `PdSubmitDialogStatus.SUCCESS` (2) -- Success icon, "Close" button
|
|
35
|
-
* 3. `PdSubmitDialogStatus.FAILED` (3) -- Error icon, action buttons
|
|
36
|
-
*/
|
|
37
|
-
declare const meta: Meta<PdSubmitDialogArgs>;
|
|
38
|
-
export default meta;
|
|
39
|
-
type Story = StoryObj<PdSubmitDialogArgs>;
|
|
40
|
-
/** Default submit dialog in sending state with loading spinner. Interactive via Controls panel. */
|
|
41
|
-
export declare const Default: Story;
|
|
42
|
-
/** All three progress states side by side: Sending, Success, and Failed. */
|
|
43
|
-
export declare const AllStates: Story;
|
|
44
|
-
/** Dialog in success state with check icon and Close button. */
|
|
45
|
-
export declare const SuccessState: Story;
|
|
46
|
-
/** Dialog in failed state with error icon, status message, and action buttons. */
|
|
47
|
-
export declare const FailedState: Story;
|
|
48
|
-
/** Demonstrates the `submit-content` slot with rich HTML content above the progress area. */
|
|
49
|
-
export declare const WithSlotContent: Story;
|
|
50
|
-
//# sourceMappingURL=pd-submit-dialog.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pd-submit-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/pd-submit-dialog/pd-submit-dialog.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,uBAAuB,CAAC;AAM/B;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,MAAM,EAAE,oBAAoB,CAAC;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAsBD;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CA0FlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAM1C,mGAAmG;AACnG,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAMjC,4EAA4E;AAC5E,eAAO,MAAM,SAAS,EAAE,KA0DvB,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,YAAY,EAAE,KA2B1B,CAAC;AAMF,kFAAkF;AAClF,eAAO,MAAM,WAAW,EAAE,KA2BzB,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,eAAe,EAAE,KAoC7B,CAAC"}
|