@progressive-development/pd-contact 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -0
  4. package/dist/pd-bg-image-form/PdBgImageForm.d.ts +65 -0
  5. package/dist/pd-bg-image-form/PdBgImageForm.d.ts.map +1 -0
  6. package/dist/pd-bg-image-form/PdBgImageForm.js +394 -0
  7. package/dist/pd-bg-image-form/pd-bg-image-form.d.ts +4 -0
  8. package/dist/pd-bg-image-form/pd-bg-image-form.d.ts.map +1 -0
  9. package/dist/pd-bg-image-form.d.ts +2 -0
  10. package/dist/pd-bg-image-form.js +8 -0
  11. package/dist/pd-bg-select-form/PdBgSelectForm.d.ts +73 -0
  12. package/dist/pd-bg-select-form/PdBgSelectForm.d.ts.map +1 -0
  13. package/dist/pd-bg-select-form/PdBgSelectForm.js +338 -0
  14. package/dist/pd-bg-select-form/pd-bg-select-form.d.ts +4 -0
  15. package/dist/pd-bg-select-form/pd-bg-select-form.d.ts.map +1 -0
  16. package/dist/pd-bg-select-form.d.ts +2 -0
  17. package/dist/pd-bg-select-form.js +8 -0
  18. package/dist/pd-contact/PdContact.d.ts +7 -0
  19. package/dist/pd-contact/PdContact.d.ts.map +1 -1
  20. package/dist/pd-contact/PdContact.js +45 -8
  21. package/dist/pd-gradient-form/PdGradientForm.d.ts +49 -0
  22. package/dist/pd-gradient-form/PdGradientForm.d.ts.map +1 -0
  23. package/dist/pd-gradient-form/PdGradientForm.js +259 -0
  24. package/dist/pd-gradient-form/pd-gradient-form.d.ts +4 -0
  25. package/dist/pd-gradient-form/pd-gradient-form.d.ts.map +1 -0
  26. package/dist/pd-gradient-form.d.ts +2 -0
  27. package/dist/pd-gradient-form.js +8 -0
  28. package/dist/types.js +3 -1
  29. package/package.json +5 -2
  30. package/dist/pd-contact/pd-contact-edit.stories.d.ts +0 -53
  31. package/dist/pd-contact/pd-contact-edit.stories.d.ts.map +0 -1
  32. package/dist/pd-contact/pd-contact-view.stories.d.ts +0 -55
  33. package/dist/pd-contact/pd-contact-view.stories.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,4 +1,10 @@
1
1
  export { PdContact } from './pd-contact/pd-contact.js';
2
+ export { PdGradientForm } from './pd-gradient-form/pd-gradient-form.js';
3
+ export type { GradientValue } from './pd-gradient-form/pd-gradient-form.js';
4
+ export { PdBgImageForm } from './pd-bg-image-form/pd-bg-image-form.js';
5
+ export type { BgImageValue } from './pd-bg-image-form/pd-bg-image-form.js';
6
+ export { PdBgSelectForm } from './pd-bg-select-form/pd-bg-select-form.js';
7
+ export type { BgSelectValue, BgMode, } from './pd-bg-select-form/pd-bg-select-form.js';
2
8
  export type { PdContactData, PdContactFormOptions, PdContactMatch, SocialEntry, C_ADDITIONAL, C_BTWNR, C_CITY, C_COMPANY, C_EMAIL, C_FIRSTNAME, C_LASTNAME, C_LOGO, C_PHONE1, C_PROPERTY_DATE, C_SOCIAL_MEDIA, C_STREET, C_STREET_NR, C_TITLE_NAME, C_TYPE, C_WEBSITE, C_ZIP, } from './types.js';
3
9
  export { templates as beTemplates } from './generated/locales/be.js';
4
10
  export { templates as deTemplates } from './generated/locales/de.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,MAAM,EACN,SAAS,EACT,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,YAAY,EACV,aAAa,EACb,MAAM,GACP,MAAM,0CAA0C,CAAC;AAElD,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,MAAM,EACN,SAAS,EACT,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,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
@@ -1,5 +1,11 @@
1
1
  import './pd-contact.js';
2
+ import './pd-gradient-form.js';
3
+ import './pd-bg-image-form.js';
4
+ import './pd-bg-select-form.js';
2
5
  export { templates as beTemplates } from './locales/be.js';
3
6
  export { templates as deTemplates } from './locales/de.js';
