sigpro-ui 1.0.6

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.
Files changed (43) hide show
  1. package/Readme.md +146 -0
  2. package/dist/sigpro-ui.cjs +1677 -0
  3. package/dist/sigpro-ui.esm.js +1621 -0
  4. package/dist/sigpro-ui.umd.js +1680 -0
  5. package/dist/sigpro-ui.umd.min.js +1 -0
  6. package/index.js +40 -0
  7. package/package.json +52 -0
  8. package/src/components/Accordion.js +24 -0
  9. package/src/components/Alert.js +50 -0
  10. package/src/components/Autocomplete.js +95 -0
  11. package/src/components/Badge.js +6 -0
  12. package/src/components/Button.js +39 -0
  13. package/src/components/Checkbox.js +21 -0
  14. package/src/components/Colorpicker.js +81 -0
  15. package/src/components/Datepicker.js +252 -0
  16. package/src/components/Drawer.js +18 -0
  17. package/src/components/Dropdown.js +37 -0
  18. package/src/components/Fab.js +51 -0
  19. package/src/components/Fieldset.js +19 -0
  20. package/src/components/Fileinput.js +113 -0
  21. package/src/components/Indicator.js +9 -0
  22. package/src/components/Input.js +77 -0
  23. package/src/components/List.js +18 -0
  24. package/src/components/Loading.js +13 -0
  25. package/src/components/Menu.js +25 -0
  26. package/src/components/Modal.js +31 -0
  27. package/src/components/Navbar.js +6 -0
  28. package/src/components/Radio.js +25 -0
  29. package/src/components/Range.js +24 -0
  30. package/src/components/Rating.js +34 -0
  31. package/src/components/Select.js +36 -0
  32. package/src/components/Stack.js +6 -0
  33. package/src/components/Stat.js +11 -0
  34. package/src/components/Swap.js +13 -0
  35. package/src/components/Table.js +60 -0
  36. package/src/components/Tabs.js +46 -0
  37. package/src/components/Timeline.js +52 -0
  38. package/src/components/Toast.js +63 -0
  39. package/src/components/Tooltip.js +6 -0
  40. package/src/components/index.js +110 -0
  41. package/src/core/i18n.js +26 -0
  42. package/src/core/icons.js +17 -0
  43. package/src/core/utils.js +5 -0
