@benev/tact 0.1.1 → 0.2.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 (109) hide show
  1. package/README.md +30 -16
  2. package/package.json +13 -12
  3. package/s/deck/deck.ts +1 -14
  4. package/s/deck/index.ts +1 -2
  5. package/s/deck/parts/db.ts +2 -3
  6. package/s/deck/views/bindings/view.ts +95 -0
  7. package/s/deck/views/overlay/view.ts +46 -0
  8. package/s/demo/game/parts/renderer.ts +4 -5
  9. package/s/demo/game/parts/state.ts +1 -2
  10. package/s/demo/main.bundle.ts +1 -4
  11. package/s/demo/ui/theater/styles.css.ts +1 -2
  12. package/s/demo/ui/theater/view.ts +47 -52
  13. package/s/demo/ui/theater/virtual/view.ts +10 -12
  14. package/s/index.html.ts +53 -44
  15. package/s/nubs/index.ts +3 -4
  16. package/s/nubs/lookpad/{component.ts → view.ts} +10 -16
  17. package/s/nubs/stick/{component.ts → view.ts} +27 -34
  18. package/s/nubs/vpad/{component.ts → view.ts} +25 -33
  19. package/s/utils/circular-clamp.ts +1 -2
  20. package/s/utils/gamepads.ts +2 -2
  21. package/x/core/devices/standard/stick.d.ts +2 -2
  22. package/x/deck/deck.d.ts +0 -7
  23. package/x/deck/deck.js +1 -9
  24. package/x/deck/deck.js.map +1 -1
  25. package/x/deck/index.d.ts +1 -2
  26. package/x/deck/index.js +1 -2
  27. package/x/deck/index.js.map +1 -1
  28. package/x/deck/parts/db.d.ts +3 -3
  29. package/x/deck/parts/db.js.map +1 -1
  30. package/x/deck/parts/overlay-visibility.d.ts +3 -3
  31. package/x/deck/views/bindings/style.css.js.map +1 -0
  32. package/x/deck/views/bindings/view.d.ts +2 -0
  33. package/x/deck/views/bindings/view.js +80 -0
  34. package/x/deck/views/bindings/view.js.map +1 -0
  35. package/x/deck/views/overlay/style.css.js.map +1 -0
  36. package/x/deck/views/overlay/view.d.ts +2 -0
  37. package/x/deck/views/overlay/view.js +40 -0
  38. package/x/deck/views/overlay/view.js.map +1 -0
  39. package/x/demo/game/parts/renderer.js +4 -4
  40. package/x/demo/game/parts/renderer.js.map +1 -1
  41. package/x/demo/game/parts/state.js +1 -1
  42. package/x/demo/game/parts/state.js.map +1 -1
  43. package/x/demo/main.bundle.js +1 -5
  44. package/x/demo/main.bundle.js.map +1 -1
  45. package/x/demo/main.bundle.min.js +242 -233
  46. package/x/demo/main.bundle.min.js.map +4 -4
  47. package/x/demo/ui/theater/styles.css.js +1 -1
  48. package/x/demo/ui/theater/view.d.ts +1 -367
  49. package/x/demo/ui/theater/view.js +27 -32
  50. package/x/demo/ui/theater/view.js.map +1 -1
  51. package/x/demo/ui/theater/virtual/view.d.ts +1 -1
  52. package/x/demo/ui/theater/virtual/view.js +6 -6
  53. package/x/demo/ui/theater/virtual/view.js.map +1 -1
  54. package/x/index.html +41 -125
  55. package/x/index.html.js +50 -39
  56. package/x/index.html.js.map +1 -1
  57. package/x/nubs/index.d.ts +3 -4
  58. package/x/nubs/index.js +3 -4
  59. package/x/nubs/index.js.map +1 -1
  60. package/x/nubs/lookpad/view.d.ts +1 -0
  61. package/x/nubs/lookpad/{component.js → view.js} +11 -14
  62. package/x/nubs/lookpad/view.js.map +1 -0
  63. package/x/nubs/stick/view.d.ts +2 -0
  64. package/x/nubs/stick/{component.js → view.js} +28 -34
  65. package/x/nubs/stick/view.js.map +1 -0
  66. package/x/nubs/vpad/view.d.ts +2 -0
  67. package/x/nubs/vpad/{component.js → view.js} +26 -32
  68. package/x/nubs/vpad/view.js.map +1 -0
  69. package/x/utils/circular-clamp.js +1 -1
  70. package/x/utils/circular-clamp.js.map +1 -1
  71. package/x/utils/gamepads.js +2 -2
  72. package/s/deck/components/components.ts +0 -22
  73. package/s/deck/components/deck-bindings/component.ts +0 -99
  74. package/s/deck/components/deck-overlay/component.ts +0 -51
  75. package/s/deck/components/framework.ts +0 -17
  76. package/s/nubs/components.ts +0 -14
  77. package/s/utils/types.ts +0 -19
  78. package/x/deck/components/components.d.ts +0 -14
  79. package/x/deck/components/components.js +0 -9
  80. package/x/deck/components/components.js.map +0 -1
  81. package/x/deck/components/deck-bindings/component.d.ts +0 -6
  82. package/x/deck/components/deck-bindings/component.js +0 -83
  83. package/x/deck/components/deck-bindings/component.js.map +0 -1
  84. package/x/deck/components/deck-bindings/style.css.js.map +0 -1
  85. package/x/deck/components/deck-overlay/component.d.ts +0 -6
  86. package/x/deck/components/deck-overlay/component.js +0 -44
  87. package/x/deck/components/deck-overlay/component.js.map +0 -1
  88. package/x/deck/components/deck-overlay/style.css.js.map +0 -1
  89. package/x/deck/components/framework.d.ts +0 -7
  90. package/x/deck/components/framework.js +0 -13
  91. package/x/deck/components/framework.js.map +0 -1
  92. package/x/nubs/components.d.ts +0 -9
  93. package/x/nubs/components.js +0 -11
  94. package/x/nubs/components.js.map +0 -1
  95. package/x/nubs/lookpad/component.d.ts +0 -4
  96. package/x/nubs/lookpad/component.js.map +0 -1
  97. package/x/nubs/stick/component.d.ts +0 -368
  98. package/x/nubs/stick/component.js.map +0 -1
  99. package/x/nubs/vpad/component.d.ts +0 -368
  100. package/x/nubs/vpad/component.js.map +0 -1
  101. package/x/utils/types.d.ts +0 -3
  102. package/x/utils/types.js +0 -3
  103. package/x/utils/types.js.map +0 -1
  104. /package/s/deck/{components/deck-bindings → views/bindings}/style.css.ts +0 -0
  105. /package/s/deck/{components/deck-overlay → views/overlay}/style.css.ts +0 -0
  106. /package/x/deck/{components/deck-bindings → views/bindings}/style.css.d.ts +0 -0
  107. /package/x/deck/{components/deck-bindings → views/bindings}/style.css.js +0 -0
  108. /package/x/deck/{components/deck-overlay → views/overlay}/style.css.d.ts +0 -0
  109. /package/x/deck/{components/deck-overlay → views/overlay}/style.css.js +0 -0
