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

boteasy-dom

v1.2.8

Published

This document is inspired by React, React-router, jQuery and styled-components, the aim is to have a merge of everything good in one documentation.

Downloads

156

Readme

BoteasyDOM · GitHub license npm version npm version Downloads

  • This document is inspired by React, React-router, jQuery and styled-components, the aim is to have a merge of everything good in one documentation.

How to use?

npm i boteasy-dom
yarn add boteasy-dom

Quick use:

import { useState, createRoot } from "boteasy-dom";

const App = () => {
	const [count, setCount] = useState(0);
	return (
		<>
			<h1>{count}</h1>
			<button onClick={() => setCount(prev => prev + 1)}>Increment</button>
		</>
	);
};

const container = document.querySelector("#root");
const root = createRoot(container);
root.render(<App />);

Import:

import BoteasyDOM from "boteasy-dom";
/**
 * @jsx jsxDEV
 * @jsxFrag Fragment
 * @jsxRuntime classic
*/
const {  } = BoteasyDOM;

.theme:

  • ???
const scheme = theme;

.version:

  • A boteasy-dom version
const ver = version;

.Fragment:

  • Allows a component to return multiple elements grouped a list of children without adding extra nodes to the DOM
<>{/*@__DATA__*/}</>

.match(object, string|null):

  • This function is a direct alternative to "switch ~ case", and is based on the match function of the php language
const index = null;
match({
	first: "boteasy",
	last: "dom",
	default: "test"
}, index);

.useId(number|undefined, boolean|undefined):

  • ???
const inputId = useId(2);

returns: :string:

const inputId = useId(2, true);

returns: string

<input type="text" id={inputId} />

jsxDEV("input", {type: "text", id: inputId})

.useRef(any|function):

  • ???
const email = useRef(() => {
	let name = "boteasy.dom";
	return `${name}@example.com`;
});

<input type="email" ref={email} />

jsxDEV("input", {type: "email", ref: email})

let yourEmail = email.value;

.useHtml(selector, value):

  • This function serves to add or remove an element in the DOM
useHtml("#root", `<h1>Hello, world!</h1>`);

.useAppend(selector, string, boolean|undefined):

  • ???
useAppend("#root", `<div>Text</div>`);

Just inside the element, before its first child.

useAppend("#root", `<div>Text</div>`, true);

Just inside the element, after its last child.

.useWait(bolean|string):

  • This function is for you to disable all elements;
useWait(true);
useWait(false);

.useProp(selectors, attribute, any):

  • This function is used to enable/disable elements or select an input type checkbox, for example;
useProp("input, select", "disabled", true);
useProp("input", "disabled", false);

.useRequest({}):

  • This function serves to perform AJAX requests;
useRequest({
	url: "https://www.example.com/api/",
	method: "GET",
	headers: {},
	data: {},
	dataType: "json",
	success: () => {},
	error: () => {},
	finally: () => {}
});

.useVibrate(number|number[]|undefined):

  • ???
useVibrate(100);

100ms

useVibrate([500, 110, 500, 110, 450, 110, 200, 110, 170, 40, 450, 110, 200, 110, 170, 40, 500]);

starwars

useVibrate([150, 150, 150, 150, 75, 75, 150, 150, 150, 150, 450]);

powerrangers

.useClipboard(string, function|undefined):

  • This function serves to copy a text to a clipboard;
const text = "Just a test!";
useClipboard(text, () => {
	console.info("Text copied to clipboard.");
});

.isObj(any):

  • ???
const is = isObj({ name: "Boteasy" });

.useTwins(string|{}|[], string|{}|[]):

  • As the name says, this function is for you to compare if two objects or array are equal.
const array = ["boteasy", "dom"];
const array2 = [
	"boteasy",
	"dom",
	"version": ["latest"]
];
useTwins(array, array2);

.useFloat(number|string, number):

  • ???
const total = 100.123;
useFloat(total, 2);

.useState(any|function):

  • This function is just for adding some local states.
const [state, setState] = useState(9);
setState(prev => (prev + 1));

.useEffect(function, []|undefined):

  • ???
let name = "boteasy";
const boteasyTest = text => console.info(`Hello, ${text}!`);
useEffect(() => {
	boteasyTest(name);
	/**
	 * TODO: Under Construction
	 * this function is incomplete.
	*/
	return () => console.info("Bye, world!");
}, [name]);

.useStorage():

  • Manipulates: window.localStorage.
const storage = useStorage();

(string, any|function):