@@ -0,0 +1,25 @@
1
+ import { $html } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+
4
+ /** RADIO */
5
+ export const Radio = (props) => {
6
+ const { label, tooltip, value, ...rest } = props;
7
+
8
+ const radioEl = $html("input", {
9
+ ...rest,
10
+ type: "radio",
11
+ class: joinClass("radio", props.class),
12
+ checked: () => val(value) === props.value,
13
+ disabled: () => val(props.disabled),
14
+ onclick: () => typeof value === "function" && value(props.value),
15
+ });
16
+
17
+ if (!label && !tooltip) return radioEl;
18
+
19
+ const layout = $html("label", { class: "label cursor-pointer justify-start gap-3" }, [
20
+ radioEl,
21
+ label ? $html("span", { class: "label-text" }, label) : null,
22
+ ]);
23
+
24
+ return tooltip ? $html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout;
25
+ };
@@ -0,0 +1,24 @@
1
+ import { $html } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+
4
+ /** RANGE */
5
+ export const Range = (props) => {
6
+ const { label, tooltip, value, ...rest } = props;
7
+
8
+ const rangeEl = $html("input", {
9
+ ...rest,
10
+ type: "range",
11
+ class: joinClass("range", props.class),
12
+ value: value,
13
+ disabled: () => val(props.disabled)
14
+ });
15
+
16
+ if (!label && !tooltip) return rangeEl;
17
+
18
+ const layout = $html("div", { class: "flex flex-col gap-2" }, [
19
+ label ? $html("span", { class: "label-text" }, label) : null,
20
+ rangeEl
21
+ ]);
22
+
23
+ return tooltip ? $html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout;
24
+ };
@@ -0,0 +1,34 @@
1
+ import { $html } from "sigpro";
2
+ import { val } from "../core/utils.js";
3
+
4
+ /** RATING */
5
+ export const Rating = (props) => {
6
+ const { value, count = 5, mask = "mask-star", readonly = false, ...rest } = props;
7
+
8
+ // Generamos un ID único para el grupo de radio buttons
9
+ const ratingGroup = `rating-${Math.random().toString(36).slice(2, 7)}`;
10
+
11
+ return $html(
12
+ "div",
13
+ {
14
+ ...rest,
15
+ class: () => `rating ${val(readonly) ? "pointer-events-none" : ""} ${props.class || ""}`,
16
+ },
17
+ Array.from({ length: val(count) }, (_, i) => {
18
+ const starValue = i + 1;
19
+
20
+ return $html("input", {
21
+ type: "radio",
22
+ name: ratingGroup,
23
+ class: `mask ${mask}`,
24
+ "aria-label": `${starValue} star`,
25
+ checked: () => Math.round(val(value)) === starValue,
26
+ onchange: () => {
27
+ if (!val(readonly) && typeof value === "function") {
28
+ value(starValue);
29
+ }
30
+ },
31
+ });
32
+ })
33
+ );
34
+ };
@@ -0,0 +1,36 @@
1
+ import { $html, $for } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+
4
+ /** SELECT */
5
+ export const Select = (props) => {
6
+ const { label, options, value, ...rest } = props;
7
+
8
+ const selectEl = $html(
9
+ "select",
10
+ {
11
+ ...rest,
12
+ class: joinClass("select select-bordered w-full", props.class),
13
+ value: value
14
+ },
15
+ $for(
16
+ () => val(options) || [],
17
+ (opt) =>
18
+ $html(
19
+ "option",
20
+ {
21
+ value: opt.value,
22
+ $selected: () => String(val(value)) === String(opt.value),
23
+ },
24
+ opt.label,
25
+ ),
26
+ (opt) => opt.value,
27
+ ),
28
+ );
29
+
30
+ if (!label) return selectEl;
31
+
32
+ return $html("label", { class: "fieldset-label flex flex-col gap-1" }, [
33
+ $html("span", {}, label),
34
+ selectEl
35
+ ]);
36
+ };
@@ -0,0 +1,6 @@
1
+ import { $html } from "sigpro";
2
+ import { joinClass } from "../core/utils.js";
3
+
4
+ /** STACK */
5
+ export const Stack = (props, children) =>
6
+ $html("div", { ...props, class: joinClass("stack", props.class) }, children);
@@ -0,0 +1,11 @@
1
+ import { $html } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+
4
+ /** STAT */
5
+ export const Stat = (props) =>
6
+ $html("div", { ...props, class: joinClass("stat", props.class) }, [
7
+ props.icon && $html("div", { class: "stat-figure text-secondary" }, props.icon),
8
+ props.label && $html("div", { class: "stat-title" }, props.label),
9
+ $html("div", { class: "stat-value" }, () => val(props.value) ?? props.value),
10
+ props.desc && $html("div", { class: "stat-desc" }, props.desc),
11
+ ]);
@@ -0,0 +1,13 @@
1
+ import { $html } from "sigpro";
2
+ import { joinClass } from "../core/utils.js";
3
+
4
+ /** SWAP */
5
+ export const Swap = (props) =>
6
+ $html("label", { class: joinClass("swap", props.class) }, [
7
+ $html("input", {
8
+ type: "checkbox",
9
+ checked: props.value
10
+ }),
11
+ $html("div", { class: "swap-on" }, props.on),
12
+ $html("div", { class: "swap-off" }, props.off),
13
+ ]);
@@ -0,0 +1,60 @@
1
+ import { $html, $for, $if } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+ import { tt } from "../core/i18n.js";
4
+
5
+ /** TABLE */
6
+ export const Table = (props) => {
7
+ const {
8
+ items = [],
9
+ columns = [],
10
+ keyFn,
11
+ zebra = false,
12
+ pinRows = false,
13
+ empty = tt("nodata")(),
14
+ ...rest
15
+ } = props;
16
+
17
+ const tableClass = () => joinClass(
18
+ "table",
19
+ `${val(zebra) ? "table-zebra" : ""} ${val(pinRows) ? "table-pin-rows" : ""} ${props.class || ""}`
20
+ );
21
+
22
+ return $html("div", { class: "overflow-x-auto w-full bg-base-100 rounded-box border border-base-300" }, [
23
+ $html("table", { ...rest, class: tableClass }, [
24
+ $html("thead", {}, [
25
+ $html("tr", {},
26
+ columns.map(col => $html("th", { class: col.class || "" }, col.label))
27
+ )
28
+ ]),
29
+ $html("tbody", {}, [
30
+ $for(items, (item, index) => {
31
+ return $html("tr", { class: "hover" },
32
+ columns.map(col => {
33
+ const cellContent = () => {
34
+ if (col.render) return col.render(item, index);
35
+ const value = item[col.key];
36
+ return val(value);
37
+ };
38
+ return $html("td", { class: col.class || "" }, [cellContent]);
39
+ })
40
+ );
41
+ }, keyFn || ((item, idx) => item.id || idx)),
42
+
43
+ $if(() => val(items).length === 0, () =>
44
+ $html("tr", {}, [
45
+ $html("td", { colspan: columns.length, class: "text-center p-10 opacity-50" }, [
46
+ val(empty)
47
+ ])
48
+ ])
49
+ )
50
+ ]),
51
+ $if(() => columns.some(c => c.footer), () =>
52
+ $html("tfoot", {}, [
53
+ $html("tr", {},
54
+ columns.map(col => $html("th", {}, col.footer || ""))
55
+ )
56
+ ])
57
+ )
58
+ ])
59
+ ]);
60
+ };
@@ -0,0 +1,46 @@
1
+ import { $html, $for } from "sigpro";
2
+ import { val, joinClass } from "../core/utils.js";
3
+
4
+ /** TABS */
5
+ export const Tabs = (props) => {
6
+ const { items, ...rest } = props;
7
+ const itemsSignal = typeof items === "function" ? items : () => items || [];
8
+
9
+ return $html("div", { ...rest, class: "flex flex-col gap-4 w-full" }, [
10
+ $html(
11
+ "div",
12
+ {
13
+ role: "tablist",
14
+ class: joinClass("tabs tabs-box", props.class),
15
+ },
16
+ $for(
17
+ itemsSignal,
18
+ (it) =>
19
+ $html(
20
+ "a",
21
+ {
22
+ role: "tab",
23
+ class: () => joinClass(
24
+ "tab",
25
+ val(it.active) && "tab-active",
26
+ val(it.disabled) && "tab-disabled",
27
+ it.tip && "tooltip"
28
+ ),
29
+ "data-tip": it.tip,
30
+ onclick: (e) => !val(it.disabled) && it.onclick?.(e),
31
+ },
32
+ it.label,
33
+ ),
34
+ (t) => t.label,
35
+ ),
36
+ ),
37
+ () => {
38
+ const active = itemsSignal().find((it) => val(it.active));
39
+ if (!active) return null;
40
+ const content = val(active.content);
41
+ return $html("div", { class: "p-4" }, [
42
+ typeof content === "function" ? content() : content
43
+ ]);
44
+ },
45
+ ]);
46
+ };
@@ -0,0 +1,52 @@
1
+ import { $html, $for } from "sigpro";
2
+ import { val } from "../core/utils.js";
3
+ import { iconInfo, iconSuccess, iconWarning, iconError } from "../core/icons.js";
4
+
5
+ /** TIMELINE */
6
+ export const Timeline = (props) => {
7
+ const { items = [], vertical = true, compact = false, ...rest } = props;
8
+
9
+ const icons = {
10
+ info: iconInfo,
11
+ success: iconSuccess,
12
+ warning: iconWarning,
13
+ error: iconError,
14
+ };
15
+
16
+ return $html(
17
+ "ul",
18
+ {
19
+ ...rest,
20
+ class: () =>
21
+ `timeline ${val(vertical) ? "timeline-vertical" : "timeline-horizontal"} ${
22
+ val(compact) ? "timeline-compact" : ""
23
+ } ${props.class || ""}`,
24
+ },
25
+ [
26
+ $for(
27
+ items,
28
+ (item, i) => {
29
+ const isFirst = i === 0;
30
+ const isLast = i === val(items).length - 1;
31
+ const itemType = item.type || "success";
32
+ const renderSlot = (content) => (typeof content === "function" ? content() : content);
33
+
34
+ return $html("li", { class: "flex-1" }, [
35
+ !isFirst ? $html("hr", { class: item.completed ? "bg-primary" : "" }) : null,
36
+ $html("div", { class: "timeline-start" }, [renderSlot(item.title)]),
37
+ $html("div", { class: "timeline-middle" }, [
38
+ $html("img", {
39
+ src: icons[itemType] || item.icon || icons.success,
40
+ class: "w-4 h-4 object-contain mx-1",
41
+ alt: itemType,
42
+ }),
43
+ ]),
44
+ $html("div", { class: "timeline-end timeline-box shadow-sm" }, [renderSlot(item.detail)]),
45
+ !isLast ? $html("hr", { class: item.completed ? "bg-primary" : "" }) : null,
46
+ ]);
47
+ },
48
+ (item, i) => item.id || i,
49
+ ),
50
+ ],
51
+ );
52
+ };
@@ -0,0 +1,63 @@
1
+ import { $html, $mount } from "sigpro";
2
+ import { Button } from "./Button.js";
3
+
4
+ /** TOAST (Imperative Function) */
5
+ export const Toast = (message, type = "alert-success", duration = 3500) => {
6
+ let container = document.getElementById("sigpro-toast-container");
7
+
8
+ // Crear el contenedor global si no existe
9
+ if (!container) {
10
+ container = $html("div", {
11
+ id: "sigpro-toast-container",
12
+ class: "fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none",
13
+ });
14
+ document.body.appendChild(container);
15
+ }
16
+
17
+ const toastHost = $html("div", { style: "display: contents" });
18
+ container.appendChild(toastHost);
19
+
20
+ let timeoutId;
21
+
22
+ const close = () => {
23
+ clearTimeout(timeoutId);
24
+ const el = toastHost.firstElementChild;
25
+ if (el && !el.classList.contains("opacity-0")) {
26
+ el.classList.add("translate-x-full", "opacity-0");
27
+ setTimeout(() => {
28
+ instance.destroy();
29
+ toastHost.remove();
30
+ // Limpiar el contenedor si ya no hay más toasts
31
+ if (!container.hasChildNodes()) container.remove();
32
+ }, 300);
33
+ } else {
34
+ instance.destroy();
35
+ toastHost.remove();
36
+ }
37
+ };
38
+
39
+ const ToastComponent = () => {
40
+ const el = $html(
41
+ "div",
42
+ {
43
+ class: `alert alert-soft ${type} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`,
44
+ },
45
+ [
46
+ $html("span", {}, [typeof message === "function" ? message() : message]),
47
+ Button({ class: "btn-xs btn-circle btn-ghost", onclick: close }, "✕")
48
+ ],
49
+ );
50
+
51
+ // Animación de entrada
52
+ requestAnimationFrame(() => el.classList.remove("translate-x-10", "opacity-0"));
53
+ return el;
54
+ };
55
+
56
+ const instance = $mount(ToastComponent, toastHost);
57
+
58
+ if (duration > 0) {
59
+ timeoutId = setTimeout(close, duration);
60
+ }
61
+
62
+ return close;
63
+ };
@@ -0,0 +1,6 @@
1
+ import { $html } from "sigpro";
2
+ import { joinClass } from "../core/utils.js";
3
+
4
+ /** TOOLTIP */
5
+ export const Tooltip = (props, children) =>
6
+ $html("div", { ...props, class: joinClass("tooltip", props.class), "data-tip": props.tip }, children);
@@ -0,0 +1,110 @@
1
+ import * as AccordionModule from './Accordion.js';
2
+ import * as AlertModule from './Alert.js';
3
+ import * as AutocompleteModule from './Autocomplete.js';
4
+ import * as BadgeModule from './Badge.js';
5
+ import * as ButtonModule from './Button.js';
6
+ import * as CheckboxModule from './Checkbox.js';
7
+ import * as ColorpickerModule from './Colorpicker.js';
8
+ import * as DatepickerModule from './Datepicker.js';
9
+ import * as DrawerModule from './Drawer.js';
10
+ import * as DropdownModule from './Dropdown.js';
11
+ import * as FabModule from './Fab.js';
12
+ import * as FieldsetModule from './Fieldset.js';
13
+ import * as FileinputModule from './Fileinput.js';
14
+ import * as IndicatorModule from './Indicator.js';
15
+ import * as InputModule from './Input.js';
16
+ import * as ListModule from './List.js';
17
+ import * as LoadingModule from './Loading.js';
18
+ import * as MenuModule from './Menu.js';
19
+ import * as ModalModule from './Modal.js';
20
+ import * as NavbarModule from './Navbar.js';
21
+ import * as RadioModule from './Radio.js';
22
+ import * as RangeModule from './Range.js';
23
+ import * as RatingModule from './Rating.js';
24
+ import * as SelectModule from './Select.js';
25
+ import * as StackModule from './Stack.js';
26
+ import * as StatModule from './Stat.js';
27
+ import * as SwapModule from './Swap.js';
28
+ import * as TableModule from './Table.js';
29
+ import * as TabsModule from './Tabs.js';
30
+ import * as TimelineModule from './Timeline.js';
31
+ import * as ToastModule from './Toast.js';
32
+ import * as TooltipModule from './Tooltip.js';
33
+
34
+ export * from './Accordion.js';
35
+ export * from './Alert.js';
36
+ export * from './Autocomplete.js';
37
+ export * from './Badge.js';
38
+ export * from './Button.js';
39
+ export * from './Checkbox.js';
40
+ export * from './Colorpicker.js';
41
+ export * from './Datepicker.js';
42
+ export * from './Drawer.js';
43
+ export * from './Dropdown.js';
44
+ export * from "./Fab.js";
45
+ export * from './Fieldset.js';
46
+ export * from './Fileinput.js';
47
+ export * from './Indicator.js';
48
+ export * from './Input.js';
49
+ export * from './List.js';
50
+ export * from './Loading.js';
51
+ export * from './Menu.js';
52
+ export * from './Modal.js';
53
+ export * from './Navbar.js';
54
+ export * from './Radio.js';
55
+ export * from './Range.js';
56
+ export * from './Rating.js';
57
+ export * from './Select.js';
58
+ export * from './Stack.js';
59
+ export * from './Stat.js';
60
+ export * from './Swap.js';
61
+ export * from './Table.js';
62
+ export * from './Tabs.js';
63
+ export * from './Timeline.js';
64
+ export * from './Toast.js';
65
+ export * from './Tooltip.js';
66
+
67
+ const Components = {
68
+ ...AccordionModule,
69
+ ...AlertModule,
70
+ ...AutocompleteModule,
71
+ ...BadgeModule,
72
+ ...ButtonModule,
73
+ ...CheckboxModule,
74
+ ...ColorpickerModule,
75
+ ...DatepickerModule,
76
+ ...DrawerModule,
77
+ ...DropdownModule,
78
+ ...FabModule,
79
+ ...FieldsetModule,
80
+ ...FileinputModule,
81
+ ...IndicatorModule,
82
+ ...InputModule,
83
+ ...ListModule,
84
+ ...LoadingModule,
85
+ ...MenuModule,
86
+ ...ModalModule,
87
+ ...NavbarModule,
88
+ ...RadioModule,
89
+ ...RangeModule,
90
+ ...RatingModule,
91
+ ...SelectModule,
92
+ ...StackModule,
93
+ ...StatModule,
94
+ ...SwapModule,
95
+ ...TableModule,
96
+ ...TabsModule,
97
+ ...TimelineModule,
98
+ ...ToastModule,
99
+ ...TooltipModule
100
+ };
101
+
102
+ export default {
103
+ ...Components,
104
+ install: (target = window) => {
105
+ Object.entries(Components).forEach(([name, component]) => {
106
+ target[name] = component;
107
+ });
108
+ console.log("🚀 SigproUI");
109
+ }
110
+ };
@@ -0,0 +1,26 @@
1
+ import { $ } from "sigpro";
2
+
3
+ export const i18n = {
4
+ es: {
5
+ close: "Cerrar",
6
+ confirm: "Confirmar",
7
+ cancel: "Cancelar",
8
+ search: "Buscar...",
9
+ loading: "Cargando...",
10
+ nodata: "Sin datos"
11
+ },
12
+ en: {
13
+ close: "Close",
14
+ confirm: "Confirm",
15
+ cancel: "Cancel",
16
+ search: "Search...",
17
+ loading: "Loading...",
18
+ nodata: "No data"
19
+ }
20
+ };
21
+
22
+ export const currentLocale = $("es");
23
+
24
+ export const Locale = t => currentLocale(t);
25
+
26
+ export const tt = t => () => i18n[currentLocale()][t] || t;
@@ -0,0 +1,17 @@
1
+ export const iconShow = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADjSURBVDiN3dJNSgNBEAXgz4DZeAAVJ9tko2St3kaIFxAVt4KZeAD1GKKi7vQSydI/yHgALxAXU02GxniAFBR0v1ev+3V1sZSxjxtM8BM5wTX2/hNu4gFvOMI21iJ3cIwP3GMjF/dQ4RyraOMS34GPAmvjIrBeEnfwjoPGgSM8ooh8QtngB6Ep4BWnmaMqkY1LqqzmDC8tzNDK3/RHzLL9SloUYWfQIMuw3Yl8xrDBH6qbvZWALqbqBqVmlWF7GuKEDwPr5hbXcYdPnKBv/o39wL5wG7ULY1c9NGPzQRrjKrhli1/02zEjWyWMBwAAAABJRU5ErkJggg==";
2
+ export const iconHide = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEDSURBVDiN1dK/K8VhFAbwD+VLGSxKcu9guSQ/Zils/gNkuaX4BxRZDTdklYU/QAaDlEVGGwu2Kz/uVbKJzWDwfuv1+jHz1Km3c85znuf0Hv4jxnD2W8MItnCJ5xAX2MQcHsOQL+jEAapYQD9aQwxiDy+B3JKSe1DHCpqQYQ0PeMJOpDyAmyAAirjGbDRwFYcoYCZSzjGP+8B1gqXEUT2QxyPlqaRnGceNeENzUswwil1MBocbSU9DCAXUUI6K25HtIo5QSVaooitP9OEO65iIbE+HXSvBVRbeNZQSR9pxGil3o83HNw5hEbfYR0dKFki5ci+u8OrzIQ1/R8xx7ocL+9t4B0HPOVXjoptxAAAAAElFTkSuQmCC";
3
+ export const iconClose = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABcSURBVDiN3dIxDoAwCIXhL563g3bSm+hlq4O6GFNbO+k/EV54QIDfsSBk9IA5ZxCQEG+0eGi5BqDHivEhV2xSXXwy2EdOR3xLV+ta0/26wvSm+KTYpPmMzY/0QTZeZR2f+FxhRQAAAABJRU5ErkJggg==";
4
+ export const iconCalendar = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACLSURBVDiN7dO9CQJBFEXhb38K0FwQrMNEVpuwB0NjrcYabECsQk0sQ1mTF4zIjrgmBh54MMx998AEwzOrmC5e8gJjbDHCJO7PHYI0v2JT4Ig9DljGwq5DkOZTLOCOMoIhBpknpHmFWx3ldaaUo6oTc2/ab7rl+508f8GvCC5oenTn4tM1cWg/nBNmD4fBH/Kfvt2TAAAAAElFTkSuQmCC";
5
+ export const iconLock = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAWQAAAFkBqp2phgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACQSURBVDiN7dKxDcJQDATQJ0YgXQQ1bAgDEIZBETPQwjakIjRQ8CMSyR8SiZKTrvHZd/r+JsYSNZrEI1ZR4ywzfElcJ55xwiITOECNTVDf4jDGoEEZ1Etcxxg8pmjRDiahb7BH20uKKPVUkVmL+YjQArdI+PT2bO9Pd/A34O71Rd9QeN/LAFUSckfUscWuG3oCgP8nrDH6T5AAAAAASUVORK5CYII=";
6
+ export const iconAbc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADFSURBVDiN7dCxSoIBFAXgr1BbgmgSB5ubxKAHaAkcgnBpySVaDET3WhzcpQfoHZojawgX0ZZcfAWDSDdBoeUKP/8ojZ7tnnPv4dzDFv+KZzwl5jf84B354C4wwjdeUV4vl7DCEsXgxmhigDpOMcMVjoKr7cTyI/ZxiE90wmCB4zi+RRatZOxd7OEavxHtBmvjIV5wH2a59N8ZXIZQisMCzkL/wgGq6EYffXzgHHNo4y5h+oBGlLjEBJVUiVP0cJJOtMUG+APtfyYzbH7eVgAAAABJRU5ErkJggg==";
7
+ export const icon123 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAB2AAAAdgFOeyYIAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMxJREFUOI3t0bFKwlEUBvBfmmBEr1APIDZJ9AJJQyAIvkGP0C4uQruza+DUmuIc9AC9gBG4Nmpkw/8IB3Vw1w8u95zvnvPde77LEeUUV9HAF67QRA2nmMf5A+o4x3cWOsMYy8j7WMX6jaYbLBL/mAWe8RcHm1ihs8G94gVKQQzwlAouMcQo8p/Y28HdYpYFZmsi0MVdxD1MdrxsC500wijdvgtbI1AYtDbxMwkuFAZmE1uYwkkSqOIaHyHcxEU0vUXNPSqKr37fZ6xDwD9DPS0OyHjQHQAAAABJRU5ErkJggg==";
8
+ export const iconMail = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC4SURBVDiNxdIxagJRFIXhLzLFBNJYaJslSEylWOhq3IorMGQ16SyjYCFiZWU5pTaDFvOUyTAZ8RHID69555577oXLf/OEGaY4R3g/4IhORHg3eOXYYvSAeRQ8OWQYYoNPvDQYnxUr7zBB1grCAv3QbIlxjXmAb7Txhq+rkFUKq9NUU8vcJiizwDtOWGEdmvTKqT+61H0GXsP7jSxpEGF/R1e3wkO0FBeVRnhTSBTneBB3yvOI4D/mAnvrIwKM5s4AAAAAAElFTkSuQmCC";
9
+ export const iconInfo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASVJREFUOI190r0uhFEQBuBnVxaF2PUTCkFchV0SV6BQi0rEbShFlCqNktJP0Iqf3i3YVSlXVEQozojP8e2+ySSTed+ZMzNnKnpjCFPhv+C9j/YPlnCBV3TCujhHq19iFftoYxOjBa4esTb2QvsP+7jFWJ9HxnEXRf5gGU9Z8gKucBl+sUgHTahE8AJnOCoIT/AcmhmsF7gtrGINBqWFFWcmLXMUhzjIuEbk1GA+2i/DNh4wUsK1MVfFV2GUHJO4xlsPHr8j1Eu44bAcDek2agP4lDZaxWMm3MEKbrL4hjT/8U+gJc00nglnw4qYkL5xMW9rTzqSvEiefI/dMrIaRTrSPzcKXCNinUguPeUfNKWj6kqH9Bz+aVnbvb6PtKTp8F/wUSb6Bu5YN5n7ff0kAAAAAElFTkSuQmCC";
10
+ export const iconSuccess = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQtJREFUOI2F0jFOAlEQBuAPImoFqyTa6TEEbfUihruYDYfwCAg3UDsTY20na0VjgqUWWuxgHsuy/skk82bmn/fPm9eyHXs4Cn+Br4baNZxjhk8UYUtMMWwitjHGHNfoJrlexObIo3YDY9zjoOGSQzxEkzVc4O0fctqkwCANzkJiE9LmI9ytDrvKB+tWGQnylIAsOB04VcrfdluO55CeYo6THfygVUne4jX8S1zho1LTDu7fCL2KxCe8oF8zUqb8G51VYGrzEffD6jDCJA0MY6bqnHXoK9d4Vk3kyk/S1KSPR9zUJdvRpAiJWZLLIlYEufYrrzBQ7nyJ97ClcuYN2dX1pejgOPwFvuuKfgHXiDR+HL1j1AAAAABJRU5ErkJggg==";
11
+ export const iconError = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARZJREFUOI2V0j1KQ1EQBeDPp4lWRiMoKVyAK9AoiLgJGytxD9oJNhKyDyvBnw2IugC3YGKVRk1KRbR48yC5vjzwwIHL3DPnzp2ZGdMxj9U4D/BZoZ3ANu4wQj84xC3aVYkZuujhCItjd42I9dAJ7R908YDlikeaeAyTCezgpST5IJia9LFVlA0nOMd7It4IjuMttKeFQR17uKooPcUV9lHL0ArX0T8MPqLa1hx+MDNFWDX7LHLV4/VGiWghmGJJvhu1WXzLO5rhORGeYRf3SfwQNVwWgbZ8SZqJcD04jhX5GDfTsjryJUlN0uQnXJRdZmHSx7H8nwWWItaP5NJVLrCFG3mTXoNDXJeVPW185E1ai/MAX2WiX9S3NSPYbj+uAAAAAElFTkSuQmCC";
12
+ export const iconWarning = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARJJREFUOI2l0r8uRFEQBvAfu9glwUYiUaxHUEl0VDpKeq+wpZBINAqFRHgTKg0tCSqVhmKDEM1u/Esodm725rq7iC+ZzMnM982ZmXP4JwpdchWsYBrXeMkj9XQQV3GEi+BMYR63v+mqiDPUUrEaTiP3I1ZxEOcySnE+jFxXVPEQPimWiCYzOdCbKbCFPe1Z+8PgBvvBycVMCIdSsY2wBEPBmcnrYBtraKRib2EJGljHjswLLuI8Z6SS9hLTl15iIR08wZLv2AzLYjk0YATP8n9lVWbrgUJohosYxCdG8Zghdvp5ldCUi6hrPd0VjvGEVzTxEYLkogGMYQ67uEtvcgKzGA8y9IV/D9/Evdb89Q7d/Q1fB8U0mpUmzV0AAAAASUVORK5CYII=";
13
+ export const iconLeft = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABfSURBVDiNY2AY8oCZSHWxDAwMEgwMDHfJsaSAgYHhH9QQsjT/Z2BgKKe75gQGiLMLCSlkwiHOSI6t6ADmhYoBN6SIARIeidgkiUlIxxkYGB4xMDB8YmBguE6JSwYpAACvLRHTKwPjZgAAAABJRU5ErkJggg==";
14
+ export const iconRight = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABNSURBVDiN3dAxCoAwFATRh3fU2oAHiDbi5Y1F2jT+gKLbzyy7/DYjUo8g4cTWI8koOF6XrOqc5ifDDVGJthfsj8OLujtHYJgwR+GP5QKMxA9/SolDQgAAAABJRU5ErkJggg==";
15
+ export const iconLLeft = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABlSURBVDiN3ZLBDUBAEEUfmtCchA5woUMlOO1FCQrAwbqwf8eFhHd7mfzJn2Tg82TGvABywAmPUgOLD4XcDK9AJ/y5cOlrNsIvpCdPDL/FUbkX/t6Slv3+SjgQf6QBmIAZGAP+FzZJViOd89x8pAAAAABJRU5ErkJggg==";
16
+ export const iconRRight = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABmSURBVDiN3dGxCoAgEMbxfz1dL1BTREJzmUv08trgDYcg6VCD3/YD7zvkoLmMgFEegLmmwAAecOJVvNeUWCAAt7IHjt9LThkyiRf9qC8oCom70u0BuDL+bngj/tNm/JqJePucW8wDvGYdzT0nMUkAAAAASUVORK5CYII=";
17
+ export const iconUpload = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADNSURBVDiNndOxTgJRFIThz41ZDMFKqH0DLSRSq4lQ0RifUcMzUJlYQKjtLcHVSimBggPRNSzs/sk0kzPnTHEvxZyHKnGJD3yhXSWcYRnKwvvH0Y7wEG/4wQI1XOEek6LLF3FtiDoGoXp4WcxsSXILHjFCH/Nf/jy8ER6KGuTZNNhJvkFpEpygUyHbRi1BFy8VFryilyANlSVFerxn6N36IRVyG0PNEtdbkbmBU8zwdOCSJp4xRWNj3sWS5YGaRvM/f6GBa5ztafCJMb5hBQQ/MMwXLnnZAAAAAElFTkSuQmCC";
@@ -0,0 +1,5 @@
1
+ export const val = t => typeof t === "function" ? t() : t;
2
+
3
+ export const joinClass = (t, l) => typeof l === "function"
4
+ ? () => `${t} ${l() || ""}`.trim()
5
+ : `${t} ${l || ""}`.trim();