@vibecook/ghosttea-react 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +10 -0
  2. package/THIRD_PARTY_NOTICES.md +62 -0
  3. package/dist/appearance/AdvancedConfigSettings.d.ts +12 -0
  4. package/dist/appearance/AdvancedConfigSettings.d.ts.map +1 -0
  5. package/dist/appearance/AdvancedConfigSettings.js +362 -0
  6. package/dist/appearance/AdvancedConfigSettings.js.map +1 -0
  7. package/dist/appearance/AppearanceSettings.d.ts +21 -0
  8. package/dist/appearance/AppearanceSettings.d.ts.map +1 -0
  9. package/dist/appearance/AppearanceSettings.js +175 -0
  10. package/dist/appearance/AppearanceSettings.js.map +1 -0
  11. package/dist/appearance/catalog.d.ts +39 -0
  12. package/dist/appearance/catalog.d.ts.map +1 -0
  13. package/dist/appearance/catalog.js +56 -0
  14. package/dist/appearance/catalog.js.map +1 -0
  15. package/dist/appearance/config-draft.d.ts +35 -0
  16. package/dist/appearance/config-draft.d.ts.map +1 -0
  17. package/dist/appearance/config-draft.js +289 -0
  18. package/dist/appearance/config-draft.js.map +1 -0
  19. package/dist/appearance/shaders.d.ts +14 -0
  20. package/dist/appearance/shaders.d.ts.map +1 -0
  21. package/dist/appearance/shaders.js +71 -0
  22. package/dist/appearance/shaders.js.map +1 -0
  23. package/dist/appearance/theme-catalog.generated.json +16260 -0
  24. package/dist/appearance/types.d.ts +61 -0
  25. package/dist/appearance/types.d.ts.map +1 -0
  26. package/dist/appearance/types.js +2 -0
  27. package/dist/appearance/types.js.map +1 -0
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +23 -4
  30. package/dist/config.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/renderers/canvas-renderer.d.ts.map +1 -1
  36. package/dist/renderers/canvas-renderer.js +9 -1
  37. package/dist/renderers/canvas-renderer.js.map +1 -1
  38. package/dist/renderers/shader-effects.d.ts +2 -0
  39. package/dist/renderers/shader-effects.d.ts.map +1 -0
  40. package/dist/renderers/shader-effects.js +206 -0
  41. package/dist/renderers/shader-effects.js.map +1 -0
  42. package/dist/renderers/types.d.ts +7 -0
  43. package/dist/renderers/types.d.ts.map +1 -1
  44. package/dist/renderers/types.js +11 -0
  45. package/dist/renderers/types.js.map +1 -1
  46. package/dist/renderers/webgpu-renderer.d.ts +2 -1
  47. package/dist/renderers/webgpu-renderer.d.ts.map +1 -1
  48. package/dist/renderers/webgpu-renderer.js +250 -159
  49. package/dist/renderers/webgpu-renderer.js.map +1 -1
  50. package/dist/terminal-render.worker.js +479 -165
  51. package/dist/terminal-render.worker.js.map +3 -3
  52. package/dist/workspace/Workspace.d.ts +7 -2
  53. package/dist/workspace/Workspace.d.ts.map +1 -1
  54. package/dist/workspace/Workspace.js +15 -7
  55. package/dist/workspace/Workspace.js.map +1 -1
  56. package/dist/workspace/index.d.ts +3 -0
  57. package/dist/workspace/index.d.ts.map +1 -1
  58. package/dist/workspace/index.js +2 -0
  59. package/dist/workspace/index.js.map +1 -1
  60. package/dist/workspace/themes.d.ts +4 -0
  61. package/dist/workspace/themes.d.ts.map +1 -1
  62. package/dist/workspace/themes.js +4 -0
  63. package/dist/workspace/themes.js.map +1 -1
  64. package/dist/workspace.css +1122 -5
  65. package/package.json +6 -5
