@progressive-development/pd-page 0.9.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +21 -2
  2. package/README.md +34 -57
  3. package/dist/generated/locales/be.d.ts +19 -1
  4. package/dist/generated/locales/be.d.ts.map +1 -1
  5. package/dist/generated/locales/de.d.ts +19 -1
  6. package/dist/generated/locales/de.d.ts.map +1 -1
  7. package/dist/generated/locales/en.d.ts +19 -1
  8. package/dist/generated/locales/en.d.ts.map +1 -1
  9. package/dist/index.d.ts +6 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +7 -0
  12. package/dist/locales/be.js +19 -1
  13. package/dist/locales/de.js +19 -1
  14. package/dist/locales/en.js +19 -1
  15. package/dist/pd-contact-us/PdContactUs.d.ts +15 -5
  16. package/dist/pd-contact-us/PdContactUs.d.ts.map +1 -1
  17. package/dist/pd-contact-us/PdContactUs.js +94 -131
  18. package/dist/pd-contact-us/pd-contact-us.stories.d.ts +36 -5
  19. package/dist/pd-contact-us/pd-contact-us.stories.d.ts.map +1 -1
  20. package/dist/pd-content/dist/pd-notice-box/PdNoticeBox.js +224 -0
  21. package/dist/pd-content/dist/pd-notice-box/pd-notice-box.js +8 -0
  22. package/dist/pd-footer/PdFooter.d.ts +27 -15
  23. package/dist/pd-footer/PdFooter.d.ts.map +1 -1
  24. package/dist/pd-footer/PdFooter.js +122 -71
  25. package/dist/pd-footer/pd-footer.stories.d.ts +47 -7
  26. package/dist/pd-footer/pd-footer.stories.d.ts.map +1 -1
  27. package/dist/pd-login/PdLogin.d.ts +59 -0
  28. package/dist/pd-login/PdLogin.d.ts.map +1 -0
  29. package/dist/pd-login/PdLogin.js +292 -0
  30. package/dist/pd-login/pd-login.d.ts +3 -0
  31. package/dist/pd-login/pd-login.d.ts.map +1 -0
  32. package/dist/pd-login/pd-login.stories.d.ts +55 -0
  33. package/dist/pd-login/pd-login.stories.d.ts.map +1 -0
  34. package/dist/pd-login.d.ts +2 -0
  35. package/dist/pd-login.js +8 -0
  36. package/dist/pd-menu/PdMenu.d.ts +72 -40
  37. package/dist/pd-menu/PdMenu.d.ts.map +1 -1
  38. package/dist/pd-menu/PdMenu.js +384 -273
  39. package/dist/pd-menu/pd-menu.stories.d.ts +59 -17
  40. package/dist/pd-menu/pd-menu.stories.d.ts.map +1 -1
  41. package/dist/pd-socialmedia/PdSocialmedia.d.ts +56 -0
  42. package/dist/pd-socialmedia/PdSocialmedia.d.ts.map +1 -0
  43. package/dist/pd-socialmedia/PdSocialmedia.js +426 -0
  44. package/dist/pd-socialmedia/pd-socialmedia-model.d.ts +16 -0
  45. package/dist/pd-socialmedia/pd-socialmedia-model.d.ts.map +1 -0
  46. package/dist/pd-socialmedia/pd-socialmedia-model.js +240 -0
  47. package/dist/pd-socialmedia/pd-socialmedia.d.ts +3 -0
  48. package/dist/pd-socialmedia/pd-socialmedia.d.ts.map +1 -0
  49. package/dist/pd-socialmedia/pd-socialmedia.stories.d.ts +53 -0
  50. package/dist/pd-socialmedia/pd-socialmedia.stories.d.ts.map +1 -0
  51. package/dist/pd-socialmedia.d.ts +2 -0
  52. package/dist/pd-socialmedia.js +7 -0
  53. package/dist/pd-toast/PdToast.d.ts +23 -0
  54. package/dist/pd-toast/PdToast.d.ts.map +1 -0
  55. package/dist/pd-toast/PdToast.js +222 -0
  56. package/dist/pd-toast/pd-toast.d.ts +3 -0
  57. package/dist/pd-toast/pd-toast.d.ts.map +1 -0
  58. package/dist/pd-toast/pd-toast.stories.d.ts +47 -0
  59. package/dist/pd-toast/pd-toast.stories.d.ts.map +1 -0
  60. package/dist/pd-toast.d.ts +2 -0
  61. package/dist/pd-toast.js +8 -0
  62. package/dist/stories/01_index.stories.d.ts +36 -4
  63. package/dist/stories/01_index.stories.d.ts.map +1 -1
  64. package/dist/toast-bus/toast-bus.d.ts +61 -0
  65. package/dist/toast-bus/toast-bus.d.ts.map +1 -0
  66. package/dist/toast-bus/toast-bus.js +42 -0
  67. package/dist/types.d.ts +18 -0
  68. package/dist/types.d.ts.map +1 -1
  69. package/package.json +13 -7
