@fluixi/dom 1.0.0-alpha.53

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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +657 -0
  3. package/dist/cdn/dom.cjs +1 -0
  4. package/dist/cdn/dom.d.ts +16 -0
  5. package/dist/cdn/dom.d.ts.map +1 -0
  6. package/dist/cdn/dom.global.js +1 -0
  7. package/dist/cdn/dom.js +15 -0
  8. package/dist/cdn/dom.mjs +1 -0
  9. package/dist/index.cjs +1 -0
  10. package/dist/index.d.ts +38 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +39 -0
  13. package/dist/index.mjs +1 -0
  14. package/dist/lib/component/index.cjs +1 -0
  15. package/dist/lib/component/index.d.ts +2 -0
  16. package/dist/lib/component/index.d.ts.map +1 -0
  17. package/dist/lib/component/index.js +1 -0
  18. package/dist/lib/component/index.mjs +1 -0
  19. package/dist/lib/component/modifiers.cjs +1 -0
  20. package/dist/lib/component/modifiers.d.ts +21 -0
  21. package/dist/lib/component/modifiers.d.ts.map +1 -0
  22. package/dist/lib/component/modifiers.js +171 -0
  23. package/dist/lib/component/modifiers.mjs +1 -0
  24. package/dist/lib/dom/delegate.cjs +1 -0
  25. package/dist/lib/dom/delegate.d.ts +17 -0
  26. package/dist/lib/dom/delegate.d.ts.map +1 -0
  27. package/dist/lib/dom/delegate.js +50 -0
  28. package/dist/lib/dom/delegate.mjs +1 -0
  29. package/dist/lib/dom/hydration-state.cjs +1 -0
  30. package/dist/lib/dom/hydration-state.d.ts +45 -0
  31. package/dist/lib/dom/hydration-state.d.ts.map +1 -0
  32. package/dist/lib/dom/hydration-state.js +94 -0
  33. package/dist/lib/dom/hydration-state.mjs +1 -0
  34. package/dist/lib/dom/hydration.cjs +1 -0
  35. package/dist/lib/dom/hydration.d.ts +10 -0
  36. package/dist/lib/dom/hydration.d.ts.map +1 -0
  37. package/dist/lib/dom/hydration.js +143 -0
  38. package/dist/lib/dom/hydration.mjs +1 -0
  39. package/dist/lib/dom/index.cjs +1 -0
  40. package/dist/lib/dom/index.d.ts +9 -0
  41. package/dist/lib/dom/index.d.ts.map +1 -0
  42. package/dist/lib/dom/index.js +12 -0
  43. package/dist/lib/dom/index.mjs +1 -0
  44. package/dist/lib/dom/integration.cjs +1 -0
  45. package/dist/lib/dom/integration.d.ts +16 -0
  46. package/dist/lib/dom/integration.d.ts.map +1 -0
  47. package/dist/lib/dom/integration.js +25 -0
  48. package/dist/lib/dom/integration.mjs +1 -0
  49. package/dist/lib/dom/island.cjs +1 -0
  50. package/dist/lib/dom/island.d.ts +23 -0
  51. package/dist/lib/dom/island.d.ts.map +1 -0
  52. package/dist/lib/dom/island.js +100 -0
  53. package/dist/lib/dom/island.mjs +1 -0
  54. package/dist/lib/dom/runtime.cjs +1 -0
  55. package/dist/lib/dom/runtime.d.ts +131 -0
  56. package/dist/lib/dom/runtime.d.ts.map +1 -0
  57. package/dist/lib/dom/runtime.js +1425 -0
  58. package/dist/lib/dom/runtime.mjs +1 -0
  59. package/dist/lib/dom/server/fx-data.cjs +1 -0
  60. package/dist/lib/dom/server/fx-data.d.ts +36 -0
  61. package/dist/lib/dom/server/fx-data.d.ts.map +1 -0
  62. package/dist/lib/dom/server/fx-data.js +60 -0
  63. package/dist/lib/dom/server/fx-data.mjs +1 -0
  64. package/dist/lib/dom/server/host.cjs +1 -0
  65. package/dist/lib/dom/server/host.d.ts +14 -0
  66. package/dist/lib/dom/server/host.d.ts.map +1 -0
  67. package/dist/lib/dom/server/host.js +38 -0
  68. package/dist/lib/dom/server/host.mjs +1 -0
  69. package/dist/lib/dom/server/index.cjs +1 -0
  70. package/dist/lib/dom/server/index.d.ts +13 -0
  71. package/dist/lib/dom/server/index.d.ts.map +1 -0
  72. package/dist/lib/dom/server/index.js +12 -0
  73. package/dist/lib/dom/server/index.mjs +1 -0
  74. package/dist/lib/dom/server/nodes.cjs +1 -0
  75. package/dist/lib/dom/server/nodes.d.ts +105 -0
  76. package/dist/lib/dom/server/nodes.d.ts.map +1 -0
  77. package/dist/lib/dom/server/nodes.js +304 -0
  78. package/dist/lib/dom/server/nodes.mjs +1 -0
  79. package/dist/lib/dom/server/render.cjs +1 -0
  80. package/dist/lib/dom/server/render.d.ts +45 -0
  81. package/dist/lib/dom/server/render.d.ts.map +1 -0
  82. package/dist/lib/dom/server/render.js +174 -0
  83. package/dist/lib/dom/server/render.mjs +1 -0
  84. package/dist/lib/dom/server/request-context.cjs +1 -0
  85. package/dist/lib/dom/server/request-context.d.ts +85 -0
  86. package/dist/lib/dom/server/request-context.d.ts.map +1 -0
  87. package/dist/lib/dom/server/request-context.js +122 -0
  88. package/dist/lib/dom/server/request-context.mjs +1 -0
  89. package/dist/lib/dom/server/serialize.cjs +1 -0
  90. package/dist/lib/dom/server/serialize.d.ts +2 -0
  91. package/dist/lib/dom/server/serialize.d.ts.map +1 -0
  92. package/dist/lib/dom/server/serialize.js +98 -0
  93. package/dist/lib/dom/server/serialize.mjs +1 -0
  94. package/dist/lib/dom/server-renderer.cjs +1 -0
  95. package/dist/lib/dom/server-renderer.d.ts +2 -0
  96. package/dist/lib/dom/server-renderer.d.ts.map +1 -0
  97. package/dist/lib/dom/server-renderer.js +5 -0
  98. package/dist/lib/dom/server-renderer.mjs +1 -0
  99. package/dist/lib/dom/types.cjs +1 -0
  100. package/dist/lib/dom/types.d.ts +119 -0
  101. package/dist/lib/dom/types.d.ts.map +1 -0
  102. package/dist/lib/dom/types.js +1 -0
  103. package/dist/lib/dom/types.mjs +0 -0
  104. package/dist/lib/dom/utils.cjs +1 -0
  105. package/dist/lib/dom/utils.d.ts +411 -0
  106. package/dist/lib/dom/utils.d.ts.map +1 -0
  107. package/dist/lib/dom/utils.js +746 -0
  108. package/dist/lib/dom/utils.mjs +1 -0
  109. package/dist/lib/element/index.cjs +1 -0
  110. package/dist/lib/element/index.d.ts +2 -0
  111. package/dist/lib/element/index.d.ts.map +1 -0
  112. package/dist/lib/element/index.js +1 -0
  113. package/dist/lib/element/index.mjs +0 -0
  114. package/dist/lib/element/types.cjs +1 -0
  115. package/dist/lib/element/types.d.ts +129 -0
  116. package/dist/lib/element/types.d.ts.map +1 -0
  117. package/dist/lib/element/types.js +5 -0
  118. package/dist/lib/element/types.mjs +0 -0
  119. package/dist/lib/flow/class-map.cjs +1 -0
  120. package/dist/lib/flow/class-map.d.ts +40 -0
  121. package/dist/lib/flow/class-map.d.ts.map +1 -0
  122. package/dist/lib/flow/class-map.js +44 -0
  123. package/dist/lib/flow/class-map.mjs +1 -0
  124. package/dist/lib/flow/dynamic.cjs +1 -0
  125. package/dist/lib/flow/dynamic.d.ts +27 -0
  126. package/dist/lib/flow/dynamic.d.ts.map +1 -0
  127. package/dist/lib/flow/dynamic.js +30 -0
  128. package/dist/lib/flow/dynamic.mjs +1 -0
  129. package/dist/lib/flow/error-boundary.cjs +1 -0
  130. package/dist/lib/flow/error-boundary.d.ts +34 -0
  131. package/dist/lib/flow/error-boundary.d.ts.map +1 -0
  132. package/dist/lib/flow/error-boundary.js +49 -0
  133. package/dist/lib/flow/error-boundary.mjs +1 -0
  134. package/dist/lib/flow/for.cjs +1 -0
  135. package/dist/lib/flow/for.d.ts +64 -0
  136. package/dist/lib/flow/for.d.ts.map +1 -0
  137. package/dist/lib/flow/for.js +28 -0
  138. package/dist/lib/flow/for.mjs +1 -0
  139. package/dist/lib/flow/index-flow.cjs +1 -0
  140. package/dist/lib/flow/index-flow.d.ts +34 -0
  141. package/dist/lib/flow/index-flow.d.ts.map +1 -0
  142. package/dist/lib/flow/index-flow.js +27 -0
  143. package/dist/lib/flow/index-flow.mjs +1 -0
  144. package/dist/lib/flow/index.cjs +1 -0
  145. package/dist/lib/flow/index.d.ts +20 -0
  146. package/dist/lib/flow/index.d.ts.map +1 -0
  147. package/dist/lib/flow/index.js +11 -0
  148. package/dist/lib/flow/index.mjs +1 -0
  149. package/dist/lib/flow/portal.cjs +1 -0
  150. package/dist/lib/flow/portal.d.ts +30 -0
  151. package/dist/lib/flow/portal.d.ts.map +1 -0
  152. package/dist/lib/flow/portal.js +44 -0
  153. package/dist/lib/flow/portal.mjs +1 -0
  154. package/dist/lib/flow/show.cjs +1 -0
  155. package/dist/lib/flow/show.d.ts +35 -0
  156. package/dist/lib/flow/show.d.ts.map +1 -0
  157. package/dist/lib/flow/show.js +162 -0
  158. package/dist/lib/flow/show.mjs +1 -0
  159. package/dist/lib/flow/style-map.cjs +1 -0
  160. package/dist/lib/flow/style-map.d.ts +49 -0
  161. package/dist/lib/flow/style-map.d.ts.map +1 -0
  162. package/dist/lib/flow/style-map.js +58 -0
  163. package/dist/lib/flow/style-map.mjs +1 -0
  164. package/dist/lib/flow/switch.cjs +1 -0
  165. package/dist/lib/flow/switch.d.ts +63 -0
  166. package/dist/lib/flow/switch.d.ts.map +1 -0
  167. package/dist/lib/flow/switch.js +69 -0
  168. package/dist/lib/flow/switch.mjs +1 -0
  169. package/dist/lib/flow/utils.cjs +1 -0
  170. package/dist/lib/flow/utils.d.ts +19 -0
  171. package/dist/lib/flow/utils.d.ts.map +1 -0
  172. package/dist/lib/flow/utils.js +34 -0
  173. package/dist/lib/flow/utils.mjs +1 -0
  174. package/dist/lib/index.cjs +1 -0
  175. package/dist/lib/index.d.ts +21 -0
  176. package/dist/lib/index.d.ts.map +1 -0
  177. package/dist/lib/index.js +30 -0
  178. package/dist/lib/index.mjs +1 -0
  179. package/dist/lib/jsx/control-flow/flow.cjs +1 -0
  180. package/dist/lib/jsx/control-flow/flow.d.ts +2 -0
  181. package/dist/lib/jsx/control-flow/flow.d.ts.map +1 -0
  182. package/dist/lib/jsx/control-flow/flow.js +627 -0
  183. package/dist/lib/jsx/control-flow/flow.mjs +0 -0
  184. package/dist/lib/jsx/control-flow/for-flow.cjs +1 -0
  185. package/dist/lib/jsx/control-flow/for-flow.d.ts +2 -0
  186. package/dist/lib/jsx/control-flow/for-flow.d.ts.map +1 -0
  187. package/dist/lib/jsx/control-flow/for-flow.js +1 -0
  188. package/dist/lib/jsx/control-flow/for-flow.mjs +0 -0
  189. package/dist/lib/shared/types.cjs +1 -0
  190. package/dist/lib/shared/types.d.ts +47 -0
  191. package/dist/lib/shared/types.d.ts.map +1 -0
  192. package/dist/lib/shared/types.js +1 -0
  193. package/dist/lib/shared/types.mjs +0 -0
  194. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  195. package/package.json +99 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Per-request SSR context — the request-scoping that fixes the "P0 #4"
