1.0.26 • Published 1 year ago

jero v1.0.26

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year 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

1 year ago

1.0.25

1 year ago

1.0.24

1 year ago

1.0.23

1 year ago

1.0.22

1 year ago

1.0.21

1 year ago

1.0.20

1 year ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.15

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago