@decaf-ts/ui-decorators 0.5.9 → 0.5.10

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 (58) hide show
  1. package/README.md +422 -12
  2. package/dist/ui-decorators.cjs +497 -51
  3. package/dist/ui-decorators.esm.cjs +497 -51
  4. package/lib/esm/index.d.ts +7 -3
  5. package/lib/esm/index.js +8 -4
  6. package/lib/esm/model/Renderable.d.ts +15 -0
  7. package/lib/esm/model/Renderable.js +1 -1
  8. package/lib/esm/model/decorators.d.ts +92 -14
  9. package/lib/esm/model/decorators.js +94 -16
  10. package/lib/esm/model/index.d.ts +0 -4
  11. package/lib/esm/model/index.js +1 -5
  12. package/lib/esm/model/model.d.ts +156 -50
  13. package/lib/esm/model/model.js +1 -1
  14. package/lib/esm/model/overrides.d.ts +8 -0
  15. package/lib/esm/model/overrides.js +19 -1
  16. package/lib/esm/ui/Rendering.js +15 -4
  17. package/lib/esm/ui/constants.d.ts +147 -4
  18. package/lib/esm/ui/constants.js +148 -5
  19. package/lib/esm/ui/decorators.d.ts +185 -21
  20. package/lib/esm/ui/decorators.js +189 -25
  21. package/lib/esm/ui/errors.d.ts +28 -0
  22. package/lib/esm/ui/errors.js +29 -1
  23. package/lib/esm/ui/index.d.ts +0 -4
  24. package/lib/esm/ui/index.js +1 -5
  25. package/lib/esm/ui/interfaces.d.ts +25 -0
  26. package/lib/esm/ui/interfaces.js +9 -1
  27. package/lib/esm/ui/types.d.ts +63 -5
  28. package/lib/esm/ui/types.js +9 -1
  29. package/lib/esm/ui/utils.d.ts +1 -1
  30. package/lib/esm/ui/utils.js +2 -2
  31. package/lib/index.cjs +8 -4
  32. package/lib/index.d.ts +7 -3
  33. package/lib/model/Renderable.cjs +1 -1
  34. package/lib/model/Renderable.d.ts +15 -0
  35. package/lib/model/decorators.cjs +94 -16
  36. package/lib/model/decorators.d.ts +92 -14
  37. package/lib/model/index.cjs +1 -5
  38. package/lib/model/index.d.ts +0 -4
  39. package/lib/model/model.cjs +1 -1
  40. package/lib/model/model.d.ts +156 -50
  41. package/lib/model/overrides.cjs +19 -1
  42. package/lib/model/overrides.d.ts +8 -0
  43. package/lib/ui/Rendering.cjs +15 -4
  44. package/lib/ui/constants.cjs +148 -5
  45. package/lib/ui/constants.d.ts +147 -4
  46. package/lib/ui/decorators.cjs +189 -25
  47. package/lib/ui/decorators.d.ts +185 -21
  48. package/lib/ui/errors.cjs +29 -1
  49. package/lib/ui/errors.d.ts +28 -0
  50. package/lib/ui/index.cjs +1 -5
  51. package/lib/ui/index.d.ts +0 -4
  52. package/lib/ui/interfaces.cjs +9 -1
  53. package/lib/ui/interfaces.d.ts +25 -0
  54. package/lib/ui/types.cjs +9 -1
  55. package/lib/ui/types.d.ts +63 -5
  56. package/lib/ui/utils.cjs +2 -2
  57. package/lib/ui/utils.d.ts +1 -1
  58. package/package.json +1 -1
@@ -11,50 +11,177 @@ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
11
11
  const Rendering_1 = require("./Rendering.cjs");
12
12
  const db_decorators_1 = require("@decaf-ts/db-decorators");
13
13
  /**
14
- * @namespace ui-decorators.ui.decorators
15
- * @memberOf ui-decorators.ui
14
+ * @description Decorator that hides a property during specific CRUD operations
15
+ * @summary Controls property visibility based on operation type
16
+ * This decorator allows you to specify which CRUD operations should hide a property
17
+ * in the UI. The property will only be visible during operations not specified.
18
+ *
19
+ * @param operations - The CRUD operations during which the property should be hidden
20
+ * @return {Function} A property decorator function
21
+ *
22
+ * @function hideOn
23
+ * @category Property Decorators
24
+ *
25
+ * @example
26
+ * // Hide the password field during READ operations
27
+ * class User {
28
+ * @attribute()
29
+ * username: string;
30
+ *
31
+ * @attribute()
32
+ * @hideOn(OperationKeys.READ)
33
+ * password: string;
34
+ * }
35
+ *
36
+ * @mermaid
37
+ * sequenceDiagram
38
+ * participant Model
39
+ * participant hideOn
40
+ * participant RenderingEngine
41
+ * participant UI
42
+ * Model->>hideOn: Apply to property
43
+ * hideOn->>Model: Add hidden metadata
44
+ * RenderingEngine->>Model: Check if property should be hidden
45
+ * Model->>RenderingEngine: Return hidden operations
46
+ * RenderingEngine->>UI: Render or hide based on current operation
16
47
  */
17
48
  function hideOn(...operations) {
18
49
  return (0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.HIDDEN), operations);
19
50
  }
