@gridland/web 0.2.33 → 0.2.35

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 (39) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.js +1750 -8254
  3. package/dist/index.js.map +4 -4
  4. package/dist/{next-Cwun29WQ.d.ts → next-Cdtr1evW.d.ts} +4 -90
  5. package/dist/next-plugin.cjs +12 -35
  6. package/dist/next-plugin.cjs.map +1 -1
  7. package/dist/next-plugin.d.cts +2 -7
  8. package/dist/next-plugin.d.ts +2 -7
  9. package/dist/next-plugin.js +12 -35
  10. package/dist/next-plugin.js.map +1 -1
  11. package/dist/next.d.ts +2 -1
  12. package/dist/next.js +654 -7623
  13. package/dist/next.js.map +4 -4
  14. package/dist/vite-plugin.d.ts +4 -9
  15. package/dist/vite-plugin.js +20 -74
  16. package/dist/vite-plugin.js.map +1 -1
  17. package/package.json +3 -5
  18. package/src/shims/native-stub.ts +6 -0
  19. package/src/shims/slider-deps.ts +2 -2
  20. package/dist/core-shims.js +0 -46163
  21. package/dist/core-shims.js.map +0 -7
  22. package/src/browser-buffer.ts +0 -715
  23. package/src/core-shims/index.ts +0 -269
  24. package/src/core-shims/renderable-types.ts +0 -4
  25. package/src/core-shims/rgba.ts +0 -195
  26. package/src/core-shims/types.ts +0 -132
  27. package/src/shims/console-stub.ts +0 -13
  28. package/src/shims/console.ts +0 -3
  29. package/src/shims/filters-stub.ts +0 -4
  30. package/src/shims/native-span-feed-stub.ts +0 -7
  31. package/src/shims/node-buffer.ts +0 -39
  32. package/src/shims/node-fs.ts +0 -20
  33. package/src/shims/node-os.ts +0 -6
  34. package/src/shims/node-path.ts +0 -35
  35. package/src/shims/node-stream.ts +0 -10
  36. package/src/shims/node-url.ts +0 -8
  37. package/src/shims/node-util.ts +0 -33
  38. package/src/shims/renderer-stub.ts +0 -21
  39. package/src/shims/timeline-stub.ts +0 -43
@@ -1,84 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode, CSSProperties } from 'react';
3
+ import { RGBA, CursorStyle, CapturedLine, RenderContext, WidthMethod as WidthMethod$1, CursorStyleOptions, MousePointerStyle } from '@gridland/utils';
3
4
  import { EventEmitter } from 'events';
4
5
 
5
- declare class RGBA {
6
- buffer: Float32Array;
7
- constructor(buffer: Float32Array);
8
- static fromArray(array: Float32Array): RGBA;
9
- static fromValues(r: number, g: number, b: number, a?: number): RGBA;
10
- static fromInts(r: number, g: number, b: number, a?: number): RGBA;
11
- static fromHex(hex: string): RGBA;
12
- get r(): number;
13
- set r(v: number);
14
- get g(): number;
15
- set g(v: number);
16
- get b(): number;
17
- set b(v: number);
18
- get a(): number;
19
- set a(v: number);
20
- toInts(): [number, number, number, number];
21
- map<R>(fn: (value: number) => R): R[];
22
- toString(): string;
23
- equals(other?: RGBA): boolean;
24
- }
25
-
26
- type CursorStyle = "block" | "line" | "underline";
27
- type MousePointerStyle = "default" | "pointer" | "text" | "crosshair" | "move" | "not-allowed";
28
- type WidthMethod$1 = "wcwidth" | "unicode";
29
- interface CursorStyleOptions {
30
- style?: CursorStyle;
31
- blinking?: boolean;
32
- color?: RGBA;
33
- cursor?: MousePointerStyle;
34
- }
35
- interface RenderContext {
36
- addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void;
37
- pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void;
38
- popHitGridScissorRect: () => void;
39
- clearHitGridScissorRects: () => void;
40
- width: number;
41
- height: number;
42
- requestRender: () => void;
43
- setCursorPosition: (x: number, y: number, visible: boolean) => void;
44
- setCursorStyle: (options: CursorStyleOptions) => void;
45
- setCursorColor: (color: RGBA) => void;
46
- setMousePointer: (shape: MousePointerStyle) => void;
47
- widthMethod: WidthMethod$1;
48
- capabilities: any | null;
49
- requestLive: () => void;
50
- dropLive: () => void;
51
- hasSelection: boolean;
52
- getSelection: () => any | null;
53
- requestSelectionUpdate: () => void;
54
- currentFocusedRenderable: any | null;
55
- focusRenderable: (renderable: any) => void;
56
- registerLifecyclePass: (renderable: any) => void;
57
- unregisterLifecyclePass: (renderable: any) => void;
58
- getLifecyclePasses: () => Set<any>;
59
- keyInput: any;
60
- _internalKeyInput: any;
61
- clearSelection: () => void;
62
- startSelection: (renderable: any, x: number, y: number) => void;
63
- updateSelection: (currentRenderable: any | undefined, x: number, y: number, options?: {
64
- finishDragging?: boolean;
65
- }) => void;
66
- on: (event: string, listener: (...args: any[]) => void) => any;
67
- off: (event: string, listener: (...args: any[]) => void) => any;
68
- emit: (event: string, ...args: any[]) => boolean;
69
- removeAllListeners: (event?: string) => any;
70
- }
71
- interface CapturedSpan {
72
- text: string;
73
- fg: RGBA;
74
- bg: RGBA;
75
- attributes: number;
76
- width: number;
77
- }
78
- interface CapturedLine {
79
- spans: CapturedSpan[];
80
- }
81
-
82
6
  type WidthMethod = "wcwidth" | "unicode";
