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
!!! Required @uxf/resizer version >= 2.3.2
which supported quality
parameter.
[
{
"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"
}
]
import {resizerImageUrl} from "@uxf/core/utils/resizer";
<img src={resizerImageUrl(file, width, height, params)}/>
import {resizerImageUrl} from "@uxf/core/utils/resizer";
import staticImage from "./path/to/static-image.png";
<img src={resizerImageUrl(staticImage, width, height, params)}/>
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" });
secure?: boolean;
httpOnly?: boolean;
path?: string;
import { Cookie } from "@uxf/core/cookie";
// on client
const cookie = Cookie.create();
// in getInitialProps
const cookie = Cookie.create(ctx);
cookie.has("cookie-name");
cookie.get("cookie-name");
cookie.set("cookie-name", "value", /* ttl in seconds (optional) */, /* options (optional) */)
cookie.delete("cookie-name", /* options (optional) */);
Dynamically adjusts the height of a <textarea>
based on its content and an optional number of rows.
element
: The <textarea>
to adjust.rows
(optional): Minimum visible rows. Default is 4
.rows
parameter, calculated using line-height
and font-size
.adjustTextareaHeight(textarea); // Adjusts height (min 4 rows)
adjustTextareaHeight(textarea, 6); // With 6-row minimum
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
andfont-size
styles for accurate sizing.
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";
// string
cx("hello", true && "foo", false && "bar");
// => "hello foo"
// NOTE: Any non-string input(s) ignored
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);
//=> ""
// Strings (variadic)
cxa("foo", true && "bar", "baz");
//=> "foo bar baz"
// Objects
cxa({ foo:true, bar:false, baz:isTrue() });
//=> "foo baz"
// Objects (variadic)
cxa({ foo:true }, { bar:false }, null, { "--foobar":"hello" });
//=> "foo --foobar"
// Arrays
cxa(["foo", 0, false, "bar"]);
//=> "foo bar"
// Arrays (variadic)
cxa(["foo"], ["", 0, false, "bar"], [["baz", [["hello"], "there"]]]);
//=> "foo bar baz hello there"
// Kitchen sink (with nesting)
cxa("foo", [1 && "bar", { baz:false, bat:null }, ["hello", ["world"]]], "cya");
//=> "foo bar hello world cya"
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")
};
Escapes all double quotes ("
) in a string by replacing them with \"
.
import { escapeQuotes } from "@uxf/core/utils/escape-quotes";
escapeQuotes('The "quick" fox');
// Output: The \"quick\" fox
Appends suitable unit to the byte value of data size.
formatBytes(17.5 * 1024);
//=> "17.5 kB"
Checks that value is always type "never".
switch(value) {
case "a":
return "A";
case "b":
return "B";
default:
return assertNever(value);
}
import { Validator } from "@uxf/core";
Validator.isEmail("...");
Validator.isPhone("...");