@design.estate/dees-catalog 3.83.0 → 3.84.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.
@@ -164713,6 +164713,37 @@ var FORM_INPUT_TYPES = [
164713
164713
  DeesInputRichtext,
164714
164714
  DeesTable
164715
164715
  ];
164716
+ function isBuiltInFormInputElement(child) {
164717
+ return FORM_INPUT_TYPES.includes(child.constructor);
164718
+ }
164719
+ __name(isBuiltInFormInputElement, "isBuiltInFormInputElement");
164720
+ function isExternalFormCompatibleElement(child) {
164721
+ if (isBuiltInFormInputElement(child)) {
164722
+ return false;
164723
+ }
164724
+ const candidate = child;
164725
+ return typeof candidate.key === "string" && typeof candidate.changeSubject?.subscribe === "function" && typeof candidate.getValue === "function" && typeof candidate.setValue === "function";
164726
+ }
164727
+ __name(isExternalFormCompatibleElement, "isExternalFormCompatibleElement");
164728
+ function isFormInputElement(child) {
164729
+ return isBuiltInFormInputElement(child) || isExternalFormCompatibleElement(child);
164730
+ }
164731
+ __name(isFormInputElement, "isFormInputElement");
164732
+ function getFormElementValue(child) {
164733
+ if (isExternalFormCompatibleElement(child)) {
164734
+ return child.getValue();
164735
+ }
164736
+ return child.value;
164737
+ }
164738
+ __name(getFormElementValue, "getFormElementValue");
164739
+ function setFormElementValue(child, value2) {
164740
+ if (isExternalFormCompatibleElement(child)) {
164741
+ child.setValue(value2);
164742
+ return;
164743
+ }
164744
+ child.value = value2;
164745
+ }
164746
+ __name(setFormElementValue, "setFormElementValue");
164716
164747
  _DeesForm_decorators = [customElement("dees-form")];
164717
164748
  var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_dec = [n5({ type: Boolean, reflect: true, attribute: "horizontal-layout" })], _a43) {
164718
164749
  constructor() {
@@ -164732,19 +164763,19 @@ var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_d
164732
164763
  this.updateRequiredStatus();
164733
164764
  this.updateChildrenLayoutMode();
164734
164765
  for (const child of formChildren) {
164735
- child.changeSubject.subscribe(async () => {
164766
+ const childSubscription = child.changeSubject.subscribe(async () => {
164736
164767
  const valueObject = await this.collectFormData();
164737
164768
  this.changeSubject.next(valueObject);
164738
- console.log(valueObject);
164739
164769
  this.updateRequiredStatus();
164740
164770
  });
164771
+ this.rxSubscriptions.push(childSubscription);
164741
164772
  }
164742
164773
  await this.addBehaviours();
164743
164774
  this.readyDeferred.resolve();
164744
164775
  }
164745
164776
  getFormElements() {
164746
164777
  return Array.from(this.querySelectorAll("*")).filter(
164747
- (child) => FORM_INPUT_TYPES.includes(child.constructor)
164778
+ (child) => isFormInputElement(child)
164748
164779
  );
164749
164780
  }
164750
164781
  getSubmitButton() {
@@ -164753,10 +164784,9 @@ var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_d
164753
164784
  );
164754
164785
  }
164755
164786
  async updateRequiredStatus() {
164756
- console.log("checking the required status.");
164757
164787
  let requiredOK = true;
164758
164788
  for (const childArg of this.getFormElements()) {
164759
- if (childArg.required && !childArg.value) {
164789
+ if (childArg.required && !getFormElementValue(childArg)) {
164760
164790
  requiredOK = false;
164761
164791
  }
164762
164792
  }
@@ -164777,7 +164807,7 @@ var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_d
164777
164807
  console.log(`form element with label "${child.label}" has no key. skipping.`);
164778
164808
  continue;
164779
164809
  }
164780
- valueObject[child.key] = child.value;
164810
+ valueObject[child.key] = getFormElementValue(child);
164781
164811
  }
164782
164812
  return valueObject;
164783
164813
  }
@@ -164790,8 +164820,6 @@ var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_d
164790
164820
  bubbles: true
164791
164821
  });
164792
164822
  this.dispatchEvent(formDataEvent);
