UXF Core
Constants
- common modifier classnames for interactive elements (eg.
CLASSES.IS_HOVERABLE
for is-hoverable classname)
focus-visible
is-active
is-busy
is-disabled
is-focused
is-hoverable
is-hovered
is-invalid
is-loading
is-not-hoverable
is-readonly
is-required
is-selected
Resizer
!!! Required @uxf/resizer version >= 2.3.2
which supported quality
parameter.
Config
[
{
"route": "/generated/static/:width(\\d+|x)_:height(\\d+|x)_:fit([a-z]+)_:position([a-z]+)_:background([a-z]+)_:trim([a-z]+)_:quality(\\d+|x)/:version/:filename(*).:extension.:toFormat",
"source": "https://uxf-base.uxf.dev/:filename+.:extension"
},
{
"route": "/generated/:namespace/:p1/:p2/:filename([a-f0-9\\-]+)_:width(\\d+|x)_:height(\\d+|x)_:fit([a-z]+)_:position([a-z]+)_:background([a-z]+)_:trim([a-z]+)_:quality(\\d+|x)_:extension.:toFormat",
"source": "https://s3.uxf.dev/${APP_NAME}-${APP_ENV}/:namespace/:p1/:p2/:filename.:extension"
}
]
Usage for generated images
import {resizerImageUrl} from "@uxf/core/utils/resizer";
<img src={resizerImageUrl(file, width, height, params)}/>
Usage for static images
import {resizerImageUrl} from "@uxf/core/utils/resizer";
import staticImage from "./path/to/static-image.png";
<img src={resizerImageUrl(staticImage, width, height, params)}/>
QR code generator
Helper function for qr code generator.
https://gitlab.uxf.cz/uxf-internal-projects/qr#qr-code-generator
import { qrCodeUrl } from "@uxf/core/qr";
qrCodeUrl("https://www.uxf.cz", { width: 200, margin: 5, errorCorrectionLevel: "H" });
Cookie
- Cookie options
secure?: boolean;
httpOnly?: boolean;
path?: string;
import { Cookie } from "@uxf/core/cookie";
const cookie = Cookie.create();
const cookie = Cookie.create(ctx);
cookie.has("cookie-name");
cookie.get("cookie-name");
cookie.set("cookie-name", "value", , )
cookie.delete("cookie-name", );
Utils
adjustTextareaHeight
Dynamically adjusts the height of a <textarea>
based on its content and an optional number of rows.
Parameters
element
: The <textarea>
to adjust.rows
(optional): Minimum visible rows. Default is 4
.
Behavior
- Leverages MutationObserver API to measure content height.
- Adjusts height to fit content or the minimum height based on the
rows
parameter, calculated using line-height
and font-size
.
Usage
adjustTextareaHeight(textarea);
adjustTextareaHeight(textarea, 6);
In React component:
import { useIsomorphicLayoutEffect } from "@uxf/core-react/hooks/use-isomorphic-layout-effect";
import { isNotNil } from "@uxf/core/utils/is-not-nil";
useIsomorphicLayoutEffect(() => {
const textarea = textareaRef.current;
if (isNotNil(textarea)) {
return;
}
const cleanup = adjustTextareaHeight(textarea);
return () => cleanup();
}, []);
Note: Requires valid line-height
and font-size
styles for accurate sizing.
cx, cxa
It is our fork of clsx
library https://github.com/lukeed/clsx
We will mainly use cx
, which is fork of clsx/lite
– it accepts ONLY string values! Any non-string arguments are ignored!
import { cx } from "@uxf/core/utils/cx";
cx("hello", true && "foo", false && "bar");
cx({ foo: true });
The cxa
function is full fork of clsx
and can take any number of arguments, each of which can be an Object, Array, Boolean, or String.
Important: Any falsy values are discarded! Standalone Boolean values are discarded as well.
import { cxa } from "@uxf/core/utils/cxa";
cxa(true, false, "", null, undefined, 0, NaN);
cxa("foo", true && "bar", "baz");
cxa({ foo:true, bar:false, baz:isTrue() });
cxa({ foo:true }, { bar:false }, null, { "--foobar":"hello" });
cxa(["foo", 0, false, "bar"]);
cxa(["foo"], ["", 0, false, "bar"], [["baz", [["hello"], "there"]]]);
cxa("foo", [1 && "bar", { baz:false, bat:null }, ["hello", ["world"]]], "cya");
downloadFile
Intended as only way to programmatically download file if there is no option to use native anchor with download
html attribute (eg. in form submit events).
import { downloadFile } from "@uxf/core/utils/download-file";
import { FormEventHandler } from "react";
const submitHandler: FormEventHandler<HTMLFormElement> = () => {
downloadFile("https://example.com/file", "file.txt")
};
formatBytes
Appends suitable unit to the byte value of data size.
formatBytes(17.5 * 1024);
assertNever
Checks that value is always type "never".
switch(value) {
case "a":
return "A";
case "b":
return "B";
default:
return assertNever(value);
}
Validators
import { Validator } from "@uxf/core";
Validator.isEmail("...");
Validator.isPhone("...");