@decaf-ts/ui-decorators 0.5.9 → 0.5.11

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 (63) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +422 -12
  3. package/dist/ui-decorators.cjs +609 -55
  4. package/dist/ui-decorators.esm.cjs +607 -56
  5. package/lib/esm/index.d.ts +7 -3
  6. package/lib/esm/index.js +8 -4
  7. package/lib/esm/model/Renderable.d.ts +15 -0
  8. package/lib/esm/model/Renderable.js +1 -1
  9. package/lib/esm/model/decorators.d.ts +93 -14
  10. package/lib/esm/model/decorators.js +102 -16
  11. package/lib/esm/model/index.d.ts +0 -4
  12. package/lib/esm/model/index.js +1 -5
  13. package/lib/esm/model/model.d.ts +156 -50
  14. package/lib/esm/model/model.js +1 -1
  15. package/lib/esm/model/overrides.d.ts +8 -0
  16. package/lib/esm/model/overrides.js +19 -1
  17. package/lib/esm/ui/Rendering.js +43 -8
  18. package/lib/esm/ui/constants.d.ts +149 -4
  19. package/lib/esm/ui/constants.js +150 -5
  20. package/lib/esm/ui/decorators.d.ts +229 -21
  21. package/lib/esm/ui/decorators.js +242 -25
  22. package/lib/esm/ui/errors.d.ts +28 -0
  23. package/lib/esm/ui/errors.js +29 -1
  24. package/lib/esm/ui/handlers.d.ts +17 -0
  25. package/lib/esm/ui/handlers.js +18 -0
  26. package/lib/esm/ui/index.d.ts +1 -4
  27. package/lib/esm/ui/index.js +2 -5
  28. package/lib/esm/ui/interfaces.d.ts +25 -0
  29. package/lib/esm/ui/interfaces.js +9 -1
  30. package/lib/esm/ui/types.d.ts +63 -5
  31. package/lib/esm/ui/types.js +9 -1
  32. package/lib/esm/ui/utils.d.ts +1 -1
  33. package/lib/esm/ui/utils.js +2 -2
  34. package/lib/index.cjs +8 -4
  35. package/lib/index.d.ts +7 -3
  36. package/lib/model/Renderable.cjs +1 -1
  37. package/lib/model/Renderable.d.ts +15 -0
  38. package/lib/model/decorators.cjs +103 -16
  39. package/lib/model/decorators.d.ts +93 -14
  40. package/lib/model/index.cjs +1 -5
  41. package/lib/model/index.d.ts +0 -4
  42. package/lib/model/model.cjs +1 -1
  43. package/lib/model/model.d.ts +156 -50
  44. package/lib/model/overrides.cjs +19 -1
  45. package/lib/model/overrides.d.ts +8 -0
  46. package/lib/ui/Rendering.cjs +43 -8
  47. package/lib/ui/constants.cjs +150 -5
  48. package/lib/ui/constants.d.ts +149 -4
  49. package/lib/ui/decorators.cjs +243 -25
  50. package/lib/ui/decorators.d.ts +229 -21
  51. package/lib/ui/errors.cjs +29 -1
  52. package/lib/ui/errors.d.ts +28 -0
  53. package/lib/ui/handlers.cjs +22 -0
  54. package/lib/ui/handlers.d.ts +17 -0
  55. package/lib/ui/index.cjs +2 -5
  56. package/lib/ui/index.d.ts +1 -4
  57. package/lib/ui/interfaces.cjs +9 -1
  58. package/lib/ui/interfaces.d.ts +25 -0
  59. package/lib/ui/types.cjs +9 -1
  60. package/lib/ui/types.d.ts +63 -5
  61. package/lib/ui/utils.cjs +2 -2
  62. package/lib/ui/utils.d.ts +1 -1
  63. package/package.json +2 -2
@@ -1,7 +1,56 @@
1
+ /**
2
+ * @description Constants and enums for UI rendering and validation
3
+ * @summary Defines keys, mappings, and HTML5 input types for UI components
4
+ * This module provides constants used throughout the UI decorators library for
5
+ * rendering, validation, and HTML element generation.
6
+ * @module ui/constants
7
+ * @memberOf module:ui-decorators
8
+ */
1
9
  import { DateValidator, DiffValidator, EmailValidator, EqualsValidator, GreaterThanOrEqualValidator, GreaterThanValidator, LessThanOrEqualValidator, LessThanValidator, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, ModelKeys, PasswordValidator, PatternValidator, RequiredValidator, StepValidator, URLValidator, ValidationKeys, } from "@decaf-ts/decorator-validation";
2
10
  /**
3
- * @enum UIKeys
4
- * @category Constants
11
+ * @description Key constants used for UI metadata and rendering
12
+ * @summary Collection of string constants used as keys for UI-related metadata
13
+ * These keys are used throughout the library to store and retrieve metadata related to
14
+ * UI models, elements, properties, and validation rules.
15
+ *
16
+ * @typedef {Object} UIKeysType
17
+ * @property {string} REFLECT - Base reflection key for UI metadata
18
+ * @property {string} UIMODEL - Key for UI model metadata
19
+ * @property {string} RENDERED_BY - Key for specifying rendering engine
20
+ * @property {string} ELEMENT - Key for element metadata
21
+ * @property {string} PROP - Key for property metadata
22
+ * @property {string} NAME - Key for name attribute
23
+ * @property {string} NAME_PREFIX - Prefix for input names
24
+ * @property {string} CUSTOM_PROPS - Key for custom validation properties
25
+ * @property {string} UILISTITEM - Key for list item metadata
26
+ * @property {string} UILISTPROP - Key for list property metadata
27
+ * @property {string} TYPE - Key for type metadata
28
+ * @property {string} SUB_TYPE - Key for subtype metadata
29
+ * @property {string} HIDDEN - Key for hidden attribute
30
+ * @property {string} FORMAT - Key for format metadata
31
+ * @property {string} READ_ONLY - Key for readonly attribute
32
+ * @property {string} REQUIRED - Key for required validation
33
+ * @property {string} MIN - Key for minimum value validation
34
+ * @property {string} MIN_LENGTH - Key for minimum length validation
35
+ * @property {string} MAX - Key for maximum value validation
36
+ * @property {string} MAX_LENGTH - Key for maximum length validation
37
+ * @property {string} PATTERN - Key for pattern validation
38
+ * @property {string} URL - Key for URL validation
39
+ * @property {string} STEP - Key for step validation
40
+ * @property {string} DATE - Key for date validation
41
+ * @property {string} EMAIL - Key for email validation
42
+ * @property {string} PASSWORD - Key for password validation
43
+ * @property {string} EQUALS - Key for equality validation
44
+ * @property {string} DIFF - Key for difference validation
45
+ * @property {string} LESS_THAN - Key for less than validation
46
+ * @property {string} LESS_THAN_OR_EQUAL - Key for less than or equal validation
47
+ * @property {string} GREATER_THAN - Key for greater than validation
48
+ * @property {string} GREATER_THAN_OR_EQUAL - Key for greater than or equal validation
49
+ *
50
+ * @const UIKeys
51
+ * @type {UIKeysType}
52
+ * @readonly
53
+ * @memberOf module:ui-decorators
5
54
  */
