@floegence/floe-webapp-core 0.86.53 → 0.86.55

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.
@@ -10,4 +10,4 @@ export { BlockRenderer, TextBlock, MarkdownBlock, CodeBlock, CodeDiffBlock, Imag
10
10
  export { ChatInput, AttachmentPreview, type ChatInputProps, type AttachmentPreviewProps } from './input';
11
11
  export { createInputHistoryController, type InputHistoryEntry, type InputHistoryContext, type InputHistoryState, type InputHistoryOptions, type InputHistoryEditor, type InputHistoryController, } from './input/createInputHistoryController';
12
12
  export { WorkingIndicator, StreamingCursor, ConnectionStatus, type WorkingIndicatorProps, type StreamingCursorProps, type ConnectionStatusProps, type ConnectionState, } from './status';
13
- export { useVirtualList, useCodeHighlight, useMermaid, useAutoScroll, useAttachments, highlightCode, renderMermaid, terminateShikiWorker, terminateMermaidWorker, configureShikiWorker, configureSyncHighlighter, configureMermaidWorker, configureSyncMermaid, createMarkdownWorker, configureMarkdownWorker, hasMarkdownWorker, waitForMarkdownWorker, renderMarkdown, renderMarkdownSync, terminateMarkdownWorker, createDiffWorker, configureDiffWorker, hasDiffWorker, waitForDiffWorker, computeCodeDiff, computeCodeDiffSync, terminateDiffWorker, type UseVirtualListOptions, type UseVirtualListReturn, type VirtualItem, type UseAutoScrollOptions, type UseAttachmentsOptions, } from './hooks';
13
+ export { useVirtualList, createVirtualListLayout, useCodeHighlight, useMermaid, useAutoScroll, useAttachments, highlightCode, renderMermaid, terminateShikiWorker, terminateMermaidWorker, configureShikiWorker, configureSyncHighlighter, configureMermaidWorker, configureSyncMermaid, createMarkdownWorker, configureMarkdownWorker, hasMarkdownWorker, waitForMarkdownWorker, renderMarkdown, renderMarkdownSync, terminateMarkdownWorker, createDiffWorker, configureDiffWorker, hasDiffWorker, waitForDiffWorker, computeCodeDiff, computeCodeDiffSync, terminateDiffWorker, type UseVirtualListOptions, type UseVirtualListReturn, type VirtualItem, type VirtualListAnchor, type VirtualListLayout, type UseAutoScrollOptions, type UseAttachmentsOptions, } from './hooks';
@@ -0,0 +1,2 @@
1
+ /** Default GFM worker. Product extensions belong in a host worker using createMarkdownSessionHandler. */
2
+ export declare function createMarkdownSessionWorker(): Worker;
@@ -0,0 +1,10 @@
1
+ function e() {
2
+ return new Worker(new URL(
3
+ /* @vite-ignore */
4
+ "" + new URL("../../../assets/markdown.worker-CDm-uCXT.js", import.meta.url).href,
5
+ import.meta.url
6
+ ), { type: "module" });
7
+ }
8
+ export {
9
+ e as createMarkdownSessionWorker
10
+ };
@@ -0,0 +1,56 @@
1
+ import type { Marked } from 'marked';
2
+ import { type MarkdownUpdate } from './incremental';
3
+ export type MarkdownSessionRequest<Config = unknown> = Readonly<{
4
+ type: 'markdown-session';
5
+ request: number;
6
+ session: number;
7
+ sequence: number;
8
+ operation: 'open' | 'reset' | 'append' | 'finish' | 'close';
9
+ offset: number;
10
+ text?: string;
11
+ config?: Config;
12
+ }>;
13
+ export type MarkdownSessionResponse = Readonly<{
14
+ type: 'markdown-session';
15
+ request: number;
16
+ session: number;
17
+ sequence: number;
18
+ update?: MarkdownUpdate;
19
+ error?: string;
20
+ }>;
21
+ export interface MarkdownSessionLimits {
22
+ /** Total parser sessions owned by this worker. */
23
+ maxSessions: number;
24
+ /** Original UTF-16 source units across all sessions; tokens use additional memory. */
25
+ maxSourceLength: number;
26
+ }
27
+ /** Install this handler in a host worker to register the host's exact parser extensions. */
28
+ export declare function createMarkdownSessionHandler<Config>(createParser: (config: Config) => Marked<string, string>, limits?: MarkdownSessionLimits): {
29
+ handle: (message: MarkdownSessionRequest<Config>) => MarkdownSessionResponse;
30
+ close: () => void;
31
+ diagnostics: () => {
32
+ sessions: number;
33
+ sourceLength: number;
34
+ };
35
+ };
36
+ export interface MarkdownWorkerSession {
37
+ reset(text: string): Promise<MarkdownUpdate>;
38
+ append(text: string): Promise<MarkdownUpdate>;
39
+ finish(): Promise<MarkdownUpdate>;
40
+ close(): void;
41
+ }
42
+ export interface MarkdownWorkerClientOptions {
43
+ timeoutMs?: number;
44
+ /** Includes queued source and configuration in the transport, not the worker heap. */
45
+ maxPendingBytes?: number;
46
+ }
47
+ /** Owns the supplied worker. Transport failure rejects all requests; parser errors release only their session. */
48
+ export declare function createMarkdownWorkerClient<Config = undefined>(worker: Worker, options?: MarkdownWorkerClientOptions): {
49
+ open: (config: Config) => Promise<MarkdownWorkerSession>;
50
+ close: () => void;
51
+ diagnostics: () => {
52
+ pendingRequests: number;
53
+ pendingBytes: number;
54
+ closed: boolean;
55
+ };
56
+ };
@@ -0,0 +1,126 @@
1
+ import { createIncrementalMarkdownParser as S } from "./incremental.js";
2
+ function m(c, d = { maxSessions: 32, maxSourceLength: 8 * 1024 * 1024 }) {
3
+ if (!Number.isSafeInteger(d.maxSessions) || d.maxSessions <= 0 || !Number.isSafeInteger(d.maxSourceLength) || d.maxSourceLength <= 0)
4
+ throw new Error("Markdown session limits must be positive integers");
5
+ const s = /* @__PURE__ */ new Map();
6
+ let f = 0;
7
+ function q(e) {
8
+ const t = s.get(e);
9
+ t && (f -= t.accountedLength), s.delete(e);
10
+ }
11
+ function x(e) {
12
+ const t = { type: "markdown-session", request: e?.request ?? 0, session: e?.session ?? 0, sequence: e?.sequence ?? 0 };
13
+ try {
14
+ if (e?.type !== "markdown-session" || !Number.isSafeInteger(e.request) || e.request < 1 || !Number.isSafeInteger(e.session) || e.session < 1 || !Number.isSafeInteger(e.sequence) || e.sequence < 0 || !Number.isSafeInteger(e.offset) || e.offset < 0)
15
+ throw new Error("Invalid Markdown session identity");
16
+ if (e.operation === "open") {
17
+ if (s.has(e.session) || e.sequence !== 0 || e.offset !== 0 || e.text !== void 0)
18
+ throw new Error("Invalid Markdown session admission");
19
+ if (s.size >= d.maxSessions) throw new Error("Markdown session limit exceeded");
20
+ const k = S(c(e.config));
21
+ return s.set(e.session, { parser: k, sequence: 0, accountedLength: 0 }), t;
22
+ }
23
+ const r = s.get(e.session);
24
+ if (!r || e.sequence !== r.sequence + 1 || e.offset !== r.parser.sourceLength)
25
+ throw new Error("Markdown session continuity lost");
26
+ if (e.operation === "close")
27
+ return q(e.session), t;
28
+ if (e.operation !== "reset" && e.operation !== "append" && e.operation !== "finish")
29
+ throw new Error("Unknown Markdown session operation");
30
+ if (e.operation !== "finish" && typeof e.text != "string") throw new Error("Markdown source is required");
31
+ if (e.operation === "finish" && e.text !== void 0) throw new Error("Markdown finish cannot append source");
32
+ const u = r.parser.sourceLength, p = e.operation === "reset" ? e.text.length : u + (e.text?.length ?? 0);
33
+ if (f - u + p > d.maxSourceLength) throw new Error("Markdown source budget exceeded");
34
+ const M = e.operation === "reset" ? r.parser.reset(e.text) : e.operation === "append" ? r.parser.append(e.text) : r.parser.finish();
35
+ return f += r.parser.sourceLength - u, r.accountedLength = r.parser.sourceLength, r.sequence = e.sequence, { ...t, update: M };
36
+ } catch (r) {
37
+ return q(t.session), { ...t, error: r instanceof Error ? r.message : "Markdown session failed" };
38
+ }
39
+ }
40
+ return { handle: x, close: () => {
41
+ s.clear(), f = 0;
42
+ }, diagnostics: () => ({ sessions: s.size, sourceLength: f }) };
43
+ }
44
+ class L extends Error {
45
+ }
46
+ function I(c, d = {}) {
47
+ const s = d.timeoutMs ?? 15e3, f = d.maxPendingBytes ?? 1024 * 1024;
48
+ if (!Number.isFinite(s) || s <= 0 || !Number.isSafeInteger(f) || f <= 0)
49
+ throw new Error("Markdown worker budgets must be positive");
50
+ let q = 0, x = 0, e = 0, t;
51
+ const r = /* @__PURE__ */ new Map();
52
+ function u(i = new Error("Markdown worker closed")) {
53
+ if (!t) {
54
+ t = i, c.removeEventListener("message", M), c.removeEventListener("error", p), c.removeEventListener("messageerror", p), c.terminate();
55
+ for (const n of r.values())
56
+ clearTimeout(n.timer), n.reject(i);
57
+ r.clear(), e = 0;
58
+ }
59
+ }
60
+ function p() {
61
+ u(new Error("Markdown worker failed"));
62
+ }
63
+ function M(i) {
64
+ const n = i.data;
65
+ if (n?.type !== "markdown-session") return;
66
+ const o = r.get(n.request);
67
+ if (o) {
68
+ if (n.session !== o.session || n.sequence !== o.sequence) {
69
+ u(new Error("Markdown worker response identity mismatch"));
70
+ return;
71
+ }
72
+ r.delete(n.request), e -= o.bytes, clearTimeout(o.timer), n.error ? o.reject(new L(n.error)) : o.resolve(n);
73
+ }
74
+ }
75
+ c.addEventListener("message", M), c.addEventListener("error", p), c.addEventListener("messageerror", p);
76
+ function k(i) {
77
+ if (t) return Promise.reject(t);
78
+ let n;
79
+ try {
80
+ n = 256 + (i.text?.length ?? 0) * 2 + (JSON.stringify(i.config)?.length ?? 0) * 2;
81
+ } catch {
82
+ return Promise.reject(new Error("Markdown configuration must be serializable"));
83
+ }
84
+ if (n + e > f) return Promise.reject(new Error("Markdown worker pending budget exceeded"));
85
+ const o = ++q;
86
+ return new Promise((l, h) => {
87
+ const E = setTimeout(() => u(new Error("Markdown worker timed out")), s);
88
+ r.set(o, { resolve: l, reject: h, timer: E, bytes: n, session: i.session, sequence: i.sequence }), e += n;
89
+ try {
90
+ c.postMessage({ ...i, type: "markdown-session", request: o });
91
+ } catch {
92
+ u(new Error("Markdown worker request could not be sent"));
93
+ }
94
+ });
95
+ }
96
+ async function b(i) {
97
+ const n = ++x;
98
+ await k({ operation: "open", session: n, sequence: 0, offset: 0, config: i });
99
+ let o = 0, l = 0, h = !1;
100
+ const E = (a, v) => {
101
+ if (h) return Promise.reject(new Error("Markdown session closed"));
102
+ const y = l;
103
+ return l = a === "reset" ? v.length : l + (v?.length ?? 0), k({ operation: a, session: n, sequence: ++o, offset: y, text: v }).then((w) => {
104
+ if (!w.update) throw new Error("Markdown worker omitted its update");
105
+ return w.update;
106
+ }).catch((w) => {
107
+ throw h = !0, w instanceof L || u(w instanceof Error ? w : new Error("Markdown session failed")), w;
108
+ });
109
+ };
110
+ return {
111
+ reset: (a) => E("reset", a),
112
+ append: (a) => E("append", a),
113
+ finish: () => E("finish"),
114
+ close() {
115
+ h || (h = !0, k({ operation: "close", session: n, sequence: ++o, offset: l }).catch((a) => {
116
+ a instanceof L || u(a instanceof Error ? a : new Error("Markdown close failed"));
117
+ }));
118
+ }
119
+ };
120
+ }
121
+ return { open: b, close: () => u(), diagnostics: () => ({ pendingRequests: r.size, pendingBytes: e, closed: !!t }) };
122
+ }
123
+ export {
124
+ m as createMarkdownSessionHandler,
125
+ I as createMarkdownWorkerClient
126
+ };
@@ -1,5 +1,5 @@
1
1
  import { type JSX } from 'solid-js';
2
- export interface SurfaceAnchoredLayerProps {
2
+ export interface SurfaceAnchoredLayerProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'style' | 'ref'> {
3
3
  anchor: HTMLElement | undefined;
4
4
  /** Changes when the anchor moves through a transform; no idle polling is used. */
5
5
  revision?: unknown;
@@ -11,8 +11,14 @@ export interface SurfaceAnchoredLayerProps {
11
11
  narrowTop?: number;
12
12
  bottom: number;
13
13
  };
14
+ /** Auto places object tools above/below; side panels prefer the requested side and flip when needed. */
15
+ placement?: 'auto' | 'right' | 'left';
16
+ gap?: number;
14
17
  children: JSX.Element;
15
18
  class?: string;
19
+ style?: JSX.CSSProperties;
20
+ layerRef?: (element: HTMLDivElement) => void;
21
+ onAnchorDisconnect?: () => void;
16
22
  }
17
23
  /** Object-attached tools remain in screen pixels within the owning surface. */
18
24
  export declare function SurfaceAnchoredLayer(props: SurfaceAnchoredLayerProps): JSX.Element;
@@ -1,101 +1,128 @@
1
- import { createComponent as p, memo as k } from "solid-js/web";
2
- import { createSignal as l, createEffect as z, onCleanup as g, onMount as T, Show as V } from "solid-js";
3
- import { SurfaceFloatingLayer as $ } from "./SurfaceFloatingLayer.js";
4
- import { resolveFloatingBoundary as j } from "./surfaceFloatingBoundary.js";
5
- import { resolveSurfacePortalHost as E } from "./dialogSurfaceScope.js";
6
- function N(n) {
7
- const [O, R] = l(!1), [S, F] = l({
1
+ import { createComponent as E, mergeProps as K, memo as N } from "solid-js/web";
2
+ import { splitProps as Q, createSignal as l, createEffect as R, onCleanup as O, onMount as U, Show as X } from "solid-js";
3
+ import { SurfaceFloatingLayer as Z } from "./SurfaceFloatingLayer.js";
4
+ import { resolveFloatingBoundary as _ } from "./surfaceFloatingBoundary.js";
5
+ import { observeViewport as ee } from "../../viewport.js";
6
+ import { resolveSurfacePortalHost as L } from "./dialogSurfaceScope.js";
7
+ function se(C) {
8
+ const [o, H] = Q(C, ["anchor", "revision", "topOffset", "reservedSpace", "placement", "gap", "children", "class", "style", "layerRef", "onAnchorDisconnect"]), [P, $] = l(!1), [B, V] = l({
8
9
  x: 0,
9
10
  y: 0
10
- }), [L, A] = l("above"), [x, y] = l(!1), [C, P] = l(480), [M, B] = l();
11
- let d;
12
- const Y = () => {
13
- d = void 0;
14
- const o = n.anchor, r = M();
15
- if (!o || !r) return;
16
- const t = j(E({
17
- owner: o
11
+ }), [Y, q] = l("above"), [S, w] = l(!1), [D, W] = l(480), [z, k] = l();
12
+ let m, x = !1;
13
+ const [A, T] = l({
14
+ x: 0,
15
+ y: 0
16
+ }), [j, G] = l(0), I = () => {
17
+ m = void 0;
18
+ const n = o.anchor, h = z();
19
+ if (!n || !h) return;
20
+ if (!n.isConnected) {
21
+ w(!1), x || o.onAnchorDisconnect?.(), x = !0;
22
+ return;
23
+ }
24
+ x = !1;
25
+ const t = _(L({
26
+ owner: n
18
27
  }));
19
28
  if (!t) {
20
- y(!1);
29
+ w(!1);
21
30
  return;
22
31
  }
23
- const e = o.getBoundingClientRect(), q = Math.max(120, t.width - 24);
24
- P(q);
25
- const a = r.getBoundingClientRect(), H = (Math.max(t.left, e.left) + Math.min(t.right, e.right)) / 2;
26
- let f = Math.max(t.left + 12, Math.min(H - a.width / 2, t.right - a.width - 12));
27
- const u = e.top - (n.topOffset ?? 0), m = u - a.height - 12, h = n.reservedSpace, v = t.top + (window.matchMedia("(max-width:760px)").matches ? h?.narrowTop ?? h?.top ?? 12 : h?.top ?? 12), b = Math.max(v, t.bottom - (h?.bottom ?? 12) - a.height), w = (W) => Math.max(v, Math.min(W, b));
28
- let s = m, c = "above";
29
- m < v ? e.bottom + 12 <= b ? (s = e.bottom + 12, c = "below") : m >= t.top + 12 ? c = "above" : e.bottom + a.height + 12 <= t.bottom - 12 ? (s = e.bottom + 12, c = "below") : e.right + a.width + 24 <= t.right ? (f = e.right + 12, s = w(u), c = "right") : e.left - a.width - 24 >= t.left ? (f = e.left - a.width - 12, s = w(u), c = "left") : (s = w(m), c = "edge") : s = Math.min(s, b), A(c), F({
30
- x: Math.round(f),
32
+ const e = n.getBoundingClientRect(), f = Math.max(120, t.width - 24);
33
+ W(f);
34
+ const r = h.getBoundingClientRect(), J = (Math.max(t.left, e.left) + Math.min(t.right, e.right)) / 2;
35
+ let d = Math.max(t.left + 12, Math.min(J - r.width / 2, t.right - r.width - 12));
36
+ const y = e.top - (o.topOffset ?? 0), i = Math.max(0, o.gap ?? 12), g = y - r.height - i, p = o.reservedSpace, u = t.top + (window.matchMedia("(max-width:760px)").matches ? p?.narrowTop ?? p?.top ?? 12 : p?.top ?? 12), M = Math.max(u, t.bottom - (p?.bottom ?? 12) - r.height), b = (v) => Math.max(u, Math.min(v, M));
37
+ G(Math.max(0, t.bottom - (p?.bottom ?? 12) - u));
38
+ let s = g, a = "above";
39
+ if (o.placement === "right" || o.placement === "left") {
40
+ const v = e.right + i + r.width <= t.right - 12, F = e.left - i - r.width >= t.left + 12;
41
+ a = o.placement, a === "right" && !v && F ? a = "left" : a === "left" && !F && v && (a = "right"), d = Math.max(t.left + 12, Math.min(a === "right" ? e.right + i : e.left - r.width - i, t.right - r.width - 12)), s = b(e.top + e.height / 2 - r.height / 2);
42
+ } else g < u ? e.bottom + i <= M ? (s = e.bottom + i, a = "below") : g >= t.top + 12 ? a = "above" : e.bottom + r.height + i <= t.bottom - 12 ? (s = e.bottom + i, a = "below") : e.right + r.width + i + 12 <= t.right ? (d = e.right + i, s = b(y), a = "right") : e.left - r.width - i - 12 >= t.left ? (d = e.left - r.width - i, s = b(y), a = "left") : (s = b(g), a = "edge") : s = Math.min(s, M);
43
+ T({
44
+ x: Math.max(18, Math.min(e.left + e.width / 2 - d, Math.max(18, r.width - 18))),
45
+ y: Math.max(18, Math.min(e.top + e.height / 2 - s, Math.max(18, r.height - 18)))
46
+ }), q(a), V({
47
+ x: Math.round(d),
31
48
  y: Math.round(s)
32
- }), y(e.right > t.left && e.left < t.right && e.bottom > t.top && e.top < t.bottom);
33
- }, i = () => {
34
- d === void 0 && typeof requestAnimationFrame == "function" && (d = requestAnimationFrame(Y));
49
+ }), w(e.right > t.left && e.left < t.right && e.bottom > t.top && e.top < t.bottom);
50
+ }, c = () => {
51
+ m === void 0 && typeof requestAnimationFrame == "function" && (m = requestAnimationFrame(I));
35
52
  };
36
- return z(() => {
37
- n.anchor, n.revision, n.topOffset, n.reservedSpace, i();
38
- }), z(() => {
39
- const o = M();
40
- if (!o || typeof ResizeObserver > "u") return;
41
- const r = new ResizeObserver(i);
42
- r.observe(o), g(() => r.disconnect());
43
- }), T(() => {
44
- R(!0);
45
- const o = typeof ResizeObserver == "function" ? new ResizeObserver(i) : void 0, r = E({
46
- owner: n.anchor
53
+ return R(() => {
54
+ o.anchor, o.revision, o.topOffset, o.reservedSpace, o.placement, o.gap, c();
55
+ }), R(() => {
56
+ const n = z();
57
+ if (!n || typeof ResizeObserver > "u") return;
58
+ const h = new ResizeObserver(c);
59
+ h.observe(n), O(() => h.disconnect());
60
+ }), U(() => $(!0)), R(() => {
61
+ if (!P()) return;
62
+ const n = o.anchor, h = typeof ResizeObserver == "function" ? new ResizeObserver(c) : void 0, t = L({
63
+ owner: n
47
64
  }).boundaryHost;
48
- r && o?.observe(r);
49
- const t = new MutationObserver(i);
50
- let e = n.anchor?.parentElement;
51
- for (; e && (t.observe(e, {
65
+ t && h?.observe(t), n && h?.observe(n);
66
+ const e = new MutationObserver(c);
67
+ n && e.observe(n, {
52
68
  attributes: !0,
53
69
  attributeFilter: ["style"]
54
- }), e !== r); )
55
- e = e.parentElement;
56
- window.addEventListener("resize", i), window.addEventListener("scroll", i, !0), i(), g(() => {
57
- o?.disconnect(), t.disconnect(), window.removeEventListener("resize", i), window.removeEventListener("scroll", i, !0);
58
70
  });
59
- }), g(() => {
60
- d !== void 0 && cancelAnimationFrame(d);
61
- }), p(V, {
71
+ let f = n?.parentElement;
72
+ for (; f && (e.observe(f, {
73
+ attributes: !0,
74
+ attributeFilter: ["style"],
75
+ childList: !0
76
+ }), f !== t); )
77
+ f = f.parentElement;
78
+ const r = ee(window, c);
79
+ window.addEventListener("scroll", c, !0), c(), O(() => {
80
+ h?.disconnect(), e.disconnect(), r(), window.removeEventListener("scroll", c, !0);
81
+ });
82
+ }), O(() => {
83
+ m !== void 0 && cancelAnimationFrame(m);
84
+ }), E(X, {
62
85
  get when() {
63
- return k(() => !!O())() && n.anchor;
86
+ return N(() => !!P())() && o.anchor;
64
87
  },
65
88
  get children() {
66
- return p($, {
89
+ return E(Z, K(H, {
67
90
  get owner() {
68
- return n.anchor;
91
+ return o.anchor;
69
92
  },
70
93
  get position() {
71
- return S();
94
+ return B();
72
95
  },
73
96
  get class() {
74
- return n.class;
97
+ return o.class;
75
98
  },
76
99
  get "data-placement"() {
77
- return L();
100
+ return Y();
78
101
  },
79
102
  get inert() {
80
- return !x();
103
+ return !S();
81
104
  },
82
105
  get style() {
83
106
  return {
84
- visibility: x() ? "visible" : "hidden",
85
- "max-width": `${C()}px`,
86
- "z-index": 60
107
+ ...o.style,
108
+ "--floe-anchored-layer-anchor-x": `${A().x}px`,
109
+ "--floe-anchored-layer-anchor-y": `${A().y}px`,
110
+ "--floe-anchored-layer-max-height": `${j()}px`,
111
+ visibility: S() ? "visible" : "hidden",
112
+ "max-width": `${D()}px`,
113
+ "z-index": o.style?.["z-index"] ?? 60
87
114
  };
88
115
  },
89
- layerRef: (o) => {
90
- B(o), i();
116
+ layerRef: (n) => {
117
+ k(n), o.layerRef?.(n), c();
91
118
  },
92
119
  get children() {
93
- return n.children;
120
+ return o.children;
94
121
  }
95
- });
122
+ }));
96
123
  }
97
124
  });
98
125
  }
99
126
  export {
100
- N as SurfaceAnchoredLayer
127
+ se as SurfaceAnchoredLayer
101
128
  };