51
+ /**
52
+ * @description Decorator that completely hides a property in all UI operations
53
+ * @summary Makes a property invisible in all CRUD operations
54
+ * This decorator is a convenience wrapper around hideOn that hides a property
55
+ * during all CRUD operations (CREATE, READ, UPDATE, DELETE).
56
+ *
57
+ * @return {Function} A property decorator function
58
+ *
59
+ * @function hidden
60
+ * @category Property Decorators
61
+ *
62
+ * @example
63
+ * // Completely hide the internalId field in the UI
64
+ * class Product {
65
+ * @attribute()
66
+ * name: string;
67
+ *
68
+ * @attribute()
69
+ * @hidden()
70
+ * internalId: string;
71
+ * }
72
+ *
73
+ * @mermaid
74
+ * sequenceDiagram
75
+ * participant Model
76
+ * participant hidden
77
+ * participant hideOn
78
+ * participant RenderingEngine
79
+ * Model->>hidden: Apply to property
80
+ * hidden->>hideOn: Call with all operations
81
+ * hideOn->>Model: Add hidden metadata
82
+ * RenderingEngine->>Model: Check if property should be hidden
83
+ * Model->>RenderingEngine: Return all operations
84
+ * RenderingEngine->>UI: Always hide property
85
+ */
20
86
  function hidden() {
21
87
  return hideOn(db_decorators_1.OperationKeys.CREATE, db_decorators_1.OperationKeys.READ, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.DELETE);
22
88
  }
23
89
  /**
24
- * Adds the UIElement definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
90
+ * @description Decorator that specifies how a property should be rendered as a UI element
91
+ * @summary Maps a model property to a specific UI element with custom properties
92
+ * This decorator allows you to define which HTML element or component should be used
93
+ * to render a specific property, along with any additional properties to pass to that element.
94
+ *
95
+ * @param {string} tag The HTML element or component tag name to use for rendering
96
+ * @param {Record<string, any>} [props] Additional properties to pass to the element
97
+ * @param {boolean} [serialize=false] Whether the property should be serialized
98
+ * @return {Function} A property decorator function
99
+ *
100
+ * @function uielement
101
+ * @category Property Decorators
102
+ *
103
+ * @example
104
+ * // Render a property as a text input
105
+ * class LoginForm {
106
+ * @attribute()
107
+ * @uielement('input', { type: 'text', placeholder: 'Enter username' })
108
+ * username: string;
25
109
  *
26
- * @param {string} tag The component/HTML element tag name
27
- * @param {{}} [props] The properties to pass to that component/HTML Element
28
- * @param serialize
110
+ * @attribute()
111
+ * @uielement('input', { type: 'password', placeholder: 'Enter password' })
112
+ * password: string;
29
113
  *
30
- * @decorator uielement
114
+ * @attribute()
115
+ * @uielement('button', { class: 'btn-primary' })
116
+ * submit: string = 'Login';
117
+ * }
31
118
  *
32
- * @category Decorators
33
- * @subcategory ui-decorators
119
+ * @mermaid
120
+ * sequenceDiagram
121
+ * participant Model
122
+ * participant uielement
123
+ * participant RenderingEngine
124
+ * participant UI
125
+ * Model->>uielement: Apply to property
126
+ * uielement->>Model: Add element metadata
127
+ * RenderingEngine->>Model: Get element metadata
128
+ * Model->>RenderingEngine: Return tag and props
129
+ * RenderingEngine->>UI: Render with specified element
34
130
  */
35
131
  function uielement(tag, props, serialize = false) {
36
132
  return (original, propertyKey) => {
37
133
  const metadata = {
38
134
  tag: tag,
39
135
  serialize: serialize,
40
- props: Object.assign({
136
+ props: Object.assign({}, props || {}, {
41
137
  name: propertyKey,
42
- }, props || {}),
138
+ }),
43
139
  };
44
140
  return (0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.ELEMENT), metadata)(original, propertyKey);
45
141
  };
46
142
  }
47
143
  /**
48
- * Adds the UIProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
144
+ * @description Decorator that maps a model property to a UI component property
145
+ * @summary Specifies how a property should be passed to a UI component
146
+ * This decorator allows you to define how a model property should be mapped to
147
+ * a property of the UI component when rendering. It requires the class to be
148
+ * decorated with @uimodel.
49
149
  *
50
- * this requires a '@uimodel' with a defined tag
150
+ * @param {string} [propName] The name of the property to pass to the component (defaults to the property key)
151
+ * @param {boolean} [stringify=false] Whether to stringify the property value
152
+ * @return {Function} A property decorator function
51
153
  *
52
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
154
+ * @function uiprop
155
+ * @category Property Decorators
53
156
  *
54
- * @decorator uiprop
157
+ * @example
158
+ * // Map model properties to component properties
159
+ * @uimodel('user-profile')
160
+ * class UserProfile {
161
+ * @attribute()
162
+ * @uiprop() // Will be passed as 'fullName' to the component
163
+ * fullName: string;
55
164
  *
56
- * @category Decorators
57
- * @subcategory ui-decorators
165
+ * @attribute()
166
+ * @uiprop('userEmail') // Will be passed as 'userEmail' to the component
167
+ * email: string;
168
+ *
169
+ * @attribute()
170
+ * @uiprop('userData', true) // Will be passed as stringified JSON
171
+ * userData: Record<string, any>;
172
+ * }
173
+ *
174
+ * @mermaid
175
+ * sequenceDiagram
176
+ * participant Model
177
+ * participant uiprop
178
+ * participant RenderingEngine
179
+ * participant Component
180
+ * Model->>uiprop: Apply to property
181
+ * uiprop->>Model: Add prop metadata
182
+ * RenderingEngine->>Model: Get prop metadata
183
+ * Model->>RenderingEngine: Return prop name and stringify flag
184
+ * RenderingEngine->>Component: Pass property with specified name
58
185
  */
