@vibecook/ghosttea-react 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/appearance/AdvancedConfigSettings.d.ts +12 -0
- package/dist/appearance/AdvancedConfigSettings.d.ts.map +1 -0
- package/dist/appearance/AdvancedConfigSettings.js +362 -0
- package/dist/appearance/AdvancedConfigSettings.js.map +1 -0
- package/dist/appearance/AppearanceSettings.d.ts +21 -0
- package/dist/appearance/AppearanceSettings.d.ts.map +1 -0
- package/dist/appearance/AppearanceSettings.js +175 -0
- package/dist/appearance/AppearanceSettings.js.map +1 -0
- package/dist/appearance/catalog.d.ts +39 -0
- package/dist/appearance/catalog.d.ts.map +1 -0
- package/dist/appearance/catalog.js +56 -0
- package/dist/appearance/catalog.js.map +1 -0
- package/dist/appearance/config-draft.d.ts +35 -0
- package/dist/appearance/config-draft.d.ts.map +1 -0
- package/dist/appearance/config-draft.js +289 -0
- package/dist/appearance/config-draft.js.map +1 -0
- package/dist/appearance/shaders.d.ts +14 -0
- package/dist/appearance/shaders.d.ts.map +1 -0
- package/dist/appearance/shaders.js +71 -0
- package/dist/appearance/shaders.js.map +1 -0
- package/dist/appearance/theme-catalog.generated.json +16260 -0
- package/dist/appearance/types.d.ts +61 -0
- package/dist/appearance/types.d.ts.map +1 -0
- package/dist/appearance/types.js +2 -0
- package/dist/appearance/types.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -4
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/renderers/canvas-renderer.d.ts.map +1 -1
- package/dist/renderers/canvas-renderer.js +9 -1
- package/dist/renderers/canvas-renderer.js.map +1 -1
- package/dist/renderers/shader-effects.d.ts +2 -0
- package/dist/renderers/shader-effects.d.ts.map +1 -0
- package/dist/renderers/shader-effects.js +206 -0
- package/dist/renderers/shader-effects.js.map +1 -0
- package/dist/renderers/types.d.ts +7 -0
- package/dist/renderers/types.d.ts.map +1 -1
- package/dist/renderers/types.js +11 -0
- package/dist/renderers/types.js.map +1 -1
- package/dist/renderers/webgpu-renderer.d.ts +2 -1
- package/dist/renderers/webgpu-renderer.d.ts.map +1 -1
- package/dist/renderers/webgpu-renderer.js +250 -159
- package/dist/renderers/webgpu-renderer.js.map +1 -1
- package/dist/terminal-render.worker.js +479 -165
- package/dist/terminal-render.worker.js.map +3 -3
- package/dist/workspace/Workspace.d.ts +23 -4
- package/dist/workspace/Workspace.d.ts.map +1 -1
- package/dist/workspace/Workspace.js +30 -8
- package/dist/workspace/Workspace.js.map +1 -1
- package/dist/workspace/index.d.ts +3 -0
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +2 -0
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/themes.d.ts +4 -0
- package/dist/workspace/themes.d.ts.map +1 -1
- package/dist/workspace/themes.js +4 -0
- package/dist/workspace/themes.js.map +1 -1
- package/dist/workspace.css +1122 -5
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/appearance/types.ts"],"names":[],"mappings":""}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
+
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
|
-
|
|
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) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,SAAS,IAAI,CAAC,KAAwC;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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,
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAA8B,MAAM,mBAAmB,CAAC;AACnF,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,GAMpB,MAAM,YAAY,CAAC;AAOpB,SAAS,GAAG,CAAC,KAAW;IACtB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IACxC,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAC3G,CAAC;AAED,SAAS,OAAO,CAAC,SAAkC;IACjD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IACpC,OAAO,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1F,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,sBAAsB;IACxB,IAAI,GAAG,UAAmB,CAAC;IAC3B,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IACtD,8BAA8B,GAAG,KAAK,CAAC;IAEvC,gCAAgC,CAAC,OAAgB;QAC/C,IAAI,CAAC,8BAA8B,GAAG,OAAO,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,EAAU,EAAE,MAAuB;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"canvas-renderer.js","sourceRoot":"","sources":["../../src/renderers/canvas-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,mBAAmB,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"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"}
|
package/dist/renderers/types.js
CHANGED
|
@@ -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;
|
|
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
|
|
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,
|
|
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"}
|