@twobirds/microcomponents 0.0.3 → 0.0.6
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/MicroComponentProposal_draft.md +1 -1
- package/README.md +43 -58
- package/dist/microcomponents.d.ts +218 -2
- package/dist/microcomponents.d.ts.map +1 -1
- package/dist/microcomponents.js +237 -43
- package/dist/microcomponents.min.js +7 -6
- package/dist/microcomponents.ts +391 -201
- package/jsdoc.conf.json +19 -0
- package/microcomponents_usage.md +56 -24
- package/microcomponents_why.md +25 -0
- package/package.json +13 -2
- package/public/docs/assets/highlight.css +14 -14
- package/public/docs/assets/search.js +1 -1
- package/public/docs/classes/microcomponents.MC.html +179 -41
- package/public/docs/classes/microcomponents_es3.MC.html +12 -12
- package/public/docs/functions/microcomponents_es3.__isEmpty.html +1 -1
- package/public/docs/index.html +15 -59
- package/public/docs/interfaces/microcomponents.HTMLElementMc.html +2 -2
- package/public/docs/modules/microcomponents.html +1 -1
- package/public/jsdoc/es3/files.html +216 -0
- package/public/jsdoc/es3/index.html +210 -0
- package/public/jsdoc/es3/symbols/_global_.html +368 -0
- package/public/jsdoc/es3/symbols/src/build_microcomponents.es3.js.html +104 -0
- package/public/jsdoc/es5+/files.html +218 -0
- package/public/jsdoc/es5+/index.html +218 -0
- package/public/jsdoc/es5+/symbols/MC.html +621 -0
- package/public/jsdoc/es5+/symbols/_global_.html +720 -0
- package/public/jsdoc/es5+/symbols/microcomponents.MC.html +323 -0
- package/public/jsdoc/es5+/symbols/src/build_microcomponents.js.html +375 -0
- package/src/microcomponents.ts +391 -201
|
@@ -13,7 +13,7 @@ Microcomponents provide a way to encapsulate functionality and state within a ta
|
|
|
13
13
|
**Proposed API:**
|
|
14
14
|
|
|
15
15
|
- **Static Methods:**
|
|
16
|
-
- `MC.add(
|
|
16
|
+
- `MC.add( target, key, element)`: Attach a top level micro component to an HTMLElement.
|
|
17
17
|
- `MC.remove( target, key )`: Detach a top level micro component from an HTMLElement.
|
|
18
18
|
- `MC.siblings( target )`: get top level micro components from an HTMLElement.
|
|
19
19
|
|
package/README.md
CHANGED
|
@@ -2,41 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Status
|
|
6
|
+
WIP. Should be tested and done soon.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
## General
|
|
8
9
|
|
|
9
|
-
This
|
|
10
|
+
This code aims at improving Javascript modularity. It does not describe a specific Micro Component itself but rather describes they way they are **organized**.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Using micro components enforces **DRY, KISS and SOLID** principles in Javascript programming. Read this [RFC](https://gitlab.com/twoBirds/microcomponents/-/blob/main/MicroComponentProposal_draft.md?ref_type=heads) for the shortest info, and [click here to see why you may want to use it](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_why.md?ref_type=heads).
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
This is a low-level approach. It consists of a single class with 3 static methods and 5 selector methods, and weights in at ~2 kB. Also there is an ES3 version to help e.g. [hbbtv](https://en.wikipedia.org/wiki/Hybrid_Broadcast_Broadband_TV) modular JS coding, or any other device that relies on ES3. The latter is WIP, backporting is currently last on my list.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
For a short usage description goto [Micro Component Usage](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_usage.md?ref_type=heads).
|
|
16
17
|
|
|
18
|
+
Check the [typedoc API reference](http://twobirds.gitlab.io/microcomponents/docs/modules.html) if you want to drill into the source code.
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
It is lightweight, proven and can yield positive results immediatly.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
### **As the CTO**:
|
|
24
|
-
- **Reusability**: this works with every Javascript framework that allows for DOM access, and it will work as long as the DOM exists in browsers. That is, forever.
|
|
25
|
-
- **Scalability**: scales perfectly by design.
|
|
26
|
-
- **Interoperability**: where many teams in different projects should share specific business or UI logic, you want to have something that works in any JS framework you use.
|
|
27
|
-
|
|
28
|
-
### **As a Project Manager**:
|
|
29
|
-
- **Separation of Concerns**: since this is a modular approach you can **split UI logic from Business logic** and let diffent teams work on each.
|
|
30
|
-
- using this, you can **work with external developers without the need to give them access to your projects code repository**.
|
|
31
|
-
- you will find out that this allows your project to **become independent from the "tools hell"**. You tend to use **DIY** modules where you had tools before.
|
|
32
|
-
|
|
33
|
-
### **As a Javascript Developer**:
|
|
34
|
-
- The learning curve to use this is more than shallow. 1 hour should be enough.
|
|
35
|
-
- This is based on **plain Javascript/Typescript, HTML and CSS**. There is no abstraction layer.
|
|
36
|
-
- From the very start **it is fun to work with**. You are back in control of your code without bigger frameworks, but you are able to interact with them.
|
|
37
|
-
- You can **work for any customer right away**. **No training on their system required**, just fulfill their micro component requirements.
|
|
38
|
-
- Over time, you can **build your own framework or functional libraries** from scratch.
|
|
20
|
+
Or read the more detailed [jsdoc API documentation](http://twobirds.gitlab.io/microcomponents/jsdoc/es5+/index.html) which contains **examples**.
|
|
39
21
|
|
|
22
|
+
To see what can be done, go to [additional concepts](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_magic.md?ref_type=heads) which shows what it already has been used for.
|
|
40
23
|
|
|
41
24
|
## Functional Requirements
|
|
42
25
|
|
|
@@ -59,14 +42,38 @@ before:
|
|
|
59
42
|
|
|
60
43
|
code: (assume "Button" is some class in a library)
|
|
61
44
|
```javascript
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
45
|
+
// create the micro component class
|
|
46
|
+
class MyMC extends MC{
|
|
47
|
+
|
|
48
|
+
constructor( target ){
|
|
49
|
+
super( target );
|
|
50
|
+
this.target = target;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const element = document.querySelector('div')
|
|
55
|
+
|
|
56
|
+
// Add the top level microcomponent to the target element
|
|
57
|
+
let mcc = MC.add(
|
|
58
|
+
element,
|
|
59
|
+
'myMC',
|
|
60
|
+
new MyMC( element )
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
// Add an inner (private) microcomponent to mcc
|
|
64
|
+
let mcc.add(
|
|
65
|
+
'myInnerMC',
|
|
66
|
+
new MyMC( element )
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
console.log( element._mc );
|
|
70
|
+
// { 'myMC': { target: (element) } }
|
|
71
|
+
|
|
72
|
+
console.log( element._mc.myMC );
|
|
73
|
+
// { target: (element) }
|
|
74
|
+
|
|
75
|
+
console.log( mcc.siblings() );
|
|
76
|
+
// [ { target: (element) } ]
|
|
70
77
|
```
|
|
71
78
|
|
|
72
79
|
after:
|
|
@@ -75,29 +82,7 @@ after:
|
|
|
75
82
|
```
|
|
76
83
|
_mc indicates that this HTML element contains at least one micro component. This is needed for the **selectors**.
|
|
77
84
|
|
|
78
|
-
|
|
79
|
-
```javascript
|
|
80
|
-
console.log( myButton._mc );
|
|
81
|
-
// { tb_ui_button: { target: <button>, onClick: <function> } }
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
For detailed information jump to [Micro Component Usage](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_usage.md?ref_type=heads);
|
|
85
|
-
|
|
86
|
-
## History
|
|
87
|
-
|
|
88
|
-
I have been working with this since 2004. I used this as core principle inside my twoBirds framework.
|
|
89
|
-
|
|
90
|
-
This functionality has been used in very big and complicated data processing projects:
|
|
91
|
-
- to allow for web component like programming (as early as 2004)
|
|
92
|
-
- to encapsule UI handling
|
|
93
|
-
- to represent business processes and their tasks
|
|
94
|
-
- and lately to compose very complex native web components from distinct modular functionality.
|
|
95
|
-
|
|
96
|
-
I decided to extract this functionality from the [twoBirds framework](https://www.npmjs.com/package/twobirds-core), since it is framework agnostic, and relies solely on the standard DOM and native javascript or typescript, and is a useful tool in itself.
|
|
97
|
-
|
|
98
|
-
## Useful Links
|
|
99
|
-
|
|
100
|
-
[API documentation](http://twobirds.gitlab.io/microcomponents/docs/modules.html)
|
|
85
|
+
I decided to extract this functionality from the [twoBirds framework](https://www.npmjs.com/package/twobirds-core), since it is framework agnostic, and relies solely on the standard DOM and native javascript or typescript, and is a useful tool in itself. Also this will be a dependency in twoBirds then.
|
|
101
86
|
|
|
102
87
|
## Contact
|
|
103
88
|
Feel free to contact me for any questions or inquiries:
|
|
@@ -1,26 +1,242 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module microcomponenents
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* A static flag to enable or disable debugging mode.
|
|
6
|
+
* @name debug
|
|
7
|
+
* @memberOf MC
|
|
8
|
+
* @static
|
|
9
|
+
* @type {boolean} A static flag to enable or disable debugging mode.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Retrieves all top-level microcomponents from a target HTMLElement.
|
|
13
|
+
* @name siblings
|
|
14
|
+
* @memberOf MC
|
|
15
|
+
* @static
|
|
16
|
+
* @function
|
|
17
|
+
* @param {HTMLElement} target - The target DOM element.
|
|
18
|
+
* @param {string} [search] - The key of the specific microcomponent to find.
|
|
19
|
+
* @returns {Array<any>} An array of microcomponents or an empty array if none found.
|
|
20
|
+
* @example
|
|
21
|
+
* const siblings = MC.siblings(
|
|
22
|
+
* document.getElementById('myElement'),
|
|
23
|
+
* 'myComponent'
|
|
24
|
+
* );
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Adds a top level microcomponent to a target DOM node.
|
|
28
|
+
* @name add
|
|
29
|
+
* @memberOf MC
|
|
30
|
+
* @static
|
|
31
|
+
* @function
|
|
32
|
+
* @param {HTMLElement} target - The target DOM element.
|
|
33
|
+
* @param {string} key - The key to identify the microcomponent.
|
|
34
|
+
* @param {any} [element={}] - The microcomponent to add.
|
|
35
|
+
* @returns {any} The added microcomponent.
|
|
36
|
+
* @example
|
|
37
|
+
* const component = MC.add(
|
|
38
|
+
* document.getElementById('myElement'),
|
|
39
|
+
* 'myComponent',
|
|
40
|
+
* {}
|
|
41
|
+
* );
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Removes a top level microcomponent from the target DOM node.
|
|
45
|
+
* @name remove
|
|
46
|
+
* @memberOf MC
|
|
47
|
+
* @static
|
|
48
|
+
* @function
|
|
49
|
+
* @param {HTMLElement} target - The target DOM element.
|
|
50
|
+
* @param {string} key - The key identifying the microcomponent.
|
|
51
|
+
* @example
|
|
52
|
+
* MC.remove(
|
|
53
|
+
* document.getElementById('myElement'),
|
|
54
|
+
* 'myComponent'
|
|
55
|
+
* );
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* Manages microcomponents (MCs) attached to DOM elements, allowing for the
|
|
59
|
+
* addition, removal, and traversal of microcomponents across siblings, parents,
|
|
60
|
+
* children, and descendants.
|
|
61
|
+
*
|
|
62
|
+
* This class provides an API for interacting with microcomponents on DOM elements.
|
|
63
|
+
* Public microcomponents are stored on the `_mc` attribute of the DOM element, while
|
|
64
|
+
* private microcomponents are managed internally.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```javascript
|
|
68
|
+
*
|
|
69
|
+
* // create the micro component class
|
|
70
|
+
* class MyMC extends MC{
|
|
71
|
+
*
|
|
72
|
+
* constructor( target ){
|
|
73
|
+
* super( target );
|
|
74
|
+
* this.target = target;
|
|
75
|
+
* }
|
|
76
|
+
* }
|
|
77
|
+
*
|
|
78
|
+
* const element = document.querySelector('div')
|
|
79
|
+
*
|
|
80
|
+
* // Add the top level microcomponent to the target element
|
|
81
|
+
* let mcc = MC.add(
|
|
82
|
+
* element,
|
|
83
|
+
* 'myMC',
|
|
84
|
+
* new MyMC( element )
|
|
85
|
+
* );
|
|
86
|
+
*
|
|
87
|
+
* // Add an inner (private) microcomponent to mcc
|
|
88
|
+
* let mcc.add(
|
|
89
|
+
* 'myInnerMC',
|
|
90
|
+
* new MyMC( element )
|
|
91
|
+
* );
|
|
92
|
+
*
|
|
93
|
+
* console.log( element._mc );
|
|
94
|
+
* // { 'myMC': { target: (element) } }
|
|
95
|
+
*
|
|
96
|
+
* console.log( element._mc.myMC );
|
|
97
|
+
* // { target: (element) }
|
|
98
|
+
*
|
|
99
|
+
* console.log( mcc.siblings() );
|
|
100
|
+
* // [ { target: (element) } ]
|
|
101
|
+
*
|
|
102
|
+
* ```
|
|
103
|
+
* @class
|
|
104
|
+
* @name MC
|
|
105
|
+
*/
|
|
106
|
+
declare class MC {
|
|
2
107
|
private target;
|
|
3
108
|
private privateMCs;
|
|
4
109
|
_mc?: {
|
|
5
110
|
[key: string]: any;
|
|
6
111
|
};
|
|
7
112
|
static debug: boolean;
|
|
8
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Constructs an MC instance with a target DOM element.
|
|
115
|
+
* @constructor
|
|
116
|
+
* @param {HTMLElement | { [key: string]: any }} - The target DOM element or any object.
|
|
117
|
+
*/
|
|
118
|
+
constructor(target?: HTMLElement | {
|
|
119
|
+
[key: string]: any;
|
|
120
|
+
} | undefined);
|
|
9
121
|
static siblings(target: HTMLElement, search?: string): any[];
|
|
10
122
|
static add(target: HTMLElement, key: string, element?: any): any[];
|
|
11
123
|
static remove(target: HTMLElement, key: string): void;
|
|
124
|
+
/**
|
|
125
|
+
* returns top level microcomponents from a list of HTMLElements.
|
|
126
|
+
* @name getMicroComponents
|
|
127
|
+
* @instance
|
|
128
|
+
* @function
|
|
129
|
+
* @private
|
|
130
|
+
* @param {Array<any>} elements - The elements to search for microcomponents.
|
|
131
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
132
|
+
* @returns {Array<any>} An array of microcomponents.
|
|
133
|
+
*/
|
|
12
134
|
private getMicroComponents;
|
|
135
|
+
/**
|
|
136
|
+
* returns ancestor MCs
|
|
137
|
+
* @name traverseNodes
|
|
138
|
+
* @instance
|
|
139
|
+
* @function
|
|
140
|
+
* @private
|
|
141
|
+
* @param {Node | null} node - The starting DOM node.
|
|
142
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
143
|
+
* @param {boolean} [firstonly=true] - If true, returns the first match only.
|
|
144
|
+
* @returns {Array<any>} An array of matching microcomponents.
|
|
145
|
+
*/
|
|
13
146
|
private traverseNodes;
|
|
147
|
+
/**
|
|
148
|
+
* returns true if the element is an instance of HTMLElement.
|
|
149
|
+
* @instance
|
|
150
|
+
* @function
|
|
151
|
+
* @name isDOM
|
|
152
|
+
* @private
|
|
153
|
+
* @type {Function}
|
|
154
|
+
* @param {any} element - The element to check.
|
|
155
|
+
* @returns {boolean}
|
|
156
|
+
*/
|
|
14
157
|
private isDOM;
|
|
158
|
+
/**
|
|
159
|
+
* adds a microcomponent to the private collection.
|
|
160
|
+
* @name add
|
|
161
|
+
* @instance
|
|
162
|
+
* @function
|
|
163
|
+
* @param {string} [key] - The key to identify the microcomponent.
|
|
164
|
+
* @param {any} [element={}] - The microcomponent to add.
|
|
165
|
+
* @returns {any} The added microcomponent.
|
|
166
|
+
* @example
|
|
167
|
+
* const privateComp = this.add('privateComponent', {});
|
|
168
|
+
*/
|
|
15
169
|
add(key?: string, element?: any): any;
|
|
170
|
+
/**
|
|
171
|
+
* removes a microcomponent from the private collection.
|
|
172
|
+
* @name remove
|
|
173
|
+
* @instance
|
|
174
|
+
* @function
|
|
175
|
+
* @param {string} [key] - The key to identify the microcomponent.
|
|
176
|
+
* @example
|
|
177
|
+
* this.remove('privateComponent');
|
|
178
|
+
*/
|
|
16
179
|
remove(key: string): void;
|
|
180
|
+
/**
|
|
181
|
+
* removes a microcomponent from the private collection.
|
|
182
|
+
* @name siblings
|
|
183
|
+
* @instance
|
|
184
|
+
* @function
|
|
185
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
186
|
+
* @returns {Array<any>} An array of matching sibling microcomponents.
|
|
187
|
+
* @example
|
|
188
|
+
* const siblings = this.siblings('siblingComponent');
|
|
189
|
+
*/
|
|
17
190
|
siblings(search?: string): any[];
|
|
191
|
+
/**
|
|
192
|
+
* retrieves the first ancestor DOM node with a matching microcomponent.
|
|
193
|
+
* @name parent
|
|
194
|
+
* @instance
|
|
195
|
+
* @function
|
|
196
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
197
|
+
* @returns {Array<any>} An array with the matching microcomponent.
|
|
198
|
+
* @example
|
|
199
|
+
* const parent = mcInstance.parent('parentComponent');
|
|
200
|
+
*/
|
|
201
|
+
/**
|
|
202
|
+
*/
|
|
18
203
|
parent(search?: string): any[];
|
|
204
|
+
/**
|
|
205
|
+
* retrieves the first ancestor DOM node with a matching microcomponent.
|
|
206
|
+
* @name parents
|
|
207
|
+
* @instance
|
|
208
|
+
* @function
|
|
209
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
210
|
+
* @returns {Array<any>} An array of matching ancestor microcomponents.
|
|
211
|
+
* @example
|
|
212
|
+
* const parents = mcInstance.parents('ancestorComponent');
|
|
213
|
+
*/
|
|
19
214
|
parents(search?: string): any[];
|
|
215
|
+
/**
|
|
216
|
+
* retrieves nearest child _mc DOM nodes, gets their matching microcomponents, and stops there.
|
|
217
|
+
* @name children
|
|
218
|
+
* @instance
|
|
219
|
+
* @function
|
|
220
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
221
|
+
* @returns {Array<any>} An array of matching child microcomponents.
|
|
222
|
+
* @example
|
|
223
|
+
* const children = mcInstance.children('childComponent');
|
|
224
|
+
*/
|
|
20
225
|
children(search?: string): any[];
|
|
226
|
+
/**
|
|
227
|
+
* retrieves all decendant _mc DOM nodes and gets their matching microcomponents.
|
|
228
|
+
* @name children
|
|
229
|
+
* @instance
|
|
230
|
+
* @function
|
|
231
|
+
* @param {string} [search] - The key of the specific microcomponent.
|
|
232
|
+
* @returns {Array<any>} An array of matching descendant microcomponents.
|
|
233
|
+
* @example
|
|
234
|
+
* const descendants = mcInstance.descendants('descendantComponent');
|
|
235
|
+
*/
|
|
21
236
|
descendants(search?: string): any[];
|
|
22
237
|
}
|
|
23
238
|
export interface HTMLElementMc extends HTMLElement {
|
|
24
239
|
_mc: MC;
|
|
25
240
|
}
|
|
241
|
+
export { MC };
|
|
26
242
|
//# sourceMappingURL=microcomponents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microcomponents.d.ts","sourceRoot":"","sources":["../src/microcomponents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"microcomponents.d.ts","sourceRoot":"","sources":["../src/microcomponents.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,cAAM,EAAE;IAEP,OAAO,CAAC,MAAM,CAAmD;IAE9D,OAAO,CAAC,UAAU,CAA8B;IAEzC,GAAG,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAM;IAEzC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAS;IAE9B;;;;OAIG;gBACU,MAAM,GAAE,WAAW,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAqB;IA0BjF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAO5D,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,GAAG,EAAE;IAiBtE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAcrD;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;;;;;;;OASG;IACH,OAAO,CAAC,KAAK;IAIhB;;;;;;;;;;OAUG;IACA,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,GAAG;IAO5C;;;;;;;;OAQG;IACA,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;;;;OASG;IACA,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAYnC;;;;;;;;;OASG;IACA;OACG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAK9B;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAK/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAWhC;;;;;;;;;OASG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;CAStC;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,EAAE,CAAC;CACR;AAED,OAAO,EAAE,EAAE,EAAE,CAAC"}
|