@@ -32,7 +32,7 @@ export const styles = css `
32
32
  outline: 1px solid red;
33
33
  }
34
34
 
35
- [deck="overlay"] {
35
+ [view="deck-overlay"] {
36
36
  position: absolute;
37
37
  top: 10%;
38
38
  left: 0;
@@ -1,368 +1,2 @@
1
1
  import { Game } from "../../game/game.js";
2
- declare const DemoTheater_base: import("@e280/sly").ComponentClass<{
3
- new (): {
4
- game: Game;
5
- "__#private@#private": any;
6
- readonly shadow: ShadowRoot;
7
- createShadow(): ShadowRoot;
8
- render(_use: import("@e280/sly").Use): import("@e280/sly").Content;
9
- updateNow: () => void;
10
- update: import("@e280/stz").DebounceReturn<() => void>;
11
- connectedCallback(): void;
12
- disconnectedCallback(): void;
13
- accessKey: string;
14
- readonly accessKeyLabel: string;
15
- autocapitalize: string;
16
- autocorrect: boolean;
17
- dir: string;
18
- draggable: boolean;
19
- hidden: boolean;
20
- inert: boolean;
21
- innerText: string;
22
- lang: string;
23
- readonly offsetHeight: number;
24
- readonly offsetLeft: number;
25
- readonly offsetParent: Element | null;
26
- readonly offsetTop: number;
27
- readonly offsetWidth: number;
28
- outerText: string;
29
- popover: string | null;
30
- spellcheck: boolean;
31
- title: string;
32
- translate: boolean;
33
- writingSuggestions: string;
34
- attachInternals(): ElementInternals;
35
- click(): void;
36
- hidePopover(): void;
37
- showPopover(): void;
38
- togglePopover(options?: boolean): boolean;
39
- addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
40
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
41
- removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
42
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
43
- readonly attributes: NamedNodeMap;
44
- get classList(): DOMTokenList;
45
- set classList(value: string);
46
- className: string;
47
- readonly clientHeight: number;
48
- readonly clientLeft: number;
49
- readonly clientTop: number;
50
- readonly clientWidth: number;
51
- readonly currentCSSZoom: number;
52
- id: string;
53
- innerHTML: string;
54
- readonly localName: string;
55
- readonly namespaceURI: string | null;
56
- onfullscreenchange: ((this: Element, ev: Event) => any) | null;
57
- onfullscreenerror: ((this: Element, ev: Event) => any) | null;
58
- outerHTML: string;
59
- readonly ownerDocument: Document;
60
- get part(): DOMTokenList;
61
- set part(value: string);
62
- readonly prefix: string | null;
63
- readonly scrollHeight: number;
64
- scrollLeft: number;
65
- scrollTop: number;
66
- readonly scrollWidth: number;
67
- readonly shadowRoot: ShadowRoot | null;
68
- slot: string;
69
- readonly tagName: string;
70
- attachShadow(init: ShadowRootInit): ShadowRoot;
71
- checkVisibility(options?: CheckVisibilityOptions): boolean;
72
- closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;
73
- closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;
74
- closest<K extends keyof MathMLElementTagNameMap>(selector: K): MathMLElementTagNameMap[K] | null;
75
- closest<E extends Element = Element>(selectors: string): E | null;
76
- computedStyleMap(): StylePropertyMapReadOnly;
77
- getAttribute(qualifiedName: string): string | null;
78
- getAttributeNS(namespace: string | null, localName: string): string | null;
79
- getAttributeNames(): string[];
80
- getAttributeNode(qualifiedName: string): Attr | null;
81
- getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;
82
- getBoundingClientRect(): DOMRect;
83
- getClientRects(): DOMRectList;
84
- getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
85
- getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;
86
- getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;
87
- getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;
88
- getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;
89
- getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
90
- getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
91
- getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
92
- getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf<MathMLElement>;
93
- getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
94
- getHTML(options?: GetHTMLOptions): string;
95
- hasAttribute(qualifiedName: string): boolean;
96
- hasAttributeNS(namespace: string | null, localName: string): boolean;
97
- hasAttributes(): boolean;
98
- hasPointerCapture(pointerId: number): boolean;
99
- insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
100
- insertAdjacentHTML(position: InsertPosition, string: string): void;
101
- insertAdjacentText(where: InsertPosition, data: string): void;
102
- matches(selectors: string): boolean;
103
- releasePointerCapture(pointerId: number): void;
104
- removeAttribute(qualifiedName: string): void;
105
- removeAttributeNS(namespace: string | null, localName: string): void;
106
- removeAttributeNode(attr: Attr): Attr;
107
- requestFullscreen(options?: FullscreenOptions): Promise<void>;
108
- requestPointerLock(options?: PointerLockOptions): Promise<void>;
109
- scroll(options?: ScrollToOptions): void;
110
- scroll(x: number, y: number): void;
111
- scrollBy(options?: ScrollToOptions): void;
112
- scrollBy(x: number, y: number): void;
113
- scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;
114
- scrollTo(options?: ScrollToOptions): void;
115
- scrollTo(x: number, y: number): void;
116
- setAttribute(qualifiedName: string, value: string): void;
117
- setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
118
- setAttributeNode(attr: Attr): Attr | null;
119
- setAttributeNodeNS(attr: Attr): Attr | null;
120
- setHTMLUnsafe(html: string): void;
121
- setPointerCapture(pointerId: number): void;
122
- toggleAttribute(qualifiedName: string, force?: boolean): boolean;
123
- webkitMatchesSelector(selectors: string): boolean;
124
- get textContent(): string;
125
- set textContent(value: string | null);
126
- readonly baseURI: string;
127
- readonly childNodes: NodeListOf<ChildNode>;
128
- readonly firstChild: ChildNode | null;
129
- readonly isConnected: boolean;
130
- readonly lastChild: ChildNode | null;
131
- readonly nextSibling: ChildNode | null;
132
- readonly nodeName: string;
133
- readonly nodeType: number;
134
- nodeValue: string | null;
135
- readonly parentElement: HTMLElement | null;
136
- readonly parentNode: ParentNode | null;
137
- readonly previousSibling: ChildNode | null;
138
- appendChild<T extends Node>(node: T): T;
139
- cloneNode(subtree?: boolean): Node;
140
- compareDocumentPosition(other: Node): number;
141
- contains(other: Node | null): boolean;
142
- getRootNode(options?: GetRootNodeOptions): Node;
143
- hasChildNodes(): boolean;
144
- insertBefore<T extends Node>(node: T, child: Node | null): T;
145
- isDefaultNamespace(namespace: string | null): boolean;
146
- isEqualNode(otherNode: Node | null): boolean;
147
- isSameNode(otherNode: Node | null): boolean;
148
- lookupNamespaceURI(prefix: string | null): string | null;
149
- lookupPrefix(namespace: string | null): string | null;
150
- normalize(): void;
151
- removeChild<T extends Node>(child: T): T;
152
- replaceChild<T extends Node>(node: Node, child: T): T;
153
- readonly ELEMENT_NODE: 1;
154
- readonly ATTRIBUTE_NODE: 2;
155
- readonly TEXT_NODE: 3;
156
- readonly CDATA_SECTION_NODE: 4;
157
- readonly ENTITY_REFERENCE_NODE: 5;
158
- readonly ENTITY_NODE: 6;
159
- readonly PROCESSING_INSTRUCTION_NODE: 7;
160
- readonly COMMENT_NODE: 8;
161
- readonly DOCUMENT_NODE: 9;
162
- readonly DOCUMENT_TYPE_NODE: 10;
163
- readonly DOCUMENT_FRAGMENT_NODE: 11;
164
- readonly NOTATION_NODE: 12;
165
- readonly DOCUMENT_POSITION_DISCONNECTED: 1;
166
- readonly DOCUMENT_POSITION_PRECEDING: 2;
167
- readonly DOCUMENT_POSITION_FOLLOWING: 4;
168
- readonly DOCUMENT_POSITION_CONTAINS: 8;
169
- readonly DOCUMENT_POSITION_CONTAINED_BY: 16;
170
- readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32;
171
- dispatchEvent(event: Event): boolean;
172
- ariaActiveDescendantElement: Element | null;
173
- ariaAtomic: string | null;
174
- ariaAutoComplete: string | null;
175
- ariaBrailleLabel: string | null;
176
- ariaBrailleRoleDescription: string | null;
177
- ariaBusy: string | null;
178
- ariaChecked: string | null;
179
- ariaColCount: string | null;
180
- ariaColIndex: string | null;
181
- ariaColIndexText: string | null;
182
- ariaColSpan: string | null;
183
- ariaControlsElements: ReadonlyArray<Element> | null;
184
- ariaCurrent: string | null;
185
- ariaDescribedByElements: ReadonlyArray<Element> | null;
186
- ariaDescription: string | null;
187
- ariaDetailsElements: ReadonlyArray<Element> | null;
188
- ariaDisabled: string | null;
189
- ariaErrorMessageElements: ReadonlyArray<Element> | null;
190
- ariaExpanded: string | null;
191
- ariaFlowToElements: ReadonlyArray<Element> | null;
192
- ariaHasPopup: string | null;
193
- ariaHidden: string | null;
194
- ariaInvalid: string | null;
195
- ariaKeyShortcuts: string | null;
196
- ariaLabel: string | null;
197
- ariaLabelledByElements: ReadonlyArray<Element> | null;
198
- ariaLevel: string | null;
199
- ariaLive: string | null;
200
- ariaModal: string | null;
201
- ariaMultiLine: string | null;
202
- ariaMultiSelectable: string | null;
203
- ariaOrientation: string | null;
204
- ariaOwnsElements: ReadonlyArray<Element> | null;
205
- ariaPlaceholder: string | null;
206
- ariaPosInSet: string | null;
207
- ariaPressed: string | null;
208
- ariaReadOnly: string | null;
209
- ariaRelevant: string | null;
210
- ariaRequired: string | null;
211
- ariaRoleDescription: string | null;
212
- ariaRowCount: string | null;
213
- ariaRowIndex: string | null;
214
- ariaRowIndexText: string | null;
215
- ariaRowSpan: string | null;
216
- ariaSelected: string | null;
217
- ariaSetSize: string | null;
218
- ariaSort: string | null;
219
- ariaValueMax: string | null;
220
- ariaValueMin: string | null;
221
- ariaValueNow: string | null;
222
- ariaValueText: string | null;
223
- role: string | null;
224
- animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;
225
- getAnimations(options?: GetAnimationsOptions): Animation[];
226
- after(...nodes: (Node | string)[]): void;
227
- before(...nodes: (Node | string)[]): void;
228
- remove(): void;
229
- replaceWith(...nodes: (Node | string)[]): void;
230
- readonly nextElementSibling: Element | null;
231
- readonly previousElementSibling: Element | null;
232
- readonly childElementCount: number;
233
- readonly children: HTMLCollection;
234
- readonly firstElementChild: Element | null;
235
- readonly lastElementChild: Element | null;
236
- append(...nodes: (Node | string)[]): void;
237
- prepend(...nodes: (Node | string)[]): void;
238
- querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;
239
- querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;
240
- querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;
241
- querySelector<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): HTMLElementDeprecatedTagNameMap[K] | null;
242
- querySelector<E extends Element = Element>(selectors: string): E | null;
243
- querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
244
- querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
245
- querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
246
- querySelectorAll<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): NodeListOf<HTMLElementDeprecatedTagNameMap[K]>;
247
- querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
248
- replaceChildren(...nodes: (Node | string)[]): void;
249
- readonly assignedSlot: HTMLSlotElement | null;
250
- readonly attributeStyleMap: StylePropertyMap;
251
- get style(): CSSStyleDeclaration;
252
- set style(cssText: string);
253
- contentEditable: string;
254
- enterKeyHint: string;
255
- inputMode: string;
256
- readonly isContentEditable: boolean;
257
- onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
258
- onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
259
- onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
260
- onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
261
- onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
262
- onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
263
- onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;
264
- onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null;
265
- onbeforetoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null;
266
- onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
267
- oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;
268
- oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
269
- oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;
270
- onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
271
- onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
272
- onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;
273
- oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null;
274
- oncontextmenu: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
275
- oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null;
276
- oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
277
- oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
278
- oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
279
- ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
280
- ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
281
- ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
282
- ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
283
- ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
284
- ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
285
- ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
286
- ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
287
- ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
288
- onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;
289
- onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;
290
- onerror: OnErrorEventHandler;
291
- onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
292
- onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
293
- ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
294
- oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
295
- oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
296
- onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
297
- onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
298
- onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
299
- onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;
300
- onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
301
- onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
302
- onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
303
- onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
304
- onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
305
- onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
306
- onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
307
- onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
308
- onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
309
- onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
310
- onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
311
- onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
312
- onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;
313
- onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
314
- onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;
315
- onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
316
- onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
317
- onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
318
- onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
319
- onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
320
- onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
321
- onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
322
- onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
323
- onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
324
- onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;
325
- onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
326
- onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;
327
- onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
328
- onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
329
- onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
330
- onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;
331
- onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;
332
- onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;
333
- onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;
334
- onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
335
- onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
336
- onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
337
- onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;
338
- onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;
339
- onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
340
- ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
341
- ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null;
342
- ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
343
- ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
344
- ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
345
- ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
346
- ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
347
- ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
348
- ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
349
- ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
350
- onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
351
- onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
352
- onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
353
- onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
354
- onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
355
- onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
356
- onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
357
- autofocus: boolean;
358
- readonly dataset: DOMStringMap;
359
- nonce?: string;
360
- tabIndex: number;
361
- blur(): void;
362
- focus(options?: FocusOptions): void;
363
- };
364
- styles: import("lit").CSSResultGroup | undefined;
365
- }, [game: Game]>;
366
- export declare class DemoTheater extends DemoTheater_base {
367
- }
368
- export {};
2
+ export declare const DemoTheater: import("@e280/sly").ShadowView<[game: Game]>;
@@ -1,14 +1,16 @@
1
1
  import { html } from "lit";
2
2
  import { repeat } from "lit/directives/repeat.js";
3
- import { BaseElement, cssReset, view } from "@e280/sly";
3
+ import { cssReset, shadow, useCss, useMount, useRender } from "@e280/sly";
4
4
  import { styles } from "./styles.css.js";
5
5
  import { VirtualDeviceView } from "./virtual/view.js";
6
6
  import { VirtualDevice } from "../../game/parts/virtual-device.js";
7
- import { DeckBindings } from "../../../deck/components/deck-bindings/component.js";
8
- export class DemoTheater extends (view(use => (game) => {
9
- use.css(cssReset, styles);
10
- use.mount(() => game.loop(60));
11
- use.mount(() => game.deck.hub.on(use.render));
7
+ import { DeckBindings } from "../../../deck/views/bindings/view.js";
8
+ import { DeckOverlay } from "../../../deck/views/overlay/view.js";
9
+ export const DemoTheater = shadow((game) => {
10
+ useCss(cssReset, styles);
11
+ useMount(() => game.loop(60));
12
+ const render = useRender();
13
+ useMount(() => game.deck.hub.on(render));
12
14
  const addVirtual = () => game.plug(new VirtualDevice(game.deck.hub));
13
15
  const revealOverlay = () => game.deck.overlayVisibility.bump();
14
16
  const virtualDevices = game.deck.hub.ports
@@ -17,34 +19,27 @@ export class DemoTheater extends (view(use => (game) => {
17
19
  .map(device => ({ device, skin: game.deck.deviceSkins.get(device) }))
18
20
  .sort((a, b) => a.skin.label < b.skin.label ? -1 : 1);
19
21
  return html `
