@progressive-development/pd-forms 1.0.1 → 1.0.3

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 (75) hide show
  1. package/dist/base/pd-base-ui-input.d.ts +6 -0
  2. package/dist/base/pd-base-ui-input.d.ts.map +1 -1
  3. package/dist/base/pd-base-ui-input.js +46 -1
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +9 -4
  7. package/dist/pd-button/PdButton.d.ts +8 -0
  8. package/dist/pd-button/PdButton.d.ts.map +1 -1
  9. package/dist/pd-button/PdButton.js +23 -0
  10. package/dist/pd-color-picker/PdColorPicker.d.ts +25 -0
  11. package/dist/pd-color-picker/PdColorPicker.d.ts.map +1 -0
  12. package/dist/pd-color-picker/PdColorPicker.js +238 -0
  13. package/dist/pd-color-picker/pd-color-picker.d.ts +3 -0
  14. package/dist/pd-color-picker/pd-color-picker.d.ts.map +1 -0
  15. package/dist/pd-color-picker.d.ts +2 -0
  16. package/dist/pd-color-picker.js +8 -0
  17. package/dist/pd-generic-form/PdGenericForm.d.ts +1 -0
  18. package/dist/pd-generic-form/PdGenericForm.d.ts.map +1 -1
  19. package/dist/pd-generic-form/PdGenericForm.js +12 -2
  20. package/dist/pd-generic-form/pd-generic-form.styles.d.ts.map +1 -1
  21. package/dist/pd-generic-form/pd-generic-form.styles.js +12 -5
  22. package/dist/pd-input-image/PdInputImage.d.ts +79 -0
  23. package/dist/pd-input-image/PdInputImage.d.ts.map +1 -0
  24. package/dist/pd-input-image/PdInputImage.js +553 -0
  25. package/dist/pd-input-image/pd-input-image.d.ts +4 -0
  26. package/dist/pd-input-image/pd-input-image.d.ts.map +1 -0
  27. package/dist/pd-input-image/pd-input-image.styles.d.ts +6 -0
  28. package/dist/pd-input-image/pd-input-image.styles.d.ts.map +1 -0
  29. package/dist/pd-input-image/pd-input-image.styles.js +300 -0
  30. package/dist/pd-input-image.d.ts +2 -0
  31. package/dist/pd-input-image.js +8 -0
  32. package/dist/pd-range/PdRange.d.ts +2 -0
  33. package/dist/pd-range/PdRange.d.ts.map +1 -1
  34. package/dist/pd-range/PdRange.js +11 -7
  35. package/package.json +6 -4
  36. package/dist/pd-button/pd-button.stories.d.ts +0 -84
  37. package/dist/pd-button/pd-button.stories.d.ts.map +0 -1
  38. package/dist/pd-button-group/pd-button-group.stories.d.ts +0 -45
  39. package/dist/pd-button-group/pd-button-group.stories.d.ts.map +0 -1
  40. package/dist/pd-button-select-group/pd-button-select-group.stories.d.ts +0 -46
  41. package/dist/pd-button-select-group/pd-button-select-group.stories.d.ts.map +0 -1
  42. package/dist/pd-checkbox/pd-checkbox.stories.d.ts +0 -45
  43. package/dist/pd-checkbox/pd-checkbox.stories.d.ts.map +0 -1
  44. package/dist/pd-form-container/pd-form-container.stories.d.ts +0 -49
  45. package/dist/pd-form-container/pd-form-container.stories.d.ts.map +0 -1
  46. package/dist/pd-form-field/pd-form-field.stories.d.ts +0 -40
  47. package/dist/pd-form-field/pd-form-field.stories.d.ts.map +0 -1
  48. package/dist/pd-form-fieldset/pd-form-fieldset.stories.d.ts +0 -38
  49. package/dist/pd-form-fieldset/pd-form-fieldset.stories.d.ts.map +0 -1
  50. package/dist/pd-form-row/pd-form-row.stories.d.ts +0 -43
  51. package/dist/pd-form-row/pd-form-row.stories.d.ts.map +0 -1
  52. package/dist/pd-generic-form/pd-generic-form.stories.d.ts +0 -35
  53. package/dist/pd-generic-form/pd-generic-form.stories.d.ts.map +0 -1
  54. package/dist/pd-hover-box/pd-hover-box.stories.d.ts +0 -31
  55. package/dist/pd-hover-box/pd-hover-box.stories.d.ts.map +0 -1
  56. package/dist/pd-input/pd-input.stories.d.ts +0 -73
  57. package/dist/pd-input/pd-input.stories.d.ts.map +0 -1
  58. package/dist/pd-input-area/pd-input-area.stories.d.ts +0 -67
  59. package/dist/pd-input-area/pd-input-area.stories.d.ts.map +0 -1
  60. package/dist/pd-input-file/pd-input-file.stories.d.ts +0 -53
  61. package/dist/pd-input-file/pd-input-file.stories.d.ts.map +0 -1
  62. package/dist/pd-input-time/pd-input-time.stories.d.ts +0 -94
  63. package/dist/pd-input-time/pd-input-time.stories.d.ts.map +0 -1
  64. package/dist/pd-panel-button/pd-panel-button.stories.d.ts +0 -57
  65. package/dist/pd-panel-button/pd-panel-button.stories.d.ts.map +0 -1
  66. package/dist/pd-radio-group/pd-radio-group.stories.d.ts +0 -39
  67. package/dist/pd-radio-group/pd-radio-group.stories.d.ts.map +0 -1
  68. package/dist/pd-range/pd-range.stories.d.ts +0 -51
  69. package/dist/pd-range/pd-range.stories.d.ts.map +0 -1
  70. package/dist/pd-select/pd-select.stories.d.ts +0 -58
  71. package/dist/pd-select/pd-select.stories.d.ts.map +0 -1
  72. package/dist/pd-suggestion-box/pd-suggestion-box.stories.d.ts +0 -79
  73. package/dist/pd-suggestion-box/pd-suggestion-box.stories.d.ts.map +0 -1
  74. package/dist/stories/pd-forms-overview.stories.d.ts +0 -48
  75. package/dist/stories/pd-forms-overview.stories.d.ts.map +0 -1
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 PD Progressive Development UG. All rights reserved.
4
+ */
5
+ export declare const pdInputImageStyles: import('lit').CSSResult;
6
+ //# sourceMappingURL=pd-input-image.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-input-image.styles.d.ts","sourceRoot":"","sources":["../../src/pd-input-image/pd-input-image.styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,kBAAkB,yBAuS9B,CAAC"}
@@ -0,0 +1,300 @@
1
+ import { css } from 'lit';
2
+
3
+ const pdInputImageStyles = css`
4
+ :host {
5
+ --pd-input-field-width: 100%;
6
+ display: block;
7
+ }
8
+
9
+ * {
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ .image-area {
14
+ width: var(--pd-input-field-width, 300px);
15
+ max-width: 100%;
16
+ }
17
+
18
+ .image-container {
19
+ width: 100%;
20
+ min-height: 160px;
21
+ border: var(--pd-input-field-border, 1px solid var(--pd-default-light-col));
22
+ border-bottom: var(
23
+ --pd-input-field-border-bottom,
24
+ 2px solid var(--pd-default-col)
25
+ );
26
+ border-radius: var(--pd-radius-md);
27
+ background: var(--pd-input-field-bg-col, var(--pd-default-bg-col));
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ overflow: hidden;
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ .image-container:not(.has-images) {
36
+ cursor: pointer;
37
+ }
38
+
39
+ .image-container:not(.has-images):hover {
40
+ border-color: var(
41
+ --pd-input-field-border-col-hover,
42
+ var(--pd-default-hover-col)
43
+ );
44
+ }
45
+
46
+ .image-container.has-images {
47
+ min-height: auto;
48
+ }
49
+
50
+ .image-container.error {
51
+ border: 1px solid var(--pd-default-error-col);
52
+ background-color: var(--pd-default-error-light-col);
53
+ }
54
+
55
+ .image-container.valid {
56
+ border: 1px solid var(--pd-default-success-col);
57
+ background-color: var(--pd-default-success-light-col);
58
+ }
59
+
60
+ .image-container[aria-disabled="true"] {
61
+ opacity: 0.5;
62
+ cursor: not-allowed;
63
+ }
64
+
65
+ /* Placeholder (empty state) */
66
+ .placeholder {
67
+ display: flex;
68
+ flex-direction: column;
69
+ align-items: center;
70
+ gap: 8px;
71
+ color: var(--pd-default-font-muted-col, #999);
72
+ font-size: 0.85rem;
73
+ padding: 24px;
74
+ text-align: center;
75
+ }
76
+
77
+ .placeholder-icon {
78
+ --pd-icon-size: 2rem;
79
+ opacity: 0.5;
80
+ }
81
+
82
+ /* Thumbnail layout */
83
+ .thumb-grid {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ gap: var(--pd-input-image-grid-gap, var(--pd-spacing-sm, 8px));
87
+ padding: var(--pd-spacing-sm, 8px);
88
+ }
89
+
90
+ .thumb-item {
91
+ position: relative;
92
+ width: var(--pd-input-image-thumb-size, 120px);
93
+ height: var(--pd-input-image-thumb-size, 120px);
94
+ border-radius: var(--pd-input-image-thumb-radius, var(--pd-radius-md, 4px));
95
+ overflow: hidden;
96
+ }
97
+
98
+ .thumb-item img {
99
+ width: 100%;
100
+ height: 100%;
101
+ object-fit: cover;
102
+ }
103
+
104
+ /* Selectable mode */
105
+ .thumb-item.selectable {
106
+ cursor: pointer;
107
+ border: 3px solid transparent;
108
+ transition:
109
+ opacity 0.15s ease,
110
+ border-color 0.15s ease,
111
+ box-shadow 0.15s ease;
112
+ }
113
+
114
+ .thumb-item.selectable:not(.selected) {
115
+ opacity: 0.7;
116
+ }
117
+
118
+ .thumb-item.selectable:not(.selected):hover {
119
+ opacity: 0.9;
120
+ border-color: var(--pd-default-light-col);
121
+ }
122
+
123
+ .thumb-item.selectable.selected {
124
+ border-color: var(--pd-default-col);
125
+ box-shadow: 0 0 0 2px var(--pd-default-lighter-col);
126
+ }
127
+
128
+ /* Selection checkmark indicator (bottom-right) */
129
+ .thumb-select-indicator {
130
+ position: absolute;
131
+ bottom: 4px;
132
+ right: 4px;
133
+ width: 24px;
134
+ height: 24px;
135
+ border-radius: 50%;
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: center;
139
+ pointer-events: none;
140
+ z-index: 1;
141
+ background: rgba(0, 0, 0, 0.3);
142
+ transition: background 0.15s ease;
143
+ }
144
+
145
+ .thumb-item.selected .thumb-select-indicator {
146
+ background: var(--pd-default-col);
147
+ }
148
+
149
+ .check-icon {
150
+ --pd-icon-size: 16px;
151
+ --my-icon-fill-col: #fff;
152
+ }
153
+
154
+ /* Preview button in selectable mode (top-left) */
155
+ .thumb-preview-btn {
156
+ position: absolute;
157
+ top: 4px;
158
+ left: 4px;
159
+ cursor: pointer;
160
+ z-index: 1;
161
+ opacity: 0;
162
+ transition: opacity 0.15s ease;
163
+ }
164
+
165
+ .thumb-item:hover .thumb-preview-btn {
166
+ opacity: 1;
167
+ }
168
+
169
+ /* Hover overlay on thumbnails (eye icon) */
170
+ .thumb-overlay {
171
+ position: absolute;
172
+ inset: 0;
173
+ background: rgba(0, 0, 0, 0.4);
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ opacity: 0;
178
+ transition: opacity 0.15s ease;
179
+ cursor: pointer;
180
+ }
181
+
182
+ .thumb-item:hover .thumb-overlay {
183
+ opacity: 1;
184
+ }
185
+
186
+ .preview-icon {
187
+ --pd-icon-size: 1.5rem;
188
+ --my-icon-fill-col: #fff;
189
+ }
190
+
191
+ /* Remove icon on thumbnails (pd-icon with .round) */
192
+ .thumb-remove {
193
+ position: absolute;
194
+ top: 4px;
195
+ right: 4px;
196
+ cursor: pointer;
197
+ z-index: 1;
198
+ }
199
+
200
+ /* Action row */
201
+ .action-row {
202
+ display: flex;
203
+ flex-wrap: wrap;
204
+ align-items: center;
205
+ gap: 8px;
206
+ margin-top: 8px;
207
+ width: var(--pd-input-field-width, 300px);
208
+ max-width: 100%;
209
+ }
210
+
211
+ .image-count {
212
+ font-size: 0.8rem;
213
+ color: var(--pd-default-font-muted-col, #999);
214
+ }
215
+
216
+ .max-hint {
217
+ font-size: 0.8rem;
218
+ color: var(--pd-default-font-muted-col, #999);
219
+ font-style: italic;
220
+ }
221
+
222
+ /* URL input row */
223
+ .url-input-row {
224
+ display: flex;
225
+ gap: 4px;
226
+ align-items: center;
227
+ margin-top: 4px;
228
+ width: var(--pd-input-field-width, 300px);
229
+ max-width: 100%;
230
+ }
231
+
232
+ .url-input-row pd-input {
233
+ flex: 1;
234
+ --pd-input-field-width: 100%;
235
+ }
236
+
237
+ /* URL badge on thumbnails */
238
+ .thumb-url-badge {
239
+ position: absolute;
240
+ bottom: 4px;
241
+ left: 4px;
242
+ font-size: 0.6rem;
243
+ font-weight: 600;
244
+ color: #fff;
245
+ background: rgba(0, 0, 0, 0.5);
246
+ border-radius: 3px;
247
+ padding: 1px 4px;
248
+ line-height: 1.2;
249
+ pointer-events: none;
250
+ z-index: 1;
251
+ }
252
+
253
+ /* Hidden file input */
254
+ .file-input-hidden {
255
+ position: absolute;
256
+ width: 0;
257
+ height: 0;
258
+ overflow: hidden;
259
+ opacity: 0;
260
+ }
261
+
262
+ /* Fullscreen preview overlay */
263
+ .image-preview-backdrop {
264
+ position: fixed;
265
+ inset: 0;
266
+ z-index: var(--pd-popup-z-index, 100);
267
+ background: var(
268
+ --pd-popup-modal-bg-rgba,
269
+ var(--pd-modal-overlay-col, rgba(0, 0, 0, 0.7))
270
+ );
271
+ display: flex;
272
+ align-items: center;
273
+ justify-content: center;
274
+ padding: var(--pd-spacing-lg, 24px);
275
+ }
276
+
277
+ .image-preview-container {
278
+ position: relative;
279
+ display: flex;
280
+ gap: var(--pd-spacing-lg, 24px);
281
+ max-width: 90vw;
282
+ max-height: 90vh;
283
+ }
284
+
285
+ .image-preview-main img {
286
+ max-width: 90vw;
287
+ max-height: 85vh;
288
+ object-fit: contain;
289
+ border-radius: var(--pd-radius-md);
290
+ }
291
+
292
+ .image-preview-close {
293
+ position: absolute;
294
+ top: -12px;
295
+ right: -12px;
296
+ cursor: pointer;
297
+ }
298
+ `;
299
+
300
+ export { pdInputImageStyles };
@@ -0,0 +1,2 @@
1
+ export * from './pd-input-image/pd-input-image'
2
+ export {}
@@ -0,0 +1,8 @@
1
+ import { PdInputImage } from './pd-input-image/PdInputImage.js';
2
+
3
+ const tag = "pd-input-image";
4
+ if (!customElements.get(tag)) {
5
+ customElements.define(tag, PdInputImage);
6
+ }
7
+
8
+ export { PdInputImage };
@@ -27,6 +27,8 @@ export declare class PdRange extends PdBaseUIInput {
27
27
  step: number;
28
28
  /** Map of values to display labels. */
29
29
  optionValueMapper: Record<string, string>;
30
+ /** Hide tick marks below the slider. */
31
+ noTicks: boolean;
30
32
  /** Form field name. */
31
33
  name: string;
32
34
  protected _input: HTMLInputElement | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"PdRange.d.ts","sourceRoot":"","sources":["../../src/pd-range/PdRange.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhE,OAAO,EAAE,aAAa,EAAoB,MAAM,6BAA6B,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAQ,SAAQ,aAAa;IACxC,qBAAqB;IAErB,GAAG,EAAE,MAAM,CAAK;IAEhB,qBAAqB;IAErB,GAAG,EAAE,MAAM,CAAM;IAEjB,sBAAsB;IAEtB,IAAI,SAAK;IAET,uCAAuC;IAEvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAE/C,uBAAuB;IAEvB,IAAI,SAAM;IAEV,SAAS,CAAC,MAAM,EAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAEvD,OAAgB,MAAM,EAAE,cAAc,CA0JpC;;IAOO,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAOhD,YAAY,IAAI,IAAI;IAK7B,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAInC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAgBtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAcvC,KAAK,IAAI,IAAI;IAIJ,MAAM;IA6CN,gBAAgB,IAAI,MAAM;IAI5B,KAAK,IAAI,IAAI;CAGrB"}
1
+ {"version":3,"file":"PdRange.d.ts","sourceRoot":"","sources":["../../src/pd-range/PdRange.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhE,OAAO,EAAE,aAAa,EAAoB,MAAM,6BAA6B,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAQ,SAAQ,aAAa;IACxC,qBAAqB;IAErB,GAAG,EAAE,MAAM,CAAK;IAEhB,qBAAqB;IAErB,GAAG,EAAE,MAAM,CAAM;IAEjB,sBAAsB;IAEtB,IAAI,SAAK;IAET,uCAAuC;IAEvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAE/C,wCAAwC;IAExC,OAAO,UAAS;IAEhB,uBAAuB;IAEvB,IAAI,SAAM;IAEV,SAAS,CAAC,MAAM,EAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAEvD,OAAgB,MAAM,EAAE,cAAc,CA0JpC;;IAOO,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAOhD,YAAY,IAAI,IAAI;IAK7B,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAInC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAgBtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI;IAcvC,KAAK,IAAI,IAAI;IAIJ,MAAM;IA+CN,gBAAgB,IAAI,MAAM;IAI5B,KAAK,IAAI,IAAI;CAGrB"}
@@ -19,6 +19,7 @@ class PdRange extends PdBaseUIInput {
19
19
  this.max = 10;
20
20
  this.step = 1;
21
21
  this.optionValueMapper = {};
22
+ this.noTicks = false;
22
23
  this.name = "";
23
24
  this._inputType = INPUT_TYPE_RANGE;
24
25
  }
@@ -48,7 +49,7 @@ class PdRange extends PdBaseUIInput {
48
49
  background: transparent;
49
50
  background-color: var(--pd-range-bg-col, var(--pd-default-col));
50
51
  padding: 0.5rem;
51
- height: var(--pd-input-field-range-height, 1.7rem);
52
+ height: var(--pd-input-field-height, 2.5rem);
52
53
  box-sizing: border-box;
53
54
  border-radius: 0.75rem;
54
55
  }
@@ -253,14 +254,14 @@ class PdRange extends PdBaseUIInput {
253
254
  @blur="${this._onBlur}"
254
255
  @focus="${this._onFocus}"
255
256
  />
256
- <div
257
- class="ticks ${this.disabled ? "disabled" : "enabled"}"
258
- aria-hidden="true"
259
- >
260
- ${Array.from({ length: this.max - this.min + 1 }).map(
257
+ ${this.noTicks ? "" : html`<div
258
+ class="ticks ${this.disabled ? "disabled" : "enabled"}"
259
+ aria-hidden="true"
260
+ >
261
+ ${Array.from({ length: this.max - this.min + 1 }).map(
261
262
  () => html`<span class="tick">|</span>`
262
263
  )}
263
- </div>
264
+ </div>`}
264
265
  </div>
265
266
  ${this._renderErrorMsg()}
266
267
  `;
@@ -284,6 +285,9 @@ __decorateClass([
284
285
  __decorateClass([
285
286
  property({ type: Object })
286
287
  ], PdRange.prototype, "optionValueMapper");
288
+ __decorateClass([
289
+ property({ type: Boolean, attribute: "no-ticks" })
290
+ ], PdRange.prototype, "noTicks");
287
291
  __decorateClass([
288
292
  property({ type: String })
289
293
  ], PdRange.prototype, "name");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progressive-development/pd-forms",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Webcomponents library 'pd-forms' for form input elements.",
5
5
  "author": "PD Progressive Development",
6
6
  "license": "MIT",
@@ -18,12 +18,14 @@
18
18
  "./pd-panel-button": "./dist/pd-panel-button.js",
19
19
  "./pd-button-select-group": "./dist/pd-button-select-group.js",
20
20
  "./pd-checkbox": "./dist/pd-checkbox.js",
21
+ "./pd-color-picker": "./dist/pd-color-picker.js",
21
22
  "./pd-form-container": "./dist/pd-form-container.js",
22
23
  "./pd-form-field": "./dist/pd-form-field.js",
23
24
  "./pd-form-row": "./dist/pd-form-row.js",
24
25
  "./pd-hover-box": "./dist/pd-hover-box.js",
25
26
  "./pd-input-area": "./dist/pd-input-area.js",
26
27
  "./pd-input-file": "./dist/pd-input-file.js",
28
+ "./pd-input-image": "./dist/pd-input-image.js",
27
29
  "./pd-input-time": "./dist/pd-input-time.js",
28
30
  "./pd-input": "./dist/pd-input.js",
29
31
  "./pd-radio-group": "./dist/pd-radio-group.js",
@@ -46,9 +48,9 @@
46
48
  "@lit/localize": "^0.12.2",
47
49
  "@lit-labs/motion": "^1.0.8",
48
50
  "tslib": "^2.8.1",
49
- "@progressive-development/pd-icon": "1.0.1",
50
- "@progressive-development/pd-model": "1.1.0",
51
- "@progressive-development/pd-shared-styles": "0.3.2"
51
+ "@progressive-development/pd-icon": "1.0.2",
52
+ "@progressive-development/pd-shared-styles": "0.3.2",
53
+ "@progressive-development/pd-model": "1.1.1"
52
54
  },
53
55
  "customElements": "custom-elements.json",
54
56
  "scripts": {
@@ -1,84 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/web-components-vite';
2
- import { PdButtonSize, PdButtonType } from './PdButton.js';
3
- /**
4
- * Story arguments interface for pd-button component.
5
- * Maps to the component's public API.
6
- */
7
- interface PdButtonArgs {
8
- /** The visible button label text */
9
- text: string;
10
- /** Icon name from pd-icon library */
11
- icon: string;
12
- /** Position of the icon: "start" or "end" */
13
- iconPosition: "start" | "end";
14
- /** Primary button styling */
15
- primary: boolean;
16
- /** Gradient background styling */
17
- gradient: boolean;
18
- /** Selected/toggle state */
19
- selected: boolean;
20
- /** Disabled state */
21
- disabled: boolean;
22
- /** Loading state with spinner */
23
- loading: boolean;
24
- /** Full width mode */
25
- fullWidth: boolean;
26
- /** Custom value for button-clicked event */
27
- value: string;
28
- /** Size preset: sm, md, lg, xl */
29
- size: PdButtonSize;
30
- /** Native button type */
31
- type: PdButtonType;
32
- }
33
- /**
34
- * ## pd-button
35
- *
36
- * A simple, accessible button component for form actions and general UI interactions.
37
- *
38
- * ### Features
39
- * - Primary and secondary styles
40
- * - Gradient background option
41
- * - Selected/toggle state with `aria-pressed`
42
- * - Icon support via `icon` property (pd-icon integration)
43
- * - Icon-only buttons with proper accessibility
44
- * - Loading state with spinner
45
- * - Responsive scale system (sm, md, lg, xl)
46
- * - Full keyboard accessibility (Enter, Space)
47
- * - Native `<button>` element for proper semantics
48
- * - CSS parts for external styling
49
- * - Prefix and suffix slots for custom content
50
- *
51
- * ### Accessibility
52
- * - Uses native `<button>` element
53
- * - Keyboard navigation: Tab to focus, Enter/Space to activate
54
- * - `aria-disabled` for disabled state
55
- * - `aria-busy` for loading state
56
- * - `aria-pressed` for selected/toggle state
57
- * - `aria-label` for icon-only buttons
58
- * - Focus-visible styling for keyboard users
59
- * - Minimum touch target of 44x44px
60
- */
61
- declare const meta: Meta<PdButtonArgs>;
62
- export default meta;
63
- type Story = StoryObj<PdButtonArgs>;
64
- /** Default button with standard styling. Interactive via Controls panel. */
65
- export declare const Default: Story;
66
- /** All button variants and states at a glance. */
67
- export declare const AllVariants: Story;
68
- /** All size variants displayed together. */
69
- export declare const AllSizes: Story;
70
- /** Icon positions and icon-only buttons in one compact overview. */
71
- export declare const Icons: Story;
72
- /** Full width button that fills its container. */
73
- export declare const FullWidth: Story;
74
- /** Form action buttons — typical submit/cancel pattern. */
75
- export declare const FormActions: Story;
76
- /** Buttons using prefix/suffix slots for custom content. */
77
- export declare const WithSlots: Story;
78
- /** Interactive toggle button demo. */
79
- export declare const ToggleButton: Story;
80
- /** Demonstrates text wrapping behavior with long labels. */
81
- export declare const TextLengths: Story;
82
- /** CSS Custom Properties — Branded and Redesigned variants. */
83
- export declare const CustomStyling: Story;
84
- //# sourceMappingURL=pd-button.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pd-button.stories.d.ts","sourceRoot":"","sources":["../../src/pd-button/pd-button.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAKrE,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMhE;;;GAGG;AACH,UAAU,YAAY;IACpB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,yBAAyB;IACzB,IAAI,EAAE,YAAY,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,YAAY,CAyG5B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AAMpC,4EAA4E;AAC5E,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAMF,kDAAkD;AAClD,eAAO,MAAM,WAAW,EAAE,KAyDzB,CAAC;AAMF,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,EAAE,KA6CtB,CAAC;AAMF,oEAAoE;AACpE,eAAO,MAAM,KAAK,EAAE,KAgFnB,CAAC;AAMF,kDAAkD;AAClD,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAMF,2DAA2D;AAC3D,eAAO,MAAM,WAAW,EAAE,KAezB,CAAC;AAMF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KA+BvB,CAAC;AAMF,sCAAsC;AACtC,eAAO,MAAM,YAAY,EAAE,KA4C1B,CAAC;AAMF,4DAA4D;AAC5D,eAAO,MAAM,WAAW,EAAE,KA4DzB,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,KAyI3B,CAAC"}
@@ -1,45 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/web-components-vite';
2
- import { ButtonData } from '../types.js';
3
- interface PdButtonGroupArgs {
4
- buttonList: ButtonData[];
5
- initValue: number[];
6
- }
7
- /**
8
- * ## pd-button-group
9
- *
10
- * A button group component for single-selection button sets.
11
- * Buttons are visually connected with shared borders and rounded outer corners.
12
- *
13
- * ### Features
14
- * - Single-selection mode (radio-button-like behavior)
15
- * - Horizontal or vertical layout via `vertical` attribute
16
- * - Supports icons, text, or both via `ButtonData` array
17
- * - Automatic border-radius handling for first/last/only buttons
18
- * - Forwards `--pd-button-scale` to child buttons for consistent sizing
19
- * - Custom colors via CSS custom properties
20
- * - Emits `pd-button-group-change` event on selection change
21
- *
22
- * ### Accessibility
23
- * - `role="group"` for screen reader grouping
24
- * - `group-label` property for accessible group name (aria-label)
25
- * - Individual buttons are keyboard navigable
26
- * - Selected button has visual distinction (inset shadow)
27
- * - Disabled buttons are skipped during selection
28
- *
29
- */
30
- declare const meta: Meta<PdButtonGroupArgs>;
31
- export default meta;
32
- type Story = StoryObj<PdButtonGroupArgs>;
33
- /** Default horizontal button group. Interactive via Controls panel. */
34
- export declare const Default: Story;
35
- /** Button group with pre-selected button via initValue. */
36
- export declare const WithInitialSelection: Story;
37
- /** Vertical button group layout. */
38
- export declare const Vertical: Story;
39
- /** Overview of all button group variants at a glance. */
40
- export declare const AllVariants: Story;
41
- /** Different sizing options using --pd-button-scale and --pd-button-group-width. */
42
- export declare const Scaling: Story;
43
- /** CSS Custom Properties — Branded and Redesigned variants. */
44
- export declare const CustomStyling: Story;
45
- //# sourceMappingURL=pd-button-group.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pd-button-group.stories.d.ts","sourceRoot":"","sources":["../../src/pd-button-group/pd-button-group.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,sBAAsB,CAAC;AAM9B,UAAU,iBAAiB;IACzB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAmCD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAwDjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAMzC,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAMF,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,EAAE,KASlC,CAAC;AAMF,oCAAoC;AACpC,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAMF,yDAAyD;AACzD,eAAO,MAAM,WAAW,EAAE,KAwDzB,CAAC;AAMF,oFAAoF;AACpF,eAAO,MAAM,OAAO,EAAE,KAsDrB,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,KA2G3B,CAAC"}
@@ -1,46 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/web-components-vite';
2
- import { ButtonData } from '../types.js';
3
- /**
4
- * Story arguments interface for pd-button-select-group component.
5
- * Defines all configurable properties available in Storybook controls.
6
- */
7
- interface PdButtonSelectGroupArgs {
8
- /** Array of button options to display in the dropdown */
9
- options: ButtonData[];
10
- /** Index of the initially selected option (-1 for no selection) */
11
- initValue: number;
12
- /** Accessible label for the button group */
13
- groupLabel: string;
14
- }
15
- /**
16
- * ## pd-button-select-group
17
- *
18
- * A dropdown select component that combines a `pd-panel-button` with a
19
- * `pd-button-group` to create a compact single-selection dropdown.
20
- *
21
- * ### Features
22
- * - **Single Selection**: Only one option can be selected at a time
23
- * - **Dropdown Panel**: Options appear in a panel when the button is clicked
24
- * - **Icon Support**: Each option can have an optional icon
25
- * - **Disabled Options**: Individual options can be disabled
26
- * - **Auto-close**: Panel closes automatically after selection
27
- */
28
- declare const meta: Meta<PdButtonSelectGroupArgs>;
29
- export default meta;
30
- type Story = StoryObj<PdButtonSelectGroupArgs>;
31
- /**
32
- * Default configuration with basic options.
33
- * Click the button to open the dropdown panel.
34
- */
35
- export declare const Default: Story;
36
- /** Options containing only text, no icons. Useful for simple selection scenarios. */
37
- export declare const TextOnlyOptions: Story;
38
- /** Options containing only icons, no text. Useful for compact icon-based controls. */
39
- export declare const IconOnlyOptions: Story;
40
- /** Dropdown with one disabled option. The "Word" option cannot be selected. */
41
- export declare const WithDisabledOption: Story;
42
- /** Extended list showing behavior with many options. */
43
- export declare const ManyOptions: Story;
44
- /** CSS Custom Properties — Branded and Redesigned variants. */
45
- export declare const CustomStyling: Story;
46
- //# sourceMappingURL=pd-button-select-group.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pd-button-select-group.stories.d.ts","sourceRoot":"","sources":["../../src/pd-button-select-group/pd-button-select-group.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC;;;GAGG;AACH,UAAU,uBAAuB;IAC/B,yDAAyD;IACzD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB;AAiDD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,uBAAuB,CA0EvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAM/C;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAMF,qFAAqF;AACrF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAMF,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAMF,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,EAAE,KAKhC,CAAC;AAMF,wDAAwD;AACxD,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,KAwF3B,CAAC"}
@@ -1,45 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/web-components-vite';
2
- /**
3
- * Story arguments interface for pd-checkbox component.
4
- * Defines all configurable properties available in Storybook controls.
5
- */
6
- interface PdCheckboxArgs {
7
- /** The label text displayed next to the checkbox */
8
- label: string;
9
- /** The name attribute for form submission */
10
- valueName: string;
11
- /** Initial checked state ("true" or "false") */
12
- initValue: string;
13
- /** Type of checkbox control: CHECK, RADIO, or SWITCH */
14
- checkType: "CHECK" | "RADIO" | "SWITCH";
15
- /** Whether the checkbox is disabled */
16
- disabled: boolean;
17
- /** Whether the checkbox is read-only */
18
- readonly: boolean;
19
- /** Whether the checkbox is required */
20
- required: boolean;
21
- }
22
- /**
23
- * ## pd-checkbox
24
- *
25
- * A versatile checkbox component supporting three visual styles:
26
- * standard checkbox, radio button, and toggle switch.
27
- *
28
- * ### Features
29
- * - **Three Check Types**: CHECK (standard checkbox), RADIO (radio button style), SWITCH (toggle switch)
30
- * - **States**: Supports checked, unchecked, disabled, readonly, and required states
31
- * - **Accessibility**: Keyboard navigation with Space/Enter support
32
- * - **Form Integration**: Works with pd-form-container for validation
33
- */
34
- declare const meta: Meta<PdCheckboxArgs>;
35
- export default meta;
36
- type Story = StoryObj<PdCheckboxArgs>;
37
- /** Default unchecked checkbox with a label. Interactive via Controls panel. */
38
- export declare const Default: Story;
39
- /** All check types and states at a glance. */
40
- export declare const AllVariants: Story;
41
- /** Required checkbox with form validation pattern. */
42
- export declare const Required: Story;
43
- /** CSS Custom Properties -- Branded and Redesigned variants. */
44
- export declare const CustomStyling: Story;
45
- //# sourceMappingURL=pd-checkbox.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pd-checkbox.stories.d.ts","sourceRoot":"","sources":["../../src/pd-checkbox/pd-checkbox.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,kBAAkB,CAAC;AAC1B,OAAO,2CAA2C,CAAC;AACnD,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AAMnC;;;GAGG;AACH,UAAU,cAAc;IACtB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxC,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAMD;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,cAAc,CAuF9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;AAMtC,+EAA+E;AAC/E,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAMF,8CAA8C;AAC9C,eAAO,MAAM,WAAW,EAAE,KA+IzB,CAAC;AAMF,sDAAsD;AACtD,eAAO,MAAM,QAAQ,EAAE,KA0CtB,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KAsK3B,CAAC"}