3
+ * module-global concurrency hazard. State that must NOT be shared across
4
+ * concurrent server renders (route data, the matched-route map, the hydration
5
+ * id counter, the request event) lives here, keyed by an injectable store.
6
+ *
7
+ * The store interface is deliberately the shape of node's AsyncLocalStorage
8
+ * (`run(store, cb)` + `getStore()`), so a real ALS can be injected verbatim by
9
+ * the Node-only @fluixi/server package (and by tests). @fluixi/dom itself stays
10
+ * environment-agnostic: it never imports `node:async_hooks`, so browser bundles
11
+ * don't pull it in. The default store is a synchronous module-global — correct
12
+ * for a single sync render; concurrency isolation comes from the injected ALS.
13
+ */
14
+ /**
15
+ * Per-request mutable bag for data middleware attaches and loaders / server functions /
16
+ * the render read back (e.g. the authenticated user). Augment it from app/binding code:
17
+ *
18
+ * declare module '@fluixi/dom' {
19
+ * interface RequestLocals { auth?: { user: User | null } }
20
+ * }
21
+ */
22
+ export interface RequestLocals {
23
+ [key: string]: unknown;
24
+ }
25
+ export interface RequestEvent {
26
+ /** request URL/path being rendered */
27
+ url?: string;
28
+ /** the underlying platform request, when available (web Request, etc.) */
29
+ request?: unknown;
30
+ /** response headers/status the render wants to set */
31
+ responseHeaders?: Record<string, string>;
32
+ /** Mutable per-request data set by middleware, read by loaders/server fns/render. */
33
+ locals?: RequestLocals;
34
+ [key: string]: unknown;
35
+ }
36
+ export interface RequestContext {
37
+ event: RequestEvent;
38
+ /** loader/resource data resolved during this request (was sharedConfig.routeData) */
39
+ routeData: Map<unknown, unknown>;
40
+ /** the route match tree for this request (was sharedConfig.matchedRoute) */
41
+ matchedRoute: Map<unknown, unknown>;
42
+ /** monotonic per-request id source for hydration markers (was module-global ssrMarkerId) */
43
+ nextId(): string;
44
+ /**
45
+ * Per-request resource id (creation order) — matched on the client. Outside an island
46
+ * the id is global creation order (`r0`, `r1`, …). Inside an island scope it is namespaced
47
+ * and counted PER island (`Counter#0:r0`, …) so the client, which hydrates each island
48
+ * independently and restarts its local counter, reproduces the same ids and seeds each
49
+ * island's resources from `__FX_DATA__` without a global render.
50
+ */
51
+ nextResourceId(): string;
52
+ /** Allocate the next namespace for an island of this name (doc/render order): `name#N`. */
53
+ nextIslandNamespace(name: string): string;
54
+ /** Run `fn` with resource ids scoped to island `ns` (server: namespaced creation order). */
55
+ withResourceScope<T>(ns: string, fn: () => T): T;
56
+ /** in-flight resource fetch promises collected during async SSR */
57
+ pending: Set<Promise<unknown>>;
58
+ /** resolved resource data to serialize for client hydration, keyed by resource id */
59
+ data: Map<string, unknown>;
60
+ }
61
+ /** Matches AsyncLocalStorage<RequestContext> — inject one for real isolation. */
62
+ export interface RequestStore {
63
+ getStore(): RequestContext | undefined;
64
+ run<T>(ctx: RequestContext, fn: () => T): T;
65
+ }
66
+ /** Inject an AsyncLocalStorage-shaped store (Node @fluixi/server / tests). */
67
+ export declare function setRequestStore(store: RequestStore | null): void;
68
+ export declare function createRequestContext(event?: RequestEvent): RequestContext;
69
+ export declare function runWithRequestContext<T>(ctx: RequestContext, fn: () => T): T;
70
+ export declare function getRequestContext(): RequestContext | undefined;
71
+ export declare function getRequestEvent(): RequestEvent | undefined;
72
+ /**
73
+ * The current request's mutable `locals` bag (created if absent). Returns a fresh empty
74
+ * object when called outside a request context, so reads never throw. This is the seam
75
+ * middleware writes (e.g. `getLocals().auth = …`) and loaders / server functions read.
76
+ */
77
+ export declare function getLocals(): RequestLocals;
78
+ /**
79
+ * The mutable `locals` bag for a platform request object (created on first access).
80
+ * Middleware writes here (e.g. `getRequestLocals(request).auth = …`) before calling
81
+ * `next()`; the render then reads the same object via `getLocals()`. Pairs with the app
82
+ * entry forwarding `request` on the render event (`renderRequestAsync(App, { url, request })`).
83
+ */
84
+ export declare function getRequestLocals(request: object): RequestLocals;
85
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,qFAAqF;IACrF,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,qFAAqF;IACrF,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,4FAA4F;IAC5F,MAAM,IAAI,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,cAAc,IAAI,MAAM,CAAC;IACzB,2FAA2F;IAC3F,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C,4FAA4F;IAC5F,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACjD,mEAAmE;IACnE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,qFAAqF;IACrF,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5B;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,cAAc,GAAG,SAAS,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7C;AAqBD,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,YAAiB,GAAG,cAAc,CA0C7E;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE5E;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAKzC;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAO/D"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Per-request SSR context — the request-scoping that fixes the "P0 #4"
3
+ * module-global concurrency hazard. State that must NOT be shared across
4
+ * concurrent server renders (route data, the matched-route map, the hydration
5
+ * id counter, the request event) lives here, keyed by an injectable store.
6
+ *
7
+ * The store interface is deliberately the shape of node's AsyncLocalStorage
8
+ * (`run(store, cb)` + `getStore()`), so a real ALS can be injected verbatim by
9
+ * the Node-only @fluixi/server package (and by tests). @fluixi/dom itself stays
10
+ * environment-agnostic: it never imports `node:async_hooks`, so browser bundles
11
+ * don't pull it in. The default store is a synchronous module-global — correct
12
+ * for a single sync render; concurrency isolation comes from the injected ALS.
13
+ */
14
+ // Default synchronous store. A single sync render runs start-to-finish without
15
+ // interleaving, so a module-global is safe; under concurrent async renders an
16
+ // ALS store must be injected (see setRequestStore).
17
+ let _current;
18
+ const syncStore = {
19
+ getStore: () => _current,
20
+ run(ctx, fn) {
21
+ const prev = _current;
22
+ _current = ctx;
23
+ try {
24
+ return fn();
25
+ }
26
+ finally {
27
+ _current = prev;
28
+ }
29
+ },
30
+ };
31
+ let _store = syncStore;
32
+ /** Inject an AsyncLocalStorage-shaped store (Node @fluixi/server / tests). */
33
+ export function setRequestStore(store) {
34
+ _store = store ?? syncStore;
35
+ }
36
+ export function createRequestContext(event = {}) {
37
+ // Seed the locals bag: if the event carries the platform request, ADOPT the bag that
38
+ // middleware wrote via getRequestLocals(request) (the middleware→render bridge); else
39
+ // start a fresh empty one. Either way the render's getLocals() sees the right object.
40
+ if (!event.locals) {
41
+ event.locals = event.request ? getRequestLocals(event.request) : {};
42
+ }
43
+ let id = 0;
44
+ let rid = 0;
45
+ // Active island scope (namespace) and a per-namespace resource counter, so each island's
46
+ // resources are numbered from 0 independently of global render order.
47
+ let scope = null;
48
+ const scopeCounters = new Map();
49
+ const islandCounts = new Map();
50
+ return {
51
+ event,
52
+ routeData: new Map(),
53
+ matchedRoute: new Map(),
54
+ nextId: () => `s${id++}`,
55
+ nextResourceId: () => {
56
+ if (scope === null)
57
+ return `r${rid++}`;
58
+ const n = scopeCounters.get(scope) ?? 0;
59
+ scopeCounters.set(scope, n + 1);
60
+ return `${scope}:r${n}`;
61
+ },
62
+ nextIslandNamespace: (name) => {
63
+ const n = islandCounts.get(name) ?? 0;
64
+ islandCounts.set(name, n + 1);
65
+ return `${name}#${n}`;
66
+ },
67
+ withResourceScope(ns, fn) {
68
+ const prev = scope;
69
+ scope = ns;
70
+ try {
71
+ return fn();
72
+ }
73
+ finally {
74
+ scope = prev;
75
+ }
76
+ },
77
+ pending: new Set(),
78
+ data: new Map(),
79
+ };
80
+ }
81
+ export function runWithRequestContext(ctx, fn) {
82
+ return _store.run(ctx, fn);
83
+ }
84
+ export function getRequestContext() {
85
+ return _store.getStore();
86
+ }
87
+ export function getRequestEvent() {
88
+ return getRequestContext()?.event;
89
+ }
90
+ /**
91
+ * The current request's mutable `locals` bag (created if absent). Returns a fresh empty
92
+ * object when called outside a request context, so reads never throw. This is the seam
93
+ * middleware writes (e.g. `getLocals().auth = …`) and loaders / server functions read.
94
+ */
95
+ export function getLocals() {
96
+ const event = getRequestEvent();
97
+ if (!event)
98
+ return {};
99
+ if (!event.locals)
100
+ event.locals = {};
101
+ return event.locals;
102
+ }
103
+ // ─── middleware → render bridge ─────────────────────────────────────────────────
104
+ // Middleware runs on the raw platform request, OUTSIDE the render's request context.
105
+ // This WeakMap associates a per-request locals bag with that request object; the render
106
+ // adopts it in createRequestContext when the app forwards `request` on the event. Keyed
107
+ // by the request, so concurrent requests stay isolated and entries GC with the request.
108
+ const _requestLocals = new WeakMap();
109
+ /**
110
+ * The mutable `locals` bag for a platform request object (created on first access).
111
+ * Middleware writes here (e.g. `getRequestLocals(request).auth = …`) before calling
112
+ * `next()`; the render then reads the same object via `getLocals()`. Pairs with the app
113
+ * entry forwarding `request` on the render event (`renderRequestAsync(App, { url, request })`).
114
+ */
115
+ export function getRequestLocals(request) {
116
+ let bag = _requestLocals.get(request);
117
+ if (!bag) {
118
+ bag = {};
119
+ _requestLocals.set(request, bag);
120
+ }
121
+ return bag;
122
+ }
@@ -0,0 +1 @@
1
+ var o,R={getStore:()=>o,run(e,t){let u=o;o=e;try{return t()}finally{o=u}}},c=R;function d(e){c=e??R}function f(e={}){e.locals||(e.locals=e.request?g(e.request):{});let t=0,u=0,r=null,a=new Map,i=new Map;return{event:e,routeData:new Map,matchedRoute:new Map,nextId:()=>`s${t++}`,nextResourceId:()=>{if(r===null)return`r${u++}`;let n=a.get(r)??0;return a.set(r,n+1),`${r}:r${n}`},nextIslandNamespace:n=>{let s=i.get(n)??0;return i.set(n,s+1),`${n}#${s}`},withResourceScope(n,s){let p=r;r=n;try{return s()}finally{r=p}},pending:new Set,data:new Map}}function w(e,t){return c.run(e,t)}function q(){return c.getStore()}function x(){return q()?.event}function S(){let e=x();return e?(e.locals||(e.locals={}),e.locals):{}}var l=new WeakMap;function g(e){let t=l.get(e);return t||(t={},l.set(e,t)),t}export{f as createRequestContext,S as getLocals,q as getRequestContext,x as getRequestEvent,g as getRequestLocals,w as runWithRequestContext,d as setRequestStore};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var r in e)o(t,r,{get:e[r],enumerable:!0})},y=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of m(e))!v.call(t,s)&&s!==r&&o(t,s,{get:()=>e[s],enumerable:!(n=N(e,s))||n.enumerable});return t};var T=t=>y(o({},"__esModule",{value:!0}),t);var O={};b(O,{serializeNode:()=>i});module.exports=T(O);var a=Symbol.for("fluixi.server-node");var c=1,h=3,p=8,d;d=a;var u=class{constructor(){this[d]=!0;this.parentNode=null;this.childNodes=[]}get firstChild(){return this.childNodes[0]??null}get lastChild(){return this.childNodes[this.childNodes.length-1]??null}get nextSibling(){let e=this.parentNode;if(!e)return null;let r=e.childNodes.indexOf(this);return r>=0?e.childNodes[r+1]??null:null}get previousSibling(){let e=this.parentNode;if(!e)return null;let r=e.childNodes.indexOf(this);return r>0?e.childNodes[r-1]??null:null}get parentElement(){return this.parentNode}appendChild(e){return e.parentNode&&e.parentNode.removeChild(e),e.parentNode=this,this.childNodes.push(e),e}insertBefore(e,r){if(r==null)return this.appendChild(e);e.parentNode&&e.parentNode.removeChild(e);let n=this.childNodes.indexOf(r);return e.parentNode=this,n<0?this.childNodes.push(e):this.childNodes.splice(n,0,e),e}removeChild(e){let r=this.childNodes.indexOf(e);return r>=0&&this.childNodes.splice(r,1),e.parentNode=null,e}replaceChild(e,r){let n=this.childNodes.indexOf(r);return n>=0&&(e.parentNode&&e.parentNode.removeChild(e),e.parentNode=this,this.childNodes[n]=e,r.parentNode=null),r}addEventListener(){}removeEventListener(){}};var S=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),f=/&/g,x=/</g,E=/>/g,w=/"/g;function l(t){return t.replace(f,"&amp;").replace(x,"&lt;").replace(E,"&gt;")}function g(t){return t.replace(f,"&amp;").replace(w,"&quot;")}function A(t){return t.startsWith("--")?t:t.replace(/[A-Z]/g,e=>"-"+e.toLowerCase())}function C(t){if(!t)return"";let e=[];t.cssText&&e.push(t.cssText.trim().replace(/;\s*$/,""));for(let r of Object.keys(t)){if(r==="cssText")continue;let n=t[r];n==null||n===""||e.push(`${A(r)}: ${n}`)}return e.join("; ")}function M(t){let e="",r=C(t.style);for(let[n,s]of t.attributes)n==="style"&&r||(e+=` ${n}="${g(s)}"`);if(r){let n=t.attributes.get("style"),s=n?`${n.replace(/;\s*$/,"")}; ${r}`:r;e+=` style="${g(s)}"`}return e}function i(t){if(t==null||t===!1||t===!0)return"";if(typeof t=="string")return l(t);if(typeof t=="number")return l(String(t));if(typeof t=="function")return i(t());if(Array.isArray(t))return t.map(i).join("");switch(t.nodeType){case h:return l(t.data??"");case p:return`<!--${t.data??""}-->`;case c:{let e=t.localName,r=`<${e}${M(t)}>`;if(S.has(e))return r;let n=t.rawHTML!=null?t.rawHTML:(t.childNodes??[]).map(i).join("");return`${r}${n}</${e}>`}}return Array.isArray(t.childNodes)?t.childNodes.map(i).join(""):""}
@@ -0,0 +1,2 @@
1
+ export declare function serializeNode(node: any): string;
2
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/serialize.ts"],"names":[],"mappings":"AA4DA,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAmC/C"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Serialize a ServerNode tree to an HTML string. Void elements self-close,
3
+ * text/attributes are escaped, style is emitted from cssText + camelCase props,
4
+ * innerHTML is passed through verbatim.
5
+ */
6
+ import { NODE_ELEMENT, NODE_TEXT, NODE_COMMENT } from './nodes.js';
7
+ const VOID_ELEMENTS = new Set([
8
+ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
9
+ 'link', 'meta', 'param', 'source', 'track', 'wbr',
10
+ ]);
11
+ const AMP = /&/g;
12
+ const LT = /</g;
13
+ const GT = />/g;
14
+ const QUOT = /"/g;
15
+ function escapeText(s) {
16
+ return s.replace(AMP, '&amp;').replace(LT, '&lt;').replace(GT, '&gt;');
17
+ }
18
+ function escapeAttr(s) {
19
+ return s.replace(AMP, '&amp;').replace(QUOT, '&quot;');
20
+ }
21
+ function camelToKebab(k) {
22
+ // leave custom props (--var) and already-kebab keys alone
23
+ if (k.startsWith('--'))
24
+ return k;
25
+ return k.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());
26
+ }
27
+ function serializeStyle(style) {
28
+ if (!style)
29
+ return '';
30
+ const parts = [];
31
+ if (style.cssText)
32
+ parts.push(style.cssText.trim().replace(/;\s*$/, ''));
33
+ for (const key of Object.keys(style)) {
34
+ if (key === 'cssText')
35
+ continue;
36
+ const v = style[key];
37
+ if (v == null || v === '')
38
+ continue;
39
+ parts.push(`${camelToKebab(key)}: ${v}`);
40
+ }
41
+ return parts.join('; ');
42
+ }
43
+ function serializeAttrs(el) {
44
+ let out = '';
45
+ // style comes from the style object, not the attribute map, unless set as a
46
+ // plain attribute string (setStyle uses cssText; spread style="..." → cssText).
47
+ const inlineStyle = serializeStyle(el.style);
48
+ for (const [name, value] of el.attributes) {
49
+ if (name === 'style' && inlineStyle)
50
+ continue; // style object wins / merges below
51
+ out += ` ${name}="${escapeAttr(value)}"`;
52
+ }
53
+ if (inlineStyle) {
54
+ const attrStyle = el.attributes.get('style');
55
+ const merged = attrStyle ? `${attrStyle.replace(/;\s*$/, '')}; ${inlineStyle}` : inlineStyle;
56
+ out += ` style="${escapeAttr(merged)}"`;
57
+ }
58
+ return out;
59
+ }
60
+ export function serializeNode(node) {
61
+ if (node == null || node === false || node === true)
62
+ return '';
63
+ if (typeof node === 'string')
64
+ return escapeText(node);
65
+ if (typeof node === 'number')
66
+ return escapeText(String(node));
67
+ // Accessors / memos / component thunks: the codegen returns a top-level memo
68
+ // (createMemo(() => createComponent(...))). On the server reactivity is
69
+ // render-once, so reading them here is safe and yields the built node tree.
70
+ if (typeof node === 'function')
71
+ return serializeNode(node());
72
+ if (Array.isArray(node))
73
+ return node.map(serializeNode).join('');
74
+ // Duck-type on nodeType rather than `instanceof`: a node can come from a
75
+ // different bundled copy of @fluixi/dom (separate package entry points), so
76
+ // class identity is unreliable across the renderToString boundary.
77
+ switch (node.nodeType) {
78
+ case NODE_TEXT:
79
+ return escapeText(node.data ?? '');
80
+ case NODE_COMMENT:
81
+ return `<!--${node.data ?? ''}-->`;
82
+ case NODE_ELEMENT: {
83
+ const tag = node.localName;
84
+ const open = `<${tag}${serializeAttrs(node)}>`;
85
+ if (VOID_ELEMENTS.has(tag))
86
+ return open;
87
+ const inner = node.rawHTML != null
88
+ ? node.rawHTML
89
+ : (node.childNodes ?? []).map(serializeNode).join('');
90
+ return `${open}${inner}</${tag}>`;
91
+ }
92
+ }
93
+ // Any other node-like value with children (fragments etc.).
94
+ if (Array.isArray(node.childNodes))
95
+ return node.childNodes.map(serializeNode).join('');
96
+ // Unknown value (e.g. a stray object) — render nothing rather than [object].
97
+ return '';
98
+ }
@@ -0,0 +1 @@
1
+ var l=Symbol.for("fluixi.server-node");var d=1,c=3,h=8,u;u=l;var a=class{constructor(){this[u]=!0;this.parentNode=null;this.childNodes=[]}get firstChild(){return this.childNodes[0]??null}get lastChild(){return this.childNodes[this.childNodes.length-1]??null}get nextSibling(){let e=this.parentNode;if(!e)return null;let r=e.childNodes.indexOf(this);return r>=0?e.childNodes[r+1]??null:null}get previousSibling(){let e=this.parentNode;if(!e)return null;let r=e.childNodes.indexOf(this);return r>0?e.childNodes[r-1]??null:null}get parentElement(){return this.parentNode}appendChild(e){return e.parentNode&&e.parentNode.removeChild(e),e.parentNode=this,this.childNodes.push(e),e}insertBefore(e,r){if(r==null)return this.appendChild(e);e.parentNode&&e.parentNode.removeChild(e);let n=this.childNodes.indexOf(r);return e.parentNode=this,n<0?this.childNodes.push(e):this.childNodes.splice(n,0,e),e}removeChild(e){let r=this.childNodes.indexOf(e);return r>=0&&this.childNodes.splice(r,1),e.parentNode=null,e}replaceChild(e,r){let n=this.childNodes.indexOf(r);return n>=0&&(e.parentNode&&e.parentNode.removeChild(e),e.parentNode=this,this.childNodes[n]=e,r.parentNode=null),r}addEventListener(){}removeEventListener(){}};var f=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),g=/&/g,N=/</g,m=/>/g,v=/"/g;function o(t){return t.replace(g,"&amp;").replace(N,"&lt;").replace(m,"&gt;")}function p(t){return t.replace(g,"&amp;").replace(v,"&quot;")}function b(t){return t.startsWith("--")?t:t.replace(/[A-Z]/g,e=>"-"+e.toLowerCase())}function y(t){if(!t)return"";let e=[];t.cssText&&e.push(t.cssText.trim().replace(/;\s*$/,""));for(let r of Object.keys(t)){if(r==="cssText")continue;let n=t[r];n==null||n===""||e.push(`${b(r)}: ${n}`)}return e.join("; ")}function T(t){let e="",r=y(t.style);for(let[n,i]of t.attributes)n==="style"&&r||(e+=` ${n}="${p(i)}"`);if(r){let n=t.attributes.get("style"),i=n?`${n.replace(/;\s*$/,"")}; ${r}`:r;e+=` style="${p(i)}"`}return e}function s(t){if(t==null||t===!1||t===!0)return"";if(typeof t=="string")return o(t);if(typeof t=="number")return o(String(t));if(typeof t=="function")return s(t());if(Array.isArray(t))return t.map(s).join("");switch(t.nodeType){case c:return o(t.data??"");case h:return`<!--${t.data??""}-->`;case d:{let e=t.localName,r=`<${e}${T(t)}>`;if(f.has(e))return r;let n=t.rawHTML!=null?t.rawHTML:(t.childNodes??[]).map(s).join("");return`${r}${n}</${e}>`}}return Array.isArray(t.childNodes)?t.childNodes.map(s).join(""):""}export{s as serializeNode};
@@ -0,0 +1 @@
1
+ "use strict";var b=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var ue=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var r in t)b(e,r,{get:t[r],enumerable:!0})},le=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ie(t))!ue.call(e,s)&&s!==r&&b(e,s,{get:()=>t[s],enumerable:!(n=oe(t,s))||n.enumerable});return e};var ce=e=>le(b({},"__esModule",{value:!0}),e);var Se={};ae(Se,{FX_DATA_ID:()=>v,ServerComment:()=>h,ServerElement:()=>m,ServerNode:()=>l,ServerText:()=>p,createRequestContext:()=>N,escapeFxJson:()=>S,getLocals:()=>Q,getRequestContext:()=>f,getRequestEvent:()=>O,getRequestLocals:()=>L,getServerData:()=>U,isDomElement:()=>H,isDomNode:()=>V,isDomText:()=>z,isServer:()=>g,isServerNodeValue:()=>P,renderToString:()=>te,renderToStringAsync:()=>ne,runWithRequestContext:()=>y,serializeNode:()=>a,serializeResourceData:()=>F,setDataRedactor:()=>re,setRequestStore:()=>K,setServerMode:()=>d});module.exports=ce(Se);var g=typeof document>"u";function d(e){g=e}var x=Symbol.for("fluixi.server-node"),de=null;function j(e){de=e}function V(e){return e!=null&&e[x]===!0?!0:typeof Node<"u"&&e instanceof Node}function H(e){return e!=null&&e[x]===!0?e.nodeType===1:typeof Element<"u"&&e instanceof Element}function z(e){return e!=null&&e[x]===!0?e.nodeType===3:typeof Text<"u"&&e instanceof Text}var q=1,A=3,D=8,X;X=x;var l=class{constructor(){this[X]=!0;this.parentNode=null;this.childNodes=[]}get firstChild(){return this.childNodes[0]??null}get lastChild(){return this.childNodes[this.childNodes.length-1]??null}get nextSibling(){let t=this.parentNode;if(!t)return null;let r=t.childNodes.indexOf(this);return r>=0?t.childNodes[r+1]??null:null}get previousSibling(){let t=this.parentNode;if(!t)return null;let r=t.childNodes.indexOf(this);return r>0?t.childNodes[r-1]??null:null}get parentElement(){return this.parentNode}appendChild(t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=this,this.childNodes.push(t),t}insertBefore(t,r){if(r==null)return this.appendChild(t);t.parentNode&&t.parentNode.removeChild(t);let n=this.childNodes.indexOf(r);return t.parentNode=this,n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),t}removeChild(t){let r=this.childNodes.indexOf(t);return r>=0&&this.childNodes.splice(r,1),t.parentNode=null,t}replaceChild(t,r){let n=this.childNodes.indexOf(r);return n>=0&&(t.parentNode&&t.parentNode.removeChild(t),t.parentNode=this,this.childNodes[n]=t,r.parentNode=null),r}addEventListener(){}removeEventListener(){}},p=class e extends l{constructor(r){super();this.nodeType=A;this.data=r}get nodeValue(){return this.data}set nodeValue(r){this.data=r==null?"":String(r)}get textContent(){return this.data}set textContent(r){this.data=r==null?"":String(r)}cloneNode(){return new e(this.data)}},h=class e extends l{constructor(r){super();this.nodeType=D;this.data=r}get nodeValue(){return this.data}set nodeValue(r){this.data=r==null?"":String(r)}cloneNode(){return new e(this.data)}},E=class{constructor(){this.cssText=""}setProperty(t,r){this[t]=r}removeProperty(t){delete this[t]}},C=class{constructor(t){this.el=t}list(){let t=this.el.getAttribute("class");return t?t.split(/\s+/).filter(Boolean):[]}write(t){t.length?this.el.setAttribute("class",t.join(" ")):this.el.removeAttribute("class")}add(...t){let r=this.list();for(let n of t)r.includes(n)||r.push(n);this.write(r)}remove(...t){this.write(this.list().filter(r=>!t.includes(r)))}contains(t){return this.list().includes(t)}toggle(t,r){let n=this.contains(t),s=r===void 0?!n:r;return s?this.add(t):this.remove(t),s}},m=class e extends l{constructor(r,n=!1){super();this.nodeType=q;this.attributes=new Map;this.style=new E;this.classList=new C(this);this.rawHTML=null;this.localName=r.toLowerCase(),this.tagName=n?r:r.toUpperCase(),this.isSVG=n,this.namespaceURI=n?"http://www.w3.org/2000/svg":null}setAttribute(r,n){this.attributes.set(r,String(n))}removeAttribute(r){this.attributes.delete(r)}getAttribute(r){return this.attributes.has(r)?this.attributes.get(r):null}hasAttribute(r){return this.attributes.has(r)}get id(){return this.getAttribute("id")??""}set id(r){r==null?this.removeAttribute("id"):this.setAttribute("id",r)}get className(){return this.getAttribute("class")??""}set className(r){r==null?this.removeAttribute("class"):this.setAttribute("class",r)}get htmlFor(){return this.getAttribute("for")??""}set htmlFor(r){r==null?this.removeAttribute("for"):this.setAttribute("for",r)}set value(r){r==null?this.removeAttribute("value"):this.setAttribute("value",String(r))}set checked(r){r?this.setAttribute("checked",""):this.removeAttribute("checked")}set selected(r){r?this.setAttribute("selected",""):this.removeAttribute("selected")}set indeterminate(r){}get textContent(){return this.childNodes.map(r=>r.textContent??"").join("")}set textContent(r){for(let n of this.childNodes)n.parentNode=null;this.childNodes=[],this.rawHTML=null,r!=null&&r!==""&&this.appendChild(new p(String(r)))}set innerText(r){this.textContent=r}set innerHTML(r){for(let n of this.childNodes)n.parentNode=null;this.childNodes=[],this.rawHTML=r==null?"":String(r)}cloneNode(r=!1){let n=new e(this.localName,this.isSVG);if(n.attributes=new Map(this.attributes),n.style.cssText=this.style.cssText,n.rawHTML=this.rawHTML,r)for(let s of this.childNodes)n.appendChild(s.cloneNode(!0));return n}};function P(e){return e instanceof l}var pe=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),J=/&/g,fe=/</g,ge=/>/g,he=/"/g;function _(e){return e.replace(J,"&amp;").replace(fe,"&lt;").replace(ge,"&gt;")}function W(e){return e.replace(J,"&amp;").replace(he,"&quot;")}function me(e){return e.startsWith("--")?e:e.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}function xe(e){if(!e)return"";let t=[];e.cssText&&t.push(e.cssText.trim().replace(/;\s*$/,""));for(let r of Object.keys(e)){if(r==="cssText")continue;let n=e[r];n==null||n===""||t.push(`${me(r)}: ${n}`)}return t.join("; ")}function ve(e){let t="",r=xe(e.style);for(let[n,s]of e.attributes)n==="style"&&r||(t+=` ${n}="${W(s)}"`);if(r){let n=e.attributes.get("style"),s=n?`${n.replace(/;\s*$/,"")}; ${r}`:r;t+=` style="${W(s)}"`}return t}function a(e){if(e==null||e===!1||e===!0)return"";if(typeof e=="string")return _(e);if(typeof e=="number")return _(String(e));if(typeof e=="function")return a(e());if(Array.isArray(e))return e.map(a).join("");switch(e.nodeType){case A:return _(e.data??"");case D:return`<!--${e.data??""}-->`;case q:{let t=e.localName,r=`<${t}${ve(e)}>`;if(pe.has(t))return r;let n=e.rawHTML!=null?e.rawHTML:(e.childNodes??[]).map(a).join("");return`${r}${n}</${t}>`}}return Array.isArray(e.childNodes)?e.childNodes.map(a).join(""):""}var v="__FX_DATA__";function S(e){return e.replace(/[<>&\u2028\u2029]/g,t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"))}var k;function U(){let e=globalThis.__FX_DATA__;if(e)return e;if(k!==void 0)return k;let t=null;if(typeof document<"u"){let r=document.getElementById(v)?.textContent;if(r)try{t=JSON.parse(r)}catch{t=null}}return k=t}var I=require("@fluixi/reactive/signal"),o=require("@fluixi/reactive/signal");var R,G={getStore:()=>R,run(e,t){let r=R;R=e;try{return t()}finally{R=r}}},M=G;function K(e){M=e??G}function N(e={}){e.locals||(e.locals=e.request?L(e.request):{});let t=0,r=0,n=null,s=new Map,i=new Map;return{event:e,routeData:new Map,matchedRoute:new Map,nextId:()=>`s${t++}`,nextResourceId:()=>{if(n===null)return`r${r++}`;let u=s.get(n)??0;return s.set(n,u+1),`${n}:r${u}`},nextIslandNamespace:u=>{let c=i.get(u)??0;return i.set(u,c+1),`${u}#${c}`},withResourceScope(u,c){let T=n;n=u;try{return c()}finally{n=T}},pending:new Set,data:new Map}}function y(e,t){return M.run(e,t)}function f(){return M.getStore()}function O(){return f()?.event}function Q(){let e=O();return e?(e.locals||(e.locals={}),e.locals):{}}var B=new WeakMap;function L(e){let t=B.get(e);return t||(t={},B.set(e,t)),t}var Y=!1;function ee(){Y||(Y=!0,j({createElement:(e,t)=>new m(e,t),createText:e=>new p(e),createComment:e=>new h(e)}))}function te(e,t={}){let r=g;ee(),d(!0);let n=N(t.event);try{return y(n,()=>(0,I.createRoot)(s=>{try{let i=typeof e=="function"?e():e;return a(i)}finally{s()}}))}finally{d(r)}}var Z=!1;function Ne(){Z||(Z=!0,(0,o.setResourceTracker)(e=>{f()?.pending.add(e)}),(0,o.setResourceIdSource)(()=>f()?.nextResourceId()??""),(0,o.setResourceDataSink)((e,t)=>{e&&f()?.data.set(e,t)}))}var $=null;function re(e){$=e}function F(e){if(e.data.size===0)return"";let t={};for(let[n,s]of e.data){let i=s;if($)try{i=$(s,n)}catch{continue}i!==void 0&&(t[n]=i)}if(Object.keys(t).length===0)return"";let r=S(JSON.stringify(t));return`<script type="application/json" id="${v}">${r}<\/script>`}var ye=50;async function ne(e,t={}){let r=g;ee(),d(!0),Ne();let n=N(t.event);try{return await y(n,async()=>{t.preload&&await t.preload(t.event);let s,i=null,u=()=>{};(0,I.createRoot)(w=>{u=w,i=(0,o.getOwner)(),s=typeof e=="function"?e():e});let c=()=>{try{(0,o.runWithOwner)(i,()=>a(s))}catch{}};c();let T=0;for(;n.pending.size>0&&T++<ye;){let w=Array.from(n.pending);n.pending.clear(),await Promise.allSettled(w),await(0,o.flush)(),c()}let se=(0,o.runWithOwner)(i,()=>a(s))+F(n);return u(),se})}finally{d(r)}}
@@ -0,0 +1,2 @@
1
+ export * from './server/index.js';
2
+ //# sourceMappingURL=server-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/server-renderer.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // `@fluixi/dom/server` — the SSR surface. The same imperative runtime
2
+ // (insert/spread/Show/For/createComponent) builds a serializable ServerNode tree
3
+ // under server mode, which renderToString turns into HTML. Kept separate from the
4
+ // client entry so client bundles don't ship the renderer.
5
+ export * from './server/index.js';
@@ -0,0 +1 @@
1
+ var f=typeof document>"u";function c(e){f=e}var g=Symbol.for("fluixi.server-node"),B=null;function M(e){B=e}function G(e){return e!=null&&e[g]===!0?!0:typeof Node<"u"&&e instanceof Node}function K(e){return e!=null&&e[g]===!0?e.nodeType===1:typeof Element<"u"&&e instanceof Element}function Q(e){return e!=null&&e[g]===!0?e.nodeType===3:typeof Text<"u"&&e instanceof Text}var b=1,E=3,C=8,O;O=g;var l=class{constructor(){this[O]=!0;this.parentNode=null;this.childNodes=[]}get firstChild(){return this.childNodes[0]??null}get lastChild(){return this.childNodes[this.childNodes.length-1]??null}get nextSibling(){let r=this.parentNode;if(!r)return null;let t=r.childNodes.indexOf(this);return t>=0?r.childNodes[t+1]??null:null}get previousSibling(){let r=this.parentNode;if(!r)return null;let t=r.childNodes.indexOf(this);return t>0?r.childNodes[t-1]??null:null}get parentElement(){return this.parentNode}appendChild(r){return r.parentNode&&r.parentNode.removeChild(r),r.parentNode=this,this.childNodes.push(r),r}insertBefore(r,t){if(t==null)return this.appendChild(r);r.parentNode&&r.parentNode.removeChild(r);let n=this.childNodes.indexOf(t);return r.parentNode=this,n<0?this.childNodes.push(r):this.childNodes.splice(n,0,r),r}removeChild(r){let t=this.childNodes.indexOf(r);return t>=0&&this.childNodes.splice(t,1),r.parentNode=null,r}replaceChild(r,t){let n=this.childNodes.indexOf(t);return n>=0&&(r.parentNode&&r.parentNode.removeChild(r),r.parentNode=this,this.childNodes[n]=r,t.parentNode=null),t}addEventListener(){}removeEventListener(){}},d=class e extends l{constructor(t){super();this.nodeType=E;this.data=t}get nodeValue(){return this.data}set nodeValue(t){this.data=t==null?"":String(t)}get textContent(){return this.data}set textContent(t){this.data=t==null?"":String(t)}cloneNode(){return new e(this.data)}},h=class e extends l{constructor(t){super();this.nodeType=C;this.data=t}get nodeValue(){return this.data}set nodeValue(t){this.data=t==null?"":String(t)}cloneNode(){return new e(this.data)}},T=class{constructor(){this.cssText=""}setProperty(r,t){this[r]=t}removeProperty(r){delete this[r]}},w=class{constructor(r){this.el=r}list(){let r=this.el.getAttribute("class");return r?r.split(/\s+/).filter(Boolean):[]}write(r){r.length?this.el.setAttribute("class",r.join(" ")):this.el.removeAttribute("class")}add(...r){let t=this.list();for(let n of r)t.includes(n)||t.push(n);this.write(t)}remove(...r){this.write(this.list().filter(t=>!r.includes(t)))}contains(r){return this.list().includes(r)}toggle(r,t){let n=this.contains(r),s=t===void 0?!n:t;return s?this.add(r):this.remove(r),s}},m=class e extends l{constructor(t,n=!1){super();this.nodeType=b;this.attributes=new Map;this.style=new T;this.classList=new w(this);this.rawHTML=null;this.localName=t.toLowerCase(),this.tagName=n?t:t.toUpperCase(),this.isSVG=n,this.namespaceURI=n?"http://www.w3.org/2000/svg":null}setAttribute(t,n){this.attributes.set(t,String(n))}removeAttribute(t){this.attributes.delete(t)}getAttribute(t){return this.attributes.has(t)?this.attributes.get(t):null}hasAttribute(t){return this.attributes.has(t)}get id(){return this.getAttribute("id")??""}set id(t){t==null?this.removeAttribute("id"):this.setAttribute("id",t)}get className(){return this.getAttribute("class")??""}set className(t){t==null?this.removeAttribute("class"):this.setAttribute("class",t)}get htmlFor(){return this.getAttribute("for")??""}set htmlFor(t){t==null?this.removeAttribute("for"):this.setAttribute("for",t)}set value(t){t==null?this.removeAttribute("value"):this.setAttribute("value",String(t))}set checked(t){t?this.setAttribute("checked",""):this.removeAttribute("checked")}set selected(t){t?this.setAttribute("selected",""):this.removeAttribute("selected")}set indeterminate(t){}get textContent(){return this.childNodes.map(t=>t.textContent??"").join("")}set textContent(t){for(let n of this.childNodes)n.parentNode=null;this.childNodes=[],this.rawHTML=null,t!=null&&t!==""&&this.appendChild(new d(String(t)))}set innerText(t){this.textContent=t}set innerHTML(t){for(let n of this.childNodes)n.parentNode=null;this.childNodes=[],this.rawHTML=t==null?"":String(t)}cloneNode(t=!1){let n=new e(this.localName,this.isSVG);if(n.attributes=new Map(this.attributes),n.style.cssText=this.style.cssText,n.rawHTML=this.rawHTML,t)for(let s of this.childNodes)n.appendChild(s.cloneNode(!0));return n}};function Y(e){return e instanceof l}var Z=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),$=/&/g,ee=/</g,te=/>/g,re=/"/g;function q(e){return e.replace($,"&amp;").replace(ee,"&lt;").replace(te,"&gt;")}function L(e){return e.replace($,"&amp;").replace(re,"&quot;")}function ne(e){return e.startsWith("--")?e:e.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())}function se(e){if(!e)return"";let r=[];e.cssText&&r.push(e.cssText.trim().replace(/;\s*$/,""));for(let t of Object.keys(e)){if(t==="cssText")continue;let n=e[t];n==null||n===""||r.push(`${ne(t)}: ${n}`)}return r.join("; ")}function oe(e){let r="",t=se(e.style);for(let[n,s]of e.attributes)n==="style"&&t||(r+=` ${n}="${L(s)}"`);if(t){let n=e.attributes.get("style"),s=n?`${n.replace(/;\s*$/,"")}; ${t}`:t;r+=` style="${L(s)}"`}return r}function u(e){if(e==null||e===!1||e===!0)return"";if(typeof e=="string")return q(e);if(typeof e=="number")return q(String(e));if(typeof e=="function")return u(e());if(Array.isArray(e))return e.map(u).join("");switch(e.nodeType){case E:return q(e.data??"");case C:return`<!--${e.data??""}-->`;case b:{let r=e.localName,t=`<${r}${oe(e)}>`;if(Z.has(r))return t;let n=e.rawHTML!=null?e.rawHTML:(e.childNodes??[]).map(u).join("");return`${t}${n}</${r}>`}}return Array.isArray(e.childNodes)?e.childNodes.map(u).join(""):""}var x="__FX_DATA__";function D(e){return e.replace(/[<>&\u2028\u2029]/g,r=>"\\u"+r.charCodeAt(0).toString(16).padStart(4,"0"))}var A;function ie(){let e=globalThis.__FX_DATA__;if(e)return e;if(A!==void 0)return A;let r=null;if(typeof document<"u"){let t=document.getElementById(x)?.textContent;if(t)try{r=JSON.parse(t)}catch{r=null}}return A=r}import{createRoot as P}from"@fluixi/reactive/signal";import{setResourceTracker as le,setResourceIdSource as ce,setResourceDataSink as de,getOwner as pe,runWithOwner as H,flush as fe}from"@fluixi/reactive/signal";var v,F={getStore:()=>v,run(e,r){let t=v;v=e;try{return r()}finally{v=t}}},_=F;function ue(e){_=e??F}function N(e={}){e.locals||(e.locals=e.request?V(e.request):{});let r=0,t=0,n=null,s=new Map,o=new Map;return{event:e,routeData:new Map,matchedRoute:new Map,nextId:()=>`s${r++}`,nextResourceId:()=>{if(n===null)return`r${t++}`;let i=s.get(n)??0;return s.set(n,i+1),`${n}:r${i}`},nextIslandNamespace:i=>{let a=o.get(i)??0;return o.set(i,a+1),`${i}#${a}`},withResourceScope(i,a){let S=n;n=i;try{return a()}finally{n=S}},pending:new Set,data:new Map}}function y(e,r){return _.run(e,r)}function p(){return _.getStore()}function j(){return p()?.event}function ae(){let e=j();return e?(e.locals||(e.locals={}),e.locals):{}}var I=new WeakMap;function V(e){let r=I.get(e);return r||(r={},I.set(e,r)),r}var z=!1;function W(){z||(z=!0,M({createElement:(e,r)=>new m(e,r),createText:e=>new d(e),createComment:e=>new h(e)}))}function ge(e,r={}){let t=f;W(),c(!0);let n=N(r.event);try{return y(n,()=>P(s=>{try{let o=typeof e=="function"?e():e;return u(o)}finally{s()}}))}finally{c(t)}}var X=!1;function he(){X||(X=!0,le(e=>{p()?.pending.add(e)}),ce(()=>p()?.nextResourceId()??""),de((e,r)=>{e&&p()?.data.set(e,r)}))}var k=null;function me(e){k=e}function J(e){if(e.data.size===0)return"";let r={};for(let[n,s]of e.data){let o=s;if(k)try{o=k(s,n)}catch{continue}o!==void 0&&(r[n]=o)}if(Object.keys(r).length===0)return"";let t=D(JSON.stringify(r));return`<script type="application/json" id="${x}">${t}<\/script>`}var xe=50;async function ve(e,r={}){let t=f;W(),c(!0),he();let n=N(r.event);try{return await y(n,async()=>{r.preload&&await r.preload(r.event);let s,o=null,i=()=>{};P(R=>{i=R,o=pe(),s=typeof e=="function"?e():e});let a=()=>{try{H(o,()=>u(s))}catch{}};a();let S=0;for(;n.pending.size>0&&S++<xe;){let R=Array.from(n.pending);n.pending.clear(),await Promise.allSettled(R),await fe(),a()}let U=H(o,()=>u(s))+J(n);return i(),U})}finally{c(t)}}export{x as FX_DATA_ID,h as ServerComment,m as ServerElement,l as ServerNode,d as ServerText,N as createRequestContext,D as escapeFxJson,ae as getLocals,p as getRequestContext,j as getRequestEvent,V as getRequestLocals,ie as getServerData,K as isDomElement,G as isDomNode,Q as isDomText,f as isServer,Y as isServerNodeValue,ge as renderToString,ve as renderToStringAsync,y as runWithRequestContext,u as serializeNode,J as serializeResourceData,me as setDataRedactor,ue as setRequestStore,c as setServerMode};
@@ -0,0 +1 @@
1
+ "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var u=(n,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of p(e))!i.call(n,o)&&o!==a&&r(n,o,{get:()=>e[o],enumerable:!(t=s(e,o))||t.enumerable});return n};var c=n=>u(r({},"__esModule",{value:!0}),n);var T={};module.exports=c(T);
@@ -0,0 +1,119 @@
1
+ import { Computation, ComputationFn, Context, EffectFn, EffectOptions, EqualityFn, MemoOptions, ResourceFetcher, ResourceOptions, ResourceReturn, ResourceSource, RootOwner, SignalTuple, SignalOptions, SuspenseContextType, SuspenseListContextType, type createStore as signalStore } from '@fluixi/reactive';
2
+ export type Accessor<T> = () => T;
3
+ export interface ComponentObserver {
4
+ dependencies: Set<Accessor<any>>;
5
+ cleanupFunctions: (() => void)[];
6
+ track: <T>(getter: () => T) => T;
7
+ addCleanup: (fn: () => void) => void;
8
+ }
9
+ export interface Effect {
10
+ (): void;
11
+ dispose?: () => void;
12
+ }
13
+ export interface Resource {
14
+ <T>(fetcher: ResourceFetcher<T, true>, options?: ResourceOptions<T, true>): ResourceReturn<T>;
15
+ <T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<T, S>, options?: ResourceOptions<T, S>): ResourceReturn<T>;
16
+ }
17
+ export interface ComponentProps {
18
+ children?: any;
19
+ [key: string]: any;
20
+ }
21
+ /**
22
+ * Component function type
23
+ */
24
+ export type CreateComponent<P = ComponentProps, Return = any> = (props?: P) => Return;
25
+ export type IComponent<T, U = any, W = any> = () => CreateComponent<U, W> & {
26
+ $COMPONENT: boolean;
27
+ };
28
+ export type CreateComponentReturnType<T, V> = T extends (props?: infer U) => any ? IComponent<T, V extends never ? U : V, ReturnType<T>> : T extends object ? IComponent<T, V> : never;
29
+ export type DevComponent = <P, V>(Comp: (props?: P) => V, props?: P) => V;
30
+ export interface SignalSystem {
31
+ /**
32
+ * Create an effect that runs when dependencies change
33
+ */
34
+ createEffect?: (fn: EffectFn, value?: any, options?: EffectOptions) => () => void;
35
+ createRenderEffect?: <T>(fn: (prev: T) => T, value?: T | undefined, options?: EffectOptions | undefined) => () => void;
36
+ /**
37
+ * Batch multiple updates together
38
+ */
39
+ batch?: (fn: () => void) => void;
40
+ /**
41
+ * Create a memo (computed value)
42
+ */
43
+ createMemo?: <T>(fn: ComputationFn<T>, value?: T, options?: MemoOptions<T>) => Accessor<T>;
44
+ /**
45
+ * Track a value without subscribing
46
+ */
47
+ untrack?: <T>(fn: () => T) => T;
48
+ /**
49
+ * Get the current reactive owner/context
50
+ */
51
+ getOwner?: () => any;
52
+ /**
53
+ * Run with a specific owner/context
54
+ */
55
+ runWithOwner?: <T>(owner: any, fn: () => T) => T;
56
+ /**
57
+ * Create a root computation context
58
+ */
59
+ createRoot?: <T>(fn: (dispose: () => void) => T) => T;
60
+ /**
61
+ * Add a cleanup function
62
+ */
63
+ onCleanup?: (fn: () => void) => void;
64
+ createSignal?: <T>(_value: T, options?: SignalOptions<T> | undefined) => SignalTuple<T>;
65
+ isReactive?: (fn: any) => boolean;
66
+ createComponent: <T extends (props?: any) => any, U = any>(Comp: T, props?: U) => CreateComponentReturnType<T, U>;
67
+ resolveChildren: (value: any) => any;
68
+ devComponent: DevComponent;
69
+ createResource: Resource;
70
+ createContext: <T>(defaultValue?: T | undefined) => {
71
+ Provider: (props: {
72
+ value: T;
73
+ children: any;
74
+ debug?: boolean | undefined;
75
+ }) => any;
76
+ defaultValue: T | undefined;
77
+ id: symbol;
78
+ };
79
+ useContext: <T>(context: {
80
+ id: symbol;
81
+ defaultValue?: T;
82
+ }) => T | undefined;
83
+ resumeEffects: (effects: Computation[]) => void;
84
+ createComputed: <T>(fn: ComputationFn<T>, value?: T, options?: EffectOptions) => void;
85
+ createDeferred: <T>(source: Accessor<T>, options?: {
86
+ timeoutMs?: number;
87
+ equals?: false | EqualityFn<T>;
88
+ }) => Accessor<T>;
89
+ getSuspenseContext: () => Context<SuspenseContextType | undefined>;
90
+ getSuspenseListContext: () => Context<SuspenseListContextType | undefined>;
91
+ isSignal: <T extends unknown>(value: any) => value is Accessor<T>;
92
+ createStore?: typeof signalStore;
93
+ setOwner: (owner: RootOwner | null) => void;
94
+ getSharedConfig: () => {
95
+ context: RootOwner | null;
96
+ owner: RootOwner | null;
97
+ routeData: Map<any, any>;
98
+ matchedRoute: Map<any, any>;
99
+ };
100
+ }
101
+ export interface StoreSystem {
102
+ /**
103
+ * Check if a value is a store
104
+ */
105
+ isStore: (value: any) => boolean;
106
+ /**
107
+ * Get the raw value from a store
108
+ */
109
+ unwrap?: <T>(value: T) => T;
110
+ /**
111
+ * Check if a value is a store proxy
112
+ */
113
+ isStoreProxy?: (value: any) => boolean;
114
+ /**
115
+ * Subscribe to store changes
116
+ */
117
+ subscribe?: (store: any, callback: (value: any) => void) => () => void;
118
+ }
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,OAAO,EACP,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,WAAW,IAAI,WAAW,EAChC,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,IAAI,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAGD,MAAM,WAAW,QAAQ;IACrB,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACzH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,cAAc,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAGtF,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,MAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IACxE,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAA;AAGtL,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,KAAI,CAAC,CAAA;AACxE,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,YAAY,CAAC,EAAE,CACb,EAAE,EAAE,QAAQ,EACZ,KAAK,CAAC,EAAE,GAAG,EACX,OAAO,CAAC,EAAE,aAAa,KACpB,MAAM,IAAI,CAAC;IAEhB,kBAAkB,CAAC,EAAE,CAAC,CAAC,EACrB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAClB,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,EACrB,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,KAChC,MAAM,IAAI,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,EACb,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,EACpB,KAAK,CAAC,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KACrB,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjD;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtD;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,CAAC,EACf,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,KACnC,WAAW,CAAC,CAAC,CAAC,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC;IAClC,eAAe,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,EACvD,IAAI,EAAE,CAAC,EACP,KAAK,CAAC,EAAE,CAAC,KACN,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,QAAQ,CAAC;IACzB,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK;QAClD,QAAQ,EAAE,CAAC,KAAK,EAAE;YAChB,KAAK,EAAE,CAAC,CAAC;YACT,QAAQ,EAAE,GAAG,CAAC;YACd,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;SAC7B,KAAK,GAAG,CAAC;QACV,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,CAAC,CAAA;KAAE,KAAK,CAAC,GAAG,SAAS,CAAC;IAC5E,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,EAChB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,EACpB,KAAK,CAAC,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,aAAa,KACpB,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,CAAC,EAChB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;KAChC,KACE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjB,kBAAkB,EAAE,MAAM,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IACnE,sBAAsB,EAAE,MAAM,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAC;IAC3E,QAAQ,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAK;QACpB,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC7B,CAAC;CAEH;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAEjC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAE5B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CACxE"}
@@ -0,0 +1 @@
1
+ export {};
File without changes
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var b=(e,t)=>{for(var n in t)l(e,n,{get:t[n],enumerable:!0})},x=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of g(t))!E.call(e,o)&&o!==n&&l(e,o,{get:()=>t[o],enumerable:!(r=m(t,o))||r.enumerable});return e};var h=e=>x(l({},"__esModule",{value:!0}),e);var te={};b(te,{JSX_PROPERTIES:()=>N,SVG_ELEMENTS:()=>A,SVG_NAMESPACE:()=>L,VOID_ELEMENTS:()=>S,addClass:()=>I,appendChildren:()=>q,applyElementProp:()=>C,closest:()=>O,createElement:()=>W,delegate:()=>B,getAttribute:()=>V,getGlobal:()=>ee,getLitEventName:()=>T,getOffset:()=>z,getStyle:()=>G,hasClass:()=>H,isCustomElement:()=>f,isDOMNode:()=>U,isEventHandler:()=>w,isJSXTemplate:()=>Q,isLitTemplateResult:()=>p,isReactElement:()=>Z,isTemplateFactory:()=>_,isVisible:()=>D,observeIntersection:()=>X,observeResize:()=>K,query:()=>a,queryAll:()=>M,registerGlobal:()=>k,removeAttribute:()=>j,removeChildren:()=>$,removeClass:()=>P,scrollIntoView:()=>F,setAttribute:()=>c,setStyles:()=>d,shouldSetAsProperty:()=>v,toAttributeName:()=>y,toggleClass:()=>R,waitForElement:()=>J});module.exports=h(te);function y(e){return e.startsWith("aria-")||e.startsWith("data-")?e:/[A-Z]/.test(e)?e.replace(/([A-Z])/g,"-$1").toLowerCase():e}function w(e){return e.startsWith("@")||e.startsWith("on")&&e.length>2}function T(e){return e.startsWith("@")?e.slice(1):e.startsWith("on")?e.slice(2).toLowerCase():e}function v(e,t){let n=new Set(["checked","value","selected","disabled","readonly","required","multiple","open","contenteditable","draggable","spellcheck"]),r={input:new Set(["value","checked","indeterminate"]),textarea:new Set(["value"]),select:new Set(["value"]),option:new Set(["selected","value"]),audio:new Set(["volume","currentTime","paused"]),video:new Set(["volume","currentTime","paused"]),img:new Set(["src","srcset"]),iframe:new Set(["src"]),a:new Set(["href"])};return n.has(t)||r[e]&&r[e].has(t)}var S=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),A=new Set(["svg","g","path","circle","rect","line","polyline","polygon","ellipse","text","tspan","use","defs","symbol","mask","clipPath","pattern","linearGradient","radialGradient","stop","filter","feGaussianBlur","feOffset","feMerge","feMergeNode","foreignObject"]),L="http://www.w3.org/2000/svg";function f(e){return e.localName.includes("-")}function C(e,t,n,r=!1){if(n==null){e.removeAttribute(t);return}if(f(e)){e[t]=n;return}c(e,t,n,r)}var N=new Set(["className","value","checked","selected","innerHTML","innerText","textContent","indeterminate","htmlFor"]);function a(e,t=document){return t.querySelector(e)}function M(e,t=document){return Array.from(t.querySelectorAll(e))}function O(e,t){return e.closest(t)}function I(e,...t){e.classList.add(...t)}function P(e,...t){e.classList.remove(...t)}function R(e,...t){t.forEach(n=>e.classList.toggle(n))}function H(e,t){return e.classList.contains(t)}function c(e,t,n,r=!1){if(n==null||n===!1){e.removeAttribute(t);return}if(n===!0){e.setAttribute(t,"");return}if(typeof n=="object"){e.setAttribute(t,JSON.stringify(n));return}e.setAttribute(t,String(n))}function V(e,t){return e.getAttribute(t)}function j(e,t){e.removeAttribute(t)}function d(e,t){Object.assign(e.style,t)}function G(e,t){return window.getComputedStyle(e).getPropertyValue(t)}function W(e,t={},...n){let r=document.createElement(e);return Object.entries(t).forEach(([o,i])=>{if(o==="class"||o==="className")r.className=i;else if(o==="style"&&typeof i=="object")d(r,i);else if(o.startsWith("on")&&typeof i=="function"){let s=o.slice(2).toLowerCase();r.addEventListener(s,i)}else c(r,o,i)}),n.forEach(o=>{typeof o=="string"?r.appendChild(document.createTextNode(o)):r.appendChild(o)}),r}function $(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function q(e,...t){t.forEach(n=>{typeof n=="string"?e.appendChild(document.createTextNode(n)):e.appendChild(n)})}function D(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.innerHeight&&t.right<=window.innerWidth}function F(e,t={behavior:"smooth",block:"nearest"}){e.scrollIntoView(t)}function z(e){let t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}}function B(e,t,n,r){let o=i=>{let s=i.target.closest(n);s&&e.contains(s)&&r(i,s)};return e.addEventListener(t,o),()=>{e.removeEventListener(t,o)}}function J(e,t=5e3){return new Promise((n,r)=>{let o=a(e);if(o){n(o);return}let i=new MutationObserver(()=>{let u=a(e);u&&(i.disconnect(),clearTimeout(s),n(u))});i.observe(document.body,{childList:!0,subtree:!0});let s=setTimeout(()=>{i.disconnect(),r(new Error(`Element ${e} not found within ${t}ms`))},t)})}function X(e,t,n={}){let r=new IntersectionObserver(o=>{o.forEach(i=>{t(i.isIntersecting)})},n);return r.observe(e),()=>{r.disconnect()}}function K(e,t){let n=new ResizeObserver(r=>{r.forEach(t)});return n.observe(e),()=>{n.disconnect()}}var Y=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function Z(e){return typeof e=="object"&&e!==null&&e.$$typeof===Y}function p(e){return e&&typeof e=="object"&&e.strings&&Array.isArray(e.strings)&&e.values&&Array.isArray(e.values)}function _(e){if(typeof e!="function")return!1;try{let t=e();return p(t)}catch{return!1}}function Q(e){return typeof e=="object"&&e!==null&&(e.$$typeof==="template"||typeof e.type=="function")}function U(e){return e instanceof Node}function k(e,t,n="Fluixi"){typeof globalThis<"u"&&(typeof globalThis[n]>"u"&&(globalThis[n]={}),typeof globalThis[n][e]>"u"&&(globalThis[n][e]=t))}function ee(e,t,n="Fluixi"){return typeof globalThis<"u"&&typeof globalThis[n]<"u"&&typeof globalThis[n][e]<"u"?globalThis[n][e]:t}