20
- <div class=surface>
21
- ${game.renderer.canvas}
22
- ${game.deck.views.DeckOverlay()}
23
- </div>
22
+ <div class=surface>
23
+ ${game.renderer.canvas}
24
+ ${DeckOverlay(game.deck)}
25
+ </div>
24
26
 
25
- <div class=dlist>
26
- ${repeat(virtualDevices, d => d.skin.label, ({ device, skin }) => {
27
- return VirtualDeviceView
28
- .props(game.deck.hub, device, skin)
29
- .attr("style", `--color: ${skin.color};`)
30
- .render();
31
- })}
27
+ <div class=dlist>
28
+ ${repeat(virtualDevices, d => d.skin.label, ({ device, skin }) => VirtualDeviceView.with({
29
+ props: [game.deck.hub, device, skin],
30
+ attrs: { style: `--color: ${skin.color};` },
31
+ }))}
32
32
 
33
- <button @click="${addVirtual}">
34
-
35
- </button>
33
+ <button @click="${addVirtual}">
34
+
35
+ </button>
36
36
 
37
- <button @click="${revealOverlay}">
38
- 👁️
39
- </button>
40
- </div>
37
+ <button @click="${revealOverlay}">
38
+ 👁️
39
+ </button>
40
+ </div>
41
41
 