59
186
  function uiprop(propName = undefined, stringify = false) {
60
187
  return (target, propertyKey) => {
@@ -66,24 +193,61 @@ function uiprop(propName = undefined, stringify = false) {
66
193
  };
67
194
  }
68
195
  /**
69
- * Adds the UIListProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
196
+ * @description Decorator that maps a model property to a list item component
197
+ * @summary Specifies how a property should be rendered in a list context
198
+ * This decorator allows you to define how a model property containing a list
199
+ * should be rendered. It requires the class to be decorated with @uilistitem.
200
+ *
201
+ * @param {string} [propName] The name of the property to pass to the list component (defaults to the property key)
202
+ * @param {Record<string, any>} [props] Additional properties to pass to the list container
203
+ * @return {Function} A property decorator function
204
+ *
205
+ * @function uilistprop
206
+ * @category Property Decorators
207
+ *
208
+ * @example
209
+ * // Define a list property with custom rendering
210
+ * @uimodel('todo-list')
211
+ * class TodoList {
212
+ * @attribute()
213
+ * title: string;
70
214
  *
71
- * this requires a '@uilistitem' with a defined tag
215
+ * @attribute()
216
+ * @uilistprop('items', { class: 'todo-items-container' })
217
+ * items: TodoItem[];
218
+ * }
72
219
  *
73
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
220
+ * @uilistitem('li', { class: 'todo-item' })
221
+ * class TodoItem extends Model {
222
+ * @attribute()
223
+ * text: string;
74
224
  *
75
- * @decorator uiprop
225
+ * @attribute()
226
+ * completed: boolean;
227
+ * }
76
228
  *
77
- * @category Decorators
78
- * @subcategory ui-decorators
229
+ * @mermaid
230
+ * sequenceDiagram
231
+ * participant Model
232
+ * participant uilistprop
233
+ * participant RenderingEngine
234
+ * participant ListContainer
235
+ * participant ListItems
236
+ * Model->>uilistprop: Apply to property
237
+ * uilistprop->>Model: Add list prop metadata
238
+ * RenderingEngine->>Model: Get list prop metadata
239
+ * Model->>RenderingEngine: Return prop name and container props
240
+ * RenderingEngine->>ListContainer: Create container with props
241
+ * RenderingEngine->>ListItems: Render each item using @uilistitem
242
+ * ListContainer->>RenderingEngine: Return rendered list
79
243
  */
80
244
  function uilistprop(propName = undefined, props) {
81
245
  return (target, propertyKey) => {
82
246
  const metadata = {
83
247
  name: propName || propertyKey,
84
- props: props || {}
248
+ props: props || {},
85
249
  };
86
250
  (0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.UILISTPROP), metadata)(target, propertyKey);
87
251
  };
88
252
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsd0JBS0M7QUFFRCx3QkFPQztBQWNELDhCQXNCQztBQWNELHdCQWNDO0FBZUQsZ0NBY0M7QUF2SEQsNEJBQTBCO0FBQzFCLCtDQUFxQztBQUNyQyx5RUFBOEQ7QUFFOUQsK0NBQThDO0FBQzlDLDJEQUF3RDtBQUV4RDs7O0dBR0c7QUFFSCxTQUFnQixNQUFNLENBQUMsR0FBRyxVQUErQjtJQUN2RCxPQUFPLElBQUEsbUNBQVksRUFDakIsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFDbEMsVUFBVSxDQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsTUFBTTtJQUNwQixPQUFPLE1BQU0sQ0FDWCw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLDZCQUFhLENBQUMsTUFBTSxFQUNwQiw2QkFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsR0FBVyxFQUNYLEtBQTJCLEVBQzNCLFlBQXFCLEtBQUs7SUFFMUIsT0FBTyxDQUFDLFFBQWEsRUFBRSxXQUFpQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQXNCO1lBQ2xDLEdBQUcsRUFBRSxHQUFHO1lBQ1IsU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQ2xCO2dCQUNFLElBQUksRUFBRSxXQUFXO2FBQ2xCLEVBQ0QsS0FBSyxJQUFJLEVBQUUsQ0FDWjtTQUNGLENBQUM7UUFFRixPQUFPLElBQUEsbUNBQVksRUFBQywyQkFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUNoRSxRQUFRLEVBQ1IsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLFdBQStCLFNBQVMsRUFDeEMsWUFBcUIsS0FBSztJQUUxQixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBbUI7WUFDL0IsSUFBSSxFQUFFLFFBQVEsSUFBSSxXQUFXO1lBQzdCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDdEQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLEtBQTJCO0lBRTNCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sUUFBUSxHQUFnQztZQUM5QyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVc7WUFDN0IsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDNUQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbktleXMsIFVJRWxlbWVudE1ldGFkYXRhLCBVSUxpc3RQcm9wTWV0YWRhdGEsIFVJUHJvcE1ldGFkYXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gXCIuL1JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlT24oLi4ub3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPENydWRPcGVyYXRpb25LZXlzW10+KFxuICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhJRERFTiksXG4gICAgb3BlcmF0aW9uc1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZGVuKCkge1xuICByZXR1cm4gaGlkZU9uKFxuICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICBPcGVyYXRpb25LZXlzLkRFTEVURVxuICApO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIFVJRWxlbWVudCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGNvbXBvbmVudC9IVE1MIGVsZW1lbnQgdGFnIG5hbWVcbiAqIEBwYXJhbSB7e319IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgdG8gcGFzcyB0byB0aGF0IGNvbXBvbmVudC9IVE1MIEVsZW1lbnRcbiAqIEBwYXJhbSBzZXJpYWxpemVcbiAqXG4gKiBAZGVjb3JhdG9yIHVpZWxlbWVudFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKiBAc3ViY2F0ZWdvcnkgdWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWllbGVtZW50KFxuICB0YWc6IHN0cmluZyxcbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBzZXJpYWxpemU6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gICAgICB0YWc6IHRhZyxcbiAgICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHMgfHwge31cbiAgICAgICksXG4gICAgfTtcblxuICAgIHJldHVybiBwcm9wTWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuRUxFTUVOVCksIG1ldGFkYXRhKShcbiAgICAgIG9yaWdpbmFsLFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIFVJUHJvcCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIHRoaXMgcmVxdWlyZXMgYSAnQHVpbW9kZWwnIHdpdGggYSBkZWZpbmVkIHRhZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gZGVmYXVsdHMgdG8gdGhlIFByb3BlcnR5S2V5XG4gKlxuICogQGRlY29yYXRvciB1aXByb3BcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG5cbi8qKlxuICogQWRkcyB0aGUgVUlMaXN0UHJvcCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIHRoaXMgcmVxdWlyZXMgYSAnQHVpbGlzdGl0ZW0nIHdpdGggYSBkZWZpbmVkIHRhZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gZGVmYXVsdHMgdG8gdGhlIFByb3BlcnR5S2V5XG4gKlxuICogQGRlY29yYXRvciB1aXByb3BcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbGlzdHByb3AoXG4gIHByb3BOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxVSUxpc3RQcm9wTWV0YWRhdGE+ID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBwcm9wczogcHJvcHMgfHwge31cbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSUxJU1RQUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuIl19
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0NBLHdCQUtDO0FBcUNELHdCQU9DO0FBNENELDhCQW1CQztBQTZDRCx3QkFjQztBQW1ERCxnQ0FjQztBQTNSRCw0QkFBMEI7QUFDMUIsK0NBQXFDO0FBQ3JDLHlFQUE4RDtBQU85RCwrQ0FBOEM7QUFDOUMsMkRBQXdEO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsVUFBK0I7SUFDdkQsT0FBTyxJQUFBLG1DQUFZLEVBQ2pCLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2xDLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsU0FBZ0IsTUFBTTtJQUNwQixPQUFPLE1BQU0sQ0FDWCw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLDZCQUFhLENBQUMsTUFBTSxFQUNwQiw2QkFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEdBQVcsRUFDWCxLQUEyQixFQUMzQixZQUFxQixLQUFLO0lBRTFCLE9BQU8sQ0FBQyxRQUFhLEVBQUUsV0FBaUIsRUFBRSxFQUFFO1FBQzFDLE1BQU0sUUFBUSxHQUFzQjtZQUNsQyxHQUFHLEVBQUUsR0FBRztZQUNSLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDO1NBQ0gsQ0FBQztRQUVGLE9BQU8sSUFBQSxtQ0FBWSxFQUFDLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ2hFLFFBQVEsRUFDUixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsU0FBZ0IsTUFBTSxDQUNwQixXQUErQixTQUFTLEVBQ3hDLFlBQXFCLEtBQUs7SUFFMUIsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQW1CO1lBQy9CLElBQUksRUFBRSxRQUFRLElBQUksV0FBVztZQUM3QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBQSxtQ0FBWSxFQUFDLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ3RELE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0RHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLEtBQTJCO0lBRTNCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxFQUFFO1FBQzFDLE1BQU0sUUFBUSxHQUFnQztZQUM1QyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVc7WUFDN0IsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDNUQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQ3J1ZE9wZXJhdGlvbktleXMsXG4gIFVJRWxlbWVudE1ldGFkYXRhLFxuICBVSUxpc3RQcm9wTWV0YWRhdGEsXG4gIFVJUHJvcE1ldGFkYXRhLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSBcIi4vUmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IGhpZGVzIGEgcHJvcGVydHkgZHVyaW5nIHNwZWNpZmljIENSVUQgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgQ29udHJvbHMgcHJvcGVydHkgdmlzaWJpbGl0eSBiYXNlZCBvbiBvcGVyYXRpb24gdHlwZVxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIENSVUQgb3BlcmF0aW9ucyBzaG91bGQgaGlkZSBhIHByb3BlcnR5XG4gKiBpbiB0aGUgVUkuIFRoZSBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgdmlzaWJsZSBkdXJpbmcgb3BlcmF0aW9ucyBub3Qgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gVGhlIENSVUQgb3BlcmF0aW9ucyBkdXJpbmcgd2hpY2ggdGhlIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRlT25cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhpZGUgdGhlIHBhc3N3b3JkIGZpZWxkIGR1cmluZyBSRUFEIG9wZXJhdGlvbnNcbiAqIGNsYXNzIFVzZXIge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgdXNlcm5hbWU6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAaGlkZU9uKE9wZXJhdGlvbktleXMuUkVBRClcbiAqICAgcGFzc3dvcmQ6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGhpZGVPblxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgVUlcbiAqICAgTW9kZWwtPj5oaWRlT246IEFwcGx5IHRvIHByb3BlcnR5XG4gKiAgIGhpZGVPbi0+Pk1vZGVsOiBBZGQgaGlkZGVuIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBDaGVjayBpZiBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gaGlkZGVuIG9wZXJhdGlvbnNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+VUk6IFJlbmRlciBvciBoaWRlIGJhc2VkIG9uIGN1cnJlbnQgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlT24oLi4ub3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPENydWRPcGVyYXRpb25LZXlzW10+KFxuICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhJRERFTiksXG4gICAgb3BlcmF0aW9uc1xuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBjb21wbGV0ZWx5IGhpZGVzIGEgcHJvcGVydHkgaW4gYWxsIFVJIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IE1ha2VzIGEgcHJvcGVydHkgaW52aXNpYmxlIGluIGFsbCBDUlVEIG9wZXJhdGlvbnNcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgaGlkZU9uIHRoYXQgaGlkZXMgYSBwcm9wZXJ0eVxuICogZHVyaW5nIGFsbCBDUlVEIG9wZXJhdGlvbnMgKENSRUFURSwgUkVBRCwgVVBEQVRFLCBERUxFVEUpLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRkZW5cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbXBsZXRlbHkgaGlkZSB0aGUgaW50ZXJuYWxJZCBmaWVsZCBpbiB0aGUgVUlcbiAqIGNsYXNzIFByb2R1Y3Qge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEBoaWRkZW4oKVxuICogICBpbnRlcm5hbElkOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBoaWRkZW5cbiAqICAgcGFydGljaXBhbnQgaGlkZU9uXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBNb2RlbC0+PmhpZGRlbjogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgaGlkZGVuLT4+aGlkZU9uOiBDYWxsIHdpdGggYWxsIG9wZXJhdGlvbnNcbiAqICAgaGlkZU9uLT4+TW9kZWw6IEFkZCBoaWRkZW4gbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IENoZWNrIGlmIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBhbGwgb3BlcmF0aW9uc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogQWx3YXlzIGhpZGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGRlbigpIHtcbiAgcmV0dXJuIGhpZGVPbihcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5ERUxFVEVcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc3BlY2lmaWVzIGhvdyBhIHByb3BlcnR5IHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIFVJIGVsZW1lbnRcbiAqIEBzdW1tYXJ5IE1hcHMgYSBtb2RlbCBwcm9wZXJ0eSB0byBhIHNwZWNpZmljIFVJIGVsZW1lbnQgd2l0aCBjdXN0b20gcHJvcGVydGllc1xuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hpY2ggSFRNTCBlbGVtZW50IG9yIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZFxuICogdG8gcmVuZGVyIGEgc3BlY2lmaWMgcHJvcGVydHksIGFsb25nIHdpdGggYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoYXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIHVzZSBmb3IgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwcm9wc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlcmlhbGl6ZT1mYWxzZV0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHNlcmlhbGl6ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWVsZW1lbnRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlbmRlciBhIHByb3BlcnR5IGFzIGEgdGV4dCBpbnB1dFxuICogY2xhc3MgTG9naW5Gb3JtIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWVsZW1lbnQoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgdXNlcm5hbWUnIH0pXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnaW5wdXQnLCB7IHR5cGU6ICdwYXNzd29yZCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgcGFzc3dvcmQnIH0pXG4gKiAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnYnV0dG9uJywgeyBjbGFzczogJ2J0bi1wcmltYXJ5JyB9KVxuICogICBzdWJtaXQ6IHN0cmluZyA9ICdMb2dpbic7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWVsZW1lbnRcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IFVJXG4gKiAgIE1vZGVsLT4+dWllbGVtZW50OiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWVsZW1lbnQtPj5Nb2RlbDogQWRkIGVsZW1lbnQgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBlbGVtZW50IG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gdGFnIGFuZCBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogUmVuZGVyIHdpdGggc3BlY2lmaWVkIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpZWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2VyaWFsaXplOiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJRWxlbWVudE1ldGFkYXRhID0ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcyB8fCB7fSwge1xuICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkVMRU1FTlQpLCBtZXRhZGF0YSkoXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFwcyBhIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHBhc3NlZCB0byBhIFVJIGNvbXBvbmVudFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgaG93IGEgbW9kZWwgcHJvcGVydHkgc2hvdWxkIGJlIG1hcHBlZCB0b1xuICogYSBwcm9wZXJ0eSBvZiB0aGUgVUkgY29tcG9uZW50IHdoZW4gcmVuZGVyaW5nLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmVcbiAqIGRlY29yYXRlZCB3aXRoIEB1aW1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBwYXNzIHRvIHRoZSBjb21wb25lbnQgKGRlZmF1bHRzIHRvIHRoZSBwcm9wZXJ0eSBrZXkpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpbmdpZnk9ZmFsc2VdIFdoZXRoZXIgdG8gc3RyaW5naWZ5IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpcHJvcFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWFwIG1vZGVsIHByb3BlcnRpZXMgdG8gY29tcG9uZW50IHByb3BlcnRpZXNcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpcHJvcCgpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICdmdWxsTmFtZScgdG8gdGhlIGNvbXBvbmVudFxuICogICBmdWxsTmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aXByb3AoJ3VzZXJFbWFpbCcpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICd1c2VyRW1haWwnIHRvIHRoZSBjb21wb25lbnRcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlwcm9wKCd1c2VyRGF0YScsIHRydWUpIC8vIFdpbGwgYmUgcGFzc2VkIGFzIHN0cmluZ2lmaWVkIEpTT05cbiAqICAgdXNlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aXByb3BcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudFxuICogICBNb2RlbC0+PnVpcHJvcDogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgdWlwcm9wLT4+TW9kZWw6IEFkZCBwcm9wIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgcHJvcCBtZXRhZGF0YVxuICogICBNb2RlbC0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHByb3AgbmFtZSBhbmQgc3RyaW5naWZ5IGZsYWdcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+Q29tcG9uZW50OiBQYXNzIHByb3BlcnR5IHdpdGggc3BlY2lmaWVkIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbW9kZWwgcHJvcGVydHkgdG8gYSBsaXN0IGl0ZW0gY29tcG9uZW50XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgbGlzdCBjb250ZXh0XG4gKiBUaGlzIGRlY29yYXRvciBhbGxvd3MgeW91IHRvIGRlZmluZSBob3cgYSBtb2RlbCBwcm9wZXJ0eSBjb250YWluaW5nIGEgbGlzdFxuICogc2hvdWxkIGJlIHJlbmRlcmVkLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmUgZGVjb3JhdGVkIHdpdGggQHVpbGlzdGl0ZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wTmFtZV0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHBhc3MgdG8gdGhlIGxpc3QgY29tcG9uZW50IChkZWZhdWx0cyB0byB0aGUgcHJvcGVydHkga2V5KVxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBsaXN0IGNvbnRhaW5lclxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpbGlzdHByb3BcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhIGxpc3QgcHJvcGVydHkgd2l0aCBjdXN0b20gcmVuZGVyaW5nXG4gKiBAdWltb2RlbCgndG9kby1saXN0JylcbiAqIGNsYXNzIFRvZG9MaXN0IHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGlzdHByb3AoJ2l0ZW1zJywgeyBjbGFzczogJ3RvZG8taXRlbXMtY29udGFpbmVyJyB9KVxuICogICBpdGVtczogVG9kb0l0ZW1bXTtcbiAqIH1cbiAqXG4gKiBAdWlsaXN0aXRlbSgnbGknLCB7IGNsYXNzOiAndG9kby1pdGVtJyB9KVxuICogY2xhc3MgVG9kb0l0ZW0gZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB0ZXh0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY29tcGxldGVkOiBib29sZWFuO1xuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgdWlsaXN0cHJvcFxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGlzdENvbnRhaW5lclxuICogICBwYXJ0aWNpcGFudCBMaXN0SXRlbXNcbiAqICAgTW9kZWwtPj51aWxpc3Rwcm9wOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxpc3Rwcm9wLT4+TW9kZWw6IEFkZCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBwcm9wIG5hbWUgYW5kIGNvbnRhaW5lciBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5MaXN0Q29udGFpbmVyOiBDcmVhdGUgY29udGFpbmVyIHdpdGggcHJvcHNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TGlzdEl0ZW1zOiBSZW5kZXIgZWFjaCBpdGVtIHVzaW5nIEB1aWxpc3RpdGVtXG4gKiAgIExpc3RDb250YWluZXItPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiByZW5kZXJlZCBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aWxpc3Rwcm9wKFxuICBwcm9wTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VUlMaXN0UHJvcE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IHByb3BOYW1lIHx8IHByb3BlcnR5S2V5LFxuICAgICAgcHJvcHM6IHByb3BzIHx8IHt9LFxuICAgIH07XG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTElTVFBST1ApLCBtZXRhZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG4gIH07XG59XG4iXX0=
@@ -1,47 +1,211 @@
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
88
+ *
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;
11
95
  *
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
96
+ * @attribute()
97
+ * @uielement('input', { type: 'password', placeholder: 'Enter password' })
98
+ * password: string;
15
99
  *
16
- * @decorator uielement
100
+ * @attribute()
101
+ * @uielement('button', { class: 'btn-primary' })
102
+ * submit: string = 'Login';
103
+ * }
17
104
  *
