@getorrery/ui 0.0.0-stage → 0.2.2

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.
@@ -0,0 +1,2034 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ElementRef, EnvironmentProviders, Signal } from "@angular/core";
3
+ import { SyntaxToken } from "@getorrery/styles/syntax";
4
+ import * as monacoApi from "monaco-editor";
5
+ import { KjDialogRef } from "@kouji-ui/core";
6
+ /** Every glyph: the inner markup of a 24×24 stroked SVG. */
7
+ export declare const ICONS: Readonly<Record<string, string>>;
8
+ /**
9
+ * The names the ADE (`app-icon`) and Cloud (`kjIcon`) used before the merge, mapped onto the one
10
+ * set. A call site keeps its old name; new code uses the canonical one. ADE `columns` meant three
11
+ * columns: use `columns-3` (canonical `columns` is two, the design's).
12
+ */
13
+ export declare const ICON_ALIASES: Readonly<Record<string, string>>;
14
+ /** The canonical name for `name` (an alias resolves), or null when the set has no such glyph. */
15
+ export declare function iconName(name: string): string | null;
16
+ /** Every name `<orr-icon>` accepts, aliases included. */
17
+ export declare function iconNames(): string[];
18
+ type IconSize = "xs" | "sm" | "md" | "lg" | "xl";
19
+ /** The whole SVG for `name` (stroke 1.75, currentColor). Unknown names draw `square`. */
20
+ export declare function iconSvg(name: string, px?: number): string;
21
+ /**
22
+ * `<orr-icon name="terminal" size="sm" />`: one glyph of the merged set (`.o-icon`), drawn in
23
+ * `currentColor`. `size` is xs 12 · sm 14 · md 16 · lg 20 · xl 24 or a pixel number. An unknown
24
+ * name draws a square and warns once, listing the known names.
25
+ */
26
+ export declare class OrrIconComponent {
27
+ readonly name: import("@angular/core").InputSignal<string>;
28
+ readonly size: import("@angular/core").InputSignal<number | IconSize>;
29
+ readonly color: import("@angular/core").InputSignal<string | null>;
30
+ /** Accessible name; without it the icon is decorative (`aria-hidden`). */
31
+ readonly label: import("@angular/core").InputSignal<string>;
32
+ readonly px: import("@angular/core").Signal<number>;
33
+ readonly resolved: import("@angular/core").Signal<string>;
34
+ constructor();
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrIconComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrIconComponent, "orr-icon", never, {
37
+ "name": {
38
+ "alias": "name";
39
+ "required": true;
40
+ "isSignal": true;
41
+ };
42
+ "size": {
43
+ "alias": "size";
44
+ "required": false;
45
+ "isSignal": true;
46
+ };
47
+ "color": {
48
+ "alias": "color";
49
+ "required": false;
50
+ "isSignal": true;
51
+ };
52
+ "label": {
53
+ "alias": "label";
54
+ "required": false;
55
+ "isSignal": true;
56
+ };
57
+ }, {}, never, never, true, never>;
58
+ }
59
+ /**
60
+ * Registers the merged set (aliases included) with kouji-ui's icon registry, so `[kjIcon]` and
61
+ * kouji's own components (select caret, toast, alert) draw the same glyphs as `<orr-icon>`.
62
+ */
63
+ export declare function provideOrreryIcons(): EnvironmentProviders;
64
+ /** Session / agent / machine states. `queued` (ADE) draws as idle. */
65
+ type DotState = "running" | "waiting" | "blocked" | "done" | "idle" | "online" | "offline" | "queued";
66
+ /** `<orr-dot state="running" pulse />`: the 8 px state dot (`.o-dot`); `size="sm"` is 6 px. */
67
+ export declare class OrrDotComponent {
68
+ readonly state: import("@angular/core").InputSignal<DotState>;
69
+ readonly pulse: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
70
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
71
+ readonly label: import("@angular/core").InputSignal<string>;
72
+ readonly cls: import("@angular/core").Signal<string>;
73
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDotComponent, never>;
74
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrDotComponent, "orr-dot", never, {
75
+ "state": {
76
+ "alias": "state";
77
+ "required": false;
78
+ "isSignal": true;
79
+ };
80
+ "pulse": {
81
+ "alias": "pulse";
82
+ "required": false;
83
+ "isSignal": true;
84
+ };
85
+ "size": {
86
+ "alias": "size";
87
+ "required": false;
88
+ "isSignal": true;
89
+ };
90
+ "label": {
91
+ "alias": "label";
92
+ "required": false;
93
+ "isSignal": true;
94
+ };
95
+ }, {}, never, never, true, never>;
96
+ }
97
+ /** `<orr-pill state="waiting">Needs you</orr-pill>`: dot + word (`.o-pill`). Empty content shows the state. */
98
+ export declare class OrrPillComponent {
99
+ readonly state: import("@angular/core").InputSignal<DotState>;
100
+ readonly nodot: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
101
+ readonly cls: import("@angular/core").Signal<string>;
102
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrPillComponent, never>;
103
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrPillComponent, "orr-pill", never, {
104
+ "state": {
105
+ "alias": "state";
106
+ "required": false;
107
+ "isSignal": true;
108
+ };
109
+ "nodot": {
110
+ "alias": "nodot";
111
+ "required": false;
112
+ "isSignal": true;
113
+ };
114
+ }, {}, never, ["*"], true, never>;
115
+ }
116
+ type BadgeTone = "neutral" | "add" | "del" | "attn" | "change" | "live" | "accent";
117
+ /** `<orr-badge tone="add">+128</orr-badge>`: quiet count / tag (`.o-badge`). */
118
+ export declare class OrrBadgeComponent {
119
+ readonly tone: import("@angular/core").InputSignal<BadgeTone>;
120
+ readonly solid: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
121
+ readonly square: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
122
+ readonly mono: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
123
+ readonly cls: import("@angular/core").Signal<string>;
124
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrBadgeComponent, never>;
125
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrBadgeComponent, "orr-badge", never, {
126
+ "tone": {
127
+ "alias": "tone";
128
+ "required": false;
129
+ "isSignal": true;
130
+ };
131
+ "solid": {
132
+ "alias": "solid";
133
+ "required": false;
134
+ "isSignal": true;
135
+ };
136
+ "square": {
137
+ "alias": "square";
138
+ "required": false;
139
+ "isSignal": true;
140
+ };
141
+ "mono": {
142
+ "alias": "mono";
143
+ "required": false;
144
+ "isSignal": true;
145
+ };
146
+ }, {}, never, ["*"], true, never>;
147
+ }
148
+ /** `<orr-chip removable (remove)="…">plan.md</orr-chip>`: a removable token (`.o-chip`). */
149
+ export declare class OrrChipComponent {
150
+ readonly icon: import("@angular/core").InputSignal<string | null>;
151
+ readonly removable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
152
+ readonly selected: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
153
+ readonly removeLabel: import("@angular/core").InputSignal<string>;
154
+ readonly remove: import("@angular/core").OutputEmitterRef<void>;
155
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrChipComponent, never>;
156
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrChipComponent, "orr-chip", never, {
157
+ "icon": {
158
+ "alias": "icon";
159
+ "required": false;
160
+ "isSignal": true;
161
+ };
162
+ "removable": {
163
+ "alias": "removable";
164
+ "required": false;
165
+ "isSignal": true;
166
+ };
167
+ "selected": {
168
+ "alias": "selected";
169
+ "required": false;
170
+ "isSignal": true;
171
+ };
172
+ "removeLabel": {
173
+ "alias": "removeLabel";
174
+ "required": false;
175
+ "isSignal": true;
176
+ };
177
+ }, {
178
+ "remove": "remove";
179
+ }, never, ["*"], true, never>;
180
+ }
181
+ /** Initials of a name: first letters of the first two words. */
182
+ export declare function initials(name: string): string;
183
+ /** A stable identity tone (1–7, `--id-*`) for a name. */
184
+ export declare function nameTone(name: string): number;
185
+ /** `<orr-avatar name="Driss Najih" />`: initials on an identity tone (`.o-avatar`). */
186
+ export declare class OrrAvatarComponent {
187
+ readonly name: import("@angular/core").InputSignal<string>;
188
+ /** 1–7; hashed from the name when absent. */
189
+ readonly tone: import("@angular/core").InputSignal<number | null>;
190
+ readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg">;
191
+ readonly square: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
192
+ readonly text: import("@angular/core").Signal<string>;
193
+ readonly cls: import("@angular/core").Signal<string>;
194
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrAvatarComponent, never>;
195
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrAvatarComponent, "orr-avatar", never, {
196
+ "name": {
197
+ "alias": "name";
198
+ "required": false;
199
+ "isSignal": true;
200
+ };
201
+ "tone": {
202
+ "alias": "tone";
203
+ "required": false;
204
+ "isSignal": true;
205
+ };
206
+ "size": {
207
+ "alias": "size";
208
+ "required": false;
209
+ "isSignal": true;
210
+ };
211
+ "square": {
212
+ "alias": "square";
213
+ "required": false;
214
+ "isSignal": true;
215
+ };
216
+ }, {}, never, never, true, never>;
217
+ }
218
+ type MeterTone = "ok" | "attn" | "danger";
219
+ /** The tone a meter takes on its own: attn from 75 %, danger from 90 %. */
220
+ export declare function meterTone(pct: number): MeterTone | null;
221
+ /** `<orr-meter [value]="82" />`: a thin bar (`.o-meter`); the tone follows the fill unless set. */
222
+ export declare class OrrMeterComponent {
223
+ readonly value: import("@angular/core").InputSignalWithTransform<number, unknown>;
224
+ readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
225
+ readonly tone: import("@angular/core").InputSignal<MeterTone | null>;
226
+ readonly size: import("@angular/core").InputSignal<"md" | "lg">;
227
+ readonly label: import("@angular/core").InputSignal<string>;
228
+ readonly pct: import("@angular/core").Signal<string>;
229
+ readonly cls: import("@angular/core").Signal<string>;
230
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrMeterComponent, never>;
231
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrMeterComponent, "orr-meter", never, {
232
+ "value": {
233
+ "alias": "value";
234
+ "required": false;
235
+ "isSignal": true;
236
+ };
237
+ "max": {
238
+ "alias": "max";
239
+ "required": false;
240
+ "isSignal": true;
241
+ };
242
+ "tone": {
243
+ "alias": "tone";
244
+ "required": false;
245
+ "isSignal": true;
246
+ };
247
+ "size": {
248
+ "alias": "size";
249
+ "required": false;
250
+ "isSignal": true;
251
+ };
252
+ "label": {
253
+ "alias": "label";
254
+ "required": false;
255
+ "isSignal": true;
256
+ };
257
+ }, {}, never, never, true, never>;
258
+ }
259
+ /** `<orr-ring [value]="0.4" />`: circular progress, 0..1 (from the ADE's `app-ring`). */
260
+ export declare class OrrRingComponent {
261
+ readonly value: import("@angular/core").InputSignalWithTransform<number, unknown>;
262
+ readonly size: import("@angular/core").InputSignalWithTransform<number, unknown>;
263
+ readonly stroke: import("@angular/core").InputSignalWithTransform<number, unknown>;
264
+ readonly color: import("@angular/core").InputSignal<string | null>;
265
+ readonly r: import("@angular/core").Signal<number>;
266
+ readonly c: import("@angular/core").Signal<number>;
267
+ readonly circ: import("@angular/core").Signal<number>;
268
+ readonly offset: import("@angular/core").Signal<number>;
269
+ readonly round: import("@angular/core").Signal<number>;
270
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrRingComponent, never>;
271
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrRingComponent, "orr-ring", never, {
272
+ "value": {
273
+ "alias": "value";
274
+ "required": false;
275
+ "isSignal": true;
276
+ };
277
+ "size": {
278
+ "alias": "size";
279
+ "required": false;
280
+ "isSignal": true;
281
+ };
282
+ "stroke": {
283
+ "alias": "stroke";
284
+ "required": false;
285
+ "isSignal": true;
286
+ };
287
+ "color": {
288
+ "alias": "color";
289
+ "required": false;
290
+ "isSignal": true;
291
+ };
292
+ }, {}, never, never, true, never>;
293
+ }
294
+ /** The VCS letters every changes list uses, with their names. */
295
+ export declare const VCS_STATE_NAMES: Readonly<Record<string, string>>;
296
+ /** `<orr-state state="A" />`: the file-state letter square (`.o-state`), coloured by `--vcs-*`. */
297
+ export declare class OrrStateComponent {
298
+ readonly state: import("@angular/core").InputSignal<string>;
299
+ readonly title: import("@angular/core").Signal<string>;
300
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrStateComponent, never>;
301
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrStateComponent, "orr-state", never, {
302
+ "state": {
303
+ "alias": "state";
304
+ "required": true;
305
+ "isSignal": true;
306
+ };
307
+ }, {}, never, never, true, never>;
308
+ }
309
+ /** `<orr-addel [add]="3" [del]="1" />`: `+N −N`, only the non-zero counts (`.o-addel`). */
310
+ export declare class OrrAddDelComponent {
311
+ readonly add: import("@angular/core").InputSignalWithTransform<number, unknown>;
312
+ readonly del: import("@angular/core").InputSignalWithTransform<number, unknown>;
313
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrAddDelComponent, never>;
314
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrAddDelComponent, "orr-addel", never, {
315
+ "add": {
316
+ "alias": "add";
317
+ "required": false;
318
+ "isSignal": true;
319
+ };
320
+ "del": {
321
+ "alias": "del";
322
+ "required": false;
323
+ "isSignal": true;
324
+ };
325
+ }, {}, never, never, true, never>;
326
+ }
327
+ /** `"Ctrl K"`, `"Ctrl+K"` or `["Ctrl", "K"]` → one key per cap. A lone `+` stays a key. */
328
+ export declare function splitKeys(keys: string | readonly string[]): string[];
329
+ /**
330
+ * What makes a shortcut a hint inside a control rather than a standalone key: the controls of the
331
+ * system (and kouji's) in which `.o-kbd` turns quiet (no border, no ground, mono 11, `--ink-3`).
332
+ */
333
+ export declare const KBD_INLINE_CONTEXT: string;
334
+ /**
335
+ * `<orr-kbd keys="Ctrl K" />`: keyboard keys (`.o-kbd`). Standalone it draws boxed caps; inside a
336
+ * control (button, menu item, search pill, chip, tab, input) it is a quiet inline hint on its own
337
+ * (`.o-kbd--inline`). `inline` forces either form; `size="md"` is the 14 px top-bar cap.
338
+ */
339
+ export declare class OrrKbdComponent {
340
+ readonly keys: import("@angular/core").InputSignal<string | readonly string[]>;
341
+ /** `true` / `false` force the form; unset follows the context. */
342
+ readonly inline: import("@angular/core").InputSignal<boolean | undefined>;
343
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
344
+ readonly caps: import("@angular/core").Signal<string[]>;
345
+ readonly label: import("@angular/core").Signal<string>;
346
+ /** Whether the host sits inside a control (read once the host is in the DOM). */
347
+ readonly inControl: import("@angular/core").WritableSignal<boolean>;
348
+ readonly isInline: import("@angular/core").Signal<boolean>;
349
+ readonly cls: import("@angular/core").Signal<string>;
350
+ constructor();
351
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrKbdComponent, never>;
352
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrKbdComponent, "orr-kbd", never, {
353
+ "keys": {
354
+ "alias": "keys";
355
+ "required": true;
356
+ "isSignal": true;
357
+ };
358
+ "inline": {
359
+ "alias": "inline";
360
+ "required": false;
361
+ "isSignal": true;
362
+ };
363
+ "size": {
364
+ "alias": "size";
365
+ "required": false;
366
+ "isSignal": true;
367
+ };
368
+ }, {}, never, never, true, never>;
369
+ }
370
+ /** Brand marks per agent tool (single path, 24 grid). */
371
+ export declare const TOOL_ICONS: Readonly<Record<string, string>>;
372
+ /** The monogram drawn when a tool has no brand mark. */
373
+ export declare const TOOL_GLYPHS: Readonly<Record<string, string>>;
374
+ /**
375
+ * `<orr-tool-badge tool="claude" [size]="16" />`: the agent tool's brand mark on a square tinted with
376
+ * its `--tool-*` colour (from the ADE's `app-tool-badge`). Unknown tools show their first letter in `--ink-3`.
377
+ */
378
+ export declare class OrrToolBadgeComponent {
379
+ readonly tool: import("@angular/core").InputSignal<string>;
380
+ readonly size: import("@angular/core").InputSignalWithTransform<number, unknown>;
381
+ readonly accent: import("@angular/core").Signal<string>;
382
+ readonly path: import("@angular/core").Signal<string>;
383
+ readonly glyph: import("@angular/core").Signal<string>;
384
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrToolBadgeComponent, never>;
385
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrToolBadgeComponent, "orr-tool-badge", never, {
386
+ "tool": {
387
+ "alias": "tool";
388
+ "required": true;
389
+ "isSignal": true;
390
+ };
391
+ "size": {
392
+ "alias": "size";
393
+ "required": false;
394
+ "isSignal": true;
395
+ };
396
+ }, {}, never, never, true, never>;
397
+ }
398
+ /** Marks content for the dialog / sheet head, right-aligned before the close button. */
399
+ export declare class OrrDialogActionsDirective {
400
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDialogActionsDirective, never>;
401
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrDialogActionsDirective, "[orrDialogActions]", never, {}, {}, never, never, true, never>;
402
+ }
403
+ /** Marks content drawn inline after the dialog title, on its row (e.g. the file and position of a review). */
404
+ export declare class OrrDialogTitleDirective {
405
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDialogTitleDirective, never>;
406
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrDialogTitleDirective, "[orrDialogTitle]", never, {}, {}, never, never, true, never>;
407
+ }
408
+ /** Marks content for the dialog / sheet foot (the actions row, right-aligned). */
409
+ export declare class OrrDialogFootDirective {
410
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDialogFootDirective, never>;
411
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrDialogFootDirective, "[orrDialogFoot]", never, {}, {}, never, never, true, never>;
412
+ }
413
+ /**
414
+ * The dialog role an outer element already declares around `host` (a component that sets `role=dialog`
415
+ * on its own host), named by `titleId` when it has no name; null when none does, and the shell's own
416
+ * panel is the dialog. kouji's `KjDialogService` gives no element the role, so the panel carries it.
417
+ */
418
+ declare function outerDialog(host: HTMLElement, titleId: string): Element | null;
419
+ /** Why a shell closed itself: its × button. Esc and the scrim are kouji's overlay. */
420
+ type DialogCloseReason = "button";
421
+ /**
422
+ * The dialog panel (`.o-dialog`) inside kouji's `<kj-dialog-shell>`: head (icon, title + sub, your
423
+ * `[orrDialogActions]` right-aligned, × at the far right), body, and `[orrDialogFoot]`. Open the
424
+ * component that uses it with kouji's `KjDialogService.open(…)`; the overlay gives the scrim, Esc,
425
+ * the focus trap and the return focus. × closes the `KjDialogRef` and emits `closed`.
426
+ *
427
+ * ```html
428
+ * <orr-dialog-shell heading="New session" icon="plus" size="md" (closed)="…">
429
+ * <kj-button orrDialogActions kjVariant="ghost" kjSize="sm">Help</kj-button>
430
+ * …body…
431
+ * <kj-button orrDialogFoot kjVariant="outline">Cancel</kj-button>
432
+ * </orr-dialog-shell>
433
+ * ```
434
+ */
435
+ export declare class OrrDialogShellComponent {
436
+ readonly heading: import("@angular/core").InputSignal<string>;
437
+ readonly sub: import("@angular/core").InputSignal<string>;
438
+ readonly icon: import("@angular/core").InputSignal<string | null>;
439
+ readonly tone: import("@angular/core").InputSignal<"danger" | "default">;
440
+ /** sm 480 · md 600 · lg 880 · xl 1200. */
441
+ readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl">;
442
+ readonly closable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
443
+ readonly closeLabel: import("@angular/core").InputSignal<string>;
444
+ readonly closed: import("@angular/core").OutputEmitterRef<"button">;
445
+ protected readonly foot: import("@angular/core").Signal<readonly OrrDialogFootDirective[]>;
446
+ protected readonly inline: import("@angular/core").Signal<readonly OrrDialogTitleDirective[]>;
447
+ protected readonly titleId: string;
448
+ /** The panel is the dialog (role, modal, name) unless an outer element already declares one. */
449
+ protected readonly ownRole: import("@angular/core").WritableSignal<boolean>;
450
+ private readonly ref;
451
+ constructor();
452
+ /** Closes the kouji dialog this shell sits in (if any) and emits `closed`. */
453
+ close(): void;
454
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDialogShellComponent, never>;
455
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrDialogShellComponent, "orr-dialog-shell", never, {
456
+ "heading": {
457
+ "alias": "heading";
458
+ "required": false;
459
+ "isSignal": true;
460
+ };
461
+ "sub": {
462
+ "alias": "sub";
463
+ "required": false;
464
+ "isSignal": true;
465
+ };
466
+ "icon": {
467
+ "alias": "icon";
468
+ "required": false;
469
+ "isSignal": true;
470
+ };
471
+ "tone": {
472
+ "alias": "tone";
473
+ "required": false;
474
+ "isSignal": true;
475
+ };
476
+ "size": {
477
+ "alias": "size";
478
+ "required": false;
479
+ "isSignal": true;
480
+ };
481
+ "closable": {
482
+ "alias": "closable";
483
+ "required": false;
484
+ "isSignal": true;
485
+ };
486
+ "closeLabel": {
487
+ "alias": "closeLabel";
488
+ "required": false;
489
+ "isSignal": true;
490
+ };
491
+ }, {
492
+ "closed": "closed";
493
+ }, ["foot", "inline"], ["[orrDialogTitle]", "[orrDialogActions]", "*", "[orrDialogFoot]"], true, never>;
494
+ }
495
+ /**
496
+ * The phone bottom sheet (`.o-sheet`) inside kouji's `<kj-sheet-shell>`: grab handle, title, × at
497
+ * thumb size, body, `[orrDialogFoot]` (buttons share the width). Open with kouji's `KjSheetService`.
498
+ */
499
+ export declare class OrrSheetShellComponent {
500
+ readonly heading: import("@angular/core").InputSignal<string>;
501
+ readonly closable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
502
+ readonly closeLabel: import("@angular/core").InputSignal<string>;
503
+ readonly closed: import("@angular/core").OutputEmitterRef<"button">;
504
+ protected readonly foot: import("@angular/core").Signal<readonly OrrDialogFootDirective[]>;
505
+ private readonly ref;
506
+ close(): void;
507
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSheetShellComponent, never>;
508
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSheetShellComponent, "orr-sheet-shell", never, {
509
+ "heading": {
510
+ "alias": "heading";
511
+ "required": false;
512
+ "isSignal": true;
513
+ };
514
+ "closable": {
515
+ "alias": "closable";
516
+ "required": false;
517
+ "isSignal": true;
518
+ };
519
+ "closeLabel": {
520
+ "alias": "closeLabel";
521
+ "required": false;
522
+ "isSignal": true;
523
+ };
524
+ }, {
525
+ "closed": "closed";
526
+ }, ["foot"], ["[orrDialogActions]", "*", "[orrDialogFoot]"], true, never>;
527
+ }
528
+ /** Marks content for a card's head, right-aligned (`<orr-pill orrCardActions …>`). */
529
+ export declare class OrrCardActionsDirective {
530
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrCardActionsDirective, never>;
531
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrCardActionsDirective, "[orrCardActions]", never, {}, {}, never, never, true, never>;
532
+ }
533
+ /** Marks content for a card's foot. */
534
+ export declare class OrrCardFootDirective {
535
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrCardFootDirective, never>;
536
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrCardFootDirective, "[orrCardFoot]", never, {}, {}, never, never, true, never>;
537
+ }
538
+ /** `<orr-card heading="Machine" icon="server">…</orr-card>`: a `--panel` card (`.o-card`). */
539
+ export declare class OrrCardComponent {
540
+ readonly heading: import("@angular/core").InputSignal<string>;
541
+ readonly icon: import("@angular/core").InputSignal<string | null>;
542
+ readonly selected: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
543
+ /** Hover ring for a clickable card. */
544
+ readonly hover: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
545
+ protected readonly actions: import("@angular/core").Signal<readonly OrrCardActionsDirective[]>;
546
+ protected readonly foot: import("@angular/core").Signal<readonly OrrCardFootDirective[]>;
547
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrCardComponent, never>;
548
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrCardComponent, "orr-card", never, {
549
+ "heading": {
550
+ "alias": "heading";
551
+ "required": false;
552
+ "isSignal": true;
553
+ };
554
+ "icon": {
555
+ "alias": "icon";
556
+ "required": false;
557
+ "isSignal": true;
558
+ };
559
+ "selected": {
560
+ "alias": "selected";
561
+ "required": false;
562
+ "isSignal": true;
563
+ };
564
+ "hover": {
565
+ "alias": "hover";
566
+ "required": false;
567
+ "isSignal": true;
568
+ };
569
+ }, {}, ["actions", "foot"], ["[orrCardActions]", "*", "[orrCardFoot]"], true, never>;
570
+ }
571
+ /**
572
+ * `<orr-row label="Density" config="ui.density" hint="…"><orr-seg …/></orr-row>`: one setting
573
+ * (`.o-set-row`): label (`--ink`, medium), its config key (mono, `--ink-4`), the hint (`--ink-3`)
574
+ * on the left; the control (projected) on the right, or under it with `wide`.
575
+ */
576
+ export declare class OrrSettingRowComponent {
577
+ readonly label: import("@angular/core").InputSignal<string>;
578
+ readonly hint: import("@angular/core").InputSignal<string>;
579
+ /** The `config.toml` key this setting writes (decision 0003: both routes, always). */
580
+ readonly config: import("@angular/core").InputSignal<string>;
581
+ readonly wide: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
582
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
583
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSettingRowComponent, never>;
584
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSettingRowComponent, "orr-row", never, {
585
+ "label": {
586
+ "alias": "label";
587
+ "required": true;
588
+ "isSignal": true;
589
+ };
590
+ "hint": {
591
+ "alias": "hint";
592
+ "required": false;
593
+ "isSignal": true;
594
+ };
595
+ "config": {
596
+ "alias": "config";
597
+ "required": false;
598
+ "isSignal": true;
599
+ };
600
+ "wide": {
601
+ "alias": "wide";
602
+ "required": false;
603
+ "isSignal": true;
604
+ };
605
+ "disabled": {
606
+ "alias": "disabled";
607
+ "required": false;
608
+ "isSignal": true;
609
+ };
610
+ }, {}, never, ["[orrRowHint]", "*"], true, never>;
611
+ }
612
+ /** `<orr-set-group heading="Appearance">…rows…</orr-set-group>`: a ruled settings section. */
613
+ export declare class OrrSettingGroupComponent {
614
+ readonly heading: import("@angular/core").InputSignal<string>;
615
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSettingGroupComponent, never>;
616
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSettingGroupComponent, "orr-set-group", never, {
617
+ "heading": {
618
+ "alias": "heading";
619
+ "required": false;
620
+ "isSignal": true;
621
+ };
622
+ }, {}, never, ["*"], true, never>;
623
+ }
624
+ /** Marks the empty state's action buttons. */
625
+ export declare class OrrEmptyActionDirective {
626
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrEmptyActionDirective, never>;
627
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OrrEmptyActionDirective, "[orrEmptyAction]", never, {}, {}, never, never, true, never>;
628
+ }
629
+ /**
630
+ * `<orr-empty icon="layers" heading="No sessions">Start one from …</orr-empty>`: an empty state
631
+ * (`.o-empty`) that says what to do; `line` is the one-row form inside a list.
632
+ */
633
+ export declare class OrrEmptyComponent {
634
+ readonly icon: import("@angular/core").InputSignal<string | null>;
635
+ readonly heading: import("@angular/core").InputSignal<string>;
636
+ readonly line: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
637
+ protected readonly action: import("@angular/core").Signal<readonly OrrEmptyActionDirective[]>;
638
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrEmptyComponent, never>;
639
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrEmptyComponent, "orr-empty", never, {
640
+ "icon": {
641
+ "alias": "icon";
642
+ "required": false;
643
+ "isSignal": true;
644
+ };
645
+ "heading": {
646
+ "alias": "heading";
647
+ "required": false;
648
+ "isSignal": true;
649
+ };
650
+ "line": {
651
+ "alias": "line";
652
+ "required": false;
653
+ "isSignal": true;
654
+ };
655
+ }, {}, ["action"], ["*", "[orrEmptyAction]"], true, never>;
656
+ }
657
+ /** `<orr-skeleton [lines]="3" />`: shimmering placeholder lines (`.o-skel`); the last of several is shorter. */
658
+ export declare class OrrSkeletonComponent {
659
+ readonly lines: import("@angular/core").InputSignalWithTransform<number, unknown>;
660
+ readonly w: import("@angular/core").InputSignal<string>;
661
+ readonly h: import("@angular/core").InputSignal<string>;
662
+ readonly circle: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
663
+ readonly label: import("@angular/core").InputSignal<string>;
664
+ readonly rows: import("@angular/core").Signal<unknown[]>;
665
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSkeletonComponent, never>;
666
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSkeletonComponent, "orr-skeleton", never, {
667
+ "lines": {
668
+ "alias": "lines";
669
+ "required": false;
670
+ "isSignal": true;
671
+ };
672
+ "w": {
673
+ "alias": "w";
674
+ "required": false;
675
+ "isSignal": true;
676
+ };
677
+ "h": {
678
+ "alias": "h";
679
+ "required": false;
680
+ "isSignal": true;
681
+ };
682
+ "circle": {
683
+ "alias": "circle";
684
+ "required": false;
685
+ "isSignal": true;
686
+ };
687
+ "label": {
688
+ "alias": "label";
689
+ "required": false;
690
+ "isSignal": true;
691
+ };
692
+ }, {}, never, never, true, never>;
693
+ }
694
+ /** `<orr-spinner size="sm" />`: the ring spinner (`.o-spin`) in `currentColor`. */
695
+ export declare class OrrSpinnerComponent {
696
+ readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg">;
697
+ readonly label: import("@angular/core").InputSignal<string>;
698
+ readonly cls: import("@angular/core").Signal<string>;
699
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSpinnerComponent, never>;
700
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSpinnerComponent, "orr-spinner", never, {
701
+ "size": {
702
+ "alias": "size";
703
+ "required": false;
704
+ "isSignal": true;
705
+ };
706
+ "label": {
707
+ "alias": "label";
708
+ "required": false;
709
+ "isSignal": true;
710
+ };
711
+ }, {}, never, never, true, never>;
712
+ }
713
+ /**
714
+ * `<orr-search-pill label="Search" keys="Ctrl K" (activate)="openPalette()" />`: the top-bar search
715
+ * trigger (`.o-search-trigger`): icon, label, and the shortcut as an inline hint.
716
+ */
717
+ export declare class OrrSearchPillComponent {
718
+ readonly label: import("@angular/core").InputSignal<string>;
719
+ readonly keys: import("@angular/core").InputSignal<string>;
720
+ readonly icon: import("@angular/core").InputSignal<string>;
721
+ readonly activate: import("@angular/core").OutputEmitterRef<void>;
722
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSearchPillComponent, never>;
723
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSearchPillComponent, "orr-search-pill", never, {
724
+ "label": {
725
+ "alias": "label";
726
+ "required": false;
727
+ "isSignal": true;
728
+ };
729
+ "keys": {
730
+ "alias": "keys";
731
+ "required": false;
732
+ "isSignal": true;
733
+ };
734
+ "icon": {
735
+ "alias": "icon";
736
+ "required": false;
737
+ "isSignal": true;
738
+ };
739
+ }, {
740
+ "activate": "activate";
741
+ }, never, never, true, never>;
742
+ }
743
+ /**
744
+ * `<orr-pane-resizer side="right" [width]="w" (widthChange)="w = $event" (reset)="w = 300" />`: the drag
745
+ * handle on a side column's inner edge (the ADE's `app-pane-resizer`, shared). It owns the gesture only;
746
+ * the host keeps the width. `side` is where the column sits: a right-hand column grows as the pointer
747
+ * moves left. ← → nudge it by 16px, double-click asks for the host's default.
748
+ */
749
+ export declare class OrrPaneResizerComponent {
750
+ private readonly host;
751
+ /** The column's width in px: a drag starts from it. */
752
+ readonly width: import("@angular/core").InputSignal<number>;
753
+ readonly min: import("@angular/core").InputSignal<number>;
754
+ readonly max: import("@angular/core").InputSignal<number>;
755
+ /** Where the column sits beside the handle. */
756
+ readonly side: import("@angular/core").InputSignal<"left" | "right">;
757
+ readonly label: import("@angular/core").InputSignal<string>;
758
+ /** The clamped width, on every pointer move and nudge. */
759
+ readonly widthChange: import("@angular/core").OutputEmitterRef<number>;
760
+ /** Double-click: the host's default. */
761
+ readonly reset: import("@angular/core").OutputEmitterRef<void>;
762
+ readonly dragging: import("@angular/core").WritableSignal<boolean>;
763
+ startDrag(ev: PointerEvent): void;
764
+ /** The keyboard route: ← → move the edge, whichever side the column is on. */
765
+ nudge(by: number, ev: Event): void;
766
+ private emit;
767
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrPaneResizerComponent, never>;
768
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrPaneResizerComponent, "orr-pane-resizer", never, {
769
+ "width": {
770
+ "alias": "width";
771
+ "required": true;
772
+ "isSignal": true;
773
+ };
774
+ "min": {
775
+ "alias": "min";
776
+ "required": false;
777
+ "isSignal": true;
778
+ };
779
+ "max": {
780
+ "alias": "max";
781
+ "required": false;
782
+ "isSignal": true;
783
+ };
784
+ "side": {
785
+ "alias": "side";
786
+ "required": false;
787
+ "isSignal": true;
788
+ };
789
+ "label": {
790
+ "alias": "label";
791
+ "required": false;
792
+ "isSignal": true;
793
+ };
794
+ }, {
795
+ "widthChange": "widthChange";
796
+ "reset": "reset";
797
+ }, never, never, true, never>;
798
+ }
799
+ interface SelectOption {
800
+ value: string;
801
+ label: string;
802
+ }
803
+ /** A titled cluster of options (the `<optgroup>` role). */
804
+ interface SelectGroup {
805
+ label: string;
806
+ options: (string | SelectOption)[];
807
+ /** The heading folds and unfolds the group (Left / Right on the keyboard). */
808
+ collapsible?: boolean;
809
+ /** Starts folded; needs `collapsible`. */
810
+ collapsed?: boolean;
811
+ }
812
+ interface SelectRun {
813
+ label: string | null;
814
+ options: SelectOption[];
815
+ collapsible?: boolean;
816
+ collapsed?: boolean;
817
+ }
818
+ /** From this many options on, `searchable="auto"` shows the search field. */
819
+ export declare const SELECT_SEARCH_FROM = 8;
820
+ /** Strings, `{value, label}` pairs and groups, mixed, flattened into runs in their order. */
821
+ export declare function selectRuns(options: readonly (string | SelectOption | SelectGroup)[]): SelectRun[];
822
+ /**
823
+ * `<orr-select [(value)]="model" [options]="opts" />`: kouji's `<kj-select>` with Orrery's option
824
+ * shapes (from the ADE's `app-select`): strings, `{ value, label }` and `{ label, options }` groups.
825
+ * A long list gets a search field (`searchable`, "auto" from SELECT_SEARCH_FROM options on);
826
+ * a group with `collapsible` folds under its heading.
827
+ */
828
+ export declare class OrrSelectComponent {
829
+ readonly value: import("@angular/core").ModelSignal<string>;
830
+ readonly options: import("@angular/core").InputSignal<readonly (string | SelectOption | SelectGroup)[]>;
831
+ readonly placeholder: import("@angular/core").InputSignal<string>;
832
+ readonly size: import("@angular/core").InputSignal<"xs" | "sm" | "md" | "lg">;
833
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
834
+ /** A search field above the options: always, never, or "auto" (from SELECT_SEARCH_FROM options on). */
835
+ readonly searchable: import("@angular/core").InputSignal<boolean | "auto">;
836
+ readonly searchPlaceholder: import("@angular/core").InputSignal<string>;
837
+ /** What the search shows when nothing matches, e.g. "No matching projects". */
838
+ readonly searchEmpty: import("@angular/core").InputSignal<string>;
839
+ /** The closed select's text for a value no option has (an archived agent…); unset: the value itself. */
840
+ readonly displayWith: import("@angular/core").InputSignal<((value: unknown) => string) | null>;
841
+ readonly runs: import("@angular/core").Signal<SelectRun[]>;
842
+ protected readonly search: import("@angular/core").Signal<boolean>;
843
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSelectComponent, never>;
844
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSelectComponent, "orr-select", never, {
845
+ "value": {
846
+ "alias": "value";
847
+ "required": false;
848
+ "isSignal": true;
849
+ };
850
+ "options": {
851
+ "alias": "options";
852
+ "required": false;
853
+ "isSignal": true;
854
+ };
855
+ "placeholder": {
856
+ "alias": "placeholder";
857
+ "required": false;
858
+ "isSignal": true;
859
+ };
860
+ "size": {
861
+ "alias": "size";
862
+ "required": false;
863
+ "isSignal": true;
864
+ };
865
+ "disabled": {
866
+ "alias": "disabled";
867
+ "required": false;
868
+ "isSignal": true;
869
+ };
870
+ "searchable": {
871
+ "alias": "searchable";
872
+ "required": false;
873
+ "isSignal": true;
874
+ };
875
+ "searchPlaceholder": {
876
+ "alias": "searchPlaceholder";
877
+ "required": false;
878
+ "isSignal": true;
879
+ };
880
+ "searchEmpty": {
881
+ "alias": "searchEmpty";
882
+ "required": false;
883
+ "isSignal": true;
884
+ };
885
+ "displayWith": {
886
+ "alias": "displayWith";
887
+ "required": false;
888
+ "isSignal": true;
889
+ };
890
+ }, {
891
+ "value": "valueChange";
892
+ }, never, never, true, never>;
893
+ }
894
+ interface SegOption {
895
+ value: string;
896
+ label: string;
897
+ icon?: string;
898
+ title?: string;
899
+ disabled?: boolean;
900
+ }
901
+ /**
902
+ * `<orr-seg [(value)]="mode" [options]="[{value:'tree',label:'Tree',icon:'git-branch'}, …]" />`:
903
+ * a segmented switch, drawn by kouji's pill tabs, which @getorrery/styles draws as `.o-seg` (`size="xs"` is the in-pane `.tabs-xs` form).
904
+ * `block` fills the row and shares it between the options (`.o-seg--block`); `size="tap"` is the phone's 36 px
905
+ * option in body text (`.o-seg--tap`): `<orr-seg block size="tap" … />` is PhoneApp-14's Theme switch.
906
+ */
907
+ export declare class OrrSegComponent {
908
+ readonly value: import("@angular/core").ModelSignal<string>;
909
+ readonly options: import("@angular/core").InputSignal<readonly SegOption[]>;
910
+ readonly label: import("@angular/core").InputSignal<string>;
911
+ readonly size: import("@angular/core").InputSignal<"xs" | "sm" | "tap">;
912
+ /** Fill the row: the options share its width. */
913
+ readonly block: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
914
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrSegComponent, never>;
915
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrSegComponent, "orr-seg", never, {
916
+ "value": {
917
+ "alias": "value";
918
+ "required": false;
919
+ "isSignal": true;
920
+ };
921
+ "options": {
922
+ "alias": "options";
923
+ "required": false;
924
+ "isSignal": true;
925
+ };
926
+ "label": {
927
+ "alias": "label";
928
+ "required": false;
929
+ "isSignal": true;
930
+ };
931
+ "size": {
932
+ "alias": "size";
933
+ "required": false;
934
+ "isSignal": true;
935
+ };
936
+ "block": {
937
+ "alias": "block";
938
+ "required": false;
939
+ "isSignal": true;
940
+ };
941
+ }, {
942
+ "value": "valueChange";
943
+ }, never, never, true, never>;
944
+ }
945
+ /**
946
+ * `<orr-choices [(value)]="where" label="Run on"><orr-choice value="desk">…</orr-choice></orr-choices>`:
947
+ * a radio group drawn as cards (`.o-choices > .o-choice[aria-checked]`, CloudApp-00 "Run on"). `card` is the
948
+ * stacked size card (`.o-choice--card`: title row, spec, note on `--panel-2`; selected = accent border + ring).
949
+ * The whole card is the radio: click or Space picks it; ← → ↑ ↓ Home End move and pick, roving focus.
950
+ * `columns` sets the grid (default 2). Content is the card's own: `.o-choice__text`, `__title`, `__sub` help.
951
+ */
952
+ export declare class OrrChoicesComponent {
953
+ readonly value: import("@angular/core").ModelSignal<string | null>;
954
+ readonly label: import("@angular/core").InputSignal<string>;
955
+ readonly columns: import("@angular/core").InputSignalWithTransform<number, unknown>;
956
+ /** The stacked card form (the instance sizes). */
957
+ readonly card: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
958
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
959
+ private readonly options;
960
+ /** The option that holds the tab stop: the chosen one, else the first enabled. */
961
+ readonly tabStop: import("@angular/core").Signal<any>;
962
+ pick(v: string): void;
963
+ protected onKey(e: KeyboardEvent): void;
964
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrChoicesComponent, never>;
965
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrChoicesComponent, "orr-choices", never, {
966
+ "value": {
967
+ "alias": "value";
968
+ "required": false;
969
+ "isSignal": true;
970
+ };
971
+ "label": {
972
+ "alias": "label";
973
+ "required": false;
974
+ "isSignal": true;
975
+ };
976
+ "columns": {
977
+ "alias": "columns";
978
+ "required": false;
979
+ "isSignal": true;
980
+ };
981
+ "card": {
982
+ "alias": "card";
983
+ "required": false;
984
+ "isSignal": true;
985
+ };
986
+ "disabled": {
987
+ "alias": "disabled";
988
+ "required": false;
989
+ "isSignal": true;
990
+ };
991
+ }, {
992
+ "value": "valueChange";
993
+ }, ["options"], ["*"], true, never>;
994
+ }
995
+ /** One card of `<orr-choices>`: `value`, `disabled`; the content is the card. */
996
+ export declare class OrrChoiceComponent {
997
+ readonly value: import("@angular/core").InputSignal<string>;
998
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
999
+ protected readonly group: OrrChoicesComponent;
1000
+ readonly host: ElementRef<HTMLElement>;
1001
+ readonly checked: import("@angular/core").Signal<boolean>;
1002
+ readonly off: import("@angular/core").Signal<boolean>;
1003
+ protected choose(): void;
1004
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrChoiceComponent, never>;
1005
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrChoiceComponent, "orr-choice", never, {
1006
+ "value": {
1007
+ "alias": "value";
1008
+ "required": true;
1009
+ "isSignal": true;
1010
+ };
1011
+ "disabled": {
1012
+ "alias": "disabled";
1013
+ "required": false;
1014
+ "isSignal": true;
1015
+ };
1016
+ }, {}, never, ["*"], true, never>;
1017
+ }
1018
+ /**
1019
+ * The one model behind every changed-file list (working tree, a commit, a compare, a session): rows
1020
+ * for a tree or a flat list. Folders carry the aggregate of everything below them (±lines, and the
1021
+ * state when every descendant shares one), single-child folder chains collapse into one row
1022
+ * (`src/webhooks`), folders sort before files, both alphabetically.
1023
+ */
1024
+ /** A changed file. `status` is the VCS letter: A M D R C U ? ! (M when unset; `""` = unchanged, no letter: a file browser). */
1025
+ interface ChangedFile {
1026
+ path: string;
1027
+ status?: string;
1028
+ add?: number;
1029
+ del?: number;
1030
+ /** R: the path before the move. */
1031
+ from?: string;
1032
+ }
1033
+ type FileListMode = "tree" | "flat";
1034
+ /** Same file row data (path, letter, counts, rename source). */
1035
+ export declare function sameChangedFile(a: ChangedFile, b: ChangedFile): boolean;
1036
+ /**
1037
+ * Two file lists with the same rows, in the same order. A host that rebuilds its list on every
1038
+ * poll or stream frame hands the list an equal array: with this as a signal's `equal`, nothing
1039
+ * downstream recomputes and no row re-renders.
1040
+ */
1041
+ export declare function sameChangedFiles(a: readonly ChangedFile[], b: readonly ChangedFile[]): boolean;
1042
+ /** Same visible rows (what `fileRows` gives): the list's `@for` then has nothing to update. */
1043
+ export declare function sameRows(a: readonly FileRow[], b: readonly FileRow[]): boolean;
1044
+ interface FileRow {
1045
+ kind: "dir" | "file";
1046
+ /** Folder rows: the deepest folder of a collapsed chain. */
1047
+ path: string;
1048
+ /** What the row shows: a file name, a folder chain (`src/webhooks`), or in flat mode the file name. */
1049
+ name: string;
1050
+ depth: number;
1051
+ /** Files: the parent folder (flat mode shows it after the name). */
1052
+ dir: string;
1053
+ file?: ChangedFile;
1054
+ /** Files: their letter (M when unset). Folders: the uniform letter of everything below, or "". */
1055
+ state: string;
1056
+ add: number;
1057
+ del: number;
1058
+ }
1059
+ /** The visible rows: folders collapsed in `collapsed` hide what is under them. */
1060
+ export declare function fileRows(files: readonly ChangedFile[], mode?: FileListMode, collapsed?: ReadonlySet<string>): FileRow[];
1061
+ /** The files in the order the tree shows them (all folders open): what next / previous file walk. */
1062
+ export declare function fileOrder(files: readonly ChangedFile[], mode?: FileListMode): string[];
1063
+ type TreeKey = "ArrowDown" | "ArrowUp" | "Home" | "End" | "ArrowRight" | "ArrowLeft" | "Enter" | " ";
1064
+ /** What a key does on the focused row: move the focus, toggle a folder, or open a file. */
1065
+ type TreeMove = {
1066
+ focus: string;
1067
+ } | {
1068
+ toggle: string;
1069
+ } | {
1070
+ open: string;
1071
+ } | null;
1072
+ /** The tree's keyboard model, pure: ↑ ↓ Home End move, → opens / steps in, ← closes / goes to the parent, Enter / Space opens. */
1073
+ export declare function treeKey(rows: readonly FileRow[], focus: string | null, key: string, collapsed: ReadonlySet<string>): TreeMove;
1074
+ /**
1075
+ * `<orr-filetree [files]="files" [(selected)]="path" [(mode)]="mode" />`: the changed-file list
1076
+ * (`.o-changes`, the ADE's diff-file-list). Head: `heading · N`, the ±total, the Tree / Flat switch.
1077
+ * Rows: the VCS letter (`--vcs-*`), the name (flat: + its folder, or `← from` for a rename), ±counts;
1078
+ * folders aggregate and collapse. Keys inside the list: ↑ ↓ Home End move, ← → fold, Enter / Space open.
1079
+ */
1080
+ export declare class OrrFileTreeComponent {
1081
+ readonly files: import("@angular/core").InputSignal<readonly ChangedFile[]>;
1082
+ /** The open file. Two-way: a click, Enter or Space sets it. */
1083
+ readonly selected: import("@angular/core").ModelSignal<string | null>;
1084
+ readonly mode: import("@angular/core").ModelSignal<FileListMode>;
1085
+ readonly heading: import("@angular/core").InputSignal<string>;
1086
+ readonly label: import("@angular/core").InputSignal<string>;
1087
+ readonly emptyText: import("@angular/core").InputSignal<string>;
1088
+ /** Show the head row (title, totals, switch). */
1089
+ readonly head: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1090
+ /** Show the Tree / Flat switch in the head. */
1091
+ readonly toggle: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1092
+ /** A file was opened (click, Enter, Space), also when it already was the selected one. */
1093
+ readonly fileOpen: import("@angular/core").OutputEmitterRef<string>;
1094
+ protected readonly modes: SegOption[];
1095
+ readonly collapsed: import("@angular/core").WritableSignal<ReadonlySet<string>>;
1096
+ private readonly focus;
1097
+ private readonly host;
1098
+ /** `files`, held while a new array carries the same rows: a host's poll or stream frame re-renders nothing. */
1099
+ protected readonly list: import("@angular/core").Signal<readonly ChangedFile[]>;
1100
+ readonly rows: import("@angular/core").Signal<FileRow[]>;
1101
+ readonly totalAdd: import("@angular/core").Signal<number>;
1102
+ readonly totalDel: import("@angular/core").Signal<number>;
1103
+ /** The keyboard focus row: the last one moved to, else the selection, else the first row. */
1104
+ readonly focusPath: import("@angular/core").Signal<string>;
1105
+ protected stateName(s: string): string;
1106
+ setMode(m: FileListMode): void;
1107
+ toggleDir(path: string): void;
1108
+ open(path: string): void;
1109
+ onKey(e: KeyboardEvent): void;
1110
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrFileTreeComponent, never>;
1111
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrFileTreeComponent, "orr-filetree", never, {
1112
+ "files": {
1113
+ "alias": "files";
1114
+ "required": false;
1115
+ "isSignal": true;
1116
+ };
1117
+ "selected": {
1118
+ "alias": "selected";
1119
+ "required": false;
1120
+ "isSignal": true;
1121
+ };
1122
+ "mode": {
1123
+ "alias": "mode";
1124
+ "required": false;
1125
+ "isSignal": true;
1126
+ };
1127
+ "heading": {
1128
+ "alias": "heading";
1129
+ "required": false;
1130
+ "isSignal": true;
1131
+ };
1132
+ "label": {
1133
+ "alias": "label";
1134
+ "required": false;
1135
+ "isSignal": true;
1136
+ };
1137
+ "emptyText": {
1138
+ "alias": "emptyText";
1139
+ "required": false;
1140
+ "isSignal": true;
1141
+ };
1142
+ "head": {
1143
+ "alias": "head";
1144
+ "required": false;
1145
+ "isSignal": true;
1146
+ };
1147
+ "toggle": {
1148
+ "alias": "toggle";
1149
+ "required": false;
1150
+ "isSignal": true;
1151
+ };
1152
+ }, {
1153
+ "selected": "selectedChange";
1154
+ "mode": "modeChange";
1155
+ "fileOpen": "fileOpen";
1156
+ }, never, ["[orrTreeActions]"], true, never>;
1157
+ }
1158
+ /**
1159
+ * Diff lines for `<orr-diff>`: parsed from unified diff text, or computed from the two sides of a
1160
+ * file (line LCS, from the ADE's session-changes). `a` is the old line number, `b` the new one.
1161
+ */
1162
+ type DiffLineKind = "add" | "del" | "ctx" | "hunk";
1163
+ interface DiffLine {
1164
+ t: DiffLineKind;
1165
+ /** Old-side line number (del, ctx). */
1166
+ a?: number;
1167
+ /** New-side line number (add, ctx). */
1168
+ b?: number;
1169
+ text: string;
1170
+ }
1171
+ /** Same diff lines (kind, numbers, text), whatever the array's identity. */
1172
+ export declare function sameLines(a: readonly DiffLine[], b: readonly DiffLine[]): boolean;
1173
+ /** Unified diff text → lines (`---` / `+++` / `diff` / `index` headers dropped; the `+++` path is the file). */
1174
+ export declare function parseUnified(text: string): {
1175
+ lines: DiffLine[];
1176
+ file: string;
1177
+ };
1178
+ /** Every line of the file, old → new, as ctx / del / add (removals before additions). Past `limit` cells the whole file is one replace. */
1179
+ export declare function fileLines(before: string, after: string, limit?: number): DiffLine[];
1180
+ /** The hunks of `before` → `after`: `context` lines around each change, every hunk opened by its `@@` line. */
1181
+ export declare function diffLines(before: string, after: string, context?: number): DiffLine[];
1182
+ /** Whole-file lines (no hunk rows) cut into hunks with `context` lines around each change. */
1183
+ export declare function hunks(all: readonly DiffLine[], context?: number): DiffLine[];
1184
+ /** Index of the first line of each change (a run of add / del lines). */
1185
+ export declare function changeStarts(lines: readonly DiffLine[]): number[];
1186
+ /** The [first, last] line indexes of the change that starts at `start`. */
1187
+ export declare function changeRange(lines: readonly DiffLine[], start: number): [number, number];
1188
+ /** A rendered row: a line (with its index in `lines`) or a fold of `n` unchanged lines starting at `fold`. */
1189
+ type DiffBlock = {
1190
+ line: DiffLine;
1191
+ i: number;
1192
+ } | {
1193
+ fold: number;
1194
+ n: number;
1195
+ };
1196
+ /**
1197
+ * Folds long unchanged runs to `context` lines on each side (none at a hunk or file edge), unless
1198
+ * the run is open (`open` holds its first index) or `whole` is set.
1199
+ */
1200
+ export declare function foldBlocks(lines: readonly DiffLine[], context?: number, open?: ReadonlySet<number>, whole?: boolean): DiffBlock[];
1201
+ /** The +/− counts of a diff. */
1202
+ export declare function diffStat(lines: readonly DiffLine[]): {
1203
+ add: number;
1204
+ del: number;
1205
+ };
1206
+ /** A comment written on a diff line: `line` is the line number on `side`. */
1207
+ interface DiffComment {
1208
+ path: string;
1209
+ line: number;
1210
+ side: "old" | "new";
1211
+ text: string;
1212
+ /** Index of the line in the diff's lines. */
1213
+ index: number;
1214
+ /** The line's own text, for quoting. */
1215
+ quote: string;
1216
+ /** A range's last line (Monaco's drag-select), when it spans more than `line`. */
1217
+ to?: number;
1218
+ /** Every line of the range, when it spans more than one. */
1219
+ lines?: string[];
1220
+ }
1221
+ /** The number a line is known by: its new-side number, or the old one for a removed line. */
1222
+ export declare function lineNo(l: DiffLine): number | null;
1223
+ /** Moves `current` (a change's first line index, -1 for none) to the next / previous change, wrapping. */
1224
+ export declare function stepChange(starts: readonly number[], current: number, dir: 1 | -1): number;
1225
+ /**
1226
+ * `<orr-diff [lines]="lines" file="src/a.ts" />` or `[text]="unifiedDiff"`: a unified diff (`.o-diff`).
1227
+ * Two plain gutters (old, new numbers), the sign, and the text syntax-highlighted (`@getorrery/styles/syntax`,
1228
+ * by `lang` or the file name) over the add / del grounds. Long unchanged runs fold (`context`), unless
1229
+ * `whole` shows the whole file. Keys inside: n / j next change, p / k previous, Enter opens a fold.
1230
+ * With `commentable`, a click on a line number opens a comment box under it; Add emits `comment`.
1231
+ */
1232
+ export declare class OrrDiffComponent {
1233
+ /** The lines; or give `text` (unified diff). */
1234
+ readonly lines: import("@angular/core").InputSignal<readonly DiffLine[] | null>;
1235
+ readonly text: import("@angular/core").InputSignal<string>;
1236
+ /** The file's path (header, comments, language). Falls back to the `+++` path of `text`. */
1237
+ readonly file: import("@angular/core").InputSignal<string>;
1238
+ /** A language id or extension; falls back to the file name. */
1239
+ readonly lang: import("@angular/core").InputSignal<string>;
1240
+ /** Show every line: no folding. */
1241
+ readonly whole: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1242
+ readonly context: import("@angular/core").InputSignalWithTransform<number, unknown>;
1243
+ /** The file header row (`.o-diff__file`). */
1244
+ readonly fileHead: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1245
+ /** No line-number gutters: sign and text only (a config fragment, e.g. Cloud's pending `config.toml` change). */
1246
+ readonly nonum: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1247
+ /** The current change: its first line's index, -1 for none. n / p move it. */
1248
+ readonly current: import("@angular/core").ModelSignal<number>;
1249
+ readonly commentable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1250
+ /** Handle n / j / p / k itself. Off when a parent walks changes across files (the review dialog). */
1251
+ readonly keys: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1252
+ /** Line numbers (new side; old for removed lines) that already carry a comment. */
1253
+ readonly notes: import("@angular/core").InputSignal<readonly number[]>;
1254
+ readonly commentLabel: import("@angular/core").InputSignal<string>;
1255
+ readonly addLabel: import("@angular/core").InputSignal<string>;
1256
+ readonly placeholder: import("@angular/core").InputSignal<string>;
1257
+ readonly emptyText: import("@angular/core").InputSignal<string>;
1258
+ readonly comment: import("@angular/core").OutputEmitterRef<DiffComment>;
1259
+ readonly lineSelect: import("@angular/core").OutputEmitterRef<{
1260
+ index: number;
1261
+ line: DiffLine;
1262
+ }>;
1263
+ protected readonly sign: Record<string, string>;
1264
+ protected readonly sides: readonly ["old", "new"];
1265
+ protected readonly lineNo: typeof lineNo;
1266
+ protected readonly cid: string;
1267
+ private readonly open;
1268
+ readonly commentAt: import("@angular/core").WritableSignal<number | null>;
1269
+ readonly draft: import("@angular/core").WritableSignal<string>;
1270
+ private readonly host;
1271
+ private readonly parsed;
1272
+ /** Held while a new array carries the same lines: no re-fold, no re-highlight. */
1273
+ readonly all: import("@angular/core").Signal<readonly DiffLine[]>;
1274
+ readonly path: import("@angular/core").Signal<string>;
1275
+ readonly language: import("@angular/core").Signal<import("@getorrery/styles/syntax").SyntaxLang | null>;
1276
+ readonly stat: import("@angular/core").Signal<{
1277
+ add: number;
1278
+ del: number;
1279
+ }>;
1280
+ readonly starts: import("@angular/core").Signal<number[]>;
1281
+ readonly blocks: import("@angular/core").Signal<DiffBlock[]>;
1282
+ readonly toks: import("@angular/core").Signal<(SyntaxToken[] | null)[]>;
1283
+ private readonly range;
1284
+ constructor();
1285
+ protected blockKey(b: DiffBlock): string;
1286
+ protected num(l: DiffLine, side: "old" | "new"): number | "";
1287
+ protected gutterSide(l: DiffLine): "old" | "new";
1288
+ protected inCurrent(i: number): boolean;
1289
+ protected noted(l: DiffLine): boolean;
1290
+ openFold(start: number): void;
1291
+ /** Moves to the next (1) or previous (-1) change, wrapping; returns the new current index. */
1292
+ step(dir: 1 | -1): number;
1293
+ openComment(i: number): void;
1294
+ closeComment(): void;
1295
+ addComment(i: number): void;
1296
+ onKey(e: KeyboardEvent): void;
1297
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrDiffComponent, never>;
1298
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrDiffComponent, "orr-diff", never, {
1299
+ "lines": {
1300
+ "alias": "lines";
1301
+ "required": false;
1302
+ "isSignal": true;
1303
+ };
1304
+ "text": {
1305
+ "alias": "text";
1306
+ "required": false;
1307
+ "isSignal": true;
1308
+ };
1309
+ "file": {
1310
+ "alias": "file";
1311
+ "required": false;
1312
+ "isSignal": true;
1313
+ };
1314
+ "lang": {
1315
+ "alias": "lang";
1316
+ "required": false;
1317
+ "isSignal": true;
1318
+ };
1319
+ "whole": {
1320
+ "alias": "whole";
1321
+ "required": false;
1322
+ "isSignal": true;
1323
+ };
1324
+ "context": {
1325
+ "alias": "context";
1326
+ "required": false;
1327
+ "isSignal": true;
1328
+ };
1329
+ "fileHead": {
1330
+ "alias": "fileHead";
1331
+ "required": false;
1332
+ "isSignal": true;
1333
+ };
1334
+ "nonum": {
1335
+ "alias": "nonum";
1336
+ "required": false;
1337
+ "isSignal": true;
1338
+ };
1339
+ "current": {
1340
+ "alias": "current";
1341
+ "required": false;
1342
+ "isSignal": true;
1343
+ };
1344
+ "commentable": {
1345
+ "alias": "commentable";
1346
+ "required": false;
1347
+ "isSignal": true;
1348
+ };
1349
+ "keys": {
1350
+ "alias": "keys";
1351
+ "required": false;
1352
+ "isSignal": true;
1353
+ };
1354
+ "notes": {
1355
+ "alias": "notes";
1356
+ "required": false;
1357
+ "isSignal": true;
1358
+ };
1359
+ "commentLabel": {
1360
+ "alias": "commentLabel";
1361
+ "required": false;
1362
+ "isSignal": true;
1363
+ };
1364
+ "addLabel": {
1365
+ "alias": "addLabel";
1366
+ "required": false;
1367
+ "isSignal": true;
1368
+ };
1369
+ "placeholder": {
1370
+ "alias": "placeholder";
1371
+ "required": false;
1372
+ "isSignal": true;
1373
+ };
1374
+ "emptyText": {
1375
+ "alias": "emptyText";
1376
+ "required": false;
1377
+ "isSignal": true;
1378
+ };
1379
+ }, {
1380
+ "current": "currentChange";
1381
+ "comment": "comment";
1382
+ "lineSelect": "lineSelect";
1383
+ }, never, never, true, never>;
1384
+ }
1385
+ /** `"3,5-7"` (or numbers) → the set of line numbers. */
1386
+ export declare function lineSet(spec: string | readonly number[]): Set<number>;
1387
+ /**
1388
+ * `<orr-code [text]="src" lang="ts" highlight="3,5-7" />`: a read-only file (`.o-code`) with line
1389
+ * numbers and syntax colours (`@getorrery/styles/syntax`); `flat` drops the well's frame.
1390
+ */
1391
+ export declare class OrrCodeComponent {
1392
+ readonly text: import("@angular/core").InputSignal<string>;
1393
+ /** A language id, extension or file name. */
1394
+ readonly lang: import("@angular/core").InputSignal<string>;
1395
+ /** The first line's number. */
1396
+ readonly start: import("@angular/core").InputSignalWithTransform<number, unknown>;
1397
+ /** Lines to mark: `"3,5-7"` or numbers. */
1398
+ readonly highlight: import("@angular/core").InputSignal<string | readonly number[]>;
1399
+ readonly nonum: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1400
+ readonly flat: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1401
+ readonly language: import("@angular/core").Signal<import("@getorrery/styles/syntax").SyntaxLang | null>;
1402
+ readonly marked: import("@angular/core").Signal<Set<number>>;
1403
+ readonly rows: import("@angular/core").Signal<SyntaxToken[][]>;
1404
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrCodeComponent, never>;
1405
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrCodeComponent, "orr-code", never, {
1406
+ "text": {
1407
+ "alias": "text";
1408
+ "required": false;
1409
+ "isSignal": true;
1410
+ };
1411
+ "lang": {
1412
+ "alias": "lang";
1413
+ "required": false;
1414
+ "isSignal": true;
1415
+ };
1416
+ "start": {
1417
+ "alias": "start";
1418
+ "required": false;
1419
+ "isSignal": true;
1420
+ };
1421
+ "highlight": {
1422
+ "alias": "highlight";
1423
+ "required": false;
1424
+ "isSignal": true;
1425
+ };
1426
+ "nonum": {
1427
+ "alias": "nonum";
1428
+ "required": false;
1429
+ "isSignal": true;
1430
+ };
1431
+ "flat": {
1432
+ "alias": "flat";
1433
+ "required": false;
1434
+ "isSignal": true;
1435
+ };
1436
+ }, {}, never, never, true, never>;
1437
+ }
1438
+ /**
1439
+ * Lazy loader for Monaco (B1.1 editor migration). Unlike the CodeMirror setup
1440
+ * in `code-lang.ts` (esm.sh at runtime), Monaco is BUNDLED: `edcore.main.js`
1441
+ * — the editor plus every editor contribution (find widget, folding, bracket
1442
+ * matching, multi-cursor, diff editor) but NONE of the language services — is
1443
+ * pulled in through a dynamic import, so it lands in its own lazy chunk that
1444
+ * loads the first time an editor mounts. Highlighting is Monarch-only via the
1445
+ * per-language `basic-languages` contributions, themselves lazy chunks.
1446
+ */
1447
+ type MonacoApi = typeof monacoApi;
1448
+ /** Load (once) the Monaco editor core; retries are possible after a failure. */
1449
+ export declare function loadMonaco(): Promise<MonacoApi>;
1450
+ /** Resolve a CSS design token to a Monaco-safe #rrggbb(aa) hex, or undefined. */
1451
+ declare function tokenHex(styles: CSSStyleDeclaration, name: string): string | undefined;
1452
+ /**
1453
+ * (Re)define + activate the app-matched Monaco theme. Monaco needs concrete
1454
+ * hex values, so the app's CSS tokens are resolved from the `[data-theme]`
1455
+ * root at call time — call again whenever `ui.tweaks().theme` changes (theme
1456
+ * state is global in Monaco: one call restyles every live editor).
1457
+ */
1458
+ export declare function applyMonacoTheme(monaco: MonacoApi, appTheme: "dark" | "light"): void;
1459
+ /**
1460
+ * Diff-surface options that turn on Monaco's OWN diff overview ruler: a strip
1461
+ * beside the vertical scrollbar carrying one mark per changed region (removed
1462
+ * on the original lane, inserted on the modified lane), so a long file shows
1463
+ * where its changes are at a glance and the strip can be clicked/dragged to
1464
+ * scroll straight to one. Monaco owns the marks — nothing here hand-rolls a
1465
+ * scrollbar overlay. Their colours are the two `diffEditorOverview.*` theme
1466
+ * keys applyMonacoTheme() resolves from --code-add-ink / --code-del-ink, which
1467
+ * is what keeps them correct in both the light and the dark theme.
1468
+ *
1469
+ * `overviewRulerBorder: false` drops the inner editors' own 1px ruler rule,
1470
+ * which would otherwise draw a second vertical line right next to the strip.
1471
+ */
1472
+ export declare function diffOverviewRulerOptions(): {
1473
+ renderOverviewRuler: boolean;
1474
+ overviewRulerBorder: boolean;
1475
+ };
1476
+ /**
1477
+ * Scrollbar geometry that matches the app's own bars (styles.css
1478
+ * `::-webkit-scrollbar`, 9px lane / 5px visible thumb). Monaco's defaults are
1479
+ * 14px vertical and 12px horizontal with the slider filling the whole lane,
1480
+ * which next to a native bar reads as a different widget entirely.
1481
+ *
1482
+ * The app fakes its 5px thumb with a 2px transparent border + background-clip;
1483
+ * Monaco can't do that, but VerticalScrollbar centres the slider in the lane
1484
+ * ((scrollbarSize - sliderSize) / 2), so a 9/5 pair lands in the same place.
1485
+ * Slider size has to be given explicitly — it defaults to the scrollbar size,
1486
+ * not to a padded fraction of it.
1487
+ *
1488
+ * `useShadows` kills the drop shadow Monaco casts over scrolled-away content,
1489
+ * which the app has nowhere else and which dirties --panel. The slider colours
1490
+ * come from the `scrollbarSlider.*` theme keys applyMonacoTheme() resolves.
1491
+ */
1492
+ export declare function monacoScrollbarOptions(): {
1493
+ scrollbar: {
1494
+ verticalScrollbarSize: number;
1495
+ horizontalScrollbarSize: number;
1496
+ verticalSliderSize: number;
1497
+ horizontalSliderSize: number;
1498
+ useShadows: boolean;
1499
+ };
1500
+ overviewRulerBorder: boolean;
1501
+ };
1502
+ /**
1503
+ * Resolve a `langId()` tag to a registered Monaco language id, loading its
1504
+ * Monarch contribution on first use. Unknown tags (or a failed grammar chunk)
1505
+ * resolve to "plaintext" — the file still renders, just untokenized.
1506
+ */
1507
+ export declare function monacoLanguage(lang: string): Promise<string>;
1508
+ /** Canonical CodeMirror grammar tag for a path (""=no grammar / plain text). */
1509
+ export declare function langId(path: string): string;
1510
+ /** The Monaco language for a path, its grammar loaded: "plaintext" when there is none. */
1511
+ export declare function monacoLanguageFor(path: string): Promise<string>;
1512
+ /** The page's theme: light or dark by its code ground (`--well`), whatever the theme is called (graphite, paper, …). */
1513
+ declare function pageTheme(host: HTMLElement): "dark" | "light";
1514
+ /** Handed to `(ready)` each time an editor is built, for what only one app adds (symbol navigation, blame, saved scroll). */
1515
+ interface MonacoDiffReady {
1516
+ monaco: MonacoApi;
1517
+ /** The diff editor; `null` for a new file, which shows in a plain editor. */
1518
+ diff: monacoApi.editor.IStandaloneDiffEditor | null;
1519
+ /** The editor holding the new side (the diff's modified editor, or the plain one). */
1520
+ editor: monacoApi.editor.IStandaloneCodeEditor;
1521
+ }
1522
+ /**
1523
+ * `<orr-monaco-diff [before]="old" [after]="new" path="src/a.ts" />`: a changed file, the one way every
1524
+ * Orrery app shows one (IDE mode, Agent mode, Cloud, the review dialog) — Monaco's diff, read-only,
1525
+ * unchanged regions folded away, opened on its first change, coloured from the app's tokens. Inline by
1526
+ * default with one column of line numbers; `sideBySide` puts the two sides next to each other. A new
1527
+ * file (`before` empty) shows whole, every line marked added. New text for the same `path` refreshes in
1528
+ * place (scroll kept); a new `path` opens on its first change. Monaco loads on first use; until then (or
1529
+ * if it cannot) the new text shows plain.
1530
+ */
1531
+ export declare class OrrMonacoDiffComponent {
1532
+ readonly before: import("@angular/core").InputSignal<string>;
1533
+ readonly after: import("@angular/core").InputSignal<string>;
1534
+ /** The file: picks the grammar; a new path opens on its first change. */
1535
+ readonly path: import("@angular/core").InputSignal<string>;
1536
+ /** `null`: the page's. */
1537
+ readonly theme: import("@angular/core").InputSignal<"dark" | "light" | null>;
1538
+ /** The two sides next to each other (IDE mode's diff tab) instead of inline. */
1539
+ readonly sideBySide: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1540
+ /** Line comments as in IDE mode: hover "+" in the margin, drag a range, write. */
1541
+ readonly commentable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1542
+ /** New-side lines that already carry a comment (marked in the margin). */
1543
+ readonly notes: import("@angular/core").InputSignal<readonly number[]>;
1544
+ /** A new-side line to bring to the centre and mark (the review's current change); `null`: none. */
1545
+ readonly reveal: import("@angular/core").InputSignal<number | null>;
1546
+ /** The new side's model URI (an app's symbol navigation keys on it); `null`: Monaco's own. */
1547
+ readonly modelUri: import("@angular/core").InputSignal<string | null>;
1548
+ /** The host is still fetching the file: the spinner shows, centred, until the text comes. */
1549
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1550
+ /** A comment written on the new side. */
1551
+ readonly comment: import("@angular/core").OutputEmitterRef<DiffComment>;
1552
+ readonly ready: import("@angular/core").OutputEmitterRef<MonacoDiffReady>;
1553
+ private readonly view;
1554
+ /** Monaco is loading or building the editor. */
1555
+ private readonly building;
1556
+ protected readonly busy: import("@angular/core").Signal<boolean>;
1557
+ private monaco;
1558
+ private diff;
1559
+ /** A new file: no old side to diff against (Monaco draws an empty old side as a removed line 1). */
1560
+ private added;
1561
+ private addedMarks;
1562
+ private marks;
1563
+ private comments;
1564
+ /** What the editor shows now: a refresh of the same file keeps its scroll. */
1565
+ private shown;
1566
+ private token;
1567
+ constructor();
1568
+ private editor;
1569
+ private show;
1570
+ /** New text for the file on show: written into the live models (value-guarded), scroll kept. */
1571
+ private refresh;
1572
+ private markAdded;
1573
+ /** The current change (a bar beside it, centred when `scroll`) and the commented lines. */
1574
+ private mark;
1575
+ private attachComments;
1576
+ /** Drops whichever editor is up (diff or added) with its models and comments. */
1577
+ private reset;
1578
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrMonacoDiffComponent, never>;
1579
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrMonacoDiffComponent, "orr-monaco-diff", never, {
1580
+ "before": {
1581
+ "alias": "before";
1582
+ "required": false;
1583
+ "isSignal": true;
1584
+ };
1585
+ "after": {
1586
+ "alias": "after";
1587
+ "required": false;
1588
+ "isSignal": true;
1589
+ };
1590
+ "path": {
1591
+ "alias": "path";
1592
+ "required": false;
1593
+ "isSignal": true;
1594
+ };
1595
+ "theme": {
1596
+ "alias": "theme";
1597
+ "required": false;
1598
+ "isSignal": true;
1599
+ };
1600
+ "sideBySide": {
1601
+ "alias": "sideBySide";
1602
+ "required": false;
1603
+ "isSignal": true;
1604
+ };
1605
+ "commentable": {
1606
+ "alias": "commentable";
1607
+ "required": false;
1608
+ "isSignal": true;
1609
+ };
1610
+ "notes": {
1611
+ "alias": "notes";
1612
+ "required": false;
1613
+ "isSignal": true;
1614
+ };
1615
+ "reveal": {
1616
+ "alias": "reveal";
1617
+ "required": false;
1618
+ "isSignal": true;
1619
+ };
1620
+ "modelUri": {
1621
+ "alias": "modelUri";
1622
+ "required": false;
1623
+ "isSignal": true;
1624
+ };
1625
+ "loading": {
1626
+ "alias": "loading";
1627
+ "required": false;
1628
+ "isSignal": true;
1629
+ };
1630
+ }, {
1631
+ "comment": "comment";
1632
+ "ready": "ready";
1633
+ }, never, never, true, never>;
1634
+ }
1635
+ /** The slice of a ReviewComment the editor needs to render. */
1636
+ interface ReviewCommentLite {
1637
+ id: string;
1638
+ fromLine: number;
1639
+ toLine: number;
1640
+ note: string;
1641
+ }
1642
+ interface CommentHost {
1643
+ /** Persist a new comment on [fromLine, toLine] (1-based, new-side). */
1644
+ save(fromLine: number, toLine: number, note: string): void;
1645
+ /** Delete a saved comment. */
1646
+ remove(id: string): void;
1647
+ }
1648
+ /** Drop comments that no longer fit the document; clamp partial overhangs. */
1649
+ export declare function clampComments(comments: ReviewCommentLite[], docLines: number): ReviewCommentLite[];
1650
+ /**
1651
+ * Monaco port of the inline-review comment UX (review-comments.ext.ts): hover
1652
+ * "+" in the glyph margin, drag range select, inline composer and saved-comment
1653
+ * cards as view zones. Same host contract and the same `rc-*` class names, so
1654
+ * the visual language carries over 1:1.
1655
+ *
1656
+ * Mapping from the CM extension:
1657
+ * - line tints (`rc-covered`/`rc-selected`) → whole-line decorations
1658
+ * - gutter markers (+ / anchor / dot) → glyph-margin decoration classes
1659
+ * (Monaco's glyph margin takes class names, not DOM — the icons are CSS)
1660
+ * - card / composer block widgets → view zones (measured after
1661
+ * mount, then re-laid-out, since zones need an explicit pixel height)
1662
+ */
1663
+ interface MonacoReviewApi {
1664
+ /** Push the current comment list (idempotent). */
1665
+ setComments(comments: ReviewCommentLite[]): void;
1666
+ /** Open the inline composer on a line range (drag-release target). */
1667
+ openComposer(fromLine: number, toLine: number): void;
1668
+ dispose(): void;
1669
+ }
1670
+ /** Saved-comment card — identical structure/classes to the CM widget. */
1671
+ declare function buildCard(c: ReviewCommentLite, onDelete: (id: string) => void): HTMLElement;
1672
+ /** Inline composer — identical structure/classes to the CM widget. */
1673
+ declare function buildComposer(from: number, to: number, cb: {
1674
+ save(note: string): void;
1675
+ cancel(): void;
1676
+ }): HTMLElement;
1677
+ export declare function attachReviewComments(monaco: MonacoApi, editor: monacoApi.editor.IStandaloneCodeEditor, host: CommentHost): MonacoReviewApi;
1678
+ /** A changed file with its diff: ideally every line of the file (`fileLines`), so a review can show it whole. */
1679
+ interface ReviewFile extends ChangedFile {
1680
+ lines: readonly DiffLine[];
1681
+ /** Both sides of the file, when the host read them: the changes view then shows IDE mode's Monaco diff. */
1682
+ before?: string;
1683
+ after?: string;
1684
+ /** Its two sides are being fetched: the view shows the spinner, not the transcript's lines. */
1685
+ reading?: boolean;
1686
+ }
1687
+ /**
1688
+ * Two review lists with the same files and the same lines. The `equal` of a host's changes signal
1689
+ * (and the panel's own): a session's stream or a worktree poll rebuilds the list with nothing
1690
+ * changed, and an equal list must not re-render the tree or re-highlight the diff.
1691
+ */
1692
+ export declare function sameReviewFiles(a: readonly ReviewFile[], b: readonly ReviewFile[]): boolean;
1693
+ /**
1694
+ * Where a review stands: which file, which change in it. Next / previous change walks across files
1695
+ * (past the last change of a file to the first of the next, wrapping); next / previous file wraps.
1696
+ * Files are walked in the order the list shows them.
1697
+ */
1698
+ export declare class ChangesReview {
1699
+ readonly files: import("@angular/core").WritableSignal<readonly ReviewFile[]>;
1700
+ readonly mode: import("@angular/core").WritableSignal<FileListMode>;
1701
+ readonly fileIndex: import("@angular/core").WritableSignal<number>;
1702
+ readonly changeIndex: import("@angular/core").WritableSignal<number>;
1703
+ /** The files in list order. */
1704
+ readonly ordered: import("@angular/core").Signal<ReviewFile[]>;
1705
+ readonly current: import("@angular/core").Signal<ReviewFile | null>;
1706
+ readonly starts: import("@angular/core").Signal<number[]>;
1707
+ /** The current change's first line index in the current file, -1 when it has none. */
1708
+ readonly currentLine: import("@angular/core").Signal<number>;
1709
+ /** `file 2 of 5 · change 1 of 3`. */
1710
+ readonly position: import("@angular/core").Signal<string>;
1711
+ constructor(files?: readonly ReviewFile[], mode?: FileListMode, path?: string | null);
1712
+ /** Opens `path` at its first change. */
1713
+ select(path: string): void;
1714
+ stepFile(dir: 1 | -1): void;
1715
+ stepChange(dir: 1 | -1): void;
1716
+ }
1717
+ /** What the review dialog shows and where its comments go. */
1718
+ interface ChangesExpandContext {
1719
+ review: ChangesReview;
1720
+ /** `Review · stripe-retry`. */
1721
+ title: string;
1722
+ commentable: boolean;
1723
+ /** The comment box label before `path:Lnn` (default `Comment on`). */
1724
+ commentLabel?: string;
1725
+ /** Commented line numbers per path: a snapshot, or a signal so a comment added in the dialog shows at once. */
1726
+ notes: Readonly<Record<string, readonly number[]>> | Signal<Readonly<Record<string, readonly number[]>>>;
1727
+ /** What the diff says for a file with no lines yet. */
1728
+ emptyText?: (path: string) => string;
1729
+ onComment: (c: DiffComment) => void;
1730
+ }
1731
+ /** The new-side line of the change starting at `i`: its first line there, else where a removal sat. */
1732
+ export declare function newSideLine(lines: readonly DiffLine[], i: number): number;
1733
+ /** True when a key event comes from a place the person types in. */
1734
+ export declare function isTyping(e: KeyboardEvent): boolean;
1735
+ /**
1736
+ * The Expand dialog of `orr-changes-panel` (App-00): the file tree on the left, the whole file with
1737
+ * its changes on the right, the current change marked. Keys (scoped to the dialog): N / J next change
1738
+ * and P / K previous, across files; ] / [ next / previous file; Esc (kouji's overlay) closes.
1739
+ * Opened by the panel through `KjDialogService`; `bind()` hands it the review.
1740
+ */
1741
+ export declare class OrrChangesExpandComponent {
1742
+ readonly ctx: import("@angular/core").WritableSignal<ChangesExpandContext | null>;
1743
+ readonly file: Signal<import("@getorrery/ui").ReviewFile | null>;
1744
+ readonly stat: Signal<{
1745
+ add: number;
1746
+ del: number;
1747
+ }>;
1748
+ /** The whole file as one hunk: `@@ -1,old +1,new @@`. */
1749
+ readonly hunk: Signal<string>;
1750
+ /** The current change as a new-side line, for Monaco. */
1751
+ readonly revealLine: Signal<number | null>;
1752
+ readonly ref: KjDialogRef<any, any> | null;
1753
+ protected notesFor(c: ChangesExpandContext, path: string): readonly number[];
1754
+ protected stateWord(s: string | undefined): string;
1755
+ protected stateInk(s: string | undefined): string;
1756
+ bind(ctx: ChangesExpandContext): void;
1757
+ onKey(e: KeyboardEvent): void;
1758
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrChangesExpandComponent, never>;
1759
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrChangesExpandComponent, "orr-changes-expand", never, {}, {}, never, never, true, never>;
1760
+ }
1761
+ /**
1762
+ * The widths of the changes view beside a chat (plan 08 §6): `collapsed` (hidden; the app shows a
1763
+ * counter), `column` (the changed-file tree), `expanded` (the tree and the selected file's diff).
1764
+ */
1765
+ type ChangesState = "collapsed" | "column" | "expanded";
1766
+ /** collapsed → column → expanded → collapsed (Agent mode's C / ⌥C). */
1767
+ export declare function nextChangesState(s: ChangesState): ChangesState;
1768
+ /**
1769
+ * `<orr-changes-panel [files]="files" [(state)]="state" [(selected)]="path" (comment)="…" />`: the
1770
+ * changes column both ADE modes and Cloud reuse (App-00). `column` lists the changed files;
1771
+ * `expanded` adds the selected file's diff beside them; Expand opens the review dialog (tree left,
1772
+ * whole file right). Keys, scoped to the panel: E expand; in `expanded`, N / J and P / K walk the
1773
+ * changes of the file and ] / [ the files; in the dialog N / P walk across files.
1774
+ */
1775
+ export declare class OrrChangesPanelComponent {
1776
+ readonly files: import("@angular/core").InputSignal<readonly ReviewFile[]>;
1777
+ readonly state: import("@angular/core").ModelSignal<ChangesState>;
1778
+ /** The file shown in `expanded` (and where the dialog opens). */
1779
+ readonly selected: import("@angular/core").ModelSignal<string | null>;
1780
+ readonly mode: import("@angular/core").ModelSignal<FileListMode>;
1781
+ readonly heading: import("@angular/core").InputSignal<string>;
1782
+ readonly treeHeading: import("@angular/core").InputSignal<string>;
1783
+ /** The dialog's title, e.g. `Review · stripe-retry`. */
1784
+ readonly reviewTitle: import("@angular/core").InputSignal<string>;
1785
+ readonly commentable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1786
+ /** The host can open a file (an editor, a browser): the diff bar offers Open file (`openFile`). */
1787
+ readonly openable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1788
+ /** What the diff says for a file with no lines (e.g. changed by a command, so no diff reached the client). */
1789
+ readonly emptyText: import("@angular/core").InputSignal<string>;
1790
+ /** Per-file empty text (e.g. "Reading the diff…" while a host still loads it); falls back to `emptyText`. */
1791
+ readonly emptyTextFor: import("@angular/core").InputSignal<((path: string) => string | null) | null>;
1792
+ /** The comment box label before `path:Lnn`, e.g. `Comment for stripe-retry on`. */
1793
+ readonly commentLabel: import("@angular/core").InputSignal<string>;
1794
+ /** The key that cycles the panel in the host (e.g. `⌥C`), appended to the wide toggle's title. */
1795
+ readonly cycleKey: import("@angular/core").InputSignal<string>;
1796
+ /** Commented line numbers per path (shown as "in review"). */
1797
+ readonly notes: import("@angular/core").InputSignal<Readonly<Record<string, readonly number[]>>>;
1798
+ readonly comment: import("@angular/core").OutputEmitterRef<DiffComment>;
1799
+ readonly openFile: import("@angular/core").OutputEmitterRef<string>;
1800
+ /** The Expand dialog is open. */
1801
+ readonly expandOpen: import("@angular/core").WritableSignal<boolean>;
1802
+ readonly currentChange: import("@angular/core").WritableSignal<number>;
1803
+ private readonly diff;
1804
+ private readonly dialog;
1805
+ private readonly host;
1806
+ private readonly injector;
1807
+ /** `files`, held while a new array carries the same files and lines: a host's poll or stream frame re-renders nothing. */
1808
+ readonly list: import("@angular/core").Signal<readonly ReviewFile[]>;
1809
+ /** File paths in list order. */
1810
+ readonly order: import("@angular/core").Signal<string[]>;
1811
+ /** The shown file: the selection, else the first in list order. */
1812
+ readonly current: import("@angular/core").Signal<ReviewFile | null>;
1813
+ readonly stat: import("@angular/core").Signal<{
1814
+ add: number;
1815
+ del: number;
1816
+ }>;
1817
+ readonly wideLabel: import("@angular/core").Signal<string>;
1818
+ /** The review the Expand dialog walks while it is open: it follows `files` (diffs a host reads late land in it). */
1819
+ private readonly review;
1820
+ /** The files the Expand dialog shows, from the current one on (null while it is closed): a host reading diffs lazily reads these. */
1821
+ readonly reviewing: import("@angular/core").Signal<string[] | null>;
1822
+ constructor();
1823
+ protected emptyFor(path: string): string;
1824
+ protected notesFor(path: string): readonly number[];
1825
+ toggleWide(): void;
1826
+ collapse(): void;
1827
+ /** collapsed → column → expanded → collapsed. */
1828
+ cycle(): void;
1829
+ /** A file picked in the list: show its diff beside the list. */
1830
+ pick(path: string): void;
1831
+ selectFile(path: string): void;
1832
+ /** Next / previous file in list order, wrapping. */
1833
+ stepFile(dir: 1 | -1): void;
1834
+ /** Opens the review dialog on the shown file; closing it keeps the file it ended on. */
1835
+ openExpand(): void;
1836
+ onKey(e: KeyboardEvent): void;
1837
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrChangesPanelComponent, never>;
1838
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrChangesPanelComponent, "orr-changes-panel", never, {
1839
+ "files": {
1840
+ "alias": "files";
1841
+ "required": false;
1842
+ "isSignal": true;
1843
+ };
1844
+ "state": {
1845
+ "alias": "state";
1846
+ "required": false;
1847
+ "isSignal": true;
1848
+ };
1849
+ "selected": {
1850
+ "alias": "selected";
1851
+ "required": false;
1852
+ "isSignal": true;
1853
+ };
1854
+ "mode": {
1855
+ "alias": "mode";
1856
+ "required": false;
1857
+ "isSignal": true;
1858
+ };
1859
+ "heading": {
1860
+ "alias": "heading";
1861
+ "required": false;
1862
+ "isSignal": true;
1863
+ };
1864
+ "treeHeading": {
1865
+ "alias": "treeHeading";
1866
+ "required": false;
1867
+ "isSignal": true;
1868
+ };
1869
+ "reviewTitle": {
1870
+ "alias": "reviewTitle";
1871
+ "required": false;
1872
+ "isSignal": true;
1873
+ };
1874
+ "commentable": {
1875
+ "alias": "commentable";
1876
+ "required": false;
1877
+ "isSignal": true;
1878
+ };
1879
+ "openable": {
1880
+ "alias": "openable";
1881
+ "required": false;
1882
+ "isSignal": true;
1883
+ };
1884
+ "emptyText": {
1885
+ "alias": "emptyText";
1886
+ "required": false;
1887
+ "isSignal": true;
1888
+ };
1889
+ "emptyTextFor": {
1890
+ "alias": "emptyTextFor";
1891
+ "required": false;
1892
+ "isSignal": true;
1893
+ };
1894
+ "commentLabel": {
1895
+ "alias": "commentLabel";
1896
+ "required": false;
1897
+ "isSignal": true;
1898
+ };
1899
+ "cycleKey": {
1900
+ "alias": "cycleKey";
1901
+ "required": false;
1902
+ "isSignal": true;
1903
+ };
1904
+ "notes": {
1905
+ "alias": "notes";
1906
+ "required": false;
1907
+ "isSignal": true;
1908
+ };
1909
+ }, {
1910
+ "state": "stateChange";
1911
+ "selected": "selectedChange";
1912
+ "mode": "modeChange";
1913
+ "comment": "comment";
1914
+ "openFile": "openFile";
1915
+ }, never, ["[orrPanelHead]"], true, never>;
1916
+ }
1917
+ type OrrLogoName = "monogram" | "eccentric" | "rings" | "parallel" | "stencil";
1918
+ type OrrLogoType = "default" | "pixel";
1919
+ /** Aliases work too: blocked, needs, executing, working, boot, queued, waiting-for-you, spinner. */
1920
+ type OrrLogoState = "static" | "idle" | "thinking" | "running" | "needs-you" | "waiting" | "done" | "error" | "offline" | "loading" | "loader" | (string & {});
1921
+ /**
1922
+ * The mark every app draws unless an `<orr-logo>` says otherwise: switch it here, once, and every
1923
+ * front end follows (the design's `OrrLogo.fallback` / `<html data-logo>`).
1924
+ */
1925
+ export declare const ORRERY_LOGO: {
1926
+ logo: OrrLogoName;
1927
+ type: OrrLogoType;
1928
+ };
1929
+ interface LogoOptions {
1930
+ logo?: string;
1931
+ type?: string;
1932
+ state?: string;
1933
+ size?: number | "fill";
1934
+ wordmark?: boolean;
1935
+ plate?: boolean;
1936
+ label?: string;
1937
+ color?: string | null;
1938
+ light?: boolean;
1939
+ /** The extensions finish: painted with the level colours (or `color`) under the light-streak texture. Vector only. */
1940
+ shader?: boolean;
1941
+ }
1942
+ /** The shadow-root markup of one `<orr-logo>`: the design's render, as a function. */
1943
+ export declare function logoMarkup(o: LogoOptions): string;
1944
+ /**
1945
+ * `<orr-logo>`: the Orrery mark in every agent state, as vector or pixel art, the same generator as
1946
+ * the design (`scripts/design/sync-logo.mjs`). `wordmark` writes "Orrery" with the mark as its O;
1947
+ * `plate` is the app-icon form; `size="fill"` fills the parent; `shader` paints it with the extensions
1948
+ * colour field. Which mark: `logo`, else ORRERY_LOGO.
1949
+ */
1950
+ export declare class OrrLogoComponent {
1951
+ readonly logo: import("@angular/core").InputSignal<OrrLogoName | undefined>;
1952
+ readonly type: import("@angular/core").InputSignal<OrrLogoType | undefined>;
1953
+ readonly state: import("@angular/core").InputSignal<OrrLogoState>;
1954
+ /** px, or "fill"; a wordmark without a size takes the surrounding font size. */
1955
+ readonly size: import("@angular/core").InputSignalWithTransform<number | "fill" | undefined, unknown>;
1956
+ readonly wordmark: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1957
+ readonly plate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1958
+ readonly label: import("@angular/core").InputSignal<string>;
1959
+ /** Tints the brand states instead of the gradient. */
1960
+ readonly color: import("@angular/core").InputSignal<string | null>;
1961
+ /** Paper surfaces; unset, the nearest `data-theme` ancestor decides ("paper" = light). */
1962
+ readonly light: import("@angular/core").InputSignal<boolean | undefined>;
1963
+ /** The extensions finish: every level's colour (or `color`) under the light-streak texture. Vector only. */
1964
+ readonly shader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1965
+ constructor();
1966
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrrLogoComponent, never>;
1967
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrrLogoComponent, "orr-logo", never, {
1968
+ "logo": {
1969
+ "alias": "logo";
1970
+ "required": false;
1971
+ "isSignal": true;
1972
+ };
1973
+ "type": {
1974
+ "alias": "type";
1975
+ "required": false;
1976
+ "isSignal": true;
1977
+ };
1978
+ "state": {
1979
+ "alias": "state";
1980
+ "required": false;
1981
+ "isSignal": true;
1982
+ };
1983
+ "size": {
1984
+ "alias": "size";
1985
+ "required": false;
1986
+ "isSignal": true;
1987
+ };
1988
+ "wordmark": {
1989
+ "alias": "wordmark";
1990
+ "required": false;
1991
+ "isSignal": true;
1992
+ };
1993
+ "plate": {
1994
+ "alias": "plate";
1995
+ "required": false;
1996
+ "isSignal": true;
1997
+ };
1998
+ "label": {
1999
+ "alias": "label";
2000
+ "required": false;
2001
+ "isSignal": true;
2002
+ };
2003
+ "color": {
2004
+ "alias": "color";
2005
+ "required": false;
2006
+ "isSignal": true;
2007
+ };
2008
+ "light": {
2009
+ "alias": "light";
2010
+ "required": false;
2011
+ "isSignal": true;
2012
+ };
2013
+ "shader": {
2014
+ "alias": "shader";
2015
+ "required": false;
2016
+ "isSignal": true;
2017
+ };
2018
+ }, {}, never, never, true, never>;
2019
+ }
2020
+ export declare const OrrLogo: {
2021
+ LOGOS: string[];
2022
+ STATES: string[];
2023
+ fallback: string;
2024
+ /** the logo in effect for an element: nearest data-logo up the tree (across shadow roots), else the fallback */
2025
+ resolve(el: any): any;
2026
+ light(el: any): boolean;
2027
+ state(v: any): any;
2028
+ /** markup for one mark: { css, defs, body } in a 200-unit box (memoised) */
2029
+ draw(logo: any, state: any, type: any, light: any, color: any, shader: any): any;
2030
+ word(logo: any, state: any, light: any, color: any): any;
2031
+ /** switch the mark everywhere in this document */
2032
+ use(logo: any): void;
2033
+ };
2034
+ export type { BadgeTone, ChangedFile, ChangesExpandContext, ChangesState, CommentHost, DialogCloseReason, DiffBlock, DiffComment, DiffLine, DiffLineKind, DotState, FileListMode, FileRow, IconSize, LogoOptions, MeterTone, MonacoApi, MonacoDiffReady, MonacoReviewApi, OrrLogoName, OrrLogoState, OrrLogoType, ReviewCommentLite, ReviewFile, SegOption, SelectGroup, SelectOption, SelectRun, TreeMove };