@knpkv/herdr-connect 0.2.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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/activity-store.d.ts +11 -0
  4. package/dist/activity-store.d.ts.map +1 -0
  5. package/dist/activity-store.js +76 -0
  6. package/dist/activity-store.js.map +1 -0
  7. package/dist/client-entry.d.ts +2 -0
  8. package/dist/client-entry.d.ts.map +1 -0
  9. package/dist/client-entry.js +11 -0
  10. package/dist/client-entry.js.map +1 -0
  11. package/dist/client.d.ts +86 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +453 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/directory.d.ts +159 -0
  16. package/dist/directory.d.ts.map +1 -0
  17. package/dist/directory.js +186 -0
  18. package/dist/directory.js.map +1 -0
  19. package/dist/errors.d.ts +62 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +36 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/forest.d.ts +61 -0
  24. package/dist/forest.d.ts.map +1 -0
  25. package/dist/forest.js +90 -0
  26. package/dist/forest.js.map +1 -0
  27. package/dist/id.d.ts +4 -0
  28. package/dist/id.d.ts.map +1 -0
  29. package/dist/id.js +10 -0
  30. package/dist/id.js.map +1 -0
  31. package/dist/index.d.ts +13 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +13 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/internal/terminal-release.d.ts +6 -0
  36. package/dist/internal/terminal-release.d.ts.map +1 -0
  37. package/dist/internal/terminal-release.js +13 -0
  38. package/dist/internal/terminal-release.js.map +1 -0
  39. package/dist/keyboard.d.ts +2 -0
  40. package/dist/keyboard.d.ts.map +1 -0
  41. package/dist/keyboard.js +19 -0
  42. package/dist/keyboard.js.map +1 -0
  43. package/dist/model.d.ts +144 -0
  44. package/dist/model.d.ts.map +1 -0
  45. package/dist/model.js +104 -0
  46. package/dist/model.js.map +1 -0
  47. package/dist/relationship-store.d.ts +66 -0
  48. package/dist/relationship-store.d.ts.map +1 -0
  49. package/dist/relationship-store.js +246 -0
  50. package/dist/relationship-store.js.map +1 -0
  51. package/dist/target.d.ts +83 -0
  52. package/dist/target.d.ts.map +1 -0
  53. package/dist/target.js +56 -0
  54. package/dist/target.js.map +1 -0
  55. package/dist/terminal-input.d.ts +30 -0
  56. package/dist/terminal-input.d.ts.map +1 -0
  57. package/dist/terminal-input.js +95 -0
  58. package/dist/terminal-input.js.map +1 -0
  59. package/dist/terminal-setup.d.ts +10 -0
  60. package/dist/terminal-setup.d.ts.map +1 -0
  61. package/dist/terminal-setup.js +11 -0
  62. package/dist/terminal-setup.js.map +1 -0
  63. package/dist/terminal-theme.d.ts +3 -0
  64. package/dist/terminal-theme.d.ts.map +1 -0
  65. package/dist/terminal-theme.js +3 -0
  66. package/dist/terminal-theme.js.map +1 -0
  67. package/dist/terminal-viewport.d.ts +12 -0
  68. package/dist/terminal-viewport.d.ts.map +1 -0
  69. package/dist/terminal-viewport.js +21 -0
  70. package/dist/terminal-viewport.js.map +1 -0
  71. package/dist/terminal.d.ts +794 -0
  72. package/dist/terminal.d.ts.map +1 -0
  73. package/dist/terminal.js +166 -0
  74. package/dist/terminal.js.map +1 -0
  75. package/dist/view.d.ts +51 -0
  76. package/dist/view.d.ts.map +1 -0
  77. package/dist/view.js +210 -0
  78. package/dist/view.js.map +1 -0
  79. package/package.json +84 -0
  80. package/src/styles.css +527 -0
