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
2 changes: 1 addition & 1 deletion packages/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"status": "product",
"checks": ["tsc", "test"]
},
"ranvi": {
"ranview": {
"status": "product",
"checks": ["tsc", "test"]
},
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ window.message?.success({

### Reaktive Bausteine

`signal`, `createEffect`, `computed`, `batch`, `untrack` und eine Schicht für Besitzverhältnisse (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) kommen zusammen mit dem DOM-Builder – für reaktive Seitenteile ohne Framework. Der Entwurf lehnt sich an SwiftUIs `@Observable` an, mit Zusicherungen nach Art von Solid.js: Effekte räumen vor jedem erneuten Lauf ihre veralteten Abonnements selbst auf; `batch()` fasst mehrere Schreibvorgänge zu einem einzigen Durchlauf zusammen; `computed` ist **träge und merkt sich den Wert** (ein ungelesenes Memo rechnet nie, und es weckt seine Abhängigen erst, wenn sich sein Wert wirklich ändert); und jeder Effekt, jedes Memo und jede Bindung gehört seinem Geltungsbereich, sodass das Verwerfen eines `createRoot` mit einem Aufruf alles abbaut, was darin entstanden ist – die Einheit, mit der eine Seite oder Route abgeräumt wird. Die verkettbaren Methoden von `ElementBuilder` (`text`, `attr`, `class`, …) nehmen zudem einen Signal-Getter an, dann aktualisiert sich die Bindung von selbst. Ausführlich: [`ranvi`](../ranvi/README.md).
`signal`, `createEffect`, `computed`, `batch`, `untrack` und eine Schicht für Besitzverhältnisse (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) kommen zusammen mit dem DOM-Builder – für reaktive Seitenteile ohne Framework. Der Entwurf lehnt sich an SwiftUIs `@Observable` an, mit Zusicherungen nach Art von Solid.js: Effekte räumen vor jedem erneuten Lauf ihre veralteten Abonnements selbst auf; `batch()` fasst mehrere Schreibvorgänge zu einem einzigen Durchlauf zusammen; `computed` ist **träge und merkt sich den Wert** (ein ungelesenes Memo rechnet nie, und es weckt seine Abhängigen erst, wenn sich sein Wert wirklich ändert); und jeder Effekt, jedes Memo und jede Bindung gehört seinem Geltungsbereich, sodass das Verwerfen eines `createRoot` mit einem Aufruf alles abbaut, was darin entstanden ist – die Einheit, mit der eine Seite oder Route abgeräumt wird. Die verkettbaren Methoden von `ElementBuilder` (`text`, `attr`, `class`, …) nehmen zudem einen Signal-Getter an, dann aktualisiert sich die Bindung von selbst. Ausführlich: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ window.message?.success({

### Piezas reactivas

`signal`, `createEffect`, `computed`, `batch`, `untrack` y una capa de pertenencia (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) vienen junto al builder del DOM, para armar trozos de página reactivos sin framework. El diseño se mira en el `@Observable` de SwiftUI con las garantías de Solid.js: los efectos limpian solos las suscripciones viejas antes de volver a correr; `batch()` junta varias escrituras en un único repintado; `computed` es **perezoso y memoriza por valor** (un memo que nadie lee no se calcula nunca, y solo despierta a quienes dependen de él cuando su valor cambia de verdad); y cada efecto, memo y enlace pertenece a su ámbito, de modo que desechar un `createRoot` desmonta de una sola llamada todo lo que nació dentro: la unidad con la que se cierra una página o una ruta. Los encadenables de `ElementBuilder` (`text`, `attr`, `class`, …) aceptan además un getter de señal, y el enlace se actualiza solo. Guía completa: [`ranvi`](../ranvi/README.md).
`signal`, `createEffect`, `computed`, `batch`, `untrack` y una capa de pertenencia (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) vienen junto al builder del DOM, para armar trozos de página reactivos sin framework. El diseño se mira en el `@Observable` de SwiftUI con las garantías de Solid.js: los efectos limpian solos las suscripciones viejas antes de volver a correr; `batch()` junta varias escrituras en un único repintado; `computed` es **perezoso y memoriza por valor** (un memo que nadie lee no se calcula nunca, y solo despierta a quienes dependen de él cuando su valor cambia de verdad); y cada efecto, memo y enlace pertenece a su ámbito, de modo que desechar un `createRoot` desmonta de una sola llamada todo lo que nació dentro: la unidad con la que se cierra una página o una ruta. Los encadenables de `ElementBuilder` (`text`, `attr`, `class`, …) aceptan además un getter de señal, y el enlace se actualiza solo. Guía completa: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.fa.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ window.message?.success({

### قطعه‌های واکنشی

`signal`، `createEffect`، `computed`، `batch`، `untrack` و لایه‌ای برای مالکیت (`createRoot`، `onCleanup`، `getOwner`، `runWithOwner`) در کنار سازندهٔ DOM می‌آیند تا بتوانی بخش‌های واکنشی صفحه را بی‌نیاز از چارچوب بسازی. طرح کار به `@Observable` در SwiftUI می‌ماند، با تضمین‌هایی به سبک Solid.js: اثرها پیش از هر اجرای دوباره، اشتراک‌های کهنهٔ خود را خودکار پاک می‌کنند؛ `batch()` چند نوشتن را در یک بازتاب جمع می‌کند؛ `computed` **تنبل است و بر پایهٔ مقدار به خاطر می‌سپارد** (یادداشتی که کسی نخواندش هرگز محاسبه نمی‌شود و تنها وقتی وابستگانش را بیدار می‌کند که مقدارش واقعاً عوض شده باشد)؛ و هر اثر و یادداشت و اتصال، از آنِ دامنهٔ خودش است، پس دور انداختن یک `createRoot` هرچه را در آن زاده شده با یک فراخوان برمی‌چیند — همان یکایی که با آن یک صفحه یا یک مسیر را جمع می‌کنی. متدهای زنجیره‌پذیر `ElementBuilder` (`text`، `attr`، `class` و…) گیرندهٔ سیگنال را هم می‌پذیرند و اتصال خودبه‌خود به‌روز می‌شود. راهنمای کامل: [`ranvi`](../ranvi/README.md).
`signal`، `createEffect`، `computed`، `batch`، `untrack` و لایه‌ای برای مالکیت (`createRoot`، `onCleanup`، `getOwner`، `runWithOwner`) در کنار سازندهٔ DOM می‌آیند تا بتوانی بخش‌های واکنشی صفحه را بی‌نیاز از چارچوب بسازی. طرح کار به `@Observable` در SwiftUI می‌ماند، با تضمین‌هایی به سبک Solid.js: اثرها پیش از هر اجرای دوباره، اشتراک‌های کهنهٔ خود را خودکار پاک می‌کنند؛ `batch()` چند نوشتن را در یک بازتاب جمع می‌کند؛ `computed` **تنبل است و بر پایهٔ مقدار به خاطر می‌سپارد** (یادداشتی که کسی نخواندش هرگز محاسبه نمی‌شود و تنها وقتی وابستگانش را بیدار می‌کند که مقدارش واقعاً عوض شده باشد)؛ و هر اثر و یادداشت و اتصال، از آنِ دامنهٔ خودش است، پس دور انداختن یک `createRoot` هرچه را در آن زاده شده با یک فراخوان برمی‌چیند — همان یکایی که با آن یک صفحه یا یک مسیر را جمع می‌کنی. متدهای زنجیره‌پذیر `ElementBuilder` (`text`، `attr`، `class` و…) گیرندهٔ سیگنال را هم می‌پذیرند و اتصال خودبه‌خود به‌روز می‌شود. راهنمای کامل: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ window.message?.success({

### リアクティビティの部品

`signal`、`createEffect`、`computed`、`batch`、`untrack`、それに所有関係の層(`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`)が、DOM の builder と並んで入っています。フレームワークなしで、反応する画面の一部を組み立てるためのものです。設計は SwiftUI の `@Observable` になぞらえつつ、Solid.js 流の保証を備えています。エフェクトは再実行のたびに古い購読を自動で片づけます。`batch()` は複数の書き込みをひとつの反映にまとめます。`computed` は**遅延評価かつ値でメモ化**されます(誰にも読まれないメモは一度も計算されず、値が実際に変わったときだけ依存する側を起こします)。そしてエフェクト・メモ・バインディングはすべてスコープが持ち主なので、`createRoot` を破棄すれば、そこから生まれたものが一度の呼び出しでまとめて片づきます。ページやルートを畳む単位がこれです。`ElementBuilder` のチェーンできるメソッド(`text` / `attr` / `class` など)はシグナルのゲッターも受けつけ、自動で更新されるバインディングになります。詳しくは [`ranvi`](../ranvi/README.md) を。
`signal`、`createEffect`、`computed`、`batch`、`untrack`、それに所有関係の層(`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`)が、DOM の builder と並んで入っています。フレームワークなしで、反応する画面の一部を組み立てるためのものです。設計は SwiftUI の `@Observable` になぞらえつつ、Solid.js 流の保証を備えています。エフェクトは再実行のたびに古い購読を自動で片づけます。`batch()` は複数の書き込みをひとつの反映にまとめます。`computed` は**遅延評価かつ値でメモ化**されます(誰にも読まれないメモは一度も計算されず、値が実際に変わったときだけ依存する側を起こします)。そしてエフェクト・メモ・バインディングはすべてスコープが持ち主なので、`createRoot` を破棄すれば、そこから生まれたものが一度の呼び出しでまとめて片づきます。ページやルートを畳む単位がこれです。`ElementBuilder` のチェーンできるメソッド(`text` / `attr` / `class` など)はシグナルのゲッターも受けつけ、自動で更新されるバインディングになります。詳しくは [`ranview`](../ranview/README.md) を。

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ window.message?.success({

### 반응형 부품

`signal`, `createEffect`, `computed`, `batch`, `untrack`과 소유 계층(`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`)이 DOM builder와 나란히 들어 있습니다. 프레임워크 없이 반응하는 화면 조각을 짜기 위한 것입니다. 설계는 SwiftUI의 `@Observable`을 본뜨되 Solid.js식 보장을 갖췄습니다. 이펙트는 다시 돌기 전에 낡은 구독을 알아서 치웁니다. `batch()`는 여러 쓰기를 한 번의 반영으로 모읍니다. `computed`는 **게으르고 값으로 메모**됩니다(아무도 읽지 않는 메모는 한 번도 계산되지 않고, 값이 실제로 달라졌을 때만 딸린 것들을 깨웁니다). 그리고 이펙트와 메모, 바인딩은 모두 자기 범위가 주인이라, `createRoot` 하나를 버리면 거기서 태어난 것이 한 번의 호출로 전부 걷힙니다. 페이지나 라우트를 접는 단위가 바로 이것입니다. `ElementBuilder`의 체이닝 메서드(`text`, `attr`, `class` 등)는 시그널 게터도 받아, 알아서 갱신되는 바인딩이 됩니다. 자세한 안내: [`ranvi`](../ranvi/README.md).
`signal`, `createEffect`, `computed`, `batch`, `untrack`과 소유 계층(`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`)이 DOM builder와 나란히 들어 있습니다. 프레임워크 없이 반응하는 화면 조각을 짜기 위한 것입니다. 설계는 SwiftUI의 `@Observable`을 본뜨되 Solid.js식 보장을 갖췄습니다. 이펙트는 다시 돌기 전에 낡은 구독을 알아서 치웁니다. `batch()`는 여러 쓰기를 한 번의 반영으로 모읍니다. `computed`는 **게으르고 값으로 메모**됩니다(아무도 읽지 않는 메모는 한 번도 계산되지 않고, 값이 실제로 달라졌을 때만 딸린 것들을 깨웁니다). 그리고 이펙트와 메모, 바인딩은 모두 자기 범위가 주인이라, `createRoot` 하나를 버리면 거기서 태어난 것이 한 번의 호출로 전부 걷힙니다. 페이지나 라우트를 접는 단위가 바로 이것입니다. `ElementBuilder`의 체이닝 메서드(`text`, `attr`, `class` 등)는 시그널 게터도 받아, 알아서 갱신되는 바인딩이 됩니다. 자세한 안내: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ window.message?.success({

### Reactive Primitives

`signal`, `createEffect`, `computed`, `batch`, `untrack`, and an ownership layer (`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`) ship alongside the DOM builder for building reactive page sections without a framework. The design mirrors SwiftUI's `@Observable` with Solid.js-style guarantees: effects auto-clean stale subscriptions before each re-run; `batch()` coalesces writes into one flush; `computed` is **lazy + value-memoized** (an unread memo never computes, and it wakes dependents only when its value actually changes); and every effect/memo/binding is owned by its scope, so disposing a `createRoot` tears down everything it spawned in one call — the teardown unit for a page/route. `ElementBuilder` chainables (`text`/`attr`/`class`/…) also accept a signal getter for auto-updating bindings. Full guide: [`ranvi`](../ranvi/README.md).
`signal`, `createEffect`, `computed`, `batch`, `untrack`, and an ownership layer (`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`) ship alongside the DOM builder for building reactive page sections without a framework. The design mirrors SwiftUI's `@Observable` with Solid.js-style guarantees: effects auto-clean stale subscriptions before each re-run; `batch()` coalesces writes into one flush; `computed` is **lazy + value-memoized** (an unread memo never computes, and it wakes dependents only when its value actually changes); and every effect/memo/binding is owned by its scope, so disposing a `createRoot` tears down everything it spawned in one call — the teardown unit for a page/route. `ElementBuilder` chainables (`text`/`attr`/`class`/…) also accept a signal getter for auto-updating bindings. Full guide: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.pt.md
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ O `getContainer` precisa devolver um `HTMLElement`; se for omitido, as mensagens

### Peças reativas

`signal`, `createEffect`, `computed`, `batch`, `untrack` e uma camada de posse (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) vêm ao lado do builder do DOM, para montar pedaços reativos de página sem framework. O desenho se espelha no `@Observable` do SwiftUI com as garantias do Solid.js: os efeitos limpam sozinhos as inscrições velhas antes de rodar de novo; o `batch()` junta várias escritas num único repinte; o `computed` é **preguiçoso e memoriza por valor** (um memo que ninguém lê nunca é calculado, e ele só acorda quem depende dele quando o valor muda de verdade); e cada efeito, memo e ligação pertence ao seu escopo, de modo que descartar um `createRoot` desmonta numa só chamada tudo o que nasceu dentro dele: a unidade com que se fecha uma página ou uma rota. Os encadeáveis do `ElementBuilder` (`text`, `attr`, `class`, …) também aceitam um getter de sinal, e a ligação se atualiza sozinha. Guia completo: [`ranvi`](../ranvi/README.md).
`signal`, `createEffect`, `computed`, `batch`, `untrack` e uma camada de posse (`createRoot`, `onCleanup`, `getOwner`, `runWithOwner`) vêm ao lado do builder do DOM, para montar pedaços reativos de página sem framework. O desenho se espelha no `@Observable` do SwiftUI com as garantias do Solid.js: os efeitos limpam sozinhos as inscrições velhas antes de rodar de novo; o `batch()` junta várias escritas num único repinte; o `computed` é **preguiçoso e memoriza por valor** (um memo que ninguém lê nunca é calculado, e ele só acorda quem depende dele quando o valor muda de verdade); e cada efeito, memo e ligação pertence ao seu escopo, de modo que descartar um `createRoot` desmonta numa só chamada tudo o que nasceu dentro dele: a unidade com que se fecha uma página ou uma rota. Os encadeáveis do `ElementBuilder` (`text`, `attr`, `class`, …) também aceitam um getter de sinal, e a ligação se atualiza sozinha. Guia completo: [`ranview`](../ranview/README.md).

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
2 changes: 1 addition & 1 deletion packages/ranui/README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ window.message?.success({

### 响应式原语

`signal`、`createEffect`、`computed`、`batch`、`untrack` 以及所有权层(`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`)与 DOM builder 一起提供,用于在无框架依赖的情况下构建响应式页面区块。设计参考 SwiftUI 的 `@Observable`,并采用 Solid.js 风格的保证:effect 重新执行前自动清理过期订阅;`batch()` 将多次写入合并为一次 flush;`computed` 是**惰性 + 按值记忆化**的(未被读取的 memo 从不计算,且仅当值真正改变时才唤醒依赖);每个 effect/memo/绑定都归其作用域所有,销毁一个 `createRoot` 即可一次性拆除其派生的一切 —— 这是页面/路由的销毁单元。`ElementBuilder` 链式方法(`text`/`attr`/`class`/…)也接受 signal getter 作为自动更新的绑定。完整指南见 [`ranvi`](../ranvi/README.md)。
`signal`、`createEffect`、`computed`、`batch`、`untrack` 以及所有权层(`createRoot` / `onCleanup` / `getOwner` / `runWithOwner`)与 DOM builder 一起提供,用于在无框架依赖的情况下构建响应式页面区块。设计参考 SwiftUI 的 `@Observable`,并采用 Solid.js 风格的保证:effect 重新执行前自动清理过期订阅;`batch()` 将多次写入合并为一次 flush;`computed` 是**惰性 + 按值记忆化**的(未被读取的 memo 从不计算,且仅当值真正改变时才唤醒依赖);每个 effect/memo/绑定都归其作用域所有,销毁一个 `createRoot` 即可一次性拆除其派生的一切 —— 这是页面/路由的销毁单元。`ElementBuilder` 链式方法(`text`/`attr`/`class`/…)也接受 signal getter 作为自动更新的绑定。完整指南见 [`ranview`](../ranview/README.md)。

```ts
import { signal, createEffect, computed, batch, EventManager, Div, ButtonBuilder } from 'ranui/builder';
Expand Down
Loading