18
- * @category Decorators
19
- * @subcategory ui-decorators
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.
24
124
  *
25
- * this requires a '@uimodel' with a defined tag
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
26
128
  *
27
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
129
+ * @function uiprop
130
+ * @category Property Decorators
28
131
  *
29
- * @decorator uiprop
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;
30
139
  *
31
- * @category Decorators
32
- * @subcategory ui-decorators
140
+ * @attribute()
141
+ * @uiprop('userEmail') // Will be passed as 'userEmail' to the component
142
+ * email: string;
143
+ *
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 list item component
164
+ * @summary Specifies how a property should be rendered in a list context
165
+ * This decorator allows you to define how a model property containing a list
166
+ * should be rendered. It requires the class to be decorated with @uilistitem.
167
+ *
168
+ * @param {string} [propName] The name of the property to pass to the list component (defaults to the property key)
169
+ * @param {Record<string, any>} [props] Additional properties to pass to the list container
170
+ * @return {Function} A property decorator function
171
+ *
172
+ * @function uilistprop
173
+ * @category Property Decorators
174
+ *
175
+ * @example
176
+ * // Define a list property with custom rendering
177
+ * @uimodel('todo-list')
178
+ * class TodoList {
179
+ * @attribute()
180
+ * title: string;
37
181
  *
38
- * this requires a '@uilistitem' with a defined tag
182
+ * @attribute()
183
+ * @uilistprop('items', { class: 'todo-items-container' })
184
+ * items: TodoItem[];
185
+ * }
39
186
  *
