@number10/jsx-components 5.0.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/LICENSE +667 -0
- package/README.md +43 -0
- package/dist/Accordion.cjs +1 -0
- package/dist/Accordion.d.ts +43 -0
- package/dist/Accordion.d.ts.map +1 -0
- package/dist/Accordion.js +71 -0
- package/dist/Accordion.test.d.ts +2 -0
- package/dist/Accordion.test.d.ts.map +1 -0
- package/dist/ActivityIndicator.cjs +1 -0
- package/dist/ActivityIndicator.d.ts +21 -0
- package/dist/ActivityIndicator.d.ts.map +1 -0
- package/dist/ActivityIndicator.js +133 -0
- package/dist/AlertDialog.cjs +1 -0
- package/dist/AlertDialog.d.ts +53 -0
- package/dist/AlertDialog.d.ts.map +1 -0
- package/dist/AlertDialog.js +76 -0
- package/dist/Badge.cjs +1 -0
- package/dist/Badge.d.ts +96 -0
- package/dist/Badge.d.ts.map +1 -0
- package/dist/Badge.js +238 -0
- package/dist/Badge.test.d.ts +2 -0
- package/dist/Badge.test.d.ts.map +1 -0
- package/dist/BottomSheet.cjs +1 -0
- package/dist/BottomSheet.d.ts +72 -0
- package/dist/BottomSheet.d.ts.map +1 -0
- package/dist/BottomSheet.js +132 -0
- package/dist/Button.cjs +1 -0
- package/dist/Button.d.ts +61 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +251 -0
- package/dist/Checkbox.cjs +1 -0
- package/dist/Checkbox.d.ts +40 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +84 -0
- package/dist/Checkbox.test.d.ts +2 -0
- package/dist/Checkbox.test.d.ts.map +1 -0
- package/dist/ColorPicker.cjs +1 -0
- package/dist/ColorPicker.d.ts +48 -0
- package/dist/ColorPicker.d.ts.map +1 -0
- package/dist/ColorPicker.js +256 -0
- package/dist/DebugPanel.cjs +1 -0
- package/dist/DebugPanel.d.ts +63 -0
- package/dist/DebugPanel.d.ts.map +1 -0
- package/dist/DebugPanel.js +116 -0
- package/dist/Dialog.cjs +1 -0
- package/dist/Dialog.d.ts +59 -0
- package/dist/Dialog.d.ts.map +1 -0
- package/dist/Dialog.js +142 -0
- package/dist/Divider.cjs +1 -0
- package/dist/Divider.d.ts +19 -0
- package/dist/Divider.d.ts.map +1 -0
- package/dist/Divider.js +15 -0
- package/dist/Divider.test.d.ts +2 -0
- package/dist/Divider.test.d.ts.map +1 -0
- package/dist/Dropdown.cjs +1 -0
- package/dist/Dropdown.d.ts +35 -0
- package/dist/Dropdown.d.ts.map +1 -0
- package/dist/Dropdown.js +222 -0
- package/dist/Icon.cjs +1 -0
- package/dist/Icon.d.ts +71 -0
- package/dist/Icon.d.ts.map +1 -0
- package/dist/Icon.js +57 -0
- package/dist/Icon.test.d.ts +2 -0
- package/dist/Icon.test.d.ts.map +1 -0
- package/dist/Image.cjs +1 -0
- package/dist/Image.d.ts +10 -0
- package/dist/Image.d.ts.map +1 -0
- package/dist/Image.js +18 -0
- package/dist/Joystick.cjs +1 -0
- package/dist/Joystick.d.ts +32 -0
- package/dist/Joystick.d.ts.map +1 -0
- package/dist/Joystick.js +185 -0
- package/dist/ListBox.cjs +1 -0
- package/dist/ListBox.d.ts +67 -0
- package/dist/ListBox.d.ts.map +1 -0
- package/dist/ListBox.js +104 -0
- package/dist/ListBox.test.d.ts +2 -0
- package/dist/ListBox.test.d.ts.map +1 -0
- package/dist/MenuButton.cjs +1 -0
- package/dist/MenuButton.d.ts +33 -0
- package/dist/MenuButton.d.ts.map +1 -0
- package/dist/MenuButton.js +63 -0
- package/dist/Modal.cjs +1 -0
- package/dist/Modal.d.ts +27 -0
- package/dist/Modal.d.ts.map +1 -0
- package/dist/Modal.js +174 -0
- package/dist/Modal.test.d.ts +2 -0
- package/dist/Modal.test.d.ts.map +1 -0
- package/dist/NineSlice.cjs +1 -0
- package/dist/NineSlice.d.ts +40 -0
- package/dist/NineSlice.d.ts.map +1 -0
- package/dist/NineSlice.js +314 -0
- package/dist/NineSlice.props.test.d.ts +2 -0
- package/dist/NineSlice.props.test.d.ts.map +1 -0
- package/dist/NineSlice.test.d.ts +2 -0
- package/dist/NineSlice.test.d.ts.map +1 -0
- package/dist/NineSliceButton.cjs +1 -0
- package/dist/NineSliceButton.d.ts +94 -0
- package/dist/NineSliceButton.d.ts.map +1 -0
- package/dist/NineSliceButton.js +61 -0
- package/dist/NineSliceButton.test.d.ts +2 -0
- package/dist/NineSliceButton.test.d.ts.map +1 -0
- package/dist/NumberInput.cjs +1 -0
- package/dist/NumberInput.d.ts +90 -0
- package/dist/NumberInput.d.ts.map +1 -0
- package/dist/NumberInput.js +222 -0
- package/dist/NumberInput.test.d.ts +2 -0
- package/dist/NumberInput.test.d.ts.map +1 -0
- package/dist/PalettePicker.cjs +1 -0
- package/dist/PalettePicker.d.ts +49 -0
- package/dist/PalettePicker.d.ts.map +1 -0
- package/dist/PalettePicker.js +152 -0
- package/dist/PalettePicker.test.d.ts +2 -0
- package/dist/PalettePicker.test.d.ts.map +1 -0
- package/dist/Popover.cjs +1 -0
- package/dist/Popover.d.ts +95 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +267 -0
- package/dist/Portal.cjs +1 -0
- package/dist/Portal.d.ts +30 -0
- package/dist/Portal.d.ts.map +1 -0
- package/dist/Portal.js +64 -0
- package/dist/Portal.test.d.ts +2 -0
- package/dist/Portal.test.d.ts.map +1 -0
- package/dist/ProgressBar.cjs +1 -0
- package/dist/ProgressBar.d.ts +61 -0
- package/dist/ProgressBar.d.ts.map +1 -0
- package/dist/ProgressBar.js +80 -0
- package/dist/ProgressBar.test.d.ts +2 -0
- package/dist/ProgressBar.test.d.ts.map +1 -0
- package/dist/ProgressView.cjs +1 -0
- package/dist/ProgressView.d.ts +37 -0
- package/dist/ProgressView.d.ts.map +1 -0
- package/dist/ProgressView.js +71 -0
- package/dist/RadioButton.cjs +1 -0
- package/dist/RadioButton.d.ts +21 -0
- package/dist/RadioButton.d.ts.map +1 -0
- package/dist/RadioButton.js +53 -0
- package/dist/RadioGroup.cjs +1 -0
- package/dist/RadioGroup.d.ts +26 -0
- package/dist/RadioGroup.d.ts.map +1 -0
- package/dist/RadioGroup.js +32 -0
- package/dist/RatingBar.cjs +1 -0
- package/dist/RatingBar.d.ts +24 -0
- package/dist/RatingBar.d.ts.map +1 -0
- package/dist/RatingBar.js +84 -0
- package/dist/ScrollSlider.cjs +1 -0
- package/dist/ScrollSlider.d.ts +48 -0
- package/dist/ScrollSlider.d.ts.map +1 -0
- package/dist/ScrollSlider.js +93 -0
- package/dist/ScrollView.cjs +1 -0
- package/dist/ScrollView.d.ts +121 -0
- package/dist/ScrollView.d.ts.map +1 -0
- package/dist/ScrollView.js +541 -0
- package/dist/ScrollView.test.d.ts +2 -0
- package/dist/ScrollView.test.d.ts.map +1 -0
- package/dist/SegmentedControl.cjs +1 -0
- package/dist/SegmentedControl.d.ts +50 -0
- package/dist/SegmentedControl.d.ts.map +1 -0
- package/dist/SegmentedControl.js +201 -0
- package/dist/SegmentedControl.test.d.ts +2 -0
- package/dist/SegmentedControl.test.d.ts.map +1 -0
- package/dist/Sidebar.cjs +1 -0
- package/dist/Sidebar.d.ts +36 -0
- package/dist/Sidebar.d.ts.map +1 -0
- package/dist/Sidebar.js +122 -0
- package/dist/Slider.cjs +1 -0
- package/dist/Slider.d.ts +80 -0
- package/dist/Slider.d.ts.map +1 -0
- package/dist/Slider.js +233 -0
- package/dist/Tabs.cjs +1 -0
- package/dist/Tabs.d.ts +23 -0
- package/dist/Tabs.d.ts.map +1 -0
- package/dist/Tabs.js +101 -0
- package/dist/TextInput.cjs +17 -0
- package/dist/TextInput.d.ts +82 -0
- package/dist/TextInput.d.ts.map +1 -0
- package/dist/TextInput.js +441 -0
- package/dist/Toast.cjs +1 -0
- package/dist/Toast.d.ts +66 -0
- package/dist/Toast.d.ts.map +1 -0
- package/dist/Toast.js +188 -0
- package/dist/Toast.test.d.ts +2 -0
- package/dist/Toast.test.d.ts.map +1 -0
- package/dist/Toggle.cjs +1 -0
- package/dist/Toggle.d.ts +14 -0
- package/dist/Toggle.d.ts.map +1 -0
- package/dist/Toggle.js +135 -0
- package/dist/Toolbar.cjs +1 -0
- package/dist/Toolbar.d.ts +129 -0
- package/dist/Toolbar.d.ts.map +1 -0
- package/dist/Toolbar.js +159 -0
- package/dist/Toolbar.test.d.ts +2 -0
- package/dist/Toolbar.test.d.ts.map +1 -0
- package/dist/TransformOriginView.cjs +1 -0
- package/dist/TransformOriginView.d.ts +8 -0
- package/dist/TransformOriginView.d.ts.map +1 -0
- package/dist/TransformOriginView.js +38 -0
- package/dist/WheelPicker.cjs +1 -0
- package/dist/WheelPicker.d.ts +58 -0
- package/dist/WheelPicker.d.ts.map +1 -0
- package/dist/WheelPicker.js +167 -0
- package/dist/WrapText.cjs +1 -0
- package/dist/WrapText.d.ts +83 -0
- package/dist/WrapText.d.ts.map +1 -0
- package/dist/WrapText.js +93 -0
- package/dist/WrapText.test.d.ts +2 -0
- package/dist/WrapText.test.d.ts.map +1 -0
- package/dist/contrast-slot-map.d.ts +33 -0
- package/dist/contrast-slot-map.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/primitives/Image.cjs +1 -0
- package/dist/primitives/Image.d.ts +11 -0
- package/dist/primitives/Image.d.ts.map +1 -0
- package/dist/primitives/Image.js +7 -0
- package/dist/primitives/Sprite.cjs +1 -0
- package/dist/primitives/Sprite.d.ts +11 -0
- package/dist/primitives/Sprite.d.ts.map +1 -0
- package/dist/primitives/Sprite.js +7 -0
- package/dist/primitives/Text.cjs +1 -0
- package/dist/primitives/Text.d.ts +14 -0
- package/dist/primitives/Text.d.ts.map +1 -0
- package/dist/primitives/Text.js +15 -0
- package/dist/primitives/VectorDrawContent.cjs +1 -0
- package/dist/primitives/VectorDrawContent.d.ts +3 -0
- package/dist/primitives/VectorDrawContent.d.ts.map +1 -0
- package/dist/primitives/VectorDrawContent.js +7 -0
- package/dist/primitives/View.cjs +1 -0
- package/dist/primitives/View.d.ts +13 -0
- package/dist/primitives/View.d.ts.map +1 -0
- package/dist/primitives/View.js +7 -0
- package/dist/primitives/index.d.ts +13 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/primitives.test.d.ts +2 -0
- package/dist/primitives/primitives.test.d.ts.map +1 -0
- package/dist/primitives.cjs +1 -0
- package/dist/primitives.d.ts +2 -0
- package/dist/primitives.js +6 -0
- package/dist/theme-defaults.cjs +1 -0
- package/dist/theme-defaults.d.ts +12 -0
- package/dist/theme-defaults.d.ts.map +1 -0
- package/dist/theme-defaults.js +1288 -0
- package/dist/theme-defaults.test.d.ts +2 -0
- package/dist/theme-defaults.test.d.ts.map +1 -0
- package/dist/theme-types.cjs +0 -0
- package/dist/theme-types.d.ts +708 -0
- package/dist/theme-types.d.ts.map +1 -0
- package/dist/theme-types.js +0 -0
- package/dist/useOverlayPresence.cjs +1 -0
- package/dist/useOverlayPresence.d.ts +24 -0
- package/dist/useOverlayPresence.d.ts.map +1 -0
- package/dist/useOverlayPresence.js +19 -0
- package/package.json +83 -0
package/dist/Slider.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Text as e } from "./primitives/Text.js";
|
|
2
|
+
import { VectorDrawContent as t } from "./primitives/VectorDrawContent.js";
|
|
3
|
+
import { View as n } from "./primitives/View.js";
|
|
4
|
+
import "./primitives.js";
|
|
5
|
+
import { KNOWN_COMPONENTS as r, getGlobalThemeDefaults as i, mergeThemes as a, resolveComponentTheme as o, useEffect as s, useMemo as c, useRef as l, useState as u, useTheme as d } from "@number10/jsx-core";
|
|
6
|
+
import { jsx as f, jsxs as p } from "@number10/jsx-core/jsx-runtime";
|
|
7
|
+
//#region src/Slider.tsx
|
|
8
|
+
function m(e) {
|
|
9
|
+
let { size: n, color: r, borderColor: i, borderWidth: a = 0, isDragging: o, dragScale: s = 1.1 } = e, c = o ? s : 1, l = n / 2;
|
|
10
|
+
return /* @__PURE__ */ f(t, {
|
|
11
|
+
scale: c,
|
|
12
|
+
onDraw: (e) => {
|
|
13
|
+
a > 0 && i !== void 0 && e.fillStyle(i, 1).fillCircle(0, 0, l), e.fillStyle(r, 1).fillCircle(0, 0, l - a);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function h(t) {
|
|
18
|
+
let h = d(), g = t.theme ? a(h ?? {}, t.theme) : h, { props: _, nestedTheme: v } = o({
|
|
19
|
+
componentName: "Slider",
|
|
20
|
+
globalTheme: i(),
|
|
21
|
+
localTheme: g,
|
|
22
|
+
knownComponents: r
|
|
23
|
+
}), y = t.mode === "range", ee = t.defaultValue ?? t.min ?? 0, te = t.defaultValue ?? [t.min ?? 0, t.max ?? 100], [ne, b] = u(y ? te : ee), x = t.value !== void 0, S = x ? t.value : ne, C = t.min ?? 0, w = t.max ?? 100, T = y ? 0 : S, E = y ? S : [C, w], D = t.step ?? 1, O = t.orientation ?? "horizontal", k = t.reverse ?? !1, A = t.disabled ?? !1, j = t.snap ?? !0, M = t.minDistance ?? D, N = t.trackLength ?? _.trackLength ?? 200, P = _.trackHeight ?? 6, F = _.thumbSize ?? 20, [I, re] = u(!1), [L, ie] = u(!1), ae = l(0), oe = l(0), R = (e) => Math.max(C, Math.min(w, e)), se = (e) => C + Math.round((e - C) / D) * D, z = (e) => w === C ? 0 : (e - C) / (w - C), ce = (e, t) => {
|
|
24
|
+
let n = k ? t - e : e;
|
|
25
|
+
return C + Math.max(0, Math.min(1, n / t)) * (w - C);
|
|
26
|
+
}, B = (e) => {
|
|
27
|
+
let t = z(e) * N;
|
|
28
|
+
return k ? N - t : t;
|
|
29
|
+
}, V = (y ? E[0] : T) ?? 0, H = (y ? E[1] : 0) ?? 0, U = B(V), W = y ? B(H) : 0, [G, K] = u(U), [q, le] = u(W);
|
|
30
|
+
s(() => {
|
|
31
|
+
I || K(U);
|
|
32
|
+
}, [U, I]), s(() => {
|
|
33
|
+
!L && y && le(W);
|
|
34
|
+
}, [
|
|
35
|
+
W,
|
|
36
|
+
y,
|
|
37
|
+
L
|
|
38
|
+
]);
|
|
39
|
+
let ue = c(() => {
|
|
40
|
+
if (!t.marks) return [];
|
|
41
|
+
if (Array.isArray(t.marks)) return t.marks;
|
|
42
|
+
let e = [];
|
|
43
|
+
for (let t = C; t <= w; t += D) e.push({ value: t });
|
|
44
|
+
return e;
|
|
45
|
+
}, [
|
|
46
|
+
t.marks,
|
|
47
|
+
C,
|
|
48
|
+
w,
|
|
49
|
+
D
|
|
50
|
+
]), de = (e) => {
|
|
51
|
+
if (A) return;
|
|
52
|
+
e.stopPropagation();
|
|
53
|
+
let n = ce(O === "horizontal" ? e.localX ?? 0 : e.localY ?? 0, N), r = R(j ? se(n) : n);
|
|
54
|
+
if (y) {
|
|
55
|
+
let e = Math.abs(r - E[0]) <= Math.abs(r - E[1]) ? [r, E[1]] : [E[0], r];
|
|
56
|
+
if (e[1] - e[0] < M) return;
|
|
57
|
+
x || b(e), t.onChange?.(e);
|
|
58
|
+
} else x || b(r), t.onChange?.(r);
|
|
59
|
+
}, fe = (e) => (n) => {
|
|
60
|
+
if (A) return;
|
|
61
|
+
n.stopPropagation();
|
|
62
|
+
let r = e === 0, i = r ? I : L, a = r ? re : ie, o = r ? ae : oe, s = r ? K : le, c = r ? G : q;
|
|
63
|
+
if (n.state === "start") {
|
|
64
|
+
a(!0), o.current = c, y ? t.onChangeStart?.(E) : t.onChangeStart?.(T);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (n.state === "end") {
|
|
68
|
+
a(!1), y ? t.onChangeEnd?.(E) : t.onChangeEnd?.(T);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!i) return;
|
|
72
|
+
let l = O === "horizontal" ? n.dx ?? 0 : n.dy ?? 0;
|
|
73
|
+
o.current += l;
|
|
74
|
+
let u = Math.max(0, Math.min(N, o.current)), d = ce(u, N);
|
|
75
|
+
if (d = j ? se(d) : d, y) {
|
|
76
|
+
let e = r ? [d, E[1]] : [E[0], d];
|
|
77
|
+
r ? (e[0] = R(e[0]), e[1] - e[0] < M && (e[0] = e[1] - M), e[0] = R(e[0])) : (e[1] = R(e[1]), e[1] - e[0] < M && (e[1] = e[0] + M), e[1] = R(e[1]));
|
|
78
|
+
let n = B(r ? e[0] : e[1]);
|
|
79
|
+
s(j ? n : u), x || b(e), t.onChange?.(e);
|
|
80
|
+
} else {
|
|
81
|
+
let e = R(d), n = B(e);
|
|
82
|
+
s(j ? n : u), x || b(e), t.onChange?.(e);
|
|
83
|
+
}
|
|
84
|
+
}, pe = t.formatValue ?? ((e) => e.toString()), J = O === "horizontal", me = A ? _.disabledAlpha ?? .4 : t.alpha ?? 1, Y = F + 8, he = {
|
|
85
|
+
x: t.valueLabelOffset1?.x ?? t.valueLabelOffset?.x ?? (y ? J ? k ? Y : -Y : Y : J && k ? -Y : Y),
|
|
86
|
+
y: t.valueLabelOffset1?.y ?? t.valueLabelOffset?.y ?? (y ? J ? -8 : k ? Y : -Y : J ? -8 : k ? Y : -8)
|
|
87
|
+
}, ge = {
|
|
88
|
+
x: t.valueLabelOffset2?.x ?? (y && J && k ? -Y : Y),
|
|
89
|
+
y: t.valueLabelOffset2?.y ?? (y ? J ? -8 : k ? -Y : Y : -8)
|
|
90
|
+
}, X = y ? z(E[0]) : 0, Z = z(y ? E[1] : T), Q = k ? N - Z * N : X * N, $ = (k ? N - X * N : Z * N) - Q, _e = (t, r) => /* @__PURE__ */ f(n, {
|
|
91
|
+
x: r.x - 50,
|
|
92
|
+
y: r.y - 25,
|
|
93
|
+
width: 100,
|
|
94
|
+
height: 50,
|
|
95
|
+
alignItems: "center",
|
|
96
|
+
justifyContent: "center",
|
|
97
|
+
children: /* @__PURE__ */ f(n, {
|
|
98
|
+
backgroundColor: _.valueLabel?.backgroundColor ?? 0,
|
|
99
|
+
padding: _.valueLabel?.padding ?? {
|
|
100
|
+
left: 6,
|
|
101
|
+
right: 6,
|
|
102
|
+
top: 4,
|
|
103
|
+
bottom: 4
|
|
104
|
+
},
|
|
105
|
+
cornerRadius: _.valueLabel?.cornerRadius ?? 4,
|
|
106
|
+
children: /* @__PURE__ */ f(e, {
|
|
107
|
+
text: pe(t),
|
|
108
|
+
style: _.valueLabel?.textStyle ?? {
|
|
109
|
+
color: "#ffffff",
|
|
110
|
+
fontSize: "12px"
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
});
|
|
115
|
+
return /* @__PURE__ */ f(n, {
|
|
116
|
+
direction: J ? "column" : "row",
|
|
117
|
+
alignItems: "center",
|
|
118
|
+
justifyContent: "center",
|
|
119
|
+
gap: 8,
|
|
120
|
+
alpha: me,
|
|
121
|
+
width: t.width,
|
|
122
|
+
height: t.height,
|
|
123
|
+
theme: v,
|
|
124
|
+
children: /* @__PURE__ */ p(n, {
|
|
125
|
+
width: J ? N : P,
|
|
126
|
+
height: J ? P : N,
|
|
127
|
+
backgroundColor: _.trackColor ?? 4473924,
|
|
128
|
+
cornerRadius: _.trackBorderRadius ?? P / 2,
|
|
129
|
+
direction: "stack",
|
|
130
|
+
enableGestures: !A,
|
|
131
|
+
onTouch: de,
|
|
132
|
+
...t.onTooltip === void 0 ? {} : { onTooltip: t.onTooltip },
|
|
133
|
+
theme: v,
|
|
134
|
+
children: [
|
|
135
|
+
t.renderTrack ? /* @__PURE__ */ f(n, { children: t.renderTrack(X, y ? Z : void 0) }) : /* @__PURE__ */ f(n, {
|
|
136
|
+
x: J ? Q : 0,
|
|
137
|
+
y: J ? 0 : Q,
|
|
138
|
+
width: J ? $ : P,
|
|
139
|
+
height: J ? P : $,
|
|
140
|
+
backgroundColor: _.trackFilledColor ?? 5090295,
|
|
141
|
+
cornerRadius: _.trackBorderRadius ?? P / 2
|
|
142
|
+
}),
|
|
143
|
+
ue.map((e) => {
|
|
144
|
+
let t = z(e.value), r = k ? N - t * N : t * N, i = e.style?.height ?? _.markHeight ?? 8, a = e.style?.width ?? _.markWidth ?? 2, o = e.style?.color ?? _.markColor ?? 8947848;
|
|
145
|
+
return /* @__PURE__ */ f(n, {
|
|
146
|
+
x: J ? r - a / 2 : P / 2 - a / 2,
|
|
147
|
+
y: J ? P / 2 - i / 2 : r - a / 2,
|
|
148
|
+
width: J ? a : i,
|
|
149
|
+
height: J ? i : a,
|
|
150
|
+
backgroundColor: o,
|
|
151
|
+
children: e.label
|
|
152
|
+
}, e.value);
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ p(n, {
|
|
155
|
+
x: J ? G : 0,
|
|
156
|
+
y: J ? 0 : G,
|
|
157
|
+
direction: "stack",
|
|
158
|
+
children: [
|
|
159
|
+
/* @__PURE__ */ f(n, {
|
|
160
|
+
x: -F,
|
|
161
|
+
y: -F,
|
|
162
|
+
width: F * 2,
|
|
163
|
+
height: F * 2,
|
|
164
|
+
enableGestures: !A,
|
|
165
|
+
onTouchMove: fe(0)
|
|
166
|
+
}),
|
|
167
|
+
/* @__PURE__ */ f(n, {
|
|
168
|
+
x: J ? 0 : P / 2,
|
|
169
|
+
y: J ? P / 2 : 0,
|
|
170
|
+
width: F,
|
|
171
|
+
height: F,
|
|
172
|
+
direction: "stack",
|
|
173
|
+
children: t.renderThumb ? t.renderThumb(V, I, 0) : /* @__PURE__ */ f(m, {
|
|
174
|
+
size: F,
|
|
175
|
+
color: _.thumbColor ?? 5090295,
|
|
176
|
+
borderColor: _.thumbBorderColor ?? 16777215,
|
|
177
|
+
borderWidth: _.thumbBorderWidth ?? 2,
|
|
178
|
+
isDragging: I,
|
|
179
|
+
dragScale: _.thumbDragScale ?? 1.1
|
|
180
|
+
})
|
|
181
|
+
}),
|
|
182
|
+
t.showValue ? _e(V, he) : null
|
|
183
|
+
]
|
|
184
|
+
}),
|
|
185
|
+
y ? /* @__PURE__ */ p(n, {
|
|
186
|
+
x: J ? q : 0,
|
|
187
|
+
y: J ? 0 : q,
|
|
188
|
+
direction: "stack",
|
|
189
|
+
children: [
|
|
190
|
+
/* @__PURE__ */ f(n, {
|
|
191
|
+
x: -F,
|
|
192
|
+
y: -F,
|
|
193
|
+
width: F * 2,
|
|
194
|
+
height: F * 2,
|
|
195
|
+
enableGestures: !A,
|
|
196
|
+
onTouchMove: fe(1)
|
|
197
|
+
}),
|
|
198
|
+
/* @__PURE__ */ f(n, {
|
|
199
|
+
x: J ? 0 : P / 2,
|
|
200
|
+
y: J ? P / 2 : 0,
|
|
201
|
+
width: F,
|
|
202
|
+
height: F,
|
|
203
|
+
direction: "stack",
|
|
204
|
+
children: t.renderThumb ? t.renderThumb(H, L, 1) : /* @__PURE__ */ f(m, {
|
|
205
|
+
size: F,
|
|
206
|
+
color: _.thumbColor ?? 5090295,
|
|
207
|
+
borderColor: _.thumbBorderColor ?? 16777215,
|
|
208
|
+
borderWidth: _.thumbBorderWidth ?? 2,
|
|
209
|
+
isDragging: L,
|
|
210
|
+
dragScale: _.thumbDragScale ?? 1.1
|
|
211
|
+
})
|
|
212
|
+
}),
|
|
213
|
+
t.showValue ? _e(H, ge) : null
|
|
214
|
+
]
|
|
215
|
+
}) : null
|
|
216
|
+
]
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
function g(e) {
|
|
221
|
+
return /* @__PURE__ */ f(h, {
|
|
222
|
+
...e,
|
|
223
|
+
mode: "single"
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
function _(e) {
|
|
227
|
+
return /* @__PURE__ */ f(h, {
|
|
228
|
+
...e,
|
|
229
|
+
mode: "range"
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//#endregion
|
|
233
|
+
export { _ as RangeSlider, g as Slider };
|
package/dist/Tabs.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./primitives/View.cjs`);require(`./primitives.cjs`);const t=require(`./ScrollView.cjs`);let n=require(`@number10/jsx-core`),r=require(`@number10/jsx-core/jsx-runtime`);function i(e){return null}function a(e){return null}var o=e=>e?(Array.isArray(e)?e.flat(1/0):[e]).filter(e=>!!e&&typeof e==`object`&&`type`in e):[];function s(e,t){if(e){if(typeof e==`function`){e(t);return}e.current=t}}function c(e){return Math.max(0,e?.__getLayoutSize?.().height??0)}function l(l){let u=(0,n.useTheme)(),d=l.theme?(0,n.mergeThemes)(u??{},l.theme):u,{props:f,nestedTheme:p}=(0,n.resolveComponentTheme)({componentName:`Tabs`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:d,knownComponents:n.KNOWN_COMPONENTS}),[m,h]=(0,n.useState)(l.defaultIndex??0),g=l.activeIndex??m,{tabs:_,panels:v}=(0,n.useMemo)(()=>{let e=o(l.children),t=[],n=[];for(let r of e)r.type===i&&t.push(r),r.type===a&&n.push(r);return{tabs:t,panels:n}},[l.children]),y=Math.min(_.length,v.length),b=y>0?Math.min(Math.max(g,0),y-1):0,x=e=>{l.activeIndex===void 0&&h(e),e!==b&&l.onChange?.(e)},S=f.tabListStyle??{},C=f.tabStyle??{},w=f.tabActiveStyle??{},T=f.tabDisabledStyle??{},E=f.panelStyle??{},{activeIndex:D,children:O,defaultIndex:k,onChange:A,scrollableTabs:j,tabListScrollProps:M,theme:N,...P}=l,F=v[b],I=F?.props??{},L=F?.children??I.children,{children:R,...z}=I,B=l.scrollableTabs??!0,V=l.tabListScrollProps??{},[H,U]=(0,n.useState)(0),[W,G]=(0,n.useState)(0),K=(0,n.useRef)(null);(0,n.useLayoutEffect)(()=>{let e=!1;return n.DeferredLayoutQueue.defer(()=>{if(e)return;let t=c(K.current);t>0&&U(e=>Math.abs(e-t)<.5?e:t)}),()=>{e=!0}},[l.children,B,W]);let q=(0,r.jsx)(e.View,{ref:e=>s(K,e),...S,direction:`row`,width:B?`auto`:`100%`,children:_.slice(0,y).map((t,n)=>{let i=t.props??{},{disabled:a,enableGestures:o,onTouch:s,...c}=i,l=t.children??i.children,u=n===b,d={...C,...u?w:{},...a?T:{},...c},f=t.__key??i.key??n;return(0,r.jsx)(e.View,{...d,enableGestures:!a&&(o??!0),onTouch:e=>{a||(x(n),s?.(e))},children:l},f)})});return(0,r.jsxs)(e.View,{...P,...f,direction:`column`,theme:p,children:[B?(0,r.jsx)(t.ScrollView,{width:`100%`,height:H+W,showHorizontalSlider:`auto`,showVerticalSlider:!1,sliderSize:`nano`,theme:p,onSliderSize:e=>G(e.height),...V,children:q}):q,F?(0,r.jsx)(e.View,{...E,...z,children:L}):null]})}exports.Tab=i,exports.TabPanel=a,exports.Tabs=l;
|
package/dist/Tabs.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChildrenType, VNodeLike, ViewPrimitivePropsComplete } from '@number10/jsx-core';
|
|
2
|
+
import { ScrollViewProps } from './ScrollView';
|
|
3
|
+
import { PortableComponentPartialTheme } from './theme-types';
|
|
4
|
+
export interface TabProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
|
|
5
|
+
children?: ChildrenType;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface TabPanelProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
|
|
9
|
+
children?: ChildrenType;
|
|
10
|
+
}
|
|
11
|
+
export interface TabsProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
|
|
12
|
+
children?: ChildrenType;
|
|
13
|
+
activeIndex?: number;
|
|
14
|
+
defaultIndex?: number;
|
|
15
|
+
onChange?: (index: number) => void;
|
|
16
|
+
scrollableTabs?: boolean;
|
|
17
|
+
tabListScrollProps?: Omit<ScrollViewProps, 'children'>;
|
|
18
|
+
theme?: PortableComponentPartialTheme<'Tabs'>;
|
|
19
|
+
}
|
|
20
|
+
export declare function Tab(_props: TabProps): VNodeLike;
|
|
21
|
+
export declare function TabPanel(_props: TabPanelProps): VNodeLike;
|
|
22
|
+
export declare function Tabs(props: TabsProps): VNodeLike;
|
|
23
|
+
//# sourceMappingURL=Tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../src/Tabs.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;GAEG;AACH,OAAO,KAAK,EACV,YAAY,EAIZ,SAAS,EACT,0BAA0B,EAC3B,MAAM,oBAAoB,CAAA;AAa3B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAE/D,OAAO,KAAK,EAAE,6BAA6B,EAAa,MAAM,eAAe,CAAA;AAE7E,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;IAC5E,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;IACjF,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;IAC7E,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,kBAAkB,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;IACtD,KAAK,CAAC,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAE/C;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAEzD;AAuBD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAsJhD"}
|
package/dist/Tabs.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { View as e } from "./primitives/View.js";
|
|
2
|
+
import "./primitives.js";
|
|
3
|
+
import { ScrollView as t } from "./ScrollView.js";
|
|
4
|
+
import { DeferredLayoutQueue as n, KNOWN_COMPONENTS as r, getGlobalThemeDefaults as i, mergeThemes as a, resolveComponentTheme as o, useLayoutEffect as s, useMemo as c, useRef as l, useState as u, useTheme as d } from "@number10/jsx-core";
|
|
5
|
+
import { jsx as f, jsxs as p } from "@number10/jsx-core/jsx-runtime";
|
|
6
|
+
//#region src/Tabs.tsx
|
|
7
|
+
function m(e) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
function h(e) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
var g = (e) => e ? (Array.isArray(e) ? e.flat(Infinity) : [e]).filter((e) => !!e && typeof e == "object" && "type" in e) : [];
|
|
14
|
+
function _(e, t) {
|
|
15
|
+
if (e) {
|
|
16
|
+
if (typeof e == "function") {
|
|
17
|
+
e(t);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
e.current = t;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function v(e) {
|
|
24
|
+
return Math.max(0, e?.__getLayoutSize?.().height ?? 0);
|
|
25
|
+
}
|
|
26
|
+
function y(y) {
|
|
27
|
+
let b = d(), x = y.theme ? a(b ?? {}, y.theme) : b, { props: S, nestedTheme: C } = o({
|
|
28
|
+
componentName: "Tabs",
|
|
29
|
+
globalTheme: i(),
|
|
30
|
+
localTheme: x,
|
|
31
|
+
knownComponents: r
|
|
32
|
+
}), [w, T] = u(y.defaultIndex ?? 0), E = y.activeIndex ?? w, { tabs: D, panels: O } = c(() => {
|
|
33
|
+
let e = g(y.children), t = [], n = [];
|
|
34
|
+
for (let r of e) r.type === m && t.push(r), r.type === h && n.push(r);
|
|
35
|
+
return {
|
|
36
|
+
tabs: t,
|
|
37
|
+
panels: n
|
|
38
|
+
};
|
|
39
|
+
}, [y.children]), k = Math.min(D.length, O.length), A = k > 0 ? Math.min(Math.max(E, 0), k - 1) : 0, j = (e) => {
|
|
40
|
+
y.activeIndex === void 0 && T(e), e !== A && y.onChange?.(e);
|
|
41
|
+
}, M = S.tabListStyle ?? {}, N = S.tabStyle ?? {}, P = S.tabActiveStyle ?? {}, F = S.tabDisabledStyle ?? {}, I = S.panelStyle ?? {}, { activeIndex: L, children: R, defaultIndex: z, onChange: B, scrollableTabs: ee, tabListScrollProps: te, theme: ne, ...V } = y, H = O[A], U = H?.props ?? {}, W = H?.children ?? U.children, { children: re, ...G } = U, K = y.scrollableTabs ?? !0, q = y.tabListScrollProps ?? {}, [J, Y] = u(0), [X, Z] = u(0), Q = l(null);
|
|
42
|
+
s(() => {
|
|
43
|
+
let e = !1;
|
|
44
|
+
return n.defer(() => {
|
|
45
|
+
if (e) return;
|
|
46
|
+
let t = v(Q.current);
|
|
47
|
+
t > 0 && Y((e) => Math.abs(e - t) < .5 ? e : t);
|
|
48
|
+
}), () => {
|
|
49
|
+
e = !0;
|
|
50
|
+
};
|
|
51
|
+
}, [
|
|
52
|
+
y.children,
|
|
53
|
+
K,
|
|
54
|
+
X
|
|
55
|
+
]);
|
|
56
|
+
let $ = /* @__PURE__ */ f(e, {
|
|
57
|
+
ref: (e) => _(Q, e),
|
|
58
|
+
...M,
|
|
59
|
+
direction: "row",
|
|
60
|
+
width: K ? "auto" : "100%",
|
|
61
|
+
children: D.slice(0, k).map((t, n) => {
|
|
62
|
+
let r = t.props ?? {}, { disabled: i, enableGestures: a, onTouch: o, ...s } = r, c = t.children ?? r.children, l = n === A, u = {
|
|
63
|
+
...N,
|
|
64
|
+
...l ? P : {},
|
|
65
|
+
...i ? F : {},
|
|
66
|
+
...s
|
|
67
|
+
}, d = t.__key ?? r.key ?? n;
|
|
68
|
+
return /* @__PURE__ */ f(e, {
|
|
69
|
+
...u,
|
|
70
|
+
enableGestures: !i && (a ?? !0),
|
|
71
|
+
onTouch: (e) => {
|
|
72
|
+
i || (j(n), o?.(e));
|
|
73
|
+
},
|
|
74
|
+
children: c
|
|
75
|
+
}, d);
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
return /* @__PURE__ */ p(e, {
|
|
79
|
+
...V,
|
|
80
|
+
...S,
|
|
81
|
+
direction: "column",
|
|
82
|
+
theme: C,
|
|
83
|
+
children: [K ? /* @__PURE__ */ f(t, {
|
|
84
|
+
width: "100%",
|
|
85
|
+
height: J + X,
|
|
86
|
+
showHorizontalSlider: "auto",
|
|
87
|
+
showVerticalSlider: !1,
|
|
88
|
+
sliderSize: "nano",
|
|
89
|
+
theme: C,
|
|
90
|
+
onSliderSize: (e) => Z(e.height),
|
|
91
|
+
...q,
|
|
92
|
+
children: $
|
|
93
|
+
}) : $, H ? /* @__PURE__ */ f(e, {
|
|
94
|
+
...I,
|
|
95
|
+
...G,
|
|
96
|
+
children: W
|
|
97
|
+
}) : null]
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
export { m as Tab, h as TabPanel, y as Tabs };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const e=require(`./primitives/Text.cjs`),t=require(`./primitives/View.cjs`);require(`./primitives.cjs`);let n=require(`@number10/jsx-core`),r=require(`@number10/jsx-core/jsx-runtime`);var i=null;function a(){if(i||=document.createElement(`canvas`).getContext(`2d`)??null,!i)throw Error(`Canvas 2D context unavailable`);return i}function o(e,t){let n=t?.fontFamily??`Arial, sans-serif`,r=t?.fontSize??`16px`;e.font=[t?.fontStyle??``,t?.fontWeight??``,r,n].filter(Boolean).join(` `)}function s(e,t){let n=a();o(n,t);let r=[];for(let t=0;t<e.length;t++){let i=e.charAt(t);i===`
|
|
2
|
+
`?r.push({char:i,width:0}):r.push({char:i,width:n.measureText(i).width})}return r}function c(e,t=1.2){let n=e?.fontSize??`16px`,r=typeof n==`number`?`${n}px`:n;return Math.round((parseFloat(r)||16)*t)}function l(e,t,n,r,i,a,o){let l=s(e,n),u=c(n,o),d=[],f=0,p=0,m=0,h=[],g=()=>{for(let e of h){let t=d[e.layoutIdx];t&&(t.y=p)}h=[],f=0,p+=u,m++};for(let e=0;e<l.length;e++){let n=l[e];if(!n)continue;if(n.char===`
|
|
3
|
+
`){d.push({char:n.char,x:f,y:p,width:0,height:u,lineIndex:m}),g();continue}if(i&&h.length>0&&f+n.width>t)if(a){let e=-1;for(let t=h.length-1;t>=0;t--)if(h[t]?.m.char===` `){e=t;break}if(e>=0){let t=h.slice(0,e+1),n=h.slice(e+1);h=t,g(),f=0;for(let e of n){let t=d[e.layoutIdx];t&&(t.x=f,t.lineIndex=m),f+=e.m.width+r,h.push(e)}}else g()}else g();let o=d.length;d.push({char:n.char,x:f,y:p,width:n.width,height:u,lineIndex:m}),h.push({m:n,layoutIdx:o}),f+=n.width+r}for(let e of h){let t=d[e.layoutIdx];t&&(t.y=p)}return d}function u(){let e=document.createElement(`input`);return e.type=`text`,e.setAttribute(`autocomplete`,`off`),e.setAttribute(`autocorrect`,`off`),e.setAttribute(`autocapitalize`,`off`),e.setAttribute(`spellcheck`,`false`),Object.assign(e.style,{position:`fixed`,top:`-9999px`,left:`-9999px`,width:`1px`,height:`1px`,opacity:`0`,pointerEvents:`none`}),document.body.appendChild(e),e}function d(i){let a=(0,n.useTheme)(),o=i.theme?(0,n.mergeThemes)(a??{},i.theme):a,{props:s,nestedTheme:d}=(0,n.resolveComponentTheme)({componentName:`TextInput`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:o,knownComponents:n.KNOWN_COMPONENTS}),f=i.placeholder??s.placeholder,p=i.disabled??!1,m=i.maxLength??s.maxLength,h=i.multiline??s.multiline??!1,g=i.textStyle??s.textStyle??{fontFamily:`Arial, sans-serif`,fontSize:`16px`,color:`#ffffff`},ee=i.placeholderStyle??s.placeholderStyle??{...g,color:`#666666`},_=i.charSpacing??s.charSpacing??0,v=i.lineHeight??s.lineHeight??1.2,y=i.maxLines??s.maxLines,te=i.textOverflow??s.textOverflow??`clip`,ne=i.wordWrap??s.wordWrap??!0,re=i.cursorColor??s.cursorColor??16777215,ie=i.cursorWidth??s.cursorWidth??2,b=i.cursorBlinkSpeed??s.cursorBlinkSpeed??530,ae=i.selectionColor??s.selectionColor??4886754,oe=i.selectionAlpha??s.selectionAlpha??.3,se=i.focusedBorderColor??s.focusedBorderColor,ce=i.disabledBackgroundColor??s.disabledBackgroundColor,le=i.disabledBorderColor??s.disabledBorderColor,ue=i.disabledAlpha??s.disabledAlpha??.6,de=i.password??!1,fe=i.passwordChar??`•`,x=i.value!==void 0,[pe,me]=(0,n.useState)(i.value??``),S=x?i.value??``:pe,[C,w]=(0,n.useState)(S.length),[T,E]=(0,n.useState)(-1),[D,O]=(0,n.useState)(!1),[he,k]=(0,n.useState)(!0),A=(0,n.useRef)(S),j=(0,n.useRef)(C),M=(0,n.useRef)(T),ge=(0,n.useRef)(D);A.current=S,j.current=C,M.current=T,ge.current=D;let N=(0,n.useRef)(null),_e=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(!D){k(!1);return}k(!0);let e=setInterval(()=>{k(e=>!e)},b);return()=>clearInterval(e)},[D,b]),(0,n.useEffect)(()=>{let e=u();return N.current=e,()=>{e.remove(),N.current=null}},[]),(0,n.useEffect)(()=>{let e=N.current;if(!e)return;let t=e=>{if(e.key===`Enter`){if(e.preventDefault(),!h||e.ctrlKey||e.metaKey){i.onSubmit?.(A.current);return}if(h){I(`
|
|
4
|
+
`);return}}if(e.key===`Backspace`){e.preventDefault(),ve();return}if(e.key===`Delete`){e.preventDefault(),ye();return}if((e.ctrlKey||e.metaKey)&&e.key===`c`){e.preventDefault(),be();return}if((e.ctrlKey||e.metaKey)&&e.key===`x`){e.preventDefault(),xe();return}if((e.ctrlKey||e.metaKey)&&e.key===`v`){e.preventDefault(),Se();return}if(e.key===`ArrowLeft`){e.preventDefault(),L(-1,e.shiftKey);return}if(e.key===`ArrowRight`){e.preventDefault(),L(1,e.shiftKey);return}if(e.key===`ArrowUp`){e.preventDefault(),R(-1,e.shiftKey);return}if(e.key===`ArrowDown`){e.preventDefault(),R(1,e.shiftKey);return}if(e.key===`Home`){e.preventDefault(),k(!0),j.current=0,w(0),e.shiftKey||(M.current=-1,E(-1));return}if(e.key===`End`){e.preventDefault(),k(!0);let t=A.current.length;j.current=t,w(t),e.shiftKey||(M.current=-1,E(-1));return}if(e.key===`a`&&(e.ctrlKey||e.metaKey)){e.preventDefault(),k(!0),M.current=0,E(0);let t=A.current.length;j.current=t,w(t);return}e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),I(e.key))},n=()=>{O(!0),i.onFocus?.()},r=()=>{O(!1),E(-1),i.onBlur?.()};return e.addEventListener(`keydown`,t),e.addEventListener(`focus`,n),e.addEventListener(`blur`,r),()=>{e.removeEventListener(`keydown`,t),e.removeEventListener(`focus`,n),e.removeEventListener(`blur`,r)}},[h]);let P=e=>{x||me(e),i.onChange?.(e)},F=(e,t,n=-1)=>{j.current=t,M.current=n,w(t),E(n),P(e)},I=e=>{let t=A.current,n=j.current,r=M.current;if(k(!0),r>=0){let i=Math.min(r,n),a=Math.max(r,n),o=t.slice(0,i)+e+t.slice(a);if(m!==void 0&&o.length>m||e===`
|
|
5
|
+
`&&y!==void 0&&o.split(`
|
|
6
|
+
`).length>y)return;F(o,i+1)}else{let r=t.slice(0,n)+e+t.slice(n);if(m!==void 0&&r.length>m||e===`
|
|
7
|
+
`&&y!==void 0&&r.split(`
|
|
8
|
+
`).length>y)return;F(r,n+1)}},ve=()=>{let e=A.current,t=j.current,n=M.current;if(n>=0){let r=Math.min(n,t),i=Math.max(n,t);F(e.slice(0,r)+e.slice(i),r)}else t>0&&F(e.slice(0,t-1)+e.slice(t),t-1)},ye=()=>{let e=A.current,t=j.current,n=M.current;if(n>=0){let r=Math.min(n,t),i=Math.max(n,t);F(e.slice(0,r)+e.slice(i),r)}else t<e.length&&P(e.slice(0,t)+e.slice(t+1))},L=(e,t)=>{let n=j.current,r=M.current,i=A.current.length;if(k(!0),t){r<0&&(E(n),M.current=n);let t=Math.max(0,Math.min(i,n+e));j.current=t,w(t)}else{M.current=-1,E(-1);let t=Math.max(0,Math.min(i,n+e));j.current=t,w(t)}},R=(e,t)=>{let n=j.current,r=M.current,i=A.current.length,{visibleChars:a,charLayout:o,totalLines:s,charSpacing:c}=De.current,l=n<=0?0:n>=a.length?s-1:a[n]?.lineIndex??0,u=Math.max(0,Math.min(s-1,l+e));if(u===l)return;k(!0);let d=n>0&&n<=a.length?a[n-1]:void 0,f=d&&d.char!==`
|
|
9
|
+
`?d.x+d.width+c:0,p=a.filter(e=>e.char!==`
|
|
10
|
+
`&&e.lineIndex===u),m;if(p.length===0){m=0;for(let e=0;e<a.length;e++){let t=a[e];if(t&&t.lineIndex>=u){m=e;break}m=e+1}}else{let e=0,t=1/0;for(let n=0;n<=p.length;n++){let r=n<p.length?p[n]:void 0,i=p[p.length-1],a=r?r.x+r.width/2:i?i.x+i.width+c:0,o=Math.abs(f-a);o<t&&(t=o,e=n)}let n=e<p.length?p[e]:void 0,r=p[p.length-1],a=n?o.indexOf(n):r?o.indexOf(r)+1:0;m=Math.min(a,i)}t?r<0&&(E(n),M.current=n):(M.current=-1,E(-1)),j.current=m,w(m)},z=()=>{let e=M.current,t=j.current;if(e<0)return``;let n=Math.min(e,t),r=Math.max(e,t);return A.current.slice(n,r)},be=()=>{let e=z();e&&navigator.clipboard.writeText(e).catch(()=>{})},xe=()=>{let e=z();if(e){navigator.clipboard.writeText(e).catch(()=>{});let t=M.current,n=j.current,r=Math.min(t,n),i=Math.max(t,n),a=A.current;F(a.slice(0,r)+a.slice(i),r)}},Se=()=>{navigator.clipboard.readText().then(e=>{if(!e)return;let t=h?e.replace(/\r\n/g,`
|
|
11
|
+
`).replace(/\r/g,`
|
|
12
|
+
`):e.replace(/[\r\n]/g,` `),n=A.current,r=j.current,i=M.current,a,o;if(i>=0){let e=Math.min(i,r),t=Math.max(i,r);a=e,o=n.slice(0,e)+n.slice(t)}else a=r,o=n;let s=t;if(m!==void 0){let e=m-o.length;if(e<=0)return;s=s.slice(0,e)}F(o.slice(0,a)+s+o.slice(a),a+s.length)}).catch(()=>{})},B=s.paddingLeft??s.padding??12,V=i.width??s.width??300,H=S.length===0&&!!f&&!D,U=H?f??``:S,Ce=de&&!H?fe.repeat(U.length):U,W=H?ee:g,we=s.paddingRight??s.padding??12,G=Math.max(1,typeof V==`number`?V-B-we:280),K=l(Ce,Math.max(1,G),W,_,h,ne,v),q=K;if(y!==void 0&&!H&&((K.length>0?K[K.length-1]:void 0)?.lineIndex??0)>=y&&(q=K.filter(e=>e.lineIndex<y),te===`ellipsis`&&q.length>0&&U.length>q.length)){let e=Math.max(0,q.length-3);q=[...q.slice(0,e),{char:`.`,x:0,y:0,width:0,height:0,lineIndex:y-1},{char:`.`,x:0,y:0,width:0,height:0,lineIndex:y-1},{char:`.`,x:0,y:0,width:0,height:0,lineIndex:y-1}]}let J=c(W,v),Y=q.length>0?q[q.length-1]:void 0,Te=Y?.char===`
|
|
13
|
+
`,X=Y?Y.lineIndex+1+ +!!Te:1,Ee=X*J,De=(0,n.useRef)({visibleChars:q,charLayout:K,totalLines:X,charSpacing:_,lineH:J});De.current={visibleChars:q,charLayout:K,totalLines:X,charSpacing:_,lineH:J};let Oe=(C<q.length?q[C]:void 0)?.lineIndex??X-1,Z=C>0&&C<=q.length?q[C-1]:void 0,ke=Z?.char===`
|
|
14
|
+
`?0:Z?Z.x+Z.width+_:0,Q=T>=0?Math.min(T,C):-1,$=T>=0?Math.max(T,C):-1,Ae=()=>{p||(k(!0),N.current?.focus())};return(0,r.jsx)(t.View,{ref:_e,direction:`row`,alignItems:`start`,width:i.width??s.width??300,height:i.height??s.height,backgroundColor:i.backgroundColor??(p?ce??s.backgroundColor:s.backgroundColor),borderColor:i.borderColor??(D?se??s.focusedBorderColor??s.borderColor:p?le??s.borderColor:s.borderColor),borderWidth:i.borderWidth??(D?Math.max(2,s.borderWidth??1):s.borderWidth),cornerRadius:i.cornerRadius??s.cornerRadius??4,padding:i.padding??s.padding??8,alpha:i.alpha??(p?ue:1),enableGestures:!p,onTouch:e=>{if(p)return;if(Ae(),k(!0),H){j.current=0,M.current=-1,w(0),E(-1);return}let t=e.localX-B,n=e.localY-(s.padding??8),r=Math.max(0,Math.min(X-1,Math.floor(n/J))),i=q.filter(e=>e.char!==`
|
|
15
|
+
`&&e.lineIndex===r);if(i.length===0){let e=0;for(let t=0;t<q.length;t++){let n=q[t];if(n&&n.lineIndex>=r){e=t;break}e=t+1}j.current=e,M.current=-1,w(e),E(-1);return}let a=0,o=1/0;for(let e=0;e<=i.length;e++){let n=e<i.length?i[e]:void 0,r=i[i.length-1],s=n?n.x+n.width/2:r?r.x+r.width+_:0,c=Math.abs(t-s);c<o&&(o=c,a=e)}let c=a<i.length?i[a]:void 0,l=i[i.length-1],u=c?K.indexOf(c):l?K.indexOf(l)+1:0,d=Math.min(u,S.length);j.current=d,M.current=-1,w(d),E(-1)},overflow:`hidden`,theme:d,children:(0,r.jsxs)(t.View,{width:G,height:Ee,overflow:`hidden`,direction:`stack`,children:[q.filter(e=>e.char!==`
|
|
16
|
+
`).map((t,n)=>(0,r.jsx)(e.Text,{x:t.x,y:t.y,text:t.char,style:{color:W.color??`#ffffff`,...W.fontSize===void 0?{}:{fontSize:W.fontSize},...W.fontFamily===void 0?{}:{fontFamily:W.fontFamily},...W.fontStyle===void 0?{}:{fontStyle:W.fontStyle}}},`c-${n}`)),Q>=0&&$>Q&&q.filter(e=>e.char!==`
|
|
17
|
+
`).map((e,n)=>{let i=K.indexOf(e);return i<Q||i>=$?null:(0,r.jsx)(t.View,{x:e.x,y:e.y,width:e.width+2,height:J,backgroundColor:ae,backgroundAlpha:oe},`sel-${n}`)}),D&&he&&(0,r.jsx)(t.View,{x:ke,y:Oe*J,width:ie,height:J,backgroundColor:re})]})})}exports.TextInput=d;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { PortableTextStyle, SizeValue, VNodeLike } from '@number10/jsx-core';
|
|
2
|
+
import { PortableComponentPartialTheme } from './theme-types';
|
|
3
|
+
export interface TextInputProps {
|
|
4
|
+
/** Unique key for VDOM identification. */
|
|
5
|
+
key?: string | number | undefined;
|
|
6
|
+
/** Controlled input value. */
|
|
7
|
+
value?: string;
|
|
8
|
+
/** Placeholder text when empty and not focused. */
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
/** Disable input interaction. */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** Maximum character length. */
|
|
13
|
+
maxLength?: number;
|
|
14
|
+
/** Enable multi-line input. */
|
|
15
|
+
multiline?: boolean;
|
|
16
|
+
/** Text style for input characters. */
|
|
17
|
+
textStyle?: PortableTextStyle;
|
|
18
|
+
/** Text style for placeholder. */
|
|
19
|
+
placeholderStyle?: PortableTextStyle;
|
|
20
|
+
/** Spacing between characters in px. */
|
|
21
|
+
charSpacing?: number;
|
|
22
|
+
/** Line height multiplier (multiline only, default 1.2). */
|
|
23
|
+
lineHeight?: number;
|
|
24
|
+
/** Maximum visible lines (multiline only). */
|
|
25
|
+
maxLines?: number;
|
|
26
|
+
/** Text overflow behaviour when maxLines reached. */
|
|
27
|
+
textOverflow?: 'clip' | 'ellipsis';
|
|
28
|
+
/** Word wrap at spaces (multiline only, default true). */
|
|
29
|
+
wordWrap?: boolean;
|
|
30
|
+
/** Cursor colour. */
|
|
31
|
+
cursorColor?: number;
|
|
32
|
+
/** Cursor width in px. */
|
|
33
|
+
cursorWidth?: number;
|
|
34
|
+
/** Cursor blink speed in ms (default 530). */
|
|
35
|
+
cursorBlinkSpeed?: number;
|
|
36
|
+
/** Selection background colour. */
|
|
37
|
+
selectionColor?: number;
|
|
38
|
+
/** Selection background alpha. */
|
|
39
|
+
selectionAlpha?: number;
|
|
40
|
+
/** Border colour when focused. */
|
|
41
|
+
focusedBorderColor?: number;
|
|
42
|
+
/** Background colour when disabled. */
|
|
43
|
+
disabledBackgroundColor?: number;
|
|
44
|
+
/** Border colour when disabled. */
|
|
45
|
+
disabledBorderColor?: number;
|
|
46
|
+
/** Alpha when disabled (default 0.6). */
|
|
47
|
+
disabledAlpha?: number;
|
|
48
|
+
/** Explicit width. */
|
|
49
|
+
width?: SizeValue | undefined;
|
|
50
|
+
/** Explicit height. */
|
|
51
|
+
height?: SizeValue | undefined;
|
|
52
|
+
/** Minimum height (multiline auto-grows to this). */
|
|
53
|
+
minHeight?: SizeValue;
|
|
54
|
+
/** Mask input characters (password mode). */
|
|
55
|
+
password?: boolean;
|
|
56
|
+
/** Password mask character (default '•'). */
|
|
57
|
+
passwordChar?: string;
|
|
58
|
+
/** Called when value changes. */
|
|
59
|
+
onChange?: (value: string) => void;
|
|
60
|
+
/** Called when input receives focus. */
|
|
61
|
+
onFocus?: () => void;
|
|
62
|
+
/** Called when input loses focus. */
|
|
63
|
+
onBlur?: () => void;
|
|
64
|
+
/** Called on Enter (single-line) or Ctrl+Enter (multi-line). */
|
|
65
|
+
onSubmit?: (value: string) => void;
|
|
66
|
+
/** Theme overrides. */
|
|
67
|
+
theme?: PortableComponentPartialTheme<'TextInput'>;
|
|
68
|
+
/** Background color. */
|
|
69
|
+
backgroundColor?: number;
|
|
70
|
+
/** Corner radius. */
|
|
71
|
+
cornerRadius?: number;
|
|
72
|
+
/** Border color. */
|
|
73
|
+
borderColor?: number;
|
|
74
|
+
/** Border width. */
|
|
75
|
+
borderWidth?: number;
|
|
76
|
+
/** Padding (number or EdgeInsets). */
|
|
77
|
+
padding?: number;
|
|
78
|
+
/** Alpha / opacity. */
|
|
79
|
+
alpha?: number;
|
|
80
|
+
}
|
|
81
|
+
export declare function TextInput(props: TextInputProps): VNodeLike;
|
|
82
|
+
//# sourceMappingURL=TextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../src/TextInput.tsx"],"names":[],"mappings":"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"}
|