42
- ${DeckBindings.view(game.deck)}
43
- `;
44
- })
45
- .component(class extends BaseElement {
46
- game;
47
- })
48
- .props(el => [el.game])) {
49
- }
42
+ ${DeckBindings(game.deck)}
43
+ `;
44
+ });
50
45
  //# sourceMappingURL=view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../s/demo/ui/theater/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,WAAW,CAAA;AAErD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,qDAAqD,CAAA;AAEhF,MAAM,OAAO,WAAY,SAAQ,CAChC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAU,EAAE,EAAE;IAC1B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7C,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;IAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;SACxC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACrC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,YAAY,aAAa,CAAC;SACjD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;SAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtD,OAAO,IAAI,CAAA;;MAEP,IAAI,CAAC,QAAQ,CAAC,MAAM;MACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;;;;MAI7B,MAAM,CACP,cAAc,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EACjB,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,EAAE,EAAE;QAClB,OAAO,iBAAiB;aACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC,KAAK,GAAG,CAAC;aACxC,MAAM,EAAE,CAAA;IACX,CAAC,CACD;;sBAEiB,UAAU;;;;sBAIV,aAAa;;;;;KAK9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;GAC9B,CAAA;AACF,CAAC,CAAC;KACD,SAAS,CAAC,KAAM,SAAQ,WAAW;IAAG,IAAI,CAAO;CAAE,CAAC;KACpD,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CACvB;CAAG"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../s/demo/ui/theater/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,WAAW,CAAA;AAEvE,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,sCAAsC,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;IAChD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAExC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;IAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;SACxC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACrC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,YAAY,aAAa,CAAC;SACjD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;SAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtD,OAAO,IAAI,CAAA;;KAEP,IAAI,CAAC,QAAQ,CAAC,MAAM;KACpB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;;KAItB,MAAM,CACP,cAAc,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EACjB,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC1C,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;QACpC,KAAK,EAAE,EAAC,KAAK,EAAE,YAAY,IAAI,CAAC,KAAK,GAAG,EAAC;KACzC,CAAC,CACF;;qBAEiB,UAAU;;;;qBAIV,aAAa;;;;;IAK9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;EACzB,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { Hub } from "../../../../core/hub/hub.js";
