1.0.26 • Published 11 months ago

jero v1.0.26

Weekly downloads
-
License
MIT
Repository
-
Last release
11 months ago

jero

jero is a lightweight JavaScript library that allows you to easily create custom HTML elements (web components) with built-in state management, event handling, and intersection observer support. This library is perfect for building reusable and interactive UI components in vanilla JavaScript.

Features

  • Custom Elements: Effortlessly define and register custom HTML elements.
  • State Management: Manage component state using the setState method with automatic re-rendering.
  • Event Handling: Simplified event listener setup using data-on attributes.
  • Two-Way Data Binding: Bind input values to component state using data-bind.
  • Lifecycle Events: Execute code when the component enters or leaves the viewport with Intersection Observer.

Installation

NPM

Install the library via npm:

  <script src="https://cdn.jsdelivr.net/npm/jero@1.0.26/dist/jero.js"></script>

NPM

Install the library via npm:

npm install jero

Using this library with cdl

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>jero Example</title>
  <script src="https://cdn.jsdelivr.net/npm/jero@1.0.26/dist/jero.js"></script>
</head>
<body>

<my-custom-component data-message="Hello from Attribute"></my-custom-component>

<script>
  jero.withCustomElement('my-custom-component', function (component) {
    return function MyComponent(component) {
      component.state = { message: "Hello, World!" };

      component.handlePageEnter = () => {
        console.log("Page entered.");
      };

      component.handlePageLeave = () => {
        console.log("Page left.");
      };

      component.handleUpdateButtonClick = function () {
        this.setState({ message: "Hello from the updated state!" });
      };

      return () => `
        <div>
          <h1>${component.state.message}</h1>
          <input type="text" data-bind="message" />
          <button data-on="click: handleUpdateButtonClick">Update Message</button>
          <p>Attribute value: ${component.getAttributeData("data-message") || "N/A"}</p>
        </div>
      `;
    };
  });
</script>

</body>
</html>

Creating custom component with a plain function

import withCustomElement from 'jero';

function MyComponent(component) {
  // Initialize component state
  component.state = { message: "Hello, World!" };

  // Define lifecycle methods
  component.handlePageEnter = () => {
    console.log("Page entered.");
  };

  component.handlePageLeave = () => {
    console.log("Page left.");
  };

  // Define event handlers
  component.handleUpdateButtonClick = function () {
    this.setState({ message: "Hello from the updated state!" });
  };

  // Render the component's HTML
  return () => `
    <div>
      <h1>${component.state.message}</h1>
      <input type="text" data-bind="message" />
      <button data-on="click: handleUpdateButtonClick">Update Message</button>
      <p>Attribute value: ${component.getAttributeData("data-message") || "N/A"}</p>
    </div>
  `;
}

// Register the custom element
withCustomElement("my-custom-component", function (component) {
  return MyComponent(component);
});
1.0.26

11 months ago

1.0.25

11 months ago

1.0.24

11 months ago

1.0.23

11 months ago

1.0.22

11 months ago

1.0.21

11 months ago

1.0.20

11 months ago

1.0.19

11 months ago

1.0.18

11 months ago

1.0.17

11 months ago

1.0.15

11 months ago

1.0.13

11 months ago

1.0.12

11 months ago