@rvx/ui 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/theme.d.ts +10 -0
- package/dist/components/button.js +3 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.d.ts +1 -0
- package/dist/components/card.js +6 -3
- package/dist/components/card.js.map +1 -1
- package/dist/components/checkbox.js +6 -6
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/collapse.d.ts +16 -2
- package/dist/components/collapse.js +85 -4
- package/dist/components/collapse.js.map +1 -1
- package/dist/components/column.d.ts +1 -0
- package/dist/components/column.js +1 -0
- package/dist/components/column.js.map +1 -1
- package/dist/components/dialog.d.ts +1 -2
- package/dist/components/dialog.js +3 -5
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dropdown-input.js +2 -2
- package/dist/components/dropdown-input.js.map +1 -1
- package/dist/components/dropdown.js +2 -2
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/label.js.map +1 -1
- package/dist/components/link.js +2 -1
- package/dist/components/link.js.map +1 -1
- package/dist/components/nav-list.js +2 -1
- package/dist/components/nav-list.js.map +1 -1
- package/dist/components/popout.d.ts +1 -2
- package/dist/components/popout.js +1 -2
- package/dist/components/popout.js.map +1 -1
- package/dist/components/popover.js +1 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio-buttons.js +11 -10
- package/dist/components/radio-buttons.js.map +1 -1
- package/dist/components/slider.js +1 -2
- package/dist/components/slider.js.map +1 -1
- package/dist/components/tabs.d.ts +10 -0
- package/dist/components/tabs.js +31 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/text-input.js +5 -4
- package/dist/components/text-input.js.map +1 -1
- package/dist/components/validation-rules.d.ts +11 -0
- package/dist/components/validation-rules.js +37 -0
- package/dist/components/validation-rules.js.map +1 -0
- package/dist/components/validation.d.ts +53 -77
- package/dist/components/validation.js +117 -95
- package/dist/components/validation.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/theme.module.css +75 -0
- package/dist/theme.module.css.map +1 -1
- package/package.json +3 -3
- package/src/common/theme.tsx +11 -0
- package/src/components/button.tsx +3 -2
- package/src/components/card.tsx +10 -5
- package/src/components/checkbox.tsx +6 -6
- package/src/components/collapse.tsx +127 -5
- package/src/components/column.tsx +2 -0
- package/src/components/dialog.tsx +3 -5
- package/src/components/dropdown-input.tsx +2 -2
- package/src/components/dropdown.tsx +2 -2
- package/src/components/label.tsx +1 -3
- package/src/components/link.tsx +2 -1
- package/src/components/nav-list.tsx +2 -1
- package/src/components/popout.tsx +1 -2
- package/src/components/popover.tsx +1 -2
- package/src/components/radio-buttons.tsx +21 -20
- package/src/components/slider.tsx +1 -2
- package/src/components/tabs.tsx +67 -0
- package/src/components/text-input.tsx +5 -4
- package/src/components/validation-rules.tsx +50 -0
- package/src/components/validation.tsx +175 -177
- package/src/index.tsx +2 -3
- package/src/theme/base.scss +7 -0
- package/src/theme/components/card.scss +4 -1
- package/src/theme/components/checkbox.scss +5 -0
- package/src/theme/components/column.scss +5 -0
- package/src/theme/components/radio-buttons.scss +5 -0
- package/src/theme/components/slider.scss +1 -0
- package/src/theme/components/tabs.scss +72 -0
- package/src/theme/theme.scss +1 -0
- package/dist/common/debounce.d.ts +0 -12
- package/dist/common/debounce.js +0 -23
- package/dist/common/debounce.js.map +0 -1
- package/dist/common/parsers.d.ts +0 -88
- package/dist/common/parsers.js +0 -62
- package/dist/common/parsers.js.map +0 -1
- package/dist/common/trim.d.ts +0 -12
- package/dist/common/trim.js +0 -16
- package/dist/common/trim.js.map +0 -1
- package/src/common/debounce.tsx +0 -36
- package/src/common/parsers.tsx +0 -167
- package/src/common/trim.tsx +0 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAA0B,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAc,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "rvx/jsx-runtime";
|
|
2
|
-
import { For, get, map,
|
|
2
|
+
import { For, get, map, Signal, uniqueId } from "rvx";
|
|
3
3
|
import { isPending } from "rvx/async";
|
|
4
|
+
import { optionalString, string } from "rvx/convert";
|
|
4
5
|
import { THEME } from "../common/theme.js";
|
|
5
6
|
import { Text } from "./text.js";
|
|
6
|
-
import {
|
|
7
|
-
import { uniqueId } from "rvx/id";
|
|
7
|
+
import { closestValidator } from "./validation.js";
|
|
8
8
|
export function RadioButtons(props) {
|
|
9
9
|
const group = uniqueId();
|
|
10
10
|
const theme = THEME.current;
|
|
11
11
|
const disabled = props.value instanceof Signal
|
|
12
12
|
? () => isPending() || get(props.disabled)
|
|
13
13
|
: true;
|
|
14
|
-
const validator = props.value instanceof Signal ?
|
|
14
|
+
const validator = props.value instanceof Signal ? closestValidator(props.value) : undefined;
|
|
15
15
|
return _jsx("div", { role: "radiogroup", id: props.id, class: [
|
|
16
16
|
theme?.radio_buttons,
|
|
17
17
|
props.class,
|
|
18
|
-
], style: props.style, "aria-readonly": string(!(props.options instanceof Signal)), "aria-invalid": validator ? optionalString(validator.invalid) : undefined, "aria-errormessage": validator ? validator.
|
|
18
|
+
], style: props.style, "aria-readonly": string(!(props.options instanceof Signal)), "aria-invalid": validator ? optionalString(validator.invalid) : undefined, "aria-errormessage": validator ? validator.messageIds : undefined, "aria-label": props["aria-label"], "aria-labelledby": props["aria-labelledby"], children: _jsx(For, { each: props.options, children: (option, index) => {
|
|
19
19
|
const id = uniqueId();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const input = _jsx("input", { id: id, type: "radio", class: theme?.radio_button_input, name: group, value: id, disabled: disabled, autofocus: () => get(props.autofocus) && index() === 0, "prop:checked": map(props.value, x => x === option.value), "on:input": () => {
|
|
21
|
+
if (props.value instanceof Signal) {
|
|
22
|
+
props.value.value = option.value;
|
|
23
|
+
}
|
|
24
|
+
} });
|
|
25
|
+
return _jsxs("label", { for: id, class: theme?.radio_button_label, children: [theme?.radio_button_padding ? _jsx("div", { class: theme.radio_button_padding, children: input }) : input, _jsx(Text, { class: theme?.radio_button_content, children: option.label })] });
|
|
25
26
|
} }) });
|
|
26
27
|
}
|
|
27
28
|
//# sourceMappingURL=radio-buttons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio-buttons.js","sourceRoot":"","sources":["../../src/components/radio-buttons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"radio-buttons.js","sourceRoot":"","sources":["../../src/components/radio-buttons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAc,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOnD,MAAM,UAAU,YAAY,CAAI,KAc/B;IACA,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,YAAY,MAAM;QAC7C,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC;IAER,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,OAAO,cACN,IAAI,EAAC,YAAY,EACjB,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,KAAK,EAAE;YACN,KAAK,EAAE,aAAa;YACpB,KAAK,CAAC,KAAK;SACX,EACD,KAAK,EAAE,KAAK,CAAC,KAAK,mBACH,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,MAAM,CAAC,CAAC,kBAC3C,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,uBACpD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,gBACnD,KAAK,CAAC,YAAY,CAAC,qBACd,KAAK,CAAC,iBAAiB,CAAC,YAEzC,KAAC,GAAG,IAAC,IAAI,EAAE,KAAK,CAAC,OAAO,YACtB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAClB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,gBACb,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAChC,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,EAAE,EACT,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,KAAK,CAAC,kBACxC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,cAC7C,GAAG,EAAE;wBACd,IAAI,KAAK,CAAC,KAAK,YAAY,MAAM,EAAE,CAAC;4BACnC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;wBAClC,CAAC;oBACF,CAAC,GACA,CAAC;gBAEH,OAAO,iBACN,GAAG,EAAE,EAAE,EACP,KAAK,EAAE,KAAK,EAAE,kBAAkB,aAE/B,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,cAAK,KAAK,EAAE,KAAK,CAAC,oBAAoB,YAAG,KAAK,GAAO,CAAC,CAAC,CAAC,KAAK,EAC5F,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,oBAAoB,YACtC,MAAM,CAAC,KAAK,GACP,IACA,CAAC;YACV,CAAC,GACI,GACD,CAAC;AACR,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "rvx/jsx-runtime";
|
|
2
|
-
import { map, Show, Signal } from "rvx";
|
|
3
|
-
import { uniqueId } from "rvx/id";
|
|
2
|
+
import { map, Show, Signal, uniqueId } from "rvx";
|
|
4
3
|
import { THEME } from "../common/theme.js";
|
|
5
4
|
export function Slider(props) {
|
|
6
5
|
const theme = THEME.current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAc,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAc,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,UAAU,MAAM,CAAC,KAQtB;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAE5B,MAAM,KAAK,GAAG,gBACb,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EACpC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EACtC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,gBAC5B,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,cACzC,GAAG,EAAE;YACd,IAAI,KAAK,CAAC,KAAK,YAAY,MAAM,EAAE,CAAC;gBACnC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;QACF,CAAC,EACD,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAC9C,CAAC;IAEvB,OAAO,eACN,KAAK,EAAE,KAAK,EAAE,WAAW,aAExB,KAAK,EAEN,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,OAAO,YACvB,OAAO,CAAC,EAAE,CAAC,mBAAU,EAAE,EAAE,QAAQ,YAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAQ,KAAK,EAAE,MAAM,GAAI,CAAC,GACvC,GACL,EAEN,KAAK,CAAC,QAAQ,IACV,CAAC;AACR,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,IAAY;IACnE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACf,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Component, Expression, Signal } from "rvx";
|
|
2
|
+
export interface Tab {
|
|
3
|
+
label: Component;
|
|
4
|
+
content: Component;
|
|
5
|
+
}
|
|
6
|
+
export declare function Tabs(props: {
|
|
7
|
+
tabs: Expression<Iterable<Tab>>;
|
|
8
|
+
selected?: Signal<Tab | undefined>;
|
|
9
|
+
padded?: Expression<boolean | undefined>;
|
|
10
|
+
}): unknown;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "rvx/jsx-runtime";
|
|
2
|
+
import { $, For, get, map, Show, uniqueIdFor, watch } from "rvx";
|
|
3
|
+
import { string } from "rvx/convert";
|
|
4
|
+
import { THEME } from "../common/theme.js";
|
|
5
|
+
export function Tabs(props) {
|
|
6
|
+
const theme = THEME.current;
|
|
7
|
+
const selected = props.selected ?? $(undefined);
|
|
8
|
+
watch(selected, current => {
|
|
9
|
+
if (current === undefined) {
|
|
10
|
+
for (const tab of get(props.tabs)) {
|
|
11
|
+
selected.value = tab;
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return _jsxs(_Fragment, { children: [_jsx("div", { role: "tablist", class: [
|
|
17
|
+
theme?.tab_list,
|
|
18
|
+
map(props.padded, padded => padded ? theme?.tab_list_padded : undefined),
|
|
19
|
+
], children: _jsx(For, { each: props.tabs, children: tab => _jsx("button", { role: "tab", class: [
|
|
20
|
+
theme?.tab_handle,
|
|
21
|
+
() => selected.value === tab ? theme?.tab_handle_current : undefined,
|
|
22
|
+
], "aria-selected": string(() => selected.value === tab), "aria-controls": uniqueIdFor(tab), "on:click": event => {
|
|
23
|
+
event.stopImmediatePropagation();
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
selected.value = tab;
|
|
26
|
+
}, children: tab.label() }) }) }), _jsx(Show, { when: selected, children: tab => _jsx("div", { role: "tabpanel", id: uniqueIdFor(tab), class: [
|
|
27
|
+
theme?.tab_panel,
|
|
28
|
+
map(props.padded, padded => padded ? theme?.tab_panel_padded : undefined),
|
|
29
|
+
], children: tab.content() }) })] });
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAU,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAO3C,MAAM,UAAU,IAAI,CAAC,KAIpB;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhD,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;gBACrB,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,8BACN,cACC,IAAI,EAAC,SAAS,EACd,KAAK,EAAE;oBACN,KAAK,EAAE,QAAQ;oBACf,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;iBACxE,YAED,KAAC,GAAG,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YACnB,GAAG,CAAC,EAAE,CAAC,iBACP,IAAI,EAAC,KAAK,EACV,KAAK,EAAE;4BACN,KAAK,EAAE,UAAU;4BACjB,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS;yBACpE,mBACc,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,mBACpC,WAAW,CAAC,GAAG,CAAC,cACrB,KAAK,CAAC,EAAE;4BACjB,KAAK,CAAC,wBAAwB,EAAE,CAAC;4BACjC,KAAK,CAAC,cAAc,EAAE,CAAC;4BACvB,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;wBACtB,CAAC,YAEA,GAAG,CAAC,KAAK,EAAE,GACJ,GACJ,GACD,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,YAClB,GAAG,CAAC,EAAE,CAAC,cACP,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,EACpB,KAAK,EAAE;wBACN,KAAK,EAAE,SAAS;wBAChB,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;qBACzE,YAEA,GAAG,CAAC,OAAO,EAAE,GACT,GACA,IACL,CAAC;AACL,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "rvx/jsx-runtime";
|
|
2
|
-
import { get,
|
|
2
|
+
import { get, Signal } from "rvx";
|
|
3
3
|
import { isPending, waitFor } from "rvx/async";
|
|
4
|
+
import { optionalString } from "rvx/convert";
|
|
4
5
|
import { keyFor } from "../common/events.js";
|
|
5
6
|
import { THEME } from "../common/theme.js";
|
|
6
|
-
import {
|
|
7
|
+
import { closestValidator } from "./validation.js";
|
|
7
8
|
export function TextInput(props) {
|
|
8
9
|
const theme = THEME.current;
|
|
9
10
|
const disabled = () => isPending() || get(props.disabled);
|
|
10
|
-
const validator = props.value instanceof Signal ?
|
|
11
|
+
const validator = props.value instanceof Signal ? closestValidator(props.value) : undefined;
|
|
11
12
|
const InputTag = props.multiline ? "textarea" : "input";
|
|
12
13
|
const input = _jsx(InputTag, { type: props.multiline ? undefined : (() => get(props.type) ?? "text"), rows: props.multiline ? props.rows : undefined, wrap: props.multiline ? props.wrap : undefined, disabled: disabled, class: [
|
|
13
14
|
theme?.text_input,
|
|
@@ -29,7 +30,7 @@ export function TextInput(props) {
|
|
|
29
30
|
waitFor(result);
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
}, "aria-label": props["aria-label"], "aria-labelledby": props["aria-labelledby"], "aria-invalid": validator ? optionalString(validator.invalid) : undefined, "aria-errormessage": validator ? validator.
|
|
33
|
+
}, "aria-label": props["aria-label"], "aria-labelledby": props["aria-labelledby"], "aria-invalid": validator ? optionalString(validator.invalid) : undefined, "aria-errormessage": validator ? validator.messageIds : undefined });
|
|
33
34
|
return input;
|
|
34
35
|
}
|
|
35
36
|
//# sourceMappingURL=text-input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-input.js","sourceRoot":"","sources":["../../src/components/text-input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA0B,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"text-input.js","sourceRoot":"","sources":["../../src/components/text-input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Component, Expression, Signal } from "rvx";
|
|
2
|
+
export declare function rule<T>(source: Signal<T>, condition: (value: T) => boolean, message: Component): Signal<T>;
|
|
3
|
+
export interface IntParserOptions {
|
|
4
|
+
/** The validation message for invalid formats. */
|
|
5
|
+
format: Component;
|
|
6
|
+
/** The validation message for an out of range value. Defaults to the format message. */
|
|
7
|
+
range?: Component;
|
|
8
|
+
min?: Expression<number>;
|
|
9
|
+
max?: Expression<number>;
|
|
10
|
+
}
|
|
11
|
+
export declare function intParser(source: Signal<number>, options: IntParserOptions): Signal<string>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { $, get, watchUpdates } from "rvx";
|
|
2
|
+
import { Validator } from "./validation.js";
|
|
3
|
+
export function rule(source, condition, message) {
|
|
4
|
+
Validator.get(source).prependRule(() => {
|
|
5
|
+
if (!condition(source.value)) {
|
|
6
|
+
return [message];
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
return source;
|
|
10
|
+
}
|
|
11
|
+
export function intParser(source, options) {
|
|
12
|
+
const input = $(String(source.value), source);
|
|
13
|
+
const messages = $([]);
|
|
14
|
+
Validator.get(source).prependRule(() => messages.value);
|
|
15
|
+
const min = options.min ?? Number.MIN_SAFE_INTEGER;
|
|
16
|
+
const max = options.max ?? Number.MAX_SAFE_INTEGER;
|
|
17
|
+
watchUpdates(source, value => {
|
|
18
|
+
input.value = String(value);
|
|
19
|
+
});
|
|
20
|
+
watchUpdates(input, value => {
|
|
21
|
+
if (/^-?\d+$/.test(value)) {
|
|
22
|
+
const num = Number.parseInt(value);
|
|
23
|
+
if (Number.isSafeInteger(num) && num >= get(min) && num <= get(max)) {
|
|
24
|
+
messages.value = [];
|
|
25
|
+
source.value = num;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
messages.value = [options.range ?? options.format];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
messages.value = [options.format];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return input;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=validation-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-rules.js","sourceRoot":"","sources":["../../src/components/validation-rules.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAyB,GAAG,EAAU,YAAY,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,IAAI,CAAI,MAAiB,EAAE,SAAgC,EAAE,OAAkB;IAC9F,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;QAClB,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AACf,CAAC;AAWD,MAAM,UAAU,SAAS,CAAC,MAAsB,EAAE,OAAyB;IAC1E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,CAAC,CAAc,EAAE,CAAC,CAAC;IACpC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAEnD,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;QAC5B,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC3B,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACP,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;QACF,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -1,110 +1,86 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Emitter, Event } from "rvx/event";
|
|
3
|
-
/**
|
|
4
|
-
* Context for validation options used by new validators.
|
|
5
|
-
*/
|
|
1
|
+
import { Component, Context, Signal } from "rvx";
|
|
6
2
|
export declare const VALIDATION: Context<ValidationOptions | undefined>;
|
|
7
|
-
|
|
8
|
-
* Defines when accessed signals trigger automatic validation.
|
|
9
|
-
*
|
|
10
|
-
* + **if-validated** - **Default.** Validate if validation did run before.
|
|
11
|
-
* + **if-invalid** - Validate if currently invalid.
|
|
12
|
-
* + **never** - Never validate automatically.
|
|
13
|
-
*/
|
|
14
|
-
export type ValidationSignalTrigger = "if-validated" | "if-invalid" | "never";
|
|
3
|
+
export type ValidationTrigger = "if-validated" | "if-invalid" | "never";
|
|
15
4
|
export interface ValidationOptions {
|
|
16
|
-
|
|
5
|
+
trigger?: ValidationTrigger;
|
|
6
|
+
}
|
|
7
|
+
export interface ValidationRule {
|
|
8
|
+
/**
|
|
9
|
+
* Validate this rule.
|
|
10
|
+
*
|
|
11
|
+
* Immediately accessed signals may be tracked by the caller to trigger automatic re-validation when updated.
|
|
12
|
+
*
|
|
13
|
+
* @param abortSignal An optional abort signal to abort validaiton if supported.
|
|
14
|
+
* @returns An array of validation message components. If empty, this rule is considered valid.
|
|
15
|
+
*/
|
|
16
|
+
(abortSignal?: AbortSignal): Component[] | undefined | Promise<Component[] | undefined>;
|
|
17
|
+
}
|
|
18
|
+
export declare class ValidationRuleEntry {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(rule: ValidationRule, notify: () => void);
|
|
21
|
+
get messages(): Component[];
|
|
22
|
+
validate(abortSignal: AbortSignal | undefined, sideEffect: boolean): Promise<boolean>;
|
|
23
|
+
reset(): void;
|
|
17
24
|
}
|
|
18
25
|
export declare class Validator {
|
|
19
26
|
#private;
|
|
20
27
|
constructor();
|
|
28
|
+
validate(abortSignal?: AbortSignal): Promise<boolean>;
|
|
21
29
|
/**
|
|
22
|
-
* Reactively
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* An expression to get a space separated list of error message ids.
|
|
27
|
-
*/
|
|
28
|
-
errorMessageIds: () => string;
|
|
29
|
-
/**
|
|
30
|
-
* An expression to check if this validator is in an invalid state.
|
|
30
|
+
* Reactively check if this validator is in an invalid state.
|
|
31
|
+
*
|
|
32
|
+
* @returns `true` if invalid.
|
|
31
33
|
*/
|
|
32
34
|
invalid: () => boolean;
|
|
33
35
|
/**
|
|
34
|
-
*
|
|
36
|
+
* Reactively get a space separated list of message ids.
|
|
35
37
|
*/
|
|
36
|
-
|
|
38
|
+
messageIds: () => string;
|
|
39
|
+
get rules(): ValidationRuleEntry[];
|
|
37
40
|
/**
|
|
38
|
-
*
|
|
41
|
+
* Append a rule to this validator until the current lifecycle is disposed.
|
|
39
42
|
*/
|
|
40
43
|
appendRule(rule: ValidationRule): void;
|
|
41
44
|
/**
|
|
42
|
-
*
|
|
43
|
-
*/
|
|
44
|
-
attach(target: object): void;
|
|
45
|
-
/**
|
|
46
|
-
* Validate using the currently attached rules.
|
|
47
|
-
*/
|
|
48
|
-
validate(signal?: AbortSignal): Promise<boolean>;
|
|
49
|
-
/**
|
|
50
|
-
* Trigger validation as a side effect.
|
|
45
|
+
* Prepend a rule to this validator until the current lifecycle is disposed.
|
|
51
46
|
*/
|
|
52
|
-
|
|
47
|
+
prependRule(rule: ValidationRule): void;
|
|
53
48
|
/**
|
|
54
|
-
*
|
|
49
|
+
* Attach this validator to the specified target.
|
|
50
|
+
*
|
|
51
|
+
* This will overwrite existing validators on the target.
|
|
55
52
|
*/
|
|
56
|
-
|
|
53
|
+
attach(target: Signal<unknown>): void;
|
|
57
54
|
/**
|
|
58
|
-
*
|
|
55
|
+
* Find the {@link closestValidator closest validator} or {@link Validator.prototype.attach attach} a new one to the target's {@link Signal.prototype.root root}.
|
|
59
56
|
*/
|
|
60
|
-
static
|
|
57
|
+
static get(target: Signal<unknown>): Validator;
|
|
61
58
|
}
|
|
62
59
|
/**
|
|
63
60
|
* Get the validator attached to the specified target.
|
|
61
|
+
*
|
|
62
|
+
* @param target The target.
|
|
63
|
+
* @returns The validator or `undefined` if there is none.
|
|
64
64
|
*/
|
|
65
|
-
export declare function validatorFor(target:
|
|
66
|
-
export interface ValidationRule {
|
|
67
|
-
validate(signal?: AbortSignal): boolean | Promise<boolean>;
|
|
68
|
-
message: unknown;
|
|
69
|
-
}
|
|
70
|
-
export declare class ValidationRuleEntry {
|
|
71
|
-
readonly id: string;
|
|
72
|
-
readonly visible: Signal<boolean>;
|
|
73
|
-
readonly alert: Emitter<[]>;
|
|
74
|
-
readonly message: unknown;
|
|
75
|
-
readonly validate: ValidationRule["validate"];
|
|
76
|
-
readonly updated: TriggerPipe;
|
|
77
|
-
constructor(rule: ValidationRule, updated: TriggerPipe);
|
|
78
|
-
}
|
|
79
|
-
export interface ValidateFn<T> {
|
|
80
|
-
(value: T, signal?: AbortSignal): boolean | Promise<boolean>;
|
|
81
|
-
}
|
|
65
|
+
export declare function validatorFor(target: Signal<unknown>): Validator | undefined;
|
|
82
66
|
/**
|
|
83
|
-
*
|
|
67
|
+
* Find the closest validator attached to the specified target or any of it's {@link Signal.prototype.source sources}.
|
|
84
68
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* @param target The signal to attach the validator to.
|
|
88
|
-
* @param validate A function to validate the current value. Immediately accessed signals may trigger re-validation when updated.
|
|
89
|
-
* @param message The validation message to show when invalid.
|
|
90
|
-
* @returns The target itself.
|
|
69
|
+
* @param target The target.
|
|
70
|
+
* @returns The validator or `undefined` if there is none.
|
|
91
71
|
*/
|
|
92
|
-
export declare function
|
|
72
|
+
export declare function closestValidator(target: Signal<unknown>): Validator | undefined;
|
|
93
73
|
/**
|
|
94
|
-
* Validate
|
|
74
|
+
* Validate the specified targets in parallel.
|
|
75
|
+
*
|
|
76
|
+
* @param targets The targets that have attached validators.
|
|
77
|
+
* @param abortSignal An optional abort signal to abort validation if supported.
|
|
78
|
+
* @returns `true` if valid.
|
|
95
79
|
*/
|
|
96
|
-
export declare function validate(
|
|
80
|
+
export declare function validate(targets: Signal<unknown>[], abortSignal?: AbortSignal): Promise<boolean>;
|
|
97
81
|
export declare function ValidationMessage(props: {
|
|
98
|
-
|
|
99
|
-
alert?: Event<[]>;
|
|
100
|
-
class?: ClassValue;
|
|
101
|
-
style?: StyleValue;
|
|
102
|
-
id?: Expression<string | undefined>;
|
|
103
|
-
children?: unknown;
|
|
82
|
+
children: unknown;
|
|
104
83
|
}): unknown;
|
|
105
|
-
/**
|
|
106
|
-
* Render validation messages for the validator attached to a specific target.
|
|
107
|
-
*/
|
|
108
84
|
export declare function ValidationMessages(props: {
|
|
109
|
-
for:
|
|
85
|
+
for: Signal<unknown> | Validator;
|
|
110
86
|
}): unknown;
|