83
7
  interface BorderDrawOptions {
84
8
  x: number;
@@ -179,16 +103,6 @@ declare class BrowserBuffer {
179
103
  destroy(): void;
180
104
  }
181
105
 
182
- declare class BrowserKeyHandler extends EventEmitter {
183
- constructor();
184
- processInput(_data: string): boolean;
185
- }
186
- declare class BrowserInternalKeyHandler extends BrowserKeyHandler {
187
- private renderableHandlers;
188
- onInternal(event: string, handler: Function): void;
189
- offInternal(event: string, handler: Function): void;
190
- emit(event: string, ...args: any[]): boolean;
191
- }
192
106
  declare class BrowserRenderContext extends EventEmitter implements RenderContext {
193
107
  private _width;
194
108
  private _height;
@@ -200,8 +114,8 @@ declare class BrowserRenderContext extends EventEmitter implements RenderContext
200
114
  cursorColor: RGBA | null;
201
115
  cursorStyleType: CursorStyle;
202
116
  cursorBlinking: boolean;
203
- keyInput: BrowserKeyHandler;
204
- _internalKeyInput: BrowserInternalKeyHandler;
117
+ keyInput: any;
118
+ _internalKeyInput: any;
205
119
  constructor(width: number, height: number, widthMethod?: WidthMethod$1);
206
120
  get width(): number;
207
121
  get height(): number;
@@ -362,4 +276,4 @@ interface TUIProps {
362
276
  */
363
277
  declare function TUI({ children, style, className, fontSize, fontFamily, autoFocus, backgroundColor, onReady, fallbackCols, fallbackRows, }: TUIProps): react_jsx_runtime.JSX.Element;
364
278
 
365
- export { BrowserRenderer as B, CanvasPainter as C, RGBA as R, SelectionManager as S, TUI as T, type WidthMethod as W, BrowserBuffer as a, BrowserRenderContext as b, type BorderDrawOptions as c, type CanvasPainterOptions as d, type TUIProps as e };
279
+ export { BrowserRenderer as B, CanvasPainter as C, SelectionManager as S, TUI as T, type WidthMethod as W, BrowserBuffer as a, BrowserRenderContext as b, type BorderDrawOptions as c, type CanvasPainterOptions as d, type TUIProps as e };
@@ -45,20 +45,9 @@ function withGridland(nextConfig = {}) {
45
45
  function shimPath(p) {
46
46
  return import_path.default.resolve(pkgRoot, p);
47
47
  }
48
- const coreFileShims = {
49
- buffer: "src/browser-buffer.ts",
50
- "text-buffer": "src/shims/text-buffer-shim.ts",
51
- "text-buffer-view": "src/shims/text-buffer-view-shim.ts",
52
- "syntax-style": "src/shims/syntax-style-shim.ts",
53
- "edit-buffer": "src/shims/edit-buffer-stub.ts",
54
- "editor-view": "src/shims/editor-view-stub.ts",
55
- "post/filters": "src/shims/filters-stub.ts",
56
- "animation/Timeline": "src/shims/timeline-stub.ts"
57
- };
58
48
  const userWebpack = nextConfig.webpack;
59
49
  return {
60
50
  ...nextConfig,
61
- // Ensure Next.js compiles .ts shim files from @gridland/web with SWC
62
51
  transpilePackages: [
63
52
  ...nextConfig.transpilePackages || [],
64
53
  "@gridland/web"
@@ -69,15 +58,20 @@ function withGridland(nextConfig = {}) {
69
58
  config = userWebpack(config, context);
70
59
  }
71
60
  const sharedAliases = {
72
- // npm mode: @gridland/core resolves via package.json conditional exports.
73
- // No alias needed.
74
- // @opentui packages — source mode only (monorepo dev)
61
+ // Source mode: @opentui packages + file-level shims
75
62
  ...hasSource ? {
63
+ "@opentui/core/native": shimPath("src/shims/native-stub.ts"),
76
64
  "@opentui/core": import_path.default.resolve(coreRoot, "src/index.ts"),
77
65
  "@opentui/react": import_path.default.resolve(reactRoot, "src/index.ts"),
78
- "@opentui/ui": import_path.default.resolve(uiRoot, "src/index.ts")
66
+ "@opentui/ui": import_path.default.resolve(uiRoot, "src/index.ts"),
67
+ // File-level shims for modules that call resolveRenderLib()
68
+ [import_path.default.resolve(coreRoot, "src/edit-buffer")]: shimPath("src/shims/edit-buffer-stub.ts"),
69
+ [import_path.default.resolve(coreRoot, "src/editor-view")]: shimPath("src/shims/editor-view-stub.ts"),
70
+ [import_path.default.resolve(coreRoot, "src/text-buffer")]: shimPath("src/shims/text-buffer-shim.ts"),
71
+ [import_path.default.resolve(coreRoot, "src/text-buffer-view")]: shimPath("src/shims/text-buffer-view-shim.ts"),
72
+ [import_path.default.resolve(coreRoot, "src/syntax-style")]: shimPath("src/shims/syntax-style-shim.ts")
79
73
  } : {},
80
- // FFI shims (no Zig/Bun on server or client in browser context)
74
+ // FFI shims
81
75
  "bun:ffi": shimPath("src/shims/bun-ffi.ts"),
82
76
  "bun-ffi-structs": shimPath("src/shims/bun-ffi-structs.ts"),
83
77
  bun: shimPath("src/shims/bun-ffi.ts"),
@@ -85,7 +79,7 @@ function withGridland(nextConfig = {}) {
85
79
  "tree-sitter-styled-text": shimPath("src/shims/tree-sitter-styled-text-stub.ts"),
86
80
  "web-tree-sitter": shimPath("src/shims/tree-sitter-stub.ts"),
87
81
  "hast-styled-text": shimPath("src/shims/hast-stub.ts"),
88
- // Source-mode-only aliases
82
+ // Source-mode-only tree-sitter path aliases
89
83
  ...hasSource ? {
90
84
  [import_path.default.resolve(coreRoot, "src/lib/tree-sitter-styled-text")]: shimPath("src/shims/tree-sitter-styled-text-stub.ts"),
91
85
  [import_path.default.resolve(coreRoot, "src/lib/tree-sitter")]: shimPath("src/shims/tree-sitter-stub.ts"),
@@ -93,11 +87,6 @@ function withGridland(nextConfig = {}) {
93
87
  [import_path.default.resolve(reactRoot, "src/reconciler/devtools-polyfill")]: shimPath("src/shims/devtools-polyfill-stub.ts")
94
88
  } : {}
95
89
  };
96
- if (hasSource) {
97
- for (const [key, shimFile] of Object.entries(coreFileShims)) {
98
- sharedAliases[import_path.default.resolve(coreRoot, "src", key)] = shimPath(shimFile);
99
- }
100
- }
101
90
  config.resolve = config.resolve || {};
102
91
  config.resolve.alias = {
103
92
  ...config.resolve.alias,
@@ -121,25 +110,13 @@ function withGridland(nextConfig = {}) {
121
110
  }
122
111
  if (!isServer) {
123
112
  const clientAliases = {
124
- "node:console": shimPath("src/shims/console.ts"),
125
- "console$": shimPath("src/shims/console.ts"),
126
- "events$": shimPath("src/shims/events-shim.ts"),
127
- "fs/promises": shimPath("src/shims/node-fs.ts"),
128
- "fs$": shimPath("src/shims/node-fs.ts"),
129
- "path$": shimPath("src/shims/node-path.ts"),
130
- "util$": shimPath("src/shims/node-util.ts"),
131
- "os$": shimPath("src/shims/node-os.ts"),
132
- "stream$": shimPath("src/shims/node-stream.ts"),
133
- "url$": shimPath("src/shims/node-url.ts")
113
+ "events$": shimPath("src/shims/events-shim.ts")
134
114
  };
135
115
  config.resolve.alias = {
136
116
  ...config.resolve.alias,
137
117
  ...clientAliases
138
118
  };
139
119
  config.plugins.push(
140
- new webpack.NormalModuleReplacementPlugin(/^node:/, (resource) => {
141
- resource.request = resource.request.replace(/^node:/, "");
142
- }),
143
120
  new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource) => {
144
121
  resource.request = resource.request.replace(/^bun:/, "");
145
122
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\n // NOT needed for: zig (zig-registry.ts is browser-safe), renderer, console,\n // NativeSpanFeed (no longer in browser barrel).\n const coreFileShims: Record<string, string> = {\n buffer: \"src/browser-buffer.ts\",\n \"text-buffer\": \"src/shims/text-buffer-shim.ts\",\n \"text-buffer-view\": \"src/shims/text-buffer-view-shim.ts\",\n \"syntax-style\": \"src/shims/syntax-style-shim.ts\",\n \"edit-buffer\": \"src/shims/edit-buffer-stub.ts\",\n \"editor-view\": \"src/shims/editor-view-stub.ts\",\n \"post/filters\": \"src/shims/filters-stub.ts\",\n \"animation/Timeline\": \"src/shims/timeline-stub.ts\",\n }\n\n const userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n // Ensure Next.js compiles .ts shim files from @gridland/web with SWC\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n // Both node:-prefixed and bare forms are needed because\n // NormalModuleReplacementPlugin strips the node: prefix.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"console$\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by yoga-layout WASM compilation).\n // All ESM-capable browsers support top-level await, so we declare\n // asyncFunction support to suppress webpack's false-positive warning.\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":["path"]}
1
+ {"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n *\n * In **npm mode**, @gridland/utils resolves via package.json. Minimal config needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and native stubs.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n const pkgRoot = path.resolve(__dirname, \"..\")\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n const userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // Source mode: @opentui packages + file-level shims\n ...(hasSource ? {\n \"@opentui/core/native\": shimPath(\"src/shims/native-stub.ts\"),\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n // File-level shims for modules that call resolveRenderLib()\n [path.resolve(coreRoot, \"src/edit-buffer\")]: shimPath(\"src/shims/edit-buffer-stub.ts\"),\n [path.resolve(coreRoot, \"src/editor-view\")]: shimPath(\"src/shims/editor-view-stub.ts\"),\n [path.resolve(coreRoot, \"src/text-buffer\")]: shimPath(\"src/shims/text-buffer-shim.ts\"),\n [path.resolve(coreRoot, \"src/text-buffer-view\")]: shimPath(\"src/shims/text-buffer-view-shim.ts\"),\n [path.resolve(coreRoot, \"src/syntax-style\")]: shimPath(\"src/shims/syntax-style-shim.ts\"),\n } : {}),\n\n // FFI shims\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only tree-sitter path aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n const clientAliases: Record<string, string> = {\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":["path"]}
@@ -9,15 +9,10 @@ interface NextConfig {
9
9
  }
10
10
  /**
11
11
  * Next.js plugin that configures webpack for Gridland.
12
- * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,
13
- * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular
14
- * dependency fixes.
15
12
  *
16
- * In **npm mode**, @gridland/core resolves via package.json conditional exports
17
- * ("import" → dist/browser.js). No aliasing needed.
13
+ * In **npm mode**, @gridland/utils resolves via package.json. Minimal config needed.
18
14
  *
19
- * In **source mode**, the plugin handles @opentui/* resolution and file-level
20
- * browser shims for native-backed classes.
15
+ * In **source mode**, the plugin handles @opentui/* resolution and native stubs.
21
16
  */
22
17
  declare function withGridland(nextConfig?: NextConfig): NextConfig;
23
18
 
@@ -9,15 +9,10 @@ interface NextConfig {
9
9
  }
10
10
  /**
11
11
  * Next.js plugin that configures webpack for Gridland.
12
- * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,
13
- * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular
14
- * dependency fixes.
15
12
  *
16
- * In **npm mode**, @gridland/core resolves via package.json conditional exports
17
- * ("import" → dist/browser.js). No aliasing needed.
13
+ * In **npm mode**, @gridland/utils resolves via package.json. Minimal config needed.
18
14
  *
19
- * In **source mode**, the plugin handles @opentui/* resolution and file-level
20
- * browser shims for native-backed classes.
15
+ * In **source mode**, the plugin handles @opentui/* resolution and native stubs.
21
16
  */
22
17
  declare function withGridland(nextConfig?: NextConfig): NextConfig;
23
18
 
@@ -11,20 +11,9 @@ function withGridland(nextConfig = {}) {
11
11
  function shimPath(p) {
12
12
  return path.resolve(pkgRoot, p);
13
13
  }
14
- const coreFileShims = {
15
- buffer: "src/browser-buffer.ts",
16
- "text-buffer": "src/shims/text-buffer-shim.ts",
17
- "text-buffer-view": "src/shims/text-buffer-view-shim.ts",
18
- "syntax-style": "src/shims/syntax-style-shim.ts",
19
- "edit-buffer": "src/shims/edit-buffer-stub.ts",
20
- "editor-view": "src/shims/editor-view-stub.ts",
21
- "post/filters": "src/shims/filters-stub.ts",
22
- "animation/Timeline": "src/shims/timeline-stub.ts"
23
- };
24
14
  const userWebpack = nextConfig.webpack;
25
15
  return {
26
16
  ...nextConfig,
27
- // Ensure Next.js compiles .ts shim files from @gridland/web with SWC
28
17
  transpilePackages: [
29
18
  ...nextConfig.transpilePackages || [],
30
19
  "@gridland/web"
@@ -35,15 +24,20 @@ function withGridland(nextConfig = {}) {
35
24
  config = userWebpack(config, context);
36
25
  }
37
26
  const sharedAliases = {
38
- // npm mode: @gridland/core resolves via package.json conditional exports.
39
- // No alias needed.
40
- // @opentui packages — source mode only (monorepo dev)
27
+ // Source mode: @opentui packages + file-level shims
41
28
  ...hasSource ? {
29
+ "@opentui/core/native": shimPath("src/shims/native-stub.ts"),
42
30
  "@opentui/core": path.resolve(coreRoot, "src/index.ts"),
43
31
  "@opentui/react": path.resolve(reactRoot, "src/index.ts"),
44
- "@opentui/ui": path.resolve(uiRoot, "src/index.ts")
32
+ "@opentui/ui": path.resolve(uiRoot, "src/index.ts"),
33
+ // File-level shims for modules that call resolveRenderLib()
34
+ [path.resolve(coreRoot, "src/edit-buffer")]: shimPath("src/shims/edit-buffer-stub.ts"),
35
+ [path.resolve(coreRoot, "src/editor-view")]: shimPath("src/shims/editor-view-stub.ts"),
36
+ [path.resolve(coreRoot, "src/text-buffer")]: shimPath("src/shims/text-buffer-shim.ts"),
37
+ [path.resolve(coreRoot, "src/text-buffer-view")]: shimPath("src/shims/text-buffer-view-shim.ts"),
38
+ [path.resolve(coreRoot, "src/syntax-style")]: shimPath("src/shims/syntax-style-shim.ts")
45
39
  } : {},
46
- // FFI shims (no Zig/Bun on server or client in browser context)
40
+ // FFI shims
47
41
  "bun:ffi": shimPath("src/shims/bun-ffi.ts"),
48
42
  "bun-ffi-structs": shimPath("src/shims/bun-ffi-structs.ts"),
49
43
  bun: shimPath("src/shims/bun-ffi.ts"),
@@ -51,7 +45,7 @@ function withGridland(nextConfig = {}) {
51
45
  "tree-sitter-styled-text": shimPath("src/shims/tree-sitter-styled-text-stub.ts"),
52
46
  "web-tree-sitter": shimPath("src/shims/tree-sitter-stub.ts"),
53
47
  "hast-styled-text": shimPath("src/shims/hast-stub.ts"),
54
- // Source-mode-only aliases
48
+ // Source-mode-only tree-sitter path aliases
55
49
  ...hasSource ? {
56
50
  [path.resolve(coreRoot, "src/lib/tree-sitter-styled-text")]: shimPath("src/shims/tree-sitter-styled-text-stub.ts"),
57
51
  [path.resolve(coreRoot, "src/lib/tree-sitter")]: shimPath("src/shims/tree-sitter-stub.ts"),
@@ -59,11 +53,6 @@ function withGridland(nextConfig = {}) {
59
53
  [path.resolve(reactRoot, "src/reconciler/devtools-polyfill")]: shimPath("src/shims/devtools-polyfill-stub.ts")
60
54
  } : {}
61
55
  };
62
- if (hasSource) {
63
- for (const [key, shimFile] of Object.entries(coreFileShims)) {
64
- sharedAliases[path.resolve(coreRoot, "src", key)] = shimPath(shimFile);
65
- }
66
- }
67
56
  config.resolve = config.resolve || {};
68
57
  config.resolve.alias = {
69
58
  ...config.resolve.alias,
@@ -87,25 +76,13 @@ function withGridland(nextConfig = {}) {
87
76
  }
88
77
  if (!isServer) {
89
78
  const clientAliases = {
90
- "node:console": shimPath("src/shims/console.ts"),
91
- "console$": shimPath("src/shims/console.ts"),
92
- "events$": shimPath("src/shims/events-shim.ts"),
93
- "fs/promises": shimPath("src/shims/node-fs.ts"),
94
- "fs$": shimPath("src/shims/node-fs.ts"),
95
- "path$": shimPath("src/shims/node-path.ts"),
96
- "util$": shimPath("src/shims/node-util.ts"),
97
- "os$": shimPath("src/shims/node-os.ts"),
98
- "stream$": shimPath("src/shims/node-stream.ts"),
99
- "url$": shimPath("src/shims/node-url.ts")
79
+ "events$": shimPath("src/shims/events-shim.ts")
100
80
  };
101
81
  config.resolve.alias = {
102
82
  ...config.resolve.alias,
103
83
  ...clientAliases
104
84
  };
105
85
  config.plugins.push(
106
- new webpack.NormalModuleReplacementPlugin(/^node:/, (resource) => {
107
- resource.request = resource.request.replace(/^node:/, "");
108
- }),
109
86
  new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource) => {
110
87
  resource.request = resource.request.replace(/^bun:/, "");
111
88
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n * Equivalent to `gridlandWebPlugin()` for Vite — handles module aliases,\n * FFI shims, tree-sitter stubs, Node.js built-in stubs, and circular\n * dependency fixes.\n *\n * In **npm mode**, @gridland/core resolves via package.json conditional exports\n * (\"import\" → dist/browser.js). No aliasing needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and file-level\n * browser shims for native-backed classes.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n // __dirname works natively in CJS; tsup shims it for ESM via import.meta.url\n const pkgRoot = path.resolve(__dirname, \"..\")\n\n // Resolve opentui package roots from the git submodule\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n // Detect whether opentui source is available (monorepo/submodule)\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n // File-level shims — browser replacements for native-backed classes.\n // NOT needed for: zig (zig-registry.ts is browser-safe), renderer, console,\n // NativeSpanFeed (no longer in browser barrel).\n const coreFileShims: Record<string, string> = {\n buffer: \"src/browser-buffer.ts\",\n \"text-buffer\": \"src/shims/text-buffer-shim.ts\",\n \"text-buffer-view\": \"src/shims/text-buffer-view-shim.ts\",\n \"syntax-style\": \"src/shims/syntax-style-shim.ts\",\n \"edit-buffer\": \"src/shims/edit-buffer-stub.ts\",\n \"editor-view\": \"src/shims/editor-view-stub.ts\",\n \"post/filters\": \"src/shims/filters-stub.ts\",\n \"animation/Timeline\": \"src/shims/timeline-stub.ts\",\n }\n\n const userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n // Ensure Next.js compiles .ts shim files from @gridland/web with SWC\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n // Chain user's webpack config first if provided\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // npm mode: @gridland/core resolves via package.json conditional exports.\n // No alias needed.\n\n // @opentui packages — source mode only (monorepo dev)\n ...(hasSource ? {\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n } : {}),\n\n // FFI shims (no Zig/Bun on server or client in browser context)\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n // Core file shims (opentui source → browser shim) — source mode only\n if (hasSource) {\n for (const [key, shimFile] of Object.entries(coreFileShims)) {\n sharedAliases[path.resolve(coreRoot, \"src\", key)] = shimPath(shimFile)\n }\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n // Allow webpack to resolve workspace packages\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n // Client-only: Node.js built-in stubs, events shim, console shim.\n // Both node:-prefixed and bare forms are needed because\n // NormalModuleReplacementPlugin strips the node: prefix.\n const clientAliases: Record<string, string> = {\n \"node:console\": shimPath(\"src/shims/console.ts\"),\n \"console$\": shimPath(\"src/shims/console.ts\"),\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n \"fs/promises\": shimPath(\"src/shims/node-fs.ts\"),\n \"fs$\": shimPath(\"src/shims/node-fs.ts\"),\n \"path$\": shimPath(\"src/shims/node-path.ts\"),\n \"util$\": shimPath(\"src/shims/node-util.ts\"),\n \"os$\": shimPath(\"src/shims/node-os.ts\"),\n \"stream$\": shimPath(\"src/shims/node-stream.ts\"),\n \"url$\": shimPath(\"src/shims/node-url.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n // Strip `node:` and `bun:` prefixes from imports\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^node:/, (resource: any) => {\n resource.request = resource.request.replace(/^node:/, \"\")\n }),\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n // Enable top-level await (used by yoga-layout WASM compilation).\n // All ESM-capable browsers support top-level await, so we declare\n // asyncFunction support to suppress webpack's false-positive warning.\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/next-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport { existsSync } from \"fs\"\n\ntype WebpackConfig = any\ntype WebpackInstance = any\n\ninterface NextConfig {\n webpack?: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => WebpackConfig\n [key: string]: any\n}\n\n/**\n * Next.js plugin that configures webpack for Gridland.\n *\n * In **npm mode**, @gridland/utils resolves via package.json. Minimal config needed.\n *\n * In **source mode**, the plugin handles @opentui/* resolution and native stubs.\n */\nexport function withGridland(nextConfig: NextConfig = {}): NextConfig {\n const pkgRoot = path.resolve(__dirname, \"..\")\n const opentuiRoot = path.resolve(pkgRoot, \"../../opentui\")\n const coreRoot = path.resolve(opentuiRoot, \"packages/core\")\n const reactRoot = path.resolve(opentuiRoot, \"packages/react\")\n const uiRoot = path.resolve(opentuiRoot, \"packages/ui\")\n\n const hasSource = existsSync(path.resolve(reactRoot, \"src/index.ts\"))\n\n function shimPath(p: string) {\n return path.resolve(pkgRoot, p)\n }\n\n const userWebpack = nextConfig.webpack\n\n return {\n ...nextConfig,\n transpilePackages: [\n ...(nextConfig.transpilePackages || []),\n \"@gridland/web\",\n ],\n webpack: (config: WebpackConfig, context: { isServer: boolean; webpack: WebpackInstance }) => {\n const { isServer, webpack } = context\n\n if (userWebpack) {\n config = userWebpack(config, context)\n }\n\n const sharedAliases: Record<string, string> = {\n // Source mode: @opentui packages + file-level shims\n ...(hasSource ? {\n \"@opentui/core/native\": shimPath(\"src/shims/native-stub.ts\"),\n \"@opentui/core\": path.resolve(coreRoot, \"src/index.ts\"),\n \"@opentui/react\": path.resolve(reactRoot, \"src/index.ts\"),\n \"@opentui/ui\": path.resolve(uiRoot, \"src/index.ts\"),\n // File-level shims for modules that call resolveRenderLib()\n [path.resolve(coreRoot, \"src/edit-buffer\")]: shimPath(\"src/shims/edit-buffer-stub.ts\"),\n [path.resolve(coreRoot, \"src/editor-view\")]: shimPath(\"src/shims/editor-view-stub.ts\"),\n [path.resolve(coreRoot, \"src/text-buffer\")]: shimPath(\"src/shims/text-buffer-shim.ts\"),\n [path.resolve(coreRoot, \"src/text-buffer-view\")]: shimPath(\"src/shims/text-buffer-view-shim.ts\"),\n [path.resolve(coreRoot, \"src/syntax-style\")]: shimPath(\"src/shims/syntax-style-shim.ts\"),\n } : {}),\n\n // FFI shims\n \"bun:ffi\": shimPath(\"src/shims/bun-ffi.ts\"),\n \"bun-ffi-structs\": shimPath(\"src/shims/bun-ffi-structs.ts\"),\n bun: shimPath(\"src/shims/bun-ffi.ts\"),\n\n // Tree-sitter stubs\n \"tree-sitter-styled-text\": shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n \"web-tree-sitter\": shimPath(\"src/shims/tree-sitter-stub.ts\"),\n \"hast-styled-text\": shimPath(\"src/shims/hast-stub.ts\"),\n\n // Source-mode-only tree-sitter path aliases\n ...(hasSource ? {\n [path.resolve(coreRoot, \"src/lib/tree-sitter-styled-text\")]:\n shimPath(\"src/shims/tree-sitter-styled-text-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/tree-sitter\")]:\n shimPath(\"src/shims/tree-sitter-stub.ts\"),\n [path.resolve(coreRoot, \"src/lib/hast-styled-text\")]:\n shimPath(\"src/shims/hast-stub.ts\"),\n [path.resolve(reactRoot, \"src/reconciler/devtools-polyfill\")]:\n shimPath(\"src/shims/devtools-polyfill-stub.ts\"),\n } : {}),\n }\n\n config.resolve = config.resolve || {}\n config.resolve.alias = {\n ...config.resolve.alias,\n ...sharedAliases,\n }\n\n config.resolve.modules = [\n ...(config.resolve.modules || []),\n path.resolve(process.cwd(), \"node_modules\"),\n path.resolve(pkgRoot, \"node_modules\"),\n path.resolve(pkgRoot, \"../../node_modules\"),\n ]\n\n // Slider circular dependency fix — source mode only\n if (hasSource) {\n const renderablesDir = path.resolve(coreRoot, \"src/renderables\")\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^\\.\\.\\/index$/, (resource: any) => {\n if (resource.context === renderablesDir) {\n resource.request = shimPath(\"src/shims/slider-deps.ts\")\n }\n }),\n )\n }\n\n if (!isServer) {\n const clientAliases: Record<string, string> = {\n \"events$\": shimPath(\"src/shims/events-shim.ts\"),\n }\n\n config.resolve.alias = {\n ...config.resolve.alias,\n ...clientAliases,\n }\n\n config.plugins.push(\n new webpack.NormalModuleReplacementPlugin(/^bun:/, (resource: any) => {\n resource.request = resource.request.replace(/^bun:/, \"\")\n }),\n )\n }\n\n config.experiments = {\n ...config.experiments,\n topLevelAwait: true,\n }\n config.output = {\n ...config.output,\n environment: {\n ...config.output?.environment,\n asyncFunction: true,\n },\n }\n\n return config\n },\n }\n}\n"],"mappings":"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","names":[]}
package/dist/next.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export { T as TUI, e as TUIProps } from './next-Cwun29WQ.js';
1
+ export { T as TUI, e as TUIProps } from './next-Cdtr1evW.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
+ import '@gridland/utils';
4
5
  import 'events';