npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@suchipi/jsxdom

v0.4.1

Published

createElement-style JSX factory that creates HTML elements directly

Downloads

111

Readme

@suchipi/jsxdom

JSX factory that creates HTML elements directly

Use JSX as syntax sugar for document.createElement, Object.assign(element.style, {/* ... */}), etc.

Installation

npm install --save @suchipi/jsxdom

Usage

If using TypeScript, put these in your tsconfig.json's compilerOptions:

"jsx": "react",
"jsxFactory": "jsx",
"jsxFragmentFactory": "DocumentFragment",

Or, if using Babel, provide these options to @babel/plugin-transform-react-jsx:

"pragma": "jsx",
"pragmaFrag": "DocumentFragment",

Then, use the library in your code like so:

import { jsx, ref } from "@suchipi/jsxdom";

const upButton = ref();

const myDiv = (
  <div>
    <button ref={upButton} onclick={() => console.log("up!")}>
      Up
    </button>
    <button
      onclick={() => console.log("down!")}
      style={{ backgroundColor: "red" }}
    >
      Down
    </button>
  </div>
);

console.log(myDiv); // HTMLDivElement
console.log(upButton); // { current: HTMLButtonElement }

It also supports user components:

function MyComponent(props) {
  return <div {...props} />;
}

const myDiv = <MyComponent id="hi" />;

console.log(myDiv); // HTMLDivElement

Notes:

  • jsx must be in-scope to use JSX.
  • ref creates React-style ref objects, shaped like { current: any }.
  • There's no re-rendering logic here. You can use this to get an initial element tree, but modifying it after that point is up to you.
  • Use eg onclick instead of onClick, className instead of class.
    • Because it's using the HTMLElement property names.
  • The result of every JSX expression is an HTMLElement (or DocumentFragment if you use JSX fragment syntax).
  • To attach the resulting HTMLElement(s) to the DOM, use document.body.appendChild or etc.
  • Every prop passed to a JSX element will be assigned to the HTMLElement directly, except for ref, style, and namespaceURI:
    • When a ref prop is present, the HTMLElement will be written to the ref's current property (or, if the ref is a function, it will be called with the HTMLElement).
    • When a style prop is present, its properties will be assigned onto the HTMLElement's style property.
    • When a namespaceURI prop is present, it will be passed into document.createElementNS. This can be used to create eg. svg elements.