@xyo-network/react-form-group 7.0.0 → 7.0.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.
@@ -21,12 +21,12 @@ export type FormGroupParams<TStorageValue extends Payload = Payload> = {
21
21
  * NOTE: This is a work in progress and only supports top level controls. Nested controls are not supported.
22
22
  */
23
23
  export declare class FormGroup<TValue extends PayloadWithTimestamp = PayloadWithTimestamp, TStorageValue extends PayloadWithTimestamp = PayloadWithTimestamp> extends AbstractControl {
24
- private fgParams?;
25
24
  private _controls;
25
+ private fgParams?;
26
26
  private serializeListeners;
27
27
  private serializedSensitiveState;
28
28
  private serializedState;
29
- constructor(fgParams?: FormGroupParams<TStorageValue> | undefined);
29
+ constructor(fgParams?: FormGroupParams<TStorageValue>);
30
30
  get errorSummary(): ErrorSummary;
31
31
  get errors(): FormGroupErrors<TValue>;
32
32
  get nonSensitiveStorage(): FormGroupStorage<TStorageValue> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"FormGroup.d.ts","sourceRoot":"","sources":["../../src/FormGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAA;AAErE,KAAK,eAAe,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAElE,MAAM,MAAM,eAAe,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,IAAI;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAC3C,OAAO,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;KAC1C,CAAA;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAID;;;;GAIG;AACH,qBAAa,SAAS,CACpB,MAAM,SAAS,oBAAoB,GAAG,oBAAoB,EAC1D,aAAa,SAAS,oBAAoB,GAAG,oBAAoB,CACjE,SAAQ,eAAe;IAQX,OAAO,CAAC,QAAQ,CAAC;IAP7B,OAAO,CAAC,SAAS,CAAqD;IAEtE,OAAO,CAAC,kBAAkB,CAA+C;IAEzE,OAAO,CAAC,wBAAwB,CAAmD;IACnF,OAAO,CAAC,eAAe,CAAmD;gBAEtD,QAAQ,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,YAAA;IAI7D,IAAI,YAAY,iBAaf;IAED,IAAI,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAOpC;IAED,IAAI,mBAAmB,gDAEtB;IAED,IAAI,gBAAgB,gDAEnB;IAED,IAAa,OAAO,YAEnB;IAED,IAAa,KAAK,YAEjB;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqBtF,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAMtD,aAAa;IAMb,WAAW;IAMX,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAW9B,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS;IAWpD,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,wBAAwB;CAcjC"}
1
+ {"version":3,"file":"FormGroup.d.ts","sourceRoot":"","sources":["../../src/FormGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAElE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAA;AAErE,KAAK,eAAe,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAElE,MAAM,MAAM,eAAe,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,IAAI;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAC3C,OAAO,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;KAC1C,CAAA;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAID;;;;GAIG;AACH,qBAAa,SAAS,CACpB,MAAM,SAAS,oBAAoB,GAAG,oBAAoB,EAC1D,aAAa,SAAS,oBAAoB,GAAG,oBAAoB,CACjE,SAAQ,eAAe;IACvB,OAAO,CAAC,SAAS,CAAqD;IAEtE,OAAO,CAAC,QAAQ,CAAC,CAAgC;IAEjD,OAAO,CAAC,kBAAkB,CAA+C;IAEzE,OAAO,CAAC,wBAAwB,CAAmD;IACnF,OAAO,CAAC,eAAe,CAAmD;gBAE9D,QAAQ,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC;IAKrD,IAAI,YAAY,iBAaf;IAED,IAAI,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAOpC;IAED,IAAI,mBAAmB,gDAEtB;IAED,IAAI,gBAAgB,gDAEnB;IAED,IAAa,OAAO,YAEnB;IAED,IAAa,KAAK,YAEjB;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqBtF,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAMtD,aAAa;IAMb,WAAW;IAMX,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAW9B,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS;IAWpD,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,wBAAwB;CAcjC"}
@@ -21,12 +21,12 @@ export type ControlValueAccessorBaseEvents<TValue = ValidControlValue> = {
21
21
  * The base class for control value accessors interface
22
22
  */
23
23
  export declare class ControlValueAccessorBase<TValue = ValidControlValue, TEventData extends ControlValueAccessorBaseEvents<TValue> = ControlValueAccessorBaseEvents<TValue>> extends ModuleBaseEmitter<BaseParams, TEventData> implements ControlValueAccessor<TValue> {
24
- private config;
25
24
  private _error;
26
25
  private _previousValue;
27
26
  private _serializeSettings;
28
27
  private _touched;
29
28
  private _value;
29
+ private config;
30
30
  constructor(config: ControlValueAccessorBaseConfig);
31
31
  /**
32
32
  * The error message for the control.
@@ -1 +1 @@
1
- {"version":3,"file":"ControlValueAccessorBase.d.ts","sourceRoot":"","sources":["../../../../src/control/accessor/ControlValueAccessorBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,OAAO,KAAK,EACV,wBAAwB,EAAE,oBAAoB,EAAE,UAAU,EAC3D,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAAmC,CAAA;AAEnE,MAAM,MAAM,8BAA8B,CAAC,MAAM,GAAG,iBAAiB,IAAI;IACvE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,YAAY,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAClC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAChC,CAAA;AAED;;GAEG;AACH,qBAAa,wBAAwB,CACnC,MAAM,GAAG,iBAAiB,EAC1B,UAAU,SAAS,8BAA8B,CAAC,MAAM,CAAC,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAElG,SAAQ,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAChD,YAAW,oBAAoB,CAAC,MAAM,CAAC;IAW3B,OAAO,CAAC,MAAM;IAV1B,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,cAAc,CAAsB;IAE5C,OAAO,CAAC,kBAAkB,CAAsE;IAEhG,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,MAAM,CAAsB;gBAEhB,MAAM,EAAE,8BAA8B;IAI1D;;OAEG;IACH,IAAI,KAAK,WAER;IAED;;OAEG;IACH,IAAI,aAAa,WAEhB;IAED;;OAEG;IACH,IAAI,iBAAiB,6BAEpB;IAED;;OAEG;IACH,IAAI,OAAO,YAEV;IAED;;OAEG;IACH,IAAI,KAAK,WAER;IAED;;;OAGG;IACH,QAAQ,GAAI,GAAG,MAAM,UAAO;IAE5B;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAW;IAEjD;;OAEG;IACH,SAAS,GAAI,YAAY,OAAO,UAAO;IAEvC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpD;;;OAGG;IACH,qBAAqB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAIjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIzD;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO;IAW7B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,aAAoB,GAAG,IAAI;IAe1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAWhC;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,wBAAwB;CAGlE"}
1
+ {"version":3,"file":"ControlValueAccessorBase.d.ts","sourceRoot":"","sources":["../../../../src/control/accessor/ControlValueAccessorBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,OAAO,KAAK,EACV,wBAAwB,EAAE,oBAAoB,EAAE,UAAU,EAC3D,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAAmC,CAAA;AAEnE,MAAM,MAAM,8BAA8B,CAAC,MAAM,GAAG,iBAAiB,IAAI;IACvE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,YAAY,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAClC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAChC,CAAA;AAED;;GAEG;AACH,qBAAa,wBAAwB,CACnC,MAAM,GAAG,iBAAiB,EAC1B,UAAU,SAAS,8BAA8B,CAAC,MAAM,CAAC,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAElG,SAAQ,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAChD,YAAW,oBAAoB,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,cAAc,CAAsB;IAE5C,OAAO,CAAC,kBAAkB,CAAsE;IAEhG,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,MAAM,CAAgC;gBAElC,MAAM,EAAE,8BAA8B;IAKlD;;OAEG;IACH,IAAI,KAAK,WAER;IAED;;OAEG;IACH,IAAI,aAAa,WAEhB;IAED;;OAEG;IACH,IAAI,iBAAiB,6BAEpB;IAED;;OAEG;IACH,IAAI,OAAO,YAEV;IAED;;OAEG;IACH,IAAI,KAAK,WAER;IAED;;;OAGG;IACH,QAAQ,GAAI,GAAG,MAAM,UAAO;IAE5B;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAW;IAEjD;;OAEG;IACH,SAAS,GAAI,YAAY,OAAO,UAAO;IAEvC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpD;;;OAGG;IACH,qBAAqB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAIjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIzD;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO;IAW7B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,aAAoB,GAAG,IAAI;IAe1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAWhC;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,wBAAwB;CAGlE"}
@@ -1,12 +1,9 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/context/Context.ts
5
2
  import { createContextEx } from "@xylabs/react-shared";
6
3
  var FormGroupBaseContext = createContextEx();
7
4
 
8
5
  // src/context/Provider.tsx
9
- import React, { useMemo } from "react";
6
+ import { useMemo } from "react";
10
7
 
11
8
  // src/FormGroup.ts
12
9
  import { forget as forget3 } from "@xylabs/forget";
@@ -17,114 +14,105 @@ import { forget as forget2 } from "@xylabs/forget";
17
14
  // src/control/accessor/ControlValueAccessorBase.ts
18
15
  import { forget } from "@xylabs/forget";
19
16
  import { ModuleBaseEmitter } from "@xyo-network/module-event-emitter";
20
- var DefaultSetOptions = {
21
- disableEmit: false
22
- };
17
+ var DefaultSetOptions = { disableEmit: false };
23
18
  var ControlValueAccessorBase = class extends ModuleBaseEmitter {
24
- static {
25
- __name(this, "ControlValueAccessorBase");
26
- }
27
- config;
28
19
  _error = "";
29
20
  _previousValue = void 0;
30
- _serializeSettings = {
31
- sensitive: false,
32
- serializable: false
33
- };
21
+ _serializeSettings = { sensitive: false, serializable: false };
34
22
  _touched = false;
35
23
  _value = void 0;
24
+ config;
36
25
  constructor(config) {
37
- super({}), this.config = config;
26
+ super({});
27
+ this.config = config;
38
28
  }
39
29
  /**
40
- * The error message for the control.
41
- */
30
+ * The error message for the control.
31
+ */
42
32
  get error() {
43
33
  return this._error;
44
34
  }
45
35
  /**
46
- * The "previous value" of the input element.
47
- */
36
+ * The "previous value" of the input element.
37
+ */
48
38
  get previousValue() {
49
39
  return this._previousValue;
50
40
  }
51
41
  /**
52
- * The serialize settings of the input element.
53
- */
42
+ * The serialize settings of the input element.
43
+ */
54
44
  get serializeSettings() {
55
45
  return this._serializeSettings;
56
46
  }
57
47
  /**
58
- * The "touched" state of the input element.
59
- */
48
+ * The "touched" state of the input element.
49
+ */
60
50
  get touched() {
61
51
  return this._touched;
62
52
  }
63
53
  /**
64
- * The current value of the input element.
65
- */
54
+ * The current value of the input element.
55
+ */
66
56
  get value() {
67
57
  return this._value;
68
58
  }
69
59
  /**
70
- * The registered callback function called when a change or input event occurs on the input
71
- * element.
72
- */
73
- onChange = /* @__PURE__ */ __name((_) => {
74
- }, "onChange");
60
+ * The registered callback function called when a change or input event occurs on the input
61
+ * element.
62
+ */
63
+ onChange = (_) => {
64
+ };
75
65
  /**
76
- * Registers a function called when the control error changes.
77
- */
78
- onErrorChange = /* @__PURE__ */ __name(() => {
79
- }, "onErrorChange");
66
+ * Registers a function called when the control error changes.
67
+ */
68
+ onErrorChange = () => {
69
+ };
80
70
  /**
81
- * The registered callback function called when a blur event occurs on the input element.
82
- */
83
- onTouched = /* @__PURE__ */ __name((_isTouched) => {
84
- }, "onTouched");
71
+ * The registered callback function called when a blur event occurs on the input element.
72
+ */
73
+ onTouched = (_isTouched) => {
74
+ };
85
75
  /**
86
- * Registers a function called when the control value changes.
87
- * @param {(_value:ValidControlValue)=>void} fn
88
- * @returns void
89
- */
76
+ * Registers a function called when the control value changes.
77
+ * @param {(_value:ValidControlValue)=>void} fn
78
+ * @returns void
79
+ */
90
80
  registerOnChange(fn) {
91
81
  this.onChange = fn;
92
82
  }
93
83
  /**
94
- * Registers a function called when the control error changes.
95
- * @param {(error:string)=>void} fn
96
- */
84
+ * Registers a function called when the control error changes.
85
+ * @param {(error:string)=>void} fn
86
+ */
97
87
  registerOnErrorChange(fn) {
98
88
  this.onErrorChange = fn;
99
89
  }
100
90
  /**
101
- * Registers a function called when the control is touched.
102
- * @param {(isTouched:boolean)=>void} fn
103
- * @returns void
104
- */
91
+ * Registers a function called when the control is touched.
92
+ * @param {(isTouched:boolean)=>void} fn
93
+ * @returns void
94
+ */
105
95
  registerOnTouched(fn) {
106
96
  this.onTouched = fn;
107
97
  }
108
98
  /**
109
- * Sets the "touched" state of the input element.
110
- * @param {boolean} isTouched
111
- */
99
+ * Sets the "touched" state of the input element.
100
+ * @param {boolean} isTouched
101
+ */
112
102
  setTouched(isTouched) {
113
103
  if (this.touched !== isTouched) {
114
104
  this._touched = isTouched;
115
105
  this.onTouched(isTouched);
116
106
  if (this.config.disableEvents) return;
117
- const emit = /* @__PURE__ */ __name(async () => await this.emit("touchChanged", {
118
- touched: isTouched
119
- }), "emit");
107
+ const emit = async () => await this.emit("touchChanged", { touched: isTouched });
120
108
  forget(emit());
121
109
  }
122
110
  }
123
111
  /**
124
- * Sets the "value" property on the input element.
125
- * @param {ValidControlValue} value
126
- * @returns void
127
- */
112
+ * Sets the "value" property on the input element.
113
+ * @param {ValidControlValue} value
114
+ * @returns void
115
+ */
128
116
  setValue(value, options = DefaultSetOptions) {
129
117
  this._previousValue = this._value;
130
118
  const normalizedValue = value == null ? "" : value;
@@ -132,39 +120,35 @@ var ControlValueAccessorBase = class extends ModuleBaseEmitter {
132
120
  this._value = normalizedValue;
133
121
  this.onChange(normalizedValue);
134
122
  if (this.config.disableEvents || options.disableEmit) return;
135
- const emit = /* @__PURE__ */ __name(async () => await this.emit("valueChanged", {
136
- value: normalizedValue
137
- }), "emit");
123
+ const emit = async () => await this.emit("valueChanged", { value: normalizedValue });
138
124
  forget(emit());
139
125
  }
140
126
  }
141
127
  /**
142
- * Set the error message for the control.
143
- * @param {string} error
144
- */
128
+ * Set the error message for the control.
129
+ * @param {string} error
130
+ */
145
131
  setError(error) {
146
132
  if (this.error !== error) {
147
133
  this._error = error;
148
134
  this.onErrorChange(error);
149
135
  if (this.config.disableEvents) return;
150
- const emit = /* @__PURE__ */ __name(async () => await this.emit("errorChanged", {
151
- error
152
- }), "emit");
136
+ const emit = async () => await this.emit("errorChanged", { error });
153
137
  forget(emit());
154
138
  }
155
139
  }
156
140
  /**
157
- * Sets the "previous value" of the input element.
158
- * @param {ValidControlValue} value
159
- * @returns void
160
- */
141
+ * Sets the "previous value" of the input element.
142
+ * @param {ValidControlValue} value
143
+ * @returns void
144
+ */
161
145
  setPreviousValue(value) {
162
146
  this._previousValue = value;
163
147
  }
164
148
  /**
165
- * Sets the serialize settings of the input element.
166
- * @param {ControlSerializeSettings} settings
167
- */
149
+ * Sets the serialize settings of the input element.
150
+ * @param {ControlSerializeSettings} settings
151
+ */
168
152
  setSerializeSettings(settings) {
169
153
  this._serializeSettings = settings;
170
154
  }
@@ -178,32 +162,29 @@ var DISABLED = "DISABLED";
178
162
 
179
163
  // src/control/AbstractControl.ts
180
164
  var AbstractControl = class extends ControlValueAccessorBase {
181
- static {
182
- __name(this, "AbstractControl");
183
- }
184
165
  _status = void 0;
185
166
  constructor() {
186
167
  super({});
187
168
  }
188
169
  /**
189
- * A control is `disabled` when its `status` is `DISABLED`.
190
- *
191
- * Disabled controls are exempt from validation checks and
192
- * are not included in the aggregate value of their ancestor
193
- * controls.
194
- *
195
- * @returns True if the control is disabled, false otherwise.
196
- */
170
+ * A control is `disabled` when its `status` is `DISABLED`.
171
+ *
172
+ * Disabled controls are exempt from validation checks and
173
+ * are not included in the aggregate value of their ancestor
174
+ * controls.
175
+ *
176
+ * @returns True if the control is disabled, false otherwise.
177
+ */
197
178
  /** @deprecated - disabled functionality not implemented */
198
179
  get disabled() {
199
180
  return this.status === DISABLED;
200
181
  }
201
182
  /**
202
- * A control is `enabled` as long as its `status` is not `DISABLED`.
203
- *
204
- * @returns True if the control has any status other than 'DISABLED',
205
- * false if the status is 'DISABLED'.
206
- */
183
+ * A control is `enabled` as long as its `status` is not `DISABLED`.
184
+ *
185
+ * @returns True if the control has any status other than 'DISABLED',
186
+ * false if the status is 'DISABLED'.
187
+ */
207
188
  get enabled() {
208
189
  return this.status !== DISABLED;
209
190
  }
@@ -218,32 +199,32 @@ var AbstractControl = class extends ControlValueAccessorBase {
218
199
  return this.status === INVALID;
219
200
  }
220
201
  /**
221
- * A control is `pending` when its `status` is `PENDING`.
222
- *
223
- * @returns True if this control is in the process of conducting a validation check,
224
- * false otherwise.
225
- */
202
+ * A control is `pending` when its `status` is `PENDING`.
203
+ *
204
+ * @returns True if this control is in the process of conducting a validation check,
205
+ * false otherwise.
206
+ */
226
207
  get pending() {
227
208
  return this.status == PENDING;
228
209
  }
229
210
  /**
230
- * The raw value of the control.
231
- */
211
+ * The raw value of the control.
212
+ */
232
213
  get rawValue() {
233
214
  return this.value;
234
215
  }
235
216
  /**
236
- * The current status of the control.
237
- */
217
+ * The current status of the control.
218
+ */
238
219
  get status() {
239
220
  return this._status;
240
221
  }
241
222
  /**
242
- * A control is `valid` when its `status` is `VALID`.
243
- *
244
- * @returns True if the control has passed all of its validation tests,
245
- * false otherwise.
246
- */
223
+ * A control is `valid` when its `status` is `VALID`.
224
+ *
225
+ * @returns True if the control has passed all of its validation tests,
226
+ * false otherwise.
227
+ */
247
228
  get valid() {
248
229
  return this.status === VALID;
249
230
  }
@@ -254,9 +235,7 @@ var AbstractControl = class extends ControlValueAccessorBase {
254
235
  setStatus(status) {
255
236
  if (this._status === status) return;
256
237
  this._status = status;
257
- const emit = /* @__PURE__ */ __name(async () => await this.emit("statusChanged", {
258
- status
259
- }), "emit");
238
+ const emit = async () => await this.emit("statusChanged", { status });
260
239
  forget2(emit());
261
240
  }
262
241
  validate() {
@@ -267,16 +246,10 @@ var AbstractControl = class extends ControlValueAccessorBase {
267
246
  // src/control/FormControlBase.ts
268
247
  var AllowAllRegex = /^.*$/s;
269
248
  var FormControlBase = class extends AbstractControl {
270
- static {
271
- __name(this, "FormControlBase");
272
- }
273
249
  /**
274
- * The current and previous cursor position of the input element.
275
- */
276
- cursorPosition = {
277
- current: void 0,
278
- previous: void 0
279
- };
250
+ * The current and previous cursor position of the input element.
251
+ */
252
+ cursorPosition = { current: void 0, previous: void 0 };
280
253
  invalidMessage = "Invalid input";
281
254
  pattern = AllowAllRegex;
282
255
  patternStrict = AllowAllRegex;
@@ -292,8 +265,8 @@ var FormControlBase = class extends AbstractControl {
292
265
  get rawValue() {
293
266
  return this.unmask && this.value ? this.unmask(this.value) : this.value;
294
267
  }
295
- onCursorChange = /* @__PURE__ */ __name(() => {
296
- }, "onCursorChange");
268
+ onCursorChange = () => {
269
+ };
297
270
  setValue(value = "", setOptions) {
298
271
  if (this.unmask && this.pattern) {
299
272
  const unmasked = this.unmask(value);
@@ -326,16 +299,14 @@ var FormControlBase = class extends AbstractControl {
326
299
 
327
300
  // src/FormGroup.ts
328
301
  var FormGroup = class extends AbstractControl {
329
- static {
330
- __name(this, "FormGroup");
331
- }
332
- fgParams;
333
302
  _controls = {};
303
+ fgParams;
334
304
  serializeListeners = {};
335
305
  serializedSensitiveState = {};
336
306
  serializedState = {};
337
307
  constructor(fgParams) {
338
- super(), this.fgParams = fgParams;
308
+ super();
309
+ this.fgParams = fgParams;
339
310
  }
340
311
  get errorSummary() {
341
312
  const errorSummary = {
@@ -440,7 +411,7 @@ var FormGroup = class extends AbstractControl {
440
411
  if (!shouldSerialize && (storage || sensitiveStorage)) console.warn("storage medium set but serialize is not enabled");
441
412
  if (shouldSerialize && control.serializeSettings.serializable) {
442
413
  this.setStateValueFromStorage(name, control);
443
- const listener = /* @__PURE__ */ __name(({ value }) => {
414
+ const listener = ({ value }) => {
444
415
  if (control.serializeSettings.serializable) {
445
416
  const targetStorage = control.serializeSettings.sensitive ? sensitiveStorage : storage;
446
417
  const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState;
@@ -449,63 +420,60 @@ var FormGroup = class extends AbstractControl {
449
420
  payloadWithTimestamp.timestamp = Date.now();
450
421
  this.serializeValues(targetStorage, targetState);
451
422
  }
452
- }, "listener");
423
+ };
453
424
  control.on("valueChanged", listener);
454
425
  this.serializeListeners[name] = listener;
455
426
  }
456
427
  }
457
428
  serializeValues(storage, values) {
458
429
  if (storage && values) {
459
- const write = /* @__PURE__ */ __name(async () => await storage.insert(values), "write");
460
- const clear = /* @__PURE__ */ __name(async () => await storage.clear(), "clear");
430
+ const write = async () => await storage.insert(values);
431
+ const clear = async () => await storage.clear();
461
432
  forget3(clear());
462
433
  forget3(write());
463
434
  }
464
435
  }
465
436
  setStateValueFromStorage(name, control) {
466
- const read = /* @__PURE__ */ __name(async () => {
437
+ const read = async () => {
467
438
  const savedValue = await this.getSerializedValue(name, control.serializeSettings.sensitive);
468
439
  if (savedValue) {
469
440
  const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState;
470
441
  targetState[name] = savedValue;
471
- control.setValue(savedValue, {
472
- disableEmit: true
473
- });
442
+ control.setValue(savedValue, { disableEmit: true });
474
443
  }
475
- }, "read");
444
+ };
476
445
  forget3(read());
477
446
  }
478
447
  };
479
448
 
480
449
  // src/context/Provider.tsx
481
- var FormGroupPayloadProvider = /* @__PURE__ */ __name(({ children, params, ...props }) => {
450
+ import { jsx } from "react/jsx-runtime";
451
+ var FormGroupPayloadProvider = ({
452
+ children,
453
+ params,
454
+ ...props
455
+ }) => {
482
456
  const formGroup = useMemo(() => {
483
457
  const formGroup2 = new FormGroup(params);
484
458
  return formGroup2;
485
- }, [
486
- params
487
- ]);
488
- const value = useMemo(() => ({
489
- formGroup,
490
- provided: true
491
- }), [
492
- formGroup
493
- ]);
494
- return /* @__PURE__ */ React.createElement(FormGroupBaseContext, {
495
- value,
496
- ...props
497
- }, children);
498
- }, "FormGroupPayloadProvider");
459
+ }, [params]);
460
+ const value = useMemo(() => ({ formGroup, provided: true }), [formGroup]);
461
+ return /* @__PURE__ */ jsx(
462
+ FormGroupBaseContext,
463
+ {
464
+ value,
465
+ ...props,
466
+ children
467
+ }
468
+ );
469
+ };
499
470
 
500
471
  // src/context/use.ts
501
472
  import { useContextEx } from "@xylabs/react-shared";
502
- var useFormGroup = /* @__PURE__ */ __name((required = false) => useContextEx(FormGroupBaseContext, "FormGroup", required), "useFormGroup");
473
+ var useFormGroup = (required = false) => useContextEx(FormGroupBaseContext, "FormGroup", required);
503
474
 
504
475
  // src/storage/ArchivistFormGroupStorage.ts
505
476
  var ArchivistFormGroupStorage = class {
506
- static {
507
- __name(this, "ArchivistFormGroupStorage");
508
- }
509
477
  archivist;
510
478
  constructor(archivist) {
511
479
  this.archivist = archivist;
@@ -518,9 +486,7 @@ var ArchivistFormGroupStorage = class {
518
486
  return all.at(-1);
519
487
  }
520
488
  async insert(value) {
521
- await this.archivist.insert?.([
522
- value
523
- ]);
489
+ await this.archivist.insert?.([value]);
524
490
  }
525
491
  };
526
492
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/Context.ts","../../src/context/Provider.tsx","../../src/FormGroup.ts","../../src/control/AbstractControl.ts","../../src/control/accessor/ControlValueAccessorBase.ts","../../src/control/accessor/FormControlStatus.ts","../../src/control/FormControlBase.ts","../../src/context/use.ts","../../src/storage/ArchivistFormGroupStorage.ts"],"sourcesContent":["import { createContextEx } from '@xylabs/react-shared'\n\nimport type { FormGroupContextWithPayloadState } from './State.ts'\n\nexport const FormGroupBaseContext = createContextEx<FormGroupContextWithPayloadState>()\n","import type { Payload } from '@xyo-network/payload-model'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport type { FormGroupParams } from '../FormGroup.ts'\nimport { FormGroup } from '../FormGroup.ts'\nimport { FormGroupBaseContext } from './Context.ts'\nimport type { FormGroupContextWithPayloadState } from './State.ts'\n\nexport interface FormGroupPayloadProviderProps<TStorage extends Payload = Payload> extends PropsWithChildren {\n params?: FormGroupParams<TStorage>\n}\n\n/**\n * Provides a FormGroup to child components.\n */\nexport const FormGroupPayloadProvider = ({\n children, params, ...props\n}: FormGroupPayloadProviderProps) => {\n const formGroup = useMemo(() => {\n const formGroup = new FormGroup<Payload, Payload>(params)\n return formGroup\n }, [params])\n\n const value: FormGroupContextWithPayloadState = useMemo(() => ({ formGroup, provided: true }), [formGroup])\n\n return (\n\n <FormGroupBaseContext\n value={value}\n {...props}\n >\n {children}\n </FormGroupBaseContext>\n )\n}\n","import type { EventListener } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { ControlValueAccessorBaseEvents } from './control/index.ts'\nimport { AbstractControl } from './control/index.ts'\nimport type { ErrorSummary } from './InputError.ts'\nimport type { FormGroupStorage } from './storage/index.ts'\n\nexport type PayloadWithTimestamp = Payload<{ timestamp?: number }>\n\nexport type KeyOfString<T> = keyof T extends string ? keyof T : never\n\ntype FormGroupErrors<TValue> = Record<KeyOfString<TValue>, string>\n\nexport type FormGroupParams<TStorageValue extends Payload = Payload> = {\n serialize?: boolean\n storage?: {\n sensitive?: FormGroupStorage<TStorageValue>\n storage?: FormGroupStorage<TStorageValue>\n }\n ttlStorage?: number\n}\n\ntype ValueChangeEventListener = EventListener<ControlValueAccessorBaseEvents['valueChanged']>\n\n/**\n * Organize form controls in a group.\n *\n * NOTE: This is a work in progress and only supports top level controls. Nested controls are not supported.\n */\nexport class FormGroup<\n TValue extends PayloadWithTimestamp = PayloadWithTimestamp,\n TStorageValue extends PayloadWithTimestamp = PayloadWithTimestamp,\n> extends AbstractControl {\n private _controls = {} as Record<KeyOfString<TValue>, AbstractControl>\n\n private serializeListeners: Record<string, ValueChangeEventListener> = {}\n\n private serializedSensitiveState = {} as Record<KeyOfString<TStorageValue>, string>\n private serializedState = {} as Record<KeyOfString<TStorageValue>, string>\n\n constructor(private fgParams?: FormGroupParams<TStorageValue>) {\n super()\n }\n\n get errorSummary() {\n const errorSummary: ErrorSummary = {\n errorMessage: '',\n invalidFields: [],\n }\n for (const [key, value] of Object.entries(this.errors)) {\n if (value) {\n errorSummary.errorMessage = `${errorSummary.errorMessage}, ${value}`\n errorSummary.invalidFields.push(key)\n }\n }\n\n return errorSummary\n }\n\n get errors(): FormGroupErrors<TValue> {\n const value = {} as FormGroupErrors<TValue>\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n value[castKey] = this._controls[castKey].error\n }\n return value\n }\n\n get nonSensitiveStorage() {\n return this.fgParams?.storage?.storage\n }\n\n get sensitiveStorage() {\n return this.fgParams?.storage?.sensitive\n }\n\n override get touched() {\n return Object.values<AbstractControl>(this._controls).some(control => control.touched)\n }\n\n override get valid() {\n return Object.values<AbstractControl>(this._controls).every(control => control.valid)\n }\n\n get values(): TValue {\n const value = {} as TValue\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n value[castKey] = this._controls[castKey].rawValue as TValue[KeyOfString<TValue>]\n }\n return value\n }\n\n getControl(name: string) {\n return this._controls[name as KeyOfString<TValue>]\n }\n\n async getSerializedValue(name: string, sensitive = false): Promise<string | undefined> {\n const storage = sensitive ? this.sensitiveStorage : this.nonSensitiveStorage\n if (storage) {\n const savedState = await storage.get()\n if (savedState && name in savedState) {\n const savedValue = savedState[name as keyof typeof savedState] as string\n\n // casting to PayloadWithTimestamp to check for timestamp\n const savedStateWithTimestamp = savedState as unknown as PayloadWithTimestamp\n if (savedStateWithTimestamp.timestamp && this.fgParams?.ttlStorage) {\n const expirationDate = savedStateWithTimestamp.timestamp + (this.fgParams?.ttlStorage ?? 0)\n const now = Date.now()\n return now > expirationDate ? undefined : savedValue\n }\n return savedValue\n }\n } else {\n console.warn(`Cannot return value for ${name}. No storage set`)\n }\n }\n\n registerControl(name: string, control: AbstractControl) {\n if (this._controls[name as KeyOfString<TValue>]) console.error(`Replacing Control with name ${name} since it already exists!`)\n this._controls[name as KeyOfString<TValue>] = control\n this.serializeControlValue(name, control)\n }\n\n resetControls() {\n for (const key in this._controls) {\n this.unregisterControl(key)\n }\n }\n\n resetValues() {\n for (const control of Object.values<AbstractControl>(this._controls)) {\n control.setValue('')\n }\n }\n\n unregisterControl(name: string) {\n const control = this._controls[name as KeyOfString<TValue>]\n\n if (control) {\n const listener = this.serializeListeners[name]\n control.on('valueChanged', listener)\n delete this.serializeListeners[name]\n delete this._controls[name as KeyOfString<TValue>]\n }\n }\n\n validateFields(requiredFields?: string[] | undefined) {\n const castRequiredFields = requiredFields as KeyOfString<TValue>[]\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n if (castRequiredFields === undefined || castRequiredFields.includes(castKey)) {\n const control = this._controls[castKey]\n control.validate()\n }\n }\n }\n\n private serializeControlValue(name: string, control: AbstractControl) {\n const shouldSerialize = this.fgParams?.serialize\n const sensitiveStorage = this.sensitiveStorage\n const storage = this.nonSensitiveStorage\n\n if (!shouldSerialize && (storage || sensitiveStorage)) console.warn('storage medium set but serialize is not enabled')\n\n if (shouldSerialize && control.serializeSettings.serializable) {\n this.setStateValueFromStorage(name, control)\n\n const listener: ValueChangeEventListener = ({ value }) => {\n // detect if control wants to be serialized\n if (control.serializeSettings.serializable) {\n // detect control's preferred storage\n const targetStorage = control.serializeSettings.sensitive ? sensitiveStorage : storage\n\n // detect control's preferred state\n const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState\n\n // set the value\n targetState[name as KeyOfString<TStorageValue>] = value ?? ''\n\n // add a timestamp\n const payloadWithTimestamp = targetState as PayloadWithTimestamp\n payloadWithTimestamp.timestamp = Date.now()\n\n // serialize the value\n this.serializeValues(targetStorage, targetState as TStorageValue)\n }\n }\n\n // listen for value changes\n control.on('valueChanged', listener)\n\n // store the listener for later removal\n this.serializeListeners[name] = listener\n }\n }\n\n private serializeValues(storage?: FormGroupStorage<TStorageValue>, values?: TStorageValue) {\n if (storage && values) {\n const write = async () => await storage.insert(values)\n const clear = async () => await storage.clear()\n\n forget(clear())\n forget(write())\n }\n }\n\n private setStateValueFromStorage(name: string, control: AbstractControl) {\n const read = async () => {\n const savedValue = await this.getSerializedValue(name, control.serializeSettings.sensitive)\n\n if (savedValue) {\n const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState\n targetState[name as KeyOfString<TStorageValue>] = savedValue\n\n control.setValue(savedValue, { disableEmit: true })\n }\n }\n\n forget(read())\n }\n}\n","import { forget } from '@xylabs/forget'\n\nimport type {\n ControlValueAccessorBaseEvents,\n FormControlStatus,\n ValidControlValue,\n} from './accessor/index.ts'\nimport {\n ControlValueAccessorBase,\n DISABLED,\n INVALID,\n PENDING,\n VALID,\n} from './accessor/index.ts'\n\nexport type AbstractControlEvents<TValue> = ControlValueAccessorBaseEvents<TValue> & {\n statusChanged: { status: FormControlStatus }\n}\n\n/**\n * This is the base class for `Control` classes (i.e. FormControl),\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * NOTE: Heavily borrowed from Angular's AbstractControl:\n * https://github.com/angular/angular/blob/5dcdbfcba934a930468aec140a7183b034466bdf/packages/forms/src/model/abstract_model.ts\n */\nexport class AbstractControl<TValue extends ValidControlValue = ValidControlValue> extends ControlValueAccessorBase<\n TValue,\n AbstractControlEvents<TValue>\n> {\n private _status: FormControlStatus | undefined = undefined\n\n constructor() {\n super({})\n }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @returns True if the control is disabled, false otherwise.\n */\n /** @deprecated - disabled functionality not implemented */\n get disabled(): boolean {\n return this.status === DISABLED\n }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n */\n get enabled(): boolean {\n return this.status !== DISABLED\n }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean {\n return this.status === INVALID\n }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean {\n return this.status == PENDING\n }\n\n /**\n * The raw value of the control.\n */\n get rawValue(): TValue {\n return this.value\n }\n\n /**\n * The current status of the control.\n */\n get status() {\n return this._status\n }\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean {\n return this.status === VALID\n }\n\n setErrorAndValidity(error: string, status: FormControlStatus) {\n this.setError(error)\n this.setStatus(status)\n }\n\n setStatus(status: FormControlStatus) {\n if (this._status === status) return\n\n this._status = status\n\n const emit = async () => await this.emit('statusChanged', { status })\n forget(emit())\n }\n\n validate(): boolean {\n return true\n }\n}\n","import type { BaseParams } from '@xylabs/base'\nimport { forget } from '@xylabs/forget'\nimport { ModuleBaseEmitter } from '@xyo-network/module-event-emitter'\n\nimport type {\n ControlSerializeSettings, ControlValueAccessor, SetOptions,\n} from './ControlValueAccessor.ts'\nimport type { ValidControlValue } from './ValidControlValue.ts'\n\nexport type ControlValueAccessorBaseConfig = {\n disableEvents?: boolean\n}\n\nexport const DefaultSetOptions: SetOptions = { disableEmit: false }\n\nexport type ControlValueAccessorBaseEvents<TValue = ValidControlValue> = {\n errorChanged: { error: string }\n touchChanged: { touched: boolean }\n valueChanged: { value: TValue }\n}\n\n/**\n * The base class for control value accessors interface\n */\nexport class ControlValueAccessorBase<\n TValue = ValidControlValue,\n TEventData extends ControlValueAccessorBaseEvents<TValue> = ControlValueAccessorBaseEvents<TValue>,\n>\n extends ModuleBaseEmitter<BaseParams, TEventData>\n implements ControlValueAccessor<TValue> {\n private _error: string = ''\n\n private _previousValue = undefined as TValue\n\n private _serializeSettings: ControlSerializeSettings = { sensitive: false, serializable: false }\n\n private _touched: boolean = false\n\n private _value = undefined as TValue\n\n constructor(private config: ControlValueAccessorBaseConfig) {\n super({})\n }\n\n /**\n * The error message for the control.\n */\n get error() {\n return this._error\n }\n\n /**\n * The \"previous value\" of the input element.\n */\n get previousValue() {\n return this._previousValue\n }\n\n /**\n * The serialize settings of the input element.\n */\n get serializeSettings() {\n return this._serializeSettings\n }\n\n /**\n * The \"touched\" state of the input element.\n */\n get touched() {\n return this._touched\n }\n\n /**\n * The current value of the input element.\n */\n get value() {\n return this._value\n }\n\n /**\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: TValue) => {}\n\n /**\n * Registers a function called when the control error changes.\n */\n onErrorChange: (error: string) => void = () => {}\n\n /**\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = (_isTouched: boolean) => {}\n\n /**\n * Registers a function called when the control value changes.\n * @param {(_value:ValidControlValue)=>void} fn\n * @returns void\n */\n registerOnChange(fn: (_value: TValue) => void): void {\n this.onChange = fn\n }\n\n /**\n * Registers a function called when the control error changes.\n * @param {(error:string)=>void} fn\n */\n registerOnErrorChange(fn: (error: string) => void) {\n this.onErrorChange = fn\n }\n\n /**\n * Registers a function called when the control is touched.\n * @param {(isTouched:boolean)=>void} fn\n * @returns void\n */\n registerOnTouched(fn: (isTouched: boolean) => void): void {\n this.onTouched = fn\n }\n\n /**\n * Sets the \"touched\" state of the input element.\n * @param {boolean} isTouched\n */\n setTouched(isTouched: boolean) {\n if (this.touched !== isTouched) {\n this._touched = isTouched\n this.onTouched(isTouched)\n\n if (this.config.disableEvents) return\n const emit = async () => await this.emit('touchChanged', { touched: isTouched })\n forget(emit())\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n * @param {ValidControlValue} value\n * @returns void\n */\n setValue(value: TValue, options = DefaultSetOptions): void {\n this._previousValue = this._value\n\n const normalizedValue = value == null ? ('' as TValue) : value\n\n if (this.value !== normalizedValue) {\n this._value = normalizedValue\n this.onChange(normalizedValue)\n\n if (this.config.disableEvents || options.disableEmit) return\n const emit = async () => await this.emit('valueChanged', { value: normalizedValue })\n forget(emit())\n }\n }\n\n /**\n * Set the error message for the control.\n * @param {string} error\n */\n protected setError(error: string) {\n if (this.error !== error) {\n this._error = error\n this.onErrorChange(error)\n\n if (this.config.disableEvents) return\n const emit = async () => await this.emit('errorChanged', { error })\n forget(emit())\n }\n }\n\n /**\n * Sets the \"previous value\" of the input element.\n * @param {ValidControlValue} value\n * @returns void\n */\n protected setPreviousValue(value: TValue): void {\n this._previousValue = value\n }\n\n /**\n * Sets the serialize settings of the input element.\n * @param {ControlSerializeSettings} settings\n */\n protected setSerializeSettings(settings: ControlSerializeSettings) {\n this._serializeSettings = settings\n }\n}\n","/**\n * Reports that a control is valid, meaning that no errors exist in the input value.\n */\nexport const VALID = 'VALID' as const\n\n/**\n * Reports that a control is invalid, meaning that an error exists in the input value.\n */\nexport const INVALID = 'INVALID' as const\n\n/**\n * Reports that a control is pending, meaning that async validation is occurring and\n * errors are not yet available for the input value.\n */\nexport const PENDING = 'PENDING' as const\n\n/**\n * Reports that a control is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n */\nexport const DISABLED = 'DISABLED' as const\n\n/**\n * A control can have several different statuses. Each\n * possible status is returned as a string literal.\n *\n * * **VALID**: Reports that a control is valid, meaning that no errors exist in the input\n * value.\n * * **INVALID**: Reports that a control is invalid, meaning that an error exists in the input\n * value.\n * * **PENDING**: Reports that a control is pending, meaning that async validation is\n * occurring and errors are not yet available for the input value.\n * * **DISABLED**: Reports that a control is\n * disabled, meaning that the control is exempt from ancestor calculations of validity or value.\n */\nexport type FormControlStatus = typeof VALID | typeof INVALID | typeof PENDING | typeof DISABLED\n","import type { EmptyObject } from '@xylabs/object'\n\nimport { AbstractControl } from './AbstractControl.ts'\nimport type { SetOptions } from './accessor/index.ts'\nimport type { CursorPosition, FormControl } from './FormControl.ts'\n\nconst AllowAllRegex = /^.*$/s\n\n/**\n * A base class for form controls and their validation.\n */\nexport abstract class FormControlBase<TProps extends EmptyObject = EmptyObject> extends AbstractControl implements FormControl {\n /**\n * The current and previous cursor position of the input element.\n */\n cursorPosition: CursorPosition = { current: undefined, previous: undefined }\n\n invalidMessage = 'Invalid input'\n pattern = AllowAllRegex\n patternStrict = AllowAllRegex\n props = {} as TProps\n required = false\n\n private _name: string | undefined = undefined\n\n constructor() {\n super()\n }\n\n get name() {\n return this._name\n }\n\n override get rawValue() {\n return this.unmask && this.value ? this.unmask(this.value) : this.value\n }\n\n blurError?(value: string): void | undefined\n changeError?(value: string): void\n getCursorPosition?(): number | undefined\n mask?(value: string): string\n onCursorChange: (cursor: number | undefined) => void = () => {}\n\n override setValue(value: string = '', setOptions: SetOptions) {\n // check for pattern validation\n if (this.unmask && this.pattern) {\n const unmasked = this.unmask(value)\n const match = RegExp(this.pattern).exec(unmasked)\n // set the new value before checking for errors\n super.setValue(this.mask ? this.mask(unmasked) : unmasked, setOptions)\n if (match) {\n // if the value matches the pattern, update the cursor position\n if (this.getCursorPosition) {\n const newCursor = this.getCursorPosition()\n this.onCursorChange(newCursor)\n }\n } else {\n // if no match, set the error and return to the previous value\n this.setValue(this.previousValue, setOptions)\n this.onCursorChange?.(this.cursorPosition.previous)\n }\n } else {\n // if no mask or pattern, just set the value\n super.setValue(value, setOptions)\n }\n // check for changeError validation after pattern validation\n this.changeError?.(value)\n }\n\n unmask?(value: string): string\n\n // For FormControls, validate is the same as running one of the error checking functions\n override validate(): boolean {\n const normalizedValue = this.value ?? ''\n // prefer the blurError function since validation assumes the user is done typing\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.blurError ? this.blurError(normalizedValue) : this.changeError?.(normalizedValue)\n return !this.error\n }\n\n protected setName(name: string | undefined) {\n this._name = name\n }\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { FormGroupBaseContext } from './Context.ts'\n\nexport const useFormGroup = (required = false) => useContextEx(FormGroupBaseContext, 'FormGroup', required)\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { FormGroupStorage } from './FormGroupStorage.ts'\n\nexport class ArchivistFormGroupStorage implements FormGroupStorage {\n constructor(private archivist: ArchivistInstance) {}\n\n async clear() {\n await this.archivist.clear?.()\n }\n\n async get() {\n const all = await this.archivist.all?.()\n return all.at(-1)\n }\n\n async insert(value: Payload) {\n await this.archivist.insert?.([value])\n }\n}\n"],"mappings":"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","names":["createContextEx","FormGroupBaseContext","React","useMemo","forget","forget","forget","ModuleBaseEmitter","DefaultSetOptions","disableEmit","ControlValueAccessorBase","ModuleBaseEmitter","_error","_previousValue","undefined","_serializeSettings","sensitive","serializable","_touched","_value","config","error","previousValue","serializeSettings","touched","value","onChange","_","onErrorChange","onTouched","_isTouched","registerOnChange","fn","registerOnErrorChange","registerOnTouched","setTouched","isTouched","disableEvents","emit","forget","setValue","options","normalizedValue","setError","setPreviousValue","setSerializeSettings","settings","VALID","INVALID","PENDING","DISABLED","AbstractControl","ControlValueAccessorBase","_status","undefined","disabled","status","DISABLED","enabled","invalid","INVALID","pending","PENDING","rawValue","value","valid","VALID","setErrorAndValidity","error","setError","setStatus","emit","forget","validate","AllowAllRegex","FormControlBase","AbstractControl","cursorPosition","current","undefined","previous","invalidMessage","pattern","patternStrict","props","required","_name","name","rawValue","unmask","value","onCursorChange","setValue","setOptions","unmasked","match","RegExp","exec","mask","getCursorPosition","newCursor","previousValue","changeError","validate","normalizedValue","blurError","error","setName","FormGroup","AbstractControl","_controls","serializeListeners","serializedSensitiveState","serializedState","fgParams","errorSummary","errorMessage","invalidFields","key","value","Object","entries","errors","push","castKey","error","nonSensitiveStorage","storage","sensitiveStorage","sensitive","touched","values","some","control","valid","every","rawValue","getControl","name","getSerializedValue","savedState","get","savedValue","savedStateWithTimestamp","timestamp","ttlStorage","expirationDate","now","Date","undefined","console","warn","registerControl","serializeControlValue","resetControls","unregisterControl","resetValues","setValue","listener","on","validateFields","requiredFields","castRequiredFields","includes","validate","shouldSerialize","serialize","serializeSettings","serializable","setStateValueFromStorage","targetStorage","targetState","payloadWithTimestamp","serializeValues","write","insert","clear","forget","read","disableEmit","FormGroupPayloadProvider","children","params","props","formGroup","useMemo","FormGroup","value","provided","FormGroupBaseContext","useContextEx","useFormGroup","required","useContextEx","FormGroupBaseContext","ArchivistFormGroupStorage","archivist","clear","get","all","at","insert","value"]}
1
+ {"version":3,"sources":["../../src/context/Context.ts","../../src/context/Provider.tsx","../../src/FormGroup.ts","../../src/control/AbstractControl.ts","../../src/control/accessor/ControlValueAccessorBase.ts","../../src/control/accessor/FormControlStatus.ts","../../src/control/FormControlBase.ts","../../src/context/use.ts","../../src/storage/ArchivistFormGroupStorage.ts"],"sourcesContent":["import { createContextEx } from '@xylabs/react-shared'\n\nimport type { FormGroupContextWithPayloadState } from './State.ts'\n\nexport const FormGroupBaseContext = createContextEx<FormGroupContextWithPayloadState>()\n","import type { Payload } from '@xyo-network/payload-model'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport type { FormGroupParams } from '../FormGroup.ts'\nimport { FormGroup } from '../FormGroup.ts'\nimport { FormGroupBaseContext } from './Context.ts'\nimport type { FormGroupContextWithPayloadState } from './State.ts'\n\nexport interface FormGroupPayloadProviderProps<TStorage extends Payload = Payload> extends PropsWithChildren {\n params?: FormGroupParams<TStorage>\n}\n\n/**\n * Provides a FormGroup to child components.\n */\nexport const FormGroupPayloadProvider = ({\n children, params, ...props\n}: FormGroupPayloadProviderProps) => {\n const formGroup = useMemo(() => {\n const formGroup = new FormGroup<Payload, Payload>(params)\n return formGroup\n }, [params])\n\n const value: FormGroupContextWithPayloadState = useMemo(() => ({ formGroup, provided: true }), [formGroup])\n\n return (\n\n <FormGroupBaseContext\n value={value}\n {...props}\n >\n {children}\n </FormGroupBaseContext>\n )\n}\n","import type { EventListener } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { ControlValueAccessorBaseEvents } from './control/index.ts'\nimport { AbstractControl } from './control/index.ts'\nimport type { ErrorSummary } from './InputError.ts'\nimport type { FormGroupStorage } from './storage/index.ts'\n\nexport type PayloadWithTimestamp = Payload<{ timestamp?: number }>\n\nexport type KeyOfString<T> = keyof T extends string ? keyof T : never\n\ntype FormGroupErrors<TValue> = Record<KeyOfString<TValue>, string>\n\nexport type FormGroupParams<TStorageValue extends Payload = Payload> = {\n serialize?: boolean\n storage?: {\n sensitive?: FormGroupStorage<TStorageValue>\n storage?: FormGroupStorage<TStorageValue>\n }\n ttlStorage?: number\n}\n\ntype ValueChangeEventListener = EventListener<ControlValueAccessorBaseEvents['valueChanged']>\n\n/**\n * Organize form controls in a group.\n *\n * NOTE: This is a work in progress and only supports top level controls. Nested controls are not supported.\n */\nexport class FormGroup<\n TValue extends PayloadWithTimestamp = PayloadWithTimestamp,\n TStorageValue extends PayloadWithTimestamp = PayloadWithTimestamp,\n> extends AbstractControl {\n private _controls = {} as Record<KeyOfString<TValue>, AbstractControl>\n\n private fgParams?: FormGroupParams<TStorageValue>\n\n private serializeListeners: Record<string, ValueChangeEventListener> = {}\n\n private serializedSensitiveState = {} as Record<KeyOfString<TStorageValue>, string>\n private serializedState = {} as Record<KeyOfString<TStorageValue>, string>\n\n constructor(fgParams?: FormGroupParams<TStorageValue>) {\n super()\n this.fgParams = fgParams\n }\n\n get errorSummary() {\n const errorSummary: ErrorSummary = {\n errorMessage: '',\n invalidFields: [],\n }\n for (const [key, value] of Object.entries(this.errors)) {\n if (value) {\n errorSummary.errorMessage = `${errorSummary.errorMessage}, ${value}`\n errorSummary.invalidFields.push(key)\n }\n }\n\n return errorSummary\n }\n\n get errors(): FormGroupErrors<TValue> {\n const value = {} as FormGroupErrors<TValue>\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n value[castKey] = this._controls[castKey].error\n }\n return value\n }\n\n get nonSensitiveStorage() {\n return this.fgParams?.storage?.storage\n }\n\n get sensitiveStorage() {\n return this.fgParams?.storage?.sensitive\n }\n\n override get touched() {\n return Object.values<AbstractControl>(this._controls).some(control => control.touched)\n }\n\n override get valid() {\n return Object.values<AbstractControl>(this._controls).every(control => control.valid)\n }\n\n get values(): TValue {\n const value = {} as TValue\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n value[castKey] = this._controls[castKey].rawValue as TValue[KeyOfString<TValue>]\n }\n return value\n }\n\n getControl(name: string) {\n return this._controls[name as KeyOfString<TValue>]\n }\n\n async getSerializedValue(name: string, sensitive = false): Promise<string | undefined> {\n const storage = sensitive ? this.sensitiveStorage : this.nonSensitiveStorage\n if (storage) {\n const savedState = await storage.get()\n if (savedState && name in savedState) {\n const savedValue = savedState[name as keyof typeof savedState] as string\n\n // casting to PayloadWithTimestamp to check for timestamp\n const savedStateWithTimestamp = savedState as unknown as PayloadWithTimestamp\n if (savedStateWithTimestamp.timestamp && this.fgParams?.ttlStorage) {\n const expirationDate = savedStateWithTimestamp.timestamp + (this.fgParams?.ttlStorage ?? 0)\n const now = Date.now()\n return now > expirationDate ? undefined : savedValue\n }\n return savedValue\n }\n } else {\n console.warn(`Cannot return value for ${name}. No storage set`)\n }\n }\n\n registerControl(name: string, control: AbstractControl) {\n if (this._controls[name as KeyOfString<TValue>]) console.error(`Replacing Control with name ${name} since it already exists!`)\n this._controls[name as KeyOfString<TValue>] = control\n this.serializeControlValue(name, control)\n }\n\n resetControls() {\n for (const key in this._controls) {\n this.unregisterControl(key)\n }\n }\n\n resetValues() {\n for (const control of Object.values<AbstractControl>(this._controls)) {\n control.setValue('')\n }\n }\n\n unregisterControl(name: string) {\n const control = this._controls[name as KeyOfString<TValue>]\n\n if (control) {\n const listener = this.serializeListeners[name]\n control.on('valueChanged', listener)\n delete this.serializeListeners[name]\n delete this._controls[name as KeyOfString<TValue>]\n }\n }\n\n validateFields(requiredFields?: string[] | undefined) {\n const castRequiredFields = requiredFields as KeyOfString<TValue>[]\n for (const key in this._controls) {\n const castKey = key as KeyOfString<TValue>\n if (castRequiredFields === undefined || castRequiredFields.includes(castKey)) {\n const control = this._controls[castKey]\n control.validate()\n }\n }\n }\n\n private serializeControlValue(name: string, control: AbstractControl) {\n const shouldSerialize = this.fgParams?.serialize\n const sensitiveStorage = this.sensitiveStorage\n const storage = this.nonSensitiveStorage\n\n if (!shouldSerialize && (storage || sensitiveStorage)) console.warn('storage medium set but serialize is not enabled')\n\n if (shouldSerialize && control.serializeSettings.serializable) {\n this.setStateValueFromStorage(name, control)\n\n const listener: ValueChangeEventListener = ({ value }) => {\n // detect if control wants to be serialized\n if (control.serializeSettings.serializable) {\n // detect control's preferred storage\n const targetStorage = control.serializeSettings.sensitive ? sensitiveStorage : storage\n\n // detect control's preferred state\n const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState\n\n // set the value\n targetState[name as KeyOfString<TStorageValue>] = value ?? ''\n\n // add a timestamp\n const payloadWithTimestamp = targetState as PayloadWithTimestamp\n payloadWithTimestamp.timestamp = Date.now()\n\n // serialize the value\n this.serializeValues(targetStorage, targetState as TStorageValue)\n }\n }\n\n // listen for value changes\n control.on('valueChanged', listener)\n\n // store the listener for later removal\n this.serializeListeners[name] = listener\n }\n }\n\n private serializeValues(storage?: FormGroupStorage<TStorageValue>, values?: TStorageValue) {\n if (storage && values) {\n const write = async () => await storage.insert(values)\n const clear = async () => await storage.clear()\n\n forget(clear())\n forget(write())\n }\n }\n\n private setStateValueFromStorage(name: string, control: AbstractControl) {\n const read = async () => {\n const savedValue = await this.getSerializedValue(name, control.serializeSettings.sensitive)\n\n if (savedValue) {\n const targetState = control.serializeSettings.sensitive ? this.serializedSensitiveState : this.serializedState\n targetState[name as KeyOfString<TStorageValue>] = savedValue\n\n control.setValue(savedValue, { disableEmit: true })\n }\n }\n\n forget(read())\n }\n}\n","import { forget } from '@xylabs/forget'\n\nimport type {\n ControlValueAccessorBaseEvents,\n FormControlStatus,\n ValidControlValue,\n} from './accessor/index.ts'\nimport {\n ControlValueAccessorBase,\n DISABLED,\n INVALID,\n PENDING,\n VALID,\n} from './accessor/index.ts'\n\nexport type AbstractControlEvents<TValue> = ControlValueAccessorBaseEvents<TValue> & {\n statusChanged: { status: FormControlStatus }\n}\n\n/**\n * This is the base class for `Control` classes (i.e. FormControl),\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * NOTE: Heavily borrowed from Angular's AbstractControl:\n * https://github.com/angular/angular/blob/5dcdbfcba934a930468aec140a7183b034466bdf/packages/forms/src/model/abstract_model.ts\n */\nexport class AbstractControl<TValue extends ValidControlValue = ValidControlValue> extends ControlValueAccessorBase<\n TValue,\n AbstractControlEvents<TValue>\n> {\n private _status: FormControlStatus | undefined = undefined\n\n constructor() {\n super({})\n }\n\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @returns True if the control is disabled, false otherwise.\n */\n /** @deprecated - disabled functionality not implemented */\n get disabled(): boolean {\n return this.status === DISABLED\n }\n\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n */\n get enabled(): boolean {\n return this.status !== DISABLED\n }\n\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid(): boolean {\n return this.status === INVALID\n }\n\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending(): boolean {\n return this.status == PENDING\n }\n\n /**\n * The raw value of the control.\n */\n get rawValue(): TValue {\n return this.value\n }\n\n /**\n * The current status of the control.\n */\n get status() {\n return this._status\n }\n\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid(): boolean {\n return this.status === VALID\n }\n\n setErrorAndValidity(error: string, status: FormControlStatus) {\n this.setError(error)\n this.setStatus(status)\n }\n\n setStatus(status: FormControlStatus) {\n if (this._status === status) return\n\n this._status = status\n\n const emit = async () => await this.emit('statusChanged', { status })\n forget(emit())\n }\n\n validate(): boolean {\n return true\n }\n}\n","import type { BaseParams } from '@xylabs/base'\nimport { forget } from '@xylabs/forget'\nimport { ModuleBaseEmitter } from '@xyo-network/module-event-emitter'\n\nimport type {\n ControlSerializeSettings, ControlValueAccessor, SetOptions,\n} from './ControlValueAccessor.ts'\nimport type { ValidControlValue } from './ValidControlValue.ts'\n\nexport type ControlValueAccessorBaseConfig = {\n disableEvents?: boolean\n}\n\nexport const DefaultSetOptions: SetOptions = { disableEmit: false }\n\nexport type ControlValueAccessorBaseEvents<TValue = ValidControlValue> = {\n errorChanged: { error: string }\n touchChanged: { touched: boolean }\n valueChanged: { value: TValue }\n}\n\n/**\n * The base class for control value accessors interface\n */\nexport class ControlValueAccessorBase<\n TValue = ValidControlValue,\n TEventData extends ControlValueAccessorBaseEvents<TValue> = ControlValueAccessorBaseEvents<TValue>,\n>\n extends ModuleBaseEmitter<BaseParams, TEventData>\n implements ControlValueAccessor<TValue> {\n private _error: string = ''\n\n private _previousValue = undefined as TValue\n\n private _serializeSettings: ControlSerializeSettings = { sensitive: false, serializable: false }\n\n private _touched: boolean = false\n\n private _value = undefined as TValue\n\n private config: ControlValueAccessorBaseConfig\n\n constructor(config: ControlValueAccessorBaseConfig) {\n super({})\n this.config = config\n }\n\n /**\n * The error message for the control.\n */\n get error() {\n return this._error\n }\n\n /**\n * The \"previous value\" of the input element.\n */\n get previousValue() {\n return this._previousValue\n }\n\n /**\n * The serialize settings of the input element.\n */\n get serializeSettings() {\n return this._serializeSettings\n }\n\n /**\n * The \"touched\" state of the input element.\n */\n get touched() {\n return this._touched\n }\n\n /**\n * The current value of the input element.\n */\n get value() {\n return this._value\n }\n\n /**\n * The registered callback function called when a change or input event occurs on the input\n * element.\n */\n onChange = (_: TValue) => {}\n\n /**\n * Registers a function called when the control error changes.\n */\n onErrorChange: (error: string) => void = () => {}\n\n /**\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = (_isTouched: boolean) => {}\n\n /**\n * Registers a function called when the control value changes.\n * @param {(_value:ValidControlValue)=>void} fn\n * @returns void\n */\n registerOnChange(fn: (_value: TValue) => void): void {\n this.onChange = fn\n }\n\n /**\n * Registers a function called when the control error changes.\n * @param {(error:string)=>void} fn\n */\n registerOnErrorChange(fn: (error: string) => void) {\n this.onErrorChange = fn\n }\n\n /**\n * Registers a function called when the control is touched.\n * @param {(isTouched:boolean)=>void} fn\n * @returns void\n */\n registerOnTouched(fn: (isTouched: boolean) => void): void {\n this.onTouched = fn\n }\n\n /**\n * Sets the \"touched\" state of the input element.\n * @param {boolean} isTouched\n */\n setTouched(isTouched: boolean) {\n if (this.touched !== isTouched) {\n this._touched = isTouched\n this.onTouched(isTouched)\n\n if (this.config.disableEvents) return\n const emit = async () => await this.emit('touchChanged', { touched: isTouched })\n forget(emit())\n }\n }\n\n /**\n * Sets the \"value\" property on the input element.\n * @param {ValidControlValue} value\n * @returns void\n */\n setValue(value: TValue, options = DefaultSetOptions): void {\n this._previousValue = this._value\n\n const normalizedValue = value == null ? ('' as TValue) : value\n\n if (this.value !== normalizedValue) {\n this._value = normalizedValue\n this.onChange(normalizedValue)\n\n if (this.config.disableEvents || options.disableEmit) return\n const emit = async () => await this.emit('valueChanged', { value: normalizedValue })\n forget(emit())\n }\n }\n\n /**\n * Set the error message for the control.\n * @param {string} error\n */\n protected setError(error: string) {\n if (this.error !== error) {\n this._error = error\n this.onErrorChange(error)\n\n if (this.config.disableEvents) return\n const emit = async () => await this.emit('errorChanged', { error })\n forget(emit())\n }\n }\n\n /**\n * Sets the \"previous value\" of the input element.\n * @param {ValidControlValue} value\n * @returns void\n */\n protected setPreviousValue(value: TValue): void {\n this._previousValue = value\n }\n\n /**\n * Sets the serialize settings of the input element.\n * @param {ControlSerializeSettings} settings\n */\n protected setSerializeSettings(settings: ControlSerializeSettings) {\n this._serializeSettings = settings\n }\n}\n","/**\n * Reports that a control is valid, meaning that no errors exist in the input value.\n */\nexport const VALID = 'VALID' as const\n\n/**\n * Reports that a control is invalid, meaning that an error exists in the input value.\n */\nexport const INVALID = 'INVALID' as const\n\n/**\n * Reports that a control is pending, meaning that async validation is occurring and\n * errors are not yet available for the input value.\n */\nexport const PENDING = 'PENDING' as const\n\n/**\n * Reports that a control is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n */\nexport const DISABLED = 'DISABLED' as const\n\n/**\n * A control can have several different statuses. Each\n * possible status is returned as a string literal.\n *\n * * **VALID**: Reports that a control is valid, meaning that no errors exist in the input\n * value.\n * * **INVALID**: Reports that a control is invalid, meaning that an error exists in the input\n * value.\n * * **PENDING**: Reports that a control is pending, meaning that async validation is\n * occurring and errors are not yet available for the input value.\n * * **DISABLED**: Reports that a control is\n * disabled, meaning that the control is exempt from ancestor calculations of validity or value.\n */\nexport type FormControlStatus = typeof VALID | typeof INVALID | typeof PENDING | typeof DISABLED\n","import type { EmptyObject } from '@xylabs/object'\n\nimport { AbstractControl } from './AbstractControl.ts'\nimport type { SetOptions } from './accessor/index.ts'\nimport type { CursorPosition, FormControl } from './FormControl.ts'\n\nconst AllowAllRegex = /^.*$/s\n\n/**\n * A base class for form controls and their validation.\n */\nexport abstract class FormControlBase<TProps extends EmptyObject = EmptyObject> extends AbstractControl implements FormControl {\n /**\n * The current and previous cursor position of the input element.\n */\n cursorPosition: CursorPosition = { current: undefined, previous: undefined }\n\n invalidMessage = 'Invalid input'\n pattern = AllowAllRegex\n patternStrict = AllowAllRegex\n props = {} as TProps\n required = false\n\n private _name: string | undefined = undefined\n\n constructor() {\n super()\n }\n\n get name() {\n return this._name\n }\n\n override get rawValue() {\n return this.unmask && this.value ? this.unmask(this.value) : this.value\n }\n\n blurError?(value: string): void | undefined\n changeError?(value: string): void\n getCursorPosition?(): number | undefined\n mask?(value: string): string\n onCursorChange: (cursor: number | undefined) => void = () => {}\n\n override setValue(value: string = '', setOptions: SetOptions) {\n // check for pattern validation\n if (this.unmask && this.pattern) {\n const unmasked = this.unmask(value)\n const match = RegExp(this.pattern).exec(unmasked)\n // set the new value before checking for errors\n super.setValue(this.mask ? this.mask(unmasked) : unmasked, setOptions)\n if (match) {\n // if the value matches the pattern, update the cursor position\n if (this.getCursorPosition) {\n const newCursor = this.getCursorPosition()\n this.onCursorChange(newCursor)\n }\n } else {\n // if no match, set the error and return to the previous value\n this.setValue(this.previousValue, setOptions)\n this.onCursorChange?.(this.cursorPosition.previous)\n }\n } else {\n // if no mask or pattern, just set the value\n super.setValue(value, setOptions)\n }\n // check for changeError validation after pattern validation\n this.changeError?.(value)\n }\n\n unmask?(value: string): string\n\n // For FormControls, validate is the same as running one of the error checking functions\n override validate(): boolean {\n const normalizedValue = this.value ?? ''\n // prefer the blurError function since validation assumes the user is done typing\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.blurError ? this.blurError(normalizedValue) : this.changeError?.(normalizedValue)\n return !this.error\n }\n\n protected setName(name: string | undefined) {\n this._name = name\n }\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { FormGroupBaseContext } from './Context.ts'\n\nexport const useFormGroup = (required = false) => useContextEx(FormGroupBaseContext, 'FormGroup', required)\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { FormGroupStorage } from './FormGroupStorage.ts'\n\nexport class ArchivistFormGroupStorage implements FormGroupStorage {\n private archivist: ArchivistInstance\n\n constructor(archivist: ArchivistInstance) {\n this.archivist = archivist\n }\n\n async clear() {\n await this.archivist.clear?.()\n }\n\n async get() {\n const all = await this.archivist.all?.()\n return all.at(-1)\n }\n\n async insert(value: Payload) {\n await this.archivist.insert?.([value])\n }\n}\n"],"mappings":"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","names":["forget","forget","forget","forget","formGroup"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ArchivistFormGroupStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/ArchivistFormGroupStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,qBAAa,yBAA0B,YAAW,gBAAgB;IACpD,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAE1C,KAAK;IAIL,GAAG;IAKH,MAAM,CAAC,KAAK,EAAE,OAAO;CAG5B"}
1
+ {"version":3,"file":"ArchivistFormGroupStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/ArchivistFormGroupStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,qBAAa,yBAA0B,YAAW,gBAAgB;IAChE,OAAO,CAAC,SAAS,CAAmB;gBAExB,SAAS,EAAE,iBAAiB;IAIlC,KAAK;IAIL,GAAG;IAKH,MAAM,CAAC,KAAK,EAAE,OAAO;CAG5B"}
@@ -4,6 +4,6 @@
4
4
  import type { Meta } from '@storybook/react-vite';
5
5
  declare const _default: Meta;
6
6
  export default _default;
7
- declare const Default: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, {}>;
7
+ declare const Default: import(".store/storybook-virtual-997ab3c959/package/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, {}>;
8
8
  export { Default };
9
9
  //# sourceMappingURL=test.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/test.stories.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,uBAAuB,CAAA;wBAGT,IAAI;AAArD,wBAAqD;AAMrD,QAAA,MAAM,OAAO,sGAAoB,CAAA;AAGjC,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"test.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/test.stories.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,uBAAuB,CAAA;wBAGT,IAAI;AAArD,wBAAqD;AAMrD,QAAA,MAAM,OAAO,wIAAoB,CAAA;AAGjC,OAAO,EAAE,OAAO,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/react-form-group",
3
- "version": "7.0.0",
3
+ "version": "7.0.1",
4
4
  "description": "Common React library for all XYO projects that use React",
5
5
  "keywords": [
6
6
  "xyo",
@@ -43,33 +43,36 @@
43
43
  "src"
44
44
  ],
45
45
  "dependencies": {
46
- "@xylabs/base": "^5.0.0",
47
- "@xylabs/forget": "^5.0.0",
48
- "@xylabs/object": "^5.0.0",
49
- "@xylabs/promise": "^5.0.0",
50
- "@xylabs/react-shared": "^7.0.0",
51
- "@xyo-network/archivist-model": "^5.0.0",
52
- "@xyo-network/module-event-emitter": "^5.0.0",
53
- "@xyo-network/payload-model": "^5.0.0"
46
+ "@xylabs/base": "~5.0.8",
47
+ "@xylabs/forget": "~5.0.8",
48
+ "@xylabs/object": "~5.0.8",
49
+ "@xylabs/promise": "~5.0.8",
50
+ "@xylabs/react-shared": "~7.0.1",
51
+ "@xyo-network/archivist-model": "~5.0.5",
52
+ "@xyo-network/module-event-emitter": "~5.0.5",
53
+ "@xyo-network/payload-model": "~5.0.5"
54
54
  },
55
55
  "devDependencies": {
56
- "@mui/icons-material": "^7.2.0",
57
- "@mui/material": "^7.2.0",
58
- "@storybook/react-vite": "^9.0.18",
59
- "@types/react": "^19.1.9",
60
- "@xylabs/events": "^5.0.0",
61
- "@xylabs/ts-scripts-yarn3": "^7.0.2",
62
- "@xylabs/tsconfig-react": "^7.0.2",
63
- "react": "^19.1.1",
64
- "react-dom": "^19.1.1",
65
- "storybook": "^9.0.18",
66
- "typescript": "^5.8.3"
56
+ "@mui/icons-material": "~7.3.1",
57
+ "@mui/material": "~7.3.1",
58
+ "@storybook/react-vite": "~9.1.2",
59
+ "@types/react": "~19.1.10",
60
+ "@xylabs/events": "~5.0.8",
61
+ "@xylabs/ts-scripts-yarn3": "~7.1.1",
62
+ "@xylabs/tsconfig": "~7.1.1",
63
+ "@xylabs/tsconfig-dom": "~7.1.1",
64
+ "@xylabs/tsconfig-react": "~7.1.1",
65
+ "react": "~19.1.1",
66
+ "react-dom": "~19.1.1",
67
+ "storybook": "~9.1.2",
68
+ "typescript": "~5.9.2",
69
+ "vite": "~7.1.2"
67
70
  },
68
71
  "peerDependencies": {
69
72
  "@mui/icons-material": ">=6 <8",
70
73
  "@mui/material": ">=6 <8",
71
- "react": "^19",
72
- "react-dom": "^19"
74
+ "react": "~19",
75
+ "react-dom": "~19"
73
76
  },
74
77
  "publishConfig": {
75
78
  "access": "public"
package/src/FormGroup.ts CHANGED
@@ -35,13 +35,16 @@ export class FormGroup<
35
35
  > extends AbstractControl {
36
36
  private _controls = {} as Record<KeyOfString<TValue>, AbstractControl>
37
37
 
38
+ private fgParams?: FormGroupParams<TStorageValue>
39
+
38
40
  private serializeListeners: Record<string, ValueChangeEventListener> = {}
39
41
 
40
42
  private serializedSensitiveState = {} as Record<KeyOfString<TStorageValue>, string>
41
43
  private serializedState = {} as Record<KeyOfString<TStorageValue>, string>
42
44
 
43
- constructor(private fgParams?: FormGroupParams<TStorageValue>) {
45
+ constructor(fgParams?: FormGroupParams<TStorageValue>) {
44
46
  super()
47
+ this.fgParams = fgParams
45
48
  }
46
49
 
47
50
  get errorSummary() {
@@ -38,8 +38,11 @@ export class ControlValueAccessorBase<
38
38
 
39
39
  private _value = undefined as TValue
40
40
 
41
- constructor(private config: ControlValueAccessorBaseConfig) {
41
+ private config: ControlValueAccessorBaseConfig
42
+
43
+ constructor(config: ControlValueAccessorBaseConfig) {
42
44
  super({})
45
+ this.config = config
43
46
  }
44
47
 
45
48
  /**
@@ -4,7 +4,11 @@ import type { Payload } from '@xyo-network/payload-model'
4
4
  import type { FormGroupStorage } from './FormGroupStorage.ts'
5
5
 
6
6
  export class ArchivistFormGroupStorage implements FormGroupStorage {
7
- constructor(private archivist: ArchivistInstance) {}
7
+ private archivist: ArchivistInstance
8
+
9
+ constructor(archivist: ArchivistInstance) {
10
+ this.archivist = archivist
11
+ }
8
12
 
9
13
  async clear() {
10
14
  await this.archivist.clear?.()