@twobirds/microcomponents 0.0.4 → 0.0.7
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 +85 -36
- 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_functional_requirements.md +8 -0
- package/microcomponents_usage.md +56 -24
- 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 +18 -16
- 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,28 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
This code aims at
|
|
5
|
+
**This code aims at improving Javascript modularity and encapsulation**.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Micro Components function similar to node_modules, as MCs can contain other MCs recursivly.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
So importing a custom MC in your client side code like this:
|
|
10
|
+
```javascript
|
|
11
|
+
import MyButton from '@mySampleLib/Button';
|
|
12
|
+
```
|
|
13
|
+
... and is equivalent to:
|
|
14
|
+
```javascript
|
|
15
|
+
npm i @mySampleLib/Button;
|
|
16
|
+
```
|
|
17
|
+
... on the server side.
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
**On the client side** MCs reside inside DOM nodes (instanceof HTMLElement) in a special "_mc" property, or inside each other. Usually they provide a direct interface to their inner code.
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
**On the server side** MCs can be used to organize your code, too.
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
## Disclaimer
|
|
24
|
+
This is a massive undertaking. MCs are just the foundation of what I do. I am about to **dump** [20+ years of javascript programming](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_magic.md?ref_type=heads#things-i-already-did-with-this-in-my-own-framework-twobirds-or-in-apps-that-i-developed-with-it) **into open source libraries**, so feel free to [fund this](https://gofund.me/076c614c). The better this is funded, the faster it will be done. Given enough resources, I will start a crowdfunded company that will develop a new ecosystem for javascript/typescript programming.
|
|
25
|
+
|
|
26
|
+
By **"Open Source"** I mean **really free and open**, as **you get all my inner source code with it**. Once you understand the Micro Component principle, you are back in command of your software, no matter what MC functionality you import in your system. Since **Micro Components** are encapsuled, off-shoring and near-shoring is no problem, and reusability is guaranteed. Your external coders do not need to access your code repository or your toolchain. They only need to understand MCs.
|
|
27
|
+
|
|
28
|
+
Established frameworks provide a documented interface to a hidden layer of closed source inner functionality. MCs can be used to **add an interface to components you developed using other frameworks**. So you can still use your existing code. But you will want to migrate it ASAP, since MCs work with any FW.
|
|
29
|
+
|
|
30
|
+
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.
|
|
16
31
|
|
|
32
|
+
## Status
|
|
33
|
+
WIP. Micro components should be done soon, as in days.
|
|
17
34
|
|
|
18
|
-
##
|
|
35
|
+
## General
|
|
19
36
|
|
|
20
|
-
|
|
21
|
-
- I want to have an **interface** into this functionality that I can both tight and loosely couple.
|
|
22
|
-
- I want to **import and use Micro Components in any framework** that allows for direct DOM access.
|
|
23
|
-
- I want **a single location** in an HTMLElement instance where all this functionality is **stored and sufficiently organized**.
|
|
24
|
-
- I want to be able to use **selectors** to find those instances in the DOM.
|
|
25
|
-
- All this must stricly follow **web standards**.
|
|
37
|
+
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).
|
|
26
38
|
|
|
39
|
+
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.
|
|
40
|
+
|
|
41
|
+
For a short usage description goto [Micro Component Usage](https://gitlab.com/twoBirds/microcomponents/-/blob/main/microcomponents_usage.md?ref_type=heads).
|
|
42
|
+
|
|
43
|
+
Check the [typedoc API reference](http://twobirds.gitlab.io/microcomponents/docs/modules.html) if you want to drill into the source code.
|
|
44
|
+
|
|
45
|
+
Or read the more detailed [jsdoc API documentation](http://twobirds.gitlab.io/microcomponents/jsdoc/es5+/index.html) which contains **examples**.
|
|
46
|
+
|
|
47
|
+
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.
|
|
27
48
|
|
|
28
49
|
## Simple Usage:
|
|
29
50
|
|
|
@@ -31,40 +52,68 @@ To see what can be done, go to [additional concepts](https://gitlab.com/twoBirds
|
|
|
31
52
|
|
|
32
53
|
before:
|
|
33
54
|
```HTML
|
|
34
|
-
<
|
|
55
|
+
<div></div>
|
|
35
56
|
```
|
|
36
57
|
|
|
37
|
-
code:
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
|
|
58
|
+
code:
|
|
59
|
+
```typescript
|
|
60
|
+
// create an inner micro component class
|
|
61
|
+
class MyInnerMC extends MC{
|
|
41
62
|
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
constructor( target ){
|
|
64
|
+
super( target );
|
|
65
|
+
}
|
|
44
66
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
67
|
+
doSomething(){
|
|
68
|
+
console.log( this, 'something done' )
|
|
69
|
+
}
|
|
70
|
+
}
|
|
48
71
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<button _mc></button>
|
|
52
|
-
```
|
|
53
|
-
_mc indicates that this HTML element contains at least one micro component. This is needed for the **selectors**.
|
|
72
|
+
// create a custom micro component class
|
|
73
|
+
class MyMC extends MC{
|
|
54
74
|
|
|
75
|
+
private myInner: MyInnerMC;
|
|
55
76
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```
|
|
77
|
+
constructor( target ){
|
|
78
|
+
super( target );
|
|
79
|
+
this.target = target;
|
|
60
80
|
|
|
61
|
-
|
|
81
|
+
//add a private inner micro component
|
|
82
|
+
this.myInner = new MyInnerMC( target );
|
|
62
83
|
|
|
63
|
-
|
|
84
|
+
//add a public micro component
|
|
85
|
+
this.add(
|
|
86
|
+
'myPublicInnerMC',
|
|
87
|
+
new MyInnerMC( target )
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// get some element from the DOM
|
|
93
|
+
const element = document.querySelector('div')
|
|
94
|
+
|
|
95
|
+
// Add the custom micro component instance to the target element
|
|
96
|
+
let topLevelMC = MC.add(
|
|
97
|
+
element,
|
|
98
|
+
'myMC',
|
|
99
|
+
new MyMC( element )
|
|
100
|
+
);
|
|
64
101
|
|
|
65
|
-
|
|
102
|
+
console.log( element._mc );
|
|
103
|
+
// { 'myMC': { target: (element), _mc: { myPublicInnerMC: {...} } } }
|
|
66
104
|
|
|
67
|
-
|
|
105
|
+
console.log( element._mc.myMC );
|
|
106
|
+
// { target: (element), _mc: { myPublicInnerMC: {...} } }
|
|
107
|
+
|
|
108
|
+
console.log( topLevelMC.siblings() );
|
|
109
|
+
// [ { target: (element), _mc: { myPublicInnerMC: {...} } } ]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
after:
|
|
113
|
+
```HTML
|
|
114
|
+
<div _mc></button>
|
|
115
|
+
```
|
|
116
|
+
_mc indicates that this HTML element contains at least one micro component. This is needed for the **selectors**.
|
|
68
117
|
|
|
69
118
|
## Contact
|
|
70
119
|
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"}
|