refactor: polish code, logo

This commit is contained in:
Richard 2024-02-25 12:05:59 -08:00
parent 18723c1377
commit e7a1f5d235
7 changed files with 14 additions and 19 deletions

View file

@ -2,8 +2,7 @@ name: Release
on: on:
release: release:
types: types: [published]
- published
jobs: jobs:
release: release:
@ -20,10 +19,7 @@ jobs:
- name: Build model - name: Build model
run: rojo build -o charm.rbxm run: rojo build -o charm.rbxm
- name: Upload release - uses: AButler/upload-release-assets@v3.0
uses: softprops/action-gh-release@v2
if: ${{ github.event.release }}
with: with:
files: charm.rbxm files: "charm.rbxm"
env: repo-token: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 255 KiB

Before After
Before After

View file

@ -17,7 +17,7 @@ export type Atom<T> = (() -> T) & ((state: T | ((T) -> T)) -> ()) & {
get: ((self: Atom<T>) -> T) & (<Result>(self: Atom<T>, selector: (T) -> Result) -> Result), get: ((self: Atom<T>) -> T) & (<Result>(self: Atom<T>, selector: (T) -> Result) -> Result),
set: (self: Atom<T>, state: T | ((T) -> T)) -> (), set: (self: Atom<T>, state: T | ((T) -> T)) -> (),
memo: (self: Atom<T>, equalityFn: (previous: T, current: T) -> boolean) -> Atom<T>, memo: (self: Atom<T>, equalityFn: (previous: T, current: T) -> boolean) -> Atom<T>,
writable: (self: Atom<T>, setter: ((update: T, previous: T) -> T?) & (update: T, previous: T) -> ()) -> Atom<T>, writable: (self: Atom<T>, onSet: ((update: T, previous: T) -> T?) & (update: T, previous: T) -> ()) -> Atom<T>,
readonly: (self: Atom<T>) -> ReadonlyAtom<T>, readonly: (self: Atom<T>) -> ReadonlyAtom<T>,
named: (self: Atom<T>, label: string) -> Atom<T>, named: (self: Atom<T>, label: string) -> Atom<T>,
unmount: (self: Atom<T>) -> (), unmount: (self: Atom<T>) -> (),
@ -26,9 +26,8 @@ export type Atom<T> = (() -> T) & ((state: T | ((T) -> T)) -> ()) & {
export type ReadonlyAtom<T> = (() -> T) & { export type ReadonlyAtom<T> = (() -> T) & {
get: ((self: ReadonlyAtom<T>) -> T) & (<Result>(self: ReadonlyAtom<T>, selector: (T) -> Result) -> Result), get: ((self: ReadonlyAtom<T>) -> T) & (<Result>(self: ReadonlyAtom<T>, selector: (T) -> Result) -> Result),
memo: (self: ReadonlyAtom<T>, equalityFn: (previous: T, current: T) -> boolean) -> ReadonlyAtom<T>, memo: (self: ReadonlyAtom<T>, equalityFn: (previous: T, current: T) -> boolean) -> ReadonlyAtom<T>,
writable: ((self: Atom<T>) -> Atom<T>) & ( writable: ((self: Atom<T>) -> Atom<T>)
(self: Atom<T>, setter: ((update: T, previous: T) -> T?) & (update: T, previous: T) -> ()) -> Atom<T> & ((self: Atom<T>, onSet: ((update: T, previous: T) -> T?) & (update: T, previous: T) -> ()) -> Atom<T>),
),
readonly: (self: ReadonlyAtom<T>) -> ReadonlyAtom<T>, readonly: (self: ReadonlyAtom<T>) -> ReadonlyAtom<T>,
named: (self: ReadonlyAtom<T>, label: string) -> ReadonlyAtom<T>, named: (self: ReadonlyAtom<T>, label: string) -> ReadonlyAtom<T>,
unmount: (self: ReadonlyAtom<T>) -> (), unmount: (self: ReadonlyAtom<T>) -> (),
@ -97,8 +96,8 @@ local function atom<State>(state: State): Atom<State>
return self return self
end end
function atom:writable(setterFn: ((State, State) -> State?)?): Atom<State> function atom:writable(onSet: ((State, State) -> State?)?): Atom<State>
setter = setterFn setter = onSet
return self return self
end end

View file

@ -16,7 +16,6 @@ local function derive<Result>(...): ReadonlyAtom<Result>
local atoms: { Atom<unknown> } = { ... } local atoms: { Atom<unknown> } = { ... }
local combiner: (...unknown) -> Result = table.remove(atoms) :: any local combiner: (...unknown) -> Result = table.remove(atoms) :: any
local size = #atoms local size = #atoms
local dependencies: { unknown } = {} local dependencies: { unknown } = {}
for index, atom in atoms do for index, atom in atoms do

View file

@ -6,7 +6,7 @@ type Atom<T> = atom.Atom<T>
type UseAtomState = type UseAtomState =
(<State>(atom: Atom<State>) -> State) (<State>(atom: Atom<State>) -> State)
& (<State, Result>(atom: Atom<State>, ((State) -> Result)?) -> State | Result) & (<State, Result>(atom: Atom<State>, ((State) -> Result)?) -> State | Result)
& <State, Result>(atom: Atom<State>, selector: (State) -> Result) -> Result & (<State, Result>(atom: Atom<State>, selector: (State) -> Result) -> Result)
local function useAtomState<State>(atom: Atom<State>, selector: ((State) -> State)?): State local function useAtomState<State>(atom: Atom<State>, selector: ((State) -> State)?): State
local state, setState = React.useState(function() local state, setState = React.useState(function()

View file

@ -55,9 +55,10 @@ local function split<Item, Key>(
for key, item in previousItems do for key, item in previousItems do
local id = if keyExtractor then keyExtractor(item) else key local id = if keyExtractor then keyExtractor(item) else key
local atom = atoms[id]
if itemsByKeys[id] == nil then if itemsByKeys[id] == nil and atom then
atoms[id]:unmount() atom:unmount()
atoms[id] = nil atoms[id] = nil
end end
end end

View file

@ -3,7 +3,7 @@ type Atom<T> = atom.Atom<T>
local reference = require(script.Parent.utils.reference) local reference = require(script.Parent.utils.reference)
local function subscribe<State>(atom: Atom<State>, callback: (state: State, lastState: State) -> ()): (() -> (), () -> ()) local function subscribe<State>(atom: Atom<State>, callback: (state: State, previous: State) -> ()): (() -> (), () -> ())
local pending: thread? = nil local pending: thread? = nil
local state = atom:get() local state = atom:get()