@rbxts/app-forge 0.7.2-alpha.9 → 0.7.2-prototype.2
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/README.md +86 -372
- package/out/{vide/decorator.d.ts → appRegistry.d.ts} +1 -1
- package/out/{vide/decorator.luau → appRegistry.luau} +1 -1
- package/out/{vide/context.d.ts → context.d.ts} +1 -1
- package/out/global.d.ts +1 -1
- package/out/{vide/hooks → hooks}/useAppContext.d.ts +1 -1
- package/out/{vide/hooks → hooks}/useAppContext.luau +1 -1
- package/out/{vide/hooks → hooks}/useEventListener.luau +1 -1
- package/out/{vide/hooks → hooks}/usePx.luau +2 -2
- package/out/index.d.ts +5 -11
- package/out/init.luau +6 -14
- package/out/{vide/index.d.ts → mount.d.ts} +8 -8
- package/out/{vide/init.luau → mount.luau} +57 -109
- package/out/renderManager.d.ts +7 -0
- package/out/renderManager.luau +36 -0
- package/out/{vide/classes/rules → ruleEngine}/exclusiveGroup.d.ts +1 -1
- package/out/{vide/classes/rules → ruleEngine}/exclusiveGroup.luau +1 -1
- package/out/ruleEngine/index.d.ts +7 -0
- package/out/{vide/classes/rules → ruleEngine}/init.luau +14 -12
- package/out/{react/rules → ruleEngine}/parent.d.ts +1 -1
- package/out/{vide/classes/rules → ruleEngine}/parent.luau +1 -1
- package/out/{vide/types.d.ts → types.d.ts} +13 -13
- package/package.json +4 -10
- package/out/react/container.d.ts +0 -10
- package/out/react/container.luau +0 -60
- package/out/react/context.d.ts +0 -7
- package/out/react/context.luau +0 -12
- package/out/react/decorator.d.ts +0 -14
- package/out/react/decorator.luau +0 -51
- package/out/react/helpers.d.ts +0 -6
- package/out/react/helpers.luau +0 -74
- package/out/react/hooks/useAppContext.d.ts +0 -5
- package/out/react/hooks/useAppContext.luau +0 -16
- package/out/react/hooks/usePx.d.ts +0 -15
- package/out/react/hooks/usePx.luau +0 -117
- package/out/react/index.d.ts +0 -44
- package/out/react/init.luau +0 -123
- package/out/react/rules/index.d.ts +0 -6
- package/out/react/rules/init.luau +0 -27
- package/out/react/rules/parent.luau +0 -42
- package/out/react/types.d.ts +0 -44
- package/out/vide/classes/renders.d.ts +0 -25
- package/out/vide/classes/renders.luau +0 -255
- package/out/vide/classes/rules/index.d.ts +0 -7
- package/out/vide/classes/rules/parent.d.ts +0 -2
- package/out/vide/debug/index.d.ts +0 -3
- package/out/vide/debug/init.luau +0 -8
- /package/out/{vide/context.luau → context.luau} +0 -0
- /package/out/{vide/debug/debugger.d.ts → debugger.d.ts} +0 -0
- /package/out/{vide/debug/debugger.luau → debugger.luau} +0 -0
- /package/out/{vide/hooks → hooks}/useEventListener.d.ts +0 -0
- /package/out/{vide/hooks → hooks}/usePx.d.ts +0 -0
- /package/out/{vide/debug/logger.d.ts → logger.d.ts} +0 -0
- /package/out/{vide/debug/logger.luau → logger.luau} +0 -0
package/README.md
CHANGED
|
@@ -1,238 +1,124 @@
|
|
|
1
1
|
# AppForge
|
|
2
2
|
|
|
3
|
-
> ⚠️ **Documentation Notice**
|
|
4
|
-
>
|
|
5
|
-
> This README was written with the assistance of **AI tooling**.
|
|
6
|
-
> I do not currently have the time to write a fully hand-crafted documentation site, so there may be typos, rough wording, or missing explanations.
|
|
7
|
-
>
|
|
8
|
-
> If you find an issue, inconsistency, or bug in the docs or API, please **@ me on Discord** in the **roblox-ts Discord**: `@loner71x`.
|
|
9
|
-
>
|
|
10
|
-
> Thank you for your patience ❤️
|
|
3
|
+
> ⚠️ **Documentation Notice**
|
|
4
|
+
> Written with AI assistance. Please report any issues in [GitHub Issues](https://github.com/Loner1536/AppForge/issues) or on Discord: `@loner71x`.
|
|
11
5
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
AppForge is a **declarative UI application manager** built on top of [Vide](https://github.com/centau/vide) for **roblox-ts**. It provides a structured way to register, mount, show/hide, group, and coordinate UI "apps" using rules instead of ad‑hoc state wiring.
|
|
15
|
-
|
|
16
|
-
If you’ve ever ended up with tangled UI state, duplicated visibility logic, or brittle parent/child UI dependencies — AppForge is meant to solve that without forcing you into complex patterns.
|
|
6
|
+
**AppForge** is a **declarative UI application manager** for [Vide](https://github.com/centau/vide) in **roblox-ts**. It allows you to structure, mount, and control UI “apps” with centralized visibility, parent-child relationships, exclusive groups, and ZIndex rules — without tangled state.
|
|
17
7
|
|
|
18
8
|
---
|
|
19
9
|
|
|
20
10
|
## ✨ Features
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* **Story / sandbox rendering**
|
|
29
|
-
* Fully typed with **roblox-ts**
|
|
12
|
+
- **App-based UI architecture**: self-contained UI units
|
|
13
|
+
- **Centralized visibility** per app
|
|
14
|
+
- **Rules system**: parent/child, exclusive groups, ZIndex
|
|
15
|
+
- **Render groups** for selective mounting
|
|
16
|
+
- **Built-in debug logger & performance tracing**
|
|
17
|
+
- **Fully typed with roblox-ts**
|
|
30
18
|
|
|
31
19
|
---
|
|
32
20
|
|
|
33
21
|
## 📦 Installation
|
|
34
22
|
|
|
35
|
-
### Using **bun**
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
bun add @rbxts/app-forge
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Peer dependencies (choose one renderer):
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
bun add @rbxts/vide
|
|
45
|
-
# or
|
|
46
|
-
bun add @rbxts/react
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
### Using **npm**
|
|
52
|
-
|
|
53
23
|
```bash
|
|
54
24
|
npm install @rbxts/app-forge
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Peer dependencies (choose one renderer):
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
25
|
npm install @rbxts/vide
|
|
61
|
-
# or
|
|
62
|
-
npm install @rbxts/react
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 🧠 Core Concepts
|
|
68
|
-
|
|
69
|
-
### App
|
|
70
|
-
|
|
71
|
-
An **App** is a self-contained UI unit:
|
|
72
|
-
|
|
73
|
-
* owns its own visibility source
|
|
74
|
-
* renders a Vide tree
|
|
75
|
-
* can depend on other apps via rules
|
|
76
|
-
|
|
77
|
-
Apps are registered using a decorator and rendered through `AppForge`.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
### Forge
|
|
82
|
-
|
|
83
|
-
`AppForge` is the runtime manager. It:
|
|
84
|
-
|
|
85
|
-
* owns all app visibility sources
|
|
86
|
-
* mounts and unmounts UI
|
|
87
|
-
* enforces rules
|
|
88
|
-
* exposes imperative helpers (`open`, `close`, `toggle`)
|
|
89
|
-
|
|
90
|
-
You usually create **one Forge per UI root**.
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
### Rules
|
|
95
26
|
|
|
96
|
-
|
|
27
|
+
Or using Bun:
|
|
97
28
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
| Rule | Description |
|
|
101
|
-
| ---------------- | -------------------------------------- |
|
|
102
|
-
| `parent` | Child app closes when parent closes |
|
|
103
|
-
| `detach` | Prevents automatic anchoring to parent |
|
|
104
|
-
| `exclusiveGroup` | Only one app in the group may be open |
|
|
105
|
-
| `index` | Sets ZIndex of the app container |
|
|
106
|
-
|
|
107
|
-
Rules are enforced automatically whenever visibility changes.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### Render Groups
|
|
112
|
-
|
|
113
|
-
Render groups let you **selectively mount apps**.
|
|
114
|
-
|
|
115
|
-
Example use cases:
|
|
116
|
-
|
|
117
|
-
* Lobby UI vs In‑Game UI
|
|
118
|
-
* HUD vs Menus
|
|
119
|
-
* Feature‑flagged UI
|
|
29
|
+
bun add @rbxts/app-forge
|
|
30
|
+
bun add @rbxts/vide
|
|
120
31
|
|
|
121
|
-
|
|
32
|
+
🧠 Core Concepts
|
|
33
|
+
App
|
|
122
34
|
|
|
123
|
-
|
|
35
|
+
An App is a self-contained UI unit:
|
|
124
36
|
|
|
125
|
-
|
|
37
|
+
Owns its visibility source
|
|
126
38
|
|
|
127
|
-
|
|
128
|
-
const forge = new CreateVideForge();
|
|
129
|
-
```
|
|
39
|
+
Renders a Vide tree
|
|
130
40
|
|
|
131
|
-
|
|
41
|
+
Can have rules: parent/child, exclusive groups, ZIndex
|
|
132
42
|
|
|
133
|
-
|
|
43
|
+
Apps are defined using the @App decorator and must extend Args.
|
|
44
|
+
Forge
|
|
134
45
|
|
|
135
|
-
|
|
46
|
+
AppForge is the runtime manager:
|
|
136
47
|
|
|
137
|
-
|
|
48
|
+
Holds all visibility sources
|
|
138
49
|
|
|
139
|
-
|
|
140
|
-
const forge = new CreateVideForge();
|
|
50
|
+
Mounts/unmounts apps in the UI
|
|
141
51
|
|
|
142
|
-
|
|
143
|
-
() => (
|
|
144
|
-
<screengui
|
|
145
|
-
Name="App"
|
|
146
|
-
ZIndexBehavior="Sibling"
|
|
147
|
-
ResetOnSpawn={false}
|
|
148
|
-
/>
|
|
149
|
-
),
|
|
150
|
-
props,
|
|
151
|
-
Players.LocalPlayer.WaitForChild("PlayerGui"),
|
|
152
|
-
);
|
|
153
|
-
```
|
|
52
|
+
Applies rules automatically
|
|
154
53
|
|
|
155
|
-
|
|
54
|
+
Exposes imperative helpers: open, close, toggle
|
|
156
55
|
|
|
157
|
-
|
|
158
|
-
* `props` are user-defined and become `this.props` inside Apps
|
|
159
|
-
* visibility & rules are controlled entirely by the Forge
|
|
56
|
+
Owns debugger & logger
|
|
160
57
|
|
|
161
|
-
|
|
58
|
+
One Forge per UI root is recommended.
|
|
59
|
+
Rules
|
|
60
|
+
Rule Description
|
|
61
|
+
parent Child app closes automatically when parent closes
|
|
62
|
+
detach Prevents automatic anchoring to parent
|
|
63
|
+
exclusiveGroup Only one app in the group may be open
|
|
64
|
+
index Sets ZIndex of the app container
|
|
162
65
|
|
|
163
|
-
|
|
66
|
+
Rules are reactively enforced when visibility changes.
|
|
67
|
+
Render Groups
|
|
164
68
|
|
|
165
|
-
|
|
69
|
+
Render groups let you mount selective apps:
|
|
166
70
|
|
|
167
|
-
|
|
168
|
-
const forge = new CreateVideForge();
|
|
71
|
+
Example: Lobby UI vs In-Game UI
|
|
169
72
|
|
|
170
|
-
|
|
171
|
-
() => (
|
|
172
|
-
<screengui
|
|
173
|
-
Name="App"
|
|
174
|
-
ZIndexBehavior="Sibling"
|
|
175
|
-
ResetOnSpawn={false}
|
|
176
|
-
/>
|
|
177
|
-
),
|
|
178
|
-
props,
|
|
179
|
-
Players.LocalPlayer.WaitForChild("PlayerGui"),
|
|
180
|
-
);
|
|
181
|
-
```
|
|
73
|
+
Example: HUD vs Menus
|
|
182
74
|
|
|
183
|
-
|
|
75
|
+
Apps can be rendered by group, name, or multiple names using the Forge’s internal rendering methods.
|
|
76
|
+
🧩 Basic Usage
|
|
77
|
+
Creating a Forge
|
|
184
78
|
|
|
185
|
-
|
|
186
|
-
* mounts all rendered apps under it
|
|
187
|
-
* keeps AppForge in control of visibility & rules
|
|
79
|
+
import { CreateForge } from "@rbxts/app-forge";
|
|
188
80
|
|
|
189
|
-
|
|
81
|
+
const forge = new CreateForge();
|
|
190
82
|
|
|
191
|
-
|
|
83
|
+
Mounting to the PlayerGui
|
|
192
84
|
|
|
193
|
-
```ts
|
|
194
85
|
forge.mount(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
86
|
+
<screengui
|
|
87
|
+
Name="AppRoot"
|
|
88
|
+
ZIndexBehavior="Sibling"
|
|
89
|
+
ResetOnSpawn={false}
|
|
90
|
+
/>,
|
|
91
|
+
{ props: {}, forge },
|
|
92
|
+
Players.LocalPlayer.WaitForChild("PlayerGui")
|
|
198
93
|
);
|
|
199
|
-
```
|
|
200
94
|
|
|
201
|
-
|
|
95
|
+
⚠️ Note: You pass the root node directly, not a function.
|
|
202
96
|
|
|
203
|
-
|
|
97
|
+
Controlling Apps
|
|
204
98
|
|
|
205
|
-
```ts
|
|
206
99
|
forge.open("Inventory");
|
|
207
100
|
forge.close("Inventory");
|
|
208
101
|
forge.toggle("Inventory");
|
|
209
|
-
```
|
|
210
102
|
|
|
211
|
-
|
|
103
|
+
open(name): Shows the app
|
|
212
104
|
|
|
213
|
-
|
|
214
|
-
const visible = forge.getSource("Inventory");
|
|
215
|
-
```
|
|
105
|
+
close(name): Hides the app
|
|
216
106
|
|
|
217
|
-
|
|
107
|
+
toggle(name): Toggles visibility
|
|
218
108
|
|
|
219
|
-
|
|
109
|
+
Defining an App
|
|
220
110
|
|
|
221
|
-
|
|
222
|
-
import { VideApp, VideArgs } from "@rbxts/app-forge";
|
|
223
|
-
import Vide from "@rbxts/vide";
|
|
111
|
+
import { App, Args } from "@rbxts/app-forge";
|
|
224
112
|
|
|
225
|
-
@
|
|
113
|
+
@App({
|
|
226
114
|
name: "Inventory",
|
|
227
115
|
renderGroup: "Lobby",
|
|
228
116
|
visible: false,
|
|
229
|
-
rules: {
|
|
230
|
-
index: 2,
|
|
231
|
-
},
|
|
117
|
+
rules: { zIndex: 2 },
|
|
232
118
|
})
|
|
233
|
-
export class Inventory extends
|
|
119
|
+
export class Inventory extends Args {
|
|
234
120
|
render() {
|
|
235
|
-
const { px } = this.props;
|
|
121
|
+
const { px } = this.props; // px comes from the Forge
|
|
236
122
|
|
|
237
123
|
return (
|
|
238
124
|
<frame
|
|
@@ -242,175 +128,28 @@ export class Inventory extends VideArgs {
|
|
|
242
128
|
);
|
|
243
129
|
}
|
|
244
130
|
}
|
|
245
|
-
```
|
|
246
131
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
## 🔗 Parent / Child Apps
|
|
250
|
-
|
|
251
|
-
```ts
|
|
252
|
-
@VideApp({
|
|
253
|
-
name: "InventoryInfo",
|
|
254
|
-
renderGroup: "Lobby",
|
|
255
|
-
rules: {
|
|
256
|
-
parent: "Inventory",
|
|
257
|
-
},
|
|
258
|
-
})
|
|
259
|
-
export class InventoryInfo extends VideArgs {
|
|
260
|
-
render() {
|
|
261
|
-
return <frame />;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
```
|
|
132
|
+
@App registers the app with the Forge
|
|
265
133
|
|
|
266
|
-
|
|
134
|
+
px provides scaling helpers automatically
|
|
267
135
|
|
|
268
|
-
|
|
269
|
-
* Child is **anchored** to parent unless `detach: true`
|
|
136
|
+
rules define relationships (parent, exclusive group, ZIndex)
|
|
270
137
|
|
|
271
|
-
|
|
272
|
-
rules: {
|
|
273
|
-
parent: "Inventory",
|
|
274
|
-
detach: true,
|
|
275
|
-
}
|
|
276
|
-
```
|
|
138
|
+
🐞 Debugging
|
|
277
139
|
|
|
278
|
-
|
|
140
|
+
AppForge provides Studio-only debug logging:
|
|
279
141
|
|
|
280
|
-
|
|
142
|
+
forge.debug.enable("render");
|
|
143
|
+
forge.debug.enable("rules");
|
|
144
|
+
forge.debug.enableAll(); // everything
|
|
145
|
+
forge.debug.disable("render");
|
|
281
146
|
|
|
282
|
-
|
|
283
|
-
@VideApp({
|
|
284
|
-
name: "Settings",
|
|
285
|
-
rules: {
|
|
286
|
-
exclusiveGroup: "Menus",
|
|
287
|
-
},
|
|
288
|
-
})
|
|
289
|
-
```
|
|
147
|
+
Performance tracing example:
|
|
290
148
|
|
|
291
|
-
|
|
149
|
+
[PERF][render][Inventory] 1.243ms
|
|
292
150
|
|
|
293
|
-
|
|
151
|
+
🧱 Architecture Overview
|
|
294
152
|
|
|
295
|
-
## 🎭 Render Control
|
|
296
|
-
|
|
297
|
-
AppForge supports **multiple render selection modes**. You can render by:
|
|
298
|
-
|
|
299
|
-
* a single app name
|
|
300
|
-
* multiple app names
|
|
301
|
-
* one or more render groups
|
|
302
|
-
* combinations of `group + name(s)`
|
|
303
|
-
|
|
304
|
-
All render options are passed via `VideRenderProps`.
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
### Render a single app
|
|
309
|
-
|
|
310
|
-
```ts
|
|
311
|
-
render: { name: "Inventory" }
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
### Render multiple apps
|
|
317
|
-
|
|
318
|
-
```ts
|
|
319
|
-
render: { names: ["Inventory", "InventoryInfo"] }
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
### Render by group
|
|
325
|
-
|
|
326
|
-
```ts
|
|
327
|
-
render: { group: "Lobby" }
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
### Render by group + name
|
|
333
|
-
|
|
334
|
-
```ts
|
|
335
|
-
render: {
|
|
336
|
-
group: "Lobby",
|
|
337
|
-
name: "Inventory",
|
|
338
|
-
}
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
Only renders `Inventory` **if** it belongs to the `Lobby` group.
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
### Render by group + names
|
|
346
|
-
|
|
347
|
-
```ts
|
|
348
|
-
render: {
|
|
349
|
-
group: "Lobby",
|
|
350
|
-
names: ["Inventory", "Settings"],
|
|
351
|
-
}
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
Only renders apps that:
|
|
355
|
-
|
|
356
|
-
* are in the specified group(s)
|
|
357
|
-
* and whose names match the provided list
|
|
358
|
-
|
|
359
|
-
---
|
|
360
|
-
|
|
361
|
-
## 🧪 Story / Sandbox Rendering
|
|
362
|
-
|
|
363
|
-
AppForge provides `forge.story` for **isolated rendering**, commonly used with **UI Labs**.
|
|
364
|
-
|
|
365
|
-
```ts
|
|
366
|
-
const forge = new CreateVideForge();
|
|
367
|
-
|
|
368
|
-
return forge.story({
|
|
369
|
-
props,
|
|
370
|
-
config: {
|
|
371
|
-
px: {
|
|
372
|
-
target: storyProps.target,
|
|
373
|
-
},
|
|
374
|
-
},
|
|
375
|
-
render: { group: "Lobby" },
|
|
376
|
-
});
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
This is ideal for:
|
|
380
|
-
|
|
381
|
-
* component stories
|
|
382
|
-
* previews
|
|
383
|
-
* controlled visibility via bindings
|
|
384
|
-
|
|
385
|
-
---
|
|
386
|
-
|
|
387
|
-
## 🧠 Context Access Inside Apps
|
|
388
|
-
|
|
389
|
-
App props are provided via Vide context.
|
|
390
|
-
|
|
391
|
-
```ts
|
|
392
|
-
import { Provider } from "@rbxts/vide";
|
|
393
|
-
import { VideContexts } from "@rbxts/app-forge";
|
|
394
|
-
|
|
395
|
-
<Provider context={VideContexts.App} value={this.props}>
|
|
396
|
-
{() => <Child />}
|
|
397
|
-
</Provider>
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
Or via hook:
|
|
401
|
-
|
|
402
|
-
````ts
|
|
403
|
-
```ts
|
|
404
|
-
import { useVideAppContext } from "@rbxts/app-forge";
|
|
405
|
-
|
|
406
|
-
const app = useVideAppContext();
|
|
407
|
-
````
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
## 🧱 Architecture Overview
|
|
412
|
-
|
|
413
|
-
```
|
|
414
153
|
AppForge
|
|
415
154
|
├─ AppRegistry (static)
|
|
416
155
|
├─ Visibility Sources
|
|
@@ -418,52 +157,27 @@ AppForge
|
|
|
418
157
|
├─ Rule Engine
|
|
419
158
|
│ ├─ Parent Rule
|
|
420
159
|
│ └─ Exclusive Group Rule
|
|
160
|
+
├─ Debugger / Logger
|
|
421
161
|
└─ Vide Mount
|
|
422
|
-
```
|
|
423
|
-
|
|
424
|
-
---
|
|
425
162
|
|
|
426
|
-
|
|
163
|
+
⚠️ Notes
|
|
427
164
|
|
|
428
|
-
|
|
429
|
-
* Rendering twice will warn if px is re‑initialized
|
|
430
|
-
* Rules are enforced **reactively**
|
|
431
|
-
* This package is currently **alpha** — APIs may change
|
|
165
|
+
Apps are singletons per Forge
|
|
432
166
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
## 🛣 Roadmap
|
|
167
|
+
Rendering twice warns if px is re-initialized
|
|
436
168
|
|
|
437
|
-
|
|
438
|
-
* [ ] Async app loading
|
|
439
|
-
* [ ] Better dev warnings
|
|
440
|
-
* [ ] Debug inspector
|
|
441
|
-
|
|
442
|
-
---
|
|
169
|
+
Rules are reactive
|
|
443
170
|
|
|
444
|
-
|
|
171
|
+
Debug logging only runs in Studio
|
|
445
172
|
|
|
446
|
-
|
|
173
|
+
API is alpha — may change
|
|
447
174
|
|
|
448
|
-
|
|
175
|
+
🛣 Roadmap
|
|
449
176
|
|
|
450
|
-
|
|
451
|
-
* 🚧 **React renderer** exists but is **very early / experimental**
|
|
177
|
+
Better developer warnings
|
|
452
178
|
|
|
453
|
-
|
|
179
|
+
Debug inspector
|
|
454
180
|
|
|
455
|
-
|
|
181
|
+
📜 License
|
|
456
182
|
|
|
457
|
-
|
|
458
|
-
import { ReactApp, ReactArgs, CreateReactForge } from "@rbxts/app-forge";
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
**Vide is the recommended and supported path today.**
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
## 📜 License
|
|
466
|
-
|
|
467
|
-
MIT
|
|
468
|
-
|
|
469
|
-
---
|
|
183
|
+
MIT
|
|
@@ -5,7 +5,7 @@ local TS = _G[script]
|
|
|
5
5
|
-- Hooks
|
|
6
6
|
local px = TS.import(script, script.Parent, "hooks", "usePx").px
|
|
7
7
|
-- Debug
|
|
8
|
-
local Logger = TS.import(script, script.Parent, "
|
|
8
|
+
local Logger = TS.import(script, script.Parent, "logger").default
|
|
9
9
|
local logger = Logger.new("AppRegistry")
|
|
10
10
|
local AppRegistry = {}
|
|
11
11
|
--[[
|
package/out/global.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ local TS = _G[script]
|
|
|
3
3
|
-- Components
|
|
4
4
|
local Contexts = TS.import(script, script.Parent.Parent, "context").default
|
|
5
5
|
-- Debug
|
|
6
|
-
local Logger = TS.import(script, script.Parent.Parent, "
|
|
6
|
+
local Logger = TS.import(script, script.Parent.Parent, "logger").default
|
|
7
7
|
local logger = Logger.new("useAppContext")
|
|
8
8
|
local default = function()
|
|
9
9
|
local context = Contexts.App()
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
local TS = _G[script]
|
|
3
3
|
local cleanup = TS.import(script, TS.getModule(script, "@rbxts", "vide").src).cleanup
|
|
4
4
|
-- Debug
|
|
5
|
-
local Logger = TS.import(script, script.Parent.Parent, "
|
|
5
|
+
local Logger = TS.import(script, script.Parent.Parent, "logger").default
|
|
6
6
|
local logger = Logger.new("useEventListener")
|
|
7
7
|
local connect = function(event, callback)
|
|
8
8
|
local _event = event
|
|
@@ -7,7 +7,7 @@ local source = TS.import(script, TS.getModule(script, "@rbxts", "vide").src).sou
|
|
|
7
7
|
-- Helpers
|
|
8
8
|
local useEventListener = TS.import(script, script.Parent, "useEventListener").useEventListener
|
|
9
9
|
-- Debug
|
|
10
|
-
local Logger = TS.import(script, script.Parent.Parent, "
|
|
10
|
+
local Logger = TS.import(script, script.Parent.Parent, "logger").default
|
|
11
11
|
local logger = Logger.new("usePx")
|
|
12
12
|
--* Default reference resolution for px calculations
|
|
13
13
|
local BASE_RESOLUTION = source(Vector2.new(1920, 1080))
|
|
@@ -77,7 +77,7 @@ local function usePx(target, baseResolution, minScale)
|
|
|
77
77
|
if baseResolution then
|
|
78
78
|
BASE_RESOLUTION(baseResolution)
|
|
79
79
|
end
|
|
80
|
-
if minScale ~=
|
|
80
|
+
if minScale ~= 0 and minScale == minScale and minScale then
|
|
81
81
|
MIN_SCALE(minScale)
|
|
82
82
|
end
|
|
83
83
|
if target then
|
package/out/index.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
export { App
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { default as
|
|
5
|
-
export {
|
|
6
|
-
export type { MainProps as VideProps, ClassProps as VideClassProps, RenderProps as VideRenderProps, } from "./vide/types";
|
|
7
|
-
export type { MainProps as ReactProps, ClassProps as ReactClassProps, } from "./react/types";
|
|
8
|
-
export { default as useReactAppContext } from "./react/hooks/useAppContext";
|
|
9
|
-
export { default as ReactContexts } from "./react/context";
|
|
10
|
-
export { default as useVideAppContext } from "./vide/hooks/useAppContext";
|
|
11
|
-
export { default as VideContexts } from "./vide/context";
|
|
1
|
+
export { App, Args } from "./appRegistry";
|
|
2
|
+
export { default as CreateForge } from "./mount";
|
|
3
|
+
export type { ForgeProps, ClassProps, RenderProps, } from "./types";
|
|
4
|
+
export { default as useAppContext } from "./hooks/useAppContext";
|
|
5
|
+
export { default as Contexts } from "./context";
|
package/out/init.luau
CHANGED
|
@@ -2,20 +2,12 @@
|
|
|
2
2
|
local TS = _G[script]
|
|
3
3
|
local exports = {}
|
|
4
4
|
-- Decorators
|
|
5
|
-
local
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
local _decorator_1 = TS.import(script, script, "vide", "decorator")
|
|
9
|
-
exports.VideApp = _decorator_1.App
|
|
10
|
-
exports.VideArgs = _decorator_1.Args
|
|
5
|
+
local _appRegistry = TS.import(script, script, "appRegistry")
|
|
6
|
+
exports.App = _appRegistry.App
|
|
7
|
+
exports.Args = _appRegistry.Args
|
|
11
8
|
-- Creators
|
|
12
|
-
exports.
|
|
13
|
-
exports.CreateVideForge = TS.import(script, script, "vide").default
|
|
14
|
-
-- Helpers
|
|
15
|
-
exports.RenderReact = TS.import(script, script, "react", "helpers").Render
|
|
9
|
+
exports.CreateForge = TS.import(script, script, "mount").default
|
|
16
10
|
-- Types
|
|
17
|
-
exports.
|
|
18
|
-
exports.
|
|
19
|
-
exports.useVideAppContext = TS.import(script, script, "vide", "hooks", "useAppContext").default
|
|
20
|
-
exports.VideContexts = TS.import(script, script, "vide", "context").default
|
|
11
|
+
exports.useAppContext = TS.import(script, script, "hooks", "useAppContext").default
|
|
12
|
+
exports.Contexts = TS.import(script, script, "context").default
|
|
21
13
|
return exports
|