glass-easel 0.1.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 (237) hide show
  1. package/README.md +40 -0
  2. package/dist/glass_easel.all.d.ts +1 -0
  3. package/dist/glass_easel.all.js +2 -0
  4. package/dist/glass_easel.all.js.map +1 -0
  5. package/dist/glass_easel.domlike.global.d.ts +1 -0
  6. package/dist/glass_easel.domlike.global.js +2 -0
  7. package/dist/glass_easel.domlike.global.js.map +1 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +1 -0
  10. package/dist/types/src/backend/backend_protocol.d.ts +119 -0
  11. package/dist/types/src/backend/backend_protocol.d.ts.map +1 -0
  12. package/dist/types/src/backend/composed_backend_protocol.d.ts +90 -0
  13. package/dist/types/src/backend/composed_backend_protocol.d.ts.map +1 -0
  14. package/dist/types/src/backend/domlike_backend_protocol.d.ts +76 -0
  15. package/dist/types/src/backend/domlike_backend_protocol.d.ts.map +1 -0
  16. package/dist/types/src/backend/mode.d.ts +46 -0
  17. package/dist/types/src/backend/mode.d.ts.map +1 -0
  18. package/dist/types/src/backend/suggested_backend_protocol.d.ts +30 -0
  19. package/dist/types/src/backend/suggested_backend_protocol.d.ts.map +1 -0
  20. package/dist/types/src/behavior.d.ts +428 -0
  21. package/dist/types/src/behavior.d.ts.map +1 -0
  22. package/dist/types/src/class_list.d.ts +79 -0
  23. package/dist/types/src/class_list.d.ts.map +1 -0
  24. package/dist/types/src/component.d.ts +291 -0
  25. package/dist/types/src/component.d.ts.map +1 -0
  26. package/dist/types/src/component_params.d.ts +239 -0
  27. package/dist/types/src/component_params.d.ts.map +1 -0
  28. package/dist/types/src/component_space.d.ts +164 -0
  29. package/dist/types/src/component_space.d.ts.map +1 -0
  30. package/dist/types/src/data_path.d.ts +5 -0
  31. package/dist/types/src/data_path.d.ts.map +1 -0
  32. package/dist/types/src/data_proxy.d.ts +107 -0
  33. package/dist/types/src/data_proxy.d.ts.map +1 -0
  34. package/dist/types/src/data_utils.d.ts +3 -0
  35. package/dist/types/src/data_utils.d.ts.map +1 -0
  36. package/dist/types/src/element.d.ts +275 -0
  37. package/dist/types/src/element.d.ts.map +1 -0
  38. package/dist/types/src/element_iterator.d.ts +43 -0
  39. package/dist/types/src/element_iterator.d.ts.map +1 -0
  40. package/dist/types/src/event.d.ts +104 -0
  41. package/dist/types/src/event.d.ts.map +1 -0
  42. package/dist/types/src/external_shadow_tree.d.ts +20 -0
  43. package/dist/types/src/external_shadow_tree.d.ts.map +1 -0
  44. package/dist/types/src/func_arr.d.ts +39 -0
  45. package/dist/types/src/func_arr.d.ts.map +1 -0
  46. package/dist/types/src/global_options.d.ts +111 -0
  47. package/dist/types/src/global_options.d.ts.map +1 -0
  48. package/dist/types/src/index.d.ts +43 -0
  49. package/dist/types/src/index.d.ts.map +1 -0
  50. package/dist/types/src/mutation_observer.d.ts +79 -0
  51. package/dist/types/src/mutation_observer.d.ts.map +1 -0
  52. package/dist/types/src/native_node.d.ts +8 -0
  53. package/dist/types/src/native_node.d.ts.map +1 -0
  54. package/dist/types/src/node.d.ts +49 -0
  55. package/dist/types/src/node.d.ts.map +1 -0
  56. package/dist/types/src/relation.d.ts +47 -0
  57. package/dist/types/src/relation.d.ts.map +1 -0
  58. package/dist/types/src/render.d.ts +3 -0
  59. package/dist/types/src/render.d.ts.map +1 -0
  60. package/dist/types/src/selector.d.ts +32 -0
  61. package/dist/types/src/selector.d.ts.map +1 -0
  62. package/dist/types/src/shadow_root.d.ts +136 -0
  63. package/dist/types/src/shadow_root.d.ts.map +1 -0
  64. package/dist/types/src/template_engine.d.ts +18 -0
  65. package/dist/types/src/template_engine.d.ts.map +1 -0
  66. package/dist/types/src/text_node.d.ts +32 -0
  67. package/dist/types/src/text_node.d.ts.map +1 -0
  68. package/dist/types/src/tmpl/index.d.ts +18 -0
  69. package/dist/types/src/tmpl/index.d.ts.map +1 -0
  70. package/dist/types/src/tmpl/native_rendering.d.ts +45 -0
  71. package/dist/types/src/tmpl/native_rendering.d.ts.map +1 -0
  72. package/dist/types/src/tmpl/proc_gen_wrapper.d.ts +80 -0
  73. package/dist/types/src/tmpl/proc_gen_wrapper.d.ts.map +1 -0
  74. package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts +50 -0
  75. package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts.map +1 -0
  76. package/dist/types/src/tmpl/range_list_diff.d.ts +19 -0
  77. package/dist/types/src/tmpl/range_list_diff.d.ts.map +1 -0
  78. package/dist/types/src/trait_behaviors.d.ts +38 -0
  79. package/dist/types/src/trait_behaviors.d.ts.map +1 -0
  80. package/dist/types/src/virtual_node.d.ts +10 -0
  81. package/dist/types/src/virtual_node.d.ts.map +1 -0
  82. package/dist/types/tests/backend/domlike.test.d.ts +2 -0
  83. package/dist/types/tests/backend/domlike.test.d.ts.map +1 -0
  84. package/dist/types/tests/base/env.d.ts +29 -0
  85. package/dist/types/tests/base/env.d.ts.map +1 -0
  86. package/dist/types/tests/base/match.d.ts +9 -0
  87. package/dist/types/tests/base/match.d.ts.map +1 -0
  88. package/dist/types/tests/core/backend.test.d.ts +2 -0
  89. package/dist/types/tests/core/backend.test.d.ts.map +1 -0
  90. package/dist/types/tests/core/behavior.test.d.ts +2 -0
  91. package/dist/types/tests/core/behavior.test.d.ts.map +1 -0
  92. package/dist/types/tests/core/component_space.test.d.ts +2 -0
  93. package/dist/types/tests/core/component_space.test.d.ts.map +1 -0
  94. package/dist/types/tests/core/data_update.test.d.ts +2 -0
  95. package/dist/types/tests/core/data_update.test.d.ts.map +1 -0
  96. package/dist/types/tests/core/misc.test.d.ts +2 -0
  97. package/dist/types/tests/core/misc.test.d.ts.map +1 -0
  98. package/dist/types/tests/core/placeholder.test.d.ts +2 -0
  99. package/dist/types/tests/core/placeholder.test.d.ts.map +1 -0
  100. package/dist/types/tests/core/slot.test.d.ts +2 -0
  101. package/dist/types/tests/core/slot.test.d.ts.map +1 -0
  102. package/dist/types/tests/core/trait_behaviors.test.d.ts +2 -0
  103. package/dist/types/tests/core/trait_behaviors.test.d.ts.map +1 -0
  104. package/dist/types/tests/tmpl/binding_map.test.d.ts +2 -0
  105. package/dist/types/tests/tmpl/binding_map.test.d.ts.map +1 -0
  106. package/dist/types/tests/tmpl/event.test.d.ts +2 -0
  107. package/dist/types/tests/tmpl/event.test.d.ts.map +1 -0
  108. package/dist/types/tests/tmpl/expression.test.d.ts +2 -0
  109. package/dist/types/tests/tmpl/expression.test.d.ts.map +1 -0
  110. package/dist/types/tests/tmpl/lvalue.test.d.ts +2 -0
  111. package/dist/types/tests/tmpl/lvalue.test.d.ts.map +1 -0
  112. package/dist/types/tests/tmpl/native_rendering.test.d.ts +2 -0
  113. package/dist/types/tests/tmpl/native_rendering.test.d.ts.map +1 -0
  114. package/dist/types/tests/tmpl/structure.test.d.ts +2 -0
  115. package/dist/types/tests/tmpl/structure.test.d.ts.map +1 -0
  116. package/dist/types/tests/types/chaining.test.d.ts +2 -0
  117. package/dist/types/tests/types/chaining.test.d.ts.map +1 -0
  118. package/dist/types/tests/types/createElement.test.d.ts +2 -0
  119. package/dist/types/tests/types/createElement.test.d.ts.map +1 -0
  120. package/dist/types/tests/types/definition.test.d.ts +2 -0
  121. package/dist/types/tests/types/definition.test.d.ts.map +1 -0
  122. package/guide/zh_CN/advanced/binding_map_update.md +32 -0
  123. package/guide/zh_CN/advanced/build_args.md +28 -0
  124. package/guide/zh_CN/advanced/component_filter.md +70 -0
  125. package/guide/zh_CN/advanced/component_space.md +124 -0
  126. package/guide/zh_CN/advanced/custom_backend.md +53 -0
  127. package/guide/zh_CN/advanced/error_listener.md +32 -0
  128. package/guide/zh_CN/advanced/external_component.md +73 -0
  129. package/guide/zh_CN/advanced/template_engine.md +61 -0
  130. package/guide/zh_CN/appendix/backend_protocol.md +501 -0
  131. package/guide/zh_CN/appendix/list_diff_algorithm.md +406 -0
  132. package/guide/zh_CN/basic/beginning.md +94 -0
  133. package/guide/zh_CN/basic/component.md +156 -0
  134. package/guide/zh_CN/basic/event.md +169 -0
  135. package/guide/zh_CN/basic/lifetime.md +66 -0
  136. package/guide/zh_CN/basic/method.md +62 -0
  137. package/guide/zh_CN/basic/template.md +135 -0
  138. package/guide/zh_CN/data_management/advanced_update.md +170 -0
  139. package/guide/zh_CN/data_management/data_deep_copy.md +157 -0
  140. package/guide/zh_CN/data_management/data_observer.md +154 -0
  141. package/guide/zh_CN/data_management/property_early_init.md +31 -0
  142. package/guide/zh_CN/data_management/pure_data_pattern.md +21 -0
  143. package/guide/zh_CN/index.md +93 -0
  144. package/guide/zh_CN/interaction/behavior.md +52 -0
  145. package/guide/zh_CN/interaction/component_path.md +37 -0
  146. package/guide/zh_CN/interaction/generic.md +73 -0
  147. package/guide/zh_CN/interaction/placeholder.md +40 -0
  148. package/guide/zh_CN/interaction/relation.md +151 -0
  149. package/guide/zh_CN/interaction/slot.md +137 -0
  150. package/guide/zh_CN/interaction/template_import.md +94 -0
  151. package/guide/zh_CN/interaction/trait_behavior.md +117 -0
  152. package/guide/zh_CN/styling/external_class.md +46 -0
  153. package/guide/zh_CN/styling/style_isolation.md +54 -0
  154. package/guide/zh_CN/styling/virtual_host.md +52 -0
  155. package/guide/zh_CN/tree/element_iterator.md +54 -0
  156. package/guide/zh_CN/tree/mutation_observer.md +52 -0
  157. package/guide/zh_CN/tree/node_tree.md +142 -0
  158. package/guide/zh_CN/tree/node_tree_modification.md +78 -0
  159. package/guide/zh_CN/tree/selector.md +66 -0
  160. package/jest.config.js +6 -0
  161. package/jest.dts.config.js +9 -0
  162. package/jest.unit.config.js +14 -0
  163. package/package.json +28 -0
  164. package/src/backend/backend_protocol.ts +313 -0
  165. package/src/backend/composed_backend_protocol.ts +252 -0
  166. package/src/backend/domlike_backend_protocol.ts +370 -0
  167. package/src/backend/mode.ts +51 -0
  168. package/src/backend/suggested_backend_protocol.ts +83 -0
  169. package/src/behavior.ts +1655 -0
  170. package/src/bootstrap_dom_dev.js +22 -0
  171. package/src/class_list.ts +376 -0
  172. package/src/component.ts +1309 -0
  173. package/src/component_params.ts +461 -0
  174. package/src/component_space.ts +547 -0
  175. package/src/data_path.ts +225 -0
  176. package/src/data_proxy.ts +670 -0
  177. package/src/data_utils.ts +50 -0
  178. package/src/element.ts +1966 -0
  179. package/src/element_iterator.ts +158 -0
  180. package/src/event.ts +401 -0
  181. package/src/external_shadow_tree.ts +27 -0
  182. package/src/func_arr.ts +198 -0
  183. package/src/global_options.ts +242 -0
  184. package/src/index.ts +187 -0
  185. package/src/mutation_observer.ts +252 -0
  186. package/src/native_node.ts +74 -0
  187. package/src/node.ts +174 -0
  188. package/src/relation.ts +380 -0
  189. package/src/render.ts +25 -0
  190. package/src/selector.ts +218 -0
  191. package/src/shadow_root.ts +766 -0
  192. package/src/template_engine.ts +45 -0
  193. package/src/text_node.ts +149 -0
  194. package/src/tmpl/index.ts +199 -0
  195. package/src/tmpl/native_rendering.ts +175 -0
  196. package/src/tmpl/proc_gen_wrapper.ts +954 -0
  197. package/src/tmpl/proc_gen_wrapper_dom.ts +230 -0
  198. package/src/tmpl/range_list_diff.ts +443 -0
  199. package/src/trait_behaviors.ts +51 -0
  200. package/src/virtual_node.ts +51 -0
  201. package/tests/backend/domlike.test.ts +254 -0
  202. package/tests/base/env.ts +78 -0
  203. package/tests/base/match.ts +185 -0
  204. package/tests/core/backend.test.ts +144 -0
  205. package/tests/core/behavior.test.ts +546 -0
  206. package/tests/core/component_space.test.ts +212 -0
  207. package/tests/core/data_update.test.ts +461 -0
  208. package/tests/core/misc.test.ts +339 -0
  209. package/tests/core/placeholder.test.ts +180 -0
  210. package/tests/core/slot.test.ts +1495 -0
  211. package/tests/core/trait_behaviors.test.ts +153 -0
  212. package/tests/legacy/README.md +3 -0
  213. package/tests/legacy/behavior.test.js +293 -0
  214. package/tests/legacy/component.test.js +1247 -0
  215. package/tests/legacy/data_path.test.js +149 -0
  216. package/tests/legacy/data_proxy.test.js +759 -0
  217. package/tests/legacy/element_iterator.test.js +148 -0
  218. package/tests/legacy/event.test.js +849 -0
  219. package/tests/legacy/external.test.js +510 -0
  220. package/tests/legacy/extra_info.test.js +109 -0
  221. package/tests/legacy/generics.test.js +176 -0
  222. package/tests/legacy/mutation_observer.test.js +210 -0
  223. package/tests/legacy/relation.test.js +517 -0
  224. package/tests/legacy/selector.test.js +263 -0
  225. package/tests/legacy/slot.test.js +915 -0
  226. package/tests/legacy/virtual.test.js +394 -0
  227. package/tests/tmpl/binding_map.test.ts +208 -0
  228. package/tests/tmpl/event.test.ts +206 -0
  229. package/tests/tmpl/expression.test.ts +429 -0
  230. package/tests/tmpl/lvalue.test.ts +160 -0
  231. package/tests/tmpl/native_rendering.test.ts +155 -0
  232. package/tests/tmpl/structure.test.ts +998 -0
  233. package/tests/types/chaining.test.ts +614 -0
  234. package/tests/types/createElement.test.ts +82 -0
  235. package/tests/types/definition.test.ts +442 -0
  236. package/tsconfig.json +11 -0
  237. package/webpack.config.js +270 -0
