@progressive-development/pd-forms 0.5.7 → 0.6.1

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 (109) hide show
  1. package/dist/generated/locale-codes.d.ts +14 -0
  2. package/dist/generated/locale-codes.d.ts.map +1 -0
  3. package/dist/generated/locales/be.d.ts +10 -0
  4. package/dist/generated/locales/be.d.ts.map +1 -0
  5. package/dist/generated/locales/de.d.ts +10 -0
  6. package/dist/generated/locales/de.d.ts.map +1 -0
  7. package/dist/generated/locales/en.d.ts +10 -0
  8. package/dist/generated/locales/en.d.ts.map +1 -0
  9. package/dist/index.d.ts +15 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +10 -10
  12. package/dist/locales/be.d.ts +2 -0
  13. package/dist/locales/de.d.ts +2 -0
  14. package/dist/locales/en.d.ts +2 -0
  15. package/dist/pd-base-input-element.d.ts +28 -0
  16. package/dist/pd-base-input-element.d.ts.map +1 -0
  17. package/dist/pd-base-input-element.js +82 -0
  18. package/dist/pd-base-ui-input.d.ts +54 -0
  19. package/dist/pd-base-ui-input.d.ts.map +1 -0
  20. package/dist/pd-base-ui-input.js +208 -0
  21. package/dist/pd-base-ui.d.ts +12 -0
  22. package/dist/pd-base-ui.d.ts.map +1 -0
  23. package/dist/{src/PdBaseUi.js → pd-base-ui.js} +9 -15
  24. package/dist/pd-button.d.ts +16 -0
  25. package/dist/pd-button.d.ts.map +1 -0
  26. package/dist/pd-button.js +154 -4
  27. package/dist/pd-checkbox.d.ts +14 -0
  28. package/dist/pd-checkbox.d.ts.map +1 -0
  29. package/dist/pd-checkbox.js +251 -4
  30. package/dist/pd-form-container.d.ts +25 -0
  31. package/dist/pd-form-container.d.ts.map +1 -0
  32. package/dist/pd-form-container.js +183 -4
  33. package/dist/pd-form-row.d.ts +12 -0
  34. package/dist/pd-form-row.d.ts.map +1 -0
  35. package/dist/pd-form-row.js +108 -4
  36. package/dist/pd-hover-box.d.ts +23 -0
  37. package/dist/pd-hover-box.d.ts.map +1 -0
  38. package/dist/pd-hover-box.js +122 -4
  39. package/dist/pd-icon-panel-button.d.ts +18 -0
  40. package/dist/pd-icon-panel-button.d.ts.map +1 -0
  41. package/dist/pd-icon-panel-button.js +242 -0
  42. package/dist/pd-input-area.d.ts +18 -0
  43. package/dist/pd-input-area.d.ts.map +1 -0
  44. package/dist/pd-input-area.js +74 -4
  45. package/dist/pd-input-file.d.ts +15 -0
  46. package/dist/pd-input-file.d.ts.map +1 -0
  47. package/dist/pd-input-file.js +91 -4
  48. package/dist/pd-input-time.d.ts +10 -0
  49. package/dist/pd-input-time.d.ts.map +1 -0
  50. package/dist/pd-input-time.js +68 -4
  51. package/dist/pd-input.d.ts +30 -0
  52. package/dist/pd-input.d.ts.map +1 -0
  53. package/dist/pd-input.js +99 -4
  54. package/dist/pd-radio-group.d.ts +9 -0
  55. package/dist/pd-radio-group.d.ts.map +1 -0
  56. package/dist/pd-radio-group.js +89 -4
  57. package/dist/pd-range.d.ts +16 -0
  58. package/dist/pd-range.d.ts.map +1 -0
  59. package/dist/pd-range.js +236 -4
  60. package/dist/pd-select.d.ts +14 -0
  61. package/dist/pd-select.d.ts.map +1 -0
  62. package/dist/pd-select.js +121 -4
  63. package/dist/stories/01_index.stories.d.ts +58 -0
  64. package/dist/stories/01_index.stories.d.ts.map +1 -0
  65. package/dist/stories/button.stories.d.ts +22 -0
  66. package/dist/stories/button.stories.d.ts.map +1 -0
  67. package/dist/stories/checkbox.stories.d.ts +28 -0
  68. package/dist/stories/checkbox.stories.d.ts.map +1 -0
  69. package/dist/stories/form-container.stories.d.ts +28 -0
  70. package/dist/stories/form-container.stories.d.ts.map +1 -0
  71. package/dist/stories/form-row.stories.d.ts +27 -0
  72. package/dist/stories/form-row.stories.d.ts.map +1 -0
  73. package/dist/stories/input-area.stories.d.ts +54 -0
  74. package/dist/stories/input-area.stories.d.ts.map +1 -0
  75. package/dist/stories/input-file.stories.d.ts +49 -0
  76. package/dist/stories/input-file.stories.d.ts.map +1 -0
  77. package/dist/stories/input.stories.d.ts +37 -0
  78. package/dist/stories/input.stories.d.ts.map +1 -0
  79. package/dist/stories/pd-icon-button.stories.d.ts +30 -0
  80. package/dist/stories/pd-icon-button.stories.d.ts.map +1 -0
  81. package/dist/stories/radio-group.stories.d.ts +9 -0
  82. package/dist/stories/radio-group.stories.d.ts.map +1 -0
  83. package/dist/stories/range.stories.d.ts +9 -0
  84. package/dist/stories/range.stories.d.ts.map +1 -0
  85. package/dist/stories/select.stories.d.ts +37 -0
  86. package/dist/stories/select.stories.d.ts.map +1 -0
  87. package/dist/styles/shared-input-field-styles.d.ts +9 -0
  88. package/dist/styles/shared-input-field-styles.d.ts.map +1 -0
  89. package/dist/{src → styles}/shared-input-field-styles.js +37 -25
  90. package/dist/styles/shared-input-styles.d.ts +10 -0
  91. package/dist/styles/shared-input-styles.d.ts.map +1 -0
  92. package/dist/{src → styles}/shared-input-styles.js +7 -6
  93. package/dist/types.d.ts +10 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/package.json +32 -47
  96. package/dist/src/PdBaseInputElement.js +0 -87
  97. package/dist/src/PdBaseUiInput.js +0 -231
  98. package/dist/src/PdButton.js +0 -194
  99. package/dist/src/PdCheckbox.js +0 -230
  100. package/dist/src/PdFormContainer.js +0 -167
  101. package/dist/src/PdFormRow.js +0 -92
  102. package/dist/src/PdHoverBox.js +0 -108
  103. package/dist/src/PdInput.js +0 -79
  104. package/dist/src/PdInputArea.js +0 -61
  105. package/dist/src/PdInputFile.js +0 -73
  106. package/dist/src/PdInputTime.js +0 -59
  107. package/dist/src/PdRadioGroup.js +0 -72
  108. package/dist/src/PdRange.js +0 -267
  109. package/dist/src/PdSelect.js +0 -125
