@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.
Files changed (39) hide show
  1. package/dist/src/dom/applicators/effects.js +38 -2
  2. package/dist/src/dom/applicators/effects.js.map +3 -3
  3. package/dist/src/dom/applicators/events.js +280 -397
  4. package/dist/src/dom/applicators/events.js.map +5 -4
  5. package/dist/src/dom/applicators/font.js +94 -5
  6. package/dist/src/dom/applicators/font.js.map +3 -3
  7. package/dist/src/dom/applicators/index.js +590 -425
  8. package/dist/src/dom/applicators/index.js.map +10 -9
  9. package/dist/src/dom/applicators/layout.js +33 -5
  10. package/dist/src/dom/applicators/layout.js.map +3 -3
  11. package/dist/src/dom/applicators/size.js +81 -16
  12. package/dist/src/dom/applicators/size.js.map +3 -3
  13. package/dist/src/dom/components/hypenapp.js +296 -0
  14. package/dist/src/dom/components/hypenapp.js.map +10 -0
  15. package/dist/src/dom/components/index.js +263 -1
  16. package/dist/src/dom/components/index.js.map +5 -4
  17. package/dist/src/dom/element-data.js +140 -0
  18. package/dist/src/dom/element-data.js.map +10 -0
  19. package/dist/src/dom/index.js +857 -430
  20. package/dist/src/dom/index.js.map +13 -11
  21. package/dist/src/dom/renderer.js +857 -430
  22. package/dist/src/dom/renderer.js.map +13 -11
  23. package/dist/src/hypen.js +857 -430
  24. package/dist/src/hypen.js.map +13 -11
  25. package/dist/src/index.js +862 -430
  26. package/dist/src/index.js.map +15 -12
  27. package/package.json +3 -3
  28. package/src/canvas/QUICKSTART.md +2 -4
  29. package/src/dom/applicators/effects.ts +45 -1
  30. package/src/dom/applicators/events.ts +348 -537
  31. package/src/dom/applicators/font.ts +127 -2
  32. package/src/dom/applicators/index.ts +117 -7
  33. package/src/dom/applicators/layout.ts +40 -4
  34. package/src/dom/applicators/size.ts +101 -16
  35. package/src/dom/components/hypenapp.ts +348 -0
  36. package/src/dom/components/index.ts +2 -0
  37. package/src/dom/element-data.ts +234 -0
  38. package/src/dom/renderer.ts +8 -5
  39. 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.2.11",
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.2.11"
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-render-bun/packages/web"
82
+ "directory": "hypen-web/packages/web"
83
83
  }
84
84
  }
@@ -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 (action, state, next) => {
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, next) => {
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
- el.style.boxShadow = String(value);
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) => {