@futdevpro/fsm-dynamo 1.20.7 → 1.20.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/__documentations/2026-08-23-forms-v2-color-picker-settings.md +23 -20
  2. package/__documentations/2026-08-23-forms-v2-symbol-picker-settings.md +24 -0
  3. package/build/_modules/ngx-models/_enums/field-type.enum.d.ts +2 -0
  4. package/build/_modules/ngx-models/_enums/field-type.enum.d.ts.map +1 -1
  5. package/build/_modules/ngx-models/_enums/field-type.enum.js +2 -0
  6. package/build/_modules/ngx-models/_enums/field-type.enum.js.map +1 -1
  7. package/build/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.d.ts.map +1 -1
  8. package/build/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.js +15 -0
  9. package/build/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.js.map +1 -1
  10. package/build/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.d.ts +14 -0
  11. package/build/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.d.ts.map +1 -0
  12. package/build/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.js +23 -0
  13. package/build/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.js.map +1 -0
  14. package/build/_modules/ngx-models/_models/control-models/forms-new/field-new-types.d.ts +3 -1
  15. package/build/_modules/ngx-models/_models/control-models/forms-new/field-new-types.d.ts.map +1 -1
  16. package/build/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.d.ts +17 -0
  17. package/build/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.d.ts.map +1 -0
  18. package/build/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.js +41 -0
  19. package/build/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.js.map +1 -0
  20. package/build/_modules/ngx-models/_models/control-models/forms-new/index.d.ts +3 -0
  21. package/build/_modules/ngx-models/_models/control-models/forms-new/index.d.ts.map +1 -1
  22. package/build/_modules/ngx-models/_models/control-models/forms-new/index.js +3 -0
  23. package/build/_modules/ngx-models/_models/control-models/forms-new/index.js.map +1 -1
  24. package/build/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.d.ts +10 -0
  25. package/build/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.d.ts.map +1 -0
  26. package/build/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.js +3 -0
  27. package/build/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.js.map +1 -0
  28. package/package.json +1 -1
  29. package/src/_modules/ngx-models/_enums/field-type.enum.ts +4 -2
  30. package/src/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.ts +44 -21
  31. package/src/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.ts +24 -0
  32. package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts +9 -5
  33. package/src/_modules/ngx-models/_models/control-models/forms-new/forms-new.spec.ts +65 -12
  34. package/src/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.ts +52 -0
  35. package/src/_modules/ngx-models/_models/control-models/forms-new/index.ts +5 -2
  36. package/src/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.ts +9 -0
