ctrl-fx 0.0.1 → 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 (145) hide show
  1. package/dist/clipboard.d.ts +7 -0
  2. package/dist/clipboard.d.ts.map +1 -0
  3. package/dist/clipboard.js +3 -0
  4. package/dist/db/effects.d.ts +78 -0
  5. package/dist/db/effects.d.ts.map +1 -0
  6. package/dist/db/effects.js +98 -0
  7. package/dist/db/errors.d.ts +21 -0
  8. package/dist/db/errors.d.ts.map +1 -0
  9. package/dist/db/errors.js +13 -0
  10. package/dist/db/index.d.ts +32 -0
  11. package/dist/db/index.d.ts.map +1 -0
  12. package/dist/db/index.js +19 -0
  13. package/dist/db/keypath.d.ts +40 -0
  14. package/dist/db/keypath.d.ts.map +1 -0
  15. package/dist/db/keypath.js +20 -0
  16. package/dist/db/setup.d.ts +83 -0
  17. package/dist/db/setup.d.ts.map +1 -0
  18. package/dist/db/setup.js +100 -0
  19. package/dist/db/testdb.d.ts +19 -0
  20. package/dist/db/testdb.d.ts.map +1 -0
  21. package/dist/db/testdb.js +34 -0
  22. package/dist/dom/attrs.d.ts +67 -0
  23. package/dist/dom/attrs.d.ts.map +1 -0
  24. package/dist/dom/attrs.js +154 -0
  25. package/dist/dom/components.d.ts +43 -0
  26. package/dist/dom/components.d.ts.map +1 -0
  27. package/dist/dom/components.js +86 -0
  28. package/dist/dom/elems.d.ts +121 -0
  29. package/dist/dom/elems.d.ts.map +1 -0
  30. package/dist/dom/elems.js +52 -0
  31. package/dist/dom/events.d.ts +232 -0
  32. package/dist/dom/events.d.ts.map +1 -0
  33. package/dist/dom/events.js +289 -0
  34. package/dist/dom/index.d.ts +248 -0
  35. package/dist/dom/index.d.ts.map +1 -0
  36. package/dist/dom/index.js +266 -0
  37. package/dist/dom/nodeid.d.ts +9 -0
  38. package/dist/dom/nodeid.d.ts.map +1 -0
  39. package/dist/dom/nodeid.js +27 -0
  40. package/dist/dom/svg.d.ts +23 -0
  41. package/dist/dom/svg.d.ts.map +1 -0
  42. package/dist/dom/svg.js +1 -0
  43. package/dist/dom/views.d.ts +60 -0
  44. package/dist/dom/views.d.ts.map +1 -0
  45. package/dist/dom/views.js +154 -0
  46. package/dist/effects.d.ts +580 -0
  47. package/dist/effects.d.ts.map +1 -0
  48. package/dist/effects.js +1556 -0
  49. package/dist/index.d.ts +41 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +78 -0
  52. package/dist/internal/clipboard.d.ts +5 -0
  53. package/dist/internal/clipboard.d.ts.map +1 -0
  54. package/dist/internal/clipboard.js +33 -0
  55. package/dist/internal/cmpmgr.d.ts +46 -0
  56. package/dist/internal/cmpmgr.d.ts.map +1 -0
  57. package/dist/internal/cmpmgr.js +561 -0
  58. package/dist/internal/dbmgr.d.ts +11 -0
  59. package/dist/internal/dbmgr.d.ts.map +1 -0
  60. package/dist/internal/dbmgr.js +200 -0
  61. package/dist/internal/dominterpreter.d.ts +5 -0
  62. package/dist/internal/dominterpreter.d.ts.map +1 -0
  63. package/dist/internal/dominterpreter.js +337 -0
  64. package/dist/internal/eventmgr.d.ts +41 -0
  65. package/dist/internal/eventmgr.d.ts.map +1 -0
  66. package/dist/internal/eventmgr.js +696 -0
  67. package/dist/internal/index.d.ts +19 -0
  68. package/dist/internal/index.d.ts.map +1 -0
  69. package/dist/internal/index.js +38 -0
  70. package/dist/internal/interpreter.d.ts +10 -0
  71. package/dist/internal/interpreter.d.ts.map +1 -0
  72. package/dist/internal/interpreter.js +1 -0
  73. package/dist/internal/locutils.d.ts +4 -0
  74. package/dist/internal/locutils.d.ts.map +1 -0
  75. package/dist/internal/locutils.js +22 -0
  76. package/dist/internal/net.d.ts +4 -0
  77. package/dist/internal/net.d.ts.map +1 -0
  78. package/dist/internal/net.js +64 -0
  79. package/dist/internal/realdom.d.ts +249 -0
  80. package/dist/internal/realdom.d.ts.map +1 -0
  81. package/dist/internal/realdom.js +1 -0
  82. package/dist/internal/styleregistry.d.ts +6 -0
  83. package/dist/internal/styleregistry.d.ts.map +1 -0
  84. package/dist/internal/styleregistry.js +18 -0
  85. package/dist/internal/taskreg.d.ts +9 -0
  86. package/dist/internal/taskreg.d.ts.map +1 -0
  87. package/dist/internal/taskreg.js +28 -0
  88. package/dist/internal/testing.d.ts +12 -0
  89. package/dist/internal/testing.d.ts.map +1 -0
  90. package/dist/internal/testing.js +974 -0
  91. package/dist/internal/testinginterpreter.d.ts +10 -0
  92. package/dist/internal/testinginterpreter.d.ts.map +1 -0
  93. package/dist/internal/testinginterpreter.js +646 -0
  94. package/dist/internal/vdom.d.ts +93 -0
  95. package/dist/internal/vdom.d.ts.map +1 -0
  96. package/dist/internal/vdom.js +470 -0
  97. package/dist/json/index.d.ts +5 -0
  98. package/dist/json/index.d.ts.map +1 -0
  99. package/dist/json/index.js +2 -0
  100. package/dist/json/validation.d.ts +28 -0
  101. package/dist/json/validation.d.ts.map +1 -0
  102. package/dist/json/validation.js +8 -0
  103. package/dist/net/fragment.d.ts +10 -0
  104. package/dist/net/fragment.d.ts.map +1 -0
  105. package/dist/net/fragment.js +27 -0
  106. package/dist/net/index.d.ts +42 -0
  107. package/dist/net/index.d.ts.map +1 -0
  108. package/dist/net/index.js +60 -0
  109. package/dist/net/location.d.ts +21 -0
  110. package/dist/net/location.d.ts.map +1 -0
  111. package/dist/net/location.js +41 -0
  112. package/dist/net/path.d.ts +12 -0
  113. package/dist/net/path.d.ts.map +1 -0
  114. package/dist/net/path.js +29 -0
  115. package/dist/net/queryparam.d.ts +10 -0
  116. package/dist/net/queryparam.d.ts.map +1 -0
  117. package/dist/net/queryparam.js +34 -0
  118. package/dist/router.d.ts +40 -0
  119. package/dist/router.d.ts.map +1 -0
  120. package/dist/router.js +77 -0
  121. package/dist/scroll.d.ts +7 -0
  122. package/dist/scroll.d.ts.map +1 -0
  123. package/dist/scroll.js +3 -0
  124. package/dist/testing.d.ts +248 -0
  125. package/dist/testing.d.ts.map +1 -0
  126. package/dist/testing.js +159 -0
  127. package/dist/utils/apply.d.ts +9 -0
  128. package/dist/utils/apply.d.ts.map +1 -0
  129. package/dist/utils/apply.js +10 -0
  130. package/dist/utils/index.d.ts +22 -0
  131. package/dist/utils/index.d.ts.map +1 -0
  132. package/dist/utils/index.js +138 -0
  133. package/dist/utils/lens.d.ts +18 -0
  134. package/dist/utils/lens.d.ts.map +1 -0
  135. package/dist/utils/lens.js +27 -0
  136. package/dist/utils/match.d.ts +17 -0
  137. package/dist/utils/match.d.ts.map +1 -0
  138. package/dist/utils/match.js +28 -0
  139. package/dist/utils/result.d.ts +47 -0
  140. package/dist/utils/result.d.ts.map +1 -0
  141. package/dist/utils/result.js +97 -0
  142. package/dist/webcomponent.d.ts +15 -0
  143. package/dist/webcomponent.d.ts.map +1 -0
  144. package/dist/webcomponent.js +43 -0
  145. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ import { type NodeGroup } from './dom/views';
