tree-element 0.1.1 → 0.3.0

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 (155) hide show
  1. package/README.md +43 -31
  2. package/lib/animation.d.ts +2 -2
  3. package/lib/animation.d.ts.map +1 -1
  4. package/lib/animation.js +16 -12
  5. package/lib/animation.js.map +1 -1
  6. package/lib/classNames.d.ts.map +1 -1
  7. package/lib/classNames.js +2 -2
  8. package/lib/classNames.js.map +1 -1
  9. package/lib/dataLoader.d.ts +1 -0
  10. package/lib/dataLoader.d.ts.map +1 -1
  11. package/lib/dataLoader.js +22 -20
  12. package/lib/dataLoader.js.map +1 -1
  13. package/lib/dragAndDropHandler/binarySearch.js +3 -3
  14. package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
  15. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  16. package/lib/dragAndDropHandler/dragElement.js +11 -13
  17. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  18. package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
  19. package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
  20. package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
  21. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  22. package/lib/dragAndDropHandler/index.js +125 -158
  23. package/lib/dragAndDropHandler/index.js.map +1 -1
  24. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  25. package/lib/dragAndDropHandler/iterateVisibleNodes.js +23 -22
  26. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  27. package/lib/dragAndDropHandler/types.d.ts.map +1 -1
  28. package/lib/elementsRenderer.d.ts +20 -7
  29. package/lib/elementsRenderer.d.ts.map +1 -1
  30. package/lib/elementsRenderer.js +195 -136
  31. package/lib/elementsRenderer.js.map +1 -1
  32. package/lib/events.d.ts +44 -11
  33. package/lib/events.d.ts.map +1 -1
  34. package/lib/index.d.ts +36 -13
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +386 -349
  37. package/lib/index.js.map +1 -1
  38. package/lib/keyHandler.d.ts +13 -8
  39. package/lib/keyHandler.d.ts.map +1 -1
  40. package/lib/keyHandler.js +106 -51
  41. package/lib/keyHandler.js.map +1 -1
  42. package/lib/methodTypes.d.ts +3 -3
  43. package/lib/methodTypes.d.ts.map +1 -1
  44. package/lib/mouseHandler.d.ts +1 -1
  45. package/lib/mouseHandler.d.ts.map +1 -1
  46. package/lib/mouseHandler.js +36 -49
  47. package/lib/mouseHandler.js.map +1 -1
  48. package/lib/mouseUtils.d.ts.map +1 -1
  49. package/lib/mouseUtils.js +2 -2
  50. package/lib/mouseUtils.js.map +1 -1
  51. package/lib/node.d.ts +47 -16
  52. package/lib/node.d.ts.map +1 -1
  53. package/lib/node.js +169 -171
  54. package/lib/node.js.map +1 -1
  55. package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
  56. package/lib/nodeElement/borderDropHint.js +4 -5
  57. package/lib/nodeElement/borderDropHint.js.map +1 -1
  58. package/lib/nodeElement/folderElement.d.ts +8 -5
  59. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  60. package/lib/nodeElement/folderElement.js +75 -67
  61. package/lib/nodeElement/folderElement.js.map +1 -1
  62. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  63. package/lib/nodeElement/ghostDropHint.js +13 -13
  64. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  65. package/lib/nodeElement/index.d.ts +2 -1
  66. package/lib/nodeElement/index.d.ts.map +1 -1
  67. package/lib/nodeElement/index.js +38 -30
  68. package/lib/nodeElement/index.js.map +1 -1
  69. package/lib/nodeUtils.d.ts.map +1 -1
  70. package/lib/nodeUtils.js +1 -1
  71. package/lib/nodeUtils.js.map +1 -1
  72. package/lib/options.d.ts +19 -3
  73. package/lib/options.d.ts.map +1 -1
  74. package/lib/positionUtils.js +3 -3
  75. package/lib/positionUtils.js.map +1 -1
  76. package/lib/requestUrl.d.ts +1 -1
  77. package/lib/requestUrl.d.ts.map +1 -1
  78. package/lib/requestUrl.js +6 -17
  79. package/lib/requestUrl.js.map +1 -1
  80. package/lib/saveStateHandler.d.ts.map +1 -1
  81. package/lib/saveStateHandler.js +59 -89
  82. package/lib/saveStateHandler.js.map +1 -1
  83. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  84. package/lib/scrollHandler/containerScrollParent.js +11 -18
  85. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  86. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  87. package/lib/scrollHandler/createScrollParent.js +12 -13
  88. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  89. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  90. package/lib/scrollHandler/documentScrollParent.js +18 -27
  91. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  92. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  93. package/lib/scrollHandler/scrollParent.js +30 -34
  94. package/lib/scrollHandler/scrollParent.js.map +1 -1
  95. package/lib/scrollHandler.d.ts.map +1 -1
  96. package/lib/scrollHandler.js +11 -14
  97. package/lib/scrollHandler.js.map +1 -1
  98. package/lib/selectNodeHandler.d.ts +4 -2
  99. package/lib/selectNodeHandler.d.ts.map +1 -1
  100. package/lib/selectNodeHandler.js +64 -83
  101. package/lib/selectNodeHandler.js.map +1 -1
  102. package/lib/setDefaultOptions.d.ts.map +1 -1
  103. package/lib/setDefaultOptions.js +34 -38
  104. package/lib/setDefaultOptions.js.map +1 -1
  105. package/lib/triggerCustomEvent.d.ts.map +1 -1
  106. package/lib/triggerCustomEvent.js +2 -2
  107. package/lib/triggerCustomEvent.js.map +1 -1
  108. package/lib/util.d.ts.map +1 -1
  109. package/lib/util.js +2 -2
  110. package/lib/util.js.map +1 -1
  111. package/lib/version.d.ts +1 -1
  112. package/lib/version.js +1 -1
  113. package/lib/version.js.map +1 -1
  114. package/package.json +43 -32
  115. package/src/animation.ts +14 -12
  116. package/src/classNames.ts +52 -52
  117. package/src/dataLoader.ts +79 -71
  118. package/src/dragAndDropHandler/binarySearch.ts +17 -17
  119. package/src/dragAndDropHandler/dragElement.ts +51 -50
  120. package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
  121. package/src/dragAndDropHandler/index.ts +334 -348
  122. package/src/dragAndDropHandler/iterateVisibleNodes.ts +61 -63
  123. package/src/dragAndDropHandler/types.ts +5 -5
  124. package/src/elementsRenderer.ts +377 -294
  125. package/src/events.ts +241 -208
  126. package/src/header.txt +1 -1
  127. package/src/index.ts +259 -229
  128. package/src/keyHandler.ts +179 -115
  129. package/src/methodTypes.ts +7 -10
  130. package/src/mouseHandler.ts +316 -316
  131. package/src/mouseUtils.ts +14 -14
  132. package/src/node.ts +773 -771
  133. package/src/nodeElement/borderDropHint.ts +25 -25
  134. package/src/nodeElement/folderElement.ts +116 -102
  135. package/src/nodeElement/ghostDropHint.ts +64 -62
  136. package/src/nodeElement/index.ts +81 -73
  137. package/src/nodeUtils.ts +5 -5
  138. package/src/options.ts +25 -5
  139. package/src/requestUrl.ts +7 -14
  140. package/src/saveStateHandler.ts +191 -207
  141. package/src/scrollHandler/containerScrollParent.ts +40 -49
  142. package/src/scrollHandler/createScrollParent.ts +26 -27
  143. package/src/scrollHandler/documentScrollParent.ts +66 -72
  144. package/src/scrollHandler/scrollParent.ts +90 -86
  145. package/src/scrollHandler.ts +45 -45
  146. package/src/selectNodeHandler.ts +171 -165
  147. package/src/setDefaultOptions.ts +44 -32
  148. package/src/triggerCustomEvent.ts +7 -3
  149. package/src/util.ts +2 -3
  150. package/src/version.ts +1 -1
  151. package/tree_element.css +87 -69
  152. package/tree_element.debug.js +3866 -3831
  153. package/tree_element.debug.js.map +1 -1
  154. package/tree_element.js +2 -2
  155. package/tree_element.js.map +1 -1