@@ -1,7 +1,7 @@
1
1
  import { css, LitElement, html } from 'lit';
2
2
  import { localized, msg } from '@lit/localize';
3
- import { property } from 'lit/decorators.js';
4
- import '@progressive-development/pd-forms/pd-panel-button';
3
+ import { property, query } from 'lit/decorators.js';
4
+ import '@progressive-development/pd-forms/pd-button';
5
5
  import '@progressive-development/pd-forms/pd-form-container';
6
6
  import '@progressive-development/pd-forms/pd-form-row';
7
7
  import '@progressive-development/pd-forms/pd-input';
@@ -26,117 +26,95 @@ let PdContactUs = class extends LitElement {
26
26
  }
27
27
  render() {
28
28
  return html`
29
- <div class="content-block">
30
- <h2>${msg("Kontakt", { id: "pd.contactus.title" })}</h2>
31
-
32
- <div class="contact-block">
33
- <div class="left-content">
34
- <pd-contact
35
- class="company-contact"
36
- .contact="${this.contact}"
37
- addressTitle="${msg("Adresse", {
38
- id: "pd.contactus.address.title"
39
- })}"
40
- summary
41
- ></pd-contact>
42
- </div>
29
+ <div class="contact-layout">
30
+ <div class="contact-card">
31
+ <pd-contact .contact="${this.contact}" summary></pd-contact>
32
+ </div>
43
33
 
44
- <div class="right-content">
45
- <pd-form-container id="contactFormId">
46
- <pd-form-row>
47
- <pd-input
48
- id="nameInputId"
49
- class="quarter3"
50
- minlength="3"
51
- maxlength="100"
52
- placeHolder="${msg("Name", {
34
+ <div class="contact-form">
35
+ <pd-form-container id="contactFormId">
36
+ <pd-form-row>
37
+ <pd-input
38
+ id="nameInputId"
39
+ minlength="3"
40
+ maxlength="100"
41
+ placeHolder="${msg("Name", {
53
42
  id: "pd.contactus.address.name"
54
43
  })}"
55
- valueName="name"
56
- autoCompleteName="full-name"
57
- required
58
- ></pd-input>
59
- </pd-form-row>
44
+ valueName="name"
45
+ autoCompleteName="full-name"
46
+ required
47
+ ></pd-input>
48
+ </pd-form-row>
60
49
 
61
- <pd-form-row>
62
- <pd-input
63
- id="mailInputId"
64
- class="quarter3"
65
- placeHolder="${msg("Email", {
50
+ <pd-form-row>
51
+ <pd-input
52
+ id="mailInputId"
53
+ placeHolder="${msg("Email", {
66
54
  id: "pd.contactus.address.email"
67
55
  })}"
68
- valueName="email"
69
- autoCompleteName="email"
70
- name="email"
71
- fieldType="mail"
72
- required
73
- ></pd-input>
74
- </pd-form-row>
56
+ valueName="email"
57
+ autoCompleteName="email"
58
+ name="email"
59
+ fieldType="mail"
60
+ required
61
+ ></pd-input>
62
+ </pd-form-row>
75
63
 
76
- <pd-form-row>
77
- <pd-input
78
- id="phoneInputId"
79
- class="quarter3"
80
- placeHolder="${msg("Telefon", {
64
+ <pd-form-row>
65
+ <pd-input
66
+ id="phoneInputId"
67
+ placeHolder="${msg("Telefon", {
81
68
  id: "pd.contactus.address.phone"
82
69
  })}"
83
- valueName="phone"
84
- fieldType="phone"
85
- autoCompleteName="tel"
86
- required
87
- ></pd-input>
88
- </pd-form-row>
70
+ valueName="phone"
71
+ fieldType="phone"
72
+ autoCompleteName="tel"
73
+ required
74
+ ></pd-input>
75
+ </pd-form-row>
89
76
 
90
- <pd-form-row>
91
- <pd-input-area
92
- id="msgInputId"
93
- class="quarter3-area"
94
- minlength="6"
95
- maxlength="500"
96
- placeHolder="${msg("Nachricht", {
77
+ <pd-form-row>
78
+ <pd-input-area
79
+ id="msgInputId"
80
+ minlength="6"
81
+ maxlength="500"
82
+ placeHolder="${msg("Nachricht", {
97
83
  id: "pd.contactus.address.message"
98
84
  })}"
99
- rows="8"
100
- required
101
- valueName="msg1"
102
- ></pd-input-area>
103
- </pd-form-row>
85
+ rows="8"
86
+ required
87
+ valueName="msg1"
88
+ ></pd-input-area>
89
+ </pd-form-row>
104
90
 
105
- <pd-form-row>
106
- <pd-panel-button
107
- class="quarter3"
108
- pdButtonIcon="${pdIcons.ICON_MAIL}"
109
- buttonText="${msg("Absenden", {
91
+ <pd-form-row>
92
+ <pd-button
93
+ icon="${pdIcons.ICON_MAIL}"
94
+ text="${msg("Absenden", {
110
95
  id: "pd.contactus.address.send"
111
96
  })}"
112
- @click="${this._sendMail}"
113
- primary
114
- ></pd-panel-button>
115
- </pd-form-row>
116
- </pd-form-container>
117
- </div>
97
+ @button-clicked="${this._sendMail}"
98
+ primary
99
+ ></pd-button>
100
+ </pd-form-row>
101
+ </pd-form-container>
118
102
  </div>
119
103
  </div>
120
104
  `;
121
105
  }
