@hypen-space/web 0.4.2 → 0.4.3

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 (108) hide show
  1. package/dist/canvas/accessibility.d.ts +47 -0
  2. package/dist/canvas/events.d.ts +87 -0
  3. package/dist/canvas/index.d.ts +11 -0
  4. package/dist/canvas/index.js +19 -13
  5. package/dist/canvas/index.js.map +6 -6
  6. package/dist/canvas/input.d.ts +56 -0
  7. package/dist/canvas/layout.d.ts +10 -0
  8. package/dist/canvas/layout.js +17 -12
  9. package/dist/canvas/layout.js.map +4 -4
  10. package/dist/canvas/paint.d.ts +14 -0
  11. package/dist/canvas/paint.js +3 -2
  12. package/dist/canvas/paint.js.map +4 -4
  13. package/dist/canvas/renderer.d.ts +99 -0
  14. package/dist/canvas/renderer.js +19 -13
  15. package/dist/canvas/renderer.js.map +6 -6
  16. package/dist/canvas/text.d.ts +22 -0
  17. package/dist/canvas/text.js +2 -2
  18. package/dist/canvas/text.js.map +2 -2
  19. package/dist/canvas/types.d.ts +96 -0
  20. package/dist/canvas/utils.d.ts +44 -0
  21. package/dist/client.d.ts +19 -0
  22. package/dist/client.js +46 -21
  23. package/dist/client.js.map +12 -11
  24. package/dist/dom/applicators/advanced-layout.d.ts +5 -0
  25. package/dist/dom/applicators/advanced-layout.js +1 -114
  26. package/dist/dom/applicators/advanced-layout.js.map +4 -5
  27. package/dist/dom/applicators/background.d.ts +5 -0
  28. package/dist/dom/applicators/border.d.ts +5 -0
  29. package/dist/dom/applicators/color.d.ts +5 -0
  30. package/dist/dom/applicators/display.d.ts +5 -0
  31. package/dist/dom/applicators/effects.d.ts +5 -0
  32. package/dist/dom/applicators/events.d.ts +8 -0
  33. package/dist/dom/applicators/events.js +3 -2
  34. package/dist/dom/applicators/events.js.map +3 -3
  35. package/dist/dom/applicators/font.d.ts +29 -0
  36. package/dist/dom/applicators/index.d.ts +76 -0
  37. package/dist/dom/applicators/index.js +3 -8
  38. package/dist/dom/applicators/index.js.map +4 -4
  39. package/dist/dom/applicators/layout.d.ts +10 -0
  40. package/dist/dom/applicators/margin.d.ts +11 -0
  41. package/dist/dom/applicators/padding.d.ts +11 -0
  42. package/dist/dom/applicators/size.d.ts +14 -0
  43. package/dist/dom/applicators/transform.d.ts +5 -0
  44. package/dist/dom/applicators/transition.d.ts +5 -0
  45. package/dist/dom/applicators/types.d.ts +6 -0
  46. package/dist/dom/applicators/typography.d.ts +5 -0
  47. package/dist/dom/canvas/index.d.ts +12 -0
  48. package/dist/dom/components/app.d.ts +8 -0
  49. package/dist/dom/components/app.js +55 -0
  50. package/dist/dom/components/app.js.map +10 -0
  51. package/dist/dom/components/audio.d.ts +5 -0
  52. package/dist/dom/components/avatar.d.ts +5 -0
  53. package/dist/dom/components/badge.d.ts +5 -0
  54. package/dist/dom/components/button.d.ts +9 -0
  55. package/dist/dom/components/card.d.ts +5 -0
  56. package/dist/dom/components/center.d.ts +9 -0
  57. package/dist/dom/components/checkbox.d.ts +5 -0
  58. package/dist/dom/components/column.d.ts +8 -0
  59. package/dist/dom/components/container.d.ts +5 -0
  60. package/dist/dom/components/divider.d.ts +5 -0
  61. package/dist/dom/components/grid.d.ts +7 -0
  62. package/dist/dom/components/heading.d.ts +5 -0
  63. package/dist/dom/components/hypenapp.d.ts +19 -0
  64. package/dist/dom/components/hypenapp.js +2 -4
  65. package/dist/dom/components/hypenapp.js.map +3 -3
  66. package/dist/dom/components/image.d.ts +5 -0
  67. package/dist/dom/components/index.d.ts +29 -0
  68. package/dist/dom/components/index.js +29 -5
  69. package/dist/dom/components/index.js.map +7 -6
  70. package/dist/dom/components/input.d.ts +5 -0
  71. package/dist/dom/components/link.d.ts +5 -0
  72. package/dist/dom/components/list.d.ts +5 -0
  73. package/dist/dom/components/paragraph.d.ts +5 -0
  74. package/dist/dom/components/progressbar.d.ts +5 -0
  75. package/dist/dom/components/route.d.ts +6 -0
  76. package/dist/dom/components/route.js +2 -2
  77. package/dist/dom/components/route.js.map +2 -2
  78. package/dist/dom/components/router.d.ts +5 -0
  79. package/dist/dom/components/row.d.ts +7 -0
  80. package/dist/dom/components/select.d.ts +5 -0
  81. package/dist/dom/components/slider.d.ts +5 -0
  82. package/dist/dom/components/spacer.d.ts +5 -0
  83. package/dist/dom/components/spinner.d.ts +5 -0
  84. package/dist/dom/components/stack.d.ts +5 -0
  85. package/dist/dom/components/switch.d.ts +5 -0
  86. package/dist/dom/components/text.d.ts +5 -0
  87. package/dist/dom/components/textarea.d.ts +5 -0
  88. package/dist/dom/components/video.d.ts +5 -0
  89. package/dist/dom/debug.d.ts +63 -0
  90. package/dist/dom/debug.js +2 -2
  91. package/dist/dom/debug.js.map +2 -2
  92. package/dist/dom/element-data.d.ts +94 -0
  93. package/dist/dom/events.d.ts +39 -0
  94. package/dist/dom/events.js +2 -2
  95. package/dist/dom/events.js.map +2 -2
  96. package/dist/dom/index.d.ts +10 -0
  97. package/dist/dom/index.js +46 -21
  98. package/dist/dom/index.js.map +12 -11
  99. package/dist/dom/renderer.d.ts +115 -0
  100. package/dist/dom/renderer.js +45 -20
  101. package/dist/dom/renderer.js.map +11 -10
  102. package/dist/hypen.d.ts +140 -0
  103. package/dist/hypen.js +46 -21
  104. package/dist/hypen.js.map +12 -11
  105. package/dist/index.d.ts +28 -0
  106. package/dist/index.js +64 -33
  107. package/dist/index.js.map +16 -15
  108. package/package.json +3 -2
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @hypen-space/web - Hypen Web Renderers
3
+ *
4
+ * Browser-only package providing DOM and Canvas rendering for Hypen applications.
5
+ * This entry point is WASM-free — it only contains renderers and the remote UI
6
+ * embed component.
7
+ *
8
+ * For client-side rendering (with WASM engine), use "@hypen-space/web/client":
9
+ *
10
+ * ```typescript
11
+ * import { render } from "@hypen-space/web/client";
12
+ * await render("Counter", "#app");
13
+ * ```
14
+ *
15
+ * For remote UI (no WASM needed in the browser):
16
+ *
17
+ * ```typescript
18
+ * import { DOMRenderer } from "@hypen-space/web";
19
+ * ```
20
+ */
21
+ export { DOMRenderer } from "./dom/renderer.js";
22
+ export { ComponentRegistry } from "./dom/components/index.js";
23
+ export { ApplicatorRegistry } from "./dom/applicators/index.js";
24
+ export { EventManager } from "./dom/events.js";
25
+ export { RerenderTracker, type DebugConfig, defaultDebugConfig } from "./dom/debug.js";
26
+ export { hypenAppHandler, disconnectHypenApp } from "./dom/components/hypenapp.js";
27
+ export { CanvasRenderer } from "./canvas/renderer.js";
28
+ export { canvasHandler, canvasApplicators } from "./dom/canvas/index.js";
package/dist/index.js CHANGED
@@ -1011,7 +1011,7 @@ var exports_route = {};
1011
1011
  __export(exports_route, {
1012
1012
  routeHandler: () => routeHandler
1013
1013
  });
