@lankajs/svelte 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/testing.js +5 -12802
- package/dist/testing.js.map +1 -1
- package/package.json +4 -3
- package/skills/lanka-svelte/SKILL.md +1 -1
- package/skills/lanka-svelte/reference.md +1 -1
- package/dist/chunk-5WRI5ZAA.js +0 -31
- package/dist/chunk-5WRI5ZAA.js.map +0 -1
- package/dist/wrapper-scaffold-3RO7M4FF.js +0 -39
- package/dist/wrapper-scaffold-3RO7M4FF.js.map +0 -1
- package/dist/wrapper-scaffold-legacy-UQDPD4HL.js +0 -48
- package/dist/wrapper-scaffold-legacy-UQDPD4HL.js.map +0 -1
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/to-lanka-svelte-vm/toLankaSvelteVM.ts","../src/use-lanka-vm/useLankaVM.ts"],"sourcesContent":["import { createLankaViewSubscription } from \"lanka/extend\";\nimport type { ILankaReadableVM } from \"lanka/viewmodel\";\n\n/** How a subscriber stops listening. */\nexport type TLankaVMUnsubscriber = () => void;\n\n/**\n * Svelte's store contract, which is an interface and not a class — satisfied by\n * a ViewModel rather than by a store of ours.\n *\n * One method. Anything with it works with `$store`, `derived`, `get` and every\n * helper in `svelte/store` — which is the whole reason the contract is that\n * small.\n */\nexport interface ILankaSvelteVM<TValue> {\n\tsubscribe: (run: (value: TValue) => void) => TLankaVMUnsubscriber;\n}\n\n/**\n * A ViewModel that satisfies Svelte's store contract, so `$` works on it.\n *\n * ```svelte\n * <script lang=\"ts\">\n * \timport { toLankaSvelteVM } from \"@lankajs/svelte\";\n * \tconst todos = toLankaSvelteVM(todosVM);\n * </script>\n *\n * {#each $todos.rows as row}<li>{row}</li>{/each}\n * ```\n *\n * ## Why this exists beside `useLankaVM`\n *\n * `useLankaVM` answers an object of getters, which is Svelte 5's own shape and\n * the right default: a read registers with the reactivity graph and with the\n * access tracker in ONE access, and nothing needs a `$`.\n *\n * The store contract is the other half of Svelte, and it has not gone anywhere.\n * `$page`, `$navigating` and every store SvelteKit hands a route are read with a\n * `$`; `derived`, `get` and `writable` all speak it; and a codebase that has not\n * moved to runes speaks nothing else. A consumer with that habit reaches for\n * `$todosVM`, and without this they are told a ViewModel is not a store.\n *\n * ## It is the same subscription\n *\n * One `subscribe` on the ViewModel per Svelte subscriber, the access tracker's\n * decision about whether a change is worth an update, and no state of its own —\n * the rules the parity canon sets for an idiom. What it does NOT do is share one\n * ViewModel subscription between Svelte subscribers: each gets its own tracker,\n * because two readers of one ViewModel read different keys and must be woken for\n * different changes. That is the same rule every binding on the shelf follows.\n *\n * ## The contract's own rule: call `run` immediately\n *\n * Svelte requires the current value on subscription, synchronously, before\n * `subscribe` returns — `$store` reads it during the component's first render\n * and would otherwise be `undefined`. `subscribe` on the ViewModel does NOT fire\n * on registration, which is correct for a port and is why the first call is made\n * here by hand.\n */\nexport const toLankaSvelteVM = <TState extends object>(\n\tviewModel: ILankaReadableVM<TState>,\n): ILankaSvelteVM<TState> => ({\n\tsubscribe: (run) => {\n\t\tconst view = createLankaViewSubscription(viewModel, () => run(view.read()));\n\n\t\t// The contract's own rule: the current value, synchronously, before\n\t\t// `subscribe` returns. `$store` reads it during the first render and would\n\t\t// otherwise be `undefined` — and the ViewModel's `subscribe` deliberately\n\t\t// does not fire on registration, which is correct for a port.\n\t\trun(view.read());\n\n\t\treturn view.stop;\n\t},\n});\n","import { createSubscriber } from \"svelte/reactivity\";\nimport { createLankaAccessTracker } from \"lanka/extend\";\nimport type { ILankaReadableVM } from \"lanka/viewmodel\";\n\n/** A ViewModel read from Svelte: the state by getters, and a way to stop reading. */\n/**\n * What a TRACKED read answers: the state's own keys, as getters.\n *\n * Reading one registers with Svelte's graph and with the access tracker in a\n * single access, which is why this shape and not a ref.\n */\nexport type TLankaVMView<TValue> = TValue & {\n\tstop: () => void;\n};\n\n/**\n * What a SELECTED read answers: one value, under `current`.\n *\n * `.current` is Svelte's own convention for a reactive value a class exposes —\n * `MediaQuery` and the rest of `svelte/reactivity` read that way — so a consumer\n * needs no explanation.\n *\n * A getter object rather than the state's keys, and that is not a preference. A\n * selector may answer anything, including a number, and there are no keys to\n * define on a number: the shape that carried the selection's own keys accepted\n * `TSelected extends object` and refused `(state) => state.count`, which is a\n * member of this shelf NARROWING the shared name. The conformance suite's\n * selector scenes found it.\n */\nexport type TLankaVMSelectedView<TSelected> = {\n\treadonly current: TSelected;\n\tstop: () => void;\n};\n\n/**\n * Reads a ViewModel from Svelte.\n *\n * ```svelte\n * <script lang=\"ts\">\n * const state = useLankaVM(todoVM);\n * </script>\n *\n * {#each state.todos as todo (todo.id)}\n * <li>{todo.title}</li>\n * {/each}\n * ```\n *\n * Without a selector the view records which keys were read and updates only when\n * one of THOSE moves. With a selector the selector decides and tracking is\n * bypassed.\n *\n * ## `createSubscriber`, and not the store contract\n *\n * Svelte reads a `{ subscribe }` object as a store, and a ViewModel nearly is\n * one — the shapes differ only in that Svelte calls the listener immediately.\n * Bridging that is two lines and was rejected anyway: the store contract is\n * Svelte 4's way, it does not compose with `$state`, and a consumer would write\n * `$todoVM` where every other framework writes a plain read.\n *\n * `createSubscriber` is plain TypeScript, which is why this package needs no\n * compiler and builds like every other one here.\n *\n * ## Why the properties are getters\n *\n * Svelte's reactivity is read-driven: an effect depends on what it READ. That is\n * the same question `createLankaAccessTracker` answers, so the two line up\n * exactly — reading `state.todos` records `todos` in the tracker AND registers\n * the effect with Svelte's graph, in one access.\n *\n * ## What this function does NOT contain\n *\n * The recording, the comparison and the blind-spot warning are in core. If this\n * file ever needs more than the port gives it, the port has the defect.\n */\nexport function useLankaVM<TState extends object>(\n\tviewModel: ILankaReadableVM<TState>,\n): TLankaVMView<TState>;\n\nexport function useLankaVM<TState extends object, TSelected>(\n\tviewModel: ILankaReadableVM<TState>,\n\tselector: (state: TState) => TSelected,\n): TLankaVMSelectedView<TSelected>;\n\nexport function useLankaVM<TState extends object, TSelected>(\n\tviewModel: ILankaReadableVM<TState>,\n\tselector?: (state: TState) => TSelected,\n): TLankaVMView<TState> | TLankaVMSelectedView<TSelected> {\n\tconst tracker = createLankaAccessTracker(viewModel);\n\n\tlet stop = (): void => undefined;\n\tlet selected: TSelected | undefined = selector ? selector(viewModel.getState()) : undefined;\n\n\tconst subscribe = createSubscriber((update) => {\n\t\tstop = viewModel.subscribe((next, prev) => {\n\t\t\tif (selector) {\n\t\t\t\tconst picked = selector(next);\n\n\t\t\t\t// Only when the SELECTION moved. `update()` invalidates whoever read\n\t\t\t\t// this view, and a selected reader that invalidated on every change\n\t\t\t\t// would be narrowing what it READS and nothing else — which is what\n\t\t\t\t// the suite's selector scenes refuse.\n\t\t\t\tif (Object.is(picked, selected)) return;\n\n\t\t\t\tselected = picked;\n\t\t\t\tupdate();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!tracker.shouldNotify(next, prev)) {\n\t\t\t\t// No update will follow. If the changed key is linked to this view\n\t\t\t\t// through a getter it read, the screen froze — and in development core\n\t\t\t\t// says so by name.\n\t\t\t\ttracker.reportSkipped(next, prev);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t});\n\n\t\treturn () => {\n\t\t\tstop();\n\t\t};\n\t});\n\n\t/**\n\t * A selected read answers ONE value, under `current`.\n\t *\n\t * Svelte's own convention for a reactive value — `MediaQuery` and the rest of\n\t * `svelte/reactivity` read that way — and the only shape that can carry a\n\t * selection which is not an object.\n\t */\n\tif (selector) {\n\t\tconst selectedView = {} as Record<string, unknown>;\n\n\t\tObject.defineProperty(selectedView, \"current\", {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\tsubscribe();\n\n\t\t\t\treturn selector(viewModel.getState());\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(selectedView, \"stop\", {\n\t\t\tenumerable: false,\n\t\t\tvalue: () => {\n\t\t\t\tstop();\n\t\t\t},\n\t\t});\n\n\t\treturn selectedView as TLankaVMSelectedView<TSelected>;\n\t}\n\n\t/**\n\t * One getter per key, over the keys the ViewModel has right now.\n\t *\n\t * Built from the CURRENT state rather than left to a Proxy, because Svelte's\n\t * compiler and its `$inspect` walk an object's own descriptors: a Proxy would\n\t * track correctly and show a consumer nothing in devtools.\n\t */\n\tconst view = {} as Record<string, unknown>;\n\n\tfor (const key of Object.keys(viewModel.getState())) {\n\t\tObject.defineProperty(view, key, {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\tsubscribe();\n\n\t\t\t\t// `tracker.read()` and not a shared `read` helper: this getter is only\n\t\t\t\t// built on the TRACKED path — the selected view returns above it — so a\n\t\t\t\t// helper that branched on the selector carried an arm nothing could\n\t\t\t\t// reach, and an unreachable branch is a line no test can ever cover.\n\t\t\t\treturn (tracker.read() as Record<string, unknown>)[key];\n\t\t\t},\n\t\t});\n\t}\n\n\tObject.defineProperty(view, \"stop\", {\n\t\tenumerable: false,\n\t\tvalue: () => {\n\t\t\tstop();\n\t\t},\n\t});\n\n\treturn view as TLankaVMView<TState>;\n}\n"],"mappings":";;;AAAA,SAAS,mCAAmC;AA2DrC,IAAM,kBAAkB,CAC9B,eAC6B;AAAA,EAC7B,WAAW,CAAC,QAAQ;AACnB,UAAM,OAAO,4BAA4B,WAAW,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC;AAM1E,QAAI,KAAK,KAAK,CAAC;AAEf,WAAO,KAAK;AAAA,EACb;AACD;;;ACzEA,SAAS,wBAAwB;AACjC,SAAS,gCAAgC;AAkFlC,SAAS,WACf,WACA,UACyD;AACzD,QAAM,UAAU,yBAAyB,SAAS;AAElD,MAAI,OAAO,MAAY;AACvB,MAAI,WAAkC,WAAW,SAAS,UAAU,SAAS,CAAC,IAAI;AAElF,QAAM,YAAY,iBAAiB,CAAC,WAAW;AAC9C,WAAO,UAAU,UAAU,CAAC,MAAM,SAAS;AAC1C,UAAI,UAAU;AACb,cAAM,SAAS,SAAS,IAAI;AAM5B,YAAI,OAAO,GAAG,QAAQ,QAAQ,EAAG;AAEjC,mBAAW;AACX,eAAO;AAEP;AAAA,MACD;AAEA,UAAI,CAAC,QAAQ,aAAa,MAAM,IAAI,GAAG;AAItC,gBAAQ,cAAc,MAAM,IAAI;AAChC;AAAA,MACD;AAEA,aAAO;AAAA,IACR,CAAC;AAED,WAAO,MAAM;AACZ,WAAK;AAAA,IACN;AAAA,EACD,CAAC;AASD,MAAI,UAAU;AACb,UAAM,eAAe,CAAC;AAEtB,WAAO,eAAe,cAAc,WAAW;AAAA,MAC9C,YAAY;AAAA,MACZ,KAAK,MAAM;AACV,kBAAU;AAEV,eAAO,SAAS,UAAU,SAAS,CAAC;AAAA,MACrC;AAAA,IACD,CAAC;AACD,WAAO,eAAe,cAAc,QAAQ;AAAA,MAC3C,YAAY;AAAA,MACZ,OAAO,MAAM;AACZ,aAAK;AAAA,MACN;AAAA,IACD,CAAC;AAED,WAAO;AAAA,EACR;AASA,QAAM,OAAO,CAAC;AAEd,aAAW,OAAO,OAAO,KAAK,UAAU,SAAS,CAAC,GAAG;AACpD,WAAO,eAAe,MAAM,KAAK;AAAA,MAChC,YAAY;AAAA,MACZ,KAAK,MAAM;AACV,kBAAU;AAMV,eAAQ,QAAQ,KAAK,EAA8B,GAAG;AAAA,MACvD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,SAAO,eAAe,MAAM,QAAQ;AAAA,IACnC,YAAY;AAAA,IACZ,OAAO,MAAM;AACZ,WAAK;AAAA,IACN;AAAA,EACD,CAAC;AAED,SAAO;AACR;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/to-lanka-svelte-vm/toLankaSvelteVM.ts","../src/use-lanka-vm/useLankaVM.ts"],"sourcesContent":["import { createLankaViewSubscription } from \"lanka/extend\";\nimport type { ILankaReadableVM } from \"lanka/viewmodel\";\n\n/** How a subscriber stops listening. */\nexport type TLankaVMUnsubscriber = () => void;\n\n/**\n * Svelte's store contract, which is an interface and not a class — satisfied by\n * a ViewModel rather than by a store of ours.\n *\n * One method. Anything with it works with `$store`, `derived`, `get` and every\n * helper in `svelte/store` — which is the whole reason the contract is that\n * small.\n */\nexport interface ILankaSvelteVM<TValue> {\n\tsubscribe: (run: (value: TValue) => void) => TLankaVMUnsubscriber;\n}\n\n/**\n * A ViewModel that satisfies Svelte's store contract, so `$` works on it.\n *\n * ```svelte\n * <script lang=\"ts\">\n * \timport { toLankaSvelteVM } from \"@lankajs/svelte\";\n * \tconst todos = toLankaSvelteVM(todosVM);\n * </script>\n *\n * {#each $todos.rows as row}<li>{row}</li>{/each}\n * ```\n *\n * ## Why this exists beside `useLankaVM`\n *\n * `useLankaVM` answers an object of getters, which is Svelte 5's own shape and\n * the right default: a read registers with the reactivity graph and with the\n * access tracker in ONE access, and nothing needs a `$`.\n *\n * The store contract is the other half of Svelte, and it has not gone anywhere.\n * `$page`, `$navigating` and every store SvelteKit hands a route are read with a\n * `$`; `derived`, `get` and `writable` all speak it; and a codebase that has not\n * moved to runes speaks nothing else. A consumer with that habit reaches for\n * `$todosVM`, and without this they are told a ViewModel is not a store.\n *\n * ## It is the same subscription\n *\n * One `subscribe` on the ViewModel per Svelte subscriber, the access tracker's\n * decision about whether a change is worth an update, and no state of its own —\n * the rules the parity canon sets for an idiom. What it does NOT do is share one\n * ViewModel subscription between Svelte subscribers: each gets its own tracker,\n * because two readers of one ViewModel read different keys and must be woken for\n * different changes. That is the same rule every binding on the shelf follows.\n *\n * ## The contract's own rule: call `run` immediately\n *\n * Svelte requires the current value on subscription, synchronously, before\n * `subscribe` returns — `$store` reads it during the component's first render\n * and would otherwise be `undefined`. `subscribe` on the ViewModel does NOT fire\n * on registration, which is correct for a port and is why the first call is made\n * here by hand.\n */\nexport const toLankaSvelteVM = <TState extends object>(\n\tviewModel: ILankaReadableVM<TState>,\n): ILankaSvelteVM<TState> => ({\n\tsubscribe: (run) => {\n\t\tconst view = createLankaViewSubscription(viewModel, () => run(view.read()));\n\n\t\t// The contract's own rule: the current value, synchronously, before\n\t\t// `subscribe` returns. `$store` reads it during the first render and would\n\t\t// otherwise be `undefined` — and the ViewModel's `subscribe` deliberately\n\t\t// does not fire on registration, which is correct for a port.\n\t\trun(view.read());\n\n\t\treturn view.stop;\n\t},\n});\n","import { createSubscriber } from \"svelte/reactivity\";\nimport { createLankaAccessTracker } from \"lanka/extend\";\nimport type { ILankaReadableVM } from \"lanka/viewmodel\";\n\n/** A ViewModel read from Svelte: the state by getters, and a way to stop reading. */\n/**\n * What a TRACKED read answers: the state's own keys, as getters.\n *\n * Reading one registers with Svelte's graph and with the access tracker in a\n * single access, which is why this shape and not a ref.\n */\nexport type TLankaVMView<TValue> = TValue & {\n\tstop: () => void;\n};\n\n/**\n * What a SELECTED read answers: one value, under `current`.\n *\n * `.current` is Svelte's own convention for a reactive value a class exposes —\n * `MediaQuery` and the rest of `svelte/reactivity` read that way — so a consumer\n * needs no explanation.\n *\n * A getter object rather than the state's keys, and that is not a preference. A\n * selector may answer anything, including a number, and there are no keys to\n * define on a number: the shape that carried the selection's own keys accepted\n * `TSelected extends object` and refused `(state) => state.count`, which is a\n * member of this shelf NARROWING the shared name. The conformance suite's\n * selector scenes found it.\n */\nexport type TLankaVMSelectedView<TSelected> = {\n\treadonly current: TSelected;\n\tstop: () => void;\n};\n\n/**\n * Reads a ViewModel from Svelte.\n *\n * ```svelte\n * <script lang=\"ts\">\n * const state = useLankaVM(todoVM);\n * </script>\n *\n * {#each state.todos as todo (todo.id)}\n * <li>{todo.title}</li>\n * {/each}\n * ```\n *\n * Without a selector the view records which keys were read and updates only when\n * one of THOSE moves. With a selector the selector decides and tracking is\n * bypassed.\n *\n * ## `createSubscriber`, and not the store contract\n *\n * Svelte reads a `{ subscribe }` object as a store, and a ViewModel nearly is\n * one — the shapes differ only in that Svelte calls the listener immediately.\n * Bridging that is two lines and was rejected anyway: the store contract is\n * Svelte 4's way, it does not compose with `$state`, and a consumer would write\n * `$todoVM` where every other framework writes a plain read.\n *\n * `createSubscriber` is plain TypeScript, which is why this package needs no\n * compiler and builds like every other one here.\n *\n * ## Why the properties are getters\n *\n * Svelte's reactivity is read-driven: an effect depends on what it READ. That is\n * the same question `createLankaAccessTracker` answers, so the two line up\n * exactly — reading `state.todos` records `todos` in the tracker AND registers\n * the effect with Svelte's graph, in one access.\n *\n * ## What this function does NOT contain\n *\n * The recording, the comparison and the blind-spot warning are in core. If this\n * file ever needs more than the port gives it, the port has the defect.\n */\nexport function useLankaVM<TState extends object>(\n\tviewModel: ILankaReadableVM<TState>,\n): TLankaVMView<TState>;\n\nexport function useLankaVM<TState extends object, TSelected>(\n\tviewModel: ILankaReadableVM<TState>,\n\tselector: (state: TState) => TSelected,\n): TLankaVMSelectedView<TSelected>;\n\nexport function useLankaVM<TState extends object, TSelected>(\n\tviewModel: ILankaReadableVM<TState>,\n\tselector?: (state: TState) => TSelected,\n): TLankaVMView<TState> | TLankaVMSelectedView<TSelected> {\n\tconst tracker = createLankaAccessTracker(viewModel);\n\n\tlet stop = (): void => undefined;\n\tlet selected: TSelected | undefined = selector ? selector(viewModel.getState()) : undefined;\n\n\tconst subscribe = createSubscriber((update) => {\n\t\tstop = viewModel.subscribe((next, prev) => {\n\t\t\tif (selector) {\n\t\t\t\tconst picked = selector(next);\n\n\t\t\t\t// Only when the SELECTION moved. `update()` invalidates whoever read\n\t\t\t\t// this view, and a selected reader that invalidated on every change\n\t\t\t\t// would be narrowing what it READS and nothing else — which is what\n\t\t\t\t// the suite's selector scenes refuse.\n\t\t\t\tif (Object.is(picked, selected)) return;\n\n\t\t\t\tselected = picked;\n\t\t\t\tupdate();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!tracker.shouldNotify(next, prev)) {\n\t\t\t\t// No update will follow. If the changed key is linked to this view\n\t\t\t\t// through a getter it read, the screen froze — and in development core\n\t\t\t\t// says so by name.\n\t\t\t\ttracker.reportSkipped(next, prev);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t});\n\n\t\treturn () => {\n\t\t\tstop();\n\t\t};\n\t});\n\n\t/**\n\t * A selected read answers ONE value, under `current`.\n\t *\n\t * Svelte's own convention for a reactive value — `MediaQuery` and the rest of\n\t * `svelte/reactivity` read that way — and the only shape that can carry a\n\t * selection which is not an object.\n\t */\n\tif (selector) {\n\t\tconst selectedView = {} as Record<string, unknown>;\n\n\t\tObject.defineProperty(selectedView, \"current\", {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\tsubscribe();\n\n\t\t\t\treturn selector(viewModel.getState());\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(selectedView, \"stop\", {\n\t\t\tenumerable: false,\n\t\t\tvalue: () => {\n\t\t\t\tstop();\n\t\t\t},\n\t\t});\n\n\t\treturn selectedView as TLankaVMSelectedView<TSelected>;\n\t}\n\n\t/**\n\t * One getter per key, over the keys the ViewModel has right now.\n\t *\n\t * Built from the CURRENT state rather than left to a Proxy, because Svelte's\n\t * compiler and its `$inspect` walk an object's own descriptors: a Proxy would\n\t * track correctly and show a consumer nothing in devtools.\n\t */\n\tconst view = {} as Record<string, unknown>;\n\n\tfor (const key of Object.keys(viewModel.getState())) {\n\t\tObject.defineProperty(view, key, {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\tsubscribe();\n\n\t\t\t\t// `tracker.read()` and not a shared `read` helper: this getter is only\n\t\t\t\t// built on the TRACKED path — the selected view returns above it — so a\n\t\t\t\t// helper that branched on the selector carried an arm nothing could\n\t\t\t\t// reach, and an unreachable branch is a line no test can ever cover.\n\t\t\t\treturn (tracker.read() as Record<string, unknown>)[key];\n\t\t\t},\n\t\t});\n\t}\n\n\tObject.defineProperty(view, \"stop\", {\n\t\tenumerable: false,\n\t\tvalue: () => {\n\t\t\tstop();\n\t\t},\n\t});\n\n\treturn view as TLankaVMView<TState>;\n}\n"],"mappings":";AAAA,SAAS,mCAAmC;AA2DrC,IAAM,kBAAkB,CAC9B,eAC6B;AAAA,EAC7B,WAAW,CAAC,QAAQ;AACnB,UAAM,OAAO,4BAA4B,WAAW,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC;AAM1E,QAAI,KAAK,KAAK,CAAC;AAEf,WAAO,KAAK;AAAA,EACb;AACD;;;ACzEA,SAAS,wBAAwB;AACjC,SAAS,gCAAgC;AAkFlC,SAAS,WACf,WACA,UACyD;AACzD,QAAM,UAAU,yBAAyB,SAAS;AAElD,MAAI,OAAO,MAAY;AACvB,MAAI,WAAkC,WAAW,SAAS,UAAU,SAAS,CAAC,IAAI;AAElF,QAAM,YAAY,iBAAiB,CAAC,WAAW;AAC9C,WAAO,UAAU,UAAU,CAAC,MAAM,SAAS;AAC1C,UAAI,UAAU;AACb,cAAM,SAAS,SAAS,IAAI;AAM5B,YAAI,OAAO,GAAG,QAAQ,QAAQ,EAAG;AAEjC,mBAAW;AACX,eAAO;AAEP;AAAA,MACD;AAEA,UAAI,CAAC,QAAQ,aAAa,MAAM,IAAI,GAAG;AAItC,gBAAQ,cAAc,MAAM,IAAI;AAChC;AAAA,MACD;AAEA,aAAO;AAAA,IACR,CAAC;AAED,WAAO,MAAM;AACZ,WAAK;AAAA,IACN;AAAA,EACD,CAAC;AASD,MAAI,UAAU;AACb,UAAM,eAAe,CAAC;AAEtB,WAAO,eAAe,cAAc,WAAW;AAAA,MAC9C,YAAY;AAAA,MACZ,KAAK,MAAM;AACV,kBAAU;AAEV,eAAO,SAAS,UAAU,SAAS,CAAC;AAAA,MACrC;AAAA,IACD,CAAC;AACD,WAAO,eAAe,cAAc,QAAQ;AAAA,MAC3C,YAAY;AAAA,MACZ,OAAO,MAAM;AACZ,aAAK;AAAA,MACN;AAAA,IACD,CAAC;AAED,WAAO;AAAA,EACR;AASA,QAAM,OAAO,CAAC;AAEd,aAAW,OAAO,OAAO,KAAK,UAAU,SAAS,CAAC,GAAG;AACpD,WAAO,eAAe,MAAM,KAAK;AAAA,MAChC,YAAY;AAAA,MACZ,KAAK,MAAM;AACV,kBAAU;AAMV,eAAQ,QAAQ,KAAK,EAA8B,GAAG;AAAA,MACvD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,SAAO,eAAe,MAAM,QAAQ;AAAA,IACnC,YAAY;AAAA,IACZ,OAAO,MAAM;AACZ,WAAK;AAAA,IACN;AAAA,EACD,CAAC;AAED,SAAO;AACR;","names":[]}
|