40
- * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
187
+ * @uilistitem('li', { class: 'todo-item' })
188
+ * class TodoItem extends Model {
189
+ * @attribute()
190
+ * text: string;
41
191
  *
42
- * @decorator uiprop
192
+ * @attribute()
193
+ * completed: boolean;
194
+ * }
43
195
  *
44
- * @category Decorators
45
- * @subcategory ui-decorators
196
+ * @mermaid
197
+ * sequenceDiagram
198
+ * participant Model
199
+ * participant uilistprop
200
+ * participant RenderingEngine
201
+ * participant ListContainer
202
+ * participant ListItems
203
+ * Model->>uilistprop: Apply to property
204
+ * uilistprop->>Model: Add list prop metadata
205
+ * RenderingEngine->>Model: Get list prop metadata
206
+ * Model->>RenderingEngine: Return prop name and container props
207
+ * RenderingEngine->>ListContainer: Create container with props
208
+ * RenderingEngine->>ListItems: Render each item using @uilistitem
209
+ * ListContainer->>RenderingEngine: Return rendered list
46
210
  */
47
211
  export declare function uilistprop(propName?: string | undefined, props?: Record<string, any>): (target: any, propertyKey: string) => void;
package/lib/ui/errors.cjs CHANGED
@@ -2,10 +2,38 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RenderingError = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ /**
6
+ * @description Error thrown when a rendering operation fails
7
+ * @summary Specialized error for rendering failures in UI components
8
+ * This error is thrown when the rendering engine encounters an error while
9
+ * attempting to render a UI component or model.
10
+ *
11
+ * @param {string|Error} msg The error message or original error
12
+ *
13
+ * @class RenderingError
14
+ * @extends BaseError
15
+ * @category Errors
16
+ *
17
+ * @example
18
+ * // Throwing a rendering error
19
+ * try {
20
+ * // Rendering code that might fail
21
+ * if (!component.canRender()) {
22
+ * throw new RenderingError('Component cannot be rendered');
23
+ * }
24
+ * } catch (error) {
25
+ * console.error('Rendering failed:', error.message);
26
+ * }
27
+ */
5
28
  class RenderingError extends db_decorators_1.BaseError {
29
+ /**
30
+ * @description Creates a new RenderingError instance
31
+ * @summary Initializes the error with a message or original error
32
+ * @param {string|Error} msg The error message or original error
33
+ */
6
34
  constructor(msg) {
7
35
  super(RenderingError.name, msg);
8
36
  }
9
37
  }
