effsz
v1.4.1
Published
Self-confident size containers
Downloads
501
Maintainers
Readme
EffSZ is a web component library that controls the size and visibility of content.
Some features
- lightweight
- zero-dependency
- framework agnostic
Links
Examples
Installation
Type in your terminal:
# npm
npm i effsz
# pnpm
pnpm add effsz
# yarn
yarn add effszQuick start
In short each web component should be defined before use. Every module in this library provides such a function
useLimitfromeffsz/limitdefines container that limits count of visible children when it overflows;useScrollfromeffsz/scrolldefines container that based on the native scroll, but sets its own scrollbar and shadows which are displayed the same for different browsers;useSplitfromeffsz/splitdefines container that split its area between slots that can be resized;useMasonryfromeffsz/masonrydefines container where one axis uses a typical strict grid layout and the other a masonry layout. It displays the content through slots, and each slotted element must have aslotattribute with its ordinal index and an aspect ratio value defined either using theaspect-ratioproperty inside thestyleattribute, or using thedata-effsz-arattribute;useExpandfromeffsz/expanddefines container that can be expanded or collapsed to predefined max and min sizes respectively;useCarouselfromeffsz/carouseldefines carousel container.
Each function returns object with observe and unobserve event handlers to control components behavior.
For example, you would like to use Split container:
import { useEffect } from 'react';
import { useSplit } from 'effsz/split'
// define custom web component before use
// note, that for SSR you need to call it before browser parse document body
// so you might need to add separate definition script to the document head
const { observe } = useSplit();
export const App = () => {
const ref = useRef();
useEffect(() => {
// you can observe web component events
const unobserve = observe((e) => {
// event handler
}, ref.current);
// and you can unobserve
return () => unobserve();
}, []);
// just use web component in jsx
// all attributes are described in ISplitContainerAttrs interface
return <div ref={ref}>
<effsz-split
ini='0.25 0.5'
min='0.25 0.25 0.1'
fdir='rr'
>
<div class='first' slot='1'>
...
</div>
<div class='second' slot='2'>
...
</div>
<div class='last'>
...
</div>
</effsz-split>
</div>;
}That's all. Enjoy simplicity.