122
106
  clear() {
123
- this.shadowRoot?.getElementById("nameInputId")?.["clear"]?.();
124
- this.shadowRoot?.getElementById("mailInputId")?.["clear"]?.();
125
- this.shadowRoot?.getElementById("phoneInputId")?.["clear"]?.();
126
- this.shadowRoot?.getElementById("msgInputId")?.["clear"]?.();
107
+ this._form?.clear();
127
108
  }
128
109
  _sendMail() {
129
- const form = this.shadowRoot?.getElementById(
130
- "contactFormId"
131
- );
132
- form.triggerValidate().then((result) => {
110
+ this._form.triggerValidate().then((result) => {
133
111
  if (result) {
134
112
  this.dispatchEvent(
135
113
  new CustomEvent("send-contact-request", {
136
- detail: { msgObj: form.getValues().origin }
114
+ detail: { msgObj: this._form.getValues().origin }
137
115
  })
138
116
  );
139
- form.reset();
117
+ this._form.reset();
140
118
  }
141
119
  });
142
120
  }
@@ -144,75 +122,60 @@ let PdContactUs = class extends LitElement {
144
122
  PdContactUs.styles = [
145
123
  css`
146
124
  :host {
147
- display: flex;
148
- flex-flow: row;
125
+ display: block;
149
126
  background-color: var(--pd-contactus-bg-col, var(--pd-default-col));
150
127
  background-image: var(--pd-contactus-bg-image);
151
128
  background-repeat: no-repeat;
152
- min-height: 500px;
153
129
  width: 100%;
154
130
  }
155
131
 
156
- h2 {
157
- font-family: var(--pd-default-font-title-family);
158
- font-style: normal;
159
- color: var(--pd-contactus-font-col, var(--pd-default-bg-col));
160
- margin-top: 1.4em;
161
- margin-bottom: 2.5rem;
162
- font-size: var(--pd-contactus-font-h2-size, 2.5rem);
163
- }
164
-
165
- .content-block {
166
- overflow: hidden;
167
- display: flex;
168
- flex-direction: column;
169
- align-items: flex-start;
170
- justify-content: flex-start;
171
- flex-grow: 1;
172
- max-width: 1170px;
173
- margin: 0 auto;
174
- padding-left: 30px;
175
- }
176
-
177
- .contact-block {
132
+ .contact-layout {
178
133
  display: flex;
179
134
  flex-wrap: wrap;
180
- padding-bottom: 50px;
181
- }
182
-
183
- .left-content {
184
- width: 35%;
185
- min-width: 230px;
186
- }
187
-
188
- .right-content {
189
- width: 65%;
135
+ gap: 2rem;
136
+ align-items: flex-start;
190
137
  }
191
138
 
192
- .company-contact {
193
- --app-font-content-col: var(
139
+ .contact-card {
140
+ flex: 1 1 300px;
141
+ min-width: 280px;
142
+ max-width: 420px;
143
+ /* Forward --pd-contactus-font-col to pd-contact internals */
144
+ --pd-contact-address-col: var(
145
+ --pd-contactus-font-col,
146
+ var(--pd-default-bg-col)
147
+ );
148
+ --pd-contact-address-title-col: var(
149
+ --pd-contactus-font-col,
150
+ var(--pd-default-bg-col)
151
+ );
152
+ --pd-default-font-content-col: var(
153
+ --pd-contactus-font-col,
154
+ var(--pd-default-bg-col)
155
+ );
156
+ --pd-default-font-title-col: var(
194
157
  --pd-contactus-font-col,
195
158
  var(--pd-default-bg-col)
196
159
  );
197
- --app-font-title-col: var(
160
+ --pd-contact-icon-col: var(
198
161
  --pd-contactus-font-col,
199
162
  var(--pd-default-bg-col)
200
163
  );
201
164
  }
202
165
 
203
- @media (max-width: 440px) {
204
- .item {
205
- display: none;
206
- }
207
- ul {
208
- justify-content: flex-start;
209
- }
166
+ .contact-form {
167
+ flex: 1 1 360px;
168
+ min-width: 300px;
169
+ max-width: 520px;
210
170
  }
211
171
  `
212
172
  ];
213
173
  __decorateClass([
214
174
  property({ type: Object })
215
175
  ], PdContactUs.prototype, "contact", 2);
176
+ __decorateClass([
177
+ query("#contactFormId")
178
+ ], PdContactUs.prototype, "_form", 2);
216
179
  PdContactUs = __decorateClass([
217
180
  localized()
218
181
  ], PdContactUs);
@@ -1,6 +1,37 @@
1
- import { Meta, StoryFn } from '@storybook/web-components';
2
- import { PdContactUs } from './pd-contact-us';
3
- declare const _default: Meta<PdContactUs>;
4
- export default _default;
5
- export declare const Default: StoryFn<PdContactUs>;
1
+ import { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ import { PdContactData } from '@progressive-development/pd-contact';
3
+ /**
4
+ * Story arguments interface for pd-contact-us component.
5
+ * Maps to the component's public API.
6
+ */
7
+ interface PdContactUsArgs {
8
+ /** Contact data for address display */
9
+ contact: PdContactData;
10
+ }
11
+ /**
12
+ * ## pd-contact-us
13
+ *
14
+ * Contact section with company address card and message form.
15
+ *
16
+ * ### Features
17
+ * - **Address Display**: Shows company contact information via pd-contact card
18
+ * - **Contact Form**: Name, email, phone, and message fields with validation
19
+ * - **Responsive Layout**: Card and form wrap below each other on narrow screens
20
+ * - **Localization**: All labels localized via @lit/localize
21
+ * - **Email/Phone Types**: Proper input types for better mobile UX
22
+ *
23
+ * ### Accessibility
24
+ * - Form fields use proper input types (email, tel)
25
+ * - Required fields are marked for screen readers
26
+ * - Submit button uses native button semantics
27
+ */
28
+ declare const meta: Meta<PdContactUsArgs>;
29
+ export default meta;
30
+ type Story = StoryObj<PdContactUsArgs>;
31
+ /** Default contact section with company info and message form. Interactive via Controls panel. */
32
+ export declare const Default: Story;
33
+ /** All contact data configurations at a glance: full, standard, and minimal. */
34
+ export declare const AllVariants: Story;
35
+ /** CSS Custom Properties — Branded and Redesigned variants. */
36
+ export declare const CustomStyling: Story;
6
37
  //# sourceMappingURL=pd-contact-us.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pd-contact-us.stories.d.ts","sourceRoot":"","sources":["../../src/pd-contact-us/pd-contact-us.stories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAI/D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,iBAAiB,CAAC;wBAoBpB,IAAI,CAAC,WAAW,CAAC;AAlBtB,wBAkBuB;AAMvB,eAAO,MAAM,OAAO,sBAAoB,CAAC"}
1
+ {"version":3,"file":"pd-contact-us.stories.d.ts","sourceRoot":"","sources":["../../src/pd-contact-us/pd-contact-us.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,oBAAoB,CAAC;AAM5B;;;GAGG;AACH,UAAU,eAAe;IACvB,uCAAuC;IACvC,OAAO,EAAE,aAAa,CAAC;CACxB;AAoCD;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CA8D/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAMvC,kGAAkG;AAClG,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAMjC,gFAAgF;AAChF,eAAO,MAAM,WAAW,EAAE,KAiCzB,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,KA2D3B,CAAC"}
@@ -0,0 +1,224 @@
1
+ import { LitElement, css, nothing, html } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import { pdIcons } from '@progressive-development/pd-icon';
4
+ import '@progressive-development/pd-icon/pd-icon';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __decorateClass = (decorators, target, key, kind) => {
8
+ var result = void 0 ;
9
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
10
+ if (decorator = decorators[i])
11
+ result = (decorator(target, key, result) ) || result;
12
+ if (result) __defProp(target, key, result);
13
+ return result;
14
+ };
15
+ const DEFAULT_ICONS = {
16
+ info: pdIcons.ICON_INFO_FLD,
17
+ note: pdIcons.ICON_INFO_FLD,
18
+ success: pdIcons.ICON_CHECKBOX,
19
+ warning: pdIcons.ICON_WARNING_FLD,
20
+ error: pdIcons.ICON_ERROR_FLD
21
+ };
22
+ class PdNoticeBox extends LitElement {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.type = "info";
26
+ this.variant = "box";
27
+ this.title = "";
28
+ this.icon = "";
29
+ this.hideIcon = false;
30
+ }
31
+ static {
32
+ this.styles = [
33
+ css`
34
+ :host {
35
+ /* Layout */
36
+ --_width: var(--pd-notice-box-width, 100%);
37
+ --_radius: var(--pd-notice-box-border-radius, var(--pd-radius-md, 8px));
38
+ --_padding: var(--pd-notice-box-padding, var(--pd-spacing-sm, 12px));
39
+ --_gap: var(--pd-notice-box-gap, var(--pd-spacing-sm, 12px));
40
+
41
+ /* Typography */
42
+ --_font-size: var(
43
+ --pd-notice-box-font-size,
44
+ var(--pd-default-font-content-size, 1rem)
45
+ );
46
+ --_title-font-size: var(
47
+ --pd-notice-box-title-font-size,
48
+ var(--pd-default-font-input-size, 1.05rem)
49
+ );
50
+ --_title-font-weight: var(--pd-notice-box-title-font-weight, 600);
51
+
52
+ /* Icon */
53
+ --_icon-size: var(--pd-notice-box-icon-size, 24px);
54
+
55
+ /* Sidebar */
56
+ --_sidebar-width: var(--pd-notice-box-sidebar-width, 4px);
57
+
58
+ /* Type colors - will be overridden per type */
59
+ --_type-col: var(--pd-default-info-col, #6b86ff);
60
+ --_type-bg-col: #e8f0ff;
61
+ --_type-text-col: var(
62
+ --pd-notice-box-text-col,
63
+ var(--pd-default-font-content-col, #353738)
64
+ );
65
+
66
+ display: block;
67
+ width: var(--_width);
68
+ }
69
+
70
+ /* Type-specific color overrides */
71
+ :host([type="info"]) {
72
+ --_type-col: var(
73
+ --pd-notice-box-info-col,
74
+ var(--pd-default-info-col, #6b86ff)
75
+ );
76
+ --_type-bg-col: var(--pd-notice-box-info-bg-col, #e8f0ff);
77
+ }
78
+
79
+ :host([type="note"]) {
80
+ --_type-col: var(
81
+ --pd-notice-box-note-col,
82
+ var(--pd-default-col, #067394)
83
+ );
84
+ --_type-bg-col: var(
85
+ --pd-notice-box-note-bg-col,
86
+ var(--pd-default-lightest-col, #cde2eb)
87
+ );
88
+ }
89
+
90
+ :host([type="success"]) {
91
+ --_type-col: var(
92
+ --pd-notice-box-success-col,
93
+ var(--pd-default-success-col, #348b11)
94
+ );
95
+ --_type-bg-col: var(
96
+ --pd-notice-box-success-bg-col,
97
+ var(--pd-default-success-light-col, #f5ffe8)
98
+ );
99
+ }
100
+
101
+ :host([type="warning"]) {
102
+ --_type-col: var(
103
+ --pd-notice-box-warning-col,
104
+ var(--pd-default-warning-col, #ffbf00)
105
+ );
106
+ --_type-bg-col: var(--pd-notice-box-warning-bg-col, #fff8e0);
107
+ }
108
+
109
+ :host([type="error"]) {
110
+ --_type-col: var(
111
+ --pd-notice-box-error-col,
112
+ var(--pd-default-error-col, #a1141b)
113
+ );
114
+ --_type-bg-col: var(
115
+ --pd-notice-box-error-bg-col,
116
+ var(--pd-default-error-light-col, #ffe8e8)
117
+ );
118
+ }
119
+
120
+ /* Box variant */
121
+ .notice-box {
122
+ display: flex;
123
+ align-items: flex-start;
124
+ gap: var(--_gap);
125
+ padding: var(--_padding);
126
+ border-radius: var(--_radius);
127
+ background-color: var(--_type-bg-col);
128
+ border: 1px solid var(--_type-col);
129
+ font-size: var(--_font-size);
130
+ color: var(--_type-text-col);
131
+ }
132
+
133
+ /* Sidebar variant */
134
+ :host([variant="sidebar"]) .notice-box {
135
+ background-color: transparent;
136
+ border: none;
137
+ border-left: var(--_sidebar-width) solid var(--_type-col);
138
+ border-radius: 0;
139
+ padding-left: var(--_padding);
140
+ }
141
+
142
+ /* Icon wrapper */
143
+ .icon-wrapper {
144
+ flex-shrink: 0;
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ width: var(--_icon-size);
149
+ height: var(--_icon-size);
150
+ }
151
+
152
+ .icon-wrapper pd-icon {
153
+ --pd-icon-primary-col: var(--_type-col);
154
+ --pd-icon-col-primary-active: var(--_type-col);
155
+ width: var(--_icon-size);
156
+ height: var(--_icon-size);
157
+ }
158
+
159
+ /* Content area */
160
+ .content {
161
+ flex: 1;
162
+ min-width: 0;
163
+ }
164
+
165
+ .title {
166
+ margin: 0 0 0.25em 0;
167
+ font-size: var(--_title-font-size);
168
+ font-weight: var(--_title-font-weight);
169
+ font-family: var(--pd-default-font-title-family, inherit);
170
+ color: var(--_type-col);
171
+ line-height: 1.3;
172
+ }
173
+
174
+ .body {
175
+ line-height: 1.5;
176
+ }
177
+
178
+ .body ::slotted(*) {
179
+ margin: 0;
180
+ }
181
+
182
+ .body ::slotted(*:not(:last-child)) {
183
+ margin-bottom: 0.5em;
184
+ }
185
+ `
186
+ ];
187
+ }
188
+ render() {
189
+ const showIcon = this.variant === "box" && !this.hideIcon;
190
+ const iconName = this.icon || DEFAULT_ICONS[this.type];
191
+ return html`
192
+ <div class="notice-box" role="note" aria-label="${this.type} notice">
193
+ ${showIcon ? html`
194
+ <div class="icon-wrapper" aria-hidden="true">
195
+ <pd-icon icon="${iconName}" class="primary"></pd-icon>
196
+ </div>
197
+ ` : nothing}
198
+ <div class="content">
199
+ ${this.title ? html`<h4 class="title">${this.title}</h4>` : nothing}
200
+ <div class="body">
201
+ <slot></slot>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ `;
206
+ }
207
+ }
208
+ __decorateClass([
209
+ property({ type: String, reflect: true })
210
+ ], PdNoticeBox.prototype, "type");
211
+ __decorateClass([
212
+ property({ type: String, reflect: true })
213
+ ], PdNoticeBox.prototype, "variant");
214
+ __decorateClass([
215
+ property({ type: String })
216
+ ], PdNoticeBox.prototype, "title");
217
+ __decorateClass([
218
+ property({ type: String })
219
+ ], PdNoticeBox.prototype, "icon");
220
+ __decorateClass([
221
+ property({ type: Boolean })
222
+ ], PdNoticeBox.prototype, "hideIcon");
223
+
224
+ export { PdNoticeBox };
@@ -0,0 +1,8 @@
1
+ import { PdNoticeBox } from './PdNoticeBox.js';
2
+
3
+ const tag = "pd-notice-box";
4
+ if (!customElements.get(tag)) {
5
+ customElements.define(tag, PdNoticeBox);
6
+ }
7
+
8
+ export { PdNoticeBox };
@@ -1,31 +1,43 @@
1
1
  import { LitElement, CSSResultGroup } from 'lit';
2
2
  import { PdFooterLink, PdFooterMadeBy } from '../types';
3
3
  /**
4
- * Footer-Komponente mit konfigurierbaren Links, Version und Copyright.
4
+ * Application footer with links, version, and copyright.
5
+ *
6
+ * @summary Footer with navigation links, copyright, version, and developer reference.
5
7
  *
6
- * @fires footer-link - Wird ausgelöst, wenn auf einen Footer-Link geklickt wird.
7
- * @slot - Standard-Slot nicht verwendet.
8
8
  * @tagname pd-footer
9
+ *
10
+ * @event footer-link - Fired when a footer link is clicked.
11
+ *
12
+ * @cssprop --pd-footer-bg-col - Footer background. Default: `var(--pd-default-col)`.
13
+ * @cssprop --pd-footer-font-col - Footer text color. Default: `var(--pd-on-primary-col)`.
14
+ * @cssprop --pd-footer-font-family - Footer font family. Default: `var(--pd-default-font-link-family)`.
15
+ * @cssprop --pd-footer-font-size - Footer font size. Default: `1.1em`.
16
+ * @cssprop --pd-footer-bottom-col - Bottom line background. Default: `var(--pd-default-light-col)`.
17
+ * @cssprop --pd-footer-bottom-font-size - Bottom line font size. Default: `0.9em`.
18
+ * @cssprop --pd-footer-bottom-font-col - Bottom line text color. Default: `var(--pd-default-dark-col)`.
9
19
  */
10
20
  export declare class PdFooter extends LitElement {
11
- /**
12
- * Optional: Copyright-Zeile, z.B. "2024 PD Progressive Development UG".
13
- */
21
+ /** Copyright text, e.g. "2024 PD Progressive Development UG". */
14
22
  copyright: string;
15
- /**
16
- * Optionale Versionsangabe, z.B. "v1.2.3".
17
- */
23
+ /** Version string, e.g. "v1.2.3". */
18
24
  version: string;
19
- /**
20
- * Optionaler Verweis auf den Entwickler oder die Agentur.
21
- */
25
+ /** Developer or agency reference with text and email/link. */
22
26
  madeBy?: PdFooterMadeBy;
23
- /**
24
- * Liste von Footer-Links.
25
- */
27
+ /** Footer navigation links. */
26
28
  footerLinks: PdFooterLink[];
27
29
  static styles: CSSResultGroup;
28
30
  render(): import('lit').TemplateResult<1>;
31
+ /**
32
+ * Handles keyboard events on footer links.
33
+ * Activates on Enter or Space key.
34
+ */
35
+ private _handleLinkKeydown;
36
+ /**
37
+ * Handles keyboard events on madeBy element.
38
+ * Activates on Enter or Space key.
39
+ */
40
+ private _handleMadeByKeydown;
29
41
  private _clickMadeBy;
30
42
  private _footerLinkClicked;
31
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PdFooter.d.ts","sourceRoot":"","sources":["../../src/pd-footer/PdFooter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,UAAU;IACtC;;OAEG;IAEH,SAAS,SAAM;IAEf;;OAEG;IAEH,OAAO,SAAM;IAEb;;OAEG;IAEH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;OAEG;IAEH,WAAW,EAAE,YAAY,EAAE,CAAM;IAEjC,OAAgB,MAAM,EAAE,cAAc,CAyEpC;IAEO,MAAM;IAmCf,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;CAe3B"}
1
+ {"version":3,"file":"PdFooter.d.ts","sourceRoot":"","sources":["../../src/pd-footer/PdFooter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,cAAc,EAAE,MAAM,KAAK,CAAC;AAIrE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,iEAAiE;IAEjE,SAAS,SAAM;IAEf,qCAAqC;IAErC,OAAO,SAAM;IAEb,8DAA8D;IAE9D,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,+BAA+B;IAE/B,WAAW,EAAE,YAAY,EAAE,CAAM;IAEjC,OAAgB,MAAM,EAAE,cAAc,CAsFpC;IAEO,MAAM;IA+Cf;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;CAe3B"}