🖥️ A collection of tools for the browser — DOM, clipboard, rAF, request & SCSS utilities
The utils family · core:
@cc-heart/utils· Node.js runtime:@cc-heart/utils-service· browser:@cc-heart/utils-client
- 🧩 DOM —
addClassName,removeClassName,classNames,addStyles,removeStyles,getStyles,getPadding,isHidden - 📋 Clipboard —
copyTextToClipboardwith graceful fallback - 🎞️ rAF — throttled
requestAnimationFramescheduler - 🌐 Request — fetch-based
Requestclass &createFetchRequest - 🎨 CSS —
generateCssNamespaceFnBEM-style namespace helper - 💅 SCSS kit — variables, functions & mixins with customizable namespace
- 🌳 ESM + CJS dual builds with full TypeScript types
npm install @cc-heart/utils-client
# or
pnpm add @cc-heart/utils-clientimport { addClassName, removeClassName, classNames, addStyles, isHidden } from '@cc-heart/utils-client'
addClassName(el, 'active', 'visible')
removeClassName(el, 'hidden')
addStyles(el, { color: 'red', fontSize: '14px' })
const cls = classNames('btn', { 'btn--active': isActive }, ['extra'])import { copyTextToClipboard } from '@cc-heart/utils-client'
copyTextToClipboard('hello world') // falls back when Clipboard API is unavailableimport { raf } from '@cc-heart/utils-client'
const stop = raf(() => {
// runs at most every `rate` frames
}, 2)
stop() // cancelimport { createFetchRequest } from '@cc-heart/utils-client'
const request = createFetchRequest()
// ...import { generateCssNamespaceFn } from '@cc-heart/utils-client'
const ns = generateCssNamespaceFn('cc')('button')
ns.b() // 'cc-button'
ns.e('icon') // 'cc-button__icon'Create an overwrite file (e.g. overwrite.scss), and write the following content:
@forward '@cc-heart/utils-client/scss/variable.scss' with (
$namespace: 'cc'
);Create a new scss file (e.g. lib.scss), and write the following content:
@use './overwrite.scss' as *;
@forward '@cc-heart/utils-client/scss/function.scss';
@forward '@cc-heart/utils-client/scss/mixins.scss';@cc-heart/utils-client is licensed under the MIT License.
