@servlyadmin/runtime-core 0.1.5 → 0.1.7

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/index.cjs CHANGED
@@ -1491,7 +1491,7 @@ function resolveFunctionBinding(binding, context) {
1491
1491
  }
1492
1492
  return void 0;
1493
1493
  }
1494
- function attachEventHandlers(domElement, element, eventHandlers, context, elementState) {
1494
+ function attachEventHandlers(domElement, element, eventHandlers, context, elementState, isRootElement = false) {
1495
1495
  const elementId = element.i;
1496
1496
  if (eventHandlers && eventHandlers[elementId]) {
1497
1497
  const handlers = eventHandlers[elementId];
@@ -1516,6 +1516,18 @@ function attachEventHandlers(domElement, element, eventHandlers, context, elemen
1516
1516
  }
1517
1517
  }
1518
1518
  }
1519
+ if (isRootElement && context.props) {
1520
+ for (const [propName, value] of Object.entries(context.props)) {
1521
+ if (propName.startsWith("on") && propName.length > 2 && typeof value === "function") {
1522
+ const domEventName = propName.slice(2).toLowerCase();
1523
+ if (!elementState.eventListeners.has(domEventName)) {
1524
+ const handler = value;
1525
+ elementState.eventListeners.set(domEventName, handler);
1526
+ domElement.addEventListener(domEventName, handler);
1527
+ }
1528
+ }
1529
+ }
1530
+ }
1519
1531
  }
