@decaf-ts/ui-decorators 0.5.15 → 0.5.16
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.
- package/dist/ui-decorators.cjs +266 -22
- package/dist/ui-decorators.esm.cjs +265 -23
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/model/decorators.d.ts +113 -0
- package/lib/esm/model/decorators.js +117 -1
- package/lib/esm/ui/Rendering.d.ts +28 -0
- package/lib/esm/ui/Rendering.js +74 -13
- package/lib/esm/ui/constants.d.ts +2 -0
- package/lib/esm/ui/constants.js +3 -1
- package/lib/esm/ui/decorators.d.ts +50 -0
- package/lib/esm/ui/decorators.js +61 -1
- package/lib/esm/ui/types.d.ts +38 -1
- package/lib/esm/ui/types.js +1 -1
- package/lib/esm/ui/utils.js +13 -9
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/model/decorators.cjs +118 -1
- package/lib/model/decorators.d.ts +113 -0
- package/lib/ui/Rendering.cjs +74 -13
- package/lib/ui/Rendering.d.ts +28 -0
- package/lib/ui/constants.cjs +3 -1
- package/lib/ui/constants.d.ts +2 -0
- package/lib/ui/decorators.cjs +62 -1
- package/lib/ui/decorators.d.ts +50 -0
- package/lib/ui/types.cjs +1 -1
- package/lib/ui/types.d.ts +38 -1
- package/lib/ui/utils.cjs +13 -9
- package/package.json +1 -1
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -13,5 +13,5 @@ export * from "./ui/index.js";
|
|
|
13
13
|
* @const VERSION
|
|
14
14
|
* @memberOf module:ui-decorators
|
|
15
15
|
*/
|
|
16
|
-
export const VERSION = "0.5.
|
|
16
|
+
export const VERSION = "0.5.16";
|
|
17
17
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsaUNBQXdCO0FBQ3hCLDhCQUFxQjtBQUVyQjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBVSSBkZWNvcmF0b3JzIG1vZHVsZSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnNcbiAqIEBzdW1tYXJ5IEEgY29sbGVjdGlvbiBvZiBkZWNvcmF0b3JzIGFuZCB1dGlsaXRpZXMgZm9yIGJ1aWxkaW5nIFVJIGNvbXBvbmVudHMgaW4gVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnMuXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGZ1bmN0aW9uYWxpdHkgZnJvbSBib3RoIHRoZSBtb2RlbCBhbmQgVUkgc3VibW9kdWxlcywgcHJvdmlkaW5nIGRlY29yYXRvcnMgZm9yXG4gKiByZW5kZXJpbmcsIGNvbXBvbmVudCBkZWZpbml0aW9uLCBhbmQgVUkgc3RhdGUgbWFuYWdlbWVudC5cbiAqIEBtb2R1bGUgdWktZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91aVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHBhY2thZ2UgdmVyc2lvbiBzdHJpbmdcbiAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb24gZm9yIHJlZmVyZW5jZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UIMediaBreakPoints } from "../ui/types";
|
|
1
2
|
/**
|
|
2
3
|
* @description Decorator that tags a class as a UI model
|
|
3
4
|
* @summary Adds rendering capabilities to a model class by providing a render method
|
|
@@ -121,4 +122,116 @@ export declare function renderedBy(engine: string): (target: object, propertyKey
|
|
|
121
122
|
* RenderingEngine->>System: renders with list item styling
|
|
122
123
|
*/
|
|
123
124
|
export declare function uilistitem(tag?: string, props?: Record<string, any>): (original: any, propertyKey?: any) => void;
|
|
125
|
+
/**
|
|
126
|
+
* @description Decorator that adds event handlers to a UI model
|
|
127
|
+
* @summary Specifies event handlers that should be attached to the rendered model
|
|
128
|
+
* This decorator allows you to define event handlers that will be automatically
|
|
129
|
+
* attached to the rendered UI element. The handlers are passed as properties
|
|
130
|
+
* to the rendering engine.
|
|
131
|
+
*
|
|
132
|
+
* @param {Record<string, any>} [props] Object containing event handler functions and other properties
|
|
133
|
+
* @return {Function} A class decorator function
|
|
134
|
+
*
|
|
135
|
+
* @function uihandlers
|
|
136
|
+
* @category Class Decorators
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* // Add event handlers to a model
|
|
140
|
+
* @uimodel('button')
|
|
141
|
+
* @uihandlers({
|
|
142
|
+
* onClick: (event) => console.log('Button clicked'),
|
|
143
|
+
* onMouseOver: (event) => console.log('Mouse over button'),
|
|
144
|
+
* disabled: false
|
|
145
|
+
* })
|
|
146
|
+
* class ClickableButton extends Model {
|
|
147
|
+
* @attribute()
|
|
148
|
+
* label: string;
|
|
149
|
+
* }
|
|
150
|
+
*
|
|
151
|
+
* // Add form submission handlers
|
|
152
|
+
* @uimodel('form')
|
|
153
|
+
* @uihandlers({
|
|
154
|
+
* onSubmit: (event) => {
|
|
155
|
+
* event.preventDefault();
|
|
156
|
+
* console.log('Form submitted');
|
|
157
|
+
* },
|
|
158
|
+
* onReset: (event) => console.log('Form reset')
|
|
159
|
+
* })
|
|
160
|
+
* class ContactForm extends Model {
|
|
161
|
+
* @attribute()
|
|
162
|
+
* email: string;
|
|
163
|
+
* }
|
|
164
|
+
*
|
|
165
|
+
* @mermaid
|
|
166
|
+
* sequenceDiagram
|
|
167
|
+
* participant System
|
|
168
|
+
* participant uihandlers
|
|
169
|
+
* participant Model
|
|
170
|
+
* participant RenderingEngine
|
|
171
|
+
* participant UI
|
|
172
|
+
* System->>uihandlers: apply to Model
|
|
173
|
+
* uihandlers->>Model: adds handler metadata
|
|
174
|
+
* Model->>RenderingEngine: requests rendering with handlers
|
|
175
|
+
* RenderingEngine->>UI: renders element with event handlers attached
|
|
176
|
+
* UI->>Model: triggers handlers on events
|
|
177
|
+
*/
|
|
124
178
|
export declare function uihandlers(props?: Record<string, any>): (original: any) => void;
|
|
179
|
+
/**
|
|
180
|
+
* @description Decorator that creates a layout container with grid specifications
|
|
181
|
+
* @summary Combines UI model functionality with layout grid configuration
|
|
182
|
+
* This decorator creates a UI model that acts as a layout container with specified
|
|
183
|
+
* column and row configurations. It's a convenience decorator that combines
|
|
184
|
+
* @uimodel with layout-specific properties for responsive grid layouts.
|
|
185
|
+
*
|
|
186
|
+
* @param {string} tag The HTML tag to use for the layout container
|
|
187
|
+
* @param {number} [cols=1] Number of columns in the grid layout
|
|
188
|
+
* @param {number|string[]} [rows=1] Number of rows or array of row definitions
|
|
189
|
+
* @param {UIMediaBreakPoints} [breakpoint='m'] Media breakpoint for responsive behavior
|
|
190
|
+
* @return {Function} A class decorator function
|
|
191
|
+
*
|
|
192
|
+
* @function uilayout
|
|
193
|
+
* @category Class Decorators
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* // Create a simple 2-column layout
|
|
197
|
+
* @uilayout('div', 2, 3)
|
|
198
|
+
* class TwoColumnLayout extends Model {
|
|
199
|
+
* @attribute()
|
|
200
|
+
* @uilayoutitem(1, 1)
|
|
201
|
+
* header: string;
|
|
202
|
+
*
|
|
203
|
+
* @attribute()
|
|
204
|
+
* @uilayoutitem(1, 2)
|
|
205
|
+
* leftContent: string;
|
|
206
|
+
*
|
|
207
|
+
* @attribute()
|
|
208
|
+
* @uilayoutitem(2, 2)
|
|
209
|
+
* rightContent: string;
|
|
210
|
+
* }
|
|
211
|
+
*
|
|
212
|
+
* // Create a responsive layout with custom breakpoint
|
|
213
|
+
* @uilayout('section', 3, 2, 'l')
|
|
214
|
+
* class ResponsiveLayout extends Model {
|
|
215
|
+
* @attribute()
|
|
216
|
+
* @uilayoutitem(1, 1)
|
|
217
|
+
* title: string;
|
|
218
|
+
*
|
|
219
|
+
* @attribute()
|
|
220
|
+
* @uilayoutitem(2, 1)
|
|
221
|
+
* subtitle: string;
|
|
222
|
+
* }
|
|
223
|
+
*
|
|
224
|
+
* @mermaid
|
|
225
|
+
* sequenceDiagram
|
|
226
|
+
* participant System
|
|
227
|
+
* participant uilayout
|
|
228
|
+
* participant uimodel
|
|
229
|
+
* participant Model
|
|
230
|
+
* participant RenderingEngine
|
|
231
|
+
* System->>uilayout: apply to Model
|
|
232
|
+
* uilayout->>uimodel: call with layout props
|
|
233
|
+
* uimodel->>Model: adds model metadata with layout config
|
|
234
|
+
* Model->>RenderingEngine: requests rendering as layout container
|
|
235
|
+
* RenderingEngine->>System: renders grid layout with specified dimensions
|
|
236
|
+
*/
|
|
237
|
+
export declare function uilayout(tag: string, cols?: number, rows?: number | string[], breakpoint?: UIMediaBreakPoints): (original: any, propertyKey?: any) => void;
|
|
@@ -146,6 +146,59 @@ export function uilistitem(tag, props) {
|
|
|
146
146
|
return metadata(RenderingEngine.key(UIKeys.UILISTITEM), meta)(original);
|
|
147
147
|
};
|
|
148
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* @description Decorator that adds event handlers to a UI model
|
|
151
|
+
* @summary Specifies event handlers that should be attached to the rendered model
|
|
152
|
+
* This decorator allows you to define event handlers that will be automatically
|
|
153
|
+
* attached to the rendered UI element. The handlers are passed as properties
|
|
154
|
+
* to the rendering engine.
|
|
155
|
+
*
|
|
156
|
+
* @param {Record<string, any>} [props] Object containing event handler functions and other properties
|
|
157
|
+
* @return {Function} A class decorator function
|
|
158
|
+
*
|
|
159
|
+
* @function uihandlers
|
|
160
|
+
* @category Class Decorators
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* // Add event handlers to a model
|
|
164
|
+
* @uimodel('button')
|
|
165
|
+
* @uihandlers({
|
|
166
|
+
* onClick: (event) => console.log('Button clicked'),
|
|
167
|
+
* onMouseOver: (event) => console.log('Mouse over button'),
|
|
168
|
+
* disabled: false
|
|
169
|
+
* })
|
|
170
|
+
* class ClickableButton extends Model {
|
|
171
|
+
* @attribute()
|
|
172
|
+
* label: string;
|
|
173
|
+
* }
|
|
174
|
+
*
|
|
175
|
+
* // Add form submission handlers
|
|
176
|
+
* @uimodel('form')
|
|
177
|
+
* @uihandlers({
|
|
178
|
+
* onSubmit: (event) => {
|
|
179
|
+
* event.preventDefault();
|
|
180
|
+
* console.log('Form submitted');
|
|
181
|
+
* },
|
|
182
|
+
* onReset: (event) => console.log('Form reset')
|
|
183
|
+
* })
|
|
184
|
+
* class ContactForm extends Model {
|
|
185
|
+
* @attribute()
|
|
186
|
+
* email: string;
|
|
187
|
+
* }
|
|
188
|
+
*
|
|
189
|
+
* @mermaid
|
|
190
|
+
* sequenceDiagram
|
|
191
|
+
* participant System
|
|
192
|
+
* participant uihandlers
|
|
193
|
+
* participant Model
|
|
194
|
+
* participant RenderingEngine
|
|
195
|
+
* participant UI
|
|
196
|
+
* System->>uihandlers: apply to Model
|
|
197
|
+
* uihandlers->>Model: adds handler metadata
|
|
198
|
+
* Model->>RenderingEngine: requests rendering with handlers
|
|
199
|
+
* RenderingEngine->>UI: renders element with event handlers attached
|
|
200
|
+
* UI->>Model: triggers handlers on events
|
|
201
|
+
*/
|
|
149
202
|
export function uihandlers(props) {
|
|
150
203
|
return (original) => {
|
|
151
204
|
const meta = {
|
|
@@ -154,4 +207,67 @@ export function uihandlers(props) {
|
|
|
154
207
|
return metadata(RenderingEngine.key(UIKeys.HANDLERS), meta)(original);
|
|
155
208
|
};
|
|
156
209
|
}
|
|
157
|
-
|
|
210
|
+
/**
|
|
211
|
+
* @description Decorator that creates a layout container with grid specifications
|
|
212
|
+
* @summary Combines UI model functionality with layout grid configuration
|
|
213
|
+
* This decorator creates a UI model that acts as a layout container with specified
|
|
214
|
+
* column and row configurations. It's a convenience decorator that combines
|
|
215
|
+
* @uimodel with layout-specific properties for responsive grid layouts.
|
|
216
|
+
*
|
|
217
|
+
* @param {string} tag The HTML tag to use for the layout container
|
|
218
|
+
* @param {number} [cols=1] Number of columns in the grid layout
|
|
219
|
+
* @param {number|string[]} [rows=1] Number of rows or array of row definitions
|
|
220
|
+
* @param {UIMediaBreakPoints} [breakpoint='m'] Media breakpoint for responsive behavior
|
|
221
|
+
* @return {Function} A class decorator function
|
|
222
|
+
*
|
|
223
|
+
* @function uilayout
|
|
224
|
+
* @category Class Decorators
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* // Create a simple 2-column layout
|
|
228
|
+
* @uilayout('div', 2, 3)
|
|
229
|
+
* class TwoColumnLayout extends Model {
|
|
230
|
+
* @attribute()
|
|
231
|
+
* @uilayoutitem(1, 1)
|
|
232
|
+
* header: string;
|
|
233
|
+
*
|
|
234
|
+
* @attribute()
|
|
235
|
+
* @uilayoutitem(1, 2)
|
|
236
|
+
* leftContent: string;
|
|
237
|
+
*
|
|
238
|
+
* @attribute()
|
|
239
|
+
* @uilayoutitem(2, 2)
|
|
240
|
+
* rightContent: string;
|
|
241
|
+
* }
|
|
242
|
+
*
|
|
243
|
+
* // Create a responsive layout with custom breakpoint
|
|
244
|
+
* @uilayout('section', 3, 2, 'l')
|
|
245
|
+
* class ResponsiveLayout extends Model {
|
|
246
|
+
* @attribute()
|
|
247
|
+
* @uilayoutitem(1, 1)
|
|
248
|
+
* title: string;
|
|
249
|
+
*
|
|
250
|
+
* @attribute()
|
|
251
|
+
* @uilayoutitem(2, 1)
|
|
252
|
+
* subtitle: string;
|
|
253
|
+
* }
|
|
254
|
+
*
|
|
255
|
+
* @mermaid
|
|
256
|
+
* sequenceDiagram
|
|
257
|
+
* participant System
|
|
258
|
+
* participant uilayout
|
|
259
|
+
* participant uimodel
|
|
260
|
+
* participant Model
|
|
261
|
+
* participant RenderingEngine
|
|
262
|
+
* System->>uilayout: apply to Model
|
|
263
|
+
* uilayout->>uimodel: call with layout props
|
|
264
|
+
* uimodel->>Model: adds model metadata with layout config
|
|
265
|
+
* Model->>RenderingEngine: requests rendering as layout container
|
|
266
|
+
* RenderingEngine->>System: renders grid layout with specified dimensions
|
|
267
|
+
*/
|
|
268
|
+
export function uilayout(tag, cols = 1, rows = 1, breakpoint = 'm') {
|
|
269
|
+
return (original, propertyKey) => {
|
|
270
|
+
return uimodel(tag, { cols, rows, breakpoint })(original, propertyKey);
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsNkJBQXdCO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSw2QkFBd0I7QUFHbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQy9ELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBb0I7WUFDNUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUN6QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQWM7SUFDdkMsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQ2xFLDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBNEI7WUFDcEMsSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUk7Z0JBQ3pCLEtBQUssRUFBRSxLQUFLO2FBQ2I7U0FDRixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUEyQjtJQUNwRCxPQUFPLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVcsRUFBRSxPQUFlLENBQUMsRUFBRSxPQUEwQixDQUFDLEVBQUUsYUFBaUMsR0FBRztJQUN2SCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi4vdWkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBhcHBseSwgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gXCIuLi91aS9SZW5kZXJpbmdcIjtcbmltcG9ydCB7IFVJTGlzdEl0ZW1Nb2RlbE1ldGFkYXRhLCBVSU1lZGlhQnJlYWtQb2ludHMsIFVJTW9kZWxNZXRhZGF0YSB9IGZyb20gXCIuLi91aS90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCB0YWdzIGEgY2xhc3MgYXMgYSBVSSBtb2RlbFxuICogQHN1bW1hcnkgQWRkcyByZW5kZXJpbmcgY2FwYWJpbGl0aWVzIHRvIGEgbW9kZWwgY2xhc3MgYnkgcHJvdmlkaW5nIGEgcmVuZGVyIG1ldGhvZFxuICogVGhpcyBkZWNvcmF0b3IgYXBwbGllcyBtZXRhZGF0YSB0byB0aGUgY2xhc3MgdGhhdCBlbmFibGVzIGl0IHRvIGJlIHJlbmRlcmVkIGJ5IHRoZSBVSSByZW5kZXJpbmcgZW5naW5lLlxuICogVGhlIG1vZGVsIHdpbGwgYmUgcmVuZGVyZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHRhZyBhbmQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RhZ10gVGhlIEhUTUwgdGFnIHRvIHVzZSB3aGVuIHJlbmRlcmluZyB0aGlzIG1vZGVsIChkZWZhdWx0cyB0byBjbGFzcyBuYW1lKVxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBjbGFzcyBkZWNvcmF0b3IgZnVuY3Rpb25cbiAqXG4gKiBAZnVuY3Rpb24gdWltb2RlbFxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2Ugd2l0aCBkZWZhdWx0IHRhZyAoY2xhc3MgbmFtZSlcbiAqIEB1aW1vZGVsKClcbiAqIGNsYXNzIFVzZXJQcm9maWxlIGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIGVtYWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogLy8gVXNhZ2Ugd2l0aCBjdXN0b20gdGFnIGFuZCBwcm9wZXJ0aWVzXG4gKiBAdWltb2RlbCgnZGl2JywgeyBjbGFzczogJ3VzZXItY2FyZCcgfSlcbiAqIGNsYXNzIFVzZXJDYXJkIGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgdXNlcm5hbWU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCB1aW1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGNvbnN0cnVjdG9yXG4gKiAgIHBhcnRpY2lwYW50IGluc3RhbmNlXG4gKiAgIFN5c3RlbS0+PnVpbW9kZWw6ZG8oY29uc3RydWN0b3IpXG4gKiAgIHVpbW9kZWwtPj5jb25zdHJ1Y3RvcjogRXhlY3V0ZXMgdGhlIGNvbnN0cnVjdG9yXG4gKiAgIGNvbnN0cnVjdG9yLT4+dWltb2RlbDogcmV0dXJucyBpbnN0YW5jZVxuICogICB1aW1vZGVsLT4+aW5zdGFuY2U6IGFkZHMgdGhlIHJlbmRlciBtZXRob2RcbiAqICAgdWltb2RlbC0+PlN5c3RlbTogcmV0dXJucyBVSU1vZGVsIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aW1vZGVsKHRhZz86IHN0cmluZywgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIChvcmlnaW5hbDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGNvbnN0IG1ldGE6IFVJTW9kZWxNZXRhZGF0YSA9IHtcbiAgICAgIHRhZzogdGFnIHx8IG9yaWdpbmFsLm5hbWUsXG4gICAgICBwcm9wczogcHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gbWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlNT0RFTCksIG1ldGEpKG9yaWdpbmFsKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlbmRlcmluZyBlbmdpbmUgdG8gdXNlIGZvciBhIG1vZGVsXG4gKiBAc3VtbWFyeSBBc3NvY2lhdGVzIGEgbW9kZWwgd2l0aCBhIHNwZWNpZmljIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb25cbiAqIFRoaXMgZGVjb3JhdG9yIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVuZGVyaW5nIGVuZ2luZSBmb3IgYSBzcGVjaWZpYyBtb2RlbCBjbGFzcyxcbiAqIGVuYWJsaW5nIGRpZmZlcmVudCByZW5kZXJpbmcgc3RyYXRlZ2llcyBmb3IgZGlmZmVyZW50IG1vZGVscy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIFRoZSBuYW1lIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lIHRvIHVzZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgY2xhc3MgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHJlbmRlcmVkQnlcbiAqIEBjYXRlZ29yeSBDbGFzcyBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNwZWNpZnkgYSBjdXN0b20gcmVuZGVyaW5nIGVuZ2luZSBmb3IgYSBtb2RlbFxuICogQHVpbW9kZWwoKVxuICogQHJlbmRlcmVkQnkoJ3JlYWN0JylcbiAqIGNsYXNzIFJlYWN0Q29tcG9uZW50IGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgdGl0bGU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCByZW5kZXJlZEJ5XG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBTeXN0ZW0tPj5yZW5kZXJlZEJ5OiBhcHBseSB0byBNb2RlbFxuICogICByZW5kZXJlZEJ5LT4+TW9kZWw6IGFkZHMgZW5naW5lIG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiB1c2VzIHNwZWNpZmllZCBlbmdpbmVcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+U3lzdGVtOiByZW5kZXJzIHdpdGggY3VzdG9tIGVuZ2luZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyZWRCeShlbmdpbmU6IHN0cmluZykge1xuICByZXR1cm4gYXBwbHkobWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuUkVOREVSRURfQlkpLCBlbmdpbmUpKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgdGFncyBhIG1vZGVsIGFzIGEgbGlzdCBpdGVtIGZvciBVSSByZW5kZXJpbmdcbiAqIEBzdW1tYXJ5IFNwZWNpZmllcyBob3cgYSBtb2RlbCBzaG91bGQgYmUgcmVuZGVyZWQgd2hlbiBkaXNwbGF5ZWQgaW4gYSBsaXN0IGNvbnRleHRcbiAqIFRoaXMgZGVjb3JhdG9yIGFwcGxpZXMgbWV0YWRhdGEgdG8gdGhlIGNsYXNzIHRoYXQgZW5hYmxlcyBpdCB0byBiZSByZW5kZXJlZCBhcyBhIGxpc3QgaXRlbVxuICogYnkgdGhlIFVJIHJlbmRlcmluZyBlbmdpbmUuIFRoZSBtb2RlbCB3aWxsIGJlIHJlbmRlcmVkIHdpdGggdGhlIHNwZWNpZmllZCB0YWcgYW5kIHByb3BlcnRpZXNcbiAqIHdoZW4gaXQgYXBwZWFycyBpbiBhIGxpc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFt0YWddIFRoZSBIVE1MIHRhZyB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGhpcyBtb2RlbCBhcyBhIGxpc3QgaXRlbSAoZGVmYXVsdHMgdG8gY2xhc3MgbmFtZSlcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3Byb3BzXSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gcGFzcyB0byB0aGUgcmVuZGVyZWQgbGlzdCBpdGVtIGVsZW1lbnRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGNsYXNzIGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWxpc3RpdGVtXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGRlZmF1bHQgdGFnIChjbGFzcyBuYW1lKVxuICogQHVpbW9kZWwoKVxuICogQHVpbGlzdGl0ZW0oKVxuICogY2xhc3MgVG9kb0l0ZW0gZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB0aXRsZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAqIH1cbiAqXG4gKiAvLyBVc2FnZSB3aXRoIGN1c3RvbSB0YWcgYW5kIHByb3BlcnRpZXNcbiAqIEB1aW1vZGVsKClcbiAqIEB1aWxpc3RpdGVtKCdsaScsIHsgY2xhc3M6ICdsaXN0LWdyb3VwLWl0ZW0nIH0pXG4gKiBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIE1vZGVsIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIHRleHQ6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCB1aWxpc3RpdGVtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBTeXN0ZW0tPj51aWxpc3RpdGVtOiBhcHBseSB0byBNb2RlbFxuICogICB1aWxpc3RpdGVtLT4+TW9kZWw6IGFkZHMgbGlzdCBpdGVtIG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiB1c2VzIGxpc3QgaXRlbSBtZXRhZGF0YSB3aGVuIGluIGxpc3QgY29udGV4dFxuICogICBSZW5kZXJpbmdFbmdpbmUtPj5TeXN0ZW06IHJlbmRlcnMgd2l0aCBsaXN0IGl0ZW0gc3R5bGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWlsaXN0aXRlbSh0YWc/OiBzdHJpbmcsIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXRhOiBVSUxpc3RJdGVtTW9kZWxNZXRhZGF0YSA9IHtcbiAgICAgIGl0ZW06IHtcbiAgICAgICAgdGFnOiB0YWcgfHwgb3JpZ2luYWwubmFtZSxcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSUxJU1RJVEVNKSwgbWV0YSkob3JpZ2luYWwpO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBhZGRzIGV2ZW50IGhhbmRsZXJzIHRvIGEgVUkgbW9kZWxcbiAqIEBzdW1tYXJ5IFNwZWNpZmllcyBldmVudCBoYW5kbGVycyB0aGF0IHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgcmVuZGVyZWQgbW9kZWxcbiAqIFRoaXMgZGVjb3JhdG9yIGFsbG93cyB5b3UgdG8gZGVmaW5lIGV2ZW50IGhhbmRsZXJzIHRoYXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5XG4gKiBhdHRhY2hlZCB0byB0aGUgcmVuZGVyZWQgVUkgZWxlbWVudC4gVGhlIGhhbmRsZXJzIGFyZSBwYXNzZWQgYXMgcHJvcGVydGllc1xuICogdG8gdGhlIHJlbmRlcmluZyBlbmdpbmUuXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIE9iamVjdCBjb250YWluaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGFuZCBvdGhlciBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBjbGFzcyBkZWNvcmF0b3IgZnVuY3Rpb25cbiAqXG4gKiBAZnVuY3Rpb24gdWloYW5kbGVyc1xuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIGV2ZW50IGhhbmRsZXJzIHRvIGEgbW9kZWxcbiAqIEB1aW1vZGVsKCdidXR0b24nKVxuICogQHVpaGFuZGxlcnMoe1xuICogICBvbkNsaWNrOiAoZXZlbnQpID0+IGNvbnNvbGUubG9nKCdCdXR0b24gY2xpY2tlZCcpLFxuICogICBvbk1vdXNlT3ZlcjogKGV2ZW50KSA9PiBjb25zb2xlLmxvZygnTW91c2Ugb3ZlciBidXR0b24nKSxcbiAqICAgZGlzYWJsZWQ6IGZhbHNlXG4gKiB9KVxuICogY2xhc3MgQ2xpY2thYmxlQnV0dG9uIGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqIH1cbiAqXG4gKiAvLyBBZGQgZm9ybSBzdWJtaXNzaW9uIGhhbmRsZXJzXG4gKiBAdWltb2RlbCgnZm9ybScpXG4gKiBAdWloYW5kbGVycyh7XG4gKiAgIG9uU3VibWl0OiAoZXZlbnQpID0+IHtcbiAqICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICogICAgIGNvbnNvbGUubG9nKCdGb3JtIHN1Ym1pdHRlZCcpO1xuICogICB9LFxuICogICBvblJlc2V0OiAoZXZlbnQpID0+IGNvbnNvbGUubG9nKCdGb3JtIHJlc2V0JylcbiAqIH0pXG4gKiBjbGFzcyBDb250YWN0Rm9ybSBleHRlbmRzIE1vZGVsIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIGVtYWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBTeXN0ZW1cbiAqICAgcGFydGljaXBhbnQgdWloYW5kbGVyc1xuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgVUlcbiAqICAgU3lzdGVtLT4+dWloYW5kbGVyczogYXBwbHkgdG8gTW9kZWxcbiAqICAgdWloYW5kbGVycy0+Pk1vZGVsOiBhZGRzIGhhbmRsZXIgbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IHJlcXVlc3RzIHJlbmRlcmluZyB3aXRoIGhhbmRsZXJzXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+PlVJOiByZW5kZXJzIGVsZW1lbnQgd2l0aCBldmVudCBoYW5kbGVycyBhdHRhY2hlZFxuICogICBVSS0+Pk1vZGVsOiB0cmlnZ2VycyBoYW5kbGVycyBvbiBldmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpaGFuZGxlcnMocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIHJldHVybiAob3JpZ2luYWw6IGFueSkgPT4ge1xuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBoYW5kbGVyczogcHJvcHNcbiAgICB9O1xuICAgIHJldHVybiBtZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5IQU5ETEVSUyksIG1ldGEpKG9yaWdpbmFsKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgY3JlYXRlcyBhIGxheW91dCBjb250YWluZXIgd2l0aCBncmlkIHNwZWNpZmljYXRpb25zXG4gKiBAc3VtbWFyeSBDb21iaW5lcyBVSSBtb2RlbCBmdW5jdGlvbmFsaXR5IHdpdGggbGF5b3V0IGdyaWQgY29uZmlndXJhdGlvblxuICogVGhpcyBkZWNvcmF0b3IgY3JlYXRlcyBhIFVJIG1vZGVsIHRoYXQgYWN0cyBhcyBhIGxheW91dCBjb250YWluZXIgd2l0aCBzcGVjaWZpZWRcbiAqIGNvbHVtbiBhbmQgcm93IGNvbmZpZ3VyYXRpb25zLiBJdCdzIGEgY29udmVuaWVuY2UgZGVjb3JhdG9yIHRoYXQgY29tYmluZXNcbiAqIEB1aW1vZGVsIHdpdGggbGF5b3V0LXNwZWNpZmljIHByb3BlcnRpZXMgZm9yIHJlc3BvbnNpdmUgZ3JpZCBsYXlvdXRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIEhUTUwgdGFnIHRvIHVzZSBmb3IgdGhlIGxheW91dCBjb250YWluZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29scz0xXSBOdW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZCBsYXlvdXRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ1tdfSBbcm93cz0xXSBOdW1iZXIgb2Ygcm93cyBvciBhcnJheSBvZiByb3cgZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7VUlNZWRpYUJyZWFrUG9pbnRzfSBbYnJlYWtwb2ludD0nbSddIE1lZGlhIGJyZWFrcG9pbnQgZm9yIHJlc3BvbnNpdmUgYmVoYXZpb3JcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGNsYXNzIGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWxheW91dFxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgc2ltcGxlIDItY29sdW1uIGxheW91dFxuICogQHVpbGF5b3V0KCdkaXYnLCAyLCAzKVxuICogY2xhc3MgVHdvQ29sdW1uTGF5b3V0IGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGF5b3V0aXRlbSgxLCAxKVxuICogICBoZWFkZXI6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlsYXlvdXRpdGVtKDEsIDIpXG4gKiAgIGxlZnRDb250ZW50OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGF5b3V0aXRlbSgyLCAyKVxuICogICByaWdodENvbnRlbnQ6IHN0cmluZztcbiAqIH1cbiAqXG4gKiAvLyBDcmVhdGUgYSByZXNwb25zaXZlIGxheW91dCB3aXRoIGN1c3RvbSBicmVha3BvaW50XG4gKiBAdWlsYXlvdXQoJ3NlY3Rpb24nLCAzLCAyLCAnbCcpXG4gKiBjbGFzcyBSZXNwb25zaXZlTGF5b3V0IGV4dGVuZHMgTW9kZWwge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGF5b3V0aXRlbSgxLCAxKVxuICogICB0aXRsZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWxheW91dGl0ZW0oMiwgMSlcbiAqICAgc3VidGl0bGU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCB1aWxheW91dFxuICogICBwYXJ0aWNpcGFudCB1aW1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBTeXN0ZW0tPj51aWxheW91dDogYXBwbHkgdG8gTW9kZWxcbiAqICAgdWlsYXlvdXQtPj51aW1vZGVsOiBjYWxsIHdpdGggbGF5b3V0IHByb3BzXG4gKiAgIHVpbW9kZWwtPj5Nb2RlbDogYWRkcyBtb2RlbCBtZXRhZGF0YSB3aXRoIGxheW91dCBjb25maWdcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IHJlcXVlc3RzIHJlbmRlcmluZyBhcyBsYXlvdXQgY29udGFpbmVyXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+PlN5c3RlbTogcmVuZGVycyBncmlkIGxheW91dCB3aXRoIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aWxheW91dCh0YWc6IHN0cmluZywgY29sczogbnVtYmVyID0gMSwgcm93czogbnVtYmVyIHwgc3RyaW5nW10gPSAxLCBicmVha3BvaW50OiBVSU1lZGlhQnJlYWtQb2ludHMgPSAnbScpIHtcbiAgcmV0dXJuIChvcmlnaW5hbDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIHJldHVybiB1aW1vZGVsKHRhZywge2NvbHMsIHJvd3MsIGJyZWFrcG9pbnR9KShvcmlnaW5hbCwgcHJvcGVydHlLZXkpO1xuICB9O1xufSJdfQ==
|
|
@@ -51,6 +51,19 @@ export declare abstract class RenderingEngine<T = void, R = FieldDefinition<T>>
|
|
|
51
51
|
* @returns {string} The translated type.
|
|
52
52
|
*/
|
|
53
53
|
translate(key: string, toView?: boolean): string;
|
|
54
|
+
/**
|
|
55
|
+
* @description Retrieves class decorator metadata for a model instance
|
|
56
|
+
* @summary Extracts UI-related class decorators from a model and returns them as an array
|
|
57
|
+
* This method collects metadata from various UI class decorators including @uimodel,
|
|
58
|
+
* @uilistitem, @uihandlers, and @uilayout applied to the model class.
|
|
59
|
+
*
|
|
60
|
+
* @template M Type extending Model
|
|
61
|
+
* @param {M} model - The model instance to extract metadata from
|
|
62
|
+
* @returns {UIClassMetadata[]} Array of UI class metadata objects
|
|
63
|
+
*
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
private getClassDecoratorsMetadata;
|
|
54
67
|
/**
|
|
55
68
|
* @description Checks if a type is validatable by its nature.
|
|
56
69
|
* @summary Determines if a given UI key represents a type that is inherently validatable.
|
|
@@ -109,6 +122,21 @@ export declare abstract class RenderingEngine<T = void, R = FieldDefinition<T>>
|
|
|
109
122
|
* RE-->>C: FieldDefinition<T>
|
|
110
123
|
*/
|
|
111
124
|
protected toFieldDefinition<M extends Model>(model: M, globalProps?: Record<string, unknown>, generateId?: boolean): FieldDefinition<T>;
|
|
125
|
+
/**
|
|
126
|
+
* @description Processes layout items for grid positioning
|
|
127
|
+
* @summary Maps child field definitions to their corresponding layout positions
|
|
128
|
+
* This method iterates through child field definitions and applies layout metadata
|
|
129
|
+
* from @uilayoutitem decorators to position them correctly in a grid layout.
|
|
130
|
+
*
|
|
131
|
+
* @param {FieldDefinition[]} children - Array of child field definitions to process
|
|
132
|
+
* @param {Record<string, any>} uiDecorators - UI decorator metadata keyed by property name
|
|
133
|
+
* @returns {FieldDefinition[]} Array of field definitions with layout positioning applied
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* // Internal usage - positions children in grid layout
|
|
137
|
+
* const layoutChildren = this.getLayoutItems(childDefinitions, decoratorMetadata);
|
|
138
|
+
*/
|
|
139
|
+
getLayoutItems(children: FieldDefinition<any>[], uiDecorators: Record<string, any>): FieldDefinition<any>[];
|
|
112
140
|
/**
|
|
113
141
|
* @description Renders a model with global properties and additional arguments.
|
|
114
142
|
* @summary Abstract method to be implemented by subclasses to define specific rendering behavior.
|