10
38
  exports.RenderingError = RenderingError;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQsTUFBYSxjQUFlLFNBQVEseUJBQVM7SUFDM0MsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFKRCx3Q0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyaW5nRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZyB8IEVycm9yKSB7XG4gICAgc3VwZXIoUmVuZGVyaW5nRXJyb3IubmFtZSwgbXNnKTtcbiAgfVxufVxuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFhLGNBQWUsU0FBUSx5QkFBUztJQUMzQzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFURCx3Q0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gd2hlbiBhIHJlbmRlcmluZyBvcGVyYXRpb24gZmFpbHNcbiAqIEBzdW1tYXJ5IFNwZWNpYWxpemVkIGVycm9yIGZvciByZW5kZXJpbmcgZmFpbHVyZXMgaW4gVUkgY29tcG9uZW50c1xuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGUgcmVuZGVyaW5nIGVuZ2luZSBlbmNvdW50ZXJzIGFuIGVycm9yIHdoaWxlXG4gKiBhdHRlbXB0aW5nIHRvIHJlbmRlciBhIFVJIGNvbXBvbmVudCBvciBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gbXNnIFRoZSBlcnJvciBtZXNzYWdlIG9yIG9yaWdpbmFsIGVycm9yXG4gKlxuICogQGNsYXNzIFJlbmRlcmluZ0Vycm9yXG4gKiBAZXh0ZW5kcyBCYXNlRXJyb3JcbiAqIEBjYXRlZ29yeSBFcnJvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhyb3dpbmcgYSByZW5kZXJpbmcgZXJyb3JcbiAqIHRyeSB7XG4gKiAgIC8vIFJlbmRlcmluZyBjb2RlIHRoYXQgbWlnaHQgZmFpbFxuICogICBpZiAoIWNvbXBvbmVudC5jYW5SZW5kZXIoKSkge1xuICogICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcignQ29tcG9uZW50IGNhbm5vdCBiZSByZW5kZXJlZCcpO1xuICogICB9XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKCdSZW5kZXJpbmcgZmFpbGVkOicsIGVycm9yLm1lc3NhZ2UpO1xuICogfVxuICovXG5leHBvcnQgY2xhc3MgUmVuZGVyaW5nRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgUmVuZGVyaW5nRXJyb3IgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGVycm9yIHdpdGggYSBtZXNzYWdlIG9yIG9yaWdpbmFsIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfEVycm9yfSBtc2cgVGhlIGVycm9yIG1lc3NhZ2Ugb3Igb3JpZ2luYWwgZXJyb3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihSZW5kZXJpbmdFcnJvci5uYW1lLCBtc2cpO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,32 @@
