@hypen-space/web 0.2.12 → 0.3.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/dist/src/canvas/index.js.map +1 -1
- package/dist/src/canvas/renderer.js.map +1 -1
- package/dist/src/dom/applicators/effects.js +38 -2
- package/dist/src/dom/applicators/effects.js.map +3 -3
- package/dist/src/dom/applicators/events.js +280 -397
- package/dist/src/dom/applicators/events.js.map +5 -4
- package/dist/src/dom/applicators/font.js +94 -5
- package/dist/src/dom/applicators/font.js.map +3 -3
- package/dist/src/dom/applicators/index.js +590 -425
- package/dist/src/dom/applicators/index.js.map +10 -9
- package/dist/src/dom/applicators/layout.js +33 -5
- package/dist/src/dom/applicators/layout.js.map +3 -3
- package/dist/src/dom/applicators/size.js +81 -16
- package/dist/src/dom/applicators/size.js.map +3 -3
- package/dist/src/dom/components/hypenapp.js +296 -0
- package/dist/src/dom/components/hypenapp.js.map +10 -0
- package/dist/src/dom/components/index.js +263 -1
- package/dist/src/dom/components/index.js.map +5 -4
- package/dist/src/dom/element-data.js +140 -0
- package/dist/src/dom/element-data.js.map +10 -0
- package/dist/src/dom/index.js +857 -430
- package/dist/src/dom/index.js.map +13 -11
- package/dist/src/dom/renderer.js +857 -430
- package/dist/src/dom/renderer.js.map +13 -11
- package/dist/src/hypen.js +857 -430
- package/dist/src/hypen.js.map +13 -11
- package/dist/src/index.js +862 -430
- package/dist/src/index.js.map +15 -12
- package/package.json +3 -3
- package/src/canvas/QUICKSTART.md +5 -7
- package/src/canvas/README.md +2 -2
- package/src/canvas/renderer.ts +1 -1
- package/src/dom/README.md +4 -4
- package/src/dom/applicators/effects.ts +45 -1
- package/src/dom/applicators/events.ts +348 -537
- package/src/dom/applicators/font.ts +127 -2
- package/src/dom/applicators/index.ts +117 -7
- package/src/dom/applicators/layout.ts +40 -4
- package/src/dom/applicators/size.ts +101 -16
- package/src/dom/components/hypenapp.ts +348 -0
- package/src/dom/components/index.ts +2 -0
- package/src/dom/element-data.ts +234 -0
- package/src/dom/renderer.ts +12 -9
- package/src/index.ts +5 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypen-space/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Hypen web renderers - DOM and Canvas rendering for browsers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"clean": "rm -rf dist"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@hypen-space/core": "^0.
|
|
51
|
+
"@hypen-space/core": "^0.3.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/bun": "latest",
|
|
@@ -79,6 +79,6 @@
|
|
|
79
79
|
"repository": {
|
|
80
80
|
"type": "git",
|
|
81
81
|
"url": "https://github.com/hypen-lang/hypen-engine-rs.git",
|
|
82
|
-
"directory": "hypen-
|
|
82
|
+
"directory": "hypen-web/packages/web"
|
|
83
83
|
}
|
|
84
84
|
}
|
package/src/canvas/QUICKSTART.md
CHANGED
|
@@ -5,7 +5,7 @@ Get started with the Hypen Canvas Renderer in 5 minutes.
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
bun add @hypen/core
|
|
8
|
+
bun add @hypen-space/core
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Basic Setup
|
|
@@ -28,8 +28,8 @@ bun add @hypen/core
|
|
|
28
28
|
### 2. Create App (`app.ts`)
|
|
29
29
|
|
|
30
30
|
```typescript
|
|
31
|
-
import { Engine, app, HypenModuleInstance } from "@hypen/core";
|
|
32
|
-
import { CanvasRenderer } from "@hypen/core/canvas";
|
|
31
|
+
import { Engine, app, HypenModuleInstance } from "@hypen-space/core";
|
|
32
|
+
import { CanvasRenderer } from "@hypen-space/core/canvas";
|
|
33
33
|
|
|
34
34
|
// Define state
|
|
35
35
|
type AppState = {
|
|
@@ -39,9 +39,8 @@ type AppState = {
|
|
|
39
39
|
// Define module
|
|
40
40
|
const appModule = app
|
|
41
41
|
.defineState<AppState>({ count: 0 })
|
|
42
|
-
.onAction("increment", async (
|
|
42
|
+
.onAction("increment", async ({ state }) => {
|
|
43
43
|
state.count++;
|
|
44
|
-
next();
|
|
45
44
|
})
|
|
46
45
|
.build();
|
|
47
46
|
|
|
@@ -342,12 +341,11 @@ Object.assign(state, {
|
|
|
342
341
|
```typescript
|
|
343
342
|
let timeoutId: number;
|
|
344
343
|
|
|
345
|
-
.onAction("search", async (action, state
|
|
344
|
+
.onAction("search", async ({ action, state }) => {
|
|
346
345
|
clearTimeout(timeoutId);
|
|
347
346
|
timeoutId = setTimeout(() => {
|
|
348
347
|
// Do expensive search
|
|
349
348
|
state.results = search(action.query);
|
|
350
|
-
next();
|
|
351
349
|
}, 300);
|
|
352
350
|
})
|
|
353
351
|
```
|
package/src/canvas/README.md
CHANGED
|
@@ -14,8 +14,8 @@ The Canvas Renderer is a complete alternative to the DOM renderer that draws all
|
|
|
14
14
|
## Quick Start
|
|
15
15
|
|
|
16
16
|
```typescript
|
|
17
|
-
import { Engine, app } from "@hypen/core";
|
|
18
|
-
import { CanvasRenderer } from "@hypen/core/canvas";
|
|
17
|
+
import { Engine, app } from "@hypen-space/core";
|
|
18
|
+
import { CanvasRenderer } from "@hypen-space/core/canvas";
|
|
19
19
|
|
|
20
20
|
// Setup canvas
|
|
21
21
|
const canvas = document.getElementById("app") as HTMLCanvasElement;
|
package/src/canvas/renderer.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Main renderer class that orchestrates layout, painting, and events
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { Renderer, Patch } from "@hypen/core";
|
|
7
|
+
import type { Renderer, Patch } from "@hypen-space/core";
|
|
8
8
|
|
|
9
9
|
// Interface for the engine that canvas renderer needs
|
|
10
10
|
interface IEngine {
|
package/src/dom/README.md
CHANGED
|
@@ -38,8 +38,8 @@ src/dom/
|
|
|
38
38
|
### Browser Import
|
|
39
39
|
|
|
40
40
|
```typescript
|
|
41
|
-
import { Engine, app, HypenModuleInstance } from "@hypen/core";
|
|
42
|
-
import { DOMRenderer } from "@hypen/core/dom";
|
|
41
|
+
import { Engine, app, HypenModuleInstance } from "@hypen-space/core";
|
|
42
|
+
import { DOMRenderer } from "@hypen-space/core/dom";
|
|
43
43
|
|
|
44
44
|
const engine = new Engine();
|
|
45
45
|
await engine.init();
|
|
@@ -54,10 +54,10 @@ engine.setRenderCallback((patches) => {
|
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
56
|
// This will fail in Node.js/Bun (no DOM)
|
|
57
|
-
import { DOMRenderer } from "@hypen/core/dom"; // ❌ Error
|
|
57
|
+
import { DOMRenderer } from "@hypen-space/core/dom"; // ❌ Error
|
|
58
58
|
|
|
59
59
|
// Use server-safe renderer instead
|
|
60
|
-
import { ConsoleRenderer } from "@hypen/core"; // ✅ Works
|
|
60
|
+
import { ConsoleRenderer } from "@hypen-space/core"; // ✅ Works
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
## Components
|
|
@@ -7,7 +7,51 @@ import type { ApplicatorHandler } from "./index.js";
|
|
|
7
7
|
export const effectsHandlers: Record<string, ApplicatorHandler> = {
|
|
8
8
|
// Shadow effects
|
|
9
9
|
boxShadow: (el, value) => {
|
|
10
|
-
|
|
10
|
+
if (typeof value === "string") {
|
|
11
|
+
el.style.boxShadow = value;
|
|
12
|
+
} else if (typeof value === "object" && value !== null) {
|
|
13
|
+
// Object format: { x, y, blur, spread, color, inset }
|
|
14
|
+
const obj = value as Record<string, any>;
|
|
15
|
+
const x = typeof obj.x === "number" ? `${obj.x}px` : (obj.x ?? obj.offsetX ?? "0px");
|
|
16
|
+
const y = typeof obj.y === "number" ? `${obj.y}px` : (obj.y ?? obj.offsetY ?? "0px");
|
|
17
|
+
const blur = typeof obj.blur === "number" ? `${obj.blur}px` : (obj.blur ?? obj.radius ?? "0px");
|
|
18
|
+
const spread = typeof obj.spread === "number" ? `${obj.spread}px` : (obj.spread ?? "0px");
|
|
19
|
+
const color = obj.color ?? "rgba(0,0,0,0.2)";
|
|
20
|
+
const inset = obj.inset ? "inset " : "";
|
|
21
|
+
el.style.boxShadow = `${inset}${x} ${y} ${blur} ${spread} ${color}`;
|
|
22
|
+
} else if (typeof value === "number") {
|
|
23
|
+
// Just blur/elevation as number
|
|
24
|
+
el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Compound shadow with explicit offset support
|
|
29
|
+
shadow: (el, value) => {
|
|
30
|
+
if (typeof value === "object" && value !== null) {
|
|
31
|
+
const obj = value as Record<string, any>;
|
|
32
|
+
const x = typeof obj.x === "number" ? `${obj.x}px` : (obj.x ?? obj.offsetX ?? "0px");
|
|
33
|
+
const y = typeof obj.y === "number" ? `${obj.y}px` : (obj.y ?? obj.offsetY ?? "0px");
|
|
34
|
+
const blur = typeof obj.blur === "number" ? `${obj.blur}px` : (obj.blur ?? obj.radius ?? "4px");
|
|
35
|
+
const color = obj.color ?? "rgba(0,0,0,0.2)";
|
|
36
|
+
el.style.boxShadow = `${x} ${y} ${blur} ${color}`;
|
|
37
|
+
} else if (typeof value === "number") {
|
|
38
|
+
// Elevation-style: shadow grows with value
|
|
39
|
+
el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;
|
|
40
|
+
} else {
|
|
41
|
+
el.style.boxShadow = String(value);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
// Elevation (Material Design style)
|
|
46
|
+
elevation: (el, value) => {
|
|
47
|
+
const level = typeof value === "number" ? value : parseInt(String(value), 10);
|
|
48
|
+
if (!isNaN(level) && level >= 0) {
|
|
49
|
+
// Map elevation to box-shadow similar to Material Design
|
|
50
|
+
const y = level * 0.5;
|
|
51
|
+
const blur = level * 1.5;
|
|
52
|
+
const opacity = Math.min(0.1 + level * 0.02, 0.4);
|
|
53
|
+
el.style.boxShadow = `0 ${y}px ${blur}px rgba(0,0,0,${opacity})`;
|
|
54
|
+
}
|
|
11
55
|
},
|
|
12
56
|
|
|
13
57
|
textShadow: (el, value) => {
|