basefn 1.10.0 → 1.11.0
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/package.json +3 -3
- package/rescript.json +1 -1
- package/src/Basefn__Responsive.res.mjs +5 -5
- package/src/Basefn__Utils.res.mjs +2 -2
- package/src/Demo.res +59 -59
- package/src/Demo.res.mjs +630 -628
- package/src/Example.res +3 -3
- package/src/Example.res.mjs +48 -47
- package/src/components/Basefn__Accordion.res +5 -5
- package/src/components/Basefn__Accordion.res.mjs +25 -26
- package/src/components/Basefn__Alert.res +4 -4
- package/src/components/Basefn__Alert.res.mjs +20 -18
- package/src/components/Basefn__AlertDialog.res +5 -5
- package/src/components/Basefn__AlertDialog.res.mjs +23 -21
- package/src/components/Basefn__AppLayout.res +3 -3
- package/src/components/Basefn__AppLayout.res.mjs +25 -24
- package/src/components/Basefn__AspectRatio.res +1 -1
- package/src/components/Basefn__AspectRatio.res.mjs +2 -2
- package/src/components/Basefn__Avatar.res.mjs +3 -3
- package/src/components/Basefn__Badge.res +1 -1
- package/src/components/Basefn__Badge.res.mjs +2 -2
- package/src/components/Basefn__Breadcrumb.res +5 -5
- package/src/components/Basefn__Breadcrumb.res.mjs +14 -14
- package/src/components/Basefn__Button.res +1 -1
- package/src/components/Basefn__Button.res.mjs +10 -9
- package/src/components/Basefn__ButtonGroup.res +1 -1
- package/src/components/Basefn__ButtonGroup.res.mjs +2 -2
- package/src/components/Basefn__Card.res +3 -3
- package/src/components/Basefn__Card.res.mjs +11 -11
- package/src/components/Basefn__Checkbox.res +1 -1
- package/src/components/Basefn__Checkbox.res.mjs +7 -7
- package/src/components/Basefn__ContextMenu.res +4 -4
- package/src/components/Basefn__ContextMenu.res.mjs +22 -20
- package/src/components/Basefn__Drawer.res +5 -5
- package/src/components/Basefn__Drawer.res.mjs +22 -20
- package/src/components/Basefn__Dropdown.res +4 -4
- package/src/components/Basefn__Dropdown.res.mjs +20 -18
- package/src/components/Basefn__Grid.res.mjs +15 -14
- package/src/components/Basefn__HoverCard.res +3 -3
- package/src/components/Basefn__HoverCard.res.mjs +14 -12
- package/src/components/Basefn__Icon.res.mjs +8 -7
- package/src/components/Basefn__Input.res.mjs +4 -4
- package/src/components/Basefn__Kbd.res +2 -2
- package/src/components/Basefn__Kbd.res.mjs +5 -5
- package/src/components/Basefn__Label.res +1 -1
- package/src/components/Basefn__Label.res.mjs +4 -4
- package/src/components/Basefn__Modal.res +5 -5
- package/src/components/Basefn__Modal.res.mjs +20 -18
- package/src/components/Basefn__Popover.res +3 -3
- package/src/components/Basefn__Popover.res.mjs +15 -13
- package/src/components/Basefn__Progress.res +2 -2
- package/src/components/Basefn__Progress.res.mjs +16 -14
- package/src/components/Basefn__Radio.res +1 -1
- package/src/components/Basefn__Radio.res.mjs +7 -7
- package/src/components/Basefn__Resizable.res +49 -20
- package/src/components/Basefn__Resizable.res.mjs +66 -36
- package/src/components/Basefn__ScrollArea.res +1 -1
- package/src/components/Basefn__ScrollArea.res.mjs +2 -2
- package/src/components/Basefn__Select.res +2 -2
- package/src/components/Basefn__Select.res.mjs +7 -6
- package/src/components/Basefn__Separator.res +1 -1
- package/src/components/Basefn__Separator.res.mjs +9 -9
- package/src/components/Basefn__Sidebar.res +7 -7
- package/src/components/Basefn__Sidebar.res.mjs +28 -24
- package/src/components/Basefn__Skeleton.res.mjs +2 -2
- package/src/components/Basefn__Slider.res +4 -4
- package/src/components/Basefn__Slider.res.mjs +21 -20
- package/src/components/Basefn__Spinner.res +1 -1
- package/src/components/Basefn__Spinner.res.mjs +8 -8
- package/src/components/Basefn__Spotlight.res +14 -14
- package/src/components/Basefn__Spotlight.res.mjs +69 -65
- package/src/components/Basefn__Stepper.res +6 -6
- package/src/components/Basefn__Stepper.res.mjs +20 -24
- package/src/components/Basefn__Switch.res +1 -1
- package/src/components/Basefn__Switch.res.mjs +16 -14
- package/src/components/Basefn__Tabs.res +4 -4
- package/src/components/Basefn__Tabs.res.mjs +19 -17
- package/src/components/Basefn__Textarea.res.mjs +4 -4
- package/src/components/Basefn__ThemeToggle.res +1 -1
- package/src/components/Basefn__ThemeToggle.res.mjs +13 -10
- package/src/components/Basefn__Timeline.res +6 -6
- package/src/components/Basefn__Timeline.res.mjs +21 -21
- package/src/components/Basefn__Toast.res +4 -4
- package/src/components/Basefn__Toast.res.mjs +23 -20
- package/src/components/Basefn__Toggle.res +1 -1
- package/src/components/Basefn__Toggle.res.mjs +8 -7
- package/src/components/Basefn__ToggleGroup.res +2 -2
- package/src/components/Basefn__ToggleGroup.res.mjs +12 -10
- package/src/components/Basefn__Tooltip.res +3 -3
- package/src/components/Basefn__Tooltip.res.mjs +14 -12
- package/src/components/Basefn__Topbar.res +7 -7
- package/src/components/Basefn__Topbar.res.mjs +22 -22
- package/src/components/Basefn__Typography.res +2 -2
- package/src/components/Basefn__Typography.res.mjs +13 -13
- package/src/styles/Basefn__Theme.res.mjs +5 -5
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/
|
|
4
|
-
import * as Xote__JSX from "xote/src/Xote__JSX.res.mjs";
|
|
3
|
+
import * as Node$Xote from "xote/src/Node.res.mjs";
|
|
5
4
|
import * as Basefn__Dom from "../Basefn__Dom.res.mjs";
|
|
5
|
+
import * as Effect$Xote from "xote/src/Effect.res.mjs";
|
|
6
|
+
import * as Signal$Xote from "xote/src/Signal.res.mjs";
|
|
6
7
|
import * as Basefn__Icon from "./Basefn__Icon.res.mjs";
|
|
8
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
9
|
+
import * as Computed$Xote from "xote/src/Computed.res.mjs";
|
|
7
10
|
import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
|
|
11
|
+
import * as ReactiveProp$Xote from "xote/src/ReactiveProp.res.mjs";
|
|
8
12
|
|
|
9
13
|
import './Basefn__Spotlight.css'
|
|
10
14
|
;
|
|
@@ -18,8 +22,8 @@ function Basefn__Spotlight(props) {
|
|
|
18
22
|
let isOpen = props.isOpen;
|
|
19
23
|
let placeholder = __placeholder !== undefined ? __placeholder : "Search...";
|
|
20
24
|
let emptyMessage = __emptyMessage !== undefined ? __emptyMessage : "No results found.";
|
|
21
|
-
let query = Xote.
|
|
22
|
-
let activeIndex = Xote.
|
|
25
|
+
let query = Signal$Xote.make("", undefined, undefined);
|
|
26
|
+
let activeIndex = Signal$Xote.make(0, undefined, undefined);
|
|
23
27
|
let defaultFilter = (q, item) => {
|
|
24
28
|
let q$1 = q.toLowerCase();
|
|
25
29
|
if (item.label.toLowerCase().includes(q$1)) {
|
|
@@ -33,8 +37,8 @@ function Basefn__Spotlight(props) {
|
|
|
33
37
|
}
|
|
34
38
|
};
|
|
35
39
|
let filterItem = filterFn !== undefined ? filterFn : defaultFilter;
|
|
36
|
-
let filteredItems = Xote.
|
|
37
|
-
let q = Xote.
|
|
40
|
+
let filteredItems = Computed$Xote.make(() => {
|
|
41
|
+
let q = Signal$Xote.get(query);
|
|
38
42
|
if (q === "") {
|
|
39
43
|
return items;
|
|
40
44
|
} else {
|
|
@@ -43,18 +47,18 @@ function Basefn__Spotlight(props) {
|
|
|
43
47
|
}, undefined);
|
|
44
48
|
let handleSelect = item => {
|
|
45
49
|
item.onSelect();
|
|
46
|
-
Xote.
|
|
47
|
-
Xote.
|
|
50
|
+
Signal$Xote.set(query, "");
|
|
51
|
+
Signal$Xote.set(activeIndex, 0);
|
|
48
52
|
onClose();
|
|
49
53
|
};
|
|
50
54
|
let handleKeyDown = evt => {
|
|
51
55
|
let k = evt.key;
|
|
52
|
-
let currentItems = Xote.
|
|
56
|
+
let currentItems = Signal$Xote.get(filteredItems);
|
|
53
57
|
let len = currentItems.length;
|
|
54
58
|
switch (k) {
|
|
55
59
|
case "ArrowDown" :
|
|
56
60
|
Basefn__Dom.preventDefault(evt);
|
|
57
|
-
Xote.
|
|
61
|
+
Signal$Xote.update(activeIndex, i => Primitive_int.mod_(i + 1 | 0, Primitive_int.max(len, 1)));
|
|
58
62
|
((requestAnimationFrame(() => {
|
|
59
63
|
const el = document.querySelector(".basefn-spotlight__item--active");
|
|
60
64
|
if (el) el.scrollIntoView({ block: "nearest" });
|
|
@@ -62,7 +66,7 @@ function Basefn__Spotlight(props) {
|
|
|
62
66
|
return;
|
|
63
67
|
case "ArrowUp" :
|
|
64
68
|
Basefn__Dom.preventDefault(evt);
|
|
65
|
-
Xote.
|
|
69
|
+
Signal$Xote.update(activeIndex, i => Primitive_int.mod_((i - 1 | 0) + Primitive_int.max(len, 1) | 0, Primitive_int.max(len, 1)));
|
|
66
70
|
((requestAnimationFrame(() => {
|
|
67
71
|
const el = document.querySelector(".basefn-spotlight__item--active");
|
|
68
72
|
if (el) el.scrollIntoView({ block: "nearest" });
|
|
@@ -72,7 +76,7 @@ function Basefn__Spotlight(props) {
|
|
|
72
76
|
if (len <= 0) {
|
|
73
77
|
return;
|
|
74
78
|
}
|
|
75
|
-
let idx = Xote.
|
|
79
|
+
let idx = Signal$Xote.get(activeIndex);
|
|
76
80
|
let item = currentItems[idx];
|
|
77
81
|
if (item !== undefined) {
|
|
78
82
|
return handleSelect(item);
|
|
@@ -80,8 +84,8 @@ function Basefn__Spotlight(props) {
|
|
|
80
84
|
return;
|
|
81
85
|
}
|
|
82
86
|
case "Escape" :
|
|
83
|
-
Xote.
|
|
84
|
-
Xote.
|
|
87
|
+
Signal$Xote.set(query, "");
|
|
88
|
+
Signal$Xote.set(activeIndex, 0);
|
|
85
89
|
return onClose();
|
|
86
90
|
default:
|
|
87
91
|
return;
|
|
@@ -89,20 +93,20 @@ function Basefn__Spotlight(props) {
|
|
|
89
93
|
};
|
|
90
94
|
let handleInput = evt => {
|
|
91
95
|
let value = Basefn__Dom.target(evt).value;
|
|
92
|
-
Xote.
|
|
93
|
-
Xote.
|
|
96
|
+
Signal$Xote.set(query, value);
|
|
97
|
+
Signal$Xote.set(activeIndex, 0);
|
|
94
98
|
};
|
|
95
99
|
let handleBackdropClick = evt => {
|
|
96
100
|
let target = evt.target;
|
|
97
101
|
let currentTarget = evt.currentTarget;
|
|
98
102
|
if (target === currentTarget) {
|
|
99
|
-
Xote.
|
|
100
|
-
Xote.
|
|
103
|
+
Signal$Xote.set(query, "");
|
|
104
|
+
Signal$Xote.set(activeIndex, 0);
|
|
101
105
|
return onClose();
|
|
102
106
|
}
|
|
103
107
|
};
|
|
104
|
-
Xote.
|
|
105
|
-
if (Xote.
|
|
108
|
+
Effect$Xote.run(() => {
|
|
109
|
+
if (Signal$Xote.get(isOpen)) {
|
|
106
110
|
((requestAnimationFrame(() => {
|
|
107
111
|
requestAnimationFrame(() => {
|
|
108
112
|
const el = document.querySelector(".basefn-spotlight__input");
|
|
@@ -112,11 +116,11 @@ function Basefn__Spotlight(props) {
|
|
|
112
116
|
}
|
|
113
117
|
}, undefined);
|
|
114
118
|
let renderResults = () => {
|
|
115
|
-
let currentItems = Xote.
|
|
119
|
+
let currentItems = Signal$Xote.get(filteredItems);
|
|
116
120
|
if (currentItems.length === 0) {
|
|
117
|
-
return
|
|
121
|
+
return XoteJSX$Xote.Elements.jsx("div", {
|
|
118
122
|
class: "basefn-spotlight__empty",
|
|
119
|
-
children: Xote.
|
|
123
|
+
children: Node$Xote.text(emptyMessage)
|
|
120
124
|
});
|
|
121
125
|
}
|
|
122
126
|
let lastGroup = {
|
|
@@ -127,99 +131,99 @@ function Basefn__Spotlight(props) {
|
|
|
127
131
|
let group = item.group;
|
|
128
132
|
if (group !== undefined && group !== lastGroup.contents) {
|
|
129
133
|
lastGroup.contents = group;
|
|
130
|
-
elements.push(
|
|
134
|
+
elements.push(XoteJSX$Xote.Elements.jsxKeyed("div", {
|
|
131
135
|
class: "basefn-spotlight__group-label",
|
|
132
|
-
children: Xote.
|
|
136
|
+
children: Node$Xote.text(group)
|
|
133
137
|
}, "group-" + group, undefined));
|
|
134
138
|
}
|
|
135
139
|
let itemClass = "basefn-spotlight__item" + (
|
|
136
|
-
index === Xote.
|
|
140
|
+
index === Signal$Xote.get(activeIndex) ? " basefn-spotlight__item--active" : ""
|
|
137
141
|
);
|
|
138
142
|
let desc = item.description;
|
|
139
|
-
elements.push(
|
|
143
|
+
elements.push(XoteJSX$Xote.Elements.jsxKeyed("button", {
|
|
140
144
|
class: itemClass,
|
|
141
145
|
onClick: param => handleSelect(item),
|
|
142
|
-
children:
|
|
146
|
+
children: XoteJSX$Xote.Elements.jsxs("div", {
|
|
143
147
|
class: "basefn-spotlight__item-content",
|
|
144
|
-
children:
|
|
145
|
-
|
|
148
|
+
children: XoteJSX$Xote.array([
|
|
149
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
146
150
|
class: "basefn-spotlight__item-label",
|
|
147
|
-
children: Xote.
|
|
151
|
+
children: Node$Xote.text(item.label)
|
|
148
152
|
}),
|
|
149
|
-
desc !== undefined ?
|
|
153
|
+
desc !== undefined ? XoteJSX$Xote.Elements.jsx("div", {
|
|
150
154
|
class: "basefn-spotlight__item-description",
|
|
151
|
-
children: Xote.
|
|
152
|
-
}) :
|
|
155
|
+
children: Node$Xote.text(desc)
|
|
156
|
+
}) : XoteJSX$Xote.jsx(XoteJSX$Xote.jsxFragment, {})
|
|
153
157
|
])
|
|
154
158
|
})
|
|
155
159
|
}, item.id, undefined));
|
|
156
160
|
});
|
|
157
|
-
return Xote.
|
|
161
|
+
return Node$Xote.fragment(elements);
|
|
158
162
|
};
|
|
159
|
-
return Xote.
|
|
160
|
-
if (Xote.
|
|
161
|
-
return [
|
|
163
|
+
return Node$Xote.signalFragment(Computed$Xote.make(() => {
|
|
164
|
+
if (Signal$Xote.get(isOpen)) {
|
|
165
|
+
return [XoteJSX$Xote.Elements.jsx("div", {
|
|
162
166
|
class: "basefn-spotlight-backdrop",
|
|
163
167
|
onClick: handleBackdropClick,
|
|
164
|
-
children:
|
|
168
|
+
children: XoteJSX$Xote.Elements.jsxs("div", {
|
|
165
169
|
class: "basefn-spotlight",
|
|
166
170
|
onKeyDown: handleKeyDown,
|
|
167
|
-
children:
|
|
168
|
-
|
|
171
|
+
children: XoteJSX$Xote.array([
|
|
172
|
+
XoteJSX$Xote.Elements.jsxs("div", {
|
|
169
173
|
class: "basefn-spotlight__input-wrapper",
|
|
170
|
-
children:
|
|
171
|
-
|
|
174
|
+
children: XoteJSX$Xote.array([
|
|
175
|
+
XoteJSX$Xote.jsx(Basefn__Icon.make, {
|
|
172
176
|
name: "Search",
|
|
173
177
|
size: "Sm"
|
|
174
178
|
}),
|
|
175
|
-
|
|
179
|
+
XoteJSX$Xote.Elements.jsx("input", {
|
|
176
180
|
class: "basefn-spotlight__input",
|
|
177
181
|
type: "text",
|
|
178
|
-
value: Xote.
|
|
182
|
+
value: ReactiveProp$Xote.reactive(query),
|
|
179
183
|
placeholder: placeholder,
|
|
180
184
|
onInput: handleInput
|
|
181
185
|
})
|
|
182
186
|
])
|
|
183
187
|
}),
|
|
184
|
-
|
|
188
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
185
189
|
class: "basefn-spotlight__results",
|
|
186
190
|
children: renderResults()
|
|
187
191
|
}),
|
|
188
|
-
|
|
192
|
+
XoteJSX$Xote.Elements.jsxs("div", {
|
|
189
193
|
class: "basefn-spotlight__footer",
|
|
190
|
-
children:
|
|
191
|
-
|
|
194
|
+
children: XoteJSX$Xote.array([
|
|
195
|
+
XoteJSX$Xote.Elements.jsxs("span", {
|
|
192
196
|
class: "basefn-spotlight__footer-hint",
|
|
193
|
-
children:
|
|
194
|
-
|
|
197
|
+
children: XoteJSX$Xote.array([
|
|
198
|
+
XoteJSX$Xote.Elements.jsx("span", {
|
|
195
199
|
class: "basefn-spotlight__footer-key",
|
|
196
|
-
children: Xote.
|
|
200
|
+
children: Node$Xote.text("\u2191")
|
|
197
201
|
}),
|
|
198
|
-
|
|
202
|
+
XoteJSX$Xote.Elements.jsx("span", {
|
|
199
203
|
class: "basefn-spotlight__footer-key",
|
|
200
|
-
children: Xote.
|
|
204
|
+
children: Node$Xote.text("\u2193")
|
|
201
205
|
}),
|
|
202
|
-
Xote.
|
|
206
|
+
Node$Xote.text("to navigate")
|
|
203
207
|
])
|
|
204
208
|
}),
|
|
205
|
-
|
|
209
|
+
XoteJSX$Xote.Elements.jsxs("span", {
|
|
206
210
|
class: "basefn-spotlight__footer-hint",
|
|
207
|
-
children:
|
|
208
|
-
|
|
211
|
+
children: XoteJSX$Xote.array([
|
|
212
|
+
XoteJSX$Xote.Elements.jsx("span", {
|
|
209
213
|
class: "basefn-spotlight__footer-key",
|
|
210
|
-
children: Xote.
|
|
214
|
+
children: Node$Xote.text("\u21b5")
|
|
211
215
|
}),
|
|
212
|
-
Xote.
|
|
216
|
+
Node$Xote.text("to select")
|
|
213
217
|
])
|
|
214
218
|
}),
|
|
215
|
-
|
|
219
|
+
XoteJSX$Xote.Elements.jsxs("span", {
|
|
216
220
|
class: "basefn-spotlight__footer-hint",
|
|
217
|
-
children:
|
|
218
|
-
|
|
221
|
+
children: XoteJSX$Xote.array([
|
|
222
|
+
XoteJSX$Xote.Elements.jsx("span", {
|
|
219
223
|
class: "basefn-spotlight__footer-key",
|
|
220
|
-
children: Xote.
|
|
224
|
+
children: Node$Xote.text("esc")
|
|
221
225
|
}),
|
|
222
|
-
Xote.
|
|
226
|
+
Node$Xote.text("to close")
|
|
223
227
|
])
|
|
224
228
|
})
|
|
225
229
|
])
|
|
@@ -64,16 +64,16 @@ let make = (
|
|
|
64
64
|
<div class="basefn-stepper__step-header" onClick={_ => handleStepClick(index, step.status)}>
|
|
65
65
|
<div class="basefn-stepper__step-indicator">
|
|
66
66
|
{switch step.status {
|
|
67
|
-
| Completed =>
|
|
68
|
-
| Error =>
|
|
69
|
-
| _ =>
|
|
67
|
+
| Completed => Node.text("\u2713")
|
|
68
|
+
| Error => Node.text("\u00d7")
|
|
69
|
+
| _ => Node.text(Int.toString(index + 1))
|
|
70
70
|
}}
|
|
71
71
|
</div>
|
|
72
72
|
<div class="basefn-stepper__step-content">
|
|
73
|
-
<div class="basefn-stepper__step-title"> {
|
|
73
|
+
<div class="basefn-stepper__step-title"> {Node.text(step.title)} </div>
|
|
74
74
|
{switch step.description {
|
|
75
75
|
| Some(desc) =>
|
|
76
|
-
<div class="basefn-stepper__step-description"> {
|
|
76
|
+
<div class="basefn-stepper__step-description"> {Node.text(desc)} </div>
|
|
77
77
|
| None => <> </>
|
|
78
78
|
}}
|
|
79
79
|
</div>
|
|
@@ -81,6 +81,6 @@ let make = (
|
|
|
81
81
|
<div class="basefn-stepper__connector" />
|
|
82
82
|
</div>
|
|
83
83
|
})
|
|
84
|
-
->
|
|
84
|
+
->Node.fragment}
|
|
85
85
|
</div>
|
|
86
86
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/
|
|
4
|
-
import * as Xote__JSX from "xote/src/Xote__JSX.res.mjs";
|
|
3
|
+
import * as Node$Xote from "xote/src/Node.res.mjs";
|
|
5
4
|
import * as Core__Option from "@rescript/core/src/Core__Option.res.mjs";
|
|
5
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
6
6
|
|
|
7
7
|
import './Basefn__Stepper.css'
|
|
8
8
|
;
|
|
@@ -34,33 +34,29 @@ function Basefn__Stepper(props) {
|
|
|
34
34
|
let clickableClass = clickable ? " basefn-stepper__step--clickable" : "";
|
|
35
35
|
return "basefn-stepper__step " + statusClass + clickableClass;
|
|
36
36
|
};
|
|
37
|
-
return
|
|
37
|
+
return XoteJSX$Xote.Elements.jsx("div", {
|
|
38
38
|
class: getStepperClass(),
|
|
39
|
-
children: Xote.
|
|
39
|
+
children: Node$Xote.fragment(props.steps.map((step, index) => {
|
|
40
40
|
let isClickable = Core__Option.isSome(onStepClick) && (step.status === "Completed" || step.status === "Active");
|
|
41
41
|
let match = step.status;
|
|
42
42
|
let tmp;
|
|
43
|
-
let exit = 0;
|
|
44
43
|
switch (match) {
|
|
45
44
|
case "Inactive" :
|
|
46
45
|
case "Active" :
|
|
47
|
-
|
|
46
|
+
tmp = Node$Xote.text((index + 1 | 0).toString());
|
|
48
47
|
break;
|
|
49
48
|
case "Completed" :
|
|
50
|
-
tmp = Xote.
|
|
49
|
+
tmp = Node$Xote.text("\u2713");
|
|
51
50
|
break;
|
|
52
51
|
case "Error" :
|
|
53
|
-
tmp = Xote.
|
|
52
|
+
tmp = Node$Xote.text("\u00d7");
|
|
54
53
|
break;
|
|
55
54
|
}
|
|
56
|
-
if (exit === 1) {
|
|
57
|
-
tmp = Xote.Component.text((index + 1 | 0).toString());
|
|
58
|
-
}
|
|
59
55
|
let desc = step.description;
|
|
60
|
-
return
|
|
56
|
+
return XoteJSX$Xote.Elements.jsxsKeyed("div", {
|
|
61
57
|
class: getStepClass(step.status, isClickable),
|
|
62
|
-
children:
|
|
63
|
-
|
|
58
|
+
children: XoteJSX$Xote.array([
|
|
59
|
+
XoteJSX$Xote.Elements.jsxs("div", {
|
|
64
60
|
class: "basefn-stepper__step-header",
|
|
65
61
|
onClick: param => {
|
|
66
62
|
let status = step.status;
|
|
@@ -76,27 +72,27 @@ function Basefn__Stepper(props) {
|
|
|
76
72
|
return;
|
|
77
73
|
}
|
|
78
74
|
},
|
|
79
|
-
children:
|
|
80
|
-
|
|
75
|
+
children: XoteJSX$Xote.array([
|
|
76
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
81
77
|
class: "basefn-stepper__step-indicator",
|
|
82
78
|
children: tmp
|
|
83
79
|
}),
|
|
84
|
-
|
|
80
|
+
XoteJSX$Xote.Elements.jsxs("div", {
|
|
85
81
|
class: "basefn-stepper__step-content",
|
|
86
|
-
children:
|
|
87
|
-
|
|
82
|
+
children: XoteJSX$Xote.array([
|
|
83
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
88
84
|
class: "basefn-stepper__step-title",
|
|
89
|
-
children: Xote.
|
|
85
|
+
children: Node$Xote.text(step.title)
|
|
90
86
|
}),
|
|
91
|
-
desc !== undefined ?
|
|
87
|
+
desc !== undefined ? XoteJSX$Xote.Elements.jsx("div", {
|
|
92
88
|
class: "basefn-stepper__step-description",
|
|
93
|
-
children: Xote.
|
|
94
|
-
}) :
|
|
89
|
+
children: Node$Xote.text(desc)
|
|
90
|
+
}) : XoteJSX$Xote.jsx(XoteJSX$Xote.jsxFragment, {})
|
|
95
91
|
])
|
|
96
92
|
})
|
|
97
93
|
])
|
|
98
94
|
}),
|
|
99
|
-
|
|
95
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
100
96
|
class: "basefn-stepper__connector"
|
|
101
97
|
})
|
|
102
98
|
])
|
|
@@ -55,7 +55,7 @@ let make = (
|
|
|
55
55
|
<div class="basefn-switch__slider" />
|
|
56
56
|
</div>
|
|
57
57
|
{switch label {
|
|
58
|
-
| Some(labelText) => <span class="basefn-switch-label"> {
|
|
58
|
+
| Some(labelText) => <span class="basefn-switch-label"> {Node.text(labelText)} </span>
|
|
59
59
|
| None => <> </>
|
|
60
60
|
}}
|
|
61
61
|
</label>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/
|
|
4
|
-
import * as
|
|
3
|
+
import * as Node$Xote from "xote/src/Node.res.mjs";
|
|
4
|
+
import * as Signal$Xote from "xote/src/Signal.res.mjs";
|
|
5
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
6
|
+
import * as Computed$Xote from "xote/src/Computed.res.mjs";
|
|
5
7
|
|
|
6
8
|
import './Basefn__Switch.css'
|
|
7
9
|
;
|
|
@@ -27,7 +29,7 @@ function Basefn__Switch(props) {
|
|
|
27
29
|
let size = __size !== undefined ? __size : "Md";
|
|
28
30
|
let handleClick = param => {
|
|
29
31
|
if (!disabled) {
|
|
30
|
-
Xote.
|
|
32
|
+
Signal$Xote.update(checked, prev => !prev);
|
|
31
33
|
if (onChange !== undefined) {
|
|
32
34
|
return onChange();
|
|
33
35
|
} else {
|
|
@@ -41,8 +43,8 @@ function Basefn__Switch(props) {
|
|
|
41
43
|
};
|
|
42
44
|
let getSwitchClass = () => {
|
|
43
45
|
let sizeClass = size !== "Md" ? " basefn-switch--" + sizeToString(size) : "";
|
|
44
|
-
Xote.
|
|
45
|
-
if (Xote.
|
|
46
|
+
Computed$Xote.make(() => {
|
|
47
|
+
if (Signal$Xote.get(checked)) {
|
|
46
48
|
return " basefn-switch--checked";
|
|
47
49
|
} else {
|
|
48
50
|
return "";
|
|
@@ -51,26 +53,26 @@ function Basefn__Switch(props) {
|
|
|
51
53
|
let disabledClass = disabled ? " basefn-switch--disabled" : "";
|
|
52
54
|
return "basefn-switch" + sizeClass + disabledClass;
|
|
53
55
|
};
|
|
54
|
-
return
|
|
56
|
+
return XoteJSX$Xote.Elements.jsxs("label", {
|
|
55
57
|
class: getWrapperClass(),
|
|
56
|
-
children:
|
|
57
|
-
|
|
58
|
-
class: Xote.
|
|
59
|
-
if (Xote.
|
|
58
|
+
children: XoteJSX$Xote.array([
|
|
59
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
60
|
+
class: Computed$Xote.make(() => getSwitchClass() + Signal$Xote.get(Computed$Xote.make(() => {
|
|
61
|
+
if (Signal$Xote.get(checked)) {
|
|
60
62
|
return " basefn-switch--checked";
|
|
61
63
|
} else {
|
|
62
64
|
return "";
|
|
63
65
|
}
|
|
64
66
|
}, undefined)), undefined),
|
|
65
67
|
onClick: handleClick,
|
|
66
|
-
children:
|
|
68
|
+
children: XoteJSX$Xote.Elements.jsx("div", {
|
|
67
69
|
class: "basefn-switch__slider"
|
|
68
70
|
})
|
|
69
71
|
}),
|
|
70
|
-
label !== undefined ?
|
|
72
|
+
label !== undefined ? XoteJSX$Xote.Elements.jsx("span", {
|
|
71
73
|
class: "basefn-switch-label",
|
|
72
|
-
children: Xote.
|
|
73
|
-
}) :
|
|
74
|
+
children: Node$Xote.text(label)
|
|
75
|
+
}) : XoteJSX$Xote.jsx(XoteJSX$Xote.jsxFragment, {})
|
|
74
76
|
])
|
|
75
77
|
});
|
|
76
78
|
}
|
|
@@ -5,7 +5,7 @@ open Xote
|
|
|
5
5
|
type tab = {
|
|
6
6
|
value: string,
|
|
7
7
|
label: string,
|
|
8
|
-
content:
|
|
8
|
+
content: Node.node,
|
|
9
9
|
disabled?: bool,
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -51,10 +51,10 @@ let make = (~tabs: array<tab>, ~defaultValue: option<string>=?) => {
|
|
|
51
51
|
onClick={_ => handleTabClick(tab.value, tab.disabled)}
|
|
52
52
|
disabled={tab.disabled->Option.getOr(false)}
|
|
53
53
|
>
|
|
54
|
-
{
|
|
54
|
+
{Node.text(tab.label)}
|
|
55
55
|
</button>
|
|
56
56
|
})
|
|
57
|
-
->
|
|
57
|
+
->Node.fragment}
|
|
58
58
|
</div>
|
|
59
59
|
<div class="basefn-tabs__content">
|
|
60
60
|
{
|
|
@@ -69,5 +69,5 @@ let make = (~tabs: array<tab>, ~defaultValue: option<string>=?) => {
|
|
|
69
69
|
]
|
|
70
70
|
})
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
Node.signalFragment(computed)
|
|
73
73
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/
|
|
4
|
-
import * as
|
|
3
|
+
import * as Node$Xote from "xote/src/Node.res.mjs";
|
|
4
|
+
import * as Signal$Xote from "xote/src/Signal.res.mjs";
|
|
5
5
|
import * as Core__Option from "@rescript/core/src/Core__Option.res.mjs";
|
|
6
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
7
|
+
import * as Computed$Xote from "xote/src/Computed.res.mjs";
|
|
6
8
|
|
|
7
9
|
import './Basefn__Tabs.css'
|
|
8
10
|
;
|
|
@@ -10,21 +12,21 @@ import './Basefn__Tabs.css'
|
|
|
10
12
|
function Basefn__Tabs(props) {
|
|
11
13
|
let defaultValue = props.defaultValue;
|
|
12
14
|
let tabs = props.tabs;
|
|
13
|
-
let activeTabSignal = Xote.
|
|
14
|
-
return Xote.
|
|
15
|
-
let activeValue = Xote.
|
|
16
|
-
return [
|
|
15
|
+
let activeTabSignal = Signal$Xote.make(defaultValue !== undefined ? defaultValue : Core__Option.getOr(Core__Option.map(tabs[0], tab => tab.value), ""), undefined, undefined);
|
|
16
|
+
return Node$Xote.signalFragment(Computed$Xote.make(() => {
|
|
17
|
+
let activeValue = Signal$Xote.get(activeTabSignal);
|
|
18
|
+
return [XoteJSX$Xote.Elements.jsxs("div", {
|
|
17
19
|
class: "basefn-tabs",
|
|
18
|
-
children:
|
|
19
|
-
|
|
20
|
+
children: XoteJSX$Xote.array([
|
|
21
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
20
22
|
class: "basefn-tabs__list",
|
|
21
|
-
children: Xote.
|
|
22
|
-
let isActive = Xote.
|
|
23
|
-
let className = Xote.
|
|
24
|
-
let activeClass = Xote.
|
|
23
|
+
children: Node$Xote.fragment(tabs.map(tab => {
|
|
24
|
+
let isActive = Computed$Xote.make(() => Signal$Xote.get(activeTabSignal) === tab.value, undefined);
|
|
25
|
+
let className = Computed$Xote.make(() => {
|
|
26
|
+
let activeClass = Signal$Xote.get(isActive) ? " basefn-tabs__trigger--active" : "";
|
|
25
27
|
return "basefn-tabs__trigger" + activeClass;
|
|
26
28
|
}, undefined);
|
|
27
|
-
return
|
|
29
|
+
return XoteJSX$Xote.Elements.jsxKeyed("button", {
|
|
28
30
|
class: className,
|
|
29
31
|
disabled: Core__Option.getOr(tab.disabled, false),
|
|
30
32
|
onClick: param => {
|
|
@@ -33,16 +35,16 @@ function Basefn__Tabs(props) {
|
|
|
33
35
|
if (disabled !== undefined && disabled) {
|
|
34
36
|
return;
|
|
35
37
|
} else {
|
|
36
|
-
return Xote.
|
|
38
|
+
return Signal$Xote.set(activeTabSignal, value);
|
|
37
39
|
}
|
|
38
40
|
},
|
|
39
|
-
children: Xote.
|
|
41
|
+
children: Node$Xote.text(tab.label)
|
|
40
42
|
}, tab.value, undefined);
|
|
41
43
|
}))
|
|
42
44
|
}),
|
|
43
|
-
|
|
45
|
+
XoteJSX$Xote.Elements.jsx("div", {
|
|
44
46
|
class: "basefn-tabs__content",
|
|
45
|
-
children: Core__Option.getOr(Core__Option.map(tabs.find(tab => tab.value === activeValue), tab => tab.content),
|
|
47
|
+
children: Core__Option.getOr(Core__Option.map(tabs.find(tab => tab.value === activeValue), tab => tab.content), XoteJSX$Xote.jsx(XoteJSX$Xote.jsxFragment, {}))
|
|
46
48
|
})
|
|
47
49
|
])
|
|
48
50
|
})];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/Xote.res.mjs";
|
|
4
|
-
import * as Xote__JSX from "xote/src/Xote__JSX.res.mjs";
|
|
5
3
|
import * as Basefn__Dom from "../Basefn__Dom.res.mjs";
|
|
4
|
+
import * as Signal$Xote from "xote/src/Signal.res.mjs";
|
|
5
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
6
6
|
|
|
7
7
|
import './Basefn__Textarea.css'
|
|
8
8
|
;
|
|
@@ -18,13 +18,13 @@ function Basefn__Textarea(props) {
|
|
|
18
18
|
let t = Basefn__Dom.target(e);
|
|
19
19
|
let v = t.value;
|
|
20
20
|
if (value.TAG === "Reactive") {
|
|
21
|
-
Xote.
|
|
21
|
+
Signal$Xote.set(value._0, v);
|
|
22
22
|
}
|
|
23
23
|
if (onInput !== undefined) {
|
|
24
24
|
return onInput(v);
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
|
-
return
|
|
27
|
+
return XoteJSX$Xote.Elements.jsx("textarea", {
|
|
28
28
|
class: "basefn-textarea",
|
|
29
29
|
value: value,
|
|
30
30
|
placeholder: placeholder,
|
|
@@ -23,7 +23,7 @@ let make = (~size: [#Sm | #Md | #Lg]=#Md) => {
|
|
|
23
23
|
<Basefn__Button
|
|
24
24
|
variant=Ghost onClick={handleClick} class={"basefn-theme-toggle"->ReactiveProp.static}
|
|
25
25
|
>
|
|
26
|
-
{
|
|
26
|
+
{Node.signalFragment(icon)}
|
|
27
27
|
</Basefn__Button>
|
|
28
28
|
</Basefn__Tooltip>
|
|
29
29
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Xote from "xote/src/
|
|
4
|
-
import * as Xote__JSX from "xote/src/Xote__JSX.res.mjs";
|
|
3
|
+
import * as Node$Xote from "xote/src/Node.res.mjs";
|
|
5
4
|
import * as Basefn__Dom from "../Basefn__Dom.res.mjs";
|
|
5
|
+
import * as Signal$Xote from "xote/src/Signal.res.mjs";
|
|
6
6
|
import * as Basefn__Icon from "./Basefn__Icon.res.mjs";
|
|
7
|
+
import * as XoteJSX$Xote from "xote/src/XoteJSX.res.mjs";
|
|
7
8
|
import * as Basefn__Theme from "../styles/Basefn__Theme.res.mjs";
|
|
9
|
+
import * as Computed$Xote from "xote/src/Computed.res.mjs";
|
|
8
10
|
import * as Basefn__Button from "./Basefn__Button.res.mjs";
|
|
9
11
|
import * as Basefn__Tooltip from "./Basefn__Tooltip.res.mjs";
|
|
12
|
+
import * as ReactiveProp$Xote from "xote/src/ReactiveProp.res.mjs";
|
|
10
13
|
|
|
11
14
|
import './Basefn__ThemeToggle.css'
|
|
12
15
|
;
|
|
@@ -17,24 +20,24 @@ function Basefn__ThemeToggle(props) {
|
|
|
17
20
|
Basefn__Dom.stopPropagation(e);
|
|
18
21
|
Basefn__Theme.toggleTheme();
|
|
19
22
|
};
|
|
20
|
-
let icon = Xote.
|
|
21
|
-
let match = Xote.
|
|
23
|
+
let icon = Computed$Xote.make(() => {
|
|
24
|
+
let match = Signal$Xote.get(Basefn__Theme.currentTheme);
|
|
22
25
|
if (match === "Light") {
|
|
23
|
-
return [
|
|
26
|
+
return [XoteJSX$Xote.jsx(Basefn__Icon.make, {
|
|
24
27
|
name: "Sun"
|
|
25
28
|
})];
|
|
26
29
|
} else {
|
|
27
|
-
return [
|
|
30
|
+
return [XoteJSX$Xote.jsx(Basefn__Icon.make, {
|
|
28
31
|
name: "Moon"
|
|
29
32
|
})];
|
|
30
33
|
}
|
|
31
34
|
}, undefined);
|
|
32
|
-
return
|
|
35
|
+
return XoteJSX$Xote.jsx(Basefn__Tooltip.make, {
|
|
33
36
|
content: "Toggle theme",
|
|
34
37
|
position: "Bottom",
|
|
35
|
-
children:
|
|
36
|
-
children: Xote.
|
|
37
|
-
class: Xote
|
|
38
|
+
children: XoteJSX$Xote.jsx(Basefn__Button.make, {
|
|
39
|
+
children: Node$Xote.signalFragment(icon),
|
|
40
|
+
class: ReactiveProp$Xote.$$static("basefn-theme-toggle"),
|
|
38
41
|
onClick: handleClick,
|
|
39
42
|
variant: "Ghost"
|
|
40
43
|
})
|