package/dist/pd-button.js CHANGED
@@ -1,4 +1,154 @@
1
- import { PdButton } from "./src/PdButton.js";
2
- if (!customElements.get("pd-button")) {
3
- window.customElements.define("pd-button", PdButton);
4
- }
1
+ import { css, html } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { PdBaseUI } from "./pd-base-ui.js";
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __decorateClass = (decorators, target, key, kind) => {
7
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
8
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
9
+ if (decorator = decorators[i])
10
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
11
+ if (kind && result) __defProp(target, key, result);
12
+ return result;
13
+ };
14
+ let PdButton = class extends PdBaseUI {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.primary = false;
18
+ this.gradient = false;
19
+ this.disabled = false;
20
+ this.text = "Ok";
21
+ }
22
+ render() {
23
+ return html`
24
+ <div class="button-div" @click=${this._handleClick}>
25
+ <a ?disabled=${this.disabled}>${this.text}</a>
26
+ </div>
27
+ `;
28
+ }
29
+ _handleClick() {
30
+ if (!this.disabled) {
31
+ this.dispatchEvent(
32
+ new CustomEvent("button-clicked", {
33
+ detail: this.value,
34
+ bubbles: true,
35
+ composed: true
36
+ })
37
+ );
38
+ }
39
+ }
40
+ };
41
+ PdButton.styles = [
42
+ PdBaseUI.styles,
43
+ css`
44
+ :host {
45
+ font-family: var(--pd-default-font-title-family);
46
+ font-size: var(--pd-button-font-size, 1em);
47
+ font-weight: var(--pd-button-font-weight, normal);
48
+ /*
49
+ height: 100%;
50
+ width: 100%; => Ohne diese Angabe eht die % Angaben icht
51
+ */
52
+
53
+ margin: 0.5rem;
54
+ margin-left: 0;
55
+ pointer-events: none;
56
+ }
57
+
58
+ .button-div {
59
+ display: flex;
60
+ justify-content: center;
61
+ align-items: center;
62
+ width: var(--pd-button-width, 140px);
63
+ height: var(--pd-button-height, 2rem);
64
+ border-radius: var(--pd-border-radius, 1px);
65
+ background-color: var(--pd-button-bg-col, var(--pd-default-dark-col));
66
+ color: var(--pd-button-font-col, var(--pd-default-bg-col));
67
+ border: var(--pd-button-border, 0);
68
+ cursor: pointer;
69
+ box-shadow: var(--pd-button-box-shadow, none);
70
+ pointer-events: all;
71
+ }
72
+
73
+ :host(:not([disabled])) .button-div:hover {
74
+ box-shadow: var(
75
+ --pd-button-box-shadow-hover,
76
+ -1px 1px 2px var(--pd-default-dark-col)
77
+ );
78
+ background-color: var(
79
+ --pd-button-bg-col-hover,
80
+ var(--pd-default-hover-col)
81
+ );
82
+ color: var(--pd-button-font-col-hover, var(--pd-default-dark-col));
83
+ transition: background-color 0.4s ease 0s;
84
+ --pd-button-border: var(--pd-button-border-hover);
85
+ }
86
+
87
+ :host(:not([disabled])[primary]) .button-div:hover {
88
+ background-color: var(
89
+ --pd-button-primary-bg-col-hover,
90
+ var(--pd-default-hover-col)
91
+ );
92
+ color: var(
93
+ --pd-button-primary-font-col-hover,
94
+ var(--pd-default-bg-col)
95
+ );
96
+ }
97
+
98
+ :host([primary]) .button-div {
99
+ background-color: var(
100
+ --pd-button-primary-bg-col,
101
+ var(--pd-default-col)
102
+ );
103
+ color: var(--pd-button-primary-font-col, var(--pd-default-bg-col));
104
+ }
105
+
106
+ :host([gradient]) .button-div {
107
+ background: linear-gradient(
108
+ to right,
109
+ var(--my-background-gradient-color, red) 0%,
110
+ var(--my-background-color, blue) 100%
111
+ );
112
+ }
113
+
114
+ :host([disabled]) .button-div {
115
+ cursor: auto;
116
+ border-color: var(--pd-default-disabled-col);
117
+ background-color: var(
118
+ --pd-button-bg-col-disabled,
119
+ var(--pd-default-disabled-col)
120
+ );
121
+ color: var(--pd-button-font-col-disabled, black);
122
+ --pd-button-border: var(--pd-button-border-disabled);
123
+ }
124
+
125
+ a {
126
+ display: inline-block;
127
+ text-decoration: none;
128
+ white-space: nowrap;
129
+ margin: 0.5rem;
130
+ pointer-events: none;
131
+ }
132
+ `
133
+ ];
134
+ __decorateClass([
135
+ property({ type: Boolean, reflect: true })
136
+ ], PdButton.prototype, "primary", 2);
137
+ __decorateClass([
138
+ property({ type: Boolean, reflect: true })
139
+ ], PdButton.prototype, "gradient", 2);
140
+ __decorateClass([
141
+ property({ type: Boolean, reflect: true })
142
+ ], PdButton.prototype, "disabled", 2);
143
+ __decorateClass([
144
+ property({ type: String })
145
+ ], PdButton.prototype, "text", 2);
146
+ __decorateClass([
147
+ property({ type: String })
148
+ ], PdButton.prototype, "value", 2);
149
+ PdButton = __decorateClass([
150
+ customElement("pd-button")
151
+ ], PdButton);
152
+ export {
153
+ PdButton
154
+ };
@@ -0,0 +1,14 @@
1
+ import { CSSResultGroup } from 'lit';
2
+ import { PdBaseUIInput } from './pd-base-ui-input';
3
+ export declare class PdCheckbox extends PdBaseUIInput {
4
+ isSwitch: boolean;
5
+ private _hasInner;
6
+ static styles: CSSResultGroup;
7
+ constructor();
8
+ firstUpdated(): void;
9
+ render(): import('lit-html').TemplateResult<1>;
10
+ private _onClick;
11
+ private _onKeyPress;
12
+ private _onLinkClick;
13
+ }
14
+ //# sourceMappingURL=pd-checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-checkbox.d.ts","sourceRoot":"","sources":["../src/pd-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhD,OAAO,0CAA0C,CAAC;AAElD,OAAO,EAAE,aAAa,EAAoB,MAAM,oBAAoB,CAAC;AAErE,qBACa,UAAW,SAAQ,aAAa;IAE3C,QAAQ,UAAS;IAGjB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAgB,MAAM,EAAE,cAAc,CAmKpC;;IAOO,YAAY;IAIZ,MAAM;IAuCf,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,YAAY;CAGrB"}
@@ -1,4 +1,251 @@
1
- import { PdCheckbox } from "./src/PdCheckbox.js";
2
- if (!customElements.get("pd-checkbox")) {
3
- window.customElements.define("pd-checkbox", PdCheckbox);
4
- }
1
+ import { css, html } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { classMap } from "lit/directives/class-map.js";
4
+ import "@progressive-development/pd-icon/pd-icon";
5
+ import { PdBaseUIInput, INPUT_TYPE_CHECK } from "./pd-base-ui-input.js";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __decorateClass = (decorators, target, key, kind) => {
9
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
10
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
+ if (decorator = decorators[i])
12
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
13
+ if (kind && result) __defProp(target, key, result);
14
+ return result;
15
+ };
16
+ let PdCheckbox = class extends PdBaseUIInput {
17
+ constructor() {
18
+ super();
19
+ this.isSwitch = false;
20
+ this._hasInner = false;
21
+ this._inputType = INPUT_TYPE_CHECK;
22
+ }
23
+ firstUpdated() {
24
+ this._hasInner = this.innerHTML.trim().length > 0;
25
+ }
26
+ render() {
27
+ const checked = this.value === "true";
28
+ const inputId = `${this.id}Check`;
29
+ const classMapVal = {
30
+ disabled: this.disabled,
31
+ switch: this.isSwitch,
32
+ readonly: this.readonly,
33
+ "div-container": true
34
+ };
35
+ const aClassMap = {
36
+ "switch-paddle": this.isSwitch,
37
+ checkbox: !this.isSwitch,
38
+ isChecked: checked,
39
+ isUnchecked: !checked
40
+ };
41
+ return html`
42
+ ${this._renderLabel(inputId)}
43
+ <div @click=${this._onClick} class=${classMap(classMapVal)}>
44
+ <a
45
+ href="#"
46
+ @click=${this._onLinkClick}
47
+ @keypress=${this._onKeyPress}
48
+ class=${classMap(aClassMap)}
49
+ >
50
+ <pd-icon
51
+ icon=${this.isSwitch ? "checkBox" : "checkBoxOnlyCheck"}
52
+ class="small"
53
+ ?activeIcon=${checked}
54
+ ></pd-icon>
55
+ </a>
56
+ ${this._hasInner ? html`<span class="label"><slot></slot></span>` : null}
57
+ </div>
58
+ ${this._renderErrorMsg()}
59
+ `;
60
+ }
61
+ _onClick(event) {
62
+ if (this.disabled || this.readonly) return;
63
+ const checked = this.value === "true";
64
+ this._handleChangedValue(!checked ? "true" : "false", event);
65
+ }
66
+ _onKeyPress(event) {
67
+ event.preventDefault();
68
+ if (event.key === " " || event.code === "Space") {
69
+ this._onClick(event);
70
+ }
71
+ }
72
+ _onLinkClick(event) {
73
+ event.preventDefault();
74
+ }
75
+ };
76
+ PdCheckbox.styles = [
77
+ PdBaseUIInput.styles,
78
+ css`
79
+ :host {
80
+ display: inline-block;
81
+
82
+ /* Style for active checkbox => use defaults from pd-icon if no custom properties set */
83
+ --pd-icon-col-active: var(--pd-cb-col);
84
+ --pd-icon-col-active-hover: var(--pd-cb-col-hover);
85
+ --pd-icon-bg-col-active: var(--pd-cb-bg-col);
86
+ --pd-icon-stroke-col-active: var(--pd-cb-stroke-col);
87
+ --pd-icon-stroke-col-active-hover: var(--pd-cb-stroke-col-hover);
88
+
89
+ /* Style for inactive checkbox */
90
+ --pd-icon-col: var(--pd-cb-unset-col);
91
+ --pd-icon-col-hover: var(--pd-cb-unset-col-hover);
92
+ --pd-icon-bg-col: var(--pd-cb-unset-bg-col);
93
+ --pd-icon-stroke-col: var(--pd-cb-unset-stroke-col);
94
+ --pd-icon-stroke-col-hover: var(--pd-cb-unset-stroke-col-hover);
95
+ }
96
+
97
+ /* Switch pd-icon => Prüfen, bei mir musste ich reflect setzten, wird das verwendet? */
98
+ :host([isSwitch]) {
99
+ /* derzeit keine Angaben */
100
+ }
101
+
102
+ .div-container {
103
+ display: flex;
104
+ align-items: center;
105
+ cursor: pointer;
106
+ }
107
+
108
+ .div-container.disabled {
109
+ opacity: 0.5;
110
+ cursor: auto;
111
+ }
112
+
113
+ .div-container.readonly {
114
+ cursor: auto;
115
+ }
116
+
117
+ /*
118
+ * Class checkbox for icon and a element (checkbox case)
119
+ */
120
+ .checkbox {
121
+ display: flex;
122
+ border-radius: 4px;
123
+ line-height: 0;
124
+ align-items: center;
125
+ justify-content: center;
126
+ /*
127
+ Wurde das hier für Border verwendet? Aktuell border in folgendem Element gesetzt
128
+ background-color: var(--pd-cb-border-col, var(--pd-primary-col, #067394));
129
+ */
130
+ }
131
+
132
+ .checkbox pd-icon {
133
+ margin-right: 0.2rem;
134
+ margin-bottom: 0.2rem;
135
+ border: 2px solid var(--pd-cb-border-col, var(--pd-default-col));
136
+ border-radius: var(--pd-cb-border-radius, 3px);
137
+ }
138
+
139
+ .label {
140
+ margin-left: 0.1rem;
141
+ color: var(--pd-cb-font-col, var(--pd-default-font-input-col));
142
+ font-family: var(--pd-default-font-input-family);
143
+ text-align: left;
144
+ font-size: var(--pd-default-font-input-size);
145
+ }
146
+
147
+ .readonly .label {
148
+ color: var(--pd-cb-font-col-readonly, #4d4d4d);
149
+ }
150
+
151
+ .readonly .checkbox pd-icon {
152
+ border-color: var(--pd-cb-border-col-readonly, transparent);
153
+ }
154
+
155
+ /* Switch styles */
156
+ .switch {
157
+ height: var(--pd-cb-switch-height);
158
+ position: relative;
159
+ outline: 0;
160
+ -webkit-user-select: none;
161
+ -moz-user-select: none;
162
+ -ms-user-select: none;
163
+ user-select: none;
164
+ }
165
+
166
+ .switch .label {
167
+ margin-left: 0.5rem;
168
+ }
169
+
170
+ .switch-paddle {
171
+ display: inline-block;
172
+ vertical-align: baseline;
173
+ margin: 0;
174
+ position: relative;
175
+ min-width: 4rem;
176
+ max-width: 4rem;
177
+ height: 2rem;
178
+ border-radius: 0;
179
+ background: var(--pd-cb-switch-paddle-col, var(--pd-default-col));
180
+ font-weight: inherit;
181
+ color: inherit;
182
+ cursor: pointer;
183
+ }
184
+
185
+ .switch-paddle pd-icon {
186
+ position: absolute;
187
+ top: 0;
188
+ left: 0;
189
+ display: block;
190
+ width: 1.5rem;
191
+ height: 1.5rem;
192
+ -webkit-transform: translate3d(0, 0, 0);
193
+ transform: translate3d(0, 0, 0);
194
+ border: 2px solid var(--pd-cb-border-col, var(--pd-default-col));
195
+ box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
196
+ border-radius: var(--pd-cb-border-radius, 4px);
197
+ -webkit-transition: all 0.25s ease-out;
198
+ transition: all 0.25s ease-out;
199
+ content: "";
200
+ }
201
+
202
+ .disabled .switch-paddle {
203
+ cursor: auto;
204
+ }
205
+
206
+ .readonly .switch-paddle {
207
+ cursor: auto;
208
+ max-width: 2rem;
209
+ min-width: 2rem;
210
+ background: none;
211
+
212
+ /* Prüfen TODO
213
+ --pd-icon-bg: transparent;
214
+ --pd-icon-fill: var(--card-dark-red);
215
+ --pd-icon-fill-hover: var(--pd-icon-fill);
216
+ --pd-icon-fill-active: var(--card-medium-green);
217
+ */
218
+ }
219
+
220
+ .readonly .switch-paddle pd-icon {
221
+ border-color: var(--pd-cb-border-col-readonly, transparent);
222
+ }
223
+
224
+ .readonly .isChecked.switch-paddle pd-icon {
225
+ transform: translate3d(0, 0, 0);
226
+ left: 0rem;
227
+ }
228
+
229
+ .isChecked.switch-paddle pd-icon {
230
+ left: 2.25rem;
231
+ }
232
+
233
+ @media (min-width: 580px) {
234
+ :host {
235
+ font-size: 1rem;
236
+ }
237
+ }
238
+ `
239
+ ];
240
+ __decorateClass([
241
+ property({ type: Boolean })
242
+ ], PdCheckbox.prototype, "isSwitch", 2);
243
+ __decorateClass([
244
+ state()
245
+ ], PdCheckbox.prototype, "_hasInner", 2);
246
+ PdCheckbox = __decorateClass([
247
+ customElement("pd-checkbox")
248
+ ], PdCheckbox);
249
+ export {
250
+ PdCheckbox
251
+ };
@@ -0,0 +1,25 @@
1
+ import { CSSResultGroup, TemplateResult } from 'lit';
2
+ import { PdBaseUI } from './pd-base-ui.js';
3
+ export declare class PdFormContainer extends PdBaseUI {
4
+ /**
5
+ * If true, display info about required fields
6
+ */
7
+ requiredFieldInfo: boolean;
8
+ /**
9
+ * Optional general error message
10
+ */
11
+ commonError: string;
12
+ /**
13
+ * Internal: whether all required fields are valid
14
+ */
15
+ private _requiredFieldsValid;
16
+ static styles: CSSResultGroup;
17
+ connectedCallback(): void;
18
+ disconnectedCallback(): void;
19
+ render(): TemplateResult;
20
+ private _validateForm;
21
+ private static _mailIsValid;
22
+ private static _vatIsValid;
23
+ private static _phoneIsValid;
24
+ }
25
+ //# sourceMappingURL=pd-form-container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-form-container.d.ts","sourceRoot":"","sources":["../src/pd-form-container.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAEH,OAAO,EAAa,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAI1E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qBACa,eAAgB,SAAQ,QAAQ;IAC3C;;OAEG;IAEH,iBAAiB,UAAS;IAE1B;;OAEG;IAEH,WAAW,SAAM;IAEjB;;OAEG;IAEH,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAgB,MAAM,EAAE,cAAc,CAuCpC;IAEO,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,MAAM,IAAI,cAAc;IAyBjC,OAAO,CAAC,aAAa,CAwFnB;IAEF,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,aAAa;CAG7B"}
@@ -1,4 +1,183 @@
1
- import { PdFormContainer } from "./src/PdFormContainer.js";
2
- if (!customElements.get("pd-form-container")) {
3
- window.customElements.define("pd-form-container", PdFormContainer);
4
- }
1
+ import { css, html } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { msg } from "@lit/localize";
4
+ import { PdBaseUI } from "./pd-base-ui.js";
5
+ import { INPUT_TYPE_RANGE, INPUT_TYPE_SELECT } from "./pd-base-ui-input.js";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __decorateClass = (decorators, target, key, kind) => {
9
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
10
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
+ if (decorator = decorators[i])
12
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
13
+ if (kind && result) __defProp(target, key, result);
14
+ return result;
15
+ };
16
+ let PdFormContainer = class extends PdBaseUI {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.requiredFieldInfo = false;
20
+ this.commonError = "";
21
+ this._requiredFieldsValid = true;
22
+ this._validateForm = (e) => {
23
+ const errorMap = e.detail.errorMap;
24
+ const singleElement = e.detail.singleElement;
25
+ const requiredElements = this.querySelectorAll("[required]");
26
+ requiredElements.forEach((el) => {
27
+ const isEmpty = !el.value || el.value === "false" || el.value === "" || el._inputType === INPUT_TYPE_RANGE && el.value === "0" || el._inputType === INPUT_TYPE_SELECT && el.value === "UNDEF";
28
+ const isTarget = !singleElement || el === singleElement;
29
+ if (isEmpty && isTarget) {
30
+ const msgText = el.requiredMsg || msg("Eingabe erforderlich", { id: "pd.form.field.required" });
31
+ el.errorMsg = msgText;
32
+ errorMap.set(el.id, msgText);
33
+ } else if (typeof el.validate === "function" && isTarget) {
34
+ const err = el.validate(e);
35
+ if (err) {
36
+ el.errorMsg = err;
37
+ errorMap.set(el.id, err);
38
+ } else {
39
+ el.errorMsg = "";
40
+ }
41
+ } else if (isTarget) {
42
+ el.errorMsg = "";
43
+ }
44
+ });
45
+ const validateByType = (type, validator, errMsg) => {
46
+ const targets = (singleElement == null ? void 0 : singleElement.getAttribute("field-type")) === type ? [singleElement] : Array.from(this.querySelectorAll(`[field-type="${type}"]`));
47
+ targets.forEach((el) => {
48
+ var _a;
49
+ if (!errorMap.has(el.id) && ((_a = el.value) == null ? void 0 : _a.length)) {
50
+ if (!validator(el.value)) {
51
+ el.errorMsg = errMsg;
52
+ errorMap.set(el.id, errMsg);
53
+ } else {
54
+ el.errorMsg = "";
55
+ }
56
+ }
57
+ });
58
+ };
59
+ validateByType(
60
+ "mail",
61
+ PdFormContainer._mailIsValid,
62
+ msg("Format mail@test.de verwenden", {
63
+ id: "pd.form.field.invalid.mail"
64
+ })
65
+ );
66
+ validateByType(
67
+ "phone",
68
+ PdFormContainer._phoneIsValid,
69
+ msg("Format +49123 123456 verwenden", {
70
+ id: "pd.form.field.invalid.phone"
71
+ })
72
+ );
73
+ validateByType(
74
+ "vat",
75
+ PdFormContainer._vatIsValid,
76
+ msg("Format DE0123456789 verwenden", { id: "pd.form.field.invalid.vat" })
77
+ );
78
+ validateByType(
79
+ "number",
80
+ (val) => !isNaN(parseFloat(val.replaceAll(",", "."))),
81
+ msg("Nur Zahlen erlaubt", { id: "pd.form.field.invalid.number" })
82
+ );
83
+ this._requiredFieldsValid = errorMap.size === 0;
84
+ if (singleElement) {
85
+ e.stopPropagation();
86
+ }
87
+ };
88
+ }
89
+ connectedCallback() {
90
+ super.connectedCallback();
91
+ this.addEventListener("validate-form", this._validateForm);
92
+ }
93
+ disconnectedCallback() {
94
+ super.disconnectedCallback();
95
+ this.removeEventListener(
96
+ "validate-form",
97
+ this._validateForm
98
+ );
99
+ }
100
+ render() {
101
+ const showValidState = this._requiredFieldsValid && !this.commonError;
102
+ return html`
103
+ <form>
104
+ <slot></slot>
105
+ ${(this.requiredFieldInfo || this.commonError) && html`
106
+ <div class="validation-info-container">
107
+ <p
108
+ class="validation-info ${showValidState ? "filled" : "unfilled"}"
109
+ >
110
+ ${this.commonError || (this._requiredFieldsValid ? msg("* Pflichtfelder ausgefüllt", {
111
+ id: "pd.form.required.valid"
112
+ }) : msg("* Pflichtfeld", { id: "pd.form.required.info" }))}
113
+ </p>
114
+ </div>
115
+ `}
116
+ </form>
117
+ `;
118
+ }
119
+ static _mailIsValid(mail) {
120
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
121
+ }
122
+ static _vatIsValid(vat) {
123
+ return /^[A-Z]{2}[0-9]{8,12}$/.test(vat);
124
+ }
125
+ static _phoneIsValid(phone) {
126
+ return /^\+?[0-9 ]{7,15}$/.test(phone);
127
+ }
128
+ };
129
+ PdFormContainer.styles = [
130
+ PdBaseUI.styles,
131
+ css`
132
+ :host {
133
+ display: flex;
134
+ flex-direction: column;
135
+ align-items: flex-start;
136
+ gap: 20px;
137
+ }
138
+
139
+ .validation-info-container {
140
+ padding-top: var(--pd-form-row-padding-top, 10px);
141
+ }
142
+
143
+ .validation-info {
144
+ font-family: var(--pd-default-font-content-family);
145
+ font-size: var(--pd-form-info-font-size, 0.8em);
146
+ padding: 0.5em;
147
+ color: #58585a;
148
+ border-radius: var(--pd-border-radius, 0);
149
+ width: 70%;
150
+ max-width: 780px;
151
+ min-width: 200px;
152
+ }
153
+
154
+ .filled {
155
+ border: 1px solid var(--pd-default-success-col);
156
+ border-left-width: 4px;
157
+ border-right-width: 4px;
158
+ background-color: var(--pd-default-success-light-col);
159
+ }
160
+
161
+ .unfilled {
162
+ border: 1px solid var(--pd-default-error-col);
163
+ border-left-width: 4px;
164
+ border-right-width: 4px;
165
+ background-color: var(--pd-default-error-light-col);
166
+ }
167
+ `
168
+ ];
169
+ __decorateClass([
170
+ property({ type: Boolean })
171
+ ], PdFormContainer.prototype, "requiredFieldInfo", 2);
172
+ __decorateClass([
173
+ property({ type: String })
174
+ ], PdFormContainer.prototype, "commonError", 2);
175
+ __decorateClass([
176
+ state()
177
+ ], PdFormContainer.prototype, "_requiredFieldsValid", 2);
178
+ PdFormContainer = __decorateClass([
179
+ customElement("pd-form-container")
180
+ ], PdFormContainer);
181
+ export {
182
+ PdFormContainer
183
+ };
@@ -0,0 +1,12 @@
1
+ import { CSSResultGroup } from 'lit';
2
+ import { PdBaseUI } from './pd-base-ui.js';
3
+ /**
4
+ * Ein flexibles Container-Element zur Darstellung von Formularzeilen mit Slot-Unterstützung.
5
+ *
6
+ * @slot - Standard-Slot für Formularelemente
7
+ */
8
+ export declare class PdFormRow extends PdBaseUI {
9
+ static styles: CSSResultGroup;
10
+ render(): import('lit-html').TemplateResult<1>;
11
+ }
12
+ //# sourceMappingURL=pd-form-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-form-row.d.ts","sourceRoot":"","sources":["../src/pd-form-row.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;GAIG;AACH,qBACa,SAAU,SAAQ,QAAQ;IACrC,OAAgB,MAAM,EAAE,cAAc,CAqFpC;IAEF,MAAM;CAGP"}