6
55
  export const UIKeys = {
7
56
  REFLECT: `${ModelKeys.REFLECT}.ui.`,
@@ -9,11 +58,13 @@ export const UIKeys = {
9
58
  RENDERED_BY: "rendered-by",
10
59
  ELEMENT: "element",
11
60
  PROP: "prop",
61
+ CHILD: "child",
12
62
  NAME: "name",
13
63
  NAME_PREFIX: "input-",
14
64
  CUSTOM_PROPS: "customValidationProps",
15
65
  UILISTITEM: "uilistitem",
16
66
  UILISTPROP: "listprop",
67
+ HANDLERS: "handlers",
17
68
  TYPE: "type",
18
69
  SUB_TYPE: "subtype",
19
70
  HIDDEN: "hidden",
@@ -37,6 +88,23 @@ export const UIKeys = {
37
88
  GREATER_THAN: ValidationKeys.GREATER_THAN,
38
89
  GREATER_THAN_OR_EQUAL: ValidationKeys.GREATER_THAN_OR_EQUAL,
39
90
  };
91
+ /**
92
+ * @description Mapping of input types to their corresponding validators
93
+ * @summary Maps special input types to their validator classes
94
+ * This constant maps input types like email, URL, date, and password to their
95
+ * corresponding validator classes from the decorator-validation library.
96
+ *
97
+ * @typedef {Object.<string, Constructor<Validator>>} ValidatableByTypeMap
98
+ * @property {Constructor<EmailValidator>} email - Validator for email inputs
99
+ * @property {Constructor<URLValidator>} url - Validator for URL inputs
100
+ * @property {Constructor<DateValidator>} date - Validator for date inputs
101
+ * @property {Constructor<PasswordValidator>} password - Validator for password inputs
102
+ *
103
+ * @const ValidatableByType
104
+ * @type {ValidatableByTypeMap}
105
+ * @readonly
106
+ * @memberOf module:ui-decorators
107
+ */
40
108
  export const ValidatableByType = {
41
109
  [UIKeys.EMAIL]: EmailValidator,
42
110
  [UIKeys.URL]: URLValidator,
@@ -44,9 +112,30 @@ export const ValidatableByType = {
44
112
  [UIKeys.PASSWORD]: PasswordValidator,
45
113
  };
46
114
  /**
47
- * @constant ValidatableByAttribute
115
+ * @description Mapping of validation attributes to their corresponding validators
116
+ * @summary Maps HTML validation attributes to their validator classes
117
+ * This constant maps HTML validation attributes like required, min, max, pattern, etc.
118
+ * to their corresponding validator classes from the decorator-validation library.
48
119
  *
49
- * @memberOf ui-decorators-web.ui
120
+ * @typedef {Object.<string, Constructor<Validator>>} ValidatableByAttributeMap
121
+ * @property {Constructor<RequiredValidator>} required - Validator for required fields
122
+ * @property {Constructor<MinValidator>} min - Validator for minimum value
123
+ * @property {Constructor<MaxValidator>} max - Validator for maximum value
124
+ * @property {Constructor<StepValidator>} step - Validator for step value
125
+ * @property {Constructor<MinLengthValidator>} minlength - Validator for minimum length
126
+ * @property {Constructor<MaxLengthValidator>} maxlength - Validator for maximum length
127
+ * @property {Constructor<PatternValidator>} pattern - Validator for regex pattern
128
+ * @property {Constructor<EqualsValidator>} equals - Validator for equality
129
+ * @property {Constructor<DiffValidator>} diff - Validator for difference
130
+ * @property {Constructor<LessThanValidator>} lessthan - Validator for less than comparison
131
+ * @property {Constructor<LessThanOrEqualValidator>} lessthanorequal - Validator for less than or equal comparison
132
+ * @property {Constructor<GreaterThanValidator>} greaterthan - Validator for greater than comparison
133
+ * @property {Constructor<GreaterThanOrEqualValidator>} greaterthanorequal - Validator for greater than or equal comparison
134
+ *
135
+ * @const ValidatableByAttribute
136
+ * @type {ValidatableByAttributeMap}
137
+ * @readonly
138
+ * @memberOf module:ui-decorators
50
139
  */
51
140
  export const ValidatableByAttribute = {
52
141
  [UIKeys.REQUIRED]: RequiredValidator,
@@ -63,7 +152,52 @@ export const ValidatableByAttribute = {
63
152
  [UIKeys.GREATER_THAN]: GreaterThanValidator,
64
153
  [UIKeys.GREATER_THAN_OR_EQUAL]: GreaterThanOrEqualValidator,
65
154
  };
155
+ /**
156
+ * @description Standard date format string for HTML5 date inputs
157
+ * @summary Format string for HTML5 date inputs (yyyy-MM-dd)
158
+ * This constant defines the standard date format string used for HTML5 date inputs.
159
+ *
160
+ * @const HTML5DateFormat
161
+ * @type {string}
162
+ * @readonly
163
+ * @memberOf module:ui-decorators
164
+ */
66
165
  export const HTML5DateFormat = "yyyy-MM-dd";
166
+ /**
167
+ * @description Collection of HTML5 input type values
168
+ * @summary Maps input type constants to their HTML attribute values
169
+ * This constant provides a mapping of input type constants to their corresponding
170
+ * HTML attribute values for use in form elements.
171
+ *
172
+ * @typedef {Object} HTML5InputTypesMap
173
+ * @property {string} BUTTON - Button input type
174
+ * @property {string} CHECKBOX - Checkbox input type
175
+ * @property {string} COLOR - Color picker input type
176
+ * @property {string} DATE - Date picker input type
177
+ * @property {string} DATETIME_LOCAL - Local datetime picker input type
178
+ * @property {string} EMAIL - Email input type with validation
179
+ * @property {string} FILE - File upload input type
180
+ * @property {string} HIDDEN - Hidden input type
181
+ * @property {string} IMAGE - Image input type
182
+ * @property {string} MONTH - Month picker input type
183
+ * @property {string} NUMBER - Numeric input type
184
+ * @property {string} PASSWORD - Password input type with masked text
185
+ * @property {string} RADIO - Radio button input type
186
+ * @property {string} RANGE - Range slider input type
187
+ * @property {string} RESET - Form reset button input type
188
+ * @property {string} SEARCH - Search input type
189
+ * @property {string} SUBMIT - Form submit button input type
190
+ * @property {string} TEL - Telephone number input type
191
+ * @property {string} TEXT - Basic text input type
192
+ * @property {string} TIME - Time picker input type
193
+ * @property {string} URL - URL input type with validation
194
+ * @property {string} WEEK - Week picker input type
195
+ *
196
+ * @const HTML5InputTypes
197
+ * @type {HTML5InputTypesMap}
198
+ * @readonly
199
+ * @memberOf module:ui-decorators
200
+ */
67
201
  export const HTML5InputTypes = {
68
202
  BUTTON: "button",
69
203
  CHECKBOX: "checkbox",
@@ -88,8 +222,19 @@ export const HTML5InputTypes = {
88
222
  URL: UIKeys.URL,
89
223
  WEEK: "week",
90
224
  };
225
+ /**
226
+ * @description Array of HTML5 input types that use checkboxes
227
+ * @summary List of input types that represent checkable controls
228
+ * This constant defines an array of HTML5 input types that represent
229
+ * checkable controls (checkbox and radio).
230
+ *
231
+ * @const HTML5CheckTypes
232
+ * @type {string[]}
233
+ * @readonly
234
+ * @memberOf module:ui-decorators
235
+ */
91
236
  export const HTML5CheckTypes = [
92
237
  HTML5InputTypes.CHECKBOX,
93
238
  HTML5InputTypes.RADIO,
94
239
  ];
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixjQUFjLEVBQ2QsZUFBZSxFQUNmLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLE1BQU07SUFDbkMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFlBQVksRUFBRSx1QkFBdUI7SUFFckMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFVBQVU7SUFFdEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsU0FBUztJQUVuQixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUVoQixTQUFTLEVBQUUsVUFBVTtJQUNyQixRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7SUFDakMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtJQUNyQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDdkIsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO0lB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QU0sZUFBZSxHQUFHO0lBQzdCLGVBQWUsQ0FBQyxRQUFRO0lBQ3hCLGVBQWUsQ0FBQyxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgRGF0ZVZhbGlkYXRvcixcbiAgRGlmZlZhbGlkYXRvcixcbiAgRW1haWxWYWxpZGF0b3IsXG4gIEVxdWFsc1ZhbGlkYXRvcixcbiAgR3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yLFxuICBHcmVhdGVyVGhhblZhbGlkYXRvcixcbiAgTGVzc1RoYW5PckVxdWFsVmFsaWRhdG9yLFxuICBMZXNzVGhhblZhbGlkYXRvcixcbiAgTWF4TGVuZ3RoVmFsaWRhdG9yLFxuICBNYXhWYWxpZGF0b3IsXG4gIE1pbkxlbmd0aFZhbGlkYXRvcixcbiAgTWluVmFsaWRhdG9yLFxuICBNb2RlbEtleXMsXG4gIFBhc3N3b3JkVmFsaWRhdG9yLFxuICBQYXR0ZXJuVmFsaWRhdG9yLFxuICBSZXF1aXJlZFZhbGlkYXRvcixcbiAgU3RlcFZhbGlkYXRvcixcbiAgVVJMVmFsaWRhdG9yLFxuICBWYWxpZGF0aW9uS2V5cyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbi8qKlxuICogQGVudW0gVUlLZXlzXG4gKiBAY2F0ZWdvcnkgQ29uc3RhbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBVSUtleXMgPSB7XG4gIFJFRkxFQ1Q6IGAke01vZGVsS2V5cy5SRUZMRUNUfS51aS5gLFxuICBVSU1PREVMOiBcInVpbW9kZWxcIixcbiAgUkVOREVSRURfQlk6IFwicmVuZGVyZWQtYnlcIixcbiAgRUxFTUVOVDogXCJlbGVtZW50XCIsXG4gIFBST1A6IFwicHJvcFwiLFxuICBOQU1FOiBcIm5hbWVcIixcbiAgTkFNRV9QUkVGSVg6IFwiaW5wdXQtXCIsXG4gIENVU1RPTV9QUk9QUzogXCJjdXN0b21WYWxpZGF0aW9uUHJvcHNcIixcblxuICBVSUxJU1RJVEVNOiBcInVpbGlzdGl0ZW1cIixcbiAgVUlMSVNUUFJPUDogXCJsaXN0cHJvcFwiLFxuXG4gIFRZUEU6IFwidHlwZVwiLFxuICBTVUJfVFlQRTogXCJzdWJ0eXBlXCIsXG5cbiAgSElEREVOOiBcImhpZGRlblwiLFxuICBGT1JNQVQ6IFwiZm9ybWF0XCIsXG5cbiAgUkVBRF9PTkxZOiBcInJlYWRvbmx5XCIsXG4gIFJFUVVJUkVEOiBWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCxcbiAgTUlOOiBWYWxpZGF0aW9uS2V5cy5NSU4sXG4gIE1JTl9MRU5HVEg6IFZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEgsXG4gIE1BWDogVmFsaWRhdGlvbktleXMuTUFYLFxuICBNQVhfTEVOR1RIOiBWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RILFxuICBQQVRURVJOOiBWYWxpZGF0aW9uS2V5cy5QQVRURVJOLFxuICBVUkw6IFZhbGlkYXRpb25LZXlzLlVSTCxcbiAgU1RFUDogVmFsaWRhdGlvbktleXMuU1RFUCxcbiAgREFURTogVmFsaWRhdGlvbktleXMuREFURSxcbiAgRU1BSUw6IFZhbGlkYXRpb25LZXlzLkVNQUlMLFxuICBQQVNTV09SRDogVmFsaWRhdGlvbktleXMuUEFTU1dPUkQsXG4gIEVRVUFMUzogVmFsaWRhdGlvbktleXMuRVFVQUxTLFxuICBESUZGOiBWYWxpZGF0aW9uS2V5cy5ESUZGLFxuICBMRVNTX1RIQU46IFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTixcbiAgTEVTU19USEFOX09SX0VRVUFMOiBWYWxpZGF0aW9uS2V5cy5MRVNTX1RIQU5fT1JfRVFVQUwsXG4gIEdSRUFURVJfVEhBTjogVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOLFxuICBHUkVBVEVSX1RIQU5fT1JfRVFVQUw6IFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcbn07XG5cbmV4cG9ydCBjb25zdCBWYWxpZGF0YWJsZUJ5VHlwZTogUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8VmFsaWRhdG9yPj4gPSB7XG4gIFtVSUtleXMuRU1BSUxdOiBFbWFpbFZhbGlkYXRvcixcbiAgW1VJS2V5cy5VUkxdOiBVUkxWYWxpZGF0b3IsXG4gIFtVSUtleXMuREFURV06IERhdGVWYWxpZGF0b3IsXG4gIFtVSUtleXMuUEFTU1dPUkRdOiBQYXNzd29yZFZhbGlkYXRvcixcbn07XG5cbi8qKlxuICogQGNvbnN0YW50IFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGVcbiAqXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy13ZWIudWlcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGU6IFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFZhbGlkYXRvcj4+ID0ge1xuICBbVUlLZXlzLlJFUVVJUkVEXTogUmVxdWlyZWRWYWxpZGF0b3IsXG4gIFtVSUtleXMuTUlOXTogTWluVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1BWF06IE1heFZhbGlkYXRvcixcbiAgW1VJS2V5cy5TVEVQXTogU3RlcFZhbGlkYXRvcixcbiAgW1VJS2V5cy5NSU5fTEVOR1RIXTogTWluTGVuZ3RoVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1BWF9MRU5HVEhdOiBNYXhMZW5ndGhWYWxpZGF0b3IsXG4gIFtVSUtleXMuUEFUVEVSTl06IFBhdHRlcm5WYWxpZGF0b3IsXG4gIFtVSUtleXMuRVFVQUxTXTogRXF1YWxzVmFsaWRhdG9yLFxuICBbVUlLZXlzLkRJRkZdOiBEaWZmVmFsaWRhdG9yLFxuICBbVUlLZXlzLkxFU1NfVEhBTl06IExlc3NUaGFuVmFsaWRhdG9yLFxuICBbVUlLZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgW1VJS2V5cy5HUkVBVEVSX1RIQU5dOiBHcmVhdGVyVGhhblZhbGlkYXRvcixcbiAgW1VJS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3IsXG59O1xuXG5leHBvcnQgY29uc3QgSFRNTDVEYXRlRm9ybWF0ID0gXCJ5eXl5LU1NLWRkXCI7XG5cbmV4cG9ydCBjb25zdCBIVE1MNUlucHV0VHlwZXMgPSB7XG4gIEJVVFRPTjogXCJidXR0b25cIixcbiAgQ0hFQ0tCT1g6IFwiY2hlY2tib3hcIixcbiAgQ09MT1I6IFwiY29sb3JcIixcbiAgREFURTogVUlLZXlzLkRBVEUsXG4gIERBVEVUSU1FX0xPQ0FMOiBcImRhdGV0aW1lLWxvY2FsXCIsXG4gIEVNQUlMOiBVSUtleXMuRU1BSUwsXG4gIEZJTEU6IFwiZmlsZVwiLFxuICBISURERU46IFwiaGlkZGVuXCIsXG4gIElNQUdFOiBcImltYWdlXCIsXG4gIE1PTlRIOiBcIm1vbnRoXCIsXG4gIE5VTUJFUjogXCJudW1iZXJcIixcbiAgUEFTU1dPUkQ6IFVJS2V5cy5QQVNTV09SRCxcbiAgUkFESU86IFwicmFkaW9cIixcbiAgUkFOR0U6IFwicmFuZ2VcIixcbiAgUkVTRVQ6IFwicmVzZXRcIixcbiAgU0VBUkNIOiBcInNlYXJjaFwiLFxuICBTVUJNSVQ6IFwic3VibWl0XCIsXG4gIFRFTDogXCJ0ZWxcIixcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIFRJTUU6IFwidGltZVwiLFxuICBVUkw6IFVJS2V5cy5VUkwsXG4gIFdFRUs6IFwid2Vla1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IEhUTUw1Q2hlY2tUeXBlcyA9IFtcbiAgSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YLFxuICBIVE1MNUlucHV0VHlwZXMuUkFESU8sXG5dO1xuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUVMLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsR0FFZixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxNQUFNO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFlBQVksRUFBRSx1QkFBdUI7SUFFckMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsUUFBUSxFQUFFLFVBQVU7SUFFcEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsU0FBUztJQUVuQixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUVoQixTQUFTLEVBQUUsVUFBVTtJQUNyQixRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7SUFDakMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxH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RUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7SUFDZixJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLGVBQWUsQ0FBQyxRQUFRO0lBQ3hCLGVBQWUsQ0FBQyxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBDb25zdGFudHMgYW5kIGVudW1zIGZvciBVSSByZW5kZXJpbmcgYW5kIHZhbGlkYXRpb25cbiAqIEBzdW1tYXJ5IERlZmluZXMga2V5cywgbWFwcGluZ3MsIGFuZCBIVE1MNSBpbnB1dCB0eXBlcyBmb3IgVUkgY29tcG9uZW50c1xuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29uc3RhbnRzIHVzZWQgdGhyb3VnaG91dCB0aGUgVUkgZGVjb3JhdG9ycyBsaWJyYXJ5IGZvclxuICogcmVuZGVyaW5nLCB2YWxpZGF0aW9uLCBhbmQgSFRNTCBlbGVtZW50IGdlbmVyYXRpb24uXG4gKiBAbW9kdWxlIHVpL2NvbnN0YW50c1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIERhdGVWYWxpZGF0b3IsXG4gIERpZmZWYWxpZGF0b3IsXG4gIEVtYWlsVmFsaWRhdG9yLFxuICBFcXVhbHNWYWxpZGF0b3IsXG4gIEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgR3JlYXRlclRoYW5WYWxpZGF0b3IsXG4gIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgTGVzc1RoYW5WYWxpZGF0b3IsXG4gIE1heExlbmd0aFZhbGlkYXRvcixcbiAgTWF4VmFsaWRhdG9yLFxuICBNaW5MZW5ndGhWYWxpZGF0b3IsXG4gIE1pblZhbGlkYXRvcixcbiAgTW9kZWxLZXlzLFxuICBQYXNzd29yZFZhbGlkYXRvcixcbiAgUGF0dGVyblZhbGlkYXRvcixcbiAgUmVxdWlyZWRWYWxpZGF0b3IsXG4gIFN0ZXBWYWxpZGF0b3IsXG4gIFVSTFZhbGlkYXRvcixcbiAgVmFsaWRhdGlvbktleXMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgY29uc3RhbnRzIHVzZWQgZm9yIFVJIG1ldGFkYXRhIGFuZCByZW5kZXJpbmdcbiAqIEBzdW1tYXJ5IENvbGxlY3Rpb24gb2Ygc3RyaW5nIGNvbnN0YW50cyB1c2VkIGFzIGtleXMgZm9yIFVJLXJlbGF0ZWQgbWV0YWRhdGFcbiAqIFRoZXNlIGtleXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgbGlicmFyeSB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEgcmVsYXRlZCB0b1xuICogVUkgbW9kZWxzLCBlbGVtZW50cywgcHJvcGVydGllcywgYW5kIHZhbGlkYXRpb24gcnVsZXMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVUlLZXlzVHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgLSBCYXNlIHJlZmxlY3Rpb24ga2V5IGZvciBVSSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVJTU9ERUwgLSBLZXkgZm9yIFVJIG1vZGVsIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVOREVSRURfQlkgLSBLZXkgZm9yIHNwZWNpZnlpbmcgcmVuZGVyaW5nIGVuZ2luZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVMRU1FTlQgLSBLZXkgZm9yIGVsZW1lbnQgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBQUk9QIC0gS2V5IGZvciBwcm9wZXJ0eSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5BTUUgLSBLZXkgZm9yIG5hbWUgYXR0cmlidXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTkFNRV9QUkVGSVggLSBQcmVmaXggZm9yIGlucHV0IG5hbWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ1VTVE9NX1BST1BTIC0gS2V5IGZvciBjdXN0b20gdmFsaWRhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVUlMSVNUSVRFTSAtIEtleSBmb3IgbGlzdCBpdGVtIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVUlMSVNUUFJPUCAtIEtleSBmb3IgbGlzdCBwcm9wZXJ0eSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRZUEUgLSBLZXkgZm9yIHR5cGUgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVUJfVFlQRSAtIEtleSBmb3Igc3VidHlwZSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEhJRERFTiAtIEtleSBmb3IgaGlkZGVuIGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZPUk1BVCAtIEtleSBmb3IgZm9ybWF0IG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVBRF9PTkxZIC0gS2V5IGZvciByZWFkb25seSBhdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVFVSVJFRCAtIEtleSBmb3IgcmVxdWlyZWQgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1JTiAtIEtleSBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUlOX0xFTkdUSCAtIEtleSBmb3IgbWluaW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1BWCAtIEtleSBmb3IgbWF4aW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUFYX0xFTkdUSCAtIEtleSBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBVFRFUk4gLSBLZXkgZm9yIHBhdHRlcm4gdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVSTCAtIEtleSBmb3IgVVJMIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVEVQIC0gS2V5IGZvciBzdGVwIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBEQVRFIC0gS2V5IGZvciBkYXRlIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFTUFJTCAtIEtleSBmb3IgZW1haWwgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBU1NXT1JEIC0gS2V5IGZvciBwYXNzd29yZCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRVFVQUxTIC0gS2V5IGZvciBlcXVhbGl0eSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRElGRiAtIEtleSBmb3IgZGlmZmVyZW5jZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTEVTU19USEFOIC0gS2V5IGZvciBsZXNzIHRoYW4gdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IExFU1NfVEhBTl9PUl9FUVVBTCAtIEtleSBmb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBHUkVBVEVSX1RIQU4gLSBLZXkgZm9yIGdyZWF0ZXIgdGhhbiB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gR1JFQVRFUl9USEFOX09SX0VRVUFMIC0gS2V5IGZvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvblxuICpcbiAqIEBjb25zdCBVSUtleXNcbiAqIEB0eXBlIHtVSUtleXNUeXBlfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFVJS2V5cyA9IHtcbiAgUkVGTEVDVDogYCR7TW9kZWxLZXlzLlJFRkxFQ1R9LnVpLmAsXG4gIFVJTU9ERUw6IFwidWltb2RlbFwiLFxuICBSRU5ERVJFRF9CWTogXCJyZW5kZXJlZC1ieVwiLFxuICBFTEVNRU5UOiBcImVsZW1lbnRcIixcbiAgUFJPUDogXCJwcm9wXCIsXG4gIENISUxEOiBcImNoaWxkXCIsXG4gIE5BTUU6IFwibmFtZVwiLFxuICBOQU1FX1BSRUZJWDogXCJpbnB1dC1cIixcbiAgQ1VTVE9NX1BST1BTOiBcImN1c3RvbVZhbGlkYXRpb25Qcm9wc1wiLFxuXG4gIFVJTElTVElURU06IFwidWlsaXN0aXRlbVwiLFxuICBVSUxJU1RQUk9QOiBcImxpc3Rwcm9wXCIsXG4gIEhBTkRMRVJTOiBcImhhbmRsZXJzXCIsXG5cbiAgVFlQRTogXCJ0eXBlXCIsXG4gIFNVQl9UWVBFOiBcInN1YnR5cGVcIixcblxuICBISURERU46IFwiaGlkZGVuXCIsXG4gIEZPUk1BVDogXCJmb3JtYXRcIixcblxuICBSRUFEX09OTFk6IFwicmVhZG9ubHlcIixcbiAgUkVRVUlSRUQ6IFZhbGlkYXRpb25LZXlzLlJFUVVJUkVELFxuICBNSU46IFZhbGlkYXRpb25LZXlzLk1JTixcbiAgTUlOX0xFTkdUSDogVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSCxcbiAgTUFYOiBWYWxpZGF0aW9uS2V5cy5NQVgsXG4gIE1BWF9MRU5HVEg6IFZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEgsXG4gIFBBVFRFUk46IFZhbGlkYXRpb25LZXlzLlBBVFRFUk4sXG4gIFVSTDogVmFsaWRhdGlvbktleXMuVVJMLFxuICBTVEVQOiBWYWxpZGF0aW9uS2V5cy5TVEVQLFxuICBEQVRFOiBWYWxpZGF0aW9uS2V5cy5EQVRFLFxuICBFTUFJTDogVmFsaWRhdGlvbktleXMuRU1BSUwsXG4gIFBBU1NXT1JEOiBWYWxpZGF0aW9uS2V5cy5QQVNTV09SRCxcbiAgRVFVQUxTOiBWYWxpZGF0aW9uS2V5cy5FUVVBTFMsXG4gIERJRkY6IFZhbGlkYXRpb25LZXlzLkRJRkYsXG4gIExFU1NfVEhBTjogVmFsaWRhdGlvbktleXMuTEVTU19USEFOLFxuICBMRVNTX1RIQU5fT1JfRVFVQUw6IFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTCxcbiAgR1JFQVRFUl9USEFOOiBWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU4sXG4gIEdSRUFURVJfVEhBTl9PUl9FUVVBTDogVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOX09SX0VRVUFMLFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWFwcGluZyBvZiBpbnB1dCB0eXBlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHZhbGlkYXRvcnNcbiAqIEBzdW1tYXJ5IE1hcHMgc3BlY2lhbCBpbnB1dCB0eXBlcyB0byB0aGVpciB2YWxpZGF0b3IgY2xhc3Nlc1xuICogVGhpcyBjb25zdGFudCBtYXBzIGlucHV0IHR5cGVzIGxpa2UgZW1haWwsIFVSTCwgZGF0ZSwgYW5kIHBhc3N3b3JkIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIHZhbGlkYXRvciBjbGFzc2VzIGZyb20gdGhlIGRlY29yYXRvci12YWxpZGF0aW9uIGxpYnJhcnkuXG4gKlxuICogQHR5cGVkZWYge09iamVjdC48c3RyaW5nLCBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+Pn0gVmFsaWRhdGFibGVCeVR5cGVNYXBcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8RW1haWxWYWxpZGF0b3I+fSBlbWFpbCAtIFZhbGlkYXRvciBmb3IgZW1haWwgaW5wdXRzXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPFVSTFZhbGlkYXRvcj59IHVybCAtIFZhbGlkYXRvciBmb3IgVVJMIGlucHV0c1xuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxEYXRlVmFsaWRhdG9yPn0gZGF0ZSAtIFZhbGlkYXRvciBmb3IgZGF0ZSBpbnB1dHNcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8UGFzc3dvcmRWYWxpZGF0b3I+fSBwYXNzd29yZCAtIFZhbGlkYXRvciBmb3IgcGFzc3dvcmQgaW5wdXRzXG4gKlxuICogQGNvbnN0IFZhbGlkYXRhYmxlQnlUeXBlXG4gKiBAdHlwZSB7VmFsaWRhdGFibGVCeVR5cGVNYXB9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVmFsaWRhdGFibGVCeVR5cGU6IFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFZhbGlkYXRvcj4+ID0ge1xuICBbVUlLZXlzLkVNQUlMXTogRW1haWxWYWxpZGF0b3IsXG4gIFtVSUtleXMuVVJMXTogVVJMVmFsaWRhdG9yLFxuICBbVUlLZXlzLkRBVEVdOiBEYXRlVmFsaWRhdG9yLFxuICBbVUlLZXlzLlBBU1NXT1JEXTogUGFzc3dvcmRWYWxpZGF0b3IsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNYXBwaW5nIG9mIHZhbGlkYXRpb24gYXR0cmlidXRlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHZhbGlkYXRvcnNcbiAqIEBzdW1tYXJ5IE1hcHMgSFRNTCB2YWxpZGF0aW9uIGF0dHJpYnV0ZXMgdG8gdGhlaXIgdmFsaWRhdG9yIGNsYXNzZXNcbiAqIFRoaXMgY29uc3RhbnQgbWFwcyBIVE1MIHZhbGlkYXRpb24gYXR0cmlidXRlcyBsaWtlIHJlcXVpcmVkLCBtaW4sIG1heCwgcGF0dGVybiwgZXRjLlxuICogdG8gdGhlaXIgY29ycmVzcG9uZGluZyB2YWxpZGF0b3IgY2xhc3NlcyBmcm9tIHRoZSBkZWNvcmF0b3ItdmFsaWRhdGlvbiBsaWJyYXJ5LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3QuPHN0cmluZywgQ29uc3RydWN0b3I8VmFsaWRhdG9yPj59IFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGVNYXBcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8UmVxdWlyZWRWYWxpZGF0b3I+fSByZXF1aXJlZCAtIFZhbGlkYXRvciBmb3IgcmVxdWlyZWQgZmllbGRzXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPE1pblZhbGlkYXRvcj59IG1pbiAtIFZhbGlkYXRvciBmb3IgbWluaW11bSB2YWx1ZVxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxNYXhWYWxpZGF0b3I+fSBtYXggLSBWYWxpZGF0b3IgZm9yIG1heGltdW0gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8U3RlcFZhbGlkYXRvcj59IHN0ZXAgLSBWYWxpZGF0b3IgZm9yIHN0ZXAgdmFsdWVcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TWluTGVuZ3RoVmFsaWRhdG9yPn0gbWlubGVuZ3RoIC0gVmFsaWRhdG9yIGZvciBtaW5pbXVtIGxlbmd0aFxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxNYXhMZW5ndGhWYWxpZGF0b3I+fSBtYXhsZW5ndGggLSBWYWxpZGF0b3IgZm9yIG1heGltdW0gbGVuZ3RoXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPFBhdHRlcm5WYWxpZGF0b3I+fSBwYXR0ZXJuIC0gVmFsaWRhdG9yIGZvciByZWdleCBwYXR0ZXJuXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPEVxdWFsc1ZhbGlkYXRvcj59IGVxdWFscyAtIFZhbGlkYXRvciBmb3IgZXF1YWxpdHlcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8RGlmZlZhbGlkYXRvcj59IGRpZmYgLSBWYWxpZGF0b3IgZm9yIGRpZmZlcmVuY2VcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TGVzc1RoYW5WYWxpZGF0b3I+fSBsZXNzdGhhbiAtIFZhbGlkYXRvciBmb3IgbGVzcyB0aGFuIGNvbXBhcmlzb25cbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TGVzc1RoYW5PckVxdWFsVmFsaWRhdG9yPn0gbGVzc3RoYW5vcmVxdWFsIC0gVmFsaWRhdG9yIGZvciBsZXNzIHRoYW4gb3IgZXF1YWwgY29tcGFyaXNvblxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxHcmVhdGVyVGhhblZhbGlkYXRvcj59IGdyZWF0ZXJ0aGFuIC0gVmFsaWRhdG9yIGZvciBncmVhdGVyIHRoYW4gY29tcGFyaXNvblxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3I+fSBncmVhdGVydGhhbm9yZXF1YWwgLSBWYWxpZGF0b3IgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBjb21wYXJpc29uXG4gKlxuICogQGNvbnN0IFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGVcbiAqIEB0eXBlIHtWYWxpZGF0YWJsZUJ5QXR0cmlidXRlTWFwfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGU6IFJlY29yZDxzdHJpbmcsIENvbnN0cnVjdG9yPFZhbGlkYXRvcj4+ID0ge1xuICBbVUlLZXlzLlJFUVVJUkVEXTogUmVxdWlyZWRWYWxpZGF0b3IsXG4gIFtVSUtleXMuTUlOXTogTWluVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1BWF06IE1heFZhbGlkYXRvcixcbiAgW1VJS2V5cy5TVEVQXTogU3RlcFZhbGlkYXRvcixcbiAgW1VJS2V5cy5NSU5fTEVOR1RIXTogTWluTGVuZ3RoVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1BWF9MRU5HVEhdOiBNYXhMZW5ndGhWYWxpZGF0b3IsXG4gIFtVSUtleXMuUEFUVEVSTl06IFBhdHRlcm5WYWxpZGF0b3IsXG4gIFtVSUtleXMuRVFVQUxTXTogRXF1YWxzVmFsaWRhdG9yLFxuICBbVUlLZXlzLkRJRkZdOiBEaWZmVmFsaWRhdG9yLFxuICBbVUlLZXlzLkxFU1NfVEhBTl06IExlc3NUaGFuVmFsaWRhdG9yLFxuICBbVUlLZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgW1VJS2V5cy5HUkVBVEVSX1RIQU5dOiBHcmVhdGVyVGhhblZhbGlkYXRvcixcbiAgW1VJS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3IsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBkYXRlIGZvcm1hdCBzdHJpbmcgZm9yIEhUTUw1IGRhdGUgaW5wdXRzXG4gKiBAc3VtbWFyeSBGb3JtYXQgc3RyaW5nIGZvciBIVE1MNSBkYXRlIGlucHV0cyAoeXl5eS1NTS1kZClcbiAqIFRoaXMgY29uc3RhbnQgZGVmaW5lcyB0aGUgc3RhbmRhcmQgZGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgZm9yIEhUTUw1IGRhdGUgaW5wdXRzLlxuICpcbiAqIEBjb25zdCBIVE1MNURhdGVGb3JtYXRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgSFRNTDVEYXRlRm9ybWF0ID0gXCJ5eXl5LU1NLWRkXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbGxlY3Rpb24gb2YgSFRNTDUgaW5wdXQgdHlwZSB2YWx1ZXNcbiAqIEBzdW1tYXJ5IE1hcHMgaW5wdXQgdHlwZSBjb25zdGFudHMgdG8gdGhlaXIgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzXG4gKiBUaGlzIGNvbnN0YW50IHByb3ZpZGVzIGEgbWFwcGluZyBvZiBpbnB1dCB0eXBlIGNvbnN0YW50cyB0byB0aGVpciBjb3JyZXNwb25kaW5nXG4gKiBIVE1MIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHVzZSBpbiBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEhUTUw1SW5wdXRUeXBlc01hcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJVVFRPTiAtIEJ1dHRvbiBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ0hFQ0tCT1ggLSBDaGVja2JveCBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ09MT1IgLSBDb2xvciBwaWNrZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEUgLSBEYXRlIHBpY2tlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gREFURVRJTUVfTE9DQUwgLSBMb2NhbCBkYXRldGltZSBwaWNrZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVNQUlMIC0gRW1haWwgaW5wdXQgdHlwZSB3aXRoIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBGSUxFIC0gRmlsZSB1cGxvYWQgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEhJRERFTiAtIEhpZGRlbiBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSU1BR0UgLSBJbWFnZSBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTU9OVEggLSBNb250aCBwaWNrZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiAtIE51bWVyaWMgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBU1NXT1JEIC0gUGFzc3dvcmQgaW5wdXQgdHlwZSB3aXRoIG1hc2tlZCB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkFESU8gLSBSYWRpbyBidXR0b24gaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJBTkdFIC0gUmFuZ2Ugc2xpZGVyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVNFVCAtIEZvcm0gcmVzZXQgYnV0dG9uIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTRUFSQ0ggLSBTZWFyY2ggaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNVQk1JVCAtIEZvcm0gc3VibWl0IGJ1dHRvbiBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVEVMIC0gVGVsZXBob25lIG51bWJlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVEVYVCAtIEJhc2ljIHRleHQgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRJTUUgLSBUaW1lIHBpY2tlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVVJMIC0gVVJMIGlucHV0IHR5cGUgd2l0aCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gV0VFSyAtIFdlZWsgcGlja2VyIGlucHV0IHR5cGVcbiAqXG4gKiBAY29uc3QgSFRNTDVJbnB1dFR5cGVzXG4gKiBAdHlwZSB7SFRNTDVJbnB1dFR5cGVzTWFwfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IEhUTUw1SW5wdXRUeXBlcyA9IHtcbiAgQlVUVE9OOiBcImJ1dHRvblwiLFxuICBDSEVDS0JPWDogXCJjaGVja2JveFwiLFxuICBDT0xPUjogXCJjb2xvclwiLFxuICBEQVRFOiBVSUtleXMuREFURSxcbiAgREFURVRJTUVfTE9DQUw6IFwiZGF0ZXRpbWUtbG9jYWxcIixcbiAgRU1BSUw6IFVJS2V5cy5FTUFJTCxcbiAgRklMRTogXCJmaWxlXCIsXG4gIEhJRERFTjogXCJoaWRkZW5cIixcbiAgSU1BR0U6IFwiaW1hZ2VcIixcbiAgTU9OVEg6IFwibW9udGhcIixcbiAgTlVNQkVSOiBcIm51bWJlclwiLFxuICBQQVNTV09SRDogVUlLZXlzLlBBU1NXT1JELFxuICBSQURJTzogXCJyYWRpb1wiLFxuICBSQU5HRTogXCJyYW5nZVwiLFxuICBSRVNFVDogXCJyZXNldFwiLFxuICBTRUFSQ0g6IFwic2VhcmNoXCIsXG4gIFNVQk1JVDogXCJzdWJtaXRcIixcbiAgVEVMOiBcInRlbFwiLFxuICBURVhUOiBcInRleHRcIixcbiAgVElNRTogXCJ0aW1lXCIsXG4gIFVSTDogVUlLZXlzLlVSTCxcbiAgV0VFSzogXCJ3ZWVrXCIsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBIVE1MNSBpbnB1dCB0eXBlcyB0aGF0IHVzZSBjaGVja2JveGVzXG4gKiBAc3VtbWFyeSBMaXN0IG9mIGlucHV0IHR5cGVzIHRoYXQgcmVwcmVzZW50IGNoZWNrYWJsZSBjb250cm9sc1xuICogVGhpcyBjb25zdGFudCBkZWZpbmVzIGFuIGFycmF5IG9mIEhUTUw1IGlucHV0IHR5cGVzIHRoYXQgcmVwcmVzZW50XG4gKiBjaGVja2FibGUgY29udHJvbHMgKGNoZWNrYm94IGFuZCByYWRpbykuXG4gKlxuICogQGNvbnN0IEhUTUw1Q2hlY2tUeXBlc1xuICogQHR5cGUge3N0cmluZ1tdfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IEhUTUw1Q2hlY2tUeXBlcyA9IFtcbiAgSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YLFxuICBIVE1MNUlucHV0VHlwZXMuUkFESU8sXG5dO1xuIl19
@@ -1,47 +1,255 @@
1
1
  import "reflect-metadata";
2
2
  import { CrudOperationKeys } from "./types";
3
3
  /**
4
- * @namespace ui-decorators.ui.decorators
5
- * @memberOf ui-decorators.ui
4
+ * @description Decorator that hides a property during specific CRUD operations
5
+ * @summary Controls property visibility based on operation type
6
+ * This decorator allows you to specify which CRUD operations should hide a property
7
+ * in the UI. The property will only be visible during operations not specified.
8
+ *
9
+ * @param operations - The CRUD operations during which the property should be hidden
10
+ * @return {Function} A property decorator function
11
+ *
12
+ * @function hideOn
13
+ * @category Property Decorators
14
+ *
15
+ * @example
16
+ * // Hide the password field during READ operations
17
+ * class User {
18
+ * @attribute()
19
+ * username: string;
20
+ *
21
+ * @attribute()
22
+ * @hideOn(OperationKeys.READ)
23
+ * password: string;
24
+ * }
25
+ *
26
+ * @mermaid
27
+ * sequenceDiagram
28
+ * participant Model
29
+ * participant hideOn
30
+ * participant RenderingEngine
31
+ * participant UI
32
+ * Model->>hideOn: Apply to property
33
+ * hideOn->>Model: Add hidden metadata
34
+ * RenderingEngine->>Model: Check if property should be hidden
35
+ * Model->>RenderingEngine: Return hidden operations
36
+ * RenderingEngine->>UI: Render or hide based on current operation
6
37
  */
7
38
  export declare function hideOn(...operations: CrudOperationKeys[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
39
+ /**
40
+ * @description Decorator that completely hides a property in all UI operations
41
+ * @summary Makes a property invisible in all CRUD operations
42
+ * This decorator is a convenience wrapper around hideOn that hides a property
43
+ * during all CRUD operations (CREATE, READ, UPDATE, DELETE).
44
+ *
45
+ * @return {Function} A property decorator function
46
+ *
47
+ * @function hidden
48
+ * @category Property Decorators
49
+ *
50
+ * @example
51
+ * // Completely hide the internalId field in the UI
52
+ * class Product {
53
+ * @attribute()
54
+ * name: string;
55
+ *
56
+ * @attribute()
57
+ * @hidden()
58
+ * internalId: string;
59
+ * }
60
+ *
61
+ * @mermaid
62
+ * sequenceDiagram
63
+ * participant Model
64
+ * participant hidden
65
+ * participant hideOn
66
+ * participant RenderingEngine
67
+ * Model->>hidden: Apply to property
68
+ * hidden->>hideOn: Call with all operations
69
+ * hideOn->>Model: Add hidden metadata
70
+ * RenderingEngine->>Model: Check if property should be hidden
71
+ * Model->>RenderingEngine: Return all operations
72
+ * RenderingEngine->>UI: Always hide property
73
+ */
8
74
  export declare function hidden(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
9
75
  /**
10
- * Adds the UIElement definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
76
+ * @description Decorator that specifies how a property should be rendered as a UI element
77
+ * @summary Maps a model property to a specific UI element with custom properties
78
+ * This decorator allows you to define which HTML element or component should be used
79
+ * to render a specific property, along with any additional properties to pass to that element.
80
+ *
81
+ * @param {string} tag The HTML element or component tag name to use for rendering
82
+ * @param {Record<string, any>} [props] Additional properties to pass to the element
83
+ * @param {boolean} [serialize=false] Whether the property should be serialized
84
+ * @return {Function} A property decorator function
85
+ *
86
+ * @function uielement
87
+ * @category Property Decorators
11
88
  *
12
- * @param {string} tag The component/HTML element tag name
13
- * @param {{}} [props] The properties to pass to that component/HTML Element
14
- * @param serialize
89
+ * @example
90
+ * // Render a property as a text input
91
+ * class LoginForm {
92
+ * @attribute()
93
+ * @uielement('input', { type: 'text', placeholder: 'Enter username' })
94
+ * username: string;
15
95
  *
16
- * @decorator uielement
96
+ * @attribute()
97
+ * @uielement('input', { type: 'password', placeholder: 'Enter password' })
98
+ * password: string;
17
99
  *
18
- * @category Decorators
19
- * @subcategory ui-decorators
100
+ * @attribute()
101
+ * @uielement('button', { class: 'btn-primary' })
102
+ * submit: string = 'Login';
103
+ * }
104
+ *
105
+ * @mermaid
106
+ * sequenceDiagram
107
+ * participant Model
108
+ * participant uielement
109
+ * participant RenderingEngine
110
+ * participant UI
111
+ * Model->>uielement: Apply to property
112
+ * uielement->>Model: Add element metadata
113
+ * RenderingEngine->>Model: Get element metadata
114
+ * Model->>RenderingEngine: Return tag and props
115
+ * RenderingEngine->>UI: Render with specified element
20
116
  */
21
117
  export declare function uielement(tag: string, props?: Record<string, any>, serialize?: boolean): (original: any, propertyKey?: any) => void;
22
118
  /**
23
- * Adds the UIProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
119
+ * @description Decorator that maps a model property to a UI component property
120
+ * @summary Specifies how a property should be passed to a UI component
121
+ * This decorator allows you to define how a model property should be mapped to
122
+ * a property of the UI component when rendering. It requires the class to be
123
+ * decorated with @uimodel.
124
+ *
125
+ * @param {string} [propName] The name of the property to pass to the component (defaults to the property key)
126
+ * @param {boolean} [stringify=false] Whether to stringify the property value
127
+ * @return {Function} A property decorator function
24
128
  *
25
- * this requires a '@uimodel' with a defined tag
129
+ * @function uiprop
130
+ * @category Property Decorators
26
131
  *
27
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
132
+ * @example
133
+ * // Map model properties to component properties
134
+ * @uimodel('user-profile')
135
+ * class UserProfile {
136
+ * @attribute()
137
+ * @uiprop() // Will be passed as 'fullName' to the component
138
+ * fullName: string;
28
139
  *
29
- * @decorator uiprop
140
+ * @attribute()
141
+ * @uiprop('userEmail') // Will be passed as 'userEmail' to the component
142
+ * email: string;
30
143
  *
31
- * @category Decorators
32
- * @subcategory ui-decorators
144
+ * @attribute()
145
+ * @uiprop('userData', true) // Will be passed as stringified JSON
146
+ * userData: Record<string, any>;
147
+ * }
148
+ *
149
+ * @mermaid
150
+ * sequenceDiagram
151
+ * participant Model
152
+ * participant uiprop
153
+ * participant RenderingEngine
154
+ * participant Component
155
+ * Model->>uiprop: Apply to property
156
+ * uiprop->>Model: Add prop metadata
157
+ * RenderingEngine->>Model: Get prop metadata
158
+ * Model->>RenderingEngine: Return prop name and stringify flag
159
+ * RenderingEngine->>Component: Pass property with specified name
33
160
  */
34
161
  export declare function uiprop(propName?: string | undefined, stringify?: boolean): (target: any, propertyKey: string) => void;
35
162
  /**
36
- * Adds the UIListProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
163
+ * @description Decorator that maps a model property to a UI component property
164
+ * @summary Specifies how a property should be passed to a UI component
165
+ * This decorator allows you to define how a model property should be mapped to
166
+ * a property of the UI component when rendering. It requires the class to be
167
+ * decorated with @uimodel.
168
+ *
169
+ * @param {string} [propName] The name of the property to pass to the component (defaults to the property key)
170
+ * @param {boolean} [stringify=false] Whether to stringify the property value
171
+ * @return {Function} A property decorator function
172
+ *
173
+ * @function uiprop
174
+ * @category Property Decorators
175
+ *
176
+ * @example
177
+ * // Map model properties to component properties
178
+ * @uimodel('user-profile')
179
+ * class UserProfile {
180
+ * @attribute()
181
+ * @uiprop() // Will be passed as 'fullName' to the component
182
+ * fullName: string;
183
+ *
184
+ * @attribute()
185
+ * @uiprop('userEmail') // Will be passed as 'userEmail' to the component
186
+ * email: string;
187
+ *
188
+ * @attribute()
189
+ * @uiprop('userData', true) // Will be passed as stringified JSON
190
+ * userData: Record<string, any>;
191
+ * }
192
+ *
193
+ * @mermaid
194
+ * sequenceDiagram
195
+ * participant Model
196
+ * participant uiprop
197
+ * participant RenderingEngine
198
+ * participant Component
199
+ * Model->>uiprop: Apply to property
200
+ * uiprop->>Model: Add prop metadata
201
+ * RenderingEngine->>Model: Get prop metadata
202
+ * Model->>RenderingEngine: Return prop name and stringify flag
203
+ * RenderingEngine->>Component: Pass property with specified name
204
+ */
205
+ export declare function uichild(propName?: string | undefined, stringify?: boolean, tag?: string): (target: any, propertyKey: string) => void;
206
+ /**
207
+ * @description Decorator that maps a model property to a list item component
208
+ * @summary Specifies how a property should be rendered in a list context
209
+ * This decorator allows you to define how a model property containing a list
210
+ * should be rendered. It requires the class to be decorated with @uilistitem.
211
+ *
212
+ * @param {string} [propName] The name of the property to pass to the list component (defaults to the property key)
213
+ * @param {Record<string, any>} [props] Additional properties to pass to the list container
214
+ * @return {Function} A property decorator function
215
+ *
216
+ * @function uilistprop
217
+ * @category Property Decorators
218
+ *
219
+ * @example
220
+ * // Define a list property with custom rendering
221
+ * @uimodel('todo-list')
222
+ * class TodoList {
223
+ * @attribute()
224
+ * title: string;
37
225
  *
38
- * this requires a '@uilistitem' with a defined tag
226
+ * @attribute()
227
+ * @uilistprop('items', { class: 'todo-items-container' })
228
+ * items: TodoItem[];
229
+ * }
39
230
  *
40
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
231
+ * @uilistitem('li', { class: 'todo-item' })
232
+ * class TodoItem extends Model {
233
+ * @attribute()
234
+ * text: string;
41
235
  *
42
- * @decorator uiprop
236
+ * @attribute()
237
+ * completed: boolean;
238
+ * }
43
239
  *
44
- * @category Decorators
45
- * @subcategory ui-decorators
240
+ * @mermaid
241
+ * sequenceDiagram
242
+ * participant Model
243
+ * participant uilistprop
244
+ * participant RenderingEngine
245
+ * participant ListContainer
246
+ * participant ListItems
247
+ * Model->>uilistprop: Apply to property
248
+ * uilistprop->>Model: Add list prop metadata
249
+ * RenderingEngine->>Model: Get list prop metadata
250
+ * Model->>RenderingEngine: Return prop name and container props
251
+ * RenderingEngine->>ListContainer: Create container with props
252
+ * RenderingEngine->>ListItems: Render each item using @uilistitem
253
+ * ListContainer->>RenderingEngine: Return rendered list
46
254
  */
47
255
  export declare function uilistprop(propName?: string | undefined, props?: Record<string, any>): (target: any, propertyKey: string) => void;