4
7
  export { templates as enTemplates } from './locales/en.js';
8
+ export { PdBgImageForm } from './pd-bg-image-form/PdBgImageForm.js';
9
+ export { PdBgSelectForm } from './pd-bg-select-form/PdBgSelectForm.js';
5
10
  export { PdContact } from './pd-contact/PdContact.js';
11
+ export { PdGradientForm } from './pd-gradient-form/PdGradientForm.js';
@@ -0,0 +1,65 @@
1
+ import { CSSResultGroup, PropertyValues } from 'lit';
2
+ import { PdBaseUIInput } from '@progressive-development/pd-forms';
3
+ export interface BgImageValue {
4
+ image: string;
5
+ overlayColor: string;
6
+ overlayOpacity: number;
7
+ textShadow: boolean;
8
+ bgSize?: "cover" | "contain" | "auto";
9
+ bgRepeat?: "no-repeat" | "repeat" | "repeat-x" | "repeat-y";
10
+ }
11
+ /**
12
+ * Background image configuration form combining image upload, overlay opacity, and text shadow.
13
+ *
14
+ * Value format: JSON string `{"image":"[...]","overlayOpacity":20,"textShadow":true}`
15
+ *
16
+ * @tagname pd-bg-image-form
17
+ * @summary Background image form with upload, darkening slider, and text shadow toggle.
18
+ *
19
+ * @event pd-form-element-change - Fired when any value changes. Detail: `{ value, name, parsedValue, state }`.
20
+ *
21
+ * @cssprop --pd-bg-image-form-preview-height - Height of the image preview. Default: `6rem`.
22
+ */
23
+ export declare class PdBgImageForm extends PdBaseUIInput {
24
+ /** Label for the image upload. */
25
+ imageLabel: string;
26
+ /** Label for the overlay color picker. */
27
+ overlayColorLabel: string;
28
+ /** Label for the overlay opacity slider. */
29
+ overlayLabel: string;
30
+ /** Label for the text shadow checkbox. */
31
+ textShadowLabel: string;
32
+ /** Maximum overlay opacity percentage. */
33
+ maxOverlay: number;
34
+ /** Hide the live image preview. */
35
+ hidePreview: boolean;
36
+ /** Show background-size selector (cover/contain/auto). Default: hidden. */
37
+ showBgSize: boolean;
38
+ /** Show background-repeat selector. Default: hidden. */
39
+ showBgRepeat: boolean;
40
+ /** Hide the text-shadow checkbox. Default: shown (backward compat). */
41
+ hideTextShadow: boolean;
42
+ private _image;
43
+ private _imageSrc;
44
+ private _overlayColor;
45
+ private _overlayOpacity;
46
+ private _textShadow;
47
+ private _bgSize;
48
+ private _bgRepeat;
49
+ static styles: CSSResultGroup;
50
+ update(changedProps: PropertyValues<this>): void;
51
+ render(): import('lit').TemplateResult<1>;
52
+ private _renderPreview;
53
+ private _applyInitValue;
54
+ private _extractFirstSrc;
55
+ protected _getParsedValue(): BgImageValue;
56
+ private _innerStop;
57
+ private _onImageChange;
58
+ private _onOverlayColorChange;
59
+ private _onOverlayChange;
60
+ private _onTextShadowChange;
61
+ private _onBgSizeChange;
62
+ private _onBgRepeatChange;
63
+ private _emitValue;
64
+ }
65
+ //# sourceMappingURL=PdBgImageForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdBgImageForm.d.ts","sourceRoot":"","sources":["../../src/pd-bg-image-form/PdBgImageForm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAI9E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,+CAA+C,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,4CAA4C,CAAC;AACpD,OAAO,+CAA+C,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAI1D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;CAC7D;AAOD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C,kCAAkC;IAElC,UAAU,SAAqB;IAE/B,0CAA0C;IAE1C,iBAAiB,SAAmB;IAEpC,4CAA4C;IAE5C,YAAY,SAAoB;IAEhC,0CAA0C;IAE1C,eAAe,SAAwC;IAEvD,0CAA0C;IAE1C,UAAU,SAAM;IAEhB,mCAAmC;IAEnC,WAAW,UAAS;IAEpB,2EAA2E;IAE3E,UAAU,UAAS;IAEnB,wDAAwD;IAExD,YAAY,UAAS;IAErB,uEAAuE;IAEvE,cAAc,UAAS;IAEd,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,SAAS,CACZ;IAEd,OAAgB,MAAM,EAAE,cAAc,CAuCpC;IAIO,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAehD,MAAM;IAiJf,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;cASL,eAAe,IAAI,YAAY;IAalD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,UAAU;CAWnB"}
@@ -0,0 +1,394 @@
1
+ import { css, nothing, html } from 'lit';
2
+ import { property, state } from 'lit/decorators.js';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+ import { PdBaseUIInput } from '@progressive-development/pd-forms';
5
+ import '@progressive-development/pd-forms/pd-form-row';
6
+ import '@progressive-development/pd-forms/pd-input-image';
7
+ import '@progressive-development/pd-forms/pd-color-picker';
8
+ import '@progressive-development/pd-forms/pd-range';
9
+ import '@progressive-development/pd-forms/pd-checkbox';
10
+ import '@progressive-development/pd-forms/pd-radio-group';
11
+
12
+ var __defProp = Object.defineProperty;
13
+ var __decorateClass = (decorators, target, key, kind) => {
14
+ var result = void 0 ;
15
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
16
+ if (decorator = decorators[i])
17
+ result = (decorator(target, key, result) ) || result;
18
+ if (result) __defProp(target, key, result);
19
+ return result;
20
+ };
21
+ const DEFAULT_OVERLAY_COLOR = "#000000";
22
+ const DEFAULT_OVERLAY_OPACITY = 0;
23
+ class PdBgImageForm extends PdBaseUIInput {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.imageLabel = "Hintergrundbild";
27
+ this.overlayColorLabel = "Overlay-Farbe";
28
+ this.overlayLabel = "Overlay-Stärke";
29
+ this.textShadowLabel = "Text-Shadow für bessere Lesbarkeit";
30
+ this.maxOverlay = 80;
31
+ this.hidePreview = false;
32
+ this.showBgSize = false;
33
+ this.showBgRepeat = false;
34
+ this.hideTextShadow = false;
35
+ this._image = "";
36
+ this._imageSrc = "";
37
+ this._overlayColor = DEFAULT_OVERLAY_COLOR;
38
+ this._overlayOpacity = DEFAULT_OVERLAY_OPACITY;
39
+ this._textShadow = false;
40
+ this._bgSize = "cover";
41
+ this._bgRepeat = "no-repeat";
42
+ }
43
+ static {
44
+ this.styles = [
45
+ PdBaseUIInput.styles,
46
+ css`
47
+ :host {
48
+ display: block;
49
+ }
50
+
51
+ .image-preview {
52
+ position: relative;
53
+ height: var(--pd-bg-image-form-preview-height, 6rem);
54
+ border-radius: var(--pd-radius-md, 0.375rem);
55
+ border: 1px solid var(--pd-default-light-col, #cbd5e1);
56
+ margin-bottom: var(--pd-spacing-sm, 0.5rem);
57
+ overflow: hidden;
58
+ }
59
+
60
+ .image-preview .overlay {
61
+ position: absolute;
62
+ inset: 0;
63
+ pointer-events: none;
64
+ }
65
+
66
+ .image-preview .preview-text {
67
+ position: absolute;
68
+ inset: 0;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ color: #fff;
73
+ font-size: 0.875rem;
74
+ pointer-events: none;
75
+ }
76
+
77
+ .form-fields {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: var(--pd-form-container-row-gap, var(--pd-spacing-md));
81
+ }
82
+ `
83
+ ];
84
+ }
85
+ // ── Lifecycle ──────────────────────────────────────────────────────────────
86
+ update(changedProps) {
87
+ if (changedProps.has("initValue") && this.initValue) {
88
+ this._applyInitValue(this.initValue);
89
+ if (this.handleChangeForInitVal) {
90
+ this._handleChangedValue(this.initValue, void 0, true);
91
+ } else {
92
+ this._value = this.initValue;
93
+ }
94
+ changedProps.delete("initValue");
95
+ }
96
+ super.update(changedProps);
97
+ }
98
+ // ── Rendering ──────────────────────────────────────────────────────────────
99
+ render() {
100
+ const inputId = `${this.id}BgImageForm`;
101
+ const errorId = `${this.id}Error`;
102
+ return html`
103
+ ${this._renderLabel(inputId)}
104
+ ${this.hidePreview || !this._imageSrc ? nothing : this._renderPreview()}
105
+
106
+ <div class="form-fields">
107
+ <pd-form-row>
108
+ <pd-input-image
109
+ label="${this.imageLabel}"
110
+ max="1"
111
+ .initValue="${this._image}"
112
+ ?disabled="${this.disabled}"
113
+ @pd-form-element-change="${this._onImageChange}"
114
+ @pd-form-element-register="${this._innerStop}"
115
+ @validate-form="${this._innerStop}"
116
+ @field-change="${this._innerStop}"
117
+ ></pd-input-image>
118
+ </pd-form-row>
119
+
120
+ ${this.showBgSize ? html`
121
+ <pd-form-row>
122
+ <pd-radio-group
123
+ label="Bildgröße"
124
+ valueName="bgSize"
125
+ @pd-form-element-change="${this._onBgSizeChange}"
126
+ @pd-form-element-register="${this._innerStop}"
127
+ @validate-form="${this._innerStop}"
128
+ @field-change="${this._innerStop}"
129
+ >
130
+ <pd-checkbox
131
+ checkType="RADIO"
132
+ valueName="cover"
133
+ initValue="${this._bgSize === "cover"}"
134
+ >Ausfüllen</pd-checkbox
135
+ >
136
+ <pd-checkbox
137
+ checkType="RADIO"
138
+ valueName="contain"
139
+ initValue="${this._bgSize === "contain"}"
140
+ >Einpassen</pd-checkbox
141
+ >
142
+ <pd-checkbox
143
+ checkType="RADIO"
144
+ valueName="auto"
145
+ initValue="${this._bgSize === "auto"}"
146
+ >Original</pd-checkbox
147
+ >
148
+ </pd-radio-group>
149
+ </pd-form-row>
150
+ ` : nothing}
151
+ ${this.showBgRepeat ? html`
152
+ <pd-form-row>
153
+ <pd-radio-group
154
+ label="Wiederholung"
155
+ valueName="bgRepeat"
156
+ @pd-form-element-change="${this._onBgRepeatChange}"
157
+ @pd-form-element-register="${this._innerStop}"
158
+ @validate-form="${this._innerStop}"
159
+ @field-change="${this._innerStop}"
160
+ >
161
+ <pd-checkbox
162
+ checkType="RADIO"
163
+ valueName="no-repeat"
164
+ initValue="${this._bgRepeat === "no-repeat"}"
165
+ >Keine</pd-checkbox
166
+ >
167
+ <pd-checkbox
168
+ checkType="RADIO"
169
+ valueName="repeat"
170
+ initValue="${this._bgRepeat === "repeat"}"
171
+ >Kacheln</pd-checkbox
172
+ >
173
+ <pd-checkbox
174
+ checkType="RADIO"
175
+ valueName="repeat-x"
176
+ initValue="${this._bgRepeat === "repeat-x"}"
177
+ >Horizontal</pd-checkbox
178
+ >
179
+ <pd-checkbox
180
+ checkType="RADIO"
181
+ valueName="repeat-y"
182
+ initValue="${this._bgRepeat === "repeat-y"}"
183
+ >Vertikal</pd-checkbox
184
+ >
185
+ </pd-radio-group>
186
+ </pd-form-row>
187
+ ` : nothing}
188
+
189
+ <pd-form-row>
190
+ <pd-color-picker
191
+ span="half"
192
+ label="${this.overlayColorLabel}"
193
+ .initValue="${this._overlayColor}"
194
+ .handleChangeForInitVal="${true}"
195
+ ?disabled="${this.disabled}"
196
+ @pd-form-element-change="${this._onOverlayColorChange}"
197
+ @pd-form-element-register="${this._innerStop}"
198
+ @validate-form="${this._innerStop}"
199
+ @field-change="${this._innerStop}"
200
+ ></pd-color-picker>
201
+ <pd-range
202
+ span="half"
203
+ no-ticks
204
+ label="${this.overlayLabel}"
205
+ min="0"
206
+ max="${this.maxOverlay}"
207
+ step="5"
208
+ .initValue="${String(this._overlayOpacity)}"
209
+ .handleChangeForInitVal="${true}"
210
+ ?disabled="${this.disabled}"
211
+ @pd-form-element-change="${this._onOverlayChange}"
212
+ @pd-form-element-register="${this._innerStop}"
213
+ @validate-form="${this._innerStop}"
214
+ @field-change="${this._innerStop}"
215
+ ></pd-range>
216
+ </pd-form-row>
217
+
218
+ ${this.hideTextShadow ? nothing : html`
219
+ <pd-form-row>
220
+ <pd-checkbox
221
+ label="${this.textShadowLabel}"
222
+ .initValue="${this._textShadow ? "true" : "false"}"
223
+ ?disabled="${this.disabled}"
224
+ @pd-form-element-change="${this._onTextShadowChange}"
225
+ @pd-form-element-register="${this._innerStop}"
226
+ @validate-form="${this._innerStop}"
227
+ @field-change="${this._innerStop}"
228
+ ></pd-checkbox>
229
+ </pd-form-row>
230
+ `}
231
+ </div>
232
+
233
+ ${this._renderErrorMsg(errorId)}
234
+ `;
235
+ }
236
+ _renderPreview() {
237
+ const r = parseInt(this._overlayColor.slice(1, 3), 16) || 0;
238
+ const g = parseInt(this._overlayColor.slice(3, 5), 16) || 0;
239
+ const b = parseInt(this._overlayColor.slice(5, 7), 16) || 0;
240
+ const overlayStyle = {
241
+ background: `rgba(${r}, ${g}, ${b}, ${this._overlayOpacity / 100})`
242
+ };
243
+ const previewStyle = {
244
+ backgroundImage: `url(${this._imageSrc})`,
245
+ backgroundSize: this._bgSize,
246
+ backgroundRepeat: this._bgRepeat,
247
+ backgroundPosition: "center"
248
+ };
249
+ const textStyle = this._textShadow ? { textShadow: "1px 1px 3px rgba(0,0,0,0.8)" } : {};
250
+ return html`
251
+ <div class="image-preview" style="${styleMap(previewStyle)}">
252
+ <div class="overlay" style="${styleMap(overlayStyle)}"></div>
253
+ <div class="preview-text" style="${styleMap(textStyle)}">
254
+ Beispieltext
255
+ </div>
256
+ </div>
257
+ `;
258
+ }
259
+ // ── Value Parsing ──────────────────────────────────────────────────────────
260
+ _applyInitValue(raw) {
261
+ try {
262
+ const parsed = JSON.parse(raw);
263
+ this._image = parsed.image || "";
264
+ this._imageSrc = this._extractFirstSrc(this._image);
265
+ this._overlayColor = parsed.overlayColor || DEFAULT_OVERLAY_COLOR;
266
+ this._overlayOpacity = parsed.overlayOpacity ?? DEFAULT_OVERLAY_OPACITY;
267
+ this._textShadow = parsed.textShadow ?? false;
268
+ this._bgSize = parsed.bgSize ?? "cover";
269
+ this._bgRepeat = parsed.bgRepeat ?? "no-repeat";
270
+ } catch {
271
+ }
272
+ }
273
+ _extractFirstSrc(imageJson) {
274
+ try {
275
+ const arr = JSON.parse(imageJson);
276
+ return arr?.[0]?.src ?? "";
277
+ } catch {
278
+ return "";
279
+ }
280
+ }
281
+ _getParsedValue() {
282
+ return {
283
+ image: this._image,
284
+ overlayColor: this._overlayColor,
285
+ overlayOpacity: this._overlayOpacity,
286
+ textShadow: this._textShadow,
287
+ bgSize: this._bgSize,
288
+ bgRepeat: this._bgRepeat
289
+ };
290
+ }
291
+ // ── Inner Element Events (prevent leaking into parent pd-form-container) ─
292
+ _innerStop(e) {
293
+ e.stopPropagation();
294
+ }
295
+ _onImageChange(e) {
296
+ e.stopPropagation();
297
+ const images = e.detail?.value;
298
+ this._imageSrc = images?.[0]?.src ?? "";
299
+ this._image = images?.length ? JSON.stringify(images) : "";
300
+ this._emitValue();
301
+ }
302
+ _onOverlayColorChange(e) {
303
+ e.stopPropagation();
304
+ this._overlayColor = e.detail?.value || DEFAULT_OVERLAY_COLOR;
305
+ this._emitValue();
306
+ }
307
+ _onOverlayChange(e) {
308
+ e.stopPropagation();
309
+ this._overlayOpacity = parseInt(e.detail?.value ?? "", 10) || DEFAULT_OVERLAY_OPACITY;
310
+ this._emitValue();
311
+ }
312
+ _onTextShadowChange(e) {
313
+ e.stopPropagation();
314
+ this._textShadow = e.detail?.value === "true";
315
+ this._emitValue();
316
+ }
317
+ _onBgSizeChange(e) {
318
+ e.stopPropagation();
319
+ const v = e.detail?.value;
320
+ if (v === "cover" || v === "contain" || v === "auto") {
321
+ this._bgSize = v;
322
+ this._emitValue();
323
+ }
324
+ }
325
+ _onBgRepeatChange(e) {
326
+ e.stopPropagation();
327
+ const v = e.detail?.value;
328
+ if (v === "no-repeat" || v === "repeat" || v === "repeat-x" || v === "repeat-y") {
329
+ this._bgRepeat = v;
330
+ this._emitValue();
331
+ }
332
+ }
333
+ _emitValue() {
334
+ const val = {
335
+ image: this._image,
336
+ overlayColor: this._overlayColor,
337
+ overlayOpacity: this._overlayOpacity,
338
+ textShadow: this._textShadow,
339
+ bgSize: this._bgSize,
340
+ bgRepeat: this._bgRepeat
341
+ };
342
+ this._handleChangedValue(JSON.stringify(val), void 0, true);
343
+ }
344
+ }
345
+ __decorateClass([
346
+ property({ type: String })
347
+ ], PdBgImageForm.prototype, "imageLabel");
348
+ __decorateClass([
349
+ property({ type: String })
350
+ ], PdBgImageForm.prototype, "overlayColorLabel");
351
+ __decorateClass([
352
+ property({ type: String })
353
+ ], PdBgImageForm.prototype, "overlayLabel");
354
+ __decorateClass([
355
+ property({ type: String })
356
+ ], PdBgImageForm.prototype, "textShadowLabel");
357
+ __decorateClass([
358
+ property({ type: Number })
359
+ ], PdBgImageForm.prototype, "maxOverlay");
360
+ __decorateClass([
361
+ property({ type: Boolean, attribute: "hide-preview" })
362
+ ], PdBgImageForm.prototype, "hidePreview");
363
+ __decorateClass([
364
+ property({ type: Boolean, attribute: "show-bg-size" })
365
+ ], PdBgImageForm.prototype, "showBgSize");
366
+ __decorateClass([
367
+ property({ type: Boolean, attribute: "show-bg-repeat" })
368
+ ], PdBgImageForm.prototype, "showBgRepeat");
369
+ __decorateClass([
370
+ property({ type: Boolean, attribute: "hide-text-shadow" })
371
+ ], PdBgImageForm.prototype, "hideTextShadow");
372
+ __decorateClass([
373
+ state()
374
+ ], PdBgImageForm.prototype, "_image");
375
+ __decorateClass([
376
+ state()
377
+ ], PdBgImageForm.prototype, "_imageSrc");
378
+ __decorateClass([
379
+ state()
380
+ ], PdBgImageForm.prototype, "_overlayColor");
381
+ __decorateClass([
382
+ state()
383
+ ], PdBgImageForm.prototype, "_overlayOpacity");
384
+ __decorateClass([
385
+ state()
386
+ ], PdBgImageForm.prototype, "_textShadow");
387
+ __decorateClass([
388
+ state()
389
+ ], PdBgImageForm.prototype, "_bgSize");
390
+ __decorateClass([
391
+ state()
392
+ ], PdBgImageForm.prototype, "_bgRepeat");
393
+
394
+ export { PdBgImageForm };
@@ -0,0 +1,4 @@
1
+ import { PdBgImageForm } from './PdBgImageForm.js';
2
+ export { PdBgImageForm };
3
+ export type { BgImageValue } from './PdBgImageForm.js';
4
+ //# sourceMappingURL=pd-bg-image-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-bg-image-form.d.ts","sourceRoot":"","sources":["../../src/pd-bg-image-form/pd-bg-image-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './pd-bg-image-form/pd-bg-image-form'
2
+ export {}
@@ -0,0 +1,8 @@
1
+ import { PdBgImageForm } from './pd-bg-image-form/PdBgImageForm.js';
2
+
3
+ const tag = "pd-bg-image-form";
4
+ if (!customElements.get(tag)) {
5
+ customElements.define(tag, PdBgImageForm);
6
+ }
7
+
8
+ export { PdBgImageForm };
@@ -0,0 +1,73 @@
1
+ import { CSSResultGroup, PropertyValues } from 'lit';
2
+ import { PdBaseUIInput } from '@progressive-development/pd-forms';
3
+ export type BgMode = "color" | "gradient" | "image";
4
+ export interface BgSelectValue {
5
+ mode: BgMode;
6
+ color?: string;
7
+ gradientColor1?: string;
8
+ gradientColor2?: string;
9
+ gradientAngle?: number;
10
+ gradientStop1?: number;
11
+ gradientStop2?: number;
12
+ bgImage?: string;
13
+ overlayColor?: string;
14
+ overlayOpacity?: number;
15
+ textShadow?: boolean;
16
+ bgSize?: "cover" | "contain" | "auto";
17
+ bgRepeat?: "no-repeat" | "repeat" | "repeat-x" | "repeat-y";
18
+ }
19
+ /**
20
+ * Background selection form combining a mode radio group (color / gradient / image)
21
+ * with the corresponding sub-forms.
22
+ *
23
+ * Value format: JSON string `{"mode":"color","color":"#333"}`
24
+ *
25
+ * @tagname pd-bg-select-form
26
+ * @summary Composite form for background type selection (color, gradient, image).
27
+ *
28
+ * @event pd-form-element-change - Fired when any value changes. Detail: `{ value, name, parsedValue, state }`.
29
+ */
30
+ export declare class PdBgSelectForm extends PdBaseUIInput {
31
+ /** Label for the color picker in "color" mode. */
32
+ colorLabel: string;
33
+ /** Default color when no value is set. */
34
+ defaultColor: string;
35
+ /** Hide live previews of sub-forms (gradient strip, image preview). */
36
+ hidePreview: boolean;
37
+ /** Show background-size selector in image mode. */
38
+ showBgSize: boolean;
39
+ /** Show background-repeat selector in image mode. */
40
+ showBgRepeat: boolean;
41
+ /** Hide the text-shadow checkbox in image mode. */
42
+ hideTextShadow: boolean;
43
+ private _mode;
44
+ /** Stable init value for radio — only changes on restore, not on user clicks. */
45
+ private _modeInit;
46
+ private _color;
47
+ private _gradientColor1;
48
+ private _gradientColor2;
49
+ private _gradientAngle;
50
+ private _gradientStop1;
51
+ private _gradientStop2;
52
+ private _bgImage;
53
+ private _overlayColor;
54
+ private _overlayOpacity;
55
+ private _textShadow;
56
+ private _bgSize;
57
+ private _bgRepeat;
58
+ static styles: CSSResultGroup;
59
+ update(changedProps: PropertyValues<this>): void;
60
+ render(): import('lit').TemplateResult<1>;
61
+ private _applyInitValue;
62
+ private get _gradientInitValue();
63
+ private get _bgImageInitValue();
64
+ protected _getParsedValue(): BgSelectValue;
65
+ private _buildValue;
66
+ private _innerStop;
67
+ private _onModeChange;
68
+ private _onColorChange;
69
+ private _onGradientChange;
70
+ private _onBgImageChange;
71
+ private _emitValue;
72
+ }
73
+ //# sourceMappingURL=PdBgSelectForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdBgSelectForm.d.ts","sourceRoot":"","sources":["../../src/pd-bg-select-form/PdBgSelectForm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,+CAA+C,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,+CAA+C,CAAC;AACvD,OAAO,mDAAmD,CAAC;AAE3D,OAAO,yCAAyC,CAAC;AACjD,OAAO,yCAAyC,CAAC;AAMjD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;CAC7D;AAQD;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,kDAAkD;IAElD,UAAU,SAAsB;IAEhC,0CAA0C;IAE1C,YAAY,SAAiB;IAE7B,uEAAuE;IAEvE,WAAW,UAAS;IAEpB,mDAAmD;IAEnD,UAAU,UAAS;IAEnB,qDAAqD;IAErD,YAAY,UAAS;IAErB,mDAAmD;IAEnD,cAAc,UAAS;IAId,OAAO,CAAC,KAAK,CAAwB;IAC9C,iFAAiF;IACjF,OAAO,CAAC,SAAS,CAAwB;IAEhC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,SAAS,CACZ;IAEd,OAAgB,MAAM,EAAE,cAAc,CAapC;IAIO,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAehD,MAAM;IAkGf,OAAO,CAAC,eAAe;IAsBvB,OAAO,KAAK,kBAAkB,GAQ7B;IAED,OAAO,KAAK,iBAAiB,GAS5B;cAEkB,eAAe,IAAI,aAAa;IAInD,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;CAInB"}