@@ -0,0 +1,61 @@
1
+ import type { ConfigDiagnostic, ConfigDocument, ConfigDocumentValidation, ConfigSnapshot } from "@vibecook/ghosttea-protocol";
2
+ import type { GhostteaColorTheme } from "./catalog.js";
3
+ import type { TerminalShaderEffect } from "../renderers/types.js";
4
+ export interface GhostteaAppearanceUpdate {
5
+ /** Omitted when the user keeps a non-catalog/custom color configuration. */
6
+ theme?: GhostteaColorTheme;
7
+ backgroundOpacity: number;
8
+ backgroundOpacityCells: boolean;
9
+ shaderEffects: TerminalShaderEffect[];
10
+ shaderAnimation: boolean;
11
+ }
12
+ export interface GhostteaConfigEditorState {
13
+ document: ConfigDocument;
14
+ config: ConfigSnapshot;
15
+ }
16
+ export interface GhostteaConfigEditorValidation extends ConfigDocumentValidation {
17
+ /**
18
+ * Errors caused by the candidate overlay. Hosts may omit this for backwards
19
+ * compatibility, in which case every error remains blocking.
20
+ */
21
+ blockingErrors?: ConfigDiagnostic[];
22
+ }
23
+ export type GhostteaConfigEditorSaveResult = {
24
+ status: "saved";
25
+ document: ConfigDocument;
26
+ config: ConfigSnapshot;
27
+ } | {
28
+ status: "conflict";
29
+ document: ConfigDocument;
30
+ };
31
+ export type GhostteaConfigEditorImportResult = {
32
+ status: "selected";
33
+ name: string;
34
+ contents: string;
35
+ notice?: string;
36
+ } | {
37
+ status: "cancelled";
38
+ } | {
39
+ status: "unavailable";
40
+ message: string;
41
+ };
42
+ export type GhostteaConfigEditorExportResult = {
43
+ status: "saved";
44
+ path: string;
45
+ } | {
46
+ status: "cancelled";
47
+ };
48
+ /** Narrow host capability for editing only Ghosttea's profile-owned overlay. */
49
+ export interface GhostteaConfigEditorBridge {
50
+ load: () => Promise<GhostteaConfigEditorState>;
51
+ validate: (contents: string) => Promise<GhostteaConfigEditorValidation>;
52
+ save: (expectedRevision: string, contents: string) => Promise<GhostteaConfigEditorSaveResult>;
53
+ importGhostty: () => Promise<GhostteaConfigEditorImportResult>;
54
+ importFile: () => Promise<GhostteaConfigEditorImportResult>;
55
+ exportFile: (contents: string) => Promise<GhostteaConfigEditorExportResult>;
56
+ /** Open the owned overlay in a trusted external text editor. */
57
+ openExternal?: () => void;
58
+ /** Inform a native host that closing this renderer requires confirmation. */
59
+ setDirty?: (dirty: boolean) => void;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/appearance/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,OAAO,CAAC;IAChC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E;;;OAGG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,8BAA8B,GACtC;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;CACxB,GACD;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEN,MAAM,MAAM,gCAAgC,GACxC;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C,MAAM,MAAM,gCAAgC,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAE3G,gFAAgF;AAChF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACxE,IAAI,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC9F,aAAa,EAAE,MAAM,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC/D,UAAU,EAAE,MAAM,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC5E,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/appearance/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM3E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,CAS/F;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,eAAe,CAEnG;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAErE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAwB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAajG,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,CAY/F;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,eAAe,CAenG;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAErE"}
package/dist/config.js CHANGED
@@ -1,18 +1,37 @@
1
- function rgba(color) {
2
- return [color[0] / 255, color[1] / 255, color[2] / 255, 1];
1
+ function rgba(color, alpha = 1) {
2
+ return [color[0] / 255, color[1] / 255, color[2] / 255, alpha];
3
3
  }
4
+ const SHADER_EFFECTS = new Set([
5
+ "ghosttea:better-crt",
6
+ "ghosttea:crt",
7
+ "ghosttea:vhs",
8
+ "ghosttea:sparks-from-fire",
9
+ ]);
4
10
  export function terminalThemeFromConfig(config) {
5
11
  const renderer = config.renderer;
12
+ const backgroundOpacity = renderer.backgroundOpacity ?? 1;
6
13
  return {
7
- background: rgba(renderer.background),
14
+ background: rgba(renderer.background, backgroundOpacity),
8
15
  foreground: rgba(renderer.foreground),
9
16
  cursor: rgba(renderer.cursor),
17
+ cursorText: rgba(renderer.cursorText ?? renderer.background),
10
18
  selection: rgba(renderer.selectionBackground),
11
19
  selectionForeground: rgba(renderer.selectionForeground),
20
+ backgroundOpacityCells: renderer.backgroundOpacityCells ?? false,
12
21
  };
13
22
  }
14
23
  export function terminalEffectsFromConfig(config) {
15
- return { postProcess: config.renderer.postProcess };
24
+ const configured = config.renderer.shaderEffects?.filter((id) => SHADER_EFFECTS.has(id));
25
+ const shaderEffects = configured && configured.length > 0
26
+ ? configured
27
+ : config.renderer.postProcess === "better-crt"
28
+ ? ["ghosttea:better-crt"]
29
+ : [];
30
+ return {
31
+ postProcess: config.renderer.postProcess,
32
+ shaderEffects,
33
+ animate: config.renderer.customShaderAnimation ?? false,
34
+ };
16
35
  }
17
36
  /** Public alias useful to hosts that cache only the renderer projection. */
18
37
  export function rendererTheme(renderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,SAAS,IAAI,CAAC,KAAwC;IACpD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAwC;IAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7B,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAwC;IAChF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,QAAwB;IACpD,OAAO,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,SAAS,IAAI,CAAC,KAAwC,EAAE,KAAK,GAAG,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAuB;IACnD,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,2BAA2B;CAC5B,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,MAAwC;IAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC1D,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACxD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;QAC5D,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7C,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACvD,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB,IAAI,KAAK;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAwC;IAChF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,EAAE,EAA8B,EAAE,CAC1F,cAAc,CAAC,GAAG,CAAC,EAA0B,CAAC,CAC/C,CAAC;IACF,MAAM,aAAa,GACjB,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,YAAY;YAC5C,CAAC,CAAE,CAAC,qBAAqB,CAAW;YACpC,CAAC,CAAC,EAAE,CAAC;IACX,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;QACxC,aAAa;QACb,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,qBAAqB,IAAI,KAAK;KACxD,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,QAAwB;IACpD,OAAO,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export { GhostteaProvider, useGhostteaRuntime, type GhostteaProviderProps } from
2
2
  export { TerminalSurface, type TerminalMenuAction, type TerminalSurfaceProps } from "./TerminalSurface.js";
3
3
  export { rendererTheme, terminalEffectsFromConfig, terminalThemeFromConfig } from "./config.js";
4
4
  export { GhostteaTerminalRuntime, createGhostteaTerminalRuntime, waitForGhostteaRendererPorts, type GhostteaRendererPlatform, type GhostteaRendererPorts, type GhostteaTerminalRuntimeOptions, sessionIsFrozen, showsStaleScreen, type RemoteInputSuppression, type RemoteSessionRuntimeState, type SelectionScope, type TerminalMount, } from "./runtime.js";
5
- export { DEFAULT_THEME, type CellPoint, type CellSelection, type TerminalTheme } from "./renderers/types.js";
5
+ export { DEFAULT_EFFECTS, DEFAULT_THEME, type CellPoint, type CellSelection, type TerminalEffects, type TerminalShaderEffect, type TerminalTheme, } from "./renderers/types.js";
6
6
  export type { TerminalRenderMetrics, TerminalRenderPerformanceSnapshot } from "./performance.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,eAAe,EACf,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC7G,YAAY,EAAE,qBAAqB,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,eAAe,EACf,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,aAAa,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,qBAAqB,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -2,5 +2,5 @@ export { GhostteaProvider, useGhostteaRuntime } from "./context.js";
2
2
  export { TerminalSurface } from "./TerminalSurface.js";
3
3
  export { rendererTheme, terminalEffectsFromConfig, terminalThemeFromConfig } from "./config.js";
4
4
  export { GhostteaTerminalRuntime, createGhostteaTerminalRuntime, waitForGhostteaRendererPorts, sessionIsFrozen, showsStaleScreen, } from "./runtime.js";
5
- export { DEFAULT_THEME } from "./renderers/types.js";
5
+ export { DEFAULT_EFFECTS, DEFAULT_THEME, } from "./renderers/types.js";
6
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAA8B,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAsD,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAI5B,eAAe,EACf,gBAAgB,GAKjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAA0D,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAA8B,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAsD,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAI5B,eAAe,EACf,gBAAgB,GAKjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,aAAa,GAMd,MAAM,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-renderer.d.ts","sourceRoot":"","sources":["../../src/renderers/canvas-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAoBpB,qBAAa,sBAAuB,YAAW,gBAAgB;;IAC7D,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAIpC,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEvD;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAI/C;IAED,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAQxC;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS,CA8EtE;CACF"}
1
+ {"version":3,"file":"canvas-renderer.d.ts","sourceRoot":"","sources":["../../src/renderers/canvas-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAoBpB,qBAAa,sBAAuB,YAAW,gBAAgB;;IAC7D,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAIpC,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEvD;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAI/C;IAED,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAQxC;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS,CAsFtE;CACF"}
@@ -21,7 +21,7 @@ export class CanvasTerminalRenderer {
21
21
  this.#performanceMeasurementEnabled = enabled;
22
22
  }
23
23
  mount(id, canvas) {
24
- const context = canvas.getContext("2d", { alpha: false });
24
+ const context = canvas.getContext("2d", { alpha: true });
25
25
  if (!context)
26
26
  throw new Error("Canvas2D worker backend unavailable");
27
27
  this.#surfaces.set(id, { canvas, context, width: 1, height: 1, dpr: 1 });
@@ -45,6 +45,7 @@ export class CanvasTerminalRenderer {
45
45
  if (!surface)
46
46
  return;
47
47
  const { context, width, height, dpr } = surface;
48
+ context.clearRect(0, 0, surface.canvas.width, surface.canvas.height);
48
49
  context.save();
49
50
  context.setTransform(dpr, 0, 0, dpr, 0, 0);
50
51
  context.fillStyle = css(view.theme.background);
@@ -100,6 +101,13 @@ export class CanvasTerminalRenderer {
100
101
  }
101
102
  else {
102
103
  context.fillRect(x, y, CELL_WIDTH, LINE_HEIGHT);
104
+ context.save();
105
+ context.beginPath();
106
+ context.rect(x, y, CELL_WIDTH, LINE_HEIGHT);
107
+ context.clip();
108
+ context.fillStyle = css(view.theme.cursorText ?? view.theme.background);
109
+ context.fillText(view.rows[view.cursor.y] ?? "", ORIGIN_X, ORIGIN_Y + view.cursor.y * LINE_HEIGHT);
110
+ context.restore();
103
111
  }
104
112
  }
105
113
  context.restore();
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-renderer.js","sourceRoot":"","sources":["../../src/renderers/canvas-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-renderer.js","sourceRoot":"","sources":["../../src/renderers/canvas-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SHADER_EFFECT_WGSL: string;
2
+ //# sourceMappingURL=shader-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-effects.d.ts","sourceRoot":"","sources":["../../src/renderers/shader-effects.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,EAAE,MAyMhC,CAAC"}
@@ -0,0 +1,206 @@
1
+ // One pipeline serves the ordered effect registry. Each pass gets its own
2
+ // uniform buffer and samples the previous pass, allowing an arbitrary stack
3
+ // without recompiling pipelines or reading and writing the same texture.
4
+ export const SHADER_EFFECT_WGSL = /* wgsl */ `
5
+ @group(0) @binding(0) var terminal_image: texture_2d<f32>;
6
+ @group(0) @binding(1) var terminal_sampler: sampler;
7
+
8
+ struct EffectConfig {
9
+ mode: u32,
10
+ frame: u32,
11
+ effect_index: u32,
12
+ effect_count: u32,
13
+ resolution: vec2f,
14
+ time: f32,
15
+ time_delta: f32,
16
+ cursor: vec4f,
17
+ }
18
+ @group(0) @binding(2) var<uniform> effect: EffectConfig;
19
+
20
+ @vertex fn vertex_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
21
+ let positions = array<vec2f, 3>(
22
+ vec2f(-1.0, -1.0),
23
+ vec2f(3.0, -1.0),
24
+ vec2f(-1.0, 3.0),
25
+ );
26
+ return vec4f(positions[vertex_index], 0.0, 1.0);
27
+ }
28
+
29
+ fn sample_image(uv: vec2f) -> vec4f {
30
+ return textureSample(terminal_image, terminal_sampler, clamp(uv, vec2f(0.0), vec2f(1.0)));
31
+ }
32
+
33
+ fn straight_rgb(sampled: vec4f) -> vec3f {
34
+ if (sampled.a <= 0.00001) { return vec3f(0.0); }
35
+ return sampled.rgb / sampled.a;
36
+ }
37
+
38
+ fn premultiplied(rgb: vec3f, alpha: f32) -> vec4f {
39
+ return vec4f(max(rgb, vec3f(0.0)) * alpha, alpha);
40
+ }
41
+
42
+ fn hash21(p0: vec2f) -> f32 {
43
+ var p = fract(p0 * vec2f(443.8975, 397.2973));
44
+ p += dot(p, p.yx + vec2f(19.19));
45
+ return fract(p.x * p.y);
46
+ }
47
+
48
+ // Existing Better CRT compatibility port. Its source carries the upstream
49
+ // Shadertoy default CC BY-NC-SA terms; this mode preserves the already-bundled
50
+ // behavior while keeping alpha intact.
51
+ fn better_crt(position: vec2f, uv0: vec2f) -> vec4f {
52
+ var uv = uv0;
53
+ var dc = abs(vec2f(0.5) - uv);
54
+ dc *= dc;
55
+ uv.x = (uv.x - 0.5) * (1.0 + dc.y * 0.075) + 0.5;
56
+ uv.y = (uv.y - 0.5) * (1.0 + dc.x * 0.10) + 0.5;
57
+ let scanline = abs(sin(position.y) * 0.125);
58
+ let sampled = sample_image(uv);
59
+ return vec4f(sampled.rgb * (1.0 - scanline), sampled.a);
60
+ }
61
+
62
+ fn from_srgb1(value: f32) -> f32 {
63
+ return select(pow(value / 1.055 + 0.055 / 1.055, 2.4), value / 12.92, value <= 0.04045);
64
+ }
65
+
66
+ fn to_srgb1(value: f32) -> f32 {
67
+ return select(1.055 * pow(max(value, 0.0), 0.41666) - 0.055, value * 12.92, value < 0.0031308);
68
+ }
69
+
70
+ fn from_srgb(value: vec3f) -> vec3f {
71
+ return vec3f(from_srgb1(value.r), from_srgb1(value.g), from_srgb1(value.b));
72
+ }
73
+
74
+ fn to_srgb(value: vec3f) -> vec3f {
75
+ return vec3f(to_srgb1(value.r), to_srgb1(value.g), to_srgb1(value.b));
76
+ }
77
+
78
+ // WebGPU adaptation of Timothy Lottes' public-domain CRT scalar. The source
79
+ // port is Unlicensed/public domain. This retains its warp, scan blur, shadow
80
+ // mask, linear-light processing, and corner vignette in a compact GPU form.
81
+ fn public_domain_crt(position: vec2f, uv0: vec2f) -> vec4f {
82
+ let aspect = effect.resolution.x / max(1.0, effect.resolution.y);
83
+ var centered = uv0 * 2.0 - 1.0;
84
+ centered *= vec2f(
85
+ 1.0 + centered.y * centered.y / (50.0 * aspect),
86
+ 1.0 + centered.x * centered.x / 50.0,
87
+ );
88
+ let uv = centered * 0.5 + 0.5;
89
+ let pixel = 1.0 / effect.resolution;
90
+ let center_sample = sample_image(uv);
91
+ let left = from_srgb(straight_rgb(sample_image(uv - vec2f(pixel.x, 0.0))));
92
+ let center = from_srgb(straight_rgb(center_sample));
93
+ let right = from_srgb(straight_rgb(sample_image(uv + vec2f(pixel.x, 0.0))));
94
+ var color = left * 0.18 + center * 0.64 + right * 0.18;
95
+ let scan = 0.58 + 0.42 * pow(max(0.0, cos(position.y * 2.0943951)), 2.0);
96
+ let mask_index = u32(position.x + position.y * 3.0) % 6u;
97
+ var mask = vec3f(0.65);
98
+ if (mask_index < 2u) { mask.r = 1.0; }
99
+ else if (mask_index < 4u) { mask.g = 1.0; }
100
+ else { mask.b = 1.0; }
101
+ color *= scan * mask;
102
+ let vignette_axis = clamp(1.0 - centered * centered, vec2f(0.0), vec2f(1.0));
103
+ color *= mix(0.5, 1.0, vignette_axis.x * vignette_axis.y);
104
+ let peak = max(0.00001, max(color.r, max(color.g, color.b)));
105
+ let tone = peak / (peak * 0.72 + 0.28);
106
+ color *= tone / peak;
107
+ let inside = all(uv >= vec2f(0.0)) && all(uv <= vec2f(1.0));
108
+ let alpha = select(0.0, center_sample.a, inside);
109
+ return premultiplied(to_srgb(color), alpha);
110
+ }
111
+
112
+ // MIT-licensed VHS effect by Alex Brinsmead, adapted from the upstream GLSL
113
+ // to premultiplied WebGPU output.
114
+ fn vhs(position: vec2f, uv0: vec2f) -> vec4f {
115
+ let distortion = 1.0;
116
+ let tape_wear = 1.75;
117
+ let color_bleed = 2.0;
118
+ var cc = uv0 - 0.5;
119
+ var warped = clamp(uv0 + cc * (dot(cc, cc) * 0.02), vec2f(0.0), vec2f(1.0));
120
+ warped.x += (
121
+ sin(warped.y * 40.0 + effect.time * 0.5) * 0.000375 +
122
+ sin(warped.y * 80.0 + effect.time * 0.2) * 0.0001875 +
123
+ (hash21(vec2f(floor(position.y), floor(effect.time * 20.0))) - 0.5) * 0.0006
124
+ ) * distortion;
125
+ let tracking_y = fract(effect.time * 0.04);
126
+ let band_distance = min(abs(warped.y - tracking_y), 1.0 - abs(warped.y - tracking_y));
127
+ let band = smoothstep(0.05, 0.0, band_distance);
128
+ let horizontal_offset = band * (hash21(vec2f(floor(position.y * 0.5), effect.time * 3.0)) - 0.5) * 0.006;
129
+ let burst_cycle = floor(effect.time / 30.0);
130
+ let burst_start = hash21(vec2f(burst_cycle, 88.0)) * 25.0;
131
+ let burst_time = effect.time - floor(effect.time / 30.0) * 30.0;
132
+ let burst = burst_time > burst_start && burst_time < burst_start + 5.0;
133
+ let jump = select(0.0, (hash21(vec2f(floor(effect.time * 2.0), 11.3)) - 0.5) * 0.08, burst);
134
+ let sample_uv = fract(warped + vec2f(horizontal_offset, jump));
135
+ let aberration = (0.0003 + band * 0.0015) * color_bleed;
136
+ let center_sample = sample_image(sample_uv);
137
+ let red_sample = straight_rgb(sample_image(sample_uv + vec2f(aberration, 0.0)));
138
+ let blue_sample = straight_rgb(sample_image(sample_uv - vec2f(aberration, 0.0)));
139
+ var color = vec3f(red_sample.r, straight_rgb(center_sample).g, blue_sample.b);
140
+ let pixel = 1.0 / effect.resolution.x;
141
+ let neighbor = straight_rgb(sample_image(sample_uv + vec2f(pixel, 0.0))) * 0.4 +
142
+ straight_rgb(sample_image(sample_uv + vec2f(pixel * 3.0, 0.0))) * 0.6;
143
+ let luma_weights = vec3f(0.299, 0.587, 0.114);
144
+ let luma = dot(color, luma_weights);
145
+ color = vec3f(luma) + mix(color - vec3f(luma), neighbor - vec3f(dot(neighbor, luma_weights)), 0.5 * color_bleed);
146
+ color *= 1.8;
147
+ let grain_time = fract(effect.time);
148
+ let noise1 = hash21(position + vec2f(grain_time * 100.0)) - 0.5;
149
+ let noise2 = hash21(position + vec2f(grain_time * 200.0)) - 0.5;
150
+ let gray = dot(color, luma_weights);
151
+ color += (color - vec3f(gray)) * vec3f(noise1, noise2, -noise1) * 0.15 * tape_wear;
152
+ color += vec3f(noise1 * 0.05 * tape_wear);
153
+ color *= mix(vec3f(1.0), vec3f(1.03, 1.01, 0.96), tape_wear);
154
+ let vignette = uv0 * (1.0 - uv0);
155
+ color *= mix(1.0, clamp(vignette.x * vignette.y * 15.0, 0.0, 1.0), 0.35);
156
+ let static_time = fract(effect.time * 20.0);
157
+ let static_hash = hash21(vec2f(floor(position.x / 10.0), floor(position.y / 2.0) + static_time * 500.0) + vec2f(static_time * 77.0));
158
+ color = mix(color, vec3f(1.0), step(0.9991, static_hash) * 0.135);
159
+ return premultiplied(color, center_sample.a);
160
+ }
161
+
162
+ // Ember overlay inspired by Jan Mróz's CC BY 3.0 shader, adapted for the
163
+ // Ghostty pipeline. Attribution is retained in THIRD_PARTY_NOTICES.md.
164
+ fn sparks(position: vec2f, uv: vec2f) -> vec4f {
165
+ let terminal = sample_image(uv);
166
+ var spark = vec3f(0.0);
167
+ var spark_alpha = 0.0;
168
+ for (var layer = 0u; layer < 8u; layer += 1u) {
169
+ let layer_value = f32(layer);
170
+ let scale = 18.0 + layer_value * 7.0;
171
+ let drift = vec2f(effect.time * (0.35 + layer_value * 0.025), -effect.time * (0.7 + layer_value * 0.05));
172
+ let grid = uv * vec2f(scale, scale * 1.6) + drift;
173
+ let cell = floor(grid);
174
+ let random = hash21(cell + vec2f(layer_value * 13.7, layer_value * 5.1));
175
+ let local = fract(grid) - vec2f(random, fract(random * 17.17));
176
+ let radius = 0.018 + 0.045 * hash21(cell + vec2f(31.0));
177
+ let intensity = smoothstep(radius, 0.0, length(local)) * step(0.79, random);
178
+ let flicker = 0.55 + 0.45 * sin(effect.time * (5.0 + random * 4.0) + random * 31.0);
179
+ let value = intensity * flicker;
180
+ spark += vec3f(1.5, 0.42, 0.05) * value;
181
+ spark_alpha = max(spark_alpha, value * 0.78);
182
+ }
183
+ let terminal_rgb = straight_rgb(terminal);
184
+ let background_weight = 1.0 - smoothstep(0.12, 0.55, dot(terminal_rgb, vec3f(0.2126, 0.7152, 0.0722)));
185
+ let overlay_alpha = spark_alpha * background_weight;
186
+ let alpha = overlay_alpha + terminal.a * (1.0 - overlay_alpha);
187
+ let rgb = select(
188
+ vec3f(0.0),
189
+ (spark * overlay_alpha + terminal_rgb * terminal.a * (1.0 - overlay_alpha)) / max(alpha, 0.00001),
190
+ alpha > 0.00001,
191
+ );
192
+ return premultiplied(rgb, alpha);
193
+ }
194
+
195
+ @fragment fn fragment_main(@builtin(position) position: vec4f) -> @location(0) vec4f {
196
+ let uv = position.xy / effect.resolution;
197
+ switch effect.mode {
198
+ case 1u: { return better_crt(position.xy, uv); }
199
+ case 2u: { return public_domain_crt(position.xy, uv); }
200
+ case 3u: { return vhs(position.xy, uv); }
201
+ case 4u: { return sparks(position.xy, uv); }
202
+ default: { return sample_image(uv); }
203
+ }
204
+ }
205
+ `;
206
+ //# sourceMappingURL=shader-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-effects.js","sourceRoot":"","sources":["../../src/renderers/shader-effects.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAW,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyMpD,CAAC"}
@@ -5,13 +5,20 @@ export interface TerminalTheme {
5
5
  background: Rgba;
6
6
  foreground: Rgba;
7
7
  cursor: Rgba;
8
+ cursorText?: Rgba;
8
9
  selection: Rgba;
9
10
  selectionForeground: Rgba;
11
+ /** Apply the window background alpha to explicit cell backgrounds too. */
12
+ backgroundOpacityCells?: boolean;
10
13
  }
11
14
  export type TerminalPostProcess = "none" | "better-crt";
15
+ export type TerminalShaderEffect = "ghosttea:better-crt" | "ghosttea:crt" | "ghosttea:vhs" | "ghosttea:sparks-from-fire";
12
16
  export interface TerminalEffects {
13
17
  postProcess: TerminalPostProcess;
18
+ shaderEffects?: readonly TerminalShaderEffect[];
19
+ animate?: boolean;
14
20
  }
21
+ export declare function terminalEffectsNeedAnimation(effects: TerminalEffects): boolean;
15
22
  export interface CellPoint {
16
23
  column: number;
17
24
  row: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  import { CursorStyle, } from "@vibecook/ghosttea-frame";
2
+ const ANIMATED_SHADER_EFFECTS = new Set([
3
+ "ghosttea:vhs",
4
+ "ghosttea:sparks-from-fire",
5
+ ]);
6
+ export function terminalEffectsNeedAnimation(effects) {
7
+ return (effects.animate === true && (effects.shaderEffects?.some((effect) => ANIMATED_SHADER_EFFECTS.has(effect)) ?? false));
8
+ }
2
9
  export function effectiveCursorStyle(view) {
3
10
  if (!view.cursor.visible)
4
11
  return null;
@@ -20,11 +27,15 @@ export const DEFAULT_THEME = {
20
27
  background: [40 / 255, 44 / 255, 52 / 255, 1],
21
28
  foreground: [1, 1, 1, 1],
22
29
  cursor: [1, 1, 1, 1],
30
+ cursorText: [40 / 255, 44 / 255, 52 / 255, 1],
23
31
  selection: [1, 1, 1, 1],
24
32
  selectionForeground: [40 / 255, 44 / 255, 52 / 255, 1],
33
+ backgroundOpacityCells: false,
25
34
  };
26
35
  export const DEFAULT_EFFECTS = {
27
36
  postProcess: "none",
37
+ shaderEffects: [],
38
+ animate: false,
28
39
  };
29
40
  export const CELL_WIDTH = 7.83;
30
41
  export const LINE_HEIGHT = 19;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAMZ,MAAM,0BAA0B,CAAC;AAqDlC,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,WAAW,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3B,CAAC;AAQD,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAkB,EAAE,IAAe;IACrE,OAAO,CACL,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;QACxB,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;QACnF,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CACtF,CAAC;AACJ,CAAC;AAaD,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,UAAU,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,mBAAmB,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,wEAAwE;AACxE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAMZ,MAAM,0BAA0B,CAAC;AA0BlC,MAAM,uBAAuB,GAAsC,IAAI,GAAG,CAAC;IACzE,cAAc;IACd,2BAA2B;CAC5B,CAAC,CAAC;AAEH,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,OAAO,CACL,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CACpH,CAAC;AACJ,CAAC;AAoCD,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,WAAW,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3B,CAAC;AAQD,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAkB,EAAE,IAAe;IACrE,OAAO,CACL,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;QACxB,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;QACnF,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CACtF,CAAC;AACJ,CAAC;AAaD,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,UAAU,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,UAAU,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,mBAAmB,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACtD,sBAAsB,EAAE,KAAK;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,WAAW,EAAE,MAAM;IACnB,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,wEAAwE;AACxE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
- import type { TerminalRenderMetrics } from "../performance.js";
1
+ import { type TerminalRenderMetrics } from "../performance.js";
2
2
  import { type PixelSize, type RenderView, type TerminalRenderer } from "./types.js";
3
+ export declare function effectIntermediateTextureCount(effectPassCount: number): number;
3
4
  export interface SpecialDrawingCells {
4
5
  box: Map<number, string>;
5
6
  block: Map<number, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-renderer.d.ts","sourceRoot":"","sources":["../../src/renderers/webgpu-renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AA6uBpB,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAgCrE;AA6MD,qBAAa,sBAAuB,YAAW,gBAAgB;;IAe3D,QAAQ,CAAC,MAAM,EAAE,SAAS;IAC1B,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAfnC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAalC,OAAO,eA2IN;IAED,OAAa,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAY9F;IAED,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEvD;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA8B/C;IAED,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAaxB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CASxC;IAmCD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS,CAoBtE;IAED,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA2B9G;IA83BD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtB;IAED,OAAO,IAAI,IAAI,CAMd;CACF"}
1
+ {"version":3,"file":"webgpu-renderer.d.ts","sourceRoot":"","sources":["../../src/renderers/webgpu-renderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,UAAU,EAEf,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAgBpB,wBAAgB,8BAA8B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAE9E;AA2sBD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAgCrE;AA8OD,qBAAa,sBAAuB,YAAW,gBAAgB;;IAgB3D,QAAQ,CAAC,MAAM,EAAE,SAAS;IAC1B,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAhBnC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAclC,OAAO,eAoKN;IAED,OAAa,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAY9F;IAED,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEvD;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA2B/C;IAED,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAcxB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CASxC;IA+ID,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS,CAWtE;IAED,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAiB9G;IAg3BD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtB;IAED,OAAO,IAAI,IAAI,CAMd;CACF"}