1014
- import { frameworkLoggers } from "@hypen-space/core";
1014
+ import { frameworkLoggers } from "@hypen-space/core/logger";
1015
1015
  var log, routeHandler;
1016
1016
  var init_route = __esm(() => {
1017
1017
  log = frameworkLoggers.router;
@@ -1046,7 +1046,7 @@ __export(exports_hypenapp, {
1046
1046
  disconnectHypenApp: () => disconnectHypenApp
1047
1047
  });
1048
1048
  import { RemoteEngine } from "@hypen-space/core/remote/client";
1049
- import { frameworkLoggers as frameworkLoggers2 } from "@hypen-space/core";
1049
+ import { frameworkLoggers as frameworkLoggers2 } from "@hypen-space/core/logger";
1050
1050
  function applyPatches(container, nodes, patches, engine, onRoot) {
1051
1051
  for (const patch of patches) {
1052
1052
  switch (patch.type) {
@@ -1202,8 +1202,6 @@ function applyProp(el, name, value) {
1202
1202
  border: "border",
1203
1203
  gap: "gap",
1204
1204
  flex: "flex",
1205
- alignItems: "alignItems",
1206
- justifyContent: "justifyContent",
1207
1205
  opacity: "opacity",
1208
1206
  overflow: "overflow"
1209
1207
  };
@@ -1301,6 +1299,26 @@ var init_hypenapp = __esm(() => {
1301
1299
  };
1302
1300
  });
1303
1301
 
1302
+ // src/dom/components/app.ts
1303
+ var exports_app = {};
1304
+ __export(exports_app, {
1305
+ appHandler: () => appHandler
1306
+ });
1307
+ var appHandler;
1308
+ var init_app = __esm(() => {
1309
+ appHandler = {
1310
+ create() {
1311
+ const el = document.createElement("div");
1312
+ el.style.display = "flex";
1313
+ el.style.flexDirection = "column";
1314
+ el.style.minHeight = "100vh";
1315
+ el.style.width = "100%";
1316
+ el.dataset.hypenType = "app";
1317
+ return el;
1318
+ }
1319
+ };
1320
+ });
1321
+
1304
1322
  // src/dom/components/index.ts
1305
1323
  class ComponentRegistry {
1306
1324
  handlers = new Map;
@@ -1311,9 +1329,13 @@ class ComponentRegistry {
1311
1329
  this.handlers.set(type.toLowerCase(), handler);
1312
1330
  }
1313
1331
  get(type) {
1332
+ if (!type)
1333
+ return;
1314
1334
  return this.handlers.get(type.toLowerCase());
1315
1335
  }
1316
1336
  createElement(type, props = {}) {
1337
+ if (!type)
1338
+ return null;
1317
1339
  const handler = this.get(type);
1318
1340
  if (!handler)
1319
1341
  return null;
@@ -1355,6 +1377,8 @@ class ComponentRegistry {
1355
1377
  const { routerHandler: routerHandler2 } = (init_router(), __toCommonJS(exports_router));
1356
1378
  const { routeHandler: routeHandler2 } = (init_route(), __toCommonJS(exports_route));
1357
1379
  const { hypenAppHandler: hypenAppHandler2 } = (init_hypenapp(), __toCommonJS(exports_hypenapp));
1380
+ const { appHandler: appHandler2 } = (init_app(), __toCommonJS(exports_app));
1381
+ this.register("app", appHandler2);
1358
1382
  this.register("column", columnHandler2);
1359
1383
  this.register("row", rowHandler2);
1360
1384
  this.register("text", textHandler2);
@@ -2038,7 +2062,7 @@ import {
2038
2062
  disposableListener,
2039
2063
  disposableTimeout
2040
2064
  } from "@hypen-space/core/disposable";
2041
- import { frameworkLoggers as frameworkLoggers3 } from "@hypen-space/core";
2065
+ import { frameworkLoggers as frameworkLoggers3 } from "@hypen-space/core/logger";
2042
2066
  var log3 = frameworkLoggers3.events;
2043
2067
  function toPlainObject(value) {
2044
2068
  if (value instanceof Map) {
@@ -2323,6 +2347,7 @@ var eventHandlers = {
2323
2347
  extractPayload: scrollPayload
2324
2348
  }),
2325
2349
  onLongClick: createLongClickHandler(500),
2350
+ onLongPress: createLongClickHandler(500),
2326
2351
  onFocus: createEventHandler("focus", { extractPayload: focusPayload }),
2327
2352
  onBlur: createEventHandler("blur", { extractPayload: focusPayload }),
2328
2353
  onMouseEnter: createEventHandler("mouseenter", { extractPayload: mousePayload }),
@@ -2584,12 +2609,6 @@ var advancedLayoutHandlers = {
2584
2609
  flexBasis: (el, value) => {
2585
2610
  el.style.flexBasis = typeof value === "number" ? `${value}px` : String(value);
2586
2611
  },
2587
- justifyContent: (el, value) => {
2588
- el.style.justifyContent = mapAlignmentValue(String(value));
2589
- },
2590
- alignItems: (el, value) => {
2591
- el.style.alignItems = mapAlignmentValue(String(value));
2592
- },
2593
2612
  alignContent: (el, value) => {
2594
2613
  el.style.alignContent = String(value);
2595
2614
  },
@@ -3127,7 +3146,7 @@ var canvasApplicators = {
3127
3146
  };
3128
3147
 
3129
3148
  // src/dom/debug.ts
3130
- import { frameworkLoggers as frameworkLoggers4 } from "@hypen-space/core";
3149
+ import { frameworkLoggers as frameworkLoggers4 } from "@hypen-space/core/logger";
3131
3150
  var log4 = frameworkLoggers4.debug;
3132
3151
  var defaultDebugConfig = {
3133
3152
  enabled: false,
@@ -3290,7 +3309,7 @@ class RerenderTracker {
3290
3309
  }
3291
3310
 
3292
3311
  // src/dom/renderer.ts
3293
- import { frameworkLoggers as frameworkLoggers5 } from "@hypen-space/core";
3312
+ import { frameworkLoggers as frameworkLoggers5 } from "@hypen-space/core/logger";
3294
3313
  var log5 = frameworkLoggers5.renderer;
3295
3314
 
3296
3315
  class DOMRenderer {
@@ -3363,24 +3382,30 @@ class DOMRenderer {
3363
3382
  });
3364
3383
  }
3365
3384
  applyPatch(patch) {
3385
+ const p = patch;
3386
+ const id = patch.id ?? p.id;
3387
+ const elementType = patch.elementType ?? p.element_type;
3388
+ const parentId = patch.parentId ?? p.parent_id;
3389
+ const beforeId = patch.beforeId ?? p.before_id;
3390
+ const eventName = patch.eventName ?? p.event_name;
3366
3391
  switch (patch.type) {
3367
3392
  case "create":
3368
- this.onCreate(patch.id, patch.elementType, patch.props || {});
3393
+ this.onCreate(id, elementType ?? "container", patch.props || {});
3369
3394
  break;
3370
3395
  case "setProp":
3371
- this.onSetProp(patch.id, patch.name, patch.value);
3396
+ this.onSetProp(id, patch.name, patch.value);
3372
3397
  break;
3373
3398
  case "setText":
3374
- this.onSetText(patch.id, patch.text);
3399
+ this.onSetText(id, patch.text);
3375
3400
  break;
3376
3401
  case "insert":
3377
- this.onInsert(patch.parentId, patch.id, patch.beforeId);
3402
+ this.onInsert(parentId, id, beforeId);
3378
3403
  break;
3379
3404
  case "move":
3380
- this.onMove(patch.parentId, patch.id, patch.beforeId);
3405
+ this.onMove(parentId, id, beforeId);
3381
3406
  break;
3382
3407
  case "remove":
3383
- this.onRemove(patch.id);
3408
+ this.onRemove(id);
3384
3409
  break;
3385
3410
  }
3386
3411
  }
@@ -3511,7 +3536,7 @@ class DOMRenderer {
3511
3536
  }
3512
3537
 
3513
3538
  // src/dom/events.ts
3514
- import { frameworkLoggers as frameworkLoggers6 } from "@hypen-space/core";
3539
+ import { frameworkLoggers as frameworkLoggers6 } from "@hypen-space/core/logger";
3515
3540
  var log6 = frameworkLoggers6.events;
3516
3541
 
3517
3542
  class EventManager {
@@ -3741,7 +3766,7 @@ function getAbsoluteBounds(node) {
3741
3766
  }
3742
3767
 
3743
3768
  // src/canvas/text.ts
3744
- import { frameworkLoggers as frameworkLoggers7 } from "@hypen-space/core";
3769
+ import { frameworkLoggers as frameworkLoggers7 } from "@hypen-space/core/logger";
3745
3770
  var log7 = frameworkLoggers7.canvas;
3746
3771
  var textMetricsCache = new Map;
3747
3772
  function getCacheKey(text, fontStyle, maxWidth) {
@@ -3877,7 +3902,12 @@ function computeLayout(ctx, node, availableWidth, availableHeight, x = 0, y = 0)
3877
3902
  let width = parseSize(props.width);
3878
3903
  let height = parseSize(props.height);
3879
3904
  const type = node.type.toLowerCase();
3880
- if (type === "spacer") {
3905
+ if (type === "app") {
3906
+ if (width === null)
3907
+ width = availableAfterMargin.width;
3908
+ if (height === null)
3909
+ height = availableAfterMargin.height;
3910
+ } else if (type === "spacer") {
3881
3911
  if (width === null)
3882
3912
  width = availableAfterMargin.width;
3883
3913
  if (height === null)
@@ -4000,10 +4030,10 @@ function layoutChildren(ctx, parent) {
4000
4030
  return;
4001
4031
  }
4002
4032
  const flexDirection = props.flexDirection || (parent.type === "column" ? "column" : "row");
4003
- const justifyContent = props.justifyContent || "flex-start";
4004
- const alignItems = props.alignItems || "flex-start";
4005
- const gap = parseFloat(props.gap) || 0;
4006
4033
  const isColumn = flexDirection === "column";
4034
+ const justifyContent = isColumn ? props.verticalAlignment || "flex-start" : props.horizontalAlignment || "flex-start";
4035
+ const alignItems = isColumn ? props.horizontalAlignment || "flex-start" : props.verticalAlignment || "flex-start";
4036
+ const gap = parseFloat(props.gap) || 0;
4007
4037
  const availableWidth = layout.contentWidth;
4008
4038
  const availableHeight = layout.contentHeight;
4009
4039
  const childInfo = [];
@@ -4116,8 +4146,8 @@ function layoutChildren(ctx, parent) {
4116
4146
  function layoutStackChildren(ctx, parent) {
4117
4147
  const layout = parent.layout;
4118
4148
  const props = parent.props;
4119
- const alignItems = props.alignItems || "flex-start";
4120
- const justifyContent = props.justifyContent || "flex-start";
4149
+ const horizontalAlignment = props.horizontalAlignment || "flex-start";
4150
+ const verticalAlignment = props.verticalAlignment || "flex-start";
4121
4151
  const availableWidth = layout.contentWidth;
4122
4152
  const availableHeight = layout.contentHeight;
4123
4153
  for (const child of parent.children) {
@@ -4125,14 +4155,14 @@ function layoutStackChildren(ctx, parent) {
4125
4155
  const childLayout = child.layout;
4126
4156
  let x = 0;
4127
4157
  let y = 0;
4128
- if (alignItems === "center") {
4158
+ if (horizontalAlignment === "center") {
4129
4159
  x = (availableWidth - childLayout.width) / 2;
4130
- } else if (alignItems === "flex-end") {
4160
+ } else if (horizontalAlignment === "flex-end") {
4131
4161
  x = availableWidth - childLayout.width;
4132
4162
  }
4133
- if (justifyContent === "center") {
4163
+ if (verticalAlignment === "center") {
4134
4164
  y = (availableHeight - childLayout.height) / 2;
4135
- } else if (justifyContent === "flex-end") {
4165
+ } else if (verticalAlignment === "flex-end") {
4136
4166
  y = availableHeight - childLayout.height;
4137
4167
  }
4138
4168
  childLayout.x = layout.x + layout.contentX + x;
@@ -4219,6 +4249,7 @@ function paintNode(ctx, node) {
4219
4249
  case "link":
4220
4250
  paintLink(ctx, node);
4221
4251
  break;
4252
+ case "app":
4222
4253
  case "container":
4223
4254
  case "box":
4224
4255
  paintContainer(ctx, node);
@@ -5457,7 +5488,7 @@ class AccessibilityLayer {
5457
5488
  }
5458
5489
 
5459
5490
  // src/canvas/renderer.ts
5460
- import { frameworkLoggers as frameworkLoggers8 } from "@hypen-space/core";
5491
+ import { frameworkLoggers as frameworkLoggers8 } from "@hypen-space/core/logger";
5461
5492
  var log8 = frameworkLoggers8.canvas;
5462
5493
  var DEFAULT_OPTIONS = {
5463
5494
  devicePixelRatio: typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1,
@@ -5724,4 +5755,4 @@ export {
5724
5755
  ApplicatorRegistry
5725
5756
  };
5726
5757
 
5727
- //# debugId=12C217F7874690EA64756E2164756E21
5758
+ //# debugId=F23E5C520868952164756E2164756E21