storage("theme", () => {
	const prefers = window.matchMedia("(prefers-color-scheme: dark)").matches;
	return prefers ? "dark" : "light"
});

set

storage("theme");

get

storage()("theme");

remove

storage()();

clear

.useNavigate(number|undefined):

  • ???
const navigate = useNavigate(1000);

1000ms delay

(string, boolean|undefined):

Send the second parameter as false, to removes the current page from the session history and navigates to the given URL.

navigate();

reload

navigate("login");
navigate("https://www.example.com/", false);

.useScroll(string, object|undefined):

  • ???
const { width, height, x, y } = useScroll("#root", { behavior: "smooth", offset = { top: 200, left: 0 } });

methods

height; //number
y.value; //number
y.setScroll(100);
y.start();
y.end();

.flushAsync(function, any):

  • ???
flushAsync(event => {
	console.info(`Hello, ${event.name}!`);
}, { name: "Boteasy" });

.createRoot(container, object|bolean|undefined):

  • This function serves to create a route to Boteasy-dom, send the second parameter an object containing an intex with hydrate as true.
const container = document.querySelector("#root");
const root = createRoot(container, {
	hydrate: true,
	response: () => {
		console.info("rendered");
	}
});
  • Render the element in the root;
const element = <h1>Hello, world!</h1>;
root.render(element);

<h1>Hello, world!</h1>

  • Remove the element in the root;
root.unmount();

.hydrateRoot(container, component):

  • hydrate the element in the root;
const name = "Boteasy";
const container = document.querySelector("#root");
hydrateRoot(container, <h1>Hello, {name}.</h1>);

<h1>Hello, Ronaldo S.</h1>

.StrictMode():

  • ???
const App = (
	<StrictMode element={<h1>Hello, world!</h1>} />
);
const App = (
	<StrictMode>
		<h1>Hello, world!</h1>
	</StrictMode>
);

.StyleProvider({ theme: object }|undefined):

  • ???
const provider = {color: "#000", fontWeight: "bold"};
const App = (
	<StyleProvider theme={provider}>
		<>{/*@__DATA__*/}</>
	</StyleProvider>
);
const App = (
	<StyleProvider theme={provider} element={<>{/*@__DATA__*/}</>} />
);

.createElement(any, null|object, any[]|undefined):

.jsxDEV(any, null|object, any[]|undefined):

  • This function serves to create elements to be rendered by Boteasy-dom;
createElement(StrictMode, null,
	createElement(Fragment, null,
		createElement("input", {type: "email", className: "boteasy", style: {color: "#000", fontWeight: "bold"}
		})
	)
);
jsxDEV(StrictMode, null,
	jsxDEV(Fragment, null,
		jsxDEV("input", {type: "email", className: "boteasy", style: {color: "#000", fontWeight: "bold"}
		})
	)
);

Both methods are the same.

<input type="email" class="boteasy" style="color: #000;font-weight: bold">

.cssClass(string|undefined):

  • This function is for you to add or remove multiple class on one or multiple elements;
cssClass("input, select").toggle("boteasy, dom");
const css = cssClass("input, select");
css.add("boteasy, dom");
css.remove("dom");
css.toggle("dom");

.useMarginClass(string | string[]):

  • ???
const baseClass = useMarginClass("boteasy");

"boteasy"

const baseClass = useMarginClass("boteasy", "dom");

"boteasy dom"

<div className={baseClass}>...</div>

"<div class="boteasy dom">...</div>"

.globalStyle(object):

  • ???
const GlobalStyle = globalStyle({
	color: "#000",
	fontWeight: "bold"
	backgroundColor: "#fff8"
});

<GlobalStyle />

GlobalStyle()

.cssStyled(object):

  • ???
const css = cssStyled({
	color: "#ff6347",
	fontWeight: 600
});

<h1 class={css} />

jsxDEV("h1", {className: css});

.styled(string, object):

  • ???
const Style = cssStyled("boteasy-dom", {
	color: "#ff6347",
	fontWeight: 600
});
<Style>
	<h1>Hello, world!</h1>
</Style>

jsxDEV(Style, null, jsxDEV("h1", null, "Hello, world!"));

final:

<boteasy-dom class="jss-...">
	<h1>Hello, world!</h1>
</boteasy-dom>

.rgba(string, number|undefined):

  • This function is for you to convert a hex color to rgba!
rgba("#fff", 0.4);

rgba(255,255,255, 0.4)

rgba("black", .2);

rgba(0,0,0, 0.2)