Monorepo for Tangled tangled.org
5 folders · 134 files

blame
issues
pipelines
pulls
tickets
BlobHeader.stories.svelte
BlobHeader.svelte
BlobView.stories.svelte
BlobView.svelte
BranchList.stories.svelte
BranchList.svelte
branchOptions.ts
BranchTable.stories.svelte
BranchTable.svelte
CloneDropdown.stories.svelte
CloneDropdown.svelte
CommitAuthor.svelte
CommitBodyToggle.svelte
CommitHeader.stories.svelte
CommitHeader.svelte
CommitList.stories.svelte
CommitList.svelte
CommitLogView.stories.svelte
CommitLogView.svelte
CommitRow.stories.svelte
CommitRow.svelte
CommitRows.svelte
CommitShaButton.svelte
CommitSignature.stories.svelte
CommitSignature.svelte
CommitSignOff.svelte
CommitSubject.svelte
CommitView.stories.svelte
CommitView.svelte
CompareView.svelte
DiffCodeView.svelte
DiffFileHeader.svelte
DiffFiles.svelte
DiffFileTree.stories.svelte
DiffFileTree.svelte
diffQueue.test.ts
diffQueue.ts
diffRpc.ts
DiffStatPill.stories.svelte
DiffStatPill.svelte
DiffView.stories.svelte
DiffView.svelte
diffWorker.ts
EmptyRepo.stories.svelte
EmptyRepo.svelte
EntitySubscribeButton.stories.svelte
EntitySubscribeButton.svelte
fileAnchor.svelte.ts
FileCardHeader.stories.svelte
FileCardHeader.svelte
fileDiff.test.ts
fileDiff.ts
FileHistoryView.stories.svelte
FileHistoryView.svelte
FilePathChip.svelte
FileTree.stories.svelte
FileTree.svelte
ForkList.bones.stories.svelte
ForkList.svelte
importPoll.test.ts
importPoll.ts
KnotUpgradeTag.stories.svelte
KnotUpgradeTag.svelte
LabelPanel.stories.svelte
LabelPanel.svelte
LabelSummary.svelte
languageColors.ts
LanguageList.stories.svelte
LanguageList.svelte
LanguageStats.stories.svelte
LanguageStats.svelte
LastCommitPanel.stories.svelte
LastCommitPanel.svelte
lineAnchor.test.ts
lineAnchor.ts
LineHandles.svelte
OwnerTitle.svelte
PanelHeader.stories.svelte
PanelHeader.svelte
pierre.ts
pierreDiff.css
PierreFile.stories.svelte
PierreFile.svelte
Readme.stories.svelte
Readme.svelte
RefChip.stories.svelte
RefChip.svelte
RefSelector.stories.svelte
RefSelector.svelte
RepoCard.stories.svelte
RepoCard.svelte
RepoCardContent.svelte
RepoChrome.stories.svelte
RepoChrome.svelte
RepoCreationForm.svelte
RepoCrumbs.stories.svelte
RepoCrumbs.svelte
RepoForkForm.stories.svelte
RepoForkForm.svelte
RepoHeader.stories.svelte
RepoHeader.svelte
RepoIndexPanelSkeleton.svelte
RepoIndexView.stories.svelte
RepoIndexView.svelte
RepoReadmeSkeleton.svelte
RepoSection.svelte
RepoTabs.stories.svelte
RepoTabs.svelte
RepoToolbar.stories.svelte
RepoToolbar.svelte
ServicePicker.stories.svelte
ServicePicker.svelte
SourceSelector.svelte
StarButton.stories.svelte
StarButton.svelte
StarredBy.bones.stories.svelte
StarredBy.svelte
StarredByContent.svelte
SubjectLabelPanel.svelte
SubscribeButton.stories.svelte
SubscribeButton.svelte
TagArtifacts.svelte
TagCard.stories.svelte
TagCard.svelte
TagList.stories.svelte
TagList.svelte
TopicList.stories.svelte
TopicList.svelte
TreeHeader.stories.svelte
TreeHeader.svelte
TreeView.bones.stories.svelte
types.ts
urls.test.ts
urls.ts
Readme.svelte
<script lang="ts">
	import FileText from "$icon/file-text";
	import PanelHeader from "#lib/components/repo/PanelHeader.svelte";
	import LayerCard from "#lib/components/ui/LayerCard.svelte";
	import LayerCardPrimary from "#lib/components/ui/LayerCardPrimary.svelte";
	import LayerCardSecondary from "#lib/components/ui/LayerCardSecondary.svelte";
	import { mermaidDiagrams } from "#lib/components/ui/mermaidDiagrams.ts";

	interface Props {
		filename: string;
		contents: string;
		html?: string | null;
	}

	let { filename, contents, html = null }: Props = $props();
</script>

<LayerCard class="mt-md w-full defer-render-256">
	<LayerCardSecondary class="min-h-[calc(2.5rem-2*var(--layer-gap))] py-0">
		<PanelHeader title={filename} icon={FileText} />
	</LayerCardSecondary>
	<LayerCardPrimary padding="none">
		{#if html}
			<div
				data-testid="renderedMarkdownBody"
				class="markup overflow-x-auto px-xl py-md"
				use:mermaidDiagrams={html}
			>
				<!-- eslint-disable-next-line svelte/no-at-html-tags -- sanitised in $lib/markup -->
				{@html html}
			</div>
		{:else}
			<div class="overflow-x-auto px-xl py-md">
				<pre
					class="typography-monospace-small whitespace-pre text-foreground-default">{contents}</pre>
			</div>
		{/if}
	</LayerCardPrimary>
</LayerCard>