1
1
  import { BaseError } from "@decaf-ts/db-decorators";
2
+ /**
3
+ * @description Error thrown when a rendering operation fails
4
+ * @summary Specialized error for rendering failures in UI components
5
+ * This error is thrown when the rendering engine encounters an error while
6
+ * attempting to render a UI component or model.
7
+ *
8
+ * @param {string|Error} msg The error message or original error
9
+ *
10
+ * @class RenderingError
11
+ * @extends BaseError
12
+ * @category Errors
13
+ *
14
+ * @example
15
+ * // Throwing a rendering error
16
+ * try {
17
+ * // Rendering code that might fail
18
+ * if (!component.canRender()) {
19
+ * throw new RenderingError('Component cannot be rendered');
20
+ * }
21
+ * } catch (error) {
22
+ * console.error('Rendering failed:', error.message);
23
+ * }
24
+ */
2
25
  export declare class RenderingError extends BaseError {
26
+ /**
27
+ * @description Creates a new RenderingError instance
28
+ * @summary Initializes the error with a message or original error
29
+ * @param {string|Error} msg The error message or original error
30
+ */
3
31
  constructor(msg: string | Error);
4
32
  }
package/lib/ui/index.cjs CHANGED
@@ -1,8 +1,4 @@
1
1
  "use strict";
