@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.
Files changed (256) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +43 -0
  3. package/dist/Accordion.cjs +1 -0
  4. package/dist/Accordion.d.ts +43 -0
  5. package/dist/Accordion.d.ts.map +1 -0
  6. package/dist/Accordion.js +71 -0
  7. package/dist/Accordion.test.d.ts +2 -0
  8. package/dist/Accordion.test.d.ts.map +1 -0
  9. package/dist/ActivityIndicator.cjs +1 -0
  10. package/dist/ActivityIndicator.d.ts +21 -0
  11. package/dist/ActivityIndicator.d.ts.map +1 -0
  12. package/dist/ActivityIndicator.js +133 -0
  13. package/dist/AlertDialog.cjs +1 -0
  14. package/dist/AlertDialog.d.ts +53 -0
  15. package/dist/AlertDialog.d.ts.map +1 -0
  16. package/dist/AlertDialog.js +76 -0
  17. package/dist/Badge.cjs +1 -0
  18. package/dist/Badge.d.ts +96 -0
  19. package/dist/Badge.d.ts.map +1 -0
  20. package/dist/Badge.js +238 -0
  21. package/dist/Badge.test.d.ts +2 -0
  22. package/dist/Badge.test.d.ts.map +1 -0
  23. package/dist/BottomSheet.cjs +1 -0
  24. package/dist/BottomSheet.d.ts +72 -0
  25. package/dist/BottomSheet.d.ts.map +1 -0
  26. package/dist/BottomSheet.js +132 -0
  27. package/dist/Button.cjs +1 -0
  28. package/dist/Button.d.ts +61 -0
  29. package/dist/Button.d.ts.map +1 -0
  30. package/dist/Button.js +251 -0
  31. package/dist/Checkbox.cjs +1 -0
  32. package/dist/Checkbox.d.ts +40 -0
  33. package/dist/Checkbox.d.ts.map +1 -0
  34. package/dist/Checkbox.js +84 -0
  35. package/dist/Checkbox.test.d.ts +2 -0
  36. package/dist/Checkbox.test.d.ts.map +1 -0
  37. package/dist/ColorPicker.cjs +1 -0
  38. package/dist/ColorPicker.d.ts +48 -0
  39. package/dist/ColorPicker.d.ts.map +1 -0
  40. package/dist/ColorPicker.js +256 -0
  41. package/dist/DebugPanel.cjs +1 -0
  42. package/dist/DebugPanel.d.ts +63 -0
  43. package/dist/DebugPanel.d.ts.map +1 -0
  44. package/dist/DebugPanel.js +116 -0
  45. package/dist/Dialog.cjs +1 -0
  46. package/dist/Dialog.d.ts +59 -0
  47. package/dist/Dialog.d.ts.map +1 -0
  48. package/dist/Dialog.js +142 -0
  49. package/dist/Divider.cjs +1 -0
  50. package/dist/Divider.d.ts +19 -0
  51. package/dist/Divider.d.ts.map +1 -0
  52. package/dist/Divider.js +15 -0
  53. package/dist/Divider.test.d.ts +2 -0
  54. package/dist/Divider.test.d.ts.map +1 -0
  55. package/dist/Dropdown.cjs +1 -0
  56. package/dist/Dropdown.d.ts +35 -0
  57. package/dist/Dropdown.d.ts.map +1 -0
  58. package/dist/Dropdown.js +222 -0
  59. package/dist/Icon.cjs +1 -0
  60. package/dist/Icon.d.ts +71 -0
  61. package/dist/Icon.d.ts.map +1 -0
  62. package/dist/Icon.js +57 -0
  63. package/dist/Icon.test.d.ts +2 -0
  64. package/dist/Icon.test.d.ts.map +1 -0
  65. package/dist/Image.cjs +1 -0
  66. package/dist/Image.d.ts +10 -0
  67. package/dist/Image.d.ts.map +1 -0
  68. package/dist/Image.js +18 -0
  69. package/dist/Joystick.cjs +1 -0
  70. package/dist/Joystick.d.ts +32 -0
  71. package/dist/Joystick.d.ts.map +1 -0
  72. package/dist/Joystick.js +185 -0
  73. package/dist/ListBox.cjs +1 -0
  74. package/dist/ListBox.d.ts +67 -0
  75. package/dist/ListBox.d.ts.map +1 -0
  76. package/dist/ListBox.js +104 -0
  77. package/dist/ListBox.test.d.ts +2 -0
  78. package/dist/ListBox.test.d.ts.map +1 -0
  79. package/dist/MenuButton.cjs +1 -0
  80. package/dist/MenuButton.d.ts +33 -0
  81. package/dist/MenuButton.d.ts.map +1 -0
  82. package/dist/MenuButton.js +63 -0
  83. package/dist/Modal.cjs +1 -0
  84. package/dist/Modal.d.ts +27 -0
  85. package/dist/Modal.d.ts.map +1 -0
  86. package/dist/Modal.js +174 -0
  87. package/dist/Modal.test.d.ts +2 -0
  88. package/dist/Modal.test.d.ts.map +1 -0
  89. package/dist/NineSlice.cjs +1 -0
  90. package/dist/NineSlice.d.ts +40 -0
  91. package/dist/NineSlice.d.ts.map +1 -0
  92. package/dist/NineSlice.js +314 -0
  93. package/dist/NineSlice.props.test.d.ts +2 -0
  94. package/dist/NineSlice.props.test.d.ts.map +1 -0
  95. package/dist/NineSlice.test.d.ts +2 -0
  96. package/dist/NineSlice.test.d.ts.map +1 -0
  97. package/dist/NineSliceButton.cjs +1 -0
  98. package/dist/NineSliceButton.d.ts +94 -0
  99. package/dist/NineSliceButton.d.ts.map +1 -0
  100. package/dist/NineSliceButton.js +61 -0
  101. package/dist/NineSliceButton.test.d.ts +2 -0
  102. package/dist/NineSliceButton.test.d.ts.map +1 -0
  103. package/dist/NumberInput.cjs +1 -0
  104. package/dist/NumberInput.d.ts +90 -0
  105. package/dist/NumberInput.d.ts.map +1 -0
  106. package/dist/NumberInput.js +222 -0
  107. package/dist/NumberInput.test.d.ts +2 -0
  108. package/dist/NumberInput.test.d.ts.map +1 -0
  109. package/dist/PalettePicker.cjs +1 -0
  110. package/dist/PalettePicker.d.ts +49 -0
  111. package/dist/PalettePicker.d.ts.map +1 -0
  112. package/dist/PalettePicker.js +152 -0
  113. package/dist/PalettePicker.test.d.ts +2 -0
  114. package/dist/PalettePicker.test.d.ts.map +1 -0
  115. package/dist/Popover.cjs +1 -0
  116. package/dist/Popover.d.ts +95 -0
  117. package/dist/Popover.d.ts.map +1 -0
  118. package/dist/Popover.js +267 -0
  119. package/dist/Portal.cjs +1 -0
  120. package/dist/Portal.d.ts +30 -0
  121. package/dist/Portal.d.ts.map +1 -0
  122. package/dist/Portal.js +64 -0
  123. package/dist/Portal.test.d.ts +2 -0
  124. package/dist/Portal.test.d.ts.map +1 -0
  125. package/dist/ProgressBar.cjs +1 -0
  126. package/dist/ProgressBar.d.ts +61 -0
  127. package/dist/ProgressBar.d.ts.map +1 -0
  128. package/dist/ProgressBar.js +80 -0
  129. package/dist/ProgressBar.test.d.ts +2 -0
  130. package/dist/ProgressBar.test.d.ts.map +1 -0
  131. package/dist/ProgressView.cjs +1 -0
  132. package/dist/ProgressView.d.ts +37 -0
  133. package/dist/ProgressView.d.ts.map +1 -0
  134. package/dist/ProgressView.js +71 -0
  135. package/dist/RadioButton.cjs +1 -0
  136. package/dist/RadioButton.d.ts +21 -0
  137. package/dist/RadioButton.d.ts.map +1 -0
  138. package/dist/RadioButton.js +53 -0
  139. package/dist/RadioGroup.cjs +1 -0
  140. package/dist/RadioGroup.d.ts +26 -0
  141. package/dist/RadioGroup.d.ts.map +1 -0
  142. package/dist/RadioGroup.js +32 -0
  143. package/dist/RatingBar.cjs +1 -0
  144. package/dist/RatingBar.d.ts +24 -0
  145. package/dist/RatingBar.d.ts.map +1 -0
  146. package/dist/RatingBar.js +84 -0
  147. package/dist/ScrollSlider.cjs +1 -0
  148. package/dist/ScrollSlider.d.ts +48 -0
  149. package/dist/ScrollSlider.d.ts.map +1 -0
  150. package/dist/ScrollSlider.js +93 -0
  151. package/dist/ScrollView.cjs +1 -0
  152. package/dist/ScrollView.d.ts +121 -0
  153. package/dist/ScrollView.d.ts.map +1 -0
  154. package/dist/ScrollView.js +541 -0
  155. package/dist/ScrollView.test.d.ts +2 -0
  156. package/dist/ScrollView.test.d.ts.map +1 -0
  157. package/dist/SegmentedControl.cjs +1 -0
  158. package/dist/SegmentedControl.d.ts +50 -0
  159. package/dist/SegmentedControl.d.ts.map +1 -0
  160. package/dist/SegmentedControl.js +201 -0
  161. package/dist/SegmentedControl.test.d.ts +2 -0
  162. package/dist/SegmentedControl.test.d.ts.map +1 -0
  163. package/dist/Sidebar.cjs +1 -0
  164. package/dist/Sidebar.d.ts +36 -0
  165. package/dist/Sidebar.d.ts.map +1 -0
  166. package/dist/Sidebar.js +122 -0
  167. package/dist/Slider.cjs +1 -0
  168. package/dist/Slider.d.ts +80 -0
  169. package/dist/Slider.d.ts.map +1 -0
  170. package/dist/Slider.js +233 -0
  171. package/dist/Tabs.cjs +1 -0
  172. package/dist/Tabs.d.ts +23 -0
  173. package/dist/Tabs.d.ts.map +1 -0
  174. package/dist/Tabs.js +101 -0
  175. package/dist/TextInput.cjs +17 -0
  176. package/dist/TextInput.d.ts +82 -0
  177. package/dist/TextInput.d.ts.map +1 -0
  178. package/dist/TextInput.js +441 -0
  179. package/dist/Toast.cjs +1 -0
  180. package/dist/Toast.d.ts +66 -0
  181. package/dist/Toast.d.ts.map +1 -0
  182. package/dist/Toast.js +188 -0
  183. package/dist/Toast.test.d.ts +2 -0
  184. package/dist/Toast.test.d.ts.map +1 -0
  185. package/dist/Toggle.cjs +1 -0
  186. package/dist/Toggle.d.ts +14 -0
  187. package/dist/Toggle.d.ts.map +1 -0
  188. package/dist/Toggle.js +135 -0
  189. package/dist/Toolbar.cjs +1 -0
  190. package/dist/Toolbar.d.ts +129 -0
  191. package/dist/Toolbar.d.ts.map +1 -0
  192. package/dist/Toolbar.js +159 -0
  193. package/dist/Toolbar.test.d.ts +2 -0
  194. package/dist/Toolbar.test.d.ts.map +1 -0
  195. package/dist/TransformOriginView.cjs +1 -0
  196. package/dist/TransformOriginView.d.ts +8 -0
  197. package/dist/TransformOriginView.d.ts.map +1 -0
  198. package/dist/TransformOriginView.js +38 -0
  199. package/dist/WheelPicker.cjs +1 -0
  200. package/dist/WheelPicker.d.ts +58 -0
  201. package/dist/WheelPicker.d.ts.map +1 -0
  202. package/dist/WheelPicker.js +167 -0
  203. package/dist/WrapText.cjs +1 -0
  204. package/dist/WrapText.d.ts +83 -0
  205. package/dist/WrapText.d.ts.map +1 -0
  206. package/dist/WrapText.js +93 -0
  207. package/dist/WrapText.test.d.ts +2 -0
  208. package/dist/WrapText.test.d.ts.map +1 -0
  209. package/dist/contrast-slot-map.d.ts +33 -0
  210. package/dist/contrast-slot-map.d.ts.map +1 -0
  211. package/dist/index.cjs +1 -0
  212. package/dist/index.d.ts +64 -0
  213. package/dist/index.d.ts.map +1 -0
  214. package/dist/index.js +54 -0
  215. package/dist/primitives/Image.cjs +1 -0
  216. package/dist/primitives/Image.d.ts +11 -0
  217. package/dist/primitives/Image.d.ts.map +1 -0
  218. package/dist/primitives/Image.js +7 -0
  219. package/dist/primitives/Sprite.cjs +1 -0
  220. package/dist/primitives/Sprite.d.ts +11 -0
  221. package/dist/primitives/Sprite.d.ts.map +1 -0
  222. package/dist/primitives/Sprite.js +7 -0
  223. package/dist/primitives/Text.cjs +1 -0
  224. package/dist/primitives/Text.d.ts +14 -0
  225. package/dist/primitives/Text.d.ts.map +1 -0
  226. package/dist/primitives/Text.js +15 -0
  227. package/dist/primitives/VectorDrawContent.cjs +1 -0
  228. package/dist/primitives/VectorDrawContent.d.ts +3 -0
  229. package/dist/primitives/VectorDrawContent.d.ts.map +1 -0
  230. package/dist/primitives/VectorDrawContent.js +7 -0
  231. package/dist/primitives/View.cjs +1 -0
  232. package/dist/primitives/View.d.ts +13 -0
  233. package/dist/primitives/View.d.ts.map +1 -0
  234. package/dist/primitives/View.js +7 -0
  235. package/dist/primitives/index.d.ts +13 -0
  236. package/dist/primitives/index.d.ts.map +1 -0
  237. package/dist/primitives/primitives.test.d.ts +2 -0
  238. package/dist/primitives/primitives.test.d.ts.map +1 -0
  239. package/dist/primitives.cjs +1 -0
  240. package/dist/primitives.d.ts +2 -0
  241. package/dist/primitives.js +6 -0
  242. package/dist/theme-defaults.cjs +1 -0
  243. package/dist/theme-defaults.d.ts +12 -0
  244. package/dist/theme-defaults.d.ts.map +1 -0
  245. package/dist/theme-defaults.js +1288 -0
  246. package/dist/theme-defaults.test.d.ts +2 -0
  247. package/dist/theme-defaults.test.d.ts.map +1 -0
  248. package/dist/theme-types.cjs +0 -0
  249. package/dist/theme-types.d.ts +708 -0
  250. package/dist/theme-types.d.ts.map +1 -0
  251. package/dist/theme-types.js +0 -0
  252. package/dist/useOverlayPresence.cjs +1 -0
  253. package/dist/useOverlayPresence.d.ts +24 -0
  254. package/dist/useOverlayPresence.d.ts.map +1 -0
  255. package/dist/useOverlayPresence.js +19 -0
  256. 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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"}