2
+ import type { Node } from './dom';
3
+ import { type Effect } from './effects';
4
+ import type { Component } from './dom/components';
5
+ /** Type guard that returns true when `effectOrState` is a plain state value rather than an `Effect`. */
6
+ export declare function isState<State>(effectOrState: Effect<State, never, State> | State): effectOrState is State;
7
+ /** Converts a plain view function and initial state into a `Component`. Used internally by `manageApplication`; prefer `component()` from `ctrl-fx/dom` in application code. */
8
+ export declare function toComponent<State>(app: (state: State) => Node<State, never> | NodeGroup<State, never>, initialState: State | Effect<State, never, State>): Component<State, void, never>;
9
+ /**
10
+ * Mounts a ctrl-fx application into the DOM element with id `mountId` and starts the runtime.
11
+ * Returns a `dispatchEffect` handle for triggering effects from outside the framework
12
+ * (e.g. from a service worker message).
13
+ * @param mountId The id of the mount element. Defaults to `'app'`.
14
+ */
15
+ export declare function manageApplication<State>(app: (state: State) => Node<State, never> | NodeGroup<State, never>, initialState: State | Effect<State, never, State>, mountId?: string): {
16
+ dispatchEffect: (effect: Effect<State, never, void>) => void;
17
+ };
18
+ /** Width and height in pixels, as reported by a resize observer. */
19
+ export type Dimensions = {
20
+ width: number;
21
+ height: number;
22
+ };
23
+ /** The browser permission state for a feature such as notifications. */
24
+ export interface Permission {
25
+ value: 'default' | 'granted' | 'denied';
26
+ /** Returns true when the permission has been explicitly granted. */
27
+ isGranted(): boolean;
28
+ /** Returns true when the user has not yet been prompted. */
29
+ isDefault(): boolean;
30
+ /** Returns true when the permission has been explicitly denied. */
31
+ isDenied(): boolean;
32
+ }
33
+ /** Constructs a `Permission` value from a raw browser permission string. */
34
+ export declare function permission(value: 'default' | 'granted' | 'denied'): Permission;
35
+ /** A branded string containing a UUID v4. */
36
+ export type Uuid = string & {
37
+ __brand: 'Uuid';
38
+ };
39
+ /** Deterministically derives a UUID-shaped string from `input` by hashing it. Useful for generating stable node identifiers from content. */
40
+ export declare function uuidFromString(input: string): Uuid;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAOjD,wGAAwG;AACxG,wBAAgB,OAAO,CAAC,KAAK,EAC3B,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,GACjD,aAAa,IAAI,KAAK,CAExB;AAED,gLAAgL;AAChL,wBAAgB,WAAW,CAAC,KAAK,EAC/B,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EACnE,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAChD,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAwB/B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EACrC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EACnE,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACjD,OAAO,GAAE,MAAc,GACtB;IAAE,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA;CAAE,CAUlE;AAeD,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;IACvC,oEAAoE;IACpE,SAAS,IAAI,OAAO,CAAA;IACpB,4DAA4D;IAC5D,SAAS,IAAI,OAAO,CAAA;IACpB,mEAAmE;IACnE,QAAQ,IAAI,OAAO,CAAA;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GACtC,UAAU,CAaZ;AAED,6CAA6C;AAC7C,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C,6IAA6I;AAC7I,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAkBlD"}
package/dist/index.js ADDED
@@ -0,0 +1,78 @@
1
+ //import type { Component } from "./components";
2
+ //import { type NodeGroup } from "./dom/views";
3
+ import { isNodeGroup, nodeGroup } from './dom/views';
4
+ import {
5
+ /*isEffect, makeEffects,*/ isEffect, makeEffects, } from './effects';
6
+ import { domInterpreter } from './internal/dominterpreter';
7
+ import { manageComponent } from './internal/cmpmgr';
8
+ import { realStyleRegistry } from './internal/styleregistry';
9
+ //import { ComponentManager } from "./internal/cmpmgr";
10
+ /** Type guard that returns true when `effectOrState` is a plain state value rather than an `Effect`. */
11
+ export function isState(effectOrState) {
12
+ return !isEffect(effectOrState);
13
+ }
14
+ /** Converts a plain view function and initial state into a `Component`. Used internally by `manageApplication`; prefer `component()` from `ctrl-fx/dom` in application code. */
15
+ export function toComponent(app, initialState) {
16
+ const { pure } = makeEffects();
17
+ const initialStateEffect = isState(initialState)
18
+ ? pure(initialState)
19
+ : initialState;
20
+ const adjustedApp = (state) => {
21
+ const nodeOrNodeGroup = app(state);
22
+ if (isNodeGroup(nodeOrNodeGroup)) {
23
+ return nodeOrNodeGroup;
24
+ }
25
+ else {
26
+ return nodeGroup(nodeOrNodeGroup);
27
+ }
28
+ };
29
+ return {
30
+ _type: 'Component',
31
+ params: undefined,
32
+ view: adjustedApp,
33
+ initialState() {
34
+ return initialStateEffect;
35
+ },
36
+ };
37
+ }
38
+ /**
39
+ * Mounts a ctrl-fx application into the DOM element with id `mountId` and starts the runtime.
40
+ * Returns a `dispatchEffect` handle for triggering effects from outside the framework
41
+ * (e.g. from a service worker message).
42
+ * @param mountId The id of the mount element. Defaults to `'app'`.
43
+ */
44
+ export function manageApplication(app, initialState, mountId = 'app') {
45
+ const component = toComponent(app, initialState);
46
+ return manageComponent(component, mountId, globalThis.window, domInterpreter, realStyleRegistry());
47
+ }
48
+ /** Constructs a `Permission` value from a raw browser permission string. */
49
+ export function permission(value) {
50
+ return {
51
+ value,
52
+ isGranted() {
53
+ return value === 'granted';
54
+ },
55
+ isDefault() {
56
+ return value === 'default';
57
+ },
58
+ isDenied() {
59
+ return value === 'denied';
60
+ },
61
+ };
62
+ }
63
+ /** Deterministically derives a UUID-shaped string from `input` by hashing it. Useful for generating stable node identifiers from content. */
64
+ export function uuidFromString(input) {
65
+ let hash = 0;
66
+ for (let i = 0; i < input.length; i++) {
67
+ hash = ((hash << 5) - hash + input.charCodeAt(i)) | 0;
68
+ }
69
+ const hex = (hash >>> 0).toString(16).padStart(8, '0');
70
+ const repeated = hex.repeat(4);
71
+ return [
72
+ repeated.slice(0, 8),
73
+ repeated.slice(8, 12),
74
+ repeated.slice(12, 16),
75
+ repeated.slice(16, 20),
76
+ repeated.slice(20, 32),
77
+ ].join('-');
78
+ }
@@ -0,0 +1,5 @@
1
+ import { type ClipboardError } from '../clipboard';
2
+ import { type Result } from '../utils/result';
3
+ export declare function writeClipboard(text: string, callback: (result: Result<void, ClipboardError>) => void): void;
4
+ export declare function readClipboard(callback: (result: Result<string, ClipboardError>) => void): void;
5
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/internal/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE/D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,IAAI,GACvD,IAAI,CAWN;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,IAAI,GACzD,IAAI,CAWN"}
@@ -0,0 +1,33 @@
1
+ import { clipboardError } from '../clipboard';
2
+ import { failure, success } from '../utils/result';
3
+ export function writeClipboard(text, callback) {
4
+ if (!globalThis.navigator?.clipboard?.writeText) {
5
+ callback(failure(clipboardError('NotSupported', 'Clipboard API not available')));
6
+ return;
7
+ }
8
+ globalThis.navigator.clipboard
9
+ .writeText(text)
10
+ .then(() => callback(success(undefined)))
11
+ .catch((err) => callback(failure(toClipboardError(err))));
12
+ }
13
+ export function readClipboard(callback) {
14
+ if (!globalThis.navigator?.clipboard?.readText) {
15
+ callback(failure(clipboardError('NotSupported', 'Clipboard API not available')));
16
+ return;
17
+ }
18
+ globalThis.navigator.clipboard
19
+ .readText()
20
+ .then(text => callback(success(text)))
21
+ .catch((err) => callback(failure(toClipboardError(err))));
22
+ }
23
+ function toClipboardError(err) {
24
+ if (err instanceof DOMException && err.name === 'NotAllowedError') {
25
+ return clipboardError('NotAllowed', err.message);
26
+ }
27
+ else if (err instanceof Error) {
28
+ return clipboardError('UnexpectedError', err.message);
29
+ }
30
+ else {
31
+ return clipboardError('UnexpectedError', `Unexpected clipboard error: ${err}`);
32
+ }
33
+ }
@@ -0,0 +1,46 @@
1
+ import { type ComponentPath } from ".";
2
+ import { type Component } from "../dom/components";
3
+ import type { Effect } from "../effects";
4
+ import type { Interpreter } from "./interpreter";
5
+ import type { RealElement, RealWindow } from "./realdom";
6
+ import type { StyleRegistry } from "./styleregistry";
7
+ import { type ComponentState, type InternalNode } from "./vdom";
8
+ export declare function manageComponent<State, Params, Event>(component: Component<State, Params, Event>, mountId: string, window: RealWindow, interpreter: Interpreter, styleRegistry: StyleRegistry): {
9
+ dispatchEffect: (effect: Effect<State, Event, void>) => void;
10
+ };
11
+ export declare class ComponentManager {
12
+ private rootCompPath;
13
+ private components;
14
+ private removedComponents;
15
+ private addedComponents;
16
+ private interpreter;
17
+ private window;
18
+ private document;
19
+ private eventManager;
20
+ private taskRegistry;
21
+ private styleRegistry;
22
+ private onRootEvent;
23
+ constructor(component: Component<unknown, unknown, unknown>, mountNode: RealElement, window: RealWindow, interpreter: Interpreter, styleRegistry: StyleRegistry, onRootEvent?: (event: unknown) => void);
24
+ private injectComponentCss;
25
+ getRootState(): ComponentState;
26
+ dispatchEffect(effect: Effect<unknown, unknown, void>): void;
27
+ destroy(): void;
28
+ private runEffect;
29
+ private renderComponent;
30
+ private compareNodeSequences;
31
+ private removeNode;
32
+ private compareNodes;
33
+ private convertNodeToInternalNode;
34
+ /**
35
+ * Return an old node that can be compared to `newNode`.
36
+ *
37
+ * If the old node represent the same node as `newNode`, return it.
38
+ *
39
+ * If the same node isn't found, return the first node if it is `comparable`,
40
+ * otherwise return undefined. (We don't move nodes if they are comparable but
41
+ * not the same).
42
+ */
43
+ private findCorrespondingOldNode;
44
+ }
45
+ export declare function foldTree<A>(root: InternalNode, ancestorComponentPath: ComponentPath, init: A, f: (node: InternalNode, ancestorComponentId: ComponentPath, acc: A) => A): A;
46
+ //# sourceMappingURL=cmpmgr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmpmgr.d.ts","sourceRoot":"","sources":["../../src/internal/cmpmgr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,GAAG,CAAC;AAGtD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAgB,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAYL,KAAK,cAAc,EACnB,KAAK,YAAY,EAGlB,MAAM,QAAQ,CAAC;AAIhB,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAClD,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAC1C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,GAC3B;IAAE,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA;CAAE,CAkBlE;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,UAAU,CAEX;IAEP,OAAO,CAAC,iBAAiB,CAElB;IAEP,OAAO,CAAC,eAAe,CAAuB;IAE9C,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAE/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,WAAW,CAAyC;gBAG1D,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAC/C,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAqCxC,OAAO,CAAC,kBAAkB;IAW1B,YAAY,IAAI,cAAc;IAQ9B,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI;IAI5D,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,SAAS;IAsCjB,OAAO,CAAC,eAAe;IA2CvB,OAAO,CAAC,oBAAoB;IA6C5B,OAAO,CAAC,UAAU;IAiDlB,OAAO,CAAC,YAAY;IAqJpB,OAAO,CAAC,yBAAyB;IAwIjC;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;CAgCjC;AAoED,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,YAAY,EAClB,qBAAqB,EAAE,aAAa,EACpC,IAAI,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GACvE,CAAC,CA+CH"}