2
- /**
3
- * @namespace ui-decorators.ui
4
- * @memberOf ui-decorators
5
- */
6
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
3
  if (k2 === undefined) k2 = k;
8
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -25,4 +21,4 @@ __exportStar(require("./interfaces.cjs"), exports);
25
21
  __exportStar(require("./Rendering.cjs"), exports);
26
22
  __exportStar(require("./types.cjs"), exports);
27
23
  __exportStar(require("./utils.cjs"), exports);
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0IsK0NBQXlCO0FBQ3pCLG1EQUE2QjtBQUM3QixrREFBNEI7QUFDNUIsOENBQXdCO0FBQ3hCLDhDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG5hbWVzcGFjZSB1aS1kZWNvcmF0b3JzLnVpXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZW5kZXJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0IsK0NBQXlCO0FBQ3pCLG1EQUE2QjtBQUM3QixrREFBNEI7QUFDNUIsOENBQXdCO0FBQ3hCLDhDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZW5kZXJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
package/lib/ui/index.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- /**
2
- * @namespace ui-decorators.ui
3
- * @memberOf ui-decorators
4
- */
5
1
  export * from "./constants";
6
2
  export * from "./decorators";
7
3
  export * from "./errors";
@@ -1,3 +1,11 @@
1
1
  "use strict";
2
+ /**
3
+ * @description Interfaces for UI form components
4
+ * @summary Defines interfaces for form fields with CRUD operations
5
+ * This module contains interfaces that extend basic field properties with
6
+ * CRUD operation information for form generation.
7
+ * @module ui/interfaces
8
+ * @memberOf module:ui-decorators
9
+ */
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcnVkRm9ybUZpZWxkIGV4dGVuZHMgRmllbGRQcm9wZXJ0aWVzIHtcbiAgb3BlcmF0aW9uOiBDcnVkT3BlcmF0aW9ucztcbn1cbiJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlcyBmb3IgVUkgZm9ybSBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGludGVyZmFjZXMgZm9yIGZvcm0gZmllbGRzIHdpdGggQ1JVRCBvcGVyYXRpb25zXG4gKiBUaGlzIG1vZHVsZSBjb250YWlucyBpbnRlcmZhY2VzIHRoYXQgZXh0ZW5kIGJhc2ljIGZpZWxkIHByb3BlcnRpZXMgd2l0aFxuICogQ1JVRCBvcGVyYXRpb24gaW5mb3JtYXRpb24gZm9yIGZvcm0gZ2VuZXJhdGlvbi5cbiAqIEBtb2R1bGUgdWkvaW50ZXJmYWNlc1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IHsgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENydWRPcGVyYXRpb25zIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gZmllbGQgaW50ZXJmYWNlIHdpdGggQ1JVRCBvcGVyYXRpb24gaW5mb3JtYXRpb25cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgYmFzaWMgZmllbGQgcHJvcGVydGllcyB3aXRoIGEgc3BlY2lmaWMgQ1JVRCBvcGVyYXRpb25cbiAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBmb3JtIGZpZWxkIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWNcbiAqIENSVUQgb3BlcmF0aW9uIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlKS4gSXQgY29tYmluZXMgYWxsIHRoZSBzdGFuZGFyZFxuICogZmllbGQgcHJvcGVydGllcyB3aXRoIGFuIG9wZXJhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJmYWNlIENydWRGb3JtRmllbGRcbiAqIEBleHRlbmRzIEZpZWxkUHJvcGVydGllc1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKlxuICogQHByb3BlcnR5IHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZEZvcm1GaWVsZCBleHRlbmRzIEZpZWxkUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIENSVUQgb3BlcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBvcGVyYXRpb24gKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIHRoaXMgZmllbGQgaXMgZm9yXG4gICAqL1xuICBvcGVyYXRpb246IENydWRPcGVyYXRpb25zO1xufVxuIl19