elbe-ui 0.4.8 → 0.4.11
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/bit/_bit_provider.js +11 -6
- package/dist/bit/_bit_utils.d.ts +5 -0
- package/dist/bit/bit.d.ts +1 -3
- package/dist/elbe.css +28 -0
- package/dist/elbe.css.map +1 -1
- package/dist/ui/components/button/icon_button.d.ts +3 -3
- package/dist/ui/components/button/icon_button.js +1 -3
- package/dist/ui/theme/theme.js +40 -0
- package/package.json +1 -1
|
@@ -56,20 +56,25 @@ export function _makeBitProvider(context, bitP) {
|
|
|
56
56
|
error: state.v.type === "error" ? state.v.value : undefined,
|
|
57
57
|
};
|
|
58
58
|
// ========== DEFINE QoL FUNCTIONS ==========
|
|
59
|
-
function _worker(fn, silent) {
|
|
59
|
+
function _worker(fn, silent, reset) {
|
|
60
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
61
|
if (!silent)
|
|
62
62
|
_partCtrl.setLoading();
|
|
63
63
|
try {
|
|
64
64
|
const newData = yield fn();
|
|
65
|
-
|
|
65
|
+
if (!reset)
|
|
66
|
+
return _partCtrl.setData(newData);
|
|
67
|
+
setState({
|
|
68
|
+
history: bitP.useHistory ? [newData] : [],
|
|
69
|
+
v: { type: "data", value: newData },
|
|
70
|
+
});
|
|
66
71
|
}
|
|
67
72
|
catch (e) {
|
|
68
73
|
_partCtrl.setError(e);
|
|
69
74
|
}
|
|
70
75
|
});
|
|
71
76
|
}
|
|
72
|
-
const _reload = () => _worker(() => bitP.worker(p));
|
|
77
|
+
const _reload = (silent) => _worker(() => bitP.worker(p), silent);
|
|
73
78
|
function act(fn, silent) {
|
|
74
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
75
80
|
const data = _partCtrl.data;
|
|
@@ -93,16 +98,16 @@ export function _makeBitProvider(context, bitP) {
|
|
|
93
98
|
return _isFn(onLoading) ? onLoading() : (_c = onLoading) !== null && _c !== void 0 ? _c : null;
|
|
94
99
|
}
|
|
95
100
|
function mapUI(onData, onError, onLoading) {
|
|
96
|
-
return map((d) => onData(d), (e) => (onError !== null && onError !== void 0 ? onError : ((e) => _jsx(ErrorView, { error: e, retry: _reload })))(e), () => onLoading !== null && onLoading !== void 0 ? onLoading : (() => _jsx(_LoadView, {}))());
|
|
101
|
+
return map((d) => onData(d), (e) => (onError !== null && onError !== void 0 ? onError : ((e) => _jsx(ErrorView, { error: e, retry: () => _reload(false) })))(e), () => onLoading !== null && onLoading !== void 0 ? onLoading : (() => _jsx(_LoadView, {}))());
|
|
97
102
|
}
|
|
98
103
|
const baseCtrl = Object.assign(Object.assign({}, _partCtrl), { act,
|
|
99
104
|
map,
|
|
100
105
|
mapUI });
|
|
101
|
-
const userCtrl = bitP.control(Object.assign(Object.assign({}, baseCtrl), { parameters: p }));
|
|
106
|
+
const userCtrl = bitP.control(Object.assign(Object.assign({}, baseCtrl), { parameters: p, reload: _reload }));
|
|
102
107
|
return Object.assign(Object.assign(Object.assign({}, baseCtrl), userCtrl), { reload: _reload });
|
|
103
108
|
}
|
|
104
109
|
const ctrl = useMemo(() => _make(), [state]);
|
|
105
|
-
useEffect(() => ctrl.reload(), []);
|
|
110
|
+
useEffect(() => ctrl.reload(true), []);
|
|
106
111
|
// ========== DEFINE THE JSX ELEMENT ==========
|
|
107
112
|
return _jsx(context.Provider, { value: ctrl, children: p.children });
|
|
108
113
|
}
|
package/dist/bit/_bit_utils.d.ts
CHANGED
|
@@ -73,6 +73,11 @@ export interface _BitGetInterface<D> {
|
|
|
73
73
|
* returns true if a previous `data` state exists.
|
|
74
74
|
*/
|
|
75
75
|
canGoBack: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* reload the data. It will call the worker function again.
|
|
78
|
+
* If `silent` is true, it will not change the state to `loading`.
|
|
79
|
+
*/
|
|
80
|
+
reload: (silent?: boolean) => void;
|
|
76
81
|
}
|
|
77
82
|
export interface _BitCtrlInput<D, P> extends _BitGetInterface<D> {
|
|
78
83
|
setData: (d: D) => void;
|
package/dist/bit/bit.d.ts
CHANGED
|
@@ -8,9 +8,7 @@ export type BitTriMap<T, D> = {
|
|
|
8
8
|
onError?: (e: any) => D;
|
|
9
9
|
onData?: (value: T) => D;
|
|
10
10
|
};
|
|
11
|
-
export type BitUseInterface<D, I> = _BitGetInterface<D> & I
|
|
12
|
-
reload: () => void;
|
|
13
|
-
};
|
|
11
|
+
export type BitUseInterface<D, I> = _BitGetInterface<D> & I;
|
|
14
12
|
export type BitParams<D, P, I> = {
|
|
15
13
|
control?: _BitCtrlMaker<D, P, I>;
|
|
16
14
|
debugLabel?: Maybe<string>;
|
package/dist/elbe.css
CHANGED
|
@@ -588,6 +588,22 @@ body,
|
|
|
588
588
|
.elbe button > * {
|
|
589
589
|
flex-shrink: 0;
|
|
590
590
|
}
|
|
591
|
+
.elbe ._elbe_tooltip {
|
|
592
|
+
position: fixed;
|
|
593
|
+
background-color: black;
|
|
594
|
+
color: white;
|
|
595
|
+
padding: 0.25rem 0.5rem;
|
|
596
|
+
border-radius: 0.25rem;
|
|
597
|
+
font-size: 1rem;
|
|
598
|
+
white-space: nowrap;
|
|
599
|
+
z-index: 101;
|
|
600
|
+
pointer-events: none;
|
|
601
|
+
}
|
|
602
|
+
@keyframes _tt_show {
|
|
603
|
+
100% {
|
|
604
|
+
opacity: 1;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
591
607
|
.elbe .toast {
|
|
592
608
|
position: fixed;
|
|
593
609
|
bottom: 1rem;
|
|
@@ -621,4 +637,16 @@ body,
|
|
|
621
637
|
outline: 0.15rem solid white;
|
|
622
638
|
}
|
|
623
639
|
|
|
640
|
+
._elbe_tooltip {
|
|
641
|
+
position: fixed;
|
|
642
|
+
background-color: black;
|
|
643
|
+
color: white;
|
|
644
|
+
padding: 0.25rem 0.5rem;
|
|
645
|
+
border-radius: 0.25rem;
|
|
646
|
+
font-size: 1rem;
|
|
647
|
+
white-space: nowrap;
|
|
648
|
+
z-index: 101;
|
|
649
|
+
pointer-events: none;
|
|
650
|
+
}
|
|
651
|
+
|
|
624
652
|
/*# sourceMappingURL=elbe.css.map */
|
package/dist/elbe.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../style/elbe.scss","../style/_base.scss","../style/_flex.scss","../style/_components.scss","../style/_toast.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAOQ;AAMR;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EAGA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;AC3DA;AAoBA;AAiEA;AAUA;AAaA;AA8BA;AClHA;AAqBA;AAYA;AAkBA;AAqBA;ACkIA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACrME;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AH3BF;AAAA;AAAA;AAAA;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAMF;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;EACE;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;;AAGF;EACE;;AAEF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAKF;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAOF;EACE;;AAGF;EAEE;EACA;EACA;;AAKF;AAAA;EAEE;;AAEF;AAAA;AAAA;AAAA;EAEE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IACE;;;AAKJ;EACE;;AAEF;EACE;;AACA;EACE;;ACnKJ;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;;AAIA;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AAMJ;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;ACvHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAKJ;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;EACE;;AAoBJ;EACE;EACA;EACA;;AAGF;EAGE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAKE;EAEA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;;AAKN;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EAGC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACC;EAGD;EAEA;EAEA;EACA;;AAGD;EACE;EACD;EACA;;AAgBD;EACE;;AAcA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EAzCF;EACA;EACA;EACA;EACA;EACA;EACA;;AAuCA;EA7CA;EACA;EACA;EACA;EACA;EACA;EACA;;AAmFF;EACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../style/elbe.scss","../style/_base.scss","../style/_flex.scss","../style/_components.scss","../style/_toast.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAOQ;AAMR;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EAGA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;AC3DA;AAoBA;AAiEA;AAUA;AAaA;AA8BA;AClHA;AAqBA;AAYA;AAkBA;AAqBA;ACkIA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACrME;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AH3BF;AAAA;AAAA;AAAA;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAMF;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;EACE;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;;AAGF;EACE;;AAEF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAKF;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAOF;EACE;;AAGF;EAEE;EACA;EACA;;AAKF;AAAA;EAEE;;AAEF;AAAA;AAAA;AAAA;EAEE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IACE;;;AAKJ;EACE;;AAEF;EACE;;AACA;EACE;;ACnKJ;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;;AAIA;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AADF;EACE;;AAMJ;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAKF;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;ACvHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAKJ;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;EACE;;AAoBJ;EACE;EACA;EACA;;AAGF;EAGE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAKE;EAEA;EACA;EACA;EACA;EACA;EAEA;EAEA;EAEA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;;AAKN;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EAGC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACC;EAGD;EAEA;EAEA;EACA;;AAGD;EACE;EACD;EACA;;AAgBD;EACE;;AAcA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EAzCF;EACA;EACA;EACA;EACA;EACA;EACA;;AAuCA;EA7CA;EACA;EACA;EACA;EACA;EACA;EACA;;AAmFF;EACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;IACE;;;AC9VJ;EAII;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AJyCJ;EACE;;AAEF;EACG;;AAGH;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"elbe.css"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component } from "preact";
|
|
2
|
-
import { ActionElbeProps, type ElbeChild, type ElbeColorKinds, type ElbeColorManners } from "../../..";
|
|
2
|
+
import { ActionElbeProps, ElbeProps, type ElbeChild, type ElbeColorKinds, type ElbeColorManners } from "../../..";
|
|
3
3
|
export type IconChild = ElbeChild | ((_: any) => ElbeChild);
|
|
4
4
|
export type IconButtonProps = {
|
|
5
5
|
icon?: IconChild;
|
|
@@ -17,5 +17,5 @@ export declare class IconButton extends Component<IconButtonProps & {
|
|
|
17
17
|
render(): import("preact").JSX.Element;
|
|
18
18
|
}
|
|
19
19
|
export declare function Icon(p: {
|
|
20
|
-
icon: IconChild
|
|
21
|
-
}):
|
|
20
|
+
icon: IconChild;
|
|
21
|
+
} & ElbeProps): import("preact").JSX.Element | null;
|
|
@@ -43,7 +43,5 @@ function _btn(_a, manner) {
|
|
|
43
43
|
export function Icon(p) {
|
|
44
44
|
if (!p.icon)
|
|
45
45
|
return null;
|
|
46
|
-
|
|
47
|
-
return p.icon({});
|
|
48
|
-
return p.icon;
|
|
46
|
+
return (_jsx("span", Object.assign({}, applyProps("icon", p), { children: typeof p.icon === "function" ? p.icon({}) : p.icon })));
|
|
49
47
|
}
|
package/dist/ui/theme/theme.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
import { useEffect } from "preact/hooks";
|
|
2
3
|
import "../../elbe.css";
|
|
3
4
|
import { ToDo } from "../components/dev/todo";
|
|
4
5
|
import { ColorTheme } from "./colors";
|
|
@@ -29,5 +30,44 @@ export function ElbeTheme(p) {
|
|
|
29
30
|
var _a;
|
|
30
31
|
const theme = "theme" in p ? p.theme : ElbeThemeData.fromSeed((_a = p.seed) !== null && _a !== void 0 ? _a : {});
|
|
31
32
|
const config = makeThemeConfig(p);
|
|
33
|
+
_addTooltip();
|
|
32
34
|
return (_jsxs("div", { class: `elbe ${config.dark ? "dark" : ""} ${config.highVis ? "highvis" : ""} ${config.reducedMotion ? "reduced_motion" : ""}`, children: [p.todoOverlay && _jsx(ToDo.Overlay, {}), _jsx("style", { children: theme.asCss() }), _jsx("style", { children: _configCss(theme, config) }), _jsx(ThemeConfigContext.Provider, { value: config, children: _jsx(ThemeContext.Provider, { value: theme, children: p.children }) })] }));
|
|
33
35
|
}
|
|
36
|
+
function _addTooltip() {
|
|
37
|
+
return useEffect(() => {
|
|
38
|
+
const _gap = 8;
|
|
39
|
+
console.log("add tooltip");
|
|
40
|
+
const onHover = (e) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const target = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest("[data-tooltip]");
|
|
43
|
+
if (!target)
|
|
44
|
+
return;
|
|
45
|
+
// remove existing tooltip
|
|
46
|
+
const existingTooltip = document.querySelector("._elbe_tooltip");
|
|
47
|
+
if (existingTooltip)
|
|
48
|
+
existingTooltip.remove();
|
|
49
|
+
// create new tooltip
|
|
50
|
+
let tooltip = document.createElement("div");
|
|
51
|
+
tooltip.className = "_elbe_tooltip";
|
|
52
|
+
tooltip.textContent = target.getAttribute("data-tooltip");
|
|
53
|
+
document.body.appendChild(tooltip);
|
|
54
|
+
const rect = target.getBoundingClientRect();
|
|
55
|
+
let top = rect.top - tooltip.offsetHeight - _gap;
|
|
56
|
+
let left = rect.left + rect.width / 2 - tooltip.offsetWidth / 2;
|
|
57
|
+
// Adjust if out of viewport
|
|
58
|
+
if (top < 0)
|
|
59
|
+
top = rect.bottom + _gap;
|
|
60
|
+
if (left < 0)
|
|
61
|
+
left = _gap;
|
|
62
|
+
if (left + tooltip.offsetWidth > window.innerWidth)
|
|
63
|
+
left = window.innerWidth - tooltip.offsetWidth - _gap;
|
|
64
|
+
tooltip.style.top = `${top}px`;
|
|
65
|
+
tooltip.style.left = `${left}px`;
|
|
66
|
+
target.addEventListener("mouseleave", () => tooltip.remove(), {
|
|
67
|
+
once: true,
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
document.addEventListener("mouseover", onHover);
|
|
71
|
+
return () => document.removeEventListener("mouseover", onHover);
|
|
72
|
+
});
|
|
73
|
+
}
|