@@ -1,20 +1,23 @@
1
- # Forms v2 ColorPicker settings — 2026-08-23
2
-
3
- ## Outcome
4
-
5
- Forms v2 now exposes `DyFM_ColorPickerFieldNew_Settings` as the serializable bedrock Settings model for a
6
- color-picker field. `DyFM_Field_Type.colorPicker` uses the stable `color-picker` discriminator.
7
-
8
- The value contract is a CSS/browser-native `#RRGGBB` string. Rendering and interaction remain the responsibility
9
- of `@futdevpro/ngx-dynamo`; this package owns only the framework-independent constructor and discriminated union.
10
-
11
- ## Public surface
12
-
13
- - `DyFM_Field_Type.colorPicker`
14
- - `DyFM_ColorPickerFieldNew_Settings`
15
- - `DyFM_FieldNew_Settings_AnyType` includes the new settings class
16
-
17
- ## Verification
18
-
19
- The Forms v2 settings suite verifies constructor persistence and the immutable discriminator. The complete package
20
- test and build gates must remain green before publishing the patch release.
1
+ # Forms v2 ColorPicker settings — 2026-08-23
2
+
3
+ ## Outcome
4
+
5
+ Forms v2 now exposes `DyFM_ColorPickerFieldNew_Settings` as the serializable bedrock Settings model for a
6
+ color-picker field. `DyFM_Field_Type.colorPicker` uses the stable `color-picker` discriminator.
7
+
8
+ The value contract is a CSS/browser-native `#RRGGBB` string. The constructor adds that contract as a serializable
9
+ pattern validator while preserving consumer validators, so backend and Angular consumers share the same rule.
10
+ Rendering and interaction remain the responsibility of `@futdevpro/ngx-dynamo`; this package owns only the
11
+ framework-independent constructor and discriminated union.
12
+
13
+ ## Public surface
14
+
15
+ - `DyFM_Field_Type.colorPicker`
16
+ - `DyFM_ColorPickerFieldNew_Settings`
17
+ - `DyFM_FieldNew_Settings_AnyType` includes the new settings class
18
+
19
+ ## Verification
20
+
21
+ The Forms v2 settings suite verifies constructor persistence, the immutable discriminator, default hexadecimal
22
+ validation, and preservation of consumer validators. The complete package test and build gates must remain green
23
+ before publishing the patch release.
@@ -0,0 +1,24 @@
1
+ # Forms V2 emoji and Material icon picker settings — 2026-08-23
2
+
3
+ ## Outcome
4
+
5
+ The shared `@futdevpro/fsm-dynamo` Forms V2 contract now includes serializable settings for emoji and
6
+ Material Symbols pickers. Both types protect their field discriminator and can carry an optional curated
7
+ option catalog through the backend-safe Settings layer.
8
+
9
+ ## Contracts
10
+
11
+ - `DyFM_EmojiPickerFieldNew_Settings` uses `DyFM_Field_Type.emojiPicker`, a string value, configurable
12
+ grid columns, and `DyFM_PickerFieldNew_Option[]`.
13
+ - `DyFM_IconPickerFieldNew_Settings` uses `DyFM_Field_Type.iconPicker`, the same option contract, and a
14
+ `DyFM_ButtonNewIconStyleType` preview style.
15
+ - Icon values accept Material Symbols ligature names such as `rocket_launch`; the settings constructor
16
+ adds the shared pattern validator without duplicating an equivalent consumer validator.
17
+ - Empty option arrays are intentional: the Angular renderer owns the default discovery catalog while
18
+ consumers can replace it with a serializable project-specific catalog.
19
+
20
+ ## Verification
21
+
22
+ - TypeScript package build.
23
+ - Focused Forms V2 Jasmine settings tests.
24
+ - ESLint on the new settings and option-interface sources.
@@ -20,6 +20,8 @@ export declare enum DyFM_Field_Type {
20
20
  chipMultiselect = "chipMultiselect",//
21
21
  radioSelect = "radioSelect",//
22
22
  colorPicker = "color-picker",
23
+ emojiPicker = "emoji-picker",
24
+ iconPicker = "icon-picker",
23
25
  date = "date",
24
26
  dateRange = "dateRange",
25
27
  dateTime = "dateTime",
@@ -1 +1 @@
1
- {"version":3,"file":"field-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ngx-models/_enums/field-type.enum.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,eAAe;IAEzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,UAAU,eAAe,CAAE,EAAE;IAC7B,eAAe,oBAAoB,CAAE,EAAE;IACvC,WAAW,gBAAgB,CAAE,EAAE;IAC/B,WAAW,iBAAiB;IAC5B,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAG/B,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;IAGrB,UAAU,eAAc;IAGxB,UAAU,eAAe;CAa1B"}
1
+ {"version":3,"file":"field-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ngx-models/_enums/field-type.enum.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,eAAe;IAEzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,UAAU,eAAe,CAAE,EAAE;IAC7B,eAAe,oBAAoB,CAAE,EAAE;IACvC,WAAW,gBAAgB,CAAE,EAAE;IAC/B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAG/B,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;IAGrB,UAAU,eAAc;IAGxB,UAAU,eAAe;CAa1B"}
@@ -25,6 +25,8 @@ var DyFM_Field_Type;
25
25
  DyFM_Field_Type["chipMultiselect"] = "chipMultiselect";
26
26
  DyFM_Field_Type["radioSelect"] = "radioSelect";
27
27
  DyFM_Field_Type["colorPicker"] = "color-picker";
28
+ DyFM_Field_Type["emojiPicker"] = "emoji-picker";
29
+ DyFM_Field_Type["iconPicker"] = "icon-picker";
28
30
  DyFM_Field_Type["date"] = "date";
29
31
  DyFM_Field_Type["dateRange"] = "dateRange";
30
32
  DyFM_Field_Type["dateTime"] = "dateTime";
@@ -1 +1 @@
1
- {"version":3,"file":"field-type.enum.js","sourceRoot":"","sources":["../../../../src/_modules/ngx-models/_enums/field-type.enum.ts"],"names":[],"mappings":";;;AACA;;GAEG;AACH,IAAY,eAgDX;AAhDD,WAAY,eAAe;IACzB,gBAAgB;IAChB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;IACrB,gDAA6B,CAAA;IAC7B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,4CAAyB,CAAA;IACzB,sDAAmC,CAAA;IACnC,8CAA2B,CAAA;IAC3B,+CAA4B,CAAA;IAC5B,gCAAa,CAAA;IACb,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IACrB,kDAA+B,CAAA;IAE/B,aAAa;IACb,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IAErB,gBAAgB;IAChB,4CAAwB,CAAA;IAExB,UAAU;IACV,4CAAyB,CAAA;IAEzB,QAAQ;IACR,qBAAqB;IACrB;;;MAGE;IACF,qBAAqB;IAErB,qBAAqB;IACrB,uEAAuE;AAEzE,CAAC,EAhDW,eAAe,+BAAf,eAAe,QAgD1B"}
1
+ {"version":3,"file":"field-type.enum.js","sourceRoot":"","sources":["../../../../src/_modules/ngx-models/_enums/field-type.enum.ts"],"names":[],"mappings":";;;AACA;;GAEG;AACH,IAAY,eAkDX;AAlDD,WAAY,eAAe;IACzB,gBAAgB;IAChB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;IACrB,gDAA6B,CAAA;IAC7B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,4CAAyB,CAAA;IACzB,sDAAmC,CAAA;IACnC,8CAA2B,CAAA;IAC3B,+CAA4B,CAAA;IAC5B,+CAA4B,CAAA;IAC5B,6CAA0B,CAAA;IAC1B,gCAAa,CAAA;IACb,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IACrB,kDAA+B,CAAA;IAE/B,aAAa;IACb,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IAErB,gBAAgB;IAChB,4CAAwB,CAAA;IAExB,UAAU;IACV,4CAAyB,CAAA;IAEzB,QAAQ;IACR,qBAAqB;IACrB;;;MAGE;IACF,qBAAqB;IAErB,qBAAqB;IACrB,uEAAuE;AAEzE,CAAC,EAlDW,eAAe,+BAAf,eAAe,QAkD1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"color-picker-field-new-settings.control-model.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;;;;GAKG;AACH,qBAAa,iCAAkC,SAAQ,sBAAsB,CAAC,MAAM,CAAC;IACnF,SAAkB,IAAI,EAAE,eAAe,CAAC,WAAW,CAA+B;IAElF,qFAAqF;gBACzE,GAAG,EAAE,OAAO,CAAC,iCAAiC,CAAC;CAO5D"}
1
+ {"version":3,"file":"color-picker-field-new-settings.control-model.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EACL,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAI5C;;;;;GAKG;AACH,qBAAa,iCAAkC,SAAQ,sBAAsB,CAAC,MAAM,CAAC;IACnF,SAAkB,IAAI,EAAE,eAAe,CAAC,WAAW,CAA+B;IAElF,qFAAqF;gBACzE,GAAG,EAAE,OAAO,CAAC,iCAAiC,CAAC;CAwB5D"}
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyFM_ColorPickerFieldNew_Settings = void 0;
4
4
  const field_type_enum_1 = require("../../../_enums/field-type.enum");
5
+ const field_new_validator_type_enum_1 = require("../../../_enums/forms-new/field-new-validator-type.enum");
5
6
  const field_new_settings_control_model_1 = require("./field-new-settings.control-model");
7
+ const DYNAMO_COLOR_PICKER_HEX_PATTERN = '^#[0-9a-fA-F]{6}$';
6
8
  /**
7
9
  * Forms v2 color-picker settings.
8
10
  *
@@ -17,6 +19,19 @@ class DyFM_ColorPickerFieldNew_Settings extends field_new_settings_control_model
17
19
  const rest = { ...set };
18
20
  Reflect.deleteProperty(rest, 'type');
19
21
  Object.assign(this, rest);
22
+ const validators = this.validators ?? [];
23
+ const hasHexValidator = validators.some((validator) => validator.type === field_new_validator_type_enum_1.DyFM_FieldNew_Validator_Type.pattern
24
+ && validator.value === DYNAMO_COLOR_PICKER_HEX_PATTERN);
25
+ if (!hasHexValidator) {
26
+ this.validators = [
27
+ ...validators,
28
+ {
29
+ type: field_new_validator_type_enum_1.DyFM_FieldNew_Validator_Type.pattern,
30
+ value: DYNAMO_COLOR_PICKER_HEX_PATTERN,
31
+ message: 'Enter a color as #RRGGBB.',
32
+ },
33
+ ];
34
+ }
20
35
  }
21
36
  }
22
37
  exports.DyFM_ColorPickerFieldNew_Settings = DyFM_ColorPickerFieldNew_Settings;
@@ -1 +1 @@
1
- {"version":3,"file":"color-picker-field-new-settings.control-model.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,yFAA4E;AAE5E;;;;;GAKG;AACH,MAAa,iCAAkC,SAAQ,yDAA8B;IACjE,IAAI,GAAgC,iCAAe,CAAC,WAAW,CAAC;IAElF,qFAAqF;IACrF,YAAY,GAA+C;QACzD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAA+C,EAAE,GAAG,GAAG,EAAE,CAAC;QAEpE,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AAXD,8EAWC"}
1
+ {"version":3,"file":"color-picker-field-new-settings.control-model.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,2GAAuG;AACvG,yFAG4C;AAE5C,MAAM,+BAA+B,GAAW,mBAAmB,CAAC;AAEpE;;;;;GAKG;AACH,MAAa,iCAAkC,SAAQ,yDAA8B;IACjE,IAAI,GAAgC,iCAAe,CAAC,WAAW,CAAC;IAElF,qFAAqF;IACrF,YAAY,GAA+C;QACzD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAA+C,EAAE,GAAG,GAAG,EAAE,CAAC;QAEpE,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1B,MAAM,UAAU,GAAyC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAC/E,MAAM,eAAe,GAAY,UAAU,CAAC,IAAI,CAAC,CAAC,SAA6C,EAAW,EAAE,CAC1G,SAAS,CAAC,IAAI,KAAK,4DAA4B,CAAC,OAAO;eACpD,SAAS,CAAC,KAAK,KAAK,+BAA+B,CACvD,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG;gBAChB,GAAG,UAAU;gBACb;oBACE,IAAI,EAAE,4DAA4B,CAAC,OAAO;oBAC1C,KAAK,EAAE,+BAA+B;oBACtC,OAAO,EAAE,2BAA2B;iBACrC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA5BD,8EA4BC"}
@@ -0,0 +1,14 @@
1
+ import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
2
+ import { DyFM_FieldNew_Settings } from './field-new-settings.control-model';
3
+ import { DyFM_PickerFieldNew_Option } from './picker-field-new-option.interface';
4
+ /** Serializable Forms v2 emoji-picker settings. */
5
+ export declare class DyFM_EmojiPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
6
+ readonly type: DyFM_Field_Type.emojiPicker;
7
+ /** Optional curated options. The UI supplies a default catalog when empty. */
8
+ options: DyFM_PickerFieldNew_Option[];
9
+ /** Preferred picker-grid column count. */
10
+ columns: number;
11
+ /** Creates serializable emoji-picker settings while protecting the discriminator. */
12
+ constructor(set: Partial<DyFM_EmojiPickerFieldNew_Settings>);
13
+ }
14
+ //# sourceMappingURL=emoji-picker-field-new-settings.control-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-picker-field-new-settings.control-model.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF,mDAAmD;AACnD,qBAAa,iCAAkC,SAAQ,sBAAsB,CAAC,MAAM,CAAC;IACnF,SAAkB,IAAI,EAAE,eAAe,CAAC,WAAW,CAA+B;IAElF,8EAA8E;IAC9E,OAAO,EAAE,0BAA0B,EAAE,CAAM;IAE3C,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAK;IAEpB,qFAAqF;gBACzE,GAAG,EAAE,OAAO,CAAC,iCAAiC,CAAC;CAQ5D"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_EmojiPickerFieldNew_Settings = void 0;
4
+ const field_type_enum_1 = require("../../../_enums/field-type.enum");
5
+ const field_new_settings_control_model_1 = require("./field-new-settings.control-model");
6
+ /** Serializable Forms v2 emoji-picker settings. */
7
+ class DyFM_EmojiPickerFieldNew_Settings extends field_new_settings_control_model_1.DyFM_FieldNew_Settings {
8
+ type = field_type_enum_1.DyFM_Field_Type.emojiPicker;
9
+ /** Optional curated options. The UI supplies a default catalog when empty. */
10
+ options = [];
11
+ /** Preferred picker-grid column count. */
12
+ columns = 8;
13
+ /** Creates serializable emoji-picker settings while protecting the discriminator. */
14
+ constructor(set) {
15
+ super(set);
16
+ const rest = { ...set };
17
+ Reflect.deleteProperty(rest, 'type');
18
+ Object.assign(this, rest);
19
+ this.options = this.options ?? [];
20
+ }
21
+ }
22
+ exports.DyFM_EmojiPickerFieldNew_Settings = DyFM_EmojiPickerFieldNew_Settings;
23
+ //# sourceMappingURL=emoji-picker-field-new-settings.control-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-picker-field-new-settings.control-model.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,yFAA4E;AAG5E,mDAAmD;AACnD,MAAa,iCAAkC,SAAQ,yDAA8B;IACjE,IAAI,GAAgC,iCAAe,CAAC,WAAW,CAAC;IAElF,8EAA8E;IAC9E,OAAO,GAAiC,EAAE,CAAC;IAE3C,0CAA0C;IAC1C,OAAO,GAAW,CAAC,CAAC;IAEpB,qFAAqF;IACrF,YAAY,GAA+C;QACzD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAA+C,EAAE,GAAG,GAAG,EAAE,CAAC;QAEpE,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,CAAC;CACF;AAlBD,8EAkBC"}
@@ -4,6 +4,8 @@ import { DyFM_DateFieldNew_Settings } from './date-field-new-settings.control-mo
4
4
  import { DyFM_DateRangeFieldNew_Settings } from './date-range-field-new-settings.control-model';
5
5
  import { DyFM_DateTimeFieldNew_Settings } from './datetime-field-new-settings.control-model';
6
6
  import { DyFM_DateTimeRangeFieldNew_Settings } from './datetime-range-field-new-settings.control-model';
7
+ import { DyFM_EmojiPickerFieldNew_Settings } from './emoji-picker-field-new-settings.control-model';
8
+ import { DyFM_IconPickerFieldNew_Settings } from './icon-picker-field-new-settings.control-model';
7
9
  import { DyFM_MultiselectFieldNew_Settings } from './multiselect-field-new-settings.control-model';
8
10
  import { DyFM_NumberFieldNew_Settings } from './number-field-new-settings.control-model';
9
11
  import { DyFM_PasswordFieldNew_Settings } from './password-field-new-settings.control-model';
@@ -25,5 +27,5 @@ import { DyFM_TextFieldNew_Settings } from './text-field-new-settings.control-mo
25
27
  *
26
28
  * @see _specifications/forms-v2/02-architecture-spec.md (11. mátrix)
27
29
  */
28
- export type DyFM_FieldNew_Settings_AnyType = DyFM_TextFieldNew_Settings | DyFM_TextAreaFieldNew_Settings | DyFM_NumberFieldNew_Settings | DyFM_PasswordFieldNew_Settings | DyFM_SliderFieldNew_Settings | DyFM_SliderRangeFieldNew_Settings | DyFM_CheckboxFieldNew_Settings | DyFM_ColorPickerFieldNew_Settings | DyFM_SelectFieldNew_Settings<unknown> | DyFM_MultiselectFieldNew_Settings<unknown> | DyFM_RadioSelectFieldNew_Settings<unknown> | DyFM_DateFieldNew_Settings | DyFM_DateTimeFieldNew_Settings | DyFM_DateRangeFieldNew_Settings | DyFM_DateTimeRangeFieldNew_Settings;
30
+ export type DyFM_FieldNew_Settings_AnyType = DyFM_TextFieldNew_Settings | DyFM_TextAreaFieldNew_Settings | DyFM_NumberFieldNew_Settings | DyFM_PasswordFieldNew_Settings | DyFM_SliderFieldNew_Settings | DyFM_SliderRangeFieldNew_Settings | DyFM_CheckboxFieldNew_Settings | DyFM_ColorPickerFieldNew_Settings | DyFM_EmojiPickerFieldNew_Settings | DyFM_IconPickerFieldNew_Settings | DyFM_SelectFieldNew_Settings<unknown> | DyFM_MultiselectFieldNew_Settings<unknown> | DyFM_RadioSelectFieldNew_Settings<unknown> | DyFM_DateFieldNew_Settings | DyFM_DateTimeFieldNew_Settings | DyFM_DateRangeFieldNew_Settings | DyFM_DateTimeRangeFieldNew_Settings;
29
31
  //# sourceMappingURL=field-new-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-new-types.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,mCAAmC,EAAE,MAAM,mDAAmD,CAAC;AACxG,OAAO,EAAE,iCAAiC,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,8BAA8B,GACtC,0BAA0B,GAC1B,8BAA8B,GAC9B,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,GAC5B,iCAAiC,GACjC,8BAA8B,GAC9B,iCAAiC,GACjC,4BAA4B,CAAC,OAAO,CAAC,GACrC,iCAAiC,CAAC,OAAO,CAAC,GAC1C,iCAAiC,CAAC,OAAO,CAAC,GAC1C,0BAA0B,GAC1B,8BAA8B,GAC9B,+BAA+B,GAC/B,mCAAmC,CAAC"}
1
+ {"version":3,"file":"field-new-types.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,mCAAmC,EAAE,MAAM,mDAAmD,CAAC;AACxG,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,iCAAiC,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,8BAA8B,GACtC,0BAA0B,GAC1B,8BAA8B,GAC9B,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,GAC5B,iCAAiC,GACjC,8BAA8B,GAC9B,iCAAiC,GACjC,iCAAiC,GACjC,gCAAgC,GAChC,4BAA4B,CAAC,OAAO,CAAC,GACrC,iCAAiC,CAAC,OAAO,CAAC,GAC1C,iCAAiC,CAAC,OAAO,CAAC,GAC1C,0BAA0B,GAC1B,8BAA8B,GAC9B,+BAA+B,GAC/B,mCAAmC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { DyFM_ButtonNewIconStyleType } from '../../../_enums/button-new/button-new-icon-style-type.enum';
2
+ import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
3
+ import { DyFM_FieldNew_Settings } from './field-new-settings.control-model';
4
+ import { DyFM_PickerFieldNew_Option } from './picker-field-new-option.interface';
5
+ /** Serializable Forms v2 Material Symbols picker settings. */
6
+ export declare class DyFM_IconPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
7
+ readonly type: DyFM_Field_Type.iconPicker;
8
+ /** Optional curated options. The UI supplies a default catalog when empty. */
9
+ options: DyFM_PickerFieldNew_Option[];
10
+ /** Preferred picker-grid column count. */
11
+ columns: number;
12
+ /** Material Symbols font family used by the option preview. */
13
+ iconStyle: DyFM_ButtonNewIconStyleType;
14
+ /** Creates serializable icon-picker settings while protecting the discriminator. */
15
+ constructor(set: Partial<DyFM_IconPickerFieldNew_Settings>);
16
+ }
17
+ //# sourceMappingURL=icon-picker-field-new-settings.control-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-picker-field-new-settings.control-model.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,4DAA4D,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EACL,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAIjF,8DAA8D;AAC9D,qBAAa,gCAAiC,SAAQ,sBAAsB,CAAC,MAAM,CAAC;IAClF,SAAkB,IAAI,EAAE,eAAe,CAAC,UAAU,CAA8B;IAEhF,8EAA8E;IAC9E,OAAO,EAAE,0BAA0B,EAAE,CAAM;IAE3C,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAK;IAEpB,+DAA+D;IAC/D,SAAS,EAAE,2BAA2B,CAAuC;IAE7E,oFAAoF;gBACxE,GAAG,EAAE,OAAO,CAAC,gCAAgC,CAAC;CA0B3D"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_IconPickerFieldNew_Settings = void 0;
4
+ const button_new_icon_style_type_enum_1 = require("../../../_enums/button-new/button-new-icon-style-type.enum");
5
+ const field_type_enum_1 = require("../../../_enums/field-type.enum");
6
+ const field_new_validator_type_enum_1 = require("../../../_enums/forms-new/field-new-validator-type.enum");
7
+ const field_new_settings_control_model_1 = require("./field-new-settings.control-model");
8
+ const DYNAMO_MATERIAL_ICON_PATTERN = '^[a-z0-9]+(?:_[a-z0-9]+)*$';
9
+ /** Serializable Forms v2 Material Symbols picker settings. */
10
+ class DyFM_IconPickerFieldNew_Settings extends field_new_settings_control_model_1.DyFM_FieldNew_Settings {
11
+ type = field_type_enum_1.DyFM_Field_Type.iconPicker;
12
+ /** Optional curated options. The UI supplies a default catalog when empty. */
13
+ options = [];
14
+ /** Preferred picker-grid column count. */
15
+ columns = 6;
16
+ /** Material Symbols font family used by the option preview. */
17
+ iconStyle = button_new_icon_style_type_enum_1.DyFM_ButtonNewIconStyleType.rounded;
18
+ /** Creates serializable icon-picker settings while protecting the discriminator. */
19
+ constructor(set) {
20
+ super(set);
21
+ const rest = { ...set };
22
+ Reflect.deleteProperty(rest, 'type');
23
+ Object.assign(this, rest);
24
+ this.options = this.options ?? [];
25
+ const validators = this.validators ?? [];
26
+ const hasMaterialIconValidator = validators.some((validator) => validator.type === field_new_validator_type_enum_1.DyFM_FieldNew_Validator_Type.pattern
27
+ && validator.value === DYNAMO_MATERIAL_ICON_PATTERN);
28
+ if (!hasMaterialIconValidator) {
29
+ this.validators = [
30
+ ...validators,
31
+ {
32
+ type: field_new_validator_type_enum_1.DyFM_FieldNew_Validator_Type.pattern,
33
+ value: DYNAMO_MATERIAL_ICON_PATTERN,
34
+ message: 'Enter a Material icon name such as rocket_launch.',
35
+ },
36
+ ];
37
+ }
38
+ }
39
+ }
40
+ exports.DyFM_IconPickerFieldNew_Settings = DyFM_IconPickerFieldNew_Settings;
41
+ //# sourceMappingURL=icon-picker-field-new-settings.control-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-picker-field-new-settings.control-model.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.ts"],"names":[],"mappings":";;;AAAA,gHAAyG;AACzG,qEAAkE;AAClE,2GAAuG;AACvG,yFAG4C;AAG5C,MAAM,4BAA4B,GAAW,4BAA4B,CAAC;AAE1E,8DAA8D;AAC9D,MAAa,gCAAiC,SAAQ,yDAA8B;IAChE,IAAI,GAA+B,iCAAe,CAAC,UAAU,CAAC;IAEhF,8EAA8E;IAC9E,OAAO,GAAiC,EAAE,CAAC;IAE3C,0CAA0C;IAC1C,OAAO,GAAW,CAAC,CAAC;IAEpB,+DAA+D;IAC/D,SAAS,GAAgC,6DAA2B,CAAC,OAAO,CAAC;IAE7E,oFAAoF;IACpF,YAAY,GAA8C;QACxD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,IAAI,GAA8C,EAAE,GAAG,GAAG,EAAE,CAAC;QAEnE,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAElC,MAAM,UAAU,GAAyC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAC/E,MAAM,wBAAwB,GAAY,UAAU,CAAC,IAAI,CACvD,CAAC,SAA6C,EAAW,EAAE,CACzD,SAAS,CAAC,IAAI,KAAK,4DAA4B,CAAC,OAAO;eACpD,SAAS,CAAC,KAAK,KAAK,4BAA4B,CACtD,CAAC;QAEF,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG;gBAChB,GAAG,UAAU;gBACb;oBACE,IAAI,EAAE,4DAA4B,CAAC,OAAO;oBAC1C,KAAK,EAAE,4BAA4B;oBACnC,OAAO,EAAE,mDAAmD;iBAC7D;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAvCD,4EAuCC"}
@@ -7,6 +7,9 @@ export * from './slider-field-new-settings.control-model';
7
7
  export * from './slider-range-field-new-settings.control-model';
8
8
  export * from './checkbox-field-new-settings.control-model';
9
9
  export * from './color-picker-field-new-settings.control-model';
10
+ export * from './emoji-picker-field-new-settings.control-model';
11
+ export * from './icon-picker-field-new-settings.control-model';
12
+ export * from './picker-field-new-option.interface';
10
13
  export * from './select-field-new-settings.control-model';
11
14
  export * from './multiselect-field-new-settings.control-model';
12
15
  export * from './radio-select-field-new-settings.control-model';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/index.ts"],"names":[],"mappings":"AAGA,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/index.ts"],"names":[],"mappings":"AAGA,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC"}
@@ -12,6 +12,9 @@ tslib_1.__exportStar(require("./slider-field-new-settings.control-model"), expor
12
12
  tslib_1.__exportStar(require("./slider-range-field-new-settings.control-model"), exports);
13
13
  tslib_1.__exportStar(require("./checkbox-field-new-settings.control-model"), exports);
14
14
  tslib_1.__exportStar(require("./color-picker-field-new-settings.control-model"), exports);
15
+ tslib_1.__exportStar(require("./emoji-picker-field-new-settings.control-model"), exports);
16
+ tslib_1.__exportStar(require("./icon-picker-field-new-settings.control-model"), exports);
17
+ tslib_1.__exportStar(require("./picker-field-new-option.interface"), exports);
15
18
  tslib_1.__exportStar(require("./select-field-new-settings.control-model"), exports);
16
19
  tslib_1.__exportStar(require("./multiselect-field-new-settings.control-model"), exports);
17
20
  tslib_1.__exportStar(require("./radio-select-field-new-settings.control-model"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/index.ts"],"names":[],"mappings":";AAAA,iEAAiE;AACjE,kCAAkC;;;AAElC,6EAAmD;AACnD,kFAAwD;AACxD,sFAA4D;AAC5D,oFAA0D;AAC1D,sFAA4D;AAC5D,oFAA0D;AAC1D,0FAAgE;AAChE,sFAA4D;AAC5D,0FAAgE;AAChE,oFAA0D;AAC1D,yFAA+D;AAC/D,0FAAgE;AAChE,kFAAwD;AACxD,sFAA4D;AAC5D,wFAA8D;AAC9D,4FAAkE;AAClE,4EAAkD;AAClD,4DAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/index.ts"],"names":[],"mappings":";AAAA,iEAAiE;AACjE,kCAAkC;;;AAElC,6EAAmD;AACnD,kFAAwD;AACxD,sFAA4D;AAC5D,oFAA0D;AAC1D,sFAA4D;AAC5D,oFAA0D;AAC1D,0FAAgE;AAChE,sFAA4D;AAC5D,0FAAgE;AAChE,0FAAgE;AAChE,yFAA+D;AAC/D,8EAAoD;AACpD,oFAA0D;AAC1D,yFAA+D;AAC/D,0FAAgE;AAChE,kFAAwD;AACxD,sFAA4D;AAC5D,wFAA8D;AAC9D,4FAAkE;AAClE,4EAAkD;AAClD,4DAAkC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Serializable option shared by the Forms v2 emoji and icon pickers.
3
+ */
4
+ export interface DyFM_PickerFieldNew_Option {
5
+ value: string;
6
+ label: string;
7
+ keywords?: string[];
8
+ disabled?: boolean;
9
+ }
10
+ //# sourceMappingURL=picker-field-new-option.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-field-new-option.interface.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=picker-field-new-option.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-field-new-option.interface.js","sourceRoot":"","sources":["../../../../../../src/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "1.20.7",
3
+ "version": "1.20.9",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",
@@ -18,10 +18,12 @@ export enum DyFM_Field_Type {
18
18
  sliderRange = 'sliderRange',
19
19
  select = 'select',
20
20
  multiselect = 'multiselect',
21
- chipSelect = 'chipSelect', //
22
- chipMultiselect = 'chipMultiselect', //
21
+ chipSelect = 'chipSelect', //
22
+ chipMultiselect = 'chipMultiselect', //
23
23
  radioSelect = 'radioSelect', //
24
24
  colorPicker = 'color-picker',
25
+ emojiPicker = 'emoji-picker',
26
+ iconPicker = 'icon-picker',
25
27
  date = 'date',
26
28
  dateRange = 'dateRange',
27
29
  dateTime = 'dateTime',
@@ -1,21 +1,44 @@
1
- import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
2
- import { DyFM_FieldNew_Settings } from './field-new-settings.control-model';
3
-
4
- /**
5
- * Forms v2 color-picker settings.
6
- *
7
- * The string value uses the browser-native `#RRGGBB` color contract so the same
8
- * serializable Settings object can be shared by frontend and backend consumers.
9
- */
10
- export class DyFM_ColorPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
11
- override readonly type: DyFM_Field_Type.colorPicker = DyFM_Field_Type.colorPicker;
12
-
13
- /** Creates serializable color-picker settings while protecting the discriminator. */
14
- constructor(set: Partial<DyFM_ColorPickerFieldNew_Settings>) {
15
- super(set);
16
- const rest: Partial<DyFM_ColorPickerFieldNew_Settings> = { ...set };
17
-
18
- Reflect.deleteProperty(rest, 'type');
19
- Object.assign(this, rest);
20
- }
21
- }
1
+ import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
2
+ import { DyFM_FieldNew_Validator_Type } from '../../../_enums/forms-new/field-new-validator-type.enum';
3
+ import {
4
+ DyFM_FieldNew_Settings,
5
+ DyFM_FieldNew_Validator_Descriptor
6
+ } from './field-new-settings.control-model';
7
+
8
+ const DYNAMO_COLOR_PICKER_HEX_PATTERN: string = '^#[0-9a-fA-F]{6}$';
9
+
10
+ /**
11
+ * Forms v2 color-picker settings.
12
+ *
13
+ * The string value uses the browser-native `#RRGGBB` color contract so the same
14
+ * serializable Settings object can be shared by frontend and backend consumers.
15
+ */
16
+ export class DyFM_ColorPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
17
+ override readonly type: DyFM_Field_Type.colorPicker = DyFM_Field_Type.colorPicker;
18
+
19
+ /** Creates serializable color-picker settings while protecting the discriminator. */
20
+ constructor(set: Partial<DyFM_ColorPickerFieldNew_Settings>) {
21
+ super(set);
22
+ const rest: Partial<DyFM_ColorPickerFieldNew_Settings> = { ...set };
23
+
24
+ Reflect.deleteProperty(rest, 'type');
25
+ Object.assign(this, rest);
26
+
27
+ const validators: DyFM_FieldNew_Validator_Descriptor[] = this.validators ?? [];
28
+ const hasHexValidator: boolean = validators.some((validator: DyFM_FieldNew_Validator_Descriptor): boolean =>
29
+ validator.type === DyFM_FieldNew_Validator_Type.pattern
30
+ && validator.value === DYNAMO_COLOR_PICKER_HEX_PATTERN,
31
+ );
32
+
33
+ if (!hasHexValidator) {
34
+ this.validators = [
35
+ ...validators,
36
+ {
37
+ type: DyFM_FieldNew_Validator_Type.pattern,
38
+ value: DYNAMO_COLOR_PICKER_HEX_PATTERN,
39
+ message: 'Enter a color as #RRGGBB.',
40
+ },
41
+ ];
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,24 @@
1
+ import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
2
+ import { DyFM_FieldNew_Settings } from './field-new-settings.control-model';
3
+ import { DyFM_PickerFieldNew_Option } from './picker-field-new-option.interface';
4
+
5
+ /** Serializable Forms v2 emoji-picker settings. */
6
+ export class DyFM_EmojiPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
7
+ override readonly type: DyFM_Field_Type.emojiPicker = DyFM_Field_Type.emojiPicker;
8
+
9
+ /** Optional curated options. The UI supplies a default catalog when empty. */
10
+ options: DyFM_PickerFieldNew_Option[] = [];
11
+
12
+ /** Preferred picker-grid column count. */
13
+ columns: number = 8;
14
+
15
+ /** Creates serializable emoji-picker settings while protecting the discriminator. */
16
+ constructor(set: Partial<DyFM_EmojiPickerFieldNew_Settings>) {
17
+ super(set);
18
+ const rest: Partial<DyFM_EmojiPickerFieldNew_Settings> = { ...set };
19
+
20
+ Reflect.deleteProperty(rest, 'type');
21
+ Object.assign(this, rest);
22
+ this.options = this.options ?? [];
23
+ }
24
+ }
@@ -1,9 +1,11 @@
1
- import { DyFM_CheckboxFieldNew_Settings } from './checkbox-field-new-settings.control-model';
2
- import { DyFM_ColorPickerFieldNew_Settings } from './color-picker-field-new-settings.control-model';
1
+ import { DyFM_CheckboxFieldNew_Settings } from './checkbox-field-new-settings.control-model';
2
+ import { DyFM_ColorPickerFieldNew_Settings } from './color-picker-field-new-settings.control-model';
3
3
  import { DyFM_DateFieldNew_Settings } from './date-field-new-settings.control-model';
4
4
  import { DyFM_DateRangeFieldNew_Settings } from './date-range-field-new-settings.control-model';
5
5
  import { DyFM_DateTimeFieldNew_Settings } from './datetime-field-new-settings.control-model';
6
- import { DyFM_DateTimeRangeFieldNew_Settings } from './datetime-range-field-new-settings.control-model';
6
+ import { DyFM_DateTimeRangeFieldNew_Settings } from './datetime-range-field-new-settings.control-model';
7
+ import { DyFM_EmojiPickerFieldNew_Settings } from './emoji-picker-field-new-settings.control-model';
8
+ import { DyFM_IconPickerFieldNew_Settings } from './icon-picker-field-new-settings.control-model';
7
9
  import { DyFM_MultiselectFieldNew_Settings } from './multiselect-field-new-settings.control-model';
8
10
  import { DyFM_NumberFieldNew_Settings } from './number-field-new-settings.control-model';
9
11
  import { DyFM_PasswordFieldNew_Settings } from './password-field-new-settings.control-model';
@@ -33,9 +35,11 @@ export type DyFM_FieldNew_Settings_AnyType =
33
35
  | DyFM_PasswordFieldNew_Settings
34
36
  | DyFM_SliderFieldNew_Settings
35
37
  | DyFM_SliderRangeFieldNew_Settings
36
- | DyFM_CheckboxFieldNew_Settings
38
+ | DyFM_CheckboxFieldNew_Settings
37
39
  | DyFM_ColorPickerFieldNew_Settings
38
- | DyFM_SelectFieldNew_Settings<unknown>
40
+ | DyFM_EmojiPickerFieldNew_Settings
41
+ | DyFM_IconPickerFieldNew_Settings
42
+ | DyFM_SelectFieldNew_Settings<unknown>
39
43
  | DyFM_MultiselectFieldNew_Settings<unknown>
40
44
  | DyFM_RadioSelectFieldNew_Settings<unknown>
41
45
  | DyFM_DateFieldNew_Settings
@@ -1,11 +1,14 @@
1
1
  import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
2
2
  import { DyFM_FieldNew_Validator_Type } from '../../../_enums/forms-new/field-new-validator-type.enum';
3
3
  import {
4
- DyFM_CheckboxFieldNew_Settings,
5
- DyFM_ColorPickerFieldNew_Settings,
6
- DyFM_DateFieldNew_Settings,
4
+ DyFM_CheckboxFieldNew_Settings,
5
+ DyFM_ColorPickerFieldNew_Settings,
6
+ DyFM_DateFieldNew_Settings,
7
+ DyFM_EmojiPickerFieldNew_Settings,
7
8
  DyFM_FieldNew_Settings,
8
- DyFM_FormNew_Settings,
9
+ DyFM_FieldNew_Validator_Descriptor,
10
+ DyFM_FormNew_Settings,
11
+ DyFM_IconPickerFieldNew_Settings,
9
12
  DyFM_MultiselectFieldNew_Settings,
10
13
  DyFM_NumberFieldNew_Settings,
11
14
  DyFM_SelectFieldNew_Settings,
@@ -76,7 +79,7 @@ describe('| Forms v2 — Wave-1A Settings layer', () => {
76
79
  });
77
80
  });
78
81
 
79
- describe('| DyFM_CheckboxFieldNew_Settings', () => {
82
+ describe('| DyFM_CheckboxFieldNew_Settings', () => {
80
83
  it('| default constructor + type is checkbox', () => {
81
84
  const s = new DyFM_CheckboxFieldNew_Settings({ key: 'done' });
82
85
  expect(s.type).toBe(DyFM_Field_Type.checkbox);
@@ -88,17 +91,67 @@ describe('| Forms v2 — Wave-1A Settings layer', () => {
88
91
  expect(s.mode).toBe('toggle');
89
92
  expect(s.labelPosition).toBe('before');
90
93
  });
94
+ });
95
+
96
+ describe('| DyFM_ColorPickerFieldNew_Settings', () => {
97
+ it('| stores a serializable hex value and owns the color-picker discriminator', () => {
98
+ const settings: DyFM_ColorPickerFieldNew_Settings = new DyFM_ColorPickerFieldNew_Settings({
99
+ key: 'accentColor',
100
+ defaultValue: '#22d3ee',
101
+ });
102
+
103
+ expect(settings.type).toBe(DyFM_Field_Type.colorPicker);
104
+ expect(settings.defaultValue).toBe('#22d3ee');
105
+ expect(settings.validators).toContain(jasmine.objectContaining({
106
+ type: DyFM_FieldNew_Validator_Type.pattern,
107
+ value: '^#[0-9a-fA-F]{6}$',
108
+ message: 'Enter a color as #RRGGBB.',
109
+ }));
110
+ });
111
+
112
+ it('| preserves consumer validators while adding the strict hexadecimal contract once', () => {
113
+ const settings: DyFM_ColorPickerFieldNew_Settings = new DyFM_ColorPickerFieldNew_Settings({
114
+ key: 'accentColor',
115
+ validators: [{ type: DyFM_FieldNew_Validator_Type.required }],
116
+ });
117
+
118
+ expect(settings.validators?.map(
119
+ (validator: DyFM_FieldNew_Validator_Descriptor): DyFM_FieldNew_Validator_Type => validator.type,
120
+ ))
121
+ .toEqual([DyFM_FieldNew_Validator_Type.required, DyFM_FieldNew_Validator_Type.pattern]);
122
+ });
91
123
  });
92
124
 
93
- describe('| DyFM_ColorPickerFieldNew_Settings', () => {
94
- it('| stores a serializable hex value and owns the color-picker discriminator', () => {
95
- const settings: DyFM_ColorPickerFieldNew_Settings = new DyFM_ColorPickerFieldNew_Settings({
96
- key: 'accentColor',
97
- defaultValue: '#22d3ee',
125
+ describe('| DyFM_EmojiPickerFieldNew_Settings', () => {
126
+ it('| stores serializable options and protects the emoji-picker discriminator', () => {
127
+ const settings: DyFM_EmojiPickerFieldNew_Settings = new DyFM_EmojiPickerFieldNew_Settings({
128
+ key: 'reaction',
129
+ defaultValue: '🚀',
130
+ columns: 10,
131
+ options: [{ value: '🚀', label: 'Rocket', keywords: ['launch'] }],
132
+ });
133
+
134
+ expect(settings.type).toBe(DyFM_Field_Type.emojiPicker);
135
+ expect(settings.columns).toBe(10);
136
+ expect(settings.options[0].keywords).toEqual(['launch']);
137
+ });
138
+ });
139
+
140
+ describe('| DyFM_IconPickerFieldNew_Settings', () => {
141
+ it('| stores serializable options and adds the Material icon-name contract once', () => {
142
+ const settings: DyFM_IconPickerFieldNew_Settings = new DyFM_IconPickerFieldNew_Settings({
143
+ key: 'icon',
144
+ defaultValue: 'rocket_launch',
145
+ validators: [{ type: DyFM_FieldNew_Validator_Type.required }],
98
146
  });
99
147
 
100
- expect(settings.type).toBe(DyFM_Field_Type.colorPicker);
101
- expect(settings.defaultValue).toBe('#22d3ee');
148
+ expect(settings.type).toBe(DyFM_Field_Type.iconPicker);
149
+ expect(settings.validators).toContain(jasmine.objectContaining({
150
+ type: DyFM_FieldNew_Validator_Type.pattern,
151
+ value: '^[a-z0-9]+(?:_[a-z0-9]+)*$',
152
+ message: 'Enter a Material icon name such as rocket_launch.',
153
+ }));
154
+ expect(settings.validators?.length).toBe(2);
102
155
  });
103
156
  });
104
157
 
@@ -0,0 +1,52 @@
1
+ import { DyFM_ButtonNewIconStyleType } from '../../../_enums/button-new/button-new-icon-style-type.enum';
2
+ import { DyFM_Field_Type } from '../../../_enums/field-type.enum';
3
+ import { DyFM_FieldNew_Validator_Type } from '../../../_enums/forms-new/field-new-validator-type.enum';
4
+ import {
5
+ DyFM_FieldNew_Settings,
6
+ DyFM_FieldNew_Validator_Descriptor
7
+ } from './field-new-settings.control-model';
8
+ import { DyFM_PickerFieldNew_Option } from './picker-field-new-option.interface';
9
+
10
+ const DYNAMO_MATERIAL_ICON_PATTERN: string = '^[a-z0-9]+(?:_[a-z0-9]+)*$';
11
+
12
+ /** Serializable Forms v2 Material Symbols picker settings. */
13
+ export class DyFM_IconPickerFieldNew_Settings extends DyFM_FieldNew_Settings<string> {
14
+ override readonly type: DyFM_Field_Type.iconPicker = DyFM_Field_Type.iconPicker;
15
+
16
+ /** Optional curated options. The UI supplies a default catalog when empty. */
17
+ options: DyFM_PickerFieldNew_Option[] = [];
18
+
19
+ /** Preferred picker-grid column count. */
20
+ columns: number = 6;
21
+
22
+ /** Material Symbols font family used by the option preview. */
23
+ iconStyle: DyFM_ButtonNewIconStyleType = DyFM_ButtonNewIconStyleType.rounded;
24
+
25
+ /** Creates serializable icon-picker settings while protecting the discriminator. */
26
+ constructor(set: Partial<DyFM_IconPickerFieldNew_Settings>) {
27
+ super(set);
28
+ const rest: Partial<DyFM_IconPickerFieldNew_Settings> = { ...set };
29
+
30
+ Reflect.deleteProperty(rest, 'type');
31
+ Object.assign(this, rest);
32
+ this.options = this.options ?? [];
33
+
34
+ const validators: DyFM_FieldNew_Validator_Descriptor[] = this.validators ?? [];
35
+ const hasMaterialIconValidator: boolean = validators.some(
36
+ (validator: DyFM_FieldNew_Validator_Descriptor): boolean =>
37
+ validator.type === DyFM_FieldNew_Validator_Type.pattern
38
+ && validator.value === DYNAMO_MATERIAL_ICON_PATTERN,
39
+ );
40
+
41
+ if (!hasMaterialIconValidator) {
42
+ this.validators = [
43
+ ...validators,
44
+ {
45
+ type: DyFM_FieldNew_Validator_Type.pattern,
46
+ value: DYNAMO_MATERIAL_ICON_PATTERN,
47
+ message: 'Enter a Material icon name such as rocket_launch.',
48
+ },
49
+ ];
50
+ }
51
+ }
52
+ }
@@ -8,9 +8,12 @@ export * from './number-field-new-settings.control-model';
8
8
  export * from './password-field-new-settings.control-model';
9
9
  export * from './slider-field-new-settings.control-model';
10
10
  export * from './slider-range-field-new-settings.control-model';
11
- export * from './checkbox-field-new-settings.control-model';
11
+ export * from './checkbox-field-new-settings.control-model';
12
12
  export * from './color-picker-field-new-settings.control-model';
13
- export * from './select-field-new-settings.control-model';
13
+ export * from './emoji-picker-field-new-settings.control-model';
14
+ export * from './icon-picker-field-new-settings.control-model';
15
+ export * from './picker-field-new-option.interface';
16
+ export * from './select-field-new-settings.control-model';
14
17
  export * from './multiselect-field-new-settings.control-model';
15
18
  export * from './radio-select-field-new-settings.control-model';
16
19
  export * from './date-field-new-settings.control-model';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Serializable option shared by the Forms v2 emoji and icon pickers.
3
+ */
4
+ export interface DyFM_PickerFieldNew_Option {
5
+ value: string;
6
+ label: string;
7
+ keywords?: string[];
8
+ disabled?: boolean;
9
+ }