Initial import

This commit is contained in:
how2ice
2026-04-21 03:33:23 +09:00
commit 9e4b70f1f1
495 changed files with 94680 additions and 0 deletions

45
src/samples/registry.ts Executable file
View File

@@ -0,0 +1,45 @@
import type { SampleMeta, SampleModule } from '../widgets/core';
export type SampleEntry = {
modulePath: string;
load: () => Promise<SampleModule>;
};
export type LoadedSampleEntry = {
modulePath: string;
Sample: SampleModule['Sample'];
sampleMeta: SampleMeta;
};
function sortSamples(left: LoadedSampleEntry, right: LoadedSampleEntry) {
return (
left.sampleMeta.componentId.localeCompare(right.sampleMeta.componentId) ||
Number(right.sampleMeta.kind === 'base') - Number(left.sampleMeta.kind === 'base') ||
(left.sampleMeta.order ?? Number.MAX_SAFE_INTEGER) -
(right.sampleMeta.order ?? Number.MAX_SAFE_INTEGER) ||
left.sampleMeta.title.localeCompare(right.sampleMeta.title)
);
}
export async function resolveSampleEntries(
entries: SampleEntry[],
pathFilter?: string,
) {
const filteredEntries = pathFilter
? entries.filter((entry) => entry.modulePath.includes(pathFilter))
: entries;
const loadedEntries = await Promise.all(
filteredEntries.map(async (entry) => {
const moduleExports = await entry.load();
return {
modulePath: entry.modulePath,
Sample: moduleExports.Sample,
sampleMeta: moduleExports.sampleMeta,
} satisfies LoadedSampleEntry;
}),
);
return loadedEntries.sort(sortSamples);
}