2
2
  import { VirtualDevice } from "../../../game/parts/virtual-device.js";
3
3
  import { DeviceSkin } from "../../../../deck/parts/device-skins/device-skin.js";
4
- export declare const VirtualDeviceView: import("@e280/sly").View<[hub: Hub<any, any>, device: VirtualDevice, _deviceSkin: DeviceSkin]>;
4
+ export declare const VirtualDeviceView: import("@e280/sly").ShadowView<[hub: Hub<any, any>, device: VirtualDevice, _deviceSkin: DeviceSkin]>;
@@ -1,14 +1,14 @@
1
1
  import { html } from "lit";
2
- import { cssReset, view } from "@e280/sly";
2
+ import { cssReset, shadow, useCss, useName } from "@e280/sly";
3
3
  import styleCss from "./style.css.js";
4
- import { NubStick } from "../../../../nubs/stick/component.js";
5
- export const VirtualDeviceView = view(use => (hub, device, _deviceSkin) => {
6
- use.styles(cssReset, styleCss);
7
- use.attrs.strings.device = "virtual";
4
+ import { NubStick } from "../../../../nubs/stick/view.js";
5
+ export const VirtualDeviceView = shadow((hub, device, _deviceSkin) => {
6
+ useCss(cssReset, styleCss);
7
+ useName("virtual-device");
8
8
  const unplug = () => hub.unplug(device);
9
9
  return html `
10
10
  <div class=box>
11
- ${NubStick.view(device)}
11
+ ${NubStick(device)}
12
12
 
13
13
  <button @click="${device.shimmyPrevious}">👈</button>
14
14
  <button @click="${unplug}">💀</button>
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../../s/demo/ui/theater/virtual/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,WAAW,CAAA;AACxC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAC,QAAQ,EAAC,MAAM,qCAAqC,CAAA;AAI5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAC3C,GAAa,EACb,MAAqB,EACrB,WAAuB,EACtB,EAAE;IAEJ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC9B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;IAEpC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEvC,OAAO,IAAI,CAAA;;KAEP,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;qBAEL,MAAM,CAAC,cAAc;qBACrB,MAAM;qBACN,MAAM,CAAC,UAAU;;EAEpC,CAAA;AACF,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../../s/demo/ui/theater/virtual/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AAC3D,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAC,QAAQ,EAAC,MAAM,gCAAgC,CAAA;AAIvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,CACvC,GAAa,EACb,MAAqB,EACrB,WAAuB,EACtB,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEzB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEvC,OAAO,IAAI,CAAA;;KAEP,QAAQ,CAAC,MAAM,CAAC;;qBAEA,MAAM,CAAC,cAAc;qBACrB,MAAM;qBACN,MAAM,CAAC,UAAU;;EAEpC,CAAA;AACF,CAAC,CAAC,CAAA"}