@@ -0,0 +1,83 @@
1
+ import { Effect } from "effect";
2
+ import { ConnectTargetError } from "./errors.js";
3
+ import { ConnectAgent } from "./model.js";
4
+ export declare const resolveConnectTarget: (search: string, agents: readonly {
5
+ readonly id: string;
6
+ readonly host: string;
7
+ readonly name: string;
8
+ readonly kind: string;
9
+ readonly state: string;
10
+ readonly work: string;
11
+ readonly lastActivityAt: number;
12
+ readonly relationship?: {
13
+ readonly parentAgentId: string;
14
+ readonly relation: "delegated" | "pair" | "review";
15
+ };
16
+ }[]) => Effect.Effect<{
17
+ readonly id: string;
18
+ readonly host: string;
19
+ readonly name: string;
20
+ readonly kind: string;
21
+ readonly state: string;
22
+ readonly work: string;
23
+ readonly lastActivityAt: number;
24
+ readonly relationship?: {
25
+ readonly parentAgentId: string;
26
+ readonly relation: "delegated" | "pair" | "review";
27
+ };
28
+ } | null, ConnectTargetError, never>;
29
+ export type ConnectPreferenceResolution = {
30
+ readonly _tag: "resolved";
31
+ readonly target: ConnectAgent | null;
32
+ } | {
33
+ readonly _tag: "retry";
34
+ readonly reason: "unknown";
35
+ } | {
36
+ readonly _tag: "rejected";
37
+ readonly reason: "malformed";
38
+ };
39
+ export type RememberedConnectPreference = {
40
+ readonly _tag: "available";
41
+ readonly key: string | null;
42
+ } | {
43
+ readonly _tag: "unavailable";
44
+ };
45
+ export type ConnectPreferenceDecision = {
46
+ readonly _tag: "connect";
47
+ readonly target: ConnectAgent;
48
+ } | {
49
+ readonly _tag: "retry";
50
+ readonly error: "connect_target.unknown";
51
+ readonly key: string | null;
52
+ } | {
53
+ readonly _tag: "select";
54
+ readonly error: "connect_target.malformed" | null;
55
+ readonly key: string | null;
56
+ };
57
+ export declare const resolveConnectPreference: (search: string, agents: readonly {
58
+ readonly id: string;
59
+ readonly host: string;
60
+ readonly name: string;
61
+ readonly kind: string;
62
+ readonly state: string;
63
+ readonly work: string;
64
+ readonly lastActivityAt: number;
65
+ readonly relationship?: {
66
+ readonly parentAgentId: string;
67
+ readonly relation: "delegated" | "pair" | "review";
68
+ };
69
+ }[]) => Effect.Effect<ConnectPreferenceResolution, never, never>;
70
+ export declare const resolveConnectPreferenceDecision: (search: string, agents: readonly {
71
+ readonly id: string;
72
+ readonly host: string;
73
+ readonly name: string;
74
+ readonly kind: string;
75
+ readonly state: string;
76
+ readonly work: string;
77
+ readonly lastActivityAt: number;
78
+ readonly relationship?: {
79
+ readonly parentAgentId: string;
80
+ readonly relation: "delegated" | "pair" | "review";
81
+ };
82
+ }[], remembered: RememberedConnectPreference) => Effect.Effect<ConnectPreferenceDecision, never, never>;
83
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAOzC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;oCAyB/B,CAAA;AAEF,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAA;AAEpC,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAE/G,eAAO,MAAM,wBAAwB;;;;;;;;;;;;gEAenC,CAAA;AAyBF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;uGAQ3C,CAAA"}
package/dist/target.js ADDED
@@ -0,0 +1,56 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { ConnectTargetError } from "./errors.js";
3
+ import { ConnectAgent } from "./model.js";
4
+ const ConnectTarget = Schema.Struct({
5
+ agent: ConnectAgent.fields.id,
6
+ host: ConnectAgent.fields.host
7
+ });
8
+ export const resolveConnectTarget = Effect.fn("HerdrConnect.resolveTarget")(function* (search, agents) {
9
+ const parameters = new URLSearchParams(search);
10
+ const agent = parameters.getAll("agent");
11
+ const host = parameters.getAll("host");
12
+ if (agent.length === 0 && host.length === 0)
13
+ return null;
14
+ if (agent.length !== 1 || host.length !== 1) {
15
+ return yield* new ConnectTargetError({ reason: "malformed" });
16
+ }
17
+ const target = yield* Schema.decodeUnknownEffect(ConnectTarget)({
18
+ agent: agent[0],
19
+ host: host[0]
20
+ }).pipe(Effect.mapError(() => new ConnectTargetError({ reason: "malformed" })));
21
+ const selected = agents.find((candidate) => candidate.id === target.agent &&
22
+ candidate.host.toLowerCase() === target.host.toLowerCase());
23
+ return yield* selected === undefined
24
+ ? new ConnectTargetError({ reason: "unknown" })
25
+ : Effect.succeed(selected);
26
+ });
27
+ export const resolveConnectPreference = Effect.fn("HerdrConnect.resolvePreference")(function* (search, agents) {
28
+ return yield* resolveConnectTarget(search, agents).pipe(Effect.map((target) => ({ _tag: "resolved", target })), Effect.catchTag("ConnectTargetError", (error) => Effect.succeed(error.reason === "unknown"
29
+ ? { _tag: "retry", reason: error.reason }
30
+ : { _tag: "rejected", reason: error.reason })));
31
+ });
32
+ const connectPreferenceDecision = (resolution, rememberedKey) => {
33
+ if (resolution._tag === "retry") {
34
+ return {
35
+ _tag: "retry",
36
+ error: "connect_target.unknown",
37
+ key: rememberedKey
38
+ };
39
+ }
40
+ if (resolution._tag === "rejected") {
41
+ return {
42
+ _tag: "select",
43
+ error: "connect_target.malformed",
44
+ key: rememberedKey
45
+ };
46
+ }
47
+ return resolution.target === null
48
+ ? { _tag: "select", error: null, key: rememberedKey }
49
+ : { _tag: "connect", target: resolution.target };
50
+ };
51
+ export const resolveConnectPreferenceDecision = Effect.fn("HerdrConnect.resolvePreferenceDecision")(function* (search, agents, remembered) {
52
+ const rememberedKey = remembered._tag === "available" ? remembered.key : null;
53
+ const resolution = yield* resolveConnectPreference(search, agents);
54
+ return connectPreferenceDecision(resolution, rememberedKey);
55
+ });
56
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TerminalClientCommand } from "./model.js";
2
+ type TerminalScrollCommand = Extract<TerminalClientCommand, {
3
+ readonly type: "terminal.scroll";
4
+ }>;
5
+ type WheelDelta = {
6
+ readonly deltaMode: number;
7
+ readonly deltaY: number;
8
+ };
9
+ export declare const wheelScrollCommand: (delta: WheelDelta, rows: number) => TerminalScrollCommand | null;
10
+ export declare const pageScrollCommand: (key: string, rows: number) => TerminalScrollCommand | null;
11
+ type TouchScrollGestureOptions = {
12
+ readonly blur: () => void;
13
+ readonly rows: () => number;
14
+ readonly send: (command: TerminalScrollCommand) => void;
15
+ };
16
+ export type TouchScrollGesture = {
17
+ readonly cancel: () => void;
18
+ readonly end: () => boolean;
19
+ readonly move: (y: number) => boolean;
20
+ readonly start: (y: number) => void;
21
+ };
22
+ export declare const makeTouchScrollGesture: ({ blur, rows, send }: TouchScrollGestureOptions) => TouchScrollGesture;
23
+ export type PendingTerminalInput = {
24
+ readonly clear: () => void;
25
+ readonly drain: () => string;
26
+ readonly push: (text: string) => "overflow" | "queued";
27
+ };
28
+ export declare const makePendingTerminalInput: (maximumLength?: number) => PendingTerminalInput;
29
+ export {};
30
+ //# sourceMappingURL=terminal-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-input.d.ts","sourceRoot":"","sources":["../src/terminal-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,KAAK,qBAAqB,GAAG,OAAO,CAClC,qBAAqB,EACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CACrC,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,kBAAkB,UACtB,UAAU,QACX,MAAM,KACX,qBAAqB,GAAG,IAe1B,CAAA;AAED,eAAO,MAAM,iBAAiB,QACvB,MAAM,QACL,MAAM,KACX,qBAAqB,GAAG,IAS1B,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,sBAAsB,yBAIhC,yBAAyB,KAAG,kBA6C9B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,QAAQ,CAAA;CACvD,CAAA;AAED,eAAO,MAAM,wBAAwB,8BAElC,oBAiBF,CAAA"}
@@ -0,0 +1,95 @@
1
+ const maximumScrollLines = 400;
2
+ const boundedLines = (lines) => Math.min(maximumScrollLines, Math.max(1, Math.round(lines)));
3
+ export const wheelScrollCommand = (delta, rows) => {
4
+ if (!Number.isFinite(delta.deltaY) || delta.deltaY === 0)
5
+ return null;
6
+ const absolute = Math.abs(delta.deltaY);
7
+ const lines = delta.deltaMode === 1
8
+ ? absolute
9
+ : delta.deltaMode === 2
10
+ ? absolute * rows
11
+ : absolute / 20;
12
+ return {
13
+ type: "terminal.scroll",
14
+ direction: delta.deltaY < 0 ? "up" : "down",
15
+ lines: boundedLines(lines),
16
+ source: "wheel",
17
+ modifiers: 0
18
+ };
19
+ };
20
+ export const pageScrollCommand = (key, rows) => {
21
+ if (key !== "PageUp" && key !== "PageDown")
22
+ return null;
23
+ return {
24
+ type: "terminal.scroll",
25
+ direction: key === "PageUp" ? "up" : "down",
26
+ lines: boundedLines(rows),
27
+ source: "page_key",
28
+ modifiers: 0
29
+ };
30
+ };
31
+ export const makeTouchScrollGesture = ({ blur, rows, send }) => {
32
+ let previousY = null;
33
+ let pendingDelta = 0;
34
+ let travel = 0;
35
+ let scrolled = false;
36
+ const reset = () => {
37
+ previousY = null;
38
+ pendingDelta = 0;
39
+ travel = 0;
40
+ scrolled = false;
41
+ };
42
+ return {
43
+ cancel: reset,
44
+ end: () => {
45
+ const shouldCancelActivation = scrolled;
46
+ reset();
47
+ return shouldCancelActivation;
48
+ },
49
+ move: (y) => {
50
+ if (previousY === null)
51
+ return false;
52
+ const delta = previousY - y;
53
+ previousY = y;
54
+ pendingDelta += delta;
55
+ travel += Math.abs(delta);
56
+ if (!scrolled && travel >= 8) {
57
+ scrolled = true;
58
+ blur();
59
+ }
60
+ if (Math.abs(pendingDelta) >= 20) {
61
+ const command = wheelScrollCommand({ deltaMode: 0, deltaY: pendingDelta }, rows());
62
+ pendingDelta = 0;
63
+ if (command !== null)
64
+ send(command);
65
+ }
66
+ return scrolled;
67
+ },
68
+ start: (y) => {
69
+ previousY = y;
70
+ pendingDelta = 0;
71
+ travel = 0;
72
+ scrolled = false;
73
+ }
74
+ };
75
+ };
76
+ export const makePendingTerminalInput = (maximumLength = 65_536) => {
77
+ let pending = "";
78
+ return {
79
+ clear: () => {
80
+ pending = "";
81
+ },
82
+ drain: () => {
83
+ const value = pending;
84
+ pending = "";
85
+ return value;
86
+ },
87
+ push: (text) => {
88
+ if (pending.length + text.length > maximumLength)
89
+ return "overflow";
90
+ pending += text;
91
+ return "queued";
92
+ }
93
+ };
94
+ };
95
+ //# sourceMappingURL=terminal-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-input.js","sourceRoot":"","sources":["../src/terminal-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Effect, Schema } from "effect";
2
+ declare const ConnectTerminalSetupError_base: Schema.Class<ConnectTerminalSetupError, Schema.TaggedStruct<"ConnectTerminalSetupError", {
3
+ readonly cause: Schema.Defect;
4
+ readonly detail: Schema.String;
5
+ }>, import("effect/Cause").YieldableError>;
6
+ export declare class ConnectTerminalSetupError extends ConnectTerminalSetupError_base {
7
+ }
8
+ export declare const acquireTerminalSetup: <Terminal>(setup: () => Terminal, dispose: (terminal: Terminal) => void) => Effect.Effect<Terminal, ConnectTerminalSetupError, import("effect/Scope").Scope>;
9
+ export {};
10
+ //# sourceMappingURL=terminal-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-setup.d.ts","sourceRoot":"","sources":["../src/terminal-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;;AAEvC,qBAAa,yBAA0B,SAAQ,8BAG9C;CAAG;AAEJ,eAAO,MAAM,oBAAoB,GAAI,QAAQ,SACpC,MAAM,QAAQ,WACZ,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,qFAYpC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Effect, Schema } from "effect";
2
+ export class ConnectTerminalSetupError extends Schema.TaggedError()("ConnectTerminalSetupError", { cause: Schema.Defect(), detail: Schema.String }) {
3
+ }
4
+ export const acquireTerminalSetup = (setup, dispose) => Effect.acquireRelease(Effect.try({
5
+ try: setup,
6
+ catch: (cause) => new ConnectTerminalSetupError({
7
+ cause,
8
+ detail: "Ghostty Web terminal setup failed"
9
+ })
10
+ }), (terminal) => Effect.sync(() => dispose(terminal)));
11
+ //# sourceMappingURL=terminal-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-setup.js","sourceRoot":"","sources":["../src/terminal-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvC,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,WAAW,EAA6B,CAC5F,2BAA2B,EAC3B,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAClD;CAAG;AAEJ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAqB,EACrB,OAAqC,EACrC,EAAE,CACF,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,yBAAyB,CAAC;QAC5B,KAAK;QACL,MAAM,EAAE,mCAAmC;KAC5C,CAAC;CACL,CAAC,EACF,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnD,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Terminal canvas color aligned with the Rly dark surface-1 token. */
2
+ export declare const terminalBackground = "#17181c";
3
+ //# sourceMappingURL=terminal-theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-theme.d.ts","sourceRoot":"","sources":["../src/terminal-theme.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Terminal canvas color aligned with the Rly dark surface-1 token. */
2
+ export const terminalBackground = "#17181c";
3
+ //# sourceMappingURL=terminal-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-theme.js","sourceRoot":"","sources":["../src/terminal-theme.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA"}
@@ -0,0 +1,12 @@
1
+ export interface TerminalViewportTarget {
2
+ readonly style: Pick<CSSStyleDeclaration, "removeProperty" | "setProperty">;
3
+ }
4
+ export interface TerminalVisualViewport extends EventTarget {
5
+ readonly height: number;
6
+ readonly offsetTop: number;
7
+ }
8
+ export interface TerminalViewportHost {
9
+ readonly visualViewport?: TerminalVisualViewport | null;
10
+ }
11
+ export declare const bindTerminalViewport: (target: TerminalViewportTarget, host: TerminalViewportHost) => () => void;
12
+ //# sourceMappingURL=terminal-viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-viewport.d.ts","sourceRoot":"","sources":["../src/terminal-viewport.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,aAAa,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACxD;AAKD,eAAO,MAAM,oBAAoB,WACvB,sBAAsB,QACxB,oBAAoB,KACzB,MAAM,IAmBR,CAAA"}
@@ -0,0 +1,21 @@
1
+ const viewportHeightProperty = "--connect-visual-viewport-height";
2
+ const viewportOffsetProperty = "--connect-visual-viewport-offset";
3
+ export const bindTerminalViewport = (target, host) => {
4
+ const viewport = host.visualViewport;
5
+ if (viewport === undefined || viewport === null)
6
+ return () => undefined;
7
+ const update = () => {
8
+ target.style.setProperty(viewportHeightProperty, `${String(Math.max(0, viewport.height))}px`);
9
+ target.style.setProperty(viewportOffsetProperty, `${String(Math.max(0, viewport.offsetTop))}px`);
10
+ };
11
+ viewport.addEventListener("resize", update);
12
+ viewport.addEventListener("scroll", update);
13
+ update();
14
+ return () => {
15
+ viewport.removeEventListener("resize", update);
16
+ viewport.removeEventListener("scroll", update);
17
+ target.style.removeProperty(viewportHeightProperty);
18
+ target.style.removeProperty(viewportOffsetProperty);
19
+ };
20
+ };
21
+ //# sourceMappingURL=terminal-viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-viewport.js","sourceRoot":"","sources":["../src/terminal-viewport.ts"],"names":[],"mappings":"AAaA,MAAM,sBAAsB,GAAG,kCAAkC,CAAA;AACjE,MAAM,sBAAsB,GAAG,kCAAkC,CAAA;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA8B,EAC9B,IAA0B,EACd,EAAE;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAA;IACpC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAA;IAEvE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;QAC7F,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAA;IAClG,CAAC,CAAA;IAED,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAA;IAER,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC9C,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAA;QACnD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAA;IACrD,CAAC,CAAA;AACH,CAAC,CAAA"}