@hypen-space/web 0.2.11 → 0.3.0
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/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 +2 -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 +8 -5
- package/src/index.ts +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypen-space/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
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
|
@@ -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
|
```
|
|
@@ -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) => {
|