Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/dull-rats-wonder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ryanatkn/orc': patch
---

publish sample data
5 changes: 5 additions & 0 deletions .changeset/shy-oranges-return.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ryanatkn/orc': patch
---

add `Modules_Detail.svelte` and `Modules_Menu.svelte`
22 changes: 0 additions & 22 deletions gro.config.ts

This file was deleted.

14 changes: 14 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,16 @@
"default": "./dist/github.js",
"types": "./dist/github.d.ts"
},
"./Modules_Detail.svelte": {
"svelte": "./dist/Modules_Detail.svelte",
"default": "./dist/Modules_Detail.svelte",
"types": "./dist/Modules_Detail.svelte.d.ts"
},
"./Modules_Menu.svelte": {
"svelte": "./dist/Modules_Menu.svelte",
"default": "./dist/Modules_Menu.svelte",
"types": "./dist/Modules_Menu.svelte.d.ts"
},
"./package.gen.js": {
"default": "./dist/package.gen.js",
"types": "./dist/package.gen.d.ts"
Expand All @@ -103,6 +113,10 @@
"default": "./dist/package.js",
"types": "./dist/package.d.ts"
},
"./packages.json": {
"default": "./dist/packages.json",
"types": "./dist/packages.json.d.ts"
},
"./packages.task.js": {
"default": "./dist/packages.task.js",
"types": "./dist/packages.task.d.ts"
Expand Down
147 changes: 147 additions & 0 deletions src/lib/Modules_Detail.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<script lang="ts">
import type {PackageMeta} from '@fuz.dev/fuz_library/package_meta.js';
import type {Package_Module} from '@grogarden/gro/package_json.js';
import {ensure_end} from '@grogarden/util/string.js';
import {base} from '$app/paths';

import Modules_Menu from '$lib/Modules_Menu.svelte';

export let pkgs: Array<PackageMeta | {url: string; package_json: null}>; // TODO normalized version with cached primitives?

// TODO extract to Orc

// TODO add sorting options

// TODO show other data (bytes and lines of code per module?)

// TODO pretty hacky, needs helpers or rethinking
let pkgs_modules: Array<{
pkg: PackageMeta;
modules: Package_Module[];
}>;
$: pkgs_modules = pkgs.reduce(
(v, pkg) => {
if (!pkg.package_json?.modules) return v;
v.push({pkg, modules: Object.values(pkg.package_json.modules)});
return v;
},
[] as Array<{pkg: PackageMeta; modules: Package_Module[]}>,
);
</script>

<div class="modules_detail">
<div class="menu_wrapper">
<Modules_Menu {pkgs_modules} />
</div>
<ul class="width_md">
{#each pkgs_modules as pkg_modules (pkg_modules)}
{@const {pkg, modules} = pkg_modules}
<div class="width_md relative">
<a href="#{pkg.name}" id={pkg.name} class="subtitle">🔗</a>
</div>
<ul>
{#each modules as pkg_module (pkg_module)}
{@const {path, declarations} = pkg_module}
<li
class="module"
class:ts={path.endsWith('.ts')}
class:svelte={path.endsWith('.svelte')}
class:css={path.endsWith('.css')}
class:json={path.endsWith('.json')}
>
<div>
{#if pkg.repo_url}
<div class="chip row">
<a href="{base}/tree/{pkg.repo_name}">{pkg.name}</a>/<a
href="{ensure_end(pkg.repo_url, '/')}blob/main/src/lib/">{path}</a
>
</div>
{:else}
<span class="chip"><a href="{base}/tree/{pkg.repo_name}">{pkg.name}</a>/{path}</span
>
{/if}
</div>
<ul class="declarations">
{#each declarations as { name, kind }}
<li
class="declaration chip"
class:variable_declaration={kind === 'VariableDeclaration'}
class:type_declaration={kind === 'InterfaceDeclaration' ||
kind === 'TypeAliasDeclaration'}
class:class_declaration={kind === 'ClassDeclaration'}
>
{name}
</li>
{/each}
</ul>
</li>
{/each}
</ul>
{/each}
</ul>
</div>

<!-- TODO better rendering, also show author, etc -->

<style>
.modules_detail {
position: relative;
padding: var(--spacing_lg);
display: flex;
flex-direction: row;
align-items: flex-start;
width: 100%;
gap: var(--spacing_1);
}
.subtitle {
position: absolute;
right: calc(-1 * (1rem + var(--spacing_2)));
top: 0;
text-align: right;
}
.module {
margin-bottom: var(--spacing_xs);
--link_color: var(--text_2);
}
.ts {
--link_color: var(--color_1);
}
.svelte {
--link_color: var(--color_4);
}
.css {
--link_color: var(--color_2);
}
.json {
--link_color: var(--color_6);
}
/* TODO extract */
.declarations {
display: flex;
flex: 1;
flex-direction: row;
flex-wrap: wrap;
align-items: flex-start;
gap: var(--spacing_xs);
padding-left: var(--spacing_xs);
}
.declaration {
font-family: var(--font_family_mono);
font-size: var(--size_sm);
}
.variable_declaration {
color: var(--color_3);
}
.type_declaration {
color: var(--color_7);
}
.class_declaration {
color: var(--color_6);
}
/* TODO extract */
.menu_wrapper {
position: sticky;
top: var(--spacing_1);
display: flex;
}
</style>
43 changes: 43 additions & 0 deletions src/lib/Modules_Menu.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<script lang="ts">
import {page} from '$app/stores';
import LibraryPanel from '@fuz.dev/fuz_library/LibraryPanel.svelte';

import type {PackageMeta} from '@fuz.dev/fuz_library/package_meta.js';
import type {Package_Module} from '@grogarden/gro/package_json.js';

// TODO add highlighting of the items that are onscreen

// LibraryMenu floats alongside the docs, showing scrolled item as active
export let pkgs_modules: Array<{
pkg: PackageMeta;
modules: Package_Module[];
}>;
</script>

<LibraryPanel>
<div class="library_menu">
<h6>packages</h6>
<menu>
{#each pkgs_modules as pkg_modules (pkg_modules)}
<li role="none">
<a href="#{pkg_modules.pkg.name}" class:selected={pkg_modules.pkg.name === $page.url.hash}
>{pkg_modules.pkg.name}</a
>
</li>
{/each}
</menu>
</div>
</LibraryPanel>

<style>
.library_menu,
menu {
width: 100%;
}
h6 {
padding-bottom: var(--spacing_sm);
}
h6:not(:first-child) {
margin-top: var(--spacing_1);
}
</style>
14 changes: 14 additions & 0 deletions src/lib/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,19 @@ export const package_json = {
types: './dist/fs_fetch_cache.d.ts',
},
'./github.js': {default: './dist/github.js', types: './dist/github.d.ts'},
'./Modules_Detail.svelte': {
svelte: './dist/Modules_Detail.svelte',
default: './dist/Modules_Detail.svelte',
types: './dist/Modules_Detail.svelte.d.ts',
},
'./Modules_Menu.svelte': {
svelte: './dist/Modules_Menu.svelte',
default: './dist/Modules_Menu.svelte',
types: './dist/Modules_Menu.svelte.d.ts',
},
'./package.gen.js': {default: './dist/package.gen.js', types: './dist/package.gen.d.ts'},
'./package.js': {default: './dist/package.js', types: './dist/package.d.ts'},
'./packages.json': {default: './dist/packages.json', types: './dist/packages.json.d.ts'},
'./packages.task.js': {default: './dist/packages.task.js', types: './dist/packages.task.d.ts'},
'./Repo_Table.svelte': {
svelte: './dist/Repo_Table.svelte',
Expand Down Expand Up @@ -121,11 +132,14 @@ export const package_json = {
{name: 'fetch_github_pull_requests', kind: 'VariableDeclaration'},
],
},
'./Modules_Detail.svelte': {path: 'Modules_Detail.svelte', declarations: []},
'./Modules_Menu.svelte': {path: 'Modules_Menu.svelte', declarations: []},
'./package.gen.js': {path: 'package.gen.ts', declarations: []},
'./package.js': {
path: 'package.ts',
declarations: [{name: 'package_json', kind: 'VariableDeclaration'}],
},
'./packages.json': {path: 'packages.json', declarations: []},
'./packages.task.js': {
path: 'packages.task.ts',
declarations: [
Expand Down
Loading