@slux/preact 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ # @slux/preact
2
+
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 207e315: 基于 `v0.1.0` 之后的改动,完善包文档、交互示例和发布流程。
8
+
9
+ - 为 25 个包的 README 补充统一导航;文档站增加各包更新日志、版本发行说明和可在站内体验的示例入口。
10
+ - 整理示例应用的共享外壳与主题交互,并将示例图标替换为透明背景的 SVG。
11
+ - 修正自动导入 API 清单生成规则,排除需要显式调用的 `createAutoImportApis` 工厂函数,并统一 Viewfly 清单顺序。
12
+ - 发布工作流改为 GitHub OIDC 授信发布:预先打包各包、独立执行发布任务,并在发布成功后创建 GitHub Release 草稿。
13
+
14
+ - Updated dependencies [207e315]
15
+ - @slux/atom@0.1.1
16
+ - @slux/core@0.1.1
17
+ - @slux/flux@0.1.1
18
+ - @slux/proxy@0.1.1
19
+ - @slux/rxjs@0.1.1
20
+ - @slux/shared@0.1.1
21
+ - @slux/state-machine@0.1.1
22
+ - @slux/store@0.1.1
23
+
24
+ ## 0.1.0
25
+
26
+ ### Minor Changes
27
+
28
+ - 首次公开发布 slux 的 25 个包,统一版本为 0.1.0。
29
+
30
+ - 提供框架无关的响应式核心与共享工具,以及 Store、Atom、Proxy、Flux、状态机和 RxJS 六种状态组织方式。
31
+ - 提供持久化、历史记录、跨标签页同步、遥测和开发工具五类 Store 扩展。
32
+ - 提供 React、Vue、Solid、Svelte、Angular、Preact、Ripple、Inferno、Octane、Vitarx、ActView 和 Viewfly 绑定。
33
+ - 提供各包文档与对应示例,并接入发布检查和文档部署工作流。
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies
38
+ - @slux/atom@0.1.0
39
+ - @slux/core@0.1.0
40
+ - @slux/flux@0.1.0
41
+ - @slux/proxy@0.1.0
42
+ - @slux/rxjs@0.1.0
43
+ - @slux/shared@0.1.0
44
+ - @slux/state-machine@0.1.0
45
+ - @slux/store@0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 itmanyong
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,273 @@
1
- # Temporary Holding Version
1
+ # @slux/preact
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Preact 11(`preact@^11.0.0`)的 slux 绑定,基于 `@slux/core` 的 `Subscribable<T>` 订阅模型。原生绑定形式是 **Preact 原生 hooks + `preact/compat` 的 `useSyncExternalStore`**:把任意可订阅源读成组件里的一个值,**不依赖 React**。所有写入仍走原实例,绑定只读。
4
+
5
+ ## 特性与适用场景
6
+
7
+ | 项 | 说明 |
8
+ | -------- | --------------------------------------------------------------------------- |
9
+ | 绑定形式 | `useSignal(source)` 返回 `T`;由 `useSyncExternalStore` 订阅 |
10
+ | 框架依赖 | `preact`、`preact/hooks`;`useSyncExternalStore` 取自 `preact/compat` |
11
+ | 范式覆盖 | core 主入口 + atom / store / proxy / flux / state-machine / rxjs 六个子入口 |
12
+ | SSR | 通过 `getServerSnapshot` 与 `ScopeProvider` 提供首屏快照,支持 hydration |
13
+
14
+ | 场景 | 是否适合 | 说明 |
15
+ | --------------------------------------------- | -------- | -------------------------------------------------- |
16
+ | 在 Preact 组件里读 core `signal` / `computed` | 适合 | `computed` 由订阅内的 core `effect` 主动刷新 |
17
+ | 用 atom / store / proxy 或新增三种范式 | 适合 | 从对应子入口导入,范式包按需安装 |
18
+ | SSR 首屏 + hydration | 适合 | `ScopeProvider` 提供服务端覆盖快照 |
19
+ | 需要绑定替你写入状态 | 不适合 | 绑定只读原实例,写入走 `set` / `dispatch` / `send` |
20
+ | 脱离 Preact 的 Node 脚本读状态 | 不适合 | 直接用 `@slux/core` |
21
+
22
+ ## 安装
23
+
24
+ ```sh
25
+ pnpm add @slux/core @slux/preact preact@^11
26
+ ```
27
+
28
+ - **必需 peer**:`@slux/core`(`workspace:^`)、`preact@^11.0.0`。
29
+ - **可选 peer(范式包)**:`@slux/atom`、`@slux/store`、`@slux/proxy`、`@slux/flux`、`@slux/state-machine`、`@slux/rxjs` 均为 `optional`,**只装实际使用的子入口**。
30
+ - `@slux/shared` 是本包运行时依赖,安装时自动带入,无需显式声明。
31
+ - 主入口与每个子入口都通过 `exports` 同时提供 ESM(`import`)、CJS(`require`)与 `.d.ts` / `.d.cts` 类型声明。
32
+
33
+ `package.json` 的 `exports` 子入口(逐个列出):
34
+
35
+ | 子路径 | 导出内容 |
36
+ | ---------------------------- | ----------------------------------------------------------------------------------------------- |
37
+ | `@slux/preact` | 主入口:`useSignal`、`ScopeContext`、`ScopeProvider`、`useScopeContext`、`createAutoImportApis` |
38
+ | `@slux/preact/atom` | `useAtomValue`、`useSetAtom`、`useAtom` |
39
+ | `@slux/preact/store` | `useStore` |
40
+ | `@slux/preact/proxy` | `useSnapshot` |
41
+ | `@slux/preact/flux` | `useFluxStore` |
42
+ | `@slux/preact/state-machine` | `useMachine` |
43
+ | `@slux/preact/rxjs` | `useObservable` |
44
+ | `@slux/preact/package.json` | 包元数据(非 API) |
45
+
46
+ ## 快速开始
47
+
48
+ ```tsx
49
+ import { signal } from "@slux/core";
50
+ import { useSignal } from "@slux/preact";
51
+
52
+ const count = signal(0);
53
+
54
+ export function Counter() {
55
+ const value = useSignal(count);
56
+ return <button onClick={() => count.set((n) => n + 1)}>{value}</button>;
57
+ }
58
+ ```
59
+
60
+ `useSignal(count)` 返回 `number`;点击时仍通过 core 的 `count.set(recipe)` 写入,组件随订阅自动重渲染。
61
+
62
+ ## 主入口 API
63
+
64
+ 主入口导出 `useSignal`、`ScopeContext`、`ScopeProvider`、`useScopeContext`、`createAutoImportApis`。
65
+
66
+ | 成员 | 签名 | 行为 |
67
+ | ---------------------- | ------------------------------------------- | -------------------------------------------------------- |
68
+ | `useSignal` | `<T>(source: Subscribable<T>) => T` | 用 `useSyncExternalStore` 订阅并返回当前值 |
69
+ | `ScopeContext` | `createContext<Scope \| null>(null)` | Preact Context,默认 `null` |
70
+ | `ScopeProvider` | `({ scope, children }: ScopeProviderProps)` | 把 `scope` 放进 `ScopeContext.Provider`,渲染 `children` |
71
+ | `useScopeContext` | `() => Scope \| null` | 读取当前 `ScopeContext`,无 provider 时为 `null` |
72
+ | `createAutoImportApis` | `(prefix?: string) => ImportsMap` | 生成 `unplugin-auto-import` 配置,见「自动导入」 |
73
+
74
+ `useSignal` 的三个 `useSyncExternalStore` 参数由源码固定:
75
+
76
+ | 参数 | 实现 | 作用 |
77
+ | ------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------- |
78
+ | `subscribe` | `source.subscribe(notify)` + `effect(() => { source.get(); })`,返回同时释放二者的函数 | 订阅变化并主动驱动惰性 `computed` |
79
+ | `getSnapshot` | `() => source.get()` | 客户端读取全局当前值 |
80
+ | `getServerSnapshot` | `scope ? scope.get(source) : source.get()` | 服务端读取;`scope` 来自 `useScopeContext()` |
81
+
82
+ `subscribe`、`getSnapshot` 的回调依赖 `[source]`,`getServerSnapshot` 依赖 `[scope, source]`,因此**来源切换会先释放旧订阅再建立新订阅**;`effect` 保证 core `computed` 即使只有绑定读取也会向订阅者发布最新值。
83
+
84
+ Scope 用法:
85
+
86
+ ```tsx
87
+ import { createScope, signal } from "@slux/core";
88
+ import { ScopeProvider, useScopeContext, useSignal } from "@slux/preact";
89
+
90
+ const source = signal(1);
91
+ const scope = createScope();
92
+ scope.set(source, 10);
93
+
94
+ function Value() {
95
+ const injected = useScopeContext();
96
+ return (
97
+ <span>
98
+ {useSignal(source)}:{injected?.get(source)}
99
+ </span>
100
+ );
101
+ }
102
+
103
+ const app = (
104
+ <ScopeProvider scope={scope}>
105
+ <Value />
106
+ </ScopeProvider>
107
+ );
108
+ ```
109
+
110
+ ## 子入口 API
111
+
112
+ 所有子入口都只读原实例,**不返回写入 tuple,也不创建副本**。
113
+
114
+ ### `@slux/preact/atom`
115
+
116
+ | 导出 | 签名 | 返回值 / 写入 |
117
+ | -------------- | ------------------------------------------------- | -------------------------------------------------------------- |
118
+ | `useAtomValue` | `<T>(source: AnyReadableAtom<T>) => T` | 只读值,支持只读派生 atom |
119
+ | `useSetAtom` | `<T>(source: Atom<T>) => (value: T) => void` | 稳定 setter;按 atom 替换契约写值,函数值不被当作 updater 执行 |
120
+ | `useAtom` | `<T>(source: Atom<T>) => [T, (value: T) => void]` | `[值, setter]` |
121
+
122
+ ```tsx
123
+ import { atom } from "@slux/atom";
124
+ import { useAtom } from "@slux/preact/atom";
125
+
126
+ const count = atom(1);
127
+
128
+ export function Counter() {
129
+ const [value, setCount] = useAtom(count);
130
+ return <button onClick={() => setCount(value + 1)}>{value}</button>;
131
+ }
132
+ ```
133
+
134
+ ### `@slux/preact/store`
135
+
136
+ `useStore` 有两个重载:
137
+
138
+ | 调用 | 返回值 |
139
+ | ---------------------------------------- | ------------ |
140
+ | `useStore(store)` | 完整 `State` |
141
+ | `useStore(store, selector, equalityFn?)` | `Selection` |
142
+
143
+ `selector = (state: State) => Selection`;`equalityFn(previous, next)` 默认 `Object.is`。带 selector 时按 state 引用缓存选值,`equalityFn` 判定相等时保留旧选值引用。写入仍用 `store.setState(...)`,绑定不写入。
144
+
145
+ ### `@slux/preact/proxy`
146
+
147
+ | 导出 | 签名 | 返回值 |
148
+ | ------------- | ---------------------------------------------- | ----------------------------------------------- |
149
+ | `useSnapshot` | `<T extends object>(source: T) => Snapshot<T>` | 整个 proxy 的深只读、冻结快照,不做字段访问追踪 |
150
+
151
+ ### 新增三种范式(只读)
152
+
153
+ | 子路径 | 导出 | 签名 | 返回值 | 写入方式 |
154
+ | ---------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ------------------------ |
155
+ | `@slux/preact/flux` | `useFluxStore` | `<State, Action extends { type: string }>(store: FluxStore<State, Action>) => State` | Flux 完整状态 | `store.dispatch(action)` |
156
+ | `@slux/preact/state-machine` | `useMachine` | `<Context, Event extends { type: string }, State extends string>(machine: StateMachine<Context, Event, State>) => MachineSnapshot<Context, State>` | 状态机快照 | `machine.send(event)` |
157
+ | `@slux/preact/rxjs` | `useObservable` | `<T>(source: ObservableState<T>) => T` | 桥接最近值 | 桥接创建者持有上游 |
158
+
159
+ 三者内部都复用主入口的 `useSignal(source)`。
160
+
161
+ ## 专属语义与边界
162
+
163
+ - **SSR / hydration**:`useSyncExternalStore` 在服务端调用 `getServerSnapshot`,`ScopeProvider` 提供的 `scope.get(source)` 作为首屏值;SSR 阶段**不建立** `source.subscribe` 与 core `effect`。hydrate 挂载后切换到 `getSnapshot`,开始跟随全局值。`useSyncExternalStore` 本身保证「渲染到订阅之间」的写入不会丢失。
164
+ - **Scope 边界**:`ScopeProvider` 只影响 `useSignal` 的服务端快照;`atom` / `store` / `proxy` 子入口把 `getSnapshot` 同时用作 `getServerSnapshot`,**不应用 core scope**。`scope.set()` 不触发全局订阅,`runInScope` 不改写 signal 读写(通用约定见仓库根 README)。
165
+ - **订阅与清理**:每个绑定在 `subscribe` 内建立 `source.subscribe` 与一个 core `effect`;来源切换(`[source]` 变化)与组件卸载时二者一起释放。组件卸载**不销毁**业务 store / flux / machine / observable,桥接创建者负责调用 `dispose()`。
166
+ - **快照相等判定**:`useSyncExternalStore` 用 `Object.is` 比较 `getSnapshot` 结果;`computed` 派生值相等时不重渲染。`useStore` 的 `equalityFn` 与 `@slux/proxy` 的不可变快照负责在各自入口保留相等结果的旧引用。
167
+ - **错误处理**:绑定层不新增错误包装;写入、通知与 `effect` 的错误行为遵循 `@slux/core`。RxJS 桥接的完成 / 错误状态由 `@slux/rxjs` 的 `status` / `error` 只读信号读取。
168
+ - **通用约定**:跨框架的写入形式、Scope、SSR 与桥接生命周期约定见 [仓库根 README](../../README.md) 的「框架适配 · 通用约定」;仓库内验证命令见「本地开发」,本文不重复。
169
+
170
+ ## 自动导入
171
+
172
+ ```ts
173
+ import AutoImport from "unplugin-auto-import/vite";
174
+ import { createAutoImportApis } from "@slux/preact";
175
+
176
+ export default {
177
+ plugins: [AutoImport({ imports: [createAutoImportApis()] })],
178
+ };
179
+ ```
180
+
181
+ `createAutoImportApis(prefix = "")` 的登记清单以 `src/auto-import-api.ts` 的 `allImportApis` 为准,当前为 **`ScopeContext`、`ScopeProvider`、`useScopeContext`、`useSignal`** 四项,来源名 `@slux/preact`。传入前缀可生成别名,大写规则由 `@slux/shared` 的 `generateBatchAutoImports` 决定。清单**只含主入口 API**,不含 `createAutoImportApis` 自身,也不含任何子入口导出。
182
+
183
+ ## 类型导出
184
+
185
+ 本包显式 `export type` 的只有主入口的 `ScopeProviderProps`:
186
+
187
+ ```ts
188
+ type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };
189
+ ```
190
+
191
+ `Scope` / `Subscribable<T>` 来自 `@slux/core`,`ComponentChildren` 来自 `preact`。各子入口没有显式 `export type`;`AnyReadableAtom` / `Atom`(`@slux/atom`)、`StoreApi`(`@slux/store`)、`Snapshot`(`@slux/proxy`)、`FluxStore`、`MachineSnapshot`、`ObservableState` 等类型通过函数签名暴露,从各自范式包导入。
192
+
193
+ ## 不适用的场景
194
+
195
+ - 需要在组件外(Node / 脚本)读写状态:用 `@slux/core`,绑定只在 Preact 组件内工作。
196
+ - 需要绑定返回写入 tuple、selector 之外的写入接口或状态副本:绑定只读原实例。
197
+ - React 项目混用:用 `@slux/react`,两者运行时不同。
198
+ - 需要自动的请求级状态隔离或自动序列化 / 恢复:见仓库根 README 的通用约定,需调用方按请求建实例。
199
+
200
+ ## 版本、许可与反馈
201
+
202
+ - 版本:`0.1.0`(`package.json`);许可:[MIT](../../LICENSE) © itmanyong。
203
+ - 问题反馈:[GitHub Issues](https://github.com/itmanyong/slux/issues)。
204
+ - 通用约定与本地开发命令见 [仓库根 README](../../README.md)。
205
+
206
+ <!-- package-navigation:start -->
207
+
208
+ ## 包导航
209
+
210
+ ### 核心层
211
+
212
+ 响应式运行时与零依赖工具,其余各层都建立在 core 之上。
213
+
214
+ | 包名 | 版本 | 在线文档 | 功能 |
215
+ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------- |
216
+ | [`@slux/core`](https://github.com/itmanyong/slux/tree/main/packages/core) | [![npm version](https://img.shields.io/npm/v/@slux/core)](https://www.npmjs.com/package/@slux/core) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/core?label=npmx)](https://npmx.dev/package/@slux/core) | [在线文档](https://itmanyong.github.io/slux/packages/core) | 框架无关的响应式运行时 |
217
+ | [`@slux/shared`](https://github.com/itmanyong/slux/tree/main/packages/shared) | [![npm version](https://img.shields.io/npm/v/@slux/shared)](https://www.npmjs.com/package/@slux/shared) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/shared?label=npmx)](https://npmx.dev/package/@slux/shared) | [在线文档](https://itmanyong.github.io/slux/packages/shared) | 零依赖的共享工具 |
218
+
219
+ ### 范式层
220
+
221
+ 六种组织状态的方式,共享 core 的运行时,可在同一个依赖图中混用。
222
+
223
+ | 包名 | 版本 | 在线文档 | 功能 |
224
+ | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ---------------------------------- |
225
+ | [`@slux/store`](https://github.com/itmanyong/slux/tree/main/packages/store) | [![npm version](https://img.shields.io/npm/v/@slux/store)](https://www.npmjs.com/package/@slux/store) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/store?label=npmx)](https://npmx.dev/package/@slux/store) | [在线文档](https://itmanyong.github.io/slux/packages/store) | 状态与 action 集中管理,支持中间件 |
226
+ | [`@slux/atom`](https://github.com/itmanyong/slux/tree/main/packages/atom) | [![npm version](https://img.shields.io/npm/v/@slux/atom)](https://www.npmjs.com/package/@slux/atom) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/atom?label=npmx)](https://npmx.dev/package/@slux/atom) | [在线文档](https://itmanyong.github.io/slux/packages/atom) | 细粒度原子状态与派生 |
227
+ | [`@slux/proxy`](https://github.com/itmanyong/slux/tree/main/packages/proxy) | [![npm version](https://img.shields.io/npm/v/@slux/proxy)](https://www.npmjs.com/package/@slux/proxy) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/proxy?label=npmx)](https://npmx.dev/package/@slux/proxy) | [在线文档](https://itmanyong.github.io/slux/packages/proxy) | 可变代理写入与只读快照 |
228
+ | [`@slux/flux`](https://github.com/itmanyong/slux/tree/main/packages/flux) | [![npm version](https://img.shields.io/npm/v/@slux/flux)](https://www.npmjs.com/package/@slux/flux) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/flux?label=npmx)](https://npmx.dev/package/@slux/flux) | [在线文档](https://itmanyong.github.io/slux/packages/flux) | reducer + dispatch 范式 |
229
+ | [`@slux/state-machine`](https://github.com/itmanyong/slux/tree/main/packages/state-machine) | [![npm version](https://img.shields.io/npm/v/@slux/state-machine)](https://www.npmjs.com/package/@slux/state-machine) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/state-machine?label=npmx)](https://npmx.dev/package/@slux/state-machine) | [在线文档](https://itmanyong.github.io/slux/packages/state-machine) | 平面有限状态机 |
230
+ | [`@slux/rxjs`](https://github.com/itmanyong/slux/tree/main/packages/rxjs) | [![npm version](https://img.shields.io/npm/v/@slux/rxjs)](https://www.npmjs.com/package/@slux/rxjs) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/rxjs?label=npmx)](https://npmx.dev/package/@slux/rxjs) | [在线文档](https://itmanyong.github.io/slux/packages/rxjs) | Observable 与状态双向桥接 |
231
+
232
+ ### 中间件层
233
+
234
+ 挂载到 Store 的横切能力,五个包共用同一套契约。
235
+
236
+ | 包名 | 版本 | 在线文档 | 功能 |
237
+ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -------------------- |
238
+ | [`@slux/storage`](https://github.com/itmanyong/slux/tree/main/packages/storage) | [![npm version](https://img.shields.io/npm/v/@slux/storage)](https://www.npmjs.com/package/@slux/storage) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/storage?label=npmx)](https://npmx.dev/package/@slux/storage) | [在线文档](https://itmanyong.github.io/slux/packages/storage) | 状态持久化与恢复 |
239
+ | [`@slux/history`](https://github.com/itmanyong/slux/tree/main/packages/history) | [![npm version](https://img.shields.io/npm/v/@slux/history)](https://www.npmjs.com/package/@slux/history) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/history?label=npmx)](https://npmx.dev/package/@slux/history) | [在线文档](https://itmanyong.github.io/slux/packages/history) | 撤销与重做 |
240
+ | [`@slux/tab-sync`](https://github.com/itmanyong/slux/tree/main/packages/tab-sync) | [![npm version](https://img.shields.io/npm/v/@slux/tab-sync)](https://www.npmjs.com/package/@slux/tab-sync) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/tab-sync?label=npmx)](https://npmx.dev/package/@slux/tab-sync) | [在线文档](https://itmanyong.github.io/slux/packages/tab-sync) | 跨标签页状态同步 |
241
+ | [`@slux/telemetry`](https://github.com/itmanyong/slux/tree/main/packages/telemetry) | [![npm version](https://img.shields.io/npm/v/@slux/telemetry)](https://www.npmjs.com/package/@slux/telemetry) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/telemetry?label=npmx)](https://npmx.dev/package/@slux/telemetry) | [在线文档](https://itmanyong.github.io/slux/packages/telemetry) | 状态变化与订阅遥测 |
242
+ | [`@slux/devtools`](https://github.com/itmanyong/slux/tree/main/packages/devtools) | [![npm version](https://img.shields.io/npm/v/@slux/devtools)](https://www.npmjs.com/package/@slux/devtools) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/devtools?label=npmx)](https://npmx.dev/package/@slux/devtools) | [在线文档](https://itmanyong.github.io/slux/packages/devtools) | 调试工具、日志与检查 |
243
+
244
+ ### 框架层
245
+
246
+ 十二个绑定包都提供 core 主入口与六个范式子入口,使用框架原生响应式与生命周期。范式包是**可选** peer,只装实际使用的;`@slux/core` 与框架本身是**必需** peer。
247
+
248
+ | 包名 | 版本 | 在线文档 | 适配框架 | 适配版本 | 功能 |
249
+ | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------ | ---------------------- |
250
+ | [`@slux/react`](https://github.com/itmanyong/slux/tree/main/packages/react) | [![npm version](https://img.shields.io/npm/v/@slux/react)](https://www.npmjs.com/package/@slux/react) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/react?label=npmx)](https://npmx.dev/package/@slux/react) | [在线文档](https://itmanyong.github.io/slux/packages/react) | [React](https://github.com/react/react) | `^18.0.0 ‖ ^19.0.0` | React 组件状态绑定 |
251
+ | [`@slux/vue`](https://github.com/itmanyong/slux/tree/main/packages/vue) | [![npm version](https://img.shields.io/npm/v/@slux/vue)](https://www.npmjs.com/package/@slux/vue) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/vue?label=npmx)](https://npmx.dev/package/@slux/vue) | [在线文档](https://itmanyong.github.io/slux/packages/vue) | [Vue](https://github.com/vuejs/core) | `>= 3.2.0` | Vue 组合式 API 绑定 |
252
+ | [`@slux/solid`](https://github.com/itmanyong/slux/tree/main/packages/solid) | [![npm version](https://img.shields.io/npm/v/@slux/solid)](https://www.npmjs.com/package/@slux/solid) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/solid?label=npmx)](https://npmx.dev/package/@slux/solid) | [在线文档](https://itmanyong.github.io/slux/packages/solid) | [Solid](https://github.com/solidjs/solid) | `>= 1.0.0` | Solid 细粒度响应式绑定 |
253
+ | [`@slux/svelte`](https://github.com/itmanyong/slux/tree/main/packages/svelte) | [![npm version](https://img.shields.io/npm/v/@slux/svelte)](https://www.npmjs.com/package/@slux/svelte) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/svelte?label=npmx)](https://npmx.dev/package/@slux/svelte) | [在线文档](https://itmanyong.github.io/slux/packages/svelte) | [Svelte](https://github.com/sveltejs/svelte) | `>= 4.0.0` | Svelte 原生 store 绑定 |
254
+ | [`@slux/angular`](https://github.com/itmanyong/slux/tree/main/packages/angular) | [![npm version](https://img.shields.io/npm/v/@slux/angular)](https://www.npmjs.com/package/@slux/angular) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/angular?label=npmx)](https://npmx.dev/package/@slux/angular) | [在线文档](https://itmanyong.github.io/slux/packages/angular) | [Angular](https://github.com/angular/angular) | `@angular/core >= 16.0.0`、`rxjs >= 7.8.0` | Angular 注入上下文绑定 |
255
+ | [`@slux/preact`](https://github.com/itmanyong/slux/tree/main/packages/preact) | [![npm version](https://img.shields.io/npm/v/@slux/preact)](https://www.npmjs.com/package/@slux/preact) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/preact?label=npmx)](https://npmx.dev/package/@slux/preact) | [在线文档](https://itmanyong.github.io/slux/packages/preact) | [Preact](https://github.com/preactjs/preact) | `>= 10.5.0` | Preact 组件状态绑定 |
256
+ | [`@slux/ripple`](https://github.com/itmanyong/slux/tree/main/packages/ripple) | [![npm version](https://img.shields.io/npm/v/@slux/ripple)](https://www.npmjs.com/package/@slux/ripple) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/ripple?label=npmx)](https://npmx.dev/package/@slux/ripple) | [在线文档](https://itmanyong.github.io/slux/packages/ripple) | [Ripple](https://github.com/Ripple-TS/ripple) | `>= 0.6.0` | Ripple 组件状态绑定 |
257
+ | [`@slux/inferno`](https://github.com/itmanyong/slux/tree/main/packages/inferno) | [![npm version](https://img.shields.io/npm/v/@slux/inferno)](https://www.npmjs.com/package/@slux/inferno) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/inferno?label=npmx)](https://npmx.dev/package/@slux/inferno) | [在线文档](https://itmanyong.github.io/slux/packages/inferno) | [Inferno](https://github.com/infernojs/inferno) | `>= 7.0.0` | Inferno 组件状态绑定 |
258
+ | [`@slux/octane`](https://github.com/itmanyong/slux/tree/main/packages/octane) | [![npm version](https://img.shields.io/npm/v/@slux/octane)](https://www.npmjs.com/package/@slux/octane) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/octane?label=npmx)](https://npmx.dev/package/@slux/octane) | [在线文档](https://itmanyong.github.io/slux/packages/octane) | [Octane](https://github.com/octanejs/octane) | `>= 0.16.0` | Octane 编译器绑定 |
259
+ | [`@slux/vitarx`](https://github.com/itmanyong/slux/tree/main/packages/vitarx) | [![npm version](https://img.shields.io/npm/v/@slux/vitarx)](https://www.npmjs.com/package/@slux/vitarx) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/vitarx?label=npmx)](https://npmx.dev/package/@slux/vitarx) | [在线文档](https://itmanyong.github.io/slux/packages/vitarx) | [Vitarx](https://github.com/vitarx-lib/core) | `>= 4.0.0` | Vitarx 组件状态绑定 |
260
+ | [`@slux/actview`](https://github.com/itmanyong/slux/tree/main/packages/actview) | [![npm version](https://img.shields.io/npm/v/@slux/actview)](https://www.npmjs.com/package/@slux/actview) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/actview?label=npmx)](https://npmx.dev/package/@slux/actview) | [在线文档](https://itmanyong.github.io/slux/packages/actview) | [ActView](https://github.com/actview/actview) | `>= 1.0.0` | ActView 组件状态绑定 |
261
+ | [`@slux/viewfly`](https://github.com/itmanyong/slux/tree/main/packages/viewfly) | [![npm version](https://img.shields.io/npm/v/@slux/viewfly)](https://www.npmjs.com/package/@slux/viewfly) [![npmx version](https://npmx.dev/api/registry/badge/version/@slux/viewfly?label=npmx)](https://npmx.dev/package/@slux/viewfly) | [在线文档](https://itmanyong.github.io/slux/packages/viewfly) | [Viewfly](https://github.com/viewfly/viewfly) | `>= 3.0.0` | Viewfly 组件状态绑定 |
262
+
263
+ 格式差异:**Octane** 的公开入口是 TypeScript 源码,需消费端 Octane 编译器处理且不提供 CJS;**Ripple** 只发布 ESM,另有 `./server` 服务端入口。其余边界见各包文档。
264
+
265
+ ### 插件层
266
+
267
+ **规划中**
268
+
269
+ | 包名 | 版本 | 在线文档 | 功能 |
270
+ | ---- | ---- | -------- | ---- |
271
+ | — | — | — | — |
272
+
273
+ <!-- package-navigation:end -->
package/dist/atom.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,_,t)=>{var r=(_,t)=>{for(var r in _)__webpack_require__.o(_,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[t]:_[r]})};r(_,"get"),r(t,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{useAtom:()=>useAtom,useAtomValue:()=>useAtomValue,useSetAtom:()=>useSetAtom});const hooks_namespaceObject=require("preact/hooks"),compat_namespaceObject=require("preact/compat"),core_namespaceObject=require("@slux/core");function useAtomValue(e){let _=(0,hooks_namespaceObject.useCallback)(_=>{let t=e.subscribe(_),r=(0,core_namespaceObject.effect)(()=>{e.get()});return()=>{t(),r()}},[e]),t=(0,hooks_namespaceObject.useCallback)(()=>e.get(),[e]);return(0,compat_namespaceObject.useSyncExternalStore)(_,t,t)}function useSetAtom(e){return(0,hooks_namespaceObject.useCallback)(_=>e.set(_),[e])}function useAtom(e){return[useAtomValue(e),useSetAtom(e)]}for(var __rspack_i in exports.useAtom=__webpack_exports__.useAtom,exports.useAtomValue=__webpack_exports__.useAtomValue,exports.useSetAtom=__webpack_exports__.useSetAtom,__webpack_exports__)-1===["useAtom","useAtomValue","useSetAtom"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=atom.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.cjs","sources":["webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/atom.ts"],"sourcesContent":["__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { useCallback } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Atom, AnyReadableAtom } from \"@slux/atom\";\n\nexport function useAtomValue<T>(source: AnyReadableAtom<T>): T {\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\nexport function useSetAtom<T>(source: Atom<T>): (value: T) => void {\n return useCallback((value: T) => source.set(value), [source]);\n}\nexport function useAtom<T>(source: Atom<T>): [T, (value: T) => void] {\n return [useAtomValue(source), useSetAtom(source)];\n}\n"],"names":["__webpack_require__","e","Object","Symbol","useAtomValue","source","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","useSyncExternalStore","useSetAtom","value","useAtom"],"mappings":"wPAAAA,CAAAA,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,8UCDO,SAASG,aAAgBC,CAA0B,EACxD,IAAMC,EAAYC,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAChB,AAACC,IACC,IAAMC,EAAcJ,EAAO,SAAS,CAACG,GAC/BE,EAAUC,AAAAA,GAAAA,qBAAAA,MAAAA,AAAAA,EAAO,KACrBN,EAAO,GAAG,EACZ,GACA,MAAO,KACLI,IACAC,GACF,CACF,EACA,CAACL,EAAO,EAEJO,EAAcL,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAAY,IAAMF,EAAO,GAAG,GAAI,CAACA,EAAO,EAC5D,MAAOQ,AAAAA,GAAAA,uBAAAA,oBAAAA,AAAAA,EAAqBP,EAAWM,EAAaA,EACtD,CACO,SAASE,WAAcT,CAAe,EAC3C,MAAOE,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAAY,AAACQ,GAAaV,EAAO,GAAG,CAACU,GAAQ,CAACV,EAAO,CAC9D,CACO,SAASW,QAAWX,CAAe,EACxC,MAAO,CAACD,aAAaC,GAASS,WAAWT,GAAQ,AACnD,C"}
@@ -0,0 +1,10 @@
1
+ import type { AnyReadableAtom } from '@slux/atom';
2
+ import type { Atom } from '@slux/atom';
3
+
4
+ export declare function useAtom<T>(source: Atom<T>): [T, (value: T) => void];
5
+
6
+ export declare function useAtomValue<T>(source: AnyReadableAtom<T>): T;
7
+
8
+ export declare function useSetAtom<T>(source: Atom<T>): (value: T) => void;
9
+
10
+ export { }
package/dist/atom.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { AnyReadableAtom } from '@slux/atom';
2
+ import type { Atom } from '@slux/atom';
3
+
4
+ export declare function useAtom<T>(source: Atom<T>): [T, (value: T) => void];
5
+
6
+ export declare function useAtomValue<T>(source: AnyReadableAtom<T>): T;
7
+
8
+ export declare function useSetAtom<T>(source: Atom<T>): (value: T) => void;
9
+
10
+ export { }
package/dist/atom.js ADDED
@@ -0,0 +1,2 @@
1
+ import{useCallback as t}from"preact/hooks";import{useSyncExternalStore as e}from"preact/compat";import{effect as r}from"@slux/core";function o(o){let u=t(t=>{let e=o.subscribe(t),u=r(()=>{o.get()});return()=>{e(),u()}},[o]),m=t(()=>o.get(),[o]);return e(u,m,m)}function u(e){return t(t=>e.set(t),[e])}function m(t){return[o(t),u(t)]}export{m as useAtom,o as useAtomValue,u as useSetAtom};
2
+ //# sourceMappingURL=atom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom.js","sources":["../src/atom.ts"],"sourcesContent":["import { useCallback } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Atom, AnyReadableAtom } from \"@slux/atom\";\n\nexport function useAtomValue<T>(source: AnyReadableAtom<T>): T {\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\nexport function useSetAtom<T>(source: Atom<T>): (value: T) => void {\n return useCallback((value: T) => source.set(value), [source]);\n}\nexport function useAtom<T>(source: Atom<T>): [T, (value: T) => void] {\n return [useAtomValue(source), useSetAtom(source)];\n}\n"],"names":["useAtomValue","source","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","useSyncExternalStore","useSetAtom","value","useAtom"],"mappings":"oIAKO,SAASA,EAAgBC,CAA0B,EACxD,IAAMC,EAAYC,EAChB,AAACC,IACC,IAAMC,EAAcJ,EAAO,SAAS,CAACG,GAC/BE,EAAUC,EAAO,KACrBN,EAAO,GAAG,EACZ,GACA,MAAO,KACLI,IACAC,GACF,CACF,EACA,CAACL,EAAO,EAEJO,EAAcL,EAAY,IAAMF,EAAO,GAAG,GAAI,CAACA,EAAO,EAC5D,OAAOQ,EAAqBP,EAAWM,EAAaA,EACtD,CACO,SAASE,EAAcT,CAAe,EAC3C,OAAOE,EAAY,AAACQ,GAAaV,EAAO,GAAG,CAACU,GAAQ,CAACV,EAAO,CAC9D,CACO,SAASW,EAAWX,CAAe,EACxC,MAAO,CAACD,EAAaC,GAASS,EAAWT,GAAQ,AACnD,Q"}
package/dist/flux.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_modules__={X(e,_,r){r.d(_,{useSignal:()=>p});let t=require("preact"),u=require("preact/hooks"),a=require("preact/compat"),c=require("@slux/core"),o=(0,t.createContext)(null);function p(e){let _=(0,u.useContext)(o),r=(0,u.useCallback)(_=>{let r=e.subscribe(_),t=(0,c.effect)(()=>{e.get()});return()=>{r(),t()}},[e]),t=(0,u.useCallback)(()=>e.get(),[e]),p=(0,u.useCallback)(()=>_?_.get(e):e.get(),[_,e]);return(0,a.useSyncExternalStore)(r,t,p)}}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,_,r)=>{var t=(_,r)=>{for(var t in _)__webpack_require__.o(_,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:_[t]})};t(_,"get"),t(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};for(var __rspack_i in(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("X");__webpack_require__.d(__webpack_exports__,{},{useFluxStore:function(_){return(0,e.useSignal)(_)}})})(),exports.useFluxStore=__webpack_exports__.useFluxStore,__webpack_exports__)-1===["useFluxStore"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=flux.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flux.cjs","sources":["../src/index.ts","webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/flux.ts"],"sourcesContent":["import { createContext, createElement } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useContext } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Scope, Subscribable } from \"@slux/core\";\n\nexport const ScopeContext = createContext<Scope | null>(null);\nexport type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };\nexport function ScopeProvider({ scope, children }: ScopeProviderProps) {\n return createElement(ScopeContext.Provider, { value: scope }, children);\n}\nexport function useScopeContext(): Scope | null {\n return useContext(ScopeContext);\n}\nexport function useSignal<T>(source: Subscribable<T>): T {\n const scope = useScopeContext();\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n const getServerSnapshot = useCallback(() => (scope ? scope.get(source) : source.get()), [scope, source]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nexport { createAutoImportApis } from \"./auto-import-api.js\";\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { FluxStore } from \"@slux/flux\";\nimport { useSignal } from \"./index.js\";\n\nexport function useFluxStore<State, Action extends { type: string }>(store: FluxStore<State, Action>): State {\n return useSignal(store);\n}\n"],"names":["ScopeContext","createContext","useSignal","source","scope","useContext","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","getServerSnapshot","useSyncExternalStore","__webpack_require__","e","Object","Symbol","store"],"mappings":"8XAOaA,EAAeC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA4B,MAQjD,SAASC,EAAaC,CAAuB,EAClD,IAAMC,EAHCC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWL,GAIZM,EAAYC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAChB,AAACC,IACC,IAAMC,EAAcN,EAAO,SAAS,CAACK,GAC/BE,EAAUC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO,KACrBR,EAAO,GAAG,EACZ,GACA,MAAO,KACLM,IACAC,GACF,CACF,EACA,CAACP,EAAO,EAEJS,EAAcL,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAMJ,EAAO,GAAG,GAAI,CAACA,EAAO,EACtDU,EAAoBN,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAOH,EAAQA,EAAM,GAAG,CAACD,GAAUA,EAAO,GAAG,GAAK,CAACC,EAAOD,EAAO,EACvG,MAAOW,AAAAA,GAAAA,EAAAA,oBAAAA,AAAAA,EAAqBR,EAAWM,EAAaC,EACtD,C,wPCjCAE,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,2LCHO,SAA8DG,CAA+B,EAClG,MAAOjB,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAUiB,EACnB,C"}
@@ -0,0 +1,7 @@
1
+ import type { FluxStore } from '@slux/flux';
2
+
3
+ export declare function useFluxStore<State, Action extends {
4
+ type: string;
5
+ }>(store: FluxStore<State, Action>): State;
6
+
7
+ export { }
package/dist/flux.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { FluxStore } from '@slux/flux';
2
+
3
+ export declare function useFluxStore<State, Action extends {
4
+ type: string;
5
+ }>(store: FluxStore<State, Action>): State;
6
+
7
+ export { }
package/dist/flux.js ADDED
@@ -0,0 +1,2 @@
1
+ import{useSignal as r}from"./index.js";function o(o){return r(o)}export{o as useFluxStore};
2
+ //# sourceMappingURL=flux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flux.js","sources":["../src/flux.ts"],"sourcesContent":["import type { FluxStore } from \"@slux/flux\";\nimport { useSignal } from \"./index.js\";\n\nexport function useFluxStore<State, Action extends { type: string }>(store: FluxStore<State, Action>): State {\n return useSignal(store);\n}\n"],"names":["useFluxStore","store","useSignal"],"mappings":"iDAGO,SAASA,EAAqDC,CAA+B,EAClG,OAAOC,EAAUD,EACnB,Q"}
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_modules__={u(e,_,r){r.d(_,{Y:()=>p});let t=require("@slux/shared"),o=["ScopeContext","ScopeProvider","useScopeContext","useSignal"],p=(e="")=>(0,t.generateBatchAutoImports)([{prefix:e,fromName:"@slux/preact",imports:o}])}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,_,r)=>{var t=(_,r)=>{for(var t in _)__webpack_require__.o(_,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:_[t]})};t(_,"get"),t(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};for(var __rspack_i in(()=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ScopeContext:()=>p,ScopeProvider:()=>c,createAutoImportApis:()=>o.Y,useScopeContext:()=>a,useSignal:()=>u});let e=require("preact"),_=require("preact/hooks"),r=require("preact/compat"),t=require("@slux/core");var o=__webpack_require__("u");let p=(0,e.createContext)(null);function c({scope:_,children:r}){return(0,e.createElement)(p.Provider,{value:_},r)}function a(){return(0,_.useContext)(p)}function u(e){let o=a(),p=(0,_.useCallback)(_=>{let r=e.subscribe(_),o=(0,t.effect)(()=>{e.get()});return()=>{r(),o()}},[e]),c=(0,_.useCallback)(()=>e.get(),[e]),u=(0,_.useCallback)(()=>o?o.get(e):e.get(),[o,e]);return(0,r.useSyncExternalStore)(p,c,u)}})(),exports.ScopeContext=__webpack_exports__.ScopeContext,exports.ScopeProvider=__webpack_exports__.ScopeProvider,exports.createAutoImportApis=__webpack_exports__.createAutoImportApis,exports.useScopeContext=__webpack_exports__.useScopeContext,exports.useSignal=__webpack_exports__.useSignal,__webpack_exports__)-1===["ScopeContext","ScopeProvider","createAutoImportApis","useScopeContext","useSignal"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/auto-import-api.ts","webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/index.ts"],"sourcesContent":["import { generateBatchAutoImports } from \"@slux/shared\";\n\nconst allImportApis: string[] = [\"ScopeContext\", \"ScopeProvider\", \"useScopeContext\", \"useSignal\"];\n\nexport const createAutoImportApis = (prefix: string = \"\") => {\n return generateBatchAutoImports([\n {\n prefix,\n fromName: \"@slux/preact\",\n imports: allImportApis,\n },\n ]);\n};\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { createContext, createElement } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useContext } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Scope, Subscribable } from \"@slux/core\";\n\nexport const ScopeContext = createContext<Scope | null>(null);\nexport type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };\nexport function ScopeProvider({ scope, children }: ScopeProviderProps) {\n return createElement(ScopeContext.Provider, { value: scope }, children);\n}\nexport function useScopeContext(): Scope | null {\n return useContext(ScopeContext);\n}\nexport function useSignal<T>(source: Subscribable<T>): T {\n const scope = useScopeContext();\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n const getServerSnapshot = useCallback(() => (scope ? scope.get(source) : source.get()), [scope, source]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nexport { createAutoImportApis } from \"./auto-import-api.js\";\n"],"names":["allImportApis","createAutoImportApis","prefix","generateBatchAutoImports","__webpack_require__","e","Object","Symbol","ScopeContext","createContext","ScopeProvider","scope","children","createElement","useScopeContext","useContext","useSignal","source","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","getServerSnapshot","useSyncExternalStore"],"mappings":"+SAEMA,EAA0B,CAAC,eAAgB,gBAAiB,kBAAmB,YAAY,CAEpFC,EAAuB,CAACC,EAAiB,EAAE,GAC/CC,AAAAA,GAAAA,EAAAA,wBAAAA,AAAAA,EAAyB,CAC9B,CACED,OAAAA,EACA,SAAU,eACV,QAASF,CACX,EACD,C,wPCXHI,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,4XCCO,IAAMG,EAAeC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA4B,MAEjD,SAASC,EAAc,CAAEC,MAAAA,CAAK,CAAEC,SAAAA,CAAQ,CAAsB,EACnE,MAAOC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAAcL,EAAa,QAAQ,CAAE,CAAE,MAAOG,CAAM,EAAGC,EAChE,CACO,SAASE,IACd,MAAOC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWP,EACpB,CACO,SAASQ,EAAaC,CAAuB,EAClD,IAAMN,EAAQG,IACRI,EAAYC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAChB,AAACC,IACC,IAAMC,EAAcJ,EAAO,SAAS,CAACG,GAC/BE,EAAUC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO,KACrBN,EAAO,GAAG,EACZ,GACA,MAAO,KACLI,IACAC,GACF,CACF,EACA,CAACL,EAAO,EAEJO,EAAcL,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAMF,EAAO,GAAG,GAAI,CAACA,EAAO,EACtDQ,EAAoBN,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAOR,EAAQA,EAAM,GAAG,CAACM,GAAUA,EAAO,GAAG,GAAK,CAACN,EAAOM,EAAO,EACvG,MAAOS,AAAAA,GAAAA,EAAAA,oBAAAA,AAAAA,EAAqBR,EAAWM,EAAaC,EACtD,C"}
@@ -0,0 +1,27 @@
1
+ import type { ComponentChildren } from 'preact';
2
+ import { Context } from 'preact';
3
+ import type { Scope } from '@slux/core';
4
+ import type { Subscribable } from '@slux/core';
5
+ import { VNode } from 'preact';
6
+
7
+ export declare const createAutoImportApis: (prefix?: string) => {
8
+ [x: string]: (string | [string, string])[];
9
+ };
10
+
11
+ export declare const ScopeContext: Context<Scope | null>;
12
+
13
+ export declare function ScopeProvider({ scope, children }: ScopeProviderProps): VNode< {
14
+ value: Scope | null;
15
+ children?: ComponentChildren;
16
+ }>;
17
+
18
+ export declare type ScopeProviderProps = {
19
+ scope: Scope;
20
+ children?: ComponentChildren;
21
+ };
22
+
23
+ export declare function useScopeContext(): Scope | null;
24
+
25
+ export declare function useSignal<T>(source: Subscribable<T>): T;
26
+
27
+ export { }
@@ -0,0 +1,27 @@
1
+ import type { ComponentChildren } from 'preact';
2
+ import { Context } from 'preact';
3
+ import type { Scope } from '@slux/core';
4
+ import type { Subscribable } from '@slux/core';
5
+ import { VNode } from 'preact';
6
+
7
+ export declare const createAutoImportApis: (prefix?: string) => {
8
+ [x: string]: (string | [string, string])[];
9
+ };
10
+
11
+ export declare const ScopeContext: Context<Scope | null>;
12
+
13
+ export declare function ScopeProvider({ scope, children }: ScopeProviderProps): VNode< {
14
+ value: Scope | null;
15
+ children?: ComponentChildren;
16
+ }>;
17
+
18
+ export declare type ScopeProviderProps = {
19
+ scope: Scope;
20
+ children?: ComponentChildren;
21
+ };
22
+
23
+ export declare function useScopeContext(): Scope | null;
24
+
25
+ export declare function useSignal<T>(source: Subscribable<T>): T;
26
+
27
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import{createContext as e,createElement as t}from"preact";import{useCallback as r,useContext as o}from"preact/hooks";import{useSyncExternalStore as p}from"preact/compat";import{effect as u}from"@slux/core";import{generateBatchAutoImports as c}from"@slux/shared";let n=["ScopeContext","ScopeProvider","useScopeContext","useSignal"],i=(e="")=>c([{prefix:e,fromName:"@slux/preact",imports:n}]),m=e(null);function s({scope:e,children:r}){return t(m.Provider,{value:e},r)}function a(){return o(m)}function l(e){let t=a();return p(r(t=>{let r=e.subscribe(t),o=u(()=>{e.get()});return()=>{r(),o()}},[e]),r(()=>e.get(),[e]),r(()=>t?t.get(e):e.get(),[t,e]))}export{m as ScopeContext,s as ScopeProvider,i as createAutoImportApis,a as useScopeContext,l as useSignal};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/auto-import-api.ts","../src/index.ts"],"sourcesContent":["import { generateBatchAutoImports } from \"@slux/shared\";\n\nconst allImportApis: string[] = [\"ScopeContext\", \"ScopeProvider\", \"useScopeContext\", \"useSignal\"];\n\nexport const createAutoImportApis = (prefix: string = \"\") => {\n return generateBatchAutoImports([\n {\n prefix,\n fromName: \"@slux/preact\",\n imports: allImportApis,\n },\n ]);\n};\n","import { createContext, createElement } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useContext } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Scope, Subscribable } from \"@slux/core\";\n\nexport const ScopeContext = createContext<Scope | null>(null);\nexport type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };\nexport function ScopeProvider({ scope, children }: ScopeProviderProps) {\n return createElement(ScopeContext.Provider, { value: scope }, children);\n}\nexport function useScopeContext(): Scope | null {\n return useContext(ScopeContext);\n}\nexport function useSignal<T>(source: Subscribable<T>): T {\n const scope = useScopeContext();\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n const getServerSnapshot = useCallback(() => (scope ? scope.get(source) : source.get()), [scope, source]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nexport { createAutoImportApis } from \"./auto-import-api.js\";\n"],"names":["allImportApis","createAutoImportApis","prefix","generateBatchAutoImports","ScopeContext","createContext","ScopeProvider","scope","children","createElement","useScopeContext","useContext","useSignal","source","useSyncExternalStore","useCallback","notify","unsubscribe","dispose","effect"],"mappings":"sQAEA,IAAMA,EAA0B,CAAC,eAAgB,gBAAiB,kBAAmB,YAAY,CAEpFC,EAAuB,CAACC,EAAiB,EAAE,GAC/CC,EAAyB,CAC9B,CACED,OAAAA,EACA,SAAU,eACV,QAASF,CACX,EACD,ECJUI,EAAeC,EAA4B,MAEjD,SAASC,EAAc,CAAEC,MAAAA,CAAK,CAAEC,SAAAA,CAAQ,CAAsB,EACnE,OAAOC,EAAcL,EAAa,QAAQ,CAAE,CAAE,MAAOG,CAAM,EAAGC,EAChE,CACO,SAASE,IACd,OAAOC,EAAWP,EACpB,CACO,SAASQ,EAAaC,CAAuB,EAClD,IAAMN,EAAQG,IAgBd,OAAOI,EAfWC,EAChB,AAACC,IACC,IAAMC,EAAcJ,EAAO,SAAS,CAACG,GAC/BE,EAAUC,EAAO,KACrBN,EAAO,GAAG,EACZ,GACA,MAAO,KACLI,IACAC,GACF,CACF,EACA,CAACL,EAAO,EAEUE,EAAY,IAAMF,EAAO,GAAG,GAAI,CAACA,EAAO,EAClCE,EAAY,IAAOR,EAAQA,EAAM,GAAG,CAACM,GAAUA,EAAO,GAAG,GAAK,CAACN,EAAOM,EAAO,EAEzG,Q"}
package/dist/proxy.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,_,r)=>{var a=(_,r)=>{for(var a in _)__webpack_require__.o(_,a)&&!__webpack_require__.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,[r]:_[a]})};a(_,"get"),a(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{useSnapshot:()=>useSnapshot});const hooks_namespaceObject=require("preact/hooks"),proxy_namespaceObject=require("@slux/proxy"),compat_namespaceObject=require("preact/compat");function useSnapshot(e){let _=(0,hooks_namespaceObject.useCallback)(_=>(0,proxy_namespaceObject.subscribe)(e,_),[e]),r=(0,hooks_namespaceObject.useCallback)(()=>(0,proxy_namespaceObject.snapshot)(e),[e]);return(0,compat_namespaceObject.useSyncExternalStore)(_,r,r)}for(var __rspack_i in exports.useSnapshot=__webpack_exports__.useSnapshot,__webpack_exports__)-1===["useSnapshot"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=proxy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.cjs","sources":["webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/proxy.ts"],"sourcesContent":["__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { useCallback } from \"preact/hooks\";\nimport { snapshot, subscribe } from \"@slux/proxy\";\nimport type { Snapshot } from \"@slux/proxy\";\nimport { useSyncExternalStore } from \"preact/compat\";\n\nexport function useSnapshot<T extends object>(source: T): Snapshot<T> {\n const sub = useCallback((notify: () => void) => subscribe(source, notify), [source]);\n const getSnapshot = useCallback(() => snapshot(source), [source]);\n return useSyncExternalStore(sub, getSnapshot, getSnapshot);\n}\n"],"names":["__webpack_require__","e","Object","Symbol","useSnapshot","source","sub","useCallback","notify","subscribe","getSnapshot","snapshot","useSyncExternalStore"],"mappings":"wPAAAA,CAAAA,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,gSCDO,SAASG,YAA8BC,CAAS,EACrD,IAAMC,EAAMC,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAAY,AAACC,GAAuBC,AAAAA,GAAAA,sBAAAA,SAAAA,AAAAA,EAAUJ,EAAQG,GAAS,CAACH,EAAO,EAC7EK,EAAcH,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAAY,IAAMI,AAAAA,GAAAA,sBAAAA,QAAAA,AAAAA,EAASN,GAAS,CAACA,EAAO,EAChE,MAAOO,AAAAA,GAAAA,uBAAAA,oBAAAA,AAAAA,EAAqBN,EAAKI,EAAaA,EAChD,C"}
@@ -0,0 +1,5 @@
1
+ import type { Snapshot } from '@slux/proxy';
2
+
3
+ export declare function useSnapshot<T extends object>(source: T): Snapshot<T>;
4
+
5
+ export { }
@@ -0,0 +1,5 @@
1
+ import type { Snapshot } from '@slux/proxy';
2
+
3
+ export declare function useSnapshot<T extends object>(source: T): Snapshot<T>;
4
+
5
+ export { }
package/dist/proxy.js ADDED
@@ -0,0 +1,2 @@
1
+ import{useCallback as o}from"preact/hooks";import{snapshot as r,subscribe as t}from"@slux/proxy";import{useSyncExternalStore as p}from"preact/compat";function m(m){let e=o(o=>t(m,o),[m]),a=o(()=>r(m),[m]);return p(e,a,a)}export{m as useSnapshot};
2
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sources":["../src/proxy.ts"],"sourcesContent":["import { useCallback } from \"preact/hooks\";\nimport { snapshot, subscribe } from \"@slux/proxy\";\nimport type { Snapshot } from \"@slux/proxy\";\nimport { useSyncExternalStore } from \"preact/compat\";\n\nexport function useSnapshot<T extends object>(source: T): Snapshot<T> {\n const sub = useCallback((notify: () => void) => subscribe(source, notify), [source]);\n const getSnapshot = useCallback(() => snapshot(source), [source]);\n return useSyncExternalStore(sub, getSnapshot, getSnapshot);\n}\n"],"names":["useSnapshot","source","sub","useCallback","notify","subscribe","getSnapshot","snapshot","useSyncExternalStore"],"mappings":"sJAKO,SAASA,EAA8BC,CAAS,EACrD,IAAMC,EAAMC,EAAY,AAACC,GAAuBC,EAAUJ,EAAQG,GAAS,CAACH,EAAO,EAC7EK,EAAcH,EAAY,IAAMI,EAASN,GAAS,CAACA,EAAO,EAChE,OAAOO,EAAqBN,EAAKI,EAAaA,EAChD,Q"}
package/dist/rxjs.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_modules__={X(e,_,r){r.d(_,{useSignal:()=>p});let t=require("preact"),a=require("preact/hooks"),c=require("preact/compat"),u=require("@slux/core"),o=(0,t.createContext)(null);function p(e){let _=(0,a.useContext)(o),r=(0,a.useCallback)(_=>{let r=e.subscribe(_),t=(0,u.effect)(()=>{e.get()});return()=>{r(),t()}},[e]),t=(0,a.useCallback)(()=>e.get(),[e]),p=(0,a.useCallback)(()=>_?_.get(e):e.get(),[_,e]);return(0,c.useSyncExternalStore)(r,t,p)}}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,_,r)=>{var t=(_,r)=>{for(var t in _)__webpack_require__.o(_,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:_[t]})};t(_,"get"),t(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};for(var __rspack_i in(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("X");__webpack_require__.d(__webpack_exports__,{},{useObservable:function(_){return(0,e.useSignal)(_)}})})(),exports.useObservable=__webpack_exports__.useObservable,__webpack_exports__)-1===["useObservable"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=rxjs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rxjs.cjs","sources":["../src/index.ts","webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/rxjs.ts"],"sourcesContent":["import { createContext, createElement } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useContext } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Scope, Subscribable } from \"@slux/core\";\n\nexport const ScopeContext = createContext<Scope | null>(null);\nexport type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };\nexport function ScopeProvider({ scope, children }: ScopeProviderProps) {\n return createElement(ScopeContext.Provider, { value: scope }, children);\n}\nexport function useScopeContext(): Scope | null {\n return useContext(ScopeContext);\n}\nexport function useSignal<T>(source: Subscribable<T>): T {\n const scope = useScopeContext();\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n const getServerSnapshot = useCallback(() => (scope ? scope.get(source) : source.get()), [scope, source]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nexport { createAutoImportApis } from \"./auto-import-api.js\";\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { ObservableState } from \"@slux/rxjs\";\nimport { useSignal } from \"./index.js\";\n\nexport function useObservable<T>(source: ObservableState<T>): T {\n return useSignal(source);\n}\n"],"names":["ScopeContext","createContext","useSignal","source","scope","useContext","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","getServerSnapshot","useSyncExternalStore","__webpack_require__","e","Object","Symbol"],"mappings":"8XAOaA,EAAeC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA4B,MAQjD,SAASC,EAAaC,CAAuB,EAClD,IAAMC,EAHCC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWL,GAIZM,EAAYC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAChB,AAACC,IACC,IAAMC,EAAcN,EAAO,SAAS,CAACK,GAC/BE,EAAUC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO,KACrBR,EAAO,GAAG,EACZ,GACA,MAAO,KACLM,IACAC,GACF,CACF,EACA,CAACP,EAAO,EAEJS,EAAcL,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAMJ,EAAO,GAAG,GAAI,CAACA,EAAO,EACtDU,EAAoBN,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAOH,EAAQA,EAAM,GAAG,CAACD,GAAUA,EAAO,GAAG,GAAK,CAACC,EAAOD,EAAO,EACvG,MAAOW,AAAAA,GAAAA,EAAAA,oBAAAA,AAAAA,EAAqBR,EAAWM,EAAaC,EACtD,C,wPCjCAE,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,4LCHO,SAA0Bb,CAA0B,EACzD,MAAOD,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAUC,EACnB,C"}
@@ -0,0 +1,5 @@
1
+ import type { ObservableState } from '@slux/rxjs';
2
+
3
+ export declare function useObservable<T>(source: ObservableState<T>): T;
4
+
5
+ export { }
package/dist/rxjs.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { ObservableState } from '@slux/rxjs';
2
+
3
+ export declare function useObservable<T>(source: ObservableState<T>): T;
4
+
5
+ export { }
package/dist/rxjs.js ADDED
@@ -0,0 +1,2 @@
1
+ import{useSignal as r}from"./index.js";function e(e){return r(e)}export{e as useObservable};
2
+ //# sourceMappingURL=rxjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rxjs.js","sources":["../src/rxjs.ts"],"sourcesContent":["import type { ObservableState } from \"@slux/rxjs\";\nimport { useSignal } from \"./index.js\";\n\nexport function useObservable<T>(source: ObservableState<T>): T {\n return useSignal(source);\n}\n"],"names":["useObservable","source","useSignal"],"mappings":"iDAGO,SAASA,EAAiBC,CAA0B,EACzD,OAAOC,EAAUD,EACnB,Q"}
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_modules__={X(e,_,r){r.d(_,{useSignal:()=>p});let t=require("preact"),a=require("preact/hooks"),c=require("preact/compat"),u=require("@slux/core"),o=(0,t.createContext)(null);function p(e){let _=(0,a.useContext)(o),r=(0,a.useCallback)(_=>{let r=e.subscribe(_),t=(0,u.effect)(()=>{e.get()});return()=>{r(),t()}},[e]),t=(0,a.useCallback)(()=>e.get(),[e]),p=(0,a.useCallback)(()=>_?_.get(e):e.get(),[_,e]);return(0,c.useSyncExternalStore)(r,t,p)}}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,_,r)=>{var t=(_,r)=>{for(var t in _)__webpack_require__.o(_,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:_[t]})};t(_,"get"),t(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};for(var __rspack_i in(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("X");__webpack_require__.d(__webpack_exports__,{},{useMachine:function(_){return(0,e.useSignal)(_)}})})(),exports.useMachine=__webpack_exports__.useMachine,__webpack_exports__)-1===["useMachine"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=state-machine.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.cjs","sources":["../src/index.ts","webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/state-machine.ts"],"sourcesContent":["import { createContext, createElement } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useContext } from \"preact/hooks\";\nimport { useSyncExternalStore } from \"preact/compat\";\nimport { effect } from \"@slux/core\";\nimport type { Scope, Subscribable } from \"@slux/core\";\n\nexport const ScopeContext = createContext<Scope | null>(null);\nexport type ScopeProviderProps = { scope: Scope; children?: ComponentChildren };\nexport function ScopeProvider({ scope, children }: ScopeProviderProps) {\n return createElement(ScopeContext.Provider, { value: scope }, children);\n}\nexport function useScopeContext(): Scope | null {\n return useContext(ScopeContext);\n}\nexport function useSignal<T>(source: Subscribable<T>): T {\n const scope = useScopeContext();\n const subscribe = useCallback(\n (notify: () => void) => {\n const unsubscribe = source.subscribe(notify);\n const dispose = effect(() => {\n source.get();\n });\n return () => {\n unsubscribe();\n dispose();\n };\n },\n [source],\n );\n const getSnapshot = useCallback(() => source.get(), [source]);\n const getServerSnapshot = useCallback(() => (scope ? scope.get(source) : source.get()), [scope, source]);\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nexport { createAutoImportApis } from \"./auto-import-api.js\";\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { MachineSnapshot, StateMachine } from \"@slux/state-machine\";\nimport { useSignal } from \"./index.js\";\n\nexport function useMachine<Context, Event extends { type: string }, State extends string>(\n machine: StateMachine<Context, Event, State>,\n): MachineSnapshot<Context, State> {\n return useSignal(machine);\n}\n"],"names":["ScopeContext","createContext","useSignal","source","scope","useContext","subscribe","useCallback","notify","unsubscribe","dispose","effect","getSnapshot","getServerSnapshot","useSyncExternalStore","__webpack_require__","e","Object","Symbol","machine"],"mappings":"8XAOaA,EAAeC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA4B,MAQjD,SAASC,EAAaC,CAAuB,EAClD,IAAMC,EAHCC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWL,GAIZM,EAAYC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAChB,AAACC,IACC,IAAMC,EAAcN,EAAO,SAAS,CAACK,GAC/BE,EAAUC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO,KACrBR,EAAO,GAAG,EACZ,GACA,MAAO,KACLM,IACAC,GACF,CACF,EACA,CAACP,EAAO,EAEJS,EAAcL,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAMJ,EAAO,GAAG,GAAI,CAACA,EAAO,EACtDU,EAAoBN,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,IAAOH,EAAQA,EAAM,GAAG,CAACD,GAAUA,EAAO,GAAG,GAAK,CAACC,EAAOD,EAAO,EACvG,MAAOW,AAAAA,GAAAA,EAAAA,oBAAAA,AAAAA,EAAqBR,EAAWM,EAAaC,EACtD,C,wPCjCAE,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,yLCHO,SACLG,CAA4C,EAE5C,MAAOjB,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAUiB,EACnB,C"}
@@ -0,0 +1,8 @@
1
+ import type { MachineSnapshot } from '@slux/state-machine';
2
+ import type { StateMachine } from '@slux/state-machine';
3
+
4
+ export declare function useMachine<Context, Event extends {
5
+ type: string;
6
+ }, State extends string>(machine: StateMachine<Context, Event, State>): MachineSnapshot<Context, State>;
7
+
8
+ export { }
@@ -0,0 +1,8 @@
1
+ import type { MachineSnapshot } from '@slux/state-machine';
2
+ import type { StateMachine } from '@slux/state-machine';
3
+
4
+ export declare function useMachine<Context, Event extends {
5
+ type: string;
6
+ }, State extends string>(machine: StateMachine<Context, Event, State>): MachineSnapshot<Context, State>;
7
+
8
+ export { }
@@ -0,0 +1,2 @@
1
+ import{useSignal as r}from"./index.js";function _(_){return r(_)}export{_ as useMachine};
2
+ //# sourceMappingURL=state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.js","sources":["../src/state-machine.ts"],"sourcesContent":["import type { MachineSnapshot, StateMachine } from \"@slux/state-machine\";\nimport { useSignal } from \"./index.js\";\n\nexport function useMachine<Context, Event extends { type: string }, State extends string>(\n machine: StateMachine<Context, Event, State>,\n): MachineSnapshot<Context, State> {\n return useSignal(machine);\n}\n"],"names":["useMachine","machine","useSignal"],"mappings":"iDAGO,SAASA,EACdC,CAA4C,EAE5C,OAAOC,EAAUD,EACnB,Q"}
package/dist/store.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,_,r)=>{var t=(_,r)=>{for(var t in _)__webpack_require__.o(_,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:_[t]})};t(_,"get"),t(r,"value")},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{useStore:()=>useStore});const hooks_namespaceObject=require("preact/hooks"),compat_namespaceObject=require("preact/compat");function useStore(e,_,r=Object.is){let t=(0,hooks_namespaceObject.useCallback)(_=>e.subscribe(_),[e]),c=(0,hooks_namespaceObject.useMemo)(()=>{let t;return _?()=>{let c=e.getState();if(t&&Object.is(t.state,c))return t.selection;let o=_(c),a=t&&r(t.selection,o)?t.selection:o;return t={state:c,selection:a},a}:()=>e.getState()},[e,_,r]);return(0,compat_namespaceObject.useSyncExternalStore)(t,c,c)}for(var __rspack_i in exports.useStore=__webpack_exports__.useStore,__webpack_exports__)-1===["useStore"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
2
+ //# sourceMappingURL=store.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.cjs","sources":["webpack://webpack/runtime/define_property_getters","webpack://webpack/runtime/has_own_property","webpack://webpack/runtime/make_namespace_object","../src/store.ts"],"sourcesContent":["__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { useCallback, useMemo } from \"preact/hooks\";\nimport type { StoreApi } from \"@slux/store\";\nimport { useSyncExternalStore } from \"preact/compat\";\n\nexport function useStore<State extends object>(store: StoreApi<State>): State;\nexport function useStore<State extends object, Selection>(\n store: StoreApi<State>,\n selector: (state: State) => Selection,\n equalityFn?: (previous: Selection, next: Selection) => boolean,\n): Selection;\nexport function useStore<State extends object, Selection>(\n store: StoreApi<State>,\n selector?: (state: State) => Selection,\n equalityFn: (previous: Selection, next: Selection) => boolean = Object.is,\n): State | Selection {\n const subscribe = useCallback((notify: () => void) => store.subscribe(notify), [store]);\n const getSnapshot = useMemo(() => {\n if (!selector) return () => store.getState();\n let cache: { state: State; selection: Selection } | undefined;\n return () => {\n const state = store.getState();\n if (cache && Object.is(cache.state, state)) return cache.selection;\n const next = selector(state);\n const selection = cache && equalityFn(cache.selection, next) ? cache.selection : next;\n cache = { state, selection };\n return selection;\n };\n }, [store, selector, equalityFn]);\n return useSyncExternalStore<State | Selection>(subscribe, getSnapshot, getSnapshot);\n}\n"],"names":["__webpack_require__","e","Object","Symbol","useStore","store","selector","equalityFn","subscribe","useCallback","notify","getSnapshot","useMemo","cache","state","next","selection","useSyncExternalStore"],"mappings":"wPAAAA,CAAAA,oBAAoB,CAAC,CAAG,CAACC,EAAS,EAAS,KAC1C,IAAI,EAAS,CAAC,EAAM,KACnB,IAAI,IAAI,KAAO,EACXD,oBAAoB,CAAC,CAAC,EAAM,IAAQ,CAACA,oBAAoB,CAAC,CAACC,EAAS,IACtEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,CAAC,EAAK,CAAE,CAAI,CAAC,EAAI,AAAC,EAG7E,EACA,EAAO,EAAS,OAChB,EAAO,EAAQ,QAChB,ECVAD,oBAAoB,CAAC,CAAG,CAAC,EAAK,IAAUE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClFF,oBAAoB,CAAC,CAAG,AAACC,IACrB,AAAkB,IAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,6OCIO,SAASG,SACdC,CAAsB,CACtBC,CAAsC,CACtCC,EAAgEL,OAAO,EAAE,EAEzE,IAAMM,EAAYC,AAAAA,GAAAA,sBAAAA,WAAAA,AAAAA,EAAY,AAACC,GAAuBL,EAAM,SAAS,CAACK,GAAS,CAACL,EAAM,EAChFM,EAAcC,AAAAA,GAAAA,sBAAAA,OAAAA,AAAAA,EAAQ,SAEtBC,SADJ,AAAKP,EAEE,KACL,IAAMQ,EAAQT,EAAM,QAAQ,GAC5B,GAAIQ,GAASX,OAAO,EAAE,CAACW,EAAM,KAAK,CAAEC,GAAQ,OAAOD,EAAM,SAAS,CAClE,IAAME,EAAOT,EAASQ,GAChBE,EAAYH,GAASN,EAAWM,EAAM,SAAS,CAAEE,GAAQF,EAAM,SAAS,CAAGE,EAEjF,OADAF,EAAQ,CAAEC,MAAAA,EAAOE,UAAAA,CAAU,EACpBA,CACT,EATsB,IAAMX,EAAM,QAAQ,EAU5C,EAAG,CAACA,EAAOC,EAAUC,EAAW,EAChC,MAAOU,AAAAA,GAAAA,uBAAAA,oBAAAA,AAAAA,EAAwCT,EAAWG,EAAaA,EACzE,C"}
@@ -0,0 +1,7 @@
1
+ import type { StoreApi } from '@slux/store';
2
+
3
+ export declare function useStore<State extends object>(store: StoreApi<State>): State;
4
+
5
+ export declare function useStore<State extends object, Selection>(store: StoreApi<State>, selector: (state: State) => Selection, equalityFn?: (previous: Selection, next: Selection) => boolean): Selection;
6
+
7
+ export { }
@@ -0,0 +1,7 @@
1
+ import type { StoreApi } from '@slux/store';
2
+
3
+ export declare function useStore<State extends object>(store: StoreApi<State>): State;
4
+
5
+ export declare function useStore<State extends object, Selection>(store: StoreApi<State>, selector: (state: State) => Selection, equalityFn?: (previous: Selection, next: Selection) => boolean): Selection;
6
+
7
+ export { }
package/dist/store.js ADDED
@@ -0,0 +1,2 @@
1
+ import{useCallback as t,useMemo as e}from"preact/hooks";import{useSyncExternalStore as r}from"preact/compat";function o(c,i,s=Object.is){let n=t(t=>c.subscribe(t),[c]),l=e(()=>{let t;return i?()=>{let e=c.getState();if(t&&Object.is(t.state,e))return t.selection;let r=i(e),o=t&&s(t.selection,r)?t.selection:r;return t={state:e,selection:o},o}:()=>c.getState()},[c,i,s]);return r(n,l,l)}export{o as useStore};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { useCallback, useMemo } from \"preact/hooks\";\nimport type { StoreApi } from \"@slux/store\";\nimport { useSyncExternalStore } from \"preact/compat\";\n\nexport function useStore<State extends object>(store: StoreApi<State>): State;\nexport function useStore<State extends object, Selection>(\n store: StoreApi<State>,\n selector: (state: State) => Selection,\n equalityFn?: (previous: Selection, next: Selection) => boolean,\n): Selection;\nexport function useStore<State extends object, Selection>(\n store: StoreApi<State>,\n selector?: (state: State) => Selection,\n equalityFn: (previous: Selection, next: Selection) => boolean = Object.is,\n): State | Selection {\n const subscribe = useCallback((notify: () => void) => store.subscribe(notify), [store]);\n const getSnapshot = useMemo(() => {\n if (!selector) return () => store.getState();\n let cache: { state: State; selection: Selection } | undefined;\n return () => {\n const state = store.getState();\n if (cache && Object.is(cache.state, state)) return cache.selection;\n const next = selector(state);\n const selection = cache && equalityFn(cache.selection, next) ? cache.selection : next;\n cache = { state, selection };\n return selection;\n };\n }, [store, selector, equalityFn]);\n return useSyncExternalStore<State | Selection>(subscribe, getSnapshot, getSnapshot);\n}\n"],"names":["useStore","store","selector","equalityFn","Object","subscribe","useCallback","notify","getSnapshot","useMemo","cache","state","next","selection","useSyncExternalStore"],"mappings":"6GAUO,SAASA,EACdC,CAAsB,CACtBC,CAAsC,CACtCC,EAAgEC,OAAO,EAAE,EAEzE,IAAMC,EAAYC,EAAY,AAACC,GAAuBN,EAAM,SAAS,CAACM,GAAS,CAACN,EAAM,EAChFO,EAAcC,EAAQ,SAEtBC,SADJ,AAAKR,EAEE,KACL,IAAMS,EAAQV,EAAM,QAAQ,GAC5B,GAAIS,GAASN,OAAO,EAAE,CAACM,EAAM,KAAK,CAAEC,GAAQ,OAAOD,EAAM,SAAS,CAClE,IAAME,EAAOV,EAASS,GAChBE,EAAYH,GAASP,EAAWO,EAAM,SAAS,CAAEE,GAAQF,EAAM,SAAS,CAAGE,EAEjF,OADAF,EAAQ,CAAEC,MAAAA,EAAOE,UAAAA,CAAU,EACpBA,CACT,EATsB,IAAMZ,EAAM,QAAQ,EAU5C,EAAG,CAACA,EAAOC,EAAUC,EAAW,EAChC,OAAOW,EAAwCT,EAAWG,EAAaA,EACzE,Q"}
package/package.json CHANGED
@@ -1,6 +1,163 @@
1
1
  {
2
2
  "name": "@slux/preact",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.1",
4
+ "description": "slux preact bindings",
5
+ "keywords": [
6
+ "slux",
7
+ "preact",
8
+ "hooks",
9
+ "bindings",
10
+ "state-management"
11
+ ],
12
+ "type": "module",
13
+ "sideEffects": false,
14
+ "license": "MIT",
15
+ "author": "itmanyong <itmanyong@gmail.com>",
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/itmanyong/slux.git",
22
+ "directory": "packages/preact"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md",
27
+ "CHANGELOG.md",
28
+ "package.json"
29
+ ],
30
+ "main": "./dist/index.cjs",
31
+ "module": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "exports": {
34
+ ".": {
35
+ "import": {
36
+ "types": "./dist/index.d.ts",
37
+ "default": "./dist/index.js"
38
+ },
39
+ "require": {
40
+ "types": "./dist/index.d.cts",
41
+ "default": "./dist/index.cjs"
42
+ }
43
+ },
44
+ "./atom": {
45
+ "import": {
46
+ "types": "./dist/atom.d.ts",
47
+ "default": "./dist/atom.js"
48
+ },
49
+ "require": {
50
+ "types": "./dist/atom.d.cts",
51
+ "default": "./dist/atom.cjs"
52
+ }
53
+ },
54
+ "./store": {
55
+ "import": {
56
+ "types": "./dist/store.d.ts",
57
+ "default": "./dist/store.js"
58
+ },
59
+ "require": {
60
+ "types": "./dist/store.d.cts",
61
+ "default": "./dist/store.cjs"
62
+ }
63
+ },
64
+ "./proxy": {
65
+ "import": {
66
+ "types": "./dist/proxy.d.ts",
67
+ "default": "./dist/proxy.js"
68
+ },
69
+ "require": {
70
+ "types": "./dist/proxy.d.cts",
71
+ "default": "./dist/proxy.cjs"
72
+ }
73
+ },
74
+ "./package.json": "./package.json",
75
+ "./flux": {
76
+ "import": {
77
+ "types": "./dist/flux.d.ts",
78
+ "default": "./dist/flux.js"
79
+ },
80
+ "require": {
81
+ "types": "./dist/flux.d.cts",
82
+ "default": "./dist/flux.cjs"
83
+ }
84
+ },
85
+ "./state-machine": {
86
+ "import": {
87
+ "types": "./dist/state-machine.d.ts",
88
+ "default": "./dist/state-machine.js"
89
+ },
90
+ "require": {
91
+ "types": "./dist/state-machine.d.cts",
92
+ "default": "./dist/state-machine.cjs"
93
+ }
94
+ },
95
+ "./rxjs": {
96
+ "import": {
97
+ "types": "./dist/rxjs.d.ts",
98
+ "default": "./dist/rxjs.js"
99
+ },
100
+ "require": {
101
+ "types": "./dist/rxjs.d.cts",
102
+ "default": "./dist/rxjs.cjs"
103
+ }
104
+ }
105
+ },
106
+ "peerDependencies": {
107
+ "@slux/atom": "^0.1.1",
108
+ "@slux/core": "^0.1.1",
109
+ "@slux/proxy": "^0.1.1",
110
+ "@slux/store": "^0.1.1",
111
+ "preact": ">=10.5.0",
112
+ "@slux/flux": "^0.1.1",
113
+ "@slux/state-machine": "^0.1.1",
114
+ "@slux/rxjs": "^0.1.1"
115
+ },
116
+ "peerDependenciesMeta": {
117
+ "@slux/atom": {
118
+ "optional": true
119
+ },
120
+ "@slux/proxy": {
121
+ "optional": true
122
+ },
123
+ "@slux/store": {
124
+ "optional": true
125
+ },
126
+ "@slux/flux": {
127
+ "optional": true
128
+ },
129
+ "@slux/state-machine": {
130
+ "optional": true
131
+ },
132
+ "@slux/rxjs": {
133
+ "optional": true
134
+ }
135
+ },
136
+ "devDependencies": {
137
+ "@slux/atom": "0.1.1",
138
+ "@slux/core": "0.1.1",
139
+ "@slux/proxy": "0.1.1",
140
+ "@slux/store": "0.1.1",
141
+ "jsdom": "30.1.3",
142
+ "rstack": "0.9.0",
143
+ "typescript": "7.1.0-beta",
144
+ "preact": "11.2.0",
145
+ "preact-render-to-string": "6.8.2",
146
+ "@slux/flux": "0.1.1",
147
+ "@slux/state-machine": "0.1.1",
148
+ "@slux/rxjs": "0.1.1",
149
+ "rxjs": "7.8.2"
150
+ },
151
+ "dependencies": {
152
+ "@slux/shared": "0.1.1"
153
+ },
154
+ "scripts": {
155
+ "dev": "rs lib -w",
156
+ "build": "rs lib",
157
+ "test": "rs test",
158
+ "lint": "rs lint",
159
+ "fmt": "rs fmt",
160
+ "typecheck": "tsc --noEmit",
161
+ "clean": "rm -rf dist node_modules .turbo"
162
+ }
6
163
  }