164793
- console.log("dispatched data:");
164794
- console.log(valueObject);
164795
164823
  }
164796
164824
  setStatus(visualStateArg, textStateArg) {
164797
164825
  const inputChildren = this.getFormElements();
@@ -164835,14 +164863,14 @@ var _DeesForm = class _DeesForm extends (_a43 = DeesElement, _horizontalLayout_d
164835
164863
  reset() {
164836
164864
  const inputChildren = this.getFormElements();
164837
164865
  for (const inputChild of inputChildren) {
164838
- inputChild.value = null;
164866
+ setFormElementValue(inputChild, null);
164839
164867
  }
164840
164868
  this.setStatus("normal", "Submit");
164841
164869
  }
164842
164870
  async addBehaviours() {
164843
164871
  this.addEventListener("keydown", (event) => {
164844
164872
  const target = event.target;
164845
- if (!FORM_INPUT_TYPES.includes(target.constructor)) return;
164873
+ if (!isFormInputElement(target)) return;
164846
164874
  if (event.key === "Enter") {
164847
164875
  const children2 = this.getFormElements();
164848
164876
  const currentIndex = children2.indexOf(target);
@@ -200528,7 +200556,7 @@ init_group_runtime();
200528
200556
  // ts_web/00_commitinfo_data.ts
200529
200557
  var commitinfo = {
200530
200558
  name: "@design.estate/dees-catalog",
200531
- version: "3.83.0",
200559
+ version: "3.84.0",
200532
200560
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
200533
200561
  };
200534
200562
  export {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.83.0',
6
+ version: '3.84.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -19,7 +19,26 @@ import { DeesInputWysiwyg } from '../../00group-input/dees-input-wysiwyg/dees-in
19
19
  import { DeesInputRichtext } from '../../00group-input/dees-input-richtext/component.js';
20
20
  import { DeesFormSubmit } from '../dees-form-submit/dees-form-submit.js';
21
21
  import { DeesTable } from '../../00group-dataview/dees-table/index.js';
22
- export type TFormInputElement = DeesInputCheckbox | DeesInputCode | DeesInputDatepicker | DeesInputDropdown | DeesInputFileupload | DeesInputIban | DeesInputMultitoggle | DeesInputPhone | DeesInputQuantitySelector | DeesInputRadiogroup | DeesInputText | DeesInputToggle | DeesInputTypelist | DeesInputTags | DeesInputList | DeesInputWysiwyg | DeesInputRichtext | DeesTable<any>;
22
+ export interface IFormCompatibleElement extends HTMLElement {
23
+ key?: string;
24
+ label?: string;
25
+ value?: unknown;
26
+ required?: boolean;
27
+ disabled?: boolean;
28
+ layoutMode?: 'vertical' | 'horizontal' | 'auto';
29
+ changeSubject?: {
30
+ subscribe: (callback: (...args: unknown[]) => unknown) => domtools.plugins.smartrx.rxjs.Subscription;
31
+ };
32
+ getValue?: () => unknown;
33
+ setValue?: (value: unknown) => void;
34
+ }
35
+ export type TFormDataValue = string | number | boolean | null | undefined | unknown[] | File[] | {
36
+ option: string;
37
+ key: string;
38
+ payload?: unknown;
39
+ } | Record<string, unknown>;
40
+ export type TFormData = Record<string, TFormDataValue>;
41
+ export type TFormInputElement = DeesInputCheckbox | DeesInputCode | DeesInputDatepicker | DeesInputDropdown | DeesInputFileupload | DeesInputIban | DeesInputMultitoggle | DeesInputPhone | DeesInputQuantitySelector | DeesInputRadiogroup | DeesInputText | DeesInputToggle | DeesInputTypelist | DeesInputTags | DeesInputList | DeesInputWysiwyg | DeesInputRichtext | DeesTable<any> | IFormCompatibleElement;
23
42
  declare global {
24
43
  interface HTMLElementTagNameMap {
25
44
  'dees-form': DeesForm;
@@ -46,13 +65,7 @@ export declare class DeesForm extends DeesElement {
46
65
  * collects the form data
47
66
  * @returns
48
67
  */
49
- collectFormData(): Promise<{
50
- [key: string]: string | number | boolean | any[] | File[] | {
51
- option: string;
52
- key: string;
53
- payload?: any;
54
- };
55
- }>;
68
+ collectFormData(): Promise<TFormData>;
56
69
  gatherAndDispatch(): Promise<void>;
57
70
  setStatus(visualStateArg: 'normal' | 'pending' | 'error' | 'success', textStateArg: string): void;
58
71
  /**
@@ -75,6 +75,35 @@ const FORM_INPUT_TYPES = [
75
75
  DeesInputRichtext,
76
76
  DeesTable,
77
77
  ];
78
+ function isBuiltInFormInputElement(child) {
79
+ return FORM_INPUT_TYPES.includes(child.constructor);
80
+ }
81
+ function isExternalFormCompatibleElement(child) {
82
+ if (isBuiltInFormInputElement(child)) {
83
+ return false;
84
+ }
85
+ const candidate = child;
86
+ return typeof candidate.key === 'string'
87
+ && typeof candidate.changeSubject?.subscribe === 'function'
88
+ && typeof candidate.getValue === 'function'
89
+ && typeof candidate.setValue === 'function';
90
+ }
91
+ function isFormInputElement(child) {
92
+ return isBuiltInFormInputElement(child) || isExternalFormCompatibleElement(child);
93
+ }
94
+ function getFormElementValue(child) {
95
+ if (isExternalFormCompatibleElement(child)) {
96
+ return child.getValue();
97
+ }
98
+ return child.value;
99
+ }
100
+ function setFormElementValue(child, value) {
101
+ if (isExternalFormCompatibleElement(child)) {
102
+ child.setValue(value);
103
+ return;
104
+ }
105
+ child.value = value;
106
+ }
78
107
  let DeesForm = (() => {
79
108
  let _classDecorators = [customElement('dees-form')];
80
109
  let _classDescriptor;
@@ -132,28 +161,27 @@ let DeesForm = (() => {
132
161
  this.updateRequiredStatus();
133
162
  this.updateChildrenLayoutMode();
134
163
  for (const child of formChildren) {
135
- child.changeSubject.subscribe(async () => {
164
+ const childSubscription = child.changeSubject.subscribe(async () => {
136
165
  const valueObject = await this.collectFormData();
137
166
  this.changeSubject.next(valueObject);
138
- console.log(valueObject);
139
167
  this.updateRequiredStatus();
140
168
  });
169
+ this.rxSubscriptions.push(childSubscription);
141
170
  }
142
171
  await this.addBehaviours();
143
172
  this.readyDeferred.resolve();
144
173
  }
145
174
  getFormElements() {
146
175
  // Use querySelectorAll('*') to find form inputs nested inside wrapper elements (e.g. <div>)
147
- return Array.from(this.querySelectorAll('*')).filter((child) => FORM_INPUT_TYPES.includes(child.constructor));
176
+ return Array.from(this.querySelectorAll('*')).filter((child) => isFormInputElement(child));
148
177
  }
149
178
  getSubmitButton() {
150
179
  return Array.from(this.querySelectorAll('*')).find((child) => child instanceof DeesFormSubmit);
151
180
  }
152
181
  async updateRequiredStatus() {
153
- console.log('checking the required status.');
154
182
  let requiredOK = true;
155
183
  for (const childArg of this.getFormElements()) {
156
- if (childArg.required && !childArg.value) {
184
+ if (childArg.required && !getFormElementValue(childArg)) {
157
185
  requiredOK = false;
158
186
  }
159
187
  }
@@ -174,7 +202,7 @@ let DeesForm = (() => {
174
202
  console.log(`form element with label "${child.label}" has no key. skipping.`);
175
203
  continue;
176
204
  }
177
- valueObject[child.key] = child.value;
205
+ valueObject[child.key] = getFormElementValue(child);
178
206
  }
179
207
  return valueObject;
180
208
  }
@@ -187,8 +215,6 @@ let DeesForm = (() => {
187
215
  bubbles: true,
188
216
  });
189
217
  this.dispatchEvent(formDataEvent);
190
- console.log('dispatched data:');
191
- console.log(valueObject);
192
218
  }
193
219
  setStatus(visualStateArg, textStateArg) {
194
220
  const inputChildren = this.getFormElements();
@@ -233,7 +259,7 @@ let DeesForm = (() => {
233
259
  reset() {
234
260
  const inputChildren = this.getFormElements();
235
261
  for (const inputChild of inputChildren) {
236
- inputChild.value = null;
262
+ setFormElementValue(inputChild, null);
237
263
  }
238
264
  this.setStatus('normal', 'Submit');
239
265
  }
@@ -241,7 +267,7 @@ let DeesForm = (() => {
241
267
  // Use event delegation
242
268
  this.addEventListener('keydown', (event) => {
243
269
  const target = event.target;
244
- if (!FORM_INPUT_TYPES.includes(target.constructor))
270
+ if (!isFormInputElement(target))
245
271
  return;
246
272
  if (event.key === 'Enter') {
247
273
  const children = this.getFormElements();
@@ -288,4 +314,4 @@ let DeesForm = (() => {
288
314
  return DeesForm = _classThis;
289
315
  })();
290
316
  export { DeesForm };
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLElBQUksRUFDSixHQUFHLEVBRUgsV0FBVyxFQUVYLFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUMzSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFB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
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLElBQUksRUFDSixHQUFHLEVBRUgsV0FBVyxFQUVYLFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUMzSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.83.0",
3
+ "version": "3.84.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.83.0',
6
+ version: '3.84.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }
@@ -52,6 +52,37 @@ const FORM_INPUT_TYPES = [
52
52
  DeesTable,
53
53
  ];
54
54
 
55
+ export interface IFormCompatibleElement extends HTMLElement {
56
+ key?: string;
57
+ label?: string;
58
+ value?: unknown;
59
+ required?: boolean;
60
+ disabled?: boolean;
61
+ layoutMode?: 'vertical' | 'horizontal' | 'auto';
62
+ changeSubject?: {
63
+ subscribe: (callback: (...args: unknown[]) => unknown) => domtools.plugins.smartrx.rxjs.Subscription;
64
+ };
65
+ getValue?: () => unknown;
66
+ setValue?: (value: unknown) => void;
67
+ }
68
+
69
+ export type TFormDataValue =
70
+ | string
71
+ | number
72
+ | boolean
73
+ | null
74
+ | undefined
75
+ | unknown[]
76
+ | File[]
77
+ | { option: string; key: string; payload?: unknown }
78
+ | Record<string, unknown>;
79
+
80
+ export type TFormData = Record<string, TFormDataValue>;
81
+
82
+ type TFormElementChangeSubject = {
83
+ subscribe: (callback: () => Promise<void>) => domtools.plugins.smartrx.rxjs.Subscription;
84
+ };
85
+
55
86
  export type TFormInputElement =
56
87
  | DeesInputCheckbox
57
88
  | DeesInputCode
@@ -70,7 +101,42 @@ export type TFormInputElement =
70
101
  | DeesInputList
71
102
  | DeesInputWysiwyg
72
103
  | DeesInputRichtext
73
- | DeesTable<any>;
104
+ | DeesTable<any>
105
+ | IFormCompatibleElement;
106
+
107
+ function isBuiltInFormInputElement(child: Element): boolean {
108
+ return FORM_INPUT_TYPES.includes(child.constructor as any);
109
+ }
110
+
111
+ function isExternalFormCompatibleElement(child: Element): child is IFormCompatibleElement {
112
+ if (isBuiltInFormInputElement(child)) {
113
+ return false;
114
+ }
115
+ const candidate = child as IFormCompatibleElement;
116
+ return typeof candidate.key === 'string'
117
+ && typeof candidate.changeSubject?.subscribe === 'function'
118
+ && typeof candidate.getValue === 'function'
119
+ && typeof candidate.setValue === 'function';
120
+ }
121
+
122
+ function isFormInputElement(child: Element): child is TFormInputElement {
123
+ return isBuiltInFormInputElement(child) || isExternalFormCompatibleElement(child);
124
+ }
125
+
126
+ function getFormElementValue(child: TFormInputElement): TFormDataValue {
127
+ if (isExternalFormCompatibleElement(child as Element)) {
128
+ return (child as IFormCompatibleElement).getValue!() as TFormDataValue;
129
+ }
130
+ return (child as { value: TFormDataValue }).value;
131
+ }
132
+
133
+ function setFormElementValue(child: TFormInputElement, value: TFormDataValue): void {
134
+ if (isExternalFormCompatibleElement(child as Element)) {
135
+ (child as IFormCompatibleElement).setValue!(value);
136
+ return;
137
+ }
138
+ (child as { value: TFormDataValue }).value = value;
139
+ }
74
140
 
75
141
  declare global {
76
142
  interface HTMLElementTagNameMap {
@@ -123,12 +189,12 @@ export class DeesForm extends DeesElement {
123
189
  this.updateChildrenLayoutMode();
124
190
 
125
191
  for (const child of formChildren) {
126
- child.changeSubject.subscribe(async () => {
192
+ const childSubscription = (child.changeSubject as TFormElementChangeSubject).subscribe(async () => {
127
193
  const valueObject = await this.collectFormData();
128
194
  this.changeSubject.next(valueObject);
129
- console.log(valueObject);
130
195
  this.updateRequiredStatus();
131
196
  });
197
+ this.rxSubscriptions.push(childSubscription);
132
198
  }
133
199
  await this.addBehaviours();
134
200
  this.readyDeferred.resolve();
@@ -137,7 +203,7 @@ export class DeesForm extends DeesElement {
137
203
  public getFormElements(): Array<TFormInputElement> {
138
204
  // Use querySelectorAll('*') to find form inputs nested inside wrapper elements (e.g. <div>)
139
205
  return Array.from(this.querySelectorAll('*')).filter((child) =>
140
- FORM_INPUT_TYPES.includes(child.constructor as any)
206
+ isFormInputElement(child)
141
207
  ) as unknown as TFormInputElement[];
142
208
  }
143
209
 
@@ -148,11 +214,9 @@ export class DeesForm extends DeesElement {
148
214
  }
149
215
 
150
216
  public async updateRequiredStatus() {
151
- console.log('checking the required status.');
152
-
153
217
  let requiredOK = true;
154
218
  for (const childArg of this.getFormElements()) {
155
- if (childArg.required && !childArg.value) {
219
+ if (childArg.required && !getFormElementValue(childArg)) {
156
220
  requiredOK = false;
157
221
  }
158
222
  }
@@ -168,7 +232,7 @@ export class DeesForm extends DeesElement {
168
232
  */
169
233
  public async collectFormData() {
170
234
  const children = this.getFormElements();
171
- const valueObject: { [key: string]: string | number | boolean | any[] | File[] | { option: string; key: string; payload?: any } } = {};
235
+ const valueObject: TFormData = {};
172
236
 
173
237
  for (const child of children) {
174
238
  if (!child.key) {
@@ -176,7 +240,7 @@ export class DeesForm extends DeesElement {
176
240
  continue;
177
241
  }
178
242
 
179
- valueObject[child.key] = child.value;
243
+ valueObject[child.key] = getFormElementValue(child);
180
244
  }
181
245
 
182
246
  return valueObject;
@@ -191,8 +255,6 @@ export class DeesForm extends DeesElement {
191
255
  bubbles: true,
192
256
  });
193
257
  this.dispatchEvent(formDataEvent);
194
- console.log('dispatched data:');
195
- console.log(valueObject);
196
258
  }
197
259
 
198
260
  public setStatus(
@@ -244,7 +306,7 @@ export class DeesForm extends DeesElement {
244
306
  const inputChildren = this.getFormElements();
245
307
 
246
308
  for (const inputChild of inputChildren) {
247
- inputChild.value = null;
309
+ setFormElementValue(inputChild, null);
248
310
  }
249
311
  this.setStatus('normal', 'Submit');
250
312
  }
@@ -253,7 +315,7 @@ export class DeesForm extends DeesElement {
253
315
  // Use event delegation
254
316
  this.addEventListener('keydown', (event: KeyboardEvent) => {
255
317
  const target = event.target as DeesElement;
256
- if (!FORM_INPUT_TYPES.includes(target.constructor as any)) return;
318
+ if (!isFormInputElement(target)) return;
257
319
 
258
320
  if (event.key === 'Enter') {
259
321
  const children = this.getFormElements();