package/tree_element.css CHANGED
@@ -1,14 +1,31 @@
1
+ /*
2
+ Colors. Override them on :root or on an element around the tree, for example
3
+ for a dark theme. :where keeps the specificity at 0, so any rule wins.
4
+ --tree-element-selected-color defaults to --tree-element-title-color.
5
+ */
6
+ :where(:root) {
7
+ --tree-element-title-color: #1c4257;
8
+ --tree-element-toggler-color: #333;
9
+ --tree-element-toggler-hover-color: #000;
10
+ --tree-element-selected-background: linear-gradient(#bee0f5, #89afca);
11
+ --tree-element-selected-text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
12
+ --tree-element-drop-hint-color: #00f;
13
+ --tree-element-dragging-color: #fff;
14
+ --tree-element-dragging-background: #000;
15
+ }
16
+
1
17
  ul.tree-element {
2
18
  list-style: none outside;
3
19
  margin-left: 0;
4
20
  margin-bottom: 0;
5
21
  padding: 0;
22
+ }
6
23
 
7
- &.tree-element-dnd {
24
+ ul.tree-element.tree-element-dnd {
8
25
  touch-action: none;
9
26
  }
10
27
 
11
- ul.tree-element-common {
28
+ ul.tree-element ul.tree-element-common {
12
29
  list-style: none outside;
13
30
  margin-left: 12px;
14
31
  margin-right: 0;
@@ -17,81 +34,88 @@ ul.tree-element {
17
34
  display: block;
18
35
  }
19
36
 
20
- li.tree-element-closed > ul.tree-element-common {
37
+ ul.tree-element li.tree-element-closed > ul.tree-element-common {
21
38
  display: none;
22
39
  }
23
40
 
24
- li.tree-element-common {
41
+ ul.tree-element li.tree-element-common {
25
42
  clear: both;
26
43
  list-style-type: none;
27
44
  }
28
45
 
29
- .tree-element-toggler {
46
+ /* The toggler and the row are at least 24px: the WCAG minimum for
47
+ something you click. The space around the icon separates the toggler
48
+ from the title, so it has no margin. */
49
+
50
+ ul.tree-element .tree-element-toggler {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ box-sizing: border-box;
55
+ min-width: 24px;
56
+ min-height: 24px;
30
57
  border-bottom: none;
31
- color: #333;
58
+ color: var(--tree-element-toggler-color);
32
59
  text-decoration: none;
33
60
  vertical-align: middle;
61
+ }
34
62
 
35
- &:hover {
36
- color: #000;
63
+ ul.tree-element .tree-element-toggler:hover {
64
+ color: var(--tree-element-toggler-hover-color);
37
65
  text-decoration: none;
38
66
  }
39
67
 
40
- &.tree-element-closed {
68
+ ul.tree-element .tree-element-toggler.tree-element-closed {
41
69
  background-position: 0 0;
42
70
  }
43
71
 
44
- &.tree-element-toggler-left {
45
- margin-right: 0.5em;
46
- }
47
-
48
- &.tree-element-toggler-right {
49
- margin-left: 0.5em;
50
- }
51
- }
52
-
53
- .tree-element-element {
72
+ ul.tree-element .tree-element-element {
54
73
  cursor: pointer;
55
74
  position: relative;
56
75
  display: flex;
76
+ align-items: center;
77
+ min-height: 24px;
78
+ }
57
79
 
58
- &:has(.tree-element-title-button-right) {
80
+ ul.tree-element .tree-element-element:has(.tree-element-title-button-right) {
59
81
  display: block;
60
82
  }
61
- }
62
83
 
63
- .tree-element-title {
64
- color: #1c4257;
84
+ ul.tree-element .tree-element-title {
85
+ color: var(--tree-element-title-color);
65
86
  vertical-align: middle;
66
87
  }
67
88
 
68
- .tree-element-title-button-left {
69
- margin-left: 1.5em;
89
+ /* Line up with the titles of folders, after the toggler */
70
90
 
71
- &.tree-element-title-folder {
91
+ ul.tree-element .tree-element-title-button-left {
92
+ margin-left: 24px;
93
+ }
94
+
95
+ ul.tree-element .tree-element-title-button-left.tree-element-title-folder {
72
96
  margin-left: 0;
73
97
  }
74
- }
75
98
 
76
- li.tree-element-folder {
99
+ ul.tree-element li.tree-element-folder {
77
100
  margin-bottom: 4px;
101
+ }
78
102
 
79
- &.tree-element-closed {
103
+ ul.tree-element li.tree-element-folder.tree-element-closed {
80
104
  margin-bottom: 1px;
81
105
  }
82
- }
83
106
 
84
- li.tree-element-ghost {
107
+ ul.tree-element li.tree-element-ghost {
85
108
  position: relative;
86
109
  z-index: 10;
87
110
  margin-right: 10px;
111
+ }
88
112
 
89
- span {
113
+ ul.tree-element li.tree-element-ghost span {
90
114
  display: block;
91
115
  }
92
116
 
93
- span.tree-element-circle {
94
- border: solid 2px #0000ff;
117
+ ul.tree-element li.tree-element-ghost span.tree-element-circle {
118
+ border: solid 2px var(--tree-element-drop-hint-color);
95
119
  border-radius: 100px;
96
120
  height: 8px;
97
121
  width: 8px;
@@ -101,8 +125,8 @@ ul.tree-element {
101
125
  box-sizing: border-box;
102
126
  }
103
127
 
104
- span.tree-element-line {
105
- background-color: #0000ff;
128
+ ul.tree-element li.tree-element-ghost span.tree-element-line {
129
+ background-color: var(--tree-element-drop-hint-color);
106
130
  height: 2px;
107
131
  padding: 0;
108
132
  position: absolute;
@@ -111,85 +135,79 @@ ul.tree-element {
111
135
  width: 100%;
112
136
  }
113
137
 
114
- &.tree-element-inside {
138
+ ul.tree-element li.tree-element-ghost.tree-element-inside {
115
139
  margin-left: 48px;
116
140
  }
117
- }
118
141
 
119
- span.tree-element-border {
142
+ ul.tree-element span.tree-element-border {
120
143
  position: absolute;
121
144
  display: block;
122
145
  left: -2px;
123
146
  top: 0;
124
- border: solid 2px #0000ff;
147
+ border: solid 2px var(--tree-element-drop-hint-color);
125
148
  border-radius: 6px;
126
149
  margin: 0;
127
150
  box-sizing: content-box;
128
151
  }
129
152
 
130
- li.tree-element-selected > .tree-element-element,
131
- li.tree-element-selected > .tree-element-element:hover {
132
- background-color: #97bdd6;
133
- background: linear-gradient(#bee0f5, #89afca);
134
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
153
+ ul.tree-element li.tree-element-selected > .tree-element-element,
154
+ ul.tree-element li.tree-element-selected > .tree-element-element:hover {
155
+ background: var(--tree-element-selected-background);
156
+ text-shadow: var(--tree-element-selected-text-shadow);
135
157
  }
136
158
 
137
- .tree-element-moving > .tree-element-element .tree-element-title {
138
- outline: dashed 1px #0000ff;
159
+ ul.tree-element li.tree-element-selected > .tree-element-element .tree-element-title {
160
+ color: var(--tree-element-selected-color, var(--tree-element-title-color));
161
+ }
162
+
163
+ ul.tree-element .tree-element-moving > .tree-element-element .tree-element-title {
164
+ outline: dashed 1px var(--tree-element-drop-hint-color);
139
165
  }
140
- }
141
166
 
142
167
  ul.tree-element.tree-element-rtl {
143
168
  direction: rtl;
169
+ }
144
170
 
145
- ul.tree-element-common {
171
+ ul.tree-element.tree-element-rtl ul.tree-element-common {
146
172
  margin-left: 0;
147
173
  margin-right: 12px;
148
174
  }
149
175
 
150
- .tree-element-toggler {
151
- margin-left: 0.5em;
152
- margin-right: 0;
153
- }
154
-
155
- .tree-element-title {
176
+ ul.tree-element.tree-element-rtl .tree-element-title {
156
177
  margin-left: 0;
157
- margin-right: 1.5em;
178
+ margin-right: 24px;
179
+ }
158
180
 
159
- &.tree-element-title-folder {
181
+ ul.tree-element.tree-element-rtl .tree-element-title.tree-element-title-folder {
160
182
  margin-right: 0;
161
183
  }
162
- }
163
184
 
164
- li.tree-element-ghost {
185
+ ul.tree-element.tree-element-rtl li.tree-element-ghost {
165
186
  margin-right: 0;
166
187
  margin-left: 10px;
188
+ }
167
189
 
168
- span.tree-element-circle {
190
+ ul.tree-element.tree-element-rtl li.tree-element-ghost span.tree-element-circle {
169
191
  right: -6px;
170
192
  }
171
193
 
172
- span.tree-element-line {
194
+ ul.tree-element.tree-element-rtl li.tree-element-ghost span.tree-element-line {
173
195
  right: 2px;
174
196
  }
175
197
 
176
- &.tree-element-inside {
198
+ ul.tree-element.tree-element-rtl li.tree-element-ghost.tree-element-inside {
177
199
  margin-left: 0;
178
200
  margin-right: 48px;
179
201
  }
180
- }
181
202
 
182
- span.tree-element-border {
203
+ ul.tree-element.tree-element-rtl span.tree-element-border {
183
204
  right: -2px;
184
205
  }
185
- }
186
206
 
187
207
  span.tree-element-dragging {
188
- color: #fff;
189
- background: #000;
208
+ color: var(--tree-element-dragging-color);
209
+ background: var(--tree-element-dragging-background);
190
210
  opacity: 0.6;
191
211
  cursor: pointer;
192
212
  padding: 2px 8px;
193
213
  }
194
-
195
- /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy90cmVlX2VsZW1lbnQucG9zdGNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJ0cmVlX2VsZW1lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsidWwudHJlZS1lbGVtZW50IHtcbiAgbGlzdC1zdHlsZTogbm9uZSBvdXRzaWRlO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcblxuICAmLnRyZWUtZWxlbWVudC1kbmQge1xuICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbiAgfVxuXG4gIHVsLnRyZWUtZWxlbWVudC1jb21tb24ge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmUgb3V0c2lkZTtcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgbGkudHJlZS1lbGVtZW50LWNsb3NlZCA+IHVsLnRyZWUtZWxlbWVudC1jb21tb24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICBsaS50cmVlLWVsZW1lbnQtY29tbW9uIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIH1cblxuICAudHJlZS1lbGVtZW50LXRvZ2dsZXIge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgICYudHJlZS1lbGVtZW50LWNsb3NlZCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gICAgfVxuXG4gICAgJi50cmVlLWVsZW1lbnQtdG9nZ2xlci1sZWZ0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMC41ZW07XG4gICAgfVxuXG4gICAgJi50cmVlLWVsZW1lbnQtdG9nZ2xlci1yaWdodCB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgfVxuICB9XG5cbiAgLnRyZWUtZWxlbWVudC1lbGVtZW50IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAmOmhhcygudHJlZS1lbGVtZW50LXRpdGxlLWJ1dHRvbi1yaWdodCkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLnRyZWUtZWxlbWVudC10aXRsZSB7XG4gICAgY29sb3I6ICMxYzQyNTc7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC50cmVlLWVsZW1lbnQtdGl0bGUtYnV0dG9uLWxlZnQge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjVlbTtcblxuICAgICYudHJlZS1lbGVtZW50LXRpdGxlLWZvbGRlciB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG4gIH1cblxuICBsaS50cmVlLWVsZW1lbnQtZm9sZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG5cbiAgICAmLnRyZWUtZWxlbWVudC1jbG9zZWQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgIH1cbiAgfVxuXG4gIGxpLnRyZWUtZWxlbWVudC1naG9zdCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcblxuICAgIHNwYW4ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgc3Bhbi50cmVlLWVsZW1lbnQtY2lyY2xlIHtcbiAgICAgIGJvcmRlcjogc29saWQgMnB4ICMwMDAwZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTRweDtcbiAgICAgIGxlZnQ6IC02cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIHNwYW4udHJlZS1lbGVtZW50LWxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBmZjtcbiAgICAgIGhlaWdodDogMnB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTFweDtcbiAgICAgIGxlZnQ6IDJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICYudHJlZS1lbGVtZW50LWluc2lkZSB7XG4gICAgICBtYXJnaW4tbGVmdDogNDhweDtcbiAgICB9XG4gIH1cblxuICBzcGFuLnRyZWUtZWxlbWVudC1ib3JkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsZWZ0OiAtMnB4O1xuICAgIHRvcDogMDtcbiAgICBib3JkZXI6IHNvbGlkIDJweCAjMDAwMGZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBtYXJnaW46IDA7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIH1cblxuICBsaS50cmVlLWVsZW1lbnQtc2VsZWN0ZWQgPiAudHJlZS1lbGVtZW50LWVsZW1lbnQsXG4gIGxpLnRyZWUtZWxlbWVudC1zZWxlY3RlZCA+IC50cmVlLWVsZW1lbnQtZWxlbWVudDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzk3YmRkNjtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2JlZTBmNSwgIzg5YWZjYSk7XG4gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICB9XG5cbiAgLnRyZWUtZWxlbWVudC1tb3ZpbmcgPiAudHJlZS1lbGVtZW50LWVsZW1lbnQgLnRyZWUtZWxlbWVudC10aXRsZSB7XG4gICAgb3V0bGluZTogZGFzaGVkIDFweCAjMDAwMGZmO1xuICB9XG59XG5cbnVsLnRyZWUtZWxlbWVudC50cmVlLWVsZW1lbnQtcnRsIHtcbiAgZGlyZWN0aW9uOiBydGw7XG5cbiAgdWwudHJlZS1lbGVtZW50LWNvbW1vbiB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuICB9XG5cbiAgLnRyZWUtZWxlbWVudC10b2dnbGVyIHtcbiAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG5cbiAgLnRyZWUtZWxlbWVudC10aXRsZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTtcblxuICAgICYudHJlZS1lbGVtZW50LXRpdGxlLWZvbGRlciB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgbGkudHJlZS1lbGVtZW50LWdob3N0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG5cbiAgICBzcGFuLnRyZWUtZWxlbWVudC1jaXJjbGUge1xuICAgICAgcmlnaHQ6IC02cHg7XG4gICAgfVxuXG4gICAgc3Bhbi50cmVlLWVsZW1lbnQtbGluZSB7XG4gICAgICByaWdodDogMnB4O1xuICAgIH1cblxuICAgICYudHJlZS1lbGVtZW50LWluc2lkZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogNDhweDtcbiAgICB9XG4gIH1cblxuICBzcGFuLnRyZWUtZWxlbWVudC1ib3JkZXIge1xuICAgIHJpZ2h0OiAtMnB4O1xuICB9XG59XG5cbnNwYW4udHJlZS1lbGVtZW50LWRyYWdnaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6ICMwMDA7XG4gIG9wYWNpdHk6IDAuNjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAycHggOHB4O1xufVxuIl19 */