@@ -0,0 +1,313 @@
1
+ /* eslint-disable class-methods-use-this */
2
+
3
+ import {
4
+ safeCallback,
5
+ } from '../func_arr'
6
+ import {
7
+ EventOptions,
8
+ EventBubbleStatus,
9
+ } from '../event'
10
+ import {
11
+ BackendMode,
12
+ BoundingClientRect,
13
+ ScrollOffset,
14
+ } from './mode'
15
+
16
+ export interface Context {
17
+ mode: BackendMode.Shadow
18
+ destroy(): void
19
+ getWindowWidth(): number
20
+ getWindowHeight(): number
21
+ getDevicePixelRatio(): number
22
+ getTheme(): string
23
+ registerStyleSheetContent(path: string, content: unknown): void
24
+ appendStyleSheetPath(path: string, styleScope?: number): number
25
+ disableStyleSheet(index: number): void
26
+ render(cb: (err: Error | null) => void): void
27
+ getRootNode(): Element
28
+ createFragment(): Element
29
+ onEvent(listener: (
30
+ target: unknown,
31
+ type: string,
32
+ detail: unknown,
33
+ options: EventOptions,
34
+ ) => EventBubbleStatus): void
35
+ }
36
+
37
+ export interface Element {
38
+ release(): void
39
+ associateValue(v: unknown): void
40
+ getShadowRoot(): ShadowRootContext | undefined
41
+ appendChild(child: Element): void
42
+ removeChild(child: Element, index?: number): void
43
+ insertBefore(child: Element, before: Element, index?: number): void
44
+ replaceChild(child: Element, oldChild: Element, index?: number): void
45
+ spliceBefore(before: Element, deleteCount: number, list: Element): void
46
+ spliceAppend(list: Element): void
47
+ spliceRemove(before: Element, deleteCount: number): void
48
+ setId(id: string): void
49
+ setSlotName(slot: string): void
50
+ setSlot(name: string, inherit: boolean): void
51
+ setStyleScope(styleScope: number): void
52
+ setStyle(styleText: string): void
53
+ addClass(elementClass: string, styleScope?: number): void
54
+ removeClass(elementClass: string, styleScope?: number): void
55
+ clearClasses(): void
56
+ setAttribute(name: string, value: unknown): void
57
+ removeAttribute(name: string): void
58
+ setText(content: string): void
59
+ getBoundingClientRect(cb: (res: BoundingClientRect) => void): void
60
+ getScrollOffset(cb: (res: ScrollOffset) => void): void
61
+ setEventDefaultPrevented(type: string, enabled: boolean): void
62
+ __wxElement?: unknown
63
+ }
64
+
65
+ export interface ShadowRootContext {
66
+ getRootNode(): Element
67
+ createElement(tagName: string): Element
68
+ createTextNode(content: string): Element
69
+ createComponent(tagName: string, isVirtual: boolean): Element
70
+ createVirtualNode(): Element
71
+ }
72
+
73
+ const enum EmptyBackendElementType {
74
+ Fragment,
75
+ Element,
76
+ TextNode,
77
+ Component,
78
+ VirtualNode,
79
+ }
80
+
81
+ /** An empty backend implementation */
82
+ export class EmptyBackendContext implements Context {
83
+ mode: BackendMode.Shadow = BackendMode.Shadow
84
+ private _$styleSheetIdInc = 1
85
+ private _$renderCallbacks: ((err: Error) => void)[] | null = null
86
+ private _$rootNode: EmptyBackendElement = new EmptyBackendElement(
87
+ EmptyBackendElementType.Component,
88
+ )
89
+
90
+ destroy(): void {
91
+ // empty
92
+ }
93
+
94
+ getWindowWidth(): number {
95
+ return 1
96
+ }
97
+
98
+ getWindowHeight(): number {
99
+ return 1
100
+ }
101
+
102
+ getDevicePixelRatio(): number {
103
+ return 1
104
+ }
105
+
106
+ getTheme(): string {
107
+ return 'light'
108
+ }
109
+
110
+ registerStyleSheetContent(_path: string, _content: unknown): void {
111
+ // empty
112
+ }
113
+
114
+ appendStyleSheetPath(_path: string, _styleScope?: number): number {
115
+ const id = this._$styleSheetIdInc
116
+ this._$styleSheetIdInc += 1
117
+ return id
118
+ }
119
+
120
+ disableStyleSheet(_index: number): void {
121
+ // empty
122
+ }
123
+
124
+ render(cb: (err: Error | null) => void): void {
125
+ if (this._$renderCallbacks) {
126
+ this._$renderCallbacks.push(cb)
127
+ } else {
128
+ const callbacks = this._$renderCallbacks = [cb]
129
+ setTimeout(() => {
130
+ this._$renderCallbacks = null
131
+ callbacks.forEach((cb) => {
132
+ safeCallback(
133
+ 'Render Callback',
134
+ cb,
135
+ this,
136
+ [null],
137
+ )
138
+ })
139
+ }, 16)
140
+ }
141
+ }
142
+
143
+ getRootNode(): EmptyBackendElement {
144
+ return this._$rootNode
145
+ }
146
+
147
+ createFragment(): EmptyBackendElement {
148
+ return new EmptyBackendElement(EmptyBackendElementType.Fragment)
149
+ }
150
+
151
+ onEvent(_listener: (
152
+ target: unknown,
153
+ type: string,
154
+ detail: unknown,
155
+ options: EventOptions,
156
+ ) => EventBubbleStatus): void {
157
+ // empty
158
+ }
159
+ }
160
+
161
+ /** An element for empty backend implementation */
162
+ export class EmptyBackendElement implements Element {
163
+ __wxElement: unknown = undefined
164
+ private _$shadowRoot: EmptyBackendShadowRootContext | null
165
+
166
+ constructor(type: EmptyBackendElementType) {
167
+ if (type === EmptyBackendElementType.Component) {
168
+ this._$shadowRoot = new EmptyBackendShadowRootContext()
169
+ } else {
170
+ this._$shadowRoot = null
171
+ }
172
+ }
173
+
174
+ release(): void {
175
+ // empty
176
+ }
177
+
178
+ associateValue(_v: unknown): void {
179
+ // empty
180
+ }
181
+
182
+ getShadowRoot(): EmptyBackendShadowRootContext | undefined {
183
+ return this._$shadowRoot || undefined
184
+ }
185
+
186
+ appendChild(_child: Element): void {
187
+ // empty
188
+ }
189
+
190
+ removeChild(_child: Element, _index?: number): void {
191
+ // empty
192
+ }
193
+
194
+ insertBefore(_child: Element, _before?: Element, _index?: number): void {
195
+ // empty
196
+ }
197
+
198
+ replaceChild(_child: Element, _oldChild?: Element, _index?: number): void {
199
+ // empty
200
+ }
201
+
202
+ spliceBefore(_before: Element, _deleteCount: number, _list: Element): void {
203
+ // empty
204
+ }
205
+
206
+ spliceAppend(_list: Element): void {
207
+ // empty
208
+ }
209
+
210
+ spliceRemove(_before: Element, _deleteCount: number): void {
211
+ // empty
212
+ }
213
+
214
+ setId(_id: string): void {
215
+ // empty
216
+ }
217
+
218
+ setSlotName(_name: string): void {
219
+ // empty
220
+ }
221
+
222
+ setSlot(_name: string, _$inheritSlots: boolean): void {
223
+ // empty
224
+ }
225
+
226
+ setInheritSlots(): void {
227
+ // empty
228
+ }
229
+
230
+ setStyleScope(_styleScope: number): void {
231
+ // empty
232
+ }
233
+
234
+ setStyle(_styleText: string): void {
235
+ // empty
236
+ }
237
+
238
+ addClass(_elementClass: string, _styleScope?: number): void {
239
+ // empty
240
+ }
241
+
242
+ removeClass(_elementClass: string, _styleScope?: number): void {
243
+ // empty
244
+ }
245
+
246
+ clearClasses(): void {
247
+ // empty
248
+ }
249
+
250
+ setAttribute(_name: string, _value: unknown): void {
251
+ // empty
252
+ }
253
+
254
+ removeAttribute(_name: string): void {
255
+ // empty
256
+ }
257
+
258
+ setText(_content: string): void {
259
+ // empty
260
+ }
261
+
262
+ getBoundingClientRect(cb: (res: BoundingClientRect) => void): void {
263
+ setTimeout(() => {
264
+ cb({
265
+ left: 0,
266
+ top: 0,
267
+ width: 0,
268
+ height: 0,
269
+ })
270
+ }, 0)
271
+ }
272
+
273
+ getScrollOffset(cb: (res: ScrollOffset) => void): void {
274
+ setTimeout(() => {
275
+ cb({
276
+ scrollLeft: 0,
277
+ scrollTop: 0,
278
+ scrollWidth: 0,
279
+ scrollHeight: 0,
280
+ })
281
+ }, 0)
282
+ }
283
+
284
+ setEventDefaultPrevented(_type: string, _enabled: boolean): void {
285
+ // empty
286
+ }
287
+ }
288
+
289
+ /** A shadow root for empty backend implementation */
290
+ export class EmptyBackendShadowRootContext implements ShadowRootContext {
291
+ private _$rootNode: EmptyBackendElement =
292
+ new EmptyBackendElement(EmptyBackendElementType.VirtualNode)
293
+
294
+ getRootNode(): Element {
295
+ return this._$rootNode
296
+ }
297
+
298
+ createElement(_tagName: string): Element {
299
+ return new EmptyBackendElement(EmptyBackendElementType.Element)
300
+ }
301
+
302
+ createTextNode(_content: string): Element {
303
+ return new EmptyBackendElement(EmptyBackendElementType.TextNode)
304
+ }
305
+
306
+ createComponent(_tagName: string, _isVirtual: boolean): Element {
307
+ return new EmptyBackendElement(EmptyBackendElementType.Component)
308
+ }
309
+
310
+ createVirtualNode(): Element {
311
+ return new EmptyBackendElement(EmptyBackendElementType.VirtualNode)
312
+ }
313
+ }
@@ -0,0 +1,252 @@
1
+ /* eslint-disable class-methods-use-this */
2
+
3
+ import {
4
+ EventOptions,
5
+ EventBubbleStatus,
6
+ } from '../event'
7
+ import {
8
+ safeCallback,
9
+ } from '../func_arr'
10
+ import {
11
+ BackendMode,
12
+ BoundingClientRect,
13
+ ScrollOffset,
14
+ } from './mode'
15
+
16
+ export interface Context {
17
+ mode: BackendMode.Composed
18
+ destroy(): void
19
+ getWindowWidth(): number
20
+ getWindowHeight(): number
21
+ getDevicePixelRatio(): number
22
+ getTheme(): string
23
+ registerStyleSheetContent(path: string, content: unknown): void
24
+ appendStyleSheetPath(path: string, styleScope?: number): number
25
+ disableStyleSheet(index: number): void
26
+ render(cb: (err: Error | null) => void): void
27
+ getRootNode(): Element
28
+ createElement(tagName: string): Element
29
+ createTextNode(content: string): Element
30
+ createFragment(): Element
31
+ onEvent(listener: (
32
+ target: unknown,
33
+ type: string,
34
+ detail: unknown,
35
+ options: EventOptions,
36
+ ) => EventBubbleStatus): void
37
+ }
38
+
39
+ export interface Element {
40
+ release(): void
41
+ associateValue(v: unknown): void
42
+ appendChild(child: Element): void
43
+ removeChild(child: Element, index?: number): void
44
+ insertBefore(child: Element, before: Element, index?: number): void
45
+ replaceChild(child: Element, oldChild: Element, index?: number): void
46
+ spliceBefore(before: Element, deleteCount: number, list: Element): void
47
+ spliceAppend(list: Element): void
48
+ spliceRemove(before: Element, deleteCount: number): void
49
+ setId(id: string): void
50
+ setStyleScope(styleScope: number): void
51
+ setStyle(styleText: string): void
52
+ addClass(elementClass: string, styleScope?: number): void
53
+ removeClass(elementClass: string, styleScope?: number): void
54
+ clearClasses(): void
55
+ setAttribute(name: string, value: unknown): void
56
+ removeAttribute(name: string): void
57
+ setText(content: string): void
58
+ getBoundingClientRect(cb: (res: BoundingClientRect) => void): void
59
+ getScrollOffset(cb: (res: ScrollOffset) => void): void
60
+ setEventDefaultPrevented(type: string, enabled: boolean): void
61
+ __wxElement?: unknown
62
+ }
63
+
64
+ /** An empty backend implementation */
65
+ export class EmptyComposedBackendContext implements Context {
66
+ mode: BackendMode.Composed = BackendMode.Composed
67
+ private _$styleSheetIdInc = 1
68
+ private _$renderCallbacks: ((err: Error) => void)[] | null = null
69
+ private _$rootNode: EmptyComposedBackendElement
70
+ = new EmptyComposedBackendElement()
71
+
72
+ destroy(): void {
73
+ // empty
74
+ }
75
+
76
+ getWindowWidth(): number {
77
+ return 1
78
+ }
79
+
80
+ getWindowHeight(): number {
81
+ return 1
82
+ }
83
+
84
+ getDevicePixelRatio(): number {
85
+ return 1
86
+ }
87
+
88
+ getTheme(): string {
89
+ return 'light'
90
+ }
91
+
92
+ registerStyleSheetContent(_path: string, _content: unknown): void {
93
+ // empty
94
+ }
95
+
96
+ appendStyleSheetPath(_path: string, _styleScope?: number): number {
97
+ const id = this._$styleSheetIdInc
98
+ this._$styleSheetIdInc += 1
99
+ return id
100
+ }
101
+
102
+ disableStyleSheet(_index: number): void {
103
+ // empty
104
+ }
105
+
106
+ render(cb: (err: Error | null) => void): void {
107
+ if (this._$renderCallbacks) {
108
+ this._$renderCallbacks.push(cb)
109
+ } else {
110
+ const callbacks = this._$renderCallbacks = [cb]
111
+ setTimeout(() => {
112
+ this._$renderCallbacks = null
113
+ callbacks.forEach((cb) => {
114
+ safeCallback(
115
+ 'Render Callback',
116
+ cb,
117
+ this,
118
+ [null],
119
+ )
120
+ })
121
+ }, 16)
122
+ }
123
+ }
124
+
125
+ getRootNode(): Element {
126
+ return this._$rootNode
127
+ }
128
+
129
+ createElement(_tagName: string): Element {
130
+ return new EmptyComposedBackendElement()
131
+ }
132
+
133
+ createTextNode(_tagName: string): Element {
134
+ return new EmptyComposedBackendElement()
135
+ }
136
+
137
+ createFragment(): Element {
138
+ return new EmptyComposedBackendElement()
139
+ }
140
+
141
+ onEvent(_listener: (
142
+ target: unknown,
143
+ type: string,
144
+ detail: unknown,
145
+ options: EventOptions,
146
+ ) => EventBubbleStatus): void {
147
+ // empty
148
+ }
149
+ }
150
+
151
+ /** An element for empty backend implementation */
152
+ export class EmptyComposedBackendElement implements Element {
153
+ __wxElement: unknown = undefined
154
+
155
+ release(): void {
156
+ // empty
157
+ }
158
+
159
+ associateValue(_v: unknown): void {
160
+ // empty
161
+ }
162
+
163
+ appendChild(_child: Element): void {
164
+ // empty
165
+ }
166
+
167
+ removeChild(_child: Element, _index?: number): void {
168
+ // empty
169
+ }
170
+
171
+ insertBefore(_child: Element, _before?: Element, _index?: number): void {
172
+ // empty
173
+ }
174
+
175
+ replaceChild(_child: Element, _oldChild?: Element, _index?: number): void {
176
+ // empty
177
+ }
178
+
179
+ spliceBefore(_before: Element, _deleteCount: number, _list: Element): void {
180
+ // empty
181
+ }
182
+
183
+ spliceAppend(_list: Element): void {
184
+ // empty
185
+ }
186
+
187
+ spliceRemove(_before: Element, _deleteCount: number): void {
188
+ // empty
189
+ }
190
+
191
+ setId(_id: string): void {
192
+ // empty
193
+ }
194
+
195
+ setStyleScope(_styleScope: number): void {
196
+ // empty
197
+ }
198
+
199
+ setStyle(_styleText: string): void {
200
+ // empty
201
+ }
202
+
203
+ addClass(_elementClass: string, _styleScope?: number): void {
204
+ // empty
205
+ }
206
+
207
+ removeClass(_elementClass: string, _styleScope?: number): void {
208
+ // empty
209
+ }
210
+
211
+ clearClasses(): void {
212
+ // empty
213
+ }
214
+
215
+ setAttribute(_name: string, _value: unknown): void {
216
+ // empty
217
+ }
218
+
219
+ removeAttribute(_name: string): void {
220
+ // empty
221
+ }
222
+
223
+ setText(_content: string): void {
224
+ // empty
225
+ }
226
+
227
+ getBoundingClientRect(cb: (res: BoundingClientRect) => void): void {
228
+ setTimeout(() => {
229
+ cb({
230
+ left: 0,
231
+ top: 0,
232
+ width: 0,
233
+ height: 0,
234
+ })
235
+ }, 0)
236
+ }
237
+
238
+ getScrollOffset(cb: (res: ScrollOffset) => void): void {
239
+ setTimeout(() => {
240
+ cb({
241
+ scrollLeft: 0,
242
+ scrollTop: 0,
243
+ scrollWidth: 0,
244
+ scrollHeight: 0,
245
+ })
246
+ }, 0)
247
+ }
248
+
249
+ setEventDefaultPrevented(_type: string, _enabled: boolean): void {
250
+ // empty
251
+ }
252
+ }