neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
타입 안전하고 프레임워크 무관한 반응형 값 유틸리티, 스토어·스토리지·미디어쿼리 등 제공, React·Vue·Solid·Svelte 바인딩 지원
Type-safe, framework-agnostic utilities for reactive values: stores, storage, media queries and more, with bindings for React, Vue, Solid and Svelte.
개발 도구TypeScript · CSSGitHub @letstri온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Type-safe reactive primitives with one contract: get(), subscribe(), set(). Works with in-memory state, validated localStorage / IndexedDB, media queries, scroll position, element size. Bindings for React, Vue, Solid, Svelte. SSR-safe.
Import from an entry point (seitu, seitu/web, seitu/react, seitu/vue, seitu/solid, seitu/svelte, seitu/utils) or from a single feature to pull in nothing else:README 전문 보기 ↗Type-safe reactive primitives with one contract: get(), subscribe(), set(). Works with in-memory state, validated localStorage / IndexedDB, media queries, scroll position, element size. Bindings for React, Vue, Solid, Svelte. SSR-safe.
pnpm add seitu
Import from an entry point (seitu, seitu/web, seitu/react, seitu/vue, seitu/solid, seitu/svelte, seitu/utils) or from a single feature to pull in nothing else:
import { createStore } from 'seitu/core/store'
import { createWebStorage } from 'seitu/web/web-storage'
import { createComputed, createStore } from 'seitu'
const cart = createStore({ items: [{ price: 10, qty: 2 }], coupon: 0.1 })
const total = createComputed(
cart,
(c) => c.items.reduce((s, i) => s + i.price * i.qty, 0) * (1 - c.coupon)
)
total.get() // 18
cart.set((c) => ({ ...c, coupon: 0 }))
total.subscribe((t) => console.log(t)) // 20
import { createDebounced, createDebouncedFn, createStore } from 'seitu'
const query = createStore('')
createDebounced(query, 300).subscribe((q) => fetch(`/search?q=${q}`))
const save = createDebouncedFn((draft: string) => api.save(draft), 500)
save('hello') // runs after 500 ms of silence
save.flush() // or now
localStorageimport { createWebStorage, createWebStorageValue } from 'seitu/web'
import * as z from 'zod'
const settings = createWebStorage({
type: 'localStorage',
schemas: {
theme: z.enum(['light', 'dark']),
sidebar: z.object({ open: z.boolean() }),
},
defaultValues: { theme: 'light', sidebar: { open: true } },
})
settings.set({ theme: 'dark' }) // partial update
settings.get() // { theme: 'dark', sidebar: { open: true } }, invalid data falls back to defaults
const theme = createWebStorageValue({
type: 'localStorage',
key: 'theme',
schema: z.enum(['light', 'dark']),
defaultValue: 'light',
}) // single key
theme.set('light')
import { createCookieValue } from 'seitu/web'
import * as z from 'zod'
const lang = createCookieValue({
key: 'lang',
schema: z.enum(['en', 'fr']),
defaultValue: 'en',
getServerCookies: () => requestCookieHeader, // the framework's `Cookie` header reader
}) // SSR renders the cookie value, hydration matches it
lang.set('fr')
import {
createIndexedDb,
createIndexedDbStorage,
createIndexedDbTable,
} from 'seitu/web'
import * as z from 'zod'
const db = createIndexedDb({
name: 'app',
stores: {
session: createIndexedDbStorage({
schemas: { token: z.string().nullable() },
defaultValues: { token: null },
}), // key/value, sync get() via cache
todos: createIndexedDbTable({
keyPath: 'id',
indexes: { status: 'status' },
schema: z.object({ id: z.string(), status: z.enum(['open', 'done']) }),
}), // rows, validated on write and read
},
}) // one connection, stores created on demand
const { session, todos } = db.stores
await db.ready // open + session hydrated
await session.set({ token: 'abc' })
await todos.put({ id: '1', status: 'open' })
const open = todos.query((t) => t.index('status').getAll('open'), {
initial: [],
}) // reactive
import { createIsOnline, createMediaQuery, createScrollState } from 'seitu/web'
const isDark = createMediaQuery({ query: '(prefers-color-scheme: dark)' }) // type-checked query
const online = createIsOnline()
const feed = createScrollState({
element: () => document.querySelector('#feed'),
threshold: 200,
})
feed.subscribe(({ bottom }) => bottom.reached && loadMore())
// React
import { useSubscription } from 'seitu/react'
function Theme() {
const theme = useSubscription(settings, { selector: (s) => s.theme })
return (
<button
onClick={() =>
settings.set({ theme: theme === 'light' ? 'dark' : 'light' })
}
>
{theme}
</button>
)
}
<!-- Vue -->
<script setup lang="ts">
import { useSubscription } from 'seitu/vue'
const theme = useSubscription(settings, { selector: (s) => s.theme })
</script>
<template>
<button
@click="settings.set({ theme: theme === 'light' ? 'dark' : 'light' })"
>
{{ theme }}
</button>
</template>
// Solid
import { useSubscription } from 'seitu/solid'
function Theme() {
const theme = useSubscription(settings, { selector: (s) => s.theme })
return (
<button
onClick={() =>
settings.set({ theme: theme() === 'light' ? 'dark' : 'light' })
}
>
{theme()}
</button>
)
}
<!-- Svelte -->
<script lang="ts">
import { useSubscription } from 'seitu/svelte'
const theme = useSubscription(settings, { selector: (s) => s.theme })
</script>
<button onclick={() => settings.set({ theme: $theme === 'light' ? 'dark' : 'light' })}>{$theme}</button>
Inline creation (elements, props). Use a callback ref so the subscription is rebuilt when the element mounts, unmounts, or remounts:
const [el, setEl] = useState<HTMLDivElement | null>(null)
const scroll = useSubscription(() => createScrollState({ element: el }), {
deps: [el],
})
return <div ref={setEl} />
Skills ship inside the npm package and describe the installed version's API.
npx skills add letstri/seitu
MIT