chore: update TypeScript build info cache

This commit is contained in:
2025-10-01 08:20:34 -04:00
parent fe4c968367
commit 89c8315820
140 changed files with 4635 additions and 81773 deletions
@@ -0,0 +1,157 @@
import { Component, ChangeDetectionStrategy, input, output, signal, computed, inject, effect } from '@angular/core';
import { CommonModule } from '@angular/common';
import { GraphViewComponent, GraphDisplayOptions } from '../graph-view/graph-view.component';
import { GraphOptionsPanelComponent, GraphOptions } from '../graph-options-panel/graph-options-panel.component';
import { GraphData } from '../../types';
import { NoteIndexService } from '../../services/note-index.service';
@Component({
selector: 'app-graph-view-container',
standalone: true,
imports: [CommonModule, GraphViewComponent, GraphOptionsPanelComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<div class="graph-view-container flex h-full w-full">
<!-- Graph View -->
<div class="flex-1 relative">
<app-graph-view
[graphData]="graphData()"
[displayOptions]="displayOptions()"
(nodeSelected)="onNodeSelected($event)">
</app-graph-view>
<!-- Toggle Options Button (Mobile) -->
<button
type="button"
(click)="toggleOptionsPanel()"
class="md:hidden absolute bottom-4 right-4 bg-blue-600 hover:bg-blue-700 text-white p-3 rounded-full shadow-lg transition-colors z-10">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" />
</svg>
</button>
</div>
<!-- Options Panel -->
<div
class="options-panel-wrapper"
[class.open]="optionsPanelOpen()"
[class.hidden]="!optionsPanelOpen() && isMobile()">
<app-graph-options-panel
(optionsChanged)="onOptionsChanged($event)"
(animateRequested)="onAnimateRequested()">
</app-graph-options-panel>
</div>
<!-- Overlay for mobile -->
@if (optionsPanelOpen() && isMobile()) {
<div
class="fixed inset-0 bg-black bg-opacity-50 z-40 md:hidden"
(click)="toggleOptionsPanel()">
</div>
}
</div>
`,
styles: [`
.graph-view-container {
position: relative;
}
.options-panel-wrapper {
transition: transform 0.3s ease-out;
}
@media (max-width: 768px) {
.options-panel-wrapper {
position: fixed;
bottom: 0;
right: 0;
left: 0;
max-height: 70vh;
transform: translateY(100%);
z-index: 50;
box-shadow: 0 -4px 6px -1px rgba(0, 0, 0, 0.1);
}
.options-panel-wrapper.open {
transform: translateY(0);
}
}
@media (min-width: 769px) {
.options-panel-wrapper {
display: block !important;
}
}
`]
})
export class GraphViewContainerComponent {
centerNoteId = input<string>();
nodeSelected = output<string>();
private noteIndexService = inject(NoteIndexService);
optionsPanelOpen = signal(false);
graphData = computed<GraphData>(() => {
const centerNote = this.centerNoteId();
if (!centerNote) {
return this.noteIndexService.buildFullGraphData();
}
return this.noteIndexService.buildGraphData(centerNote, 2);
});
displayOptions = signal<GraphDisplayOptions>({
showArrows: true,
textFadeThreshold: 50,
nodeSize: 5,
linkThickness: 1,
chargeStrength: -100,
linkDistance: 100,
centerStrength: 0.05,
centerNodeId: undefined
});
constructor() {
effect(() => {
const centerNote = this.centerNoteId();
if (centerNote) {
this.displayOptions.update(opts => ({
...opts,
centerNodeId: centerNote
}));
}
});
}
onOptionsChanged(options: GraphOptions): void {
this.displayOptions.update(current => ({
...current,
showArrows: options.display.showArrows,
textFadeThreshold: options.display.textFadeThreshold,
nodeSize: options.display.nodeSize,
linkThickness: options.display.linkThickness,
chargeStrength: options.forces.chargeStrength,
linkDistance: options.forces.linkDistance,
centerStrength: options.forces.centerStrength
}));
}
onAnimateRequested(): void {
// Trigger animation restart
// The graph component will handle this via its effect on displayOptions
this.displayOptions.update(opts => ({ ...opts }));
}
onNodeSelected(nodeId: string): void {
this.nodeSelected.emit(nodeId);
}
toggleOptionsPanel(): void {
this.optionsPanelOpen.update(open => !open);
}
isMobile(): boolean {
return typeof window !== 'undefined' && window.innerWidth < 769;
}
}