UIElement Docs Version 0.13.0

πŸ”— πŸš€ Getting Started

Set up UIElement in minutes – no build tools required. Whether you’re enhancing server-rendered HTML with lightweight interactivity or integrating Web Components into a modern JavaScript project, UIElement makes it simple to get started.

πŸ”— How to Install UIElement

UIElement works without build tools but also supports NPM and module bundlers for larger projects. Choose the option that best fits your needs.

πŸ”— Using a CDN

For the easiest setup, include UIElement via a CDN. This is ideal for testing or quick projects where you want lightweight interactivity without additional tooling.

html

<script src="https://cdn.jsdelivr.net/npm/@zeix/ui-element@latest/index.js"></script>

πŸ”— Self-Hosting UIElement

For production use, you may want to self-host UIElement to avoid relying on a CDN. You can download the latest version from:

Github Repository

Simply host the file on your server and include it like this:

html

<script src="/path/to/your/hosted/ui-element.js"></script>

Why self-host?

  • You control updates and avoid breaking changes from external CDNs.
  • Works for projects with stricter Content Security Policy rules.

Remember to keep the hosted file updated to use the latest features and bug fixes.

πŸ”— Installing via Package Managers

If you’re using a bundler like Vite, Webpack, or Rollup, install UIElement via NPM or Bun:

bash

npm install @zeix/ui-element

bash

bun add @zeix/ui-element

Then import the needed functions in your JavaScript:

js

import { asString, component, first, on, RESET, setText } from '@zeix/ui-element'

πŸ”— Creating Your First Component

Now, let's create an interactive Web Component to verify your setup.

What This Component Does

  • Displays β€œHello, World!” by default.
  • Updates dynamically when you type into the input field.

πŸ”— Markup

Include the following in your server-rendered HTML:

html

<hello-world>
	<label>Your name<br>
		<input type="text">
	</label>
	<p>Hello, <span>World</span>!</p>
</hello-world>

πŸ”— Component Definition

Save the following inside a <script type="module"> tag or an external JavaScript file.

html

<script type="module">
	import { asString, component, on, RESET, setText } from "https://cdn.jsdelivr.net/npm/@zeix/ui-element@latest/index.js"

	component("hello-world", {
		// Parse "name" attribute, falling back to server-rendered content
		name: asString(RESET)
	}, (el, { first }) => [

		// Update content dynamically based on the "name" signal
		first("span", setText("name")),

		// Handle user input to change the "name"
		first("input", on("input", e => {
			el.name = e.target.value || RESET
		}))
	])
</script>

What Happens Here?

  • The asString(RESET) signal parses the "name" attribute, falling back to server-rendered value (constant RESET).
  • The setText('name') effect syncs the state with the <span>.
  • The on('input') event updates the state whenever you type in the first <input> field, falling back to server-rendered value if empty.
  • The Web Component hydrates automatically when inserted into the page.

πŸ”— Verifying Your Installation

If everything is set up correctly, you should see:

  • A text input field
  • A greeting (Hello, World!)
  • The greeting updates as you type

If it's not working:

  • Check the browser console for errors (missing imports, typos).
  • Ensure your <script> tag is set to type="module" when using ES modules.
  • If using NPM, confirm UIElement is installed inside node_modules/@zeix/ui-element.

πŸ”— Next Steps

Now that UIElement is installed, explore the core concepts for Building Components:

  • βœ… Component anatomy and lifecycle (using Web Components)
  • βœ… Accessing sub-elements (select children)
  • βœ… Signals & effects (state-driven DOM updates)
  • βœ… Event listeners (react to user interaction)

Or jump straight to Styling Components for CSS best practices.