1520
1532
  function detachEventHandlers(elementState) {
1521
1533
  for (const [eventName, handler] of elementState.eventListeners) {
@@ -1523,7 +1535,7 @@ function detachEventHandlers(elementState) {
1523
1535
  }
1524
1536
  elementState.eventListeners.clear();
1525
1537
  }
1526
- function createElement(element, context, eventHandlers) {
1538
+ function createElement(element, context, eventHandlers, isRootElement = false) {
1527
1539
  const tag = getElementTag(element);
1528
1540
  const domElement = document.createElement(tag);
1529
1541
  domElement.setAttribute("data-servly-id", element.i);
@@ -1549,7 +1561,7 @@ function createElement(element, context, eventHandlers) {
1549
1561
  textContent,
1550
1562
  eventListeners: /* @__PURE__ */ new Map()
1551
1563
  };
1552
- attachEventHandlers(domElement, element, eventHandlers, context, elementState);
1564
+ attachEventHandlers(domElement, element, eventHandlers, context, elementState, isRootElement);
1553
1565
  return elementState;
1554
1566
  }
1555
1567
  var globalRenderingStack = /* @__PURE__ */ new Set();
@@ -1610,8 +1622,8 @@ function renderComponentRef(element, container, context, state) {
1610
1622
  globalRenderingStack.delete(refId);
1611
1623
  }
1612
1624
  }
1613
- function renderElement(element, tree, context, eventHandlers, elementStates, state) {
1614
- const elementState = createElement(element, context, eventHandlers);
1625
+ function renderElement(element, tree, context, eventHandlers, elementStates, state, isRootElement = false) {
1626
+ const elementState = createElement(element, context, eventHandlers, isRootElement);
1615
1627
  elementStates.set(element.i, elementState);
1616
1628
  const config = element.configuration;
1617
1629
  if (config?.componentViewRef) {
@@ -1623,7 +1635,7 @@ function renderElement(element, tree, context, eventHandlers, elementStates, sta
1623
1635
  }
1624
1636
  const children = tree.get(element.i) || [];
1625
1637
  for (const child of children) {
1626
- const childElement = renderElement(child, tree, context, eventHandlers, elementStates, state);
1638
+ const childElement = renderElement(child, tree, context, eventHandlers, elementStates, state, false);
1627
1639
  elementState.domElement.appendChild(childElement);
1628
1640
  }
1629
1641
  return elementState.domElement;
@@ -1672,14 +1684,16 @@ function render(options) {
1672
1684
  context,
1673
1685
  eventHandlers,
1674
1686
  state.elementStates,
1675
- state
1687
+ state,
1688
+ true
1689
+ // isRootElement
1676
1690
  );
1677
1691
  container.appendChild(state.rootElement);
1678
1692
  } else {
1679
1693
  const wrapper = document.createElement("div");
1680
1694
  wrapper.setAttribute("data-servly-wrapper", "true");
1681
1695
  for (const root of rootElements) {
1682
- const rootElement = renderElement(root, tree, context, eventHandlers, state.elementStates, state);
1696
+ const rootElement = renderElement(root, tree, context, eventHandlers, state.elementStates, state, true);
1683
1697
  wrapper.appendChild(rootElement);
1684
1698
  }
1685
1699
  state.rootElement = wrapper;
package/dist/index.js CHANGED
@@ -1218,7 +1218,7 @@ function resolveFunctionBinding(binding, context) {
1218
1218
  }
1219
1219
  return void 0;
1220
1220
  }
1221
- function attachEventHandlers(domElement, element, eventHandlers, context, elementState) {
1221
+ function attachEventHandlers(domElement, element, eventHandlers, context, elementState, isRootElement = false) {
1222
1222
  const elementId = element.i;
1223
1223
  if (eventHandlers && eventHandlers[elementId]) {
1224
1224
  const handlers = eventHandlers[elementId];
@@ -1243,6 +1243,18 @@ function attachEventHandlers(domElement, element, eventHandlers, context, elemen
1243
1243
  }
1244
1244
  }
1245
1245
  }
1246
+ if (isRootElement && context.props) {
1247
+ for (const [propName, value] of Object.entries(context.props)) {
1248
+ if (propName.startsWith("on") && propName.length > 2 && typeof value === "function") {
1249
+ const domEventName = propName.slice(2).toLowerCase();
1250
+ if (!elementState.eventListeners.has(domEventName)) {
1251
+ const handler = value;
1252
+ elementState.eventListeners.set(domEventName, handler);
1253
+ domElement.addEventListener(domEventName, handler);
1254
+ }
1255
+ }
1256
+ }
1257
+ }
1246
1258
  }
1247
1259
  function detachEventHandlers(elementState) {
1248
1260
  for (const [eventName, handler] of elementState.eventListeners) {
@@ -1250,7 +1262,7 @@ function detachEventHandlers(elementState) {
1250
1262
  }
1251
1263
  elementState.eventListeners.clear();
1252
1264
  }
1253
- function createElement(element, context, eventHandlers) {
1265
+ function createElement(element, context, eventHandlers, isRootElement = false) {
1254
1266
  const tag = getElementTag(element);
1255
1267
  const domElement = document.createElement(tag);
1256
1268
  domElement.setAttribute("data-servly-id", element.i);
@@ -1276,7 +1288,7 @@ function createElement(element, context, eventHandlers) {
1276
1288
  textContent,
1277
1289
  eventListeners: /* @__PURE__ */ new Map()
1278
1290
  };
1279
- attachEventHandlers(domElement, element, eventHandlers, context, elementState);
1291
+ attachEventHandlers(domElement, element, eventHandlers, context, elementState, isRootElement);
1280
1292
  return elementState;
1281
1293
  }
1282
1294
  var globalRenderingStack = /* @__PURE__ */ new Set();
@@ -1337,8 +1349,8 @@ function renderComponentRef(element, container, context, state) {
1337
1349
  globalRenderingStack.delete(refId);
1338
1350
  }
1339
1351
  }
1340
- function renderElement(element, tree, context, eventHandlers, elementStates, state) {
1341
- const elementState = createElement(element, context, eventHandlers);
1352
+ function renderElement(element, tree, context, eventHandlers, elementStates, state, isRootElement = false) {
1353
+ const elementState = createElement(element, context, eventHandlers, isRootElement);
1342
1354
  elementStates.set(element.i, elementState);
1343
1355
  const config = element.configuration;
1344
1356
  if (config?.componentViewRef) {
@@ -1350,7 +1362,7 @@ function renderElement(element, tree, context, eventHandlers, elementStates, sta
1350
1362
  }
1351
1363
  const children = tree.get(element.i) || [];
1352
1364
  for (const child of children) {
1353
- const childElement = renderElement(child, tree, context, eventHandlers, elementStates, state);
1365
+ const childElement = renderElement(child, tree, context, eventHandlers, elementStates, state, false);
1354
1366
  elementState.domElement.appendChild(childElement);
1355
1367
  }
1356
1368
  return elementState.domElement;
@@ -1399,14 +1411,16 @@ function render(options) {
1399
1411
  context,
1400
1412
  eventHandlers,
1401
1413
  state.elementStates,
1402
- state
1414
+ state,
1415
+ true
1416
+ // isRootElement
1403
1417
  );
1404
1418
  container.appendChild(state.rootElement);
1405
1419
  } else {
1406
1420
  const wrapper = document.createElement("div");
1407
1421
  wrapper.setAttribute("data-servly-wrapper", "true");
1408
1422
  for (const root of rootElements) {
1409
- const rootElement = renderElement(root, tree, context, eventHandlers, state.elementStates, state);
1423
+ const rootElement = renderElement(root, tree, context, eventHandlers, state.elementStates, state, true);
1410
1424
  wrapper.appendChild(rootElement);
1411
1425
  }
1412
1426
  state.rootElement = wrapper;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servlyadmin/runtime-core",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Framework-agnostic core renderer for Servly components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",