@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
@@ -0,0 +1,37 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ import { ProgressBarProps } from './ProgressBar';
3
+ import { PortableComponentPartialTheme } from './theme-types';
4
+ export interface ProgressViewLabels {
5
+ cancel?: string;
6
+ loading?: string;
7
+ }
8
+ export interface ProgressViewProps {
9
+ /** Unique key for VDOM identification */
10
+ key?: string | number | undefined;
11
+ /** Current progress value (determinate mode). */
12
+ value?: number;
13
+ /** Minimum value used for normalization (default 0). */
14
+ min?: number;
15
+ /** Maximum value used for normalization (default 100). */
16
+ max?: number;
17
+ /** Switch to indeterminate ActivityIndicator when true. */
18
+ indeterminate?: boolean;
19
+ /** Optional label above the bar. */
20
+ label?: string;
21
+ /** Show percentage text next to the bar. */
22
+ showPercentage?: boolean;
23
+ /** Show a cancel button below the bar. */
24
+ showCancel?: boolean;
25
+ /** Called when the cancel button is clicked. */
26
+ onCancel?: () => void;
27
+ /** Localized labels. */
28
+ labels?: ProgressViewLabels;
29
+ /** Props forwarded to the underlying ProgressBar. */
30
+ progressBarProps?: Omit<ProgressBarProps, 'value' | 'min' | 'max' | 'label' | 'showValue' | 'labelPosition' | 'labelStyle' | 'theme'>;
31
+ /** Theme overrides. */
32
+ theme?: PortableComponentPartialTheme<'ProgressView'>;
33
+ /** Width */
34
+ width?: import('@number10/jsx-core').SizeValue | undefined;
35
+ }
36
+ export declare function ProgressView(props: ProgressViewProps): VNodeLike;
37
+ //# sourceMappingURL=ProgressView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressView.d.ts","sourceRoot":"","sources":["../src/ProgressView.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAUnD,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAElE,OAAO,KAAK,EAAE,6BAA6B,EAAqB,MAAM,eAAe,CAAA;AAIrF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACjC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,wBAAwB;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,IAAI,CACrB,gBAAgB,EAChB,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,YAAY,GAAG,OAAO,CAC3F,CAAA;IACD,uBAAuB;IACvB,KAAK,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAA;IACrD,YAAY;IACZ,KAAK,CAAC,EAAE,OAAO,oBAAoB,EAAE,SAAS,GAAG,SAAS,CAAA;CAC3D;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAiGhE"}
@@ -0,0 +1,71 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { View as t } from "./primitives/View.js";
3
+ import "./primitives.js";
4
+ import { Button as n } from "./Button.js";
5
+ import { ActivityIndicator as r } from "./ActivityIndicator.js";
6
+ import { ProgressBar as i } from "./ProgressBar.js";
7
+ import { KNOWN_COMPONENTS as a, getGlobalThemeDefaults as o, mergeThemes as s, resolveComponentTheme as c, useTheme as l } from "@number10/jsx-core";
8
+ import { jsx as u, jsxs as d } from "@number10/jsx-core/jsx-runtime";
9
+ //#region src/ProgressView.tsx
10
+ function f(f) {
11
+ let { value: p, min: m = 0, max: h = 100, indeterminate: g = !1, label: _, showPercentage: v = !1, showCancel: y = !1, onCancel: b, labels: x, progressBarProps: S, theme: C, ...w } = f, T = l(), E = C ? s(T ?? {}, C) : T, { props: D, nestedTheme: O } = c({
12
+ componentName: "ProgressView",
13
+ globalTheme: o(),
14
+ localTheme: E,
15
+ knownComponents: a
16
+ }), k = {
17
+ ...D.labels ?? {},
18
+ ...x ?? {}
19
+ }, A = D.gap ?? 8, j = D.barHeight ?? 24, M = D.labelStyle ?? {
20
+ color: "#e0e7ff",
21
+ fontSize: "14px"
22
+ }, N = D.percentageStyle ?? {
23
+ color: "#9fb3c8",
24
+ fontSize: "13px"
25
+ }, P = p === void 0 ? void 0 : Math.round((p - m) / (h - m) * 100);
26
+ return /* @__PURE__ */ d(t, {
27
+ direction: "column",
28
+ gap: A,
29
+ width: D.width ?? "fill",
30
+ ...w,
31
+ theme: O,
32
+ children: [
33
+ (_ || v) && !g ? /* @__PURE__ */ d(t, {
34
+ direction: "row",
35
+ justifyContent: "space-between",
36
+ width: "fill",
37
+ children: [_ ? /* @__PURE__ */ u(e, {
38
+ text: _,
39
+ style: M
40
+ }) : /* @__PURE__ */ u(t, {}), v && P !== void 0 ? /* @__PURE__ */ u(e, {
41
+ text: `${P}%`,
42
+ style: N
43
+ }) : null]
44
+ }) : null,
45
+ g ? /* @__PURE__ */ u(r, {
46
+ ..._ || k.loading ? { label: _ ?? k.loading } : {},
47
+ theme: O
48
+ }) : /* @__PURE__ */ u(i, {
49
+ value: p ?? 0,
50
+ min: m,
51
+ max: h,
52
+ height: j,
53
+ width: "fill",
54
+ ...S,
55
+ theme: O
56
+ }),
57
+ y && b ? /* @__PURE__ */ u(t, {
58
+ alignItems: "center",
59
+ width: "fill",
60
+ children: /* @__PURE__ */ u(n, {
61
+ variant: "ghost",
62
+ size: D.cancelButtonSize ?? "small",
63
+ onClick: b,
64
+ children: /* @__PURE__ */ u(e, { text: k.cancel ?? "Cancel" })
65
+ })
66
+ }) : null
67
+ ]
68
+ });
69
+ }
70
+ //#endregion
71
+ export { f as ProgressView };
@@ -0,0 +1 @@
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`);function i(i){let a=(0,n.useTheme)(),o=i.theme?(0,n.mergeThemes)(a??{},i.theme):a,{props:s,nestedTheme:c}=(0,n.resolveComponentTheme)({componentName:`RadioButton`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:o,knownComponents:n.KNOWN_COMPONENTS}),l=s.size??18,u=s.innerSize??Math.max(6,Math.round(l*.45)),d=u*.5,f=s.borderWidth??Math.max(2,Math.round(l*.11)),p=i.selected??!1,m=i.disabled??!1,h=s.disabledAlpha??.5,g=i.labelPosition??s.labelPosition??`right`,_=s.selectedColor??2201331,v=s.color??7697781,y=p?_:v,b=s.backgroundColor,x=s.gap??8,S=g===`none`?null:(0,r.jsx)(e.Text,{text:i.label,style:s.labelStyle,alpha:m?h:1});return(0,r.jsxs)(t.View,{direction:`row`,alignItems:`center`,enableGestures:!m,onTouch:()=>{m||i.onClick?.()},theme:c,gap:x,alpha:m?h:1,children:[g===`left`&&S,(0,r.jsx)(t.View,{width:l,height:l,...b===void 0?{}:{backgroundColor:b},borderColor:y,borderWidth:f,alignItems:`center`,justifyContent:`center`,padding:0,cornerRadius:l*.5,children:(0,r.jsx)(t.View,{width:u,height:u,backgroundColor:_,visible:p,cornerRadius:d})}),g===`right`?S:null]},i.key)}exports.RadioButton=i;
@@ -0,0 +1,21 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ import { PortableComponentPartialTheme } from './theme-types';
3
+ export type RadioButtonLabelPosition = 'left' | 'right' | 'none';
4
+ export interface RadioButtonProps {
5
+ /** Unique key for VDOM identification */
6
+ key?: string | number | undefined;
7
+ /** Label text for the radio button */
8
+ label: string;
9
+ /** Whether this radio button is selected */
10
+ selected?: boolean;
11
+ /** Disabled state */
12
+ disabled?: boolean;
13
+ /** Label position relative to the indicator */
14
+ labelPosition?: RadioButtonLabelPosition;
15
+ /** Optional theme overrides */
16
+ theme?: PortableComponentPartialTheme<'RadioButton'>;
17
+ /** Callback when radio button is clicked */
18
+ onClick?: () => void;
19
+ }
20
+ export declare function RadioButton(props: RadioButtonProps): VNodeLike;
21
+ //# sourceMappingURL=RadioButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../src/RadioButton.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAqB,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAQtE,OAAO,KAAK,EAAE,6BAA6B,EAAoB,MAAM,eAAe,CAAA;AAKpF,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACjC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACxC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,6BAA6B,CAAC,aAAa,CAAC,CAAA;IACpD,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAuE9D"}
@@ -0,0 +1,53 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { View as t } from "./primitives/View.js";
3
+ import "./primitives.js";
4
+ import { KNOWN_COMPONENTS as n, getGlobalThemeDefaults as r, mergeThemes as i, resolveComponentTheme as a, useTheme as o } from "@number10/jsx-core";
5
+ import { jsx as s, jsxs as c } from "@number10/jsx-core/jsx-runtime";
6
+ //#region src/RadioButton.tsx
7
+ function l(l) {
8
+ let u = o(), d = l.theme ? i(u ?? {}, l.theme) : u, { props: f, nestedTheme: p } = a({
9
+ componentName: "RadioButton",
10
+ globalTheme: r(),
11
+ localTheme: d,
12
+ knownComponents: n
13
+ }), m = f.size ?? 18, h = f.innerSize ?? Math.max(6, Math.round(m * .45)), g = h * .5, _ = f.borderWidth ?? Math.max(2, Math.round(m * .11)), v = l.selected ?? !1, y = l.disabled ?? !1, b = f.disabledAlpha ?? .5, x = l.labelPosition ?? f.labelPosition ?? "right", S = f.selectedColor ?? 2201331, C = f.color ?? 7697781, w = v ? S : C, T = f.backgroundColor, E = f.gap ?? 8, D = x === "none" ? null : /* @__PURE__ */ s(e, {
14
+ text: l.label,
15
+ style: f.labelStyle,
16
+ alpha: y ? b : 1
17
+ });
18
+ return /* @__PURE__ */ c(t, {
19
+ direction: "row",
20
+ alignItems: "center",
21
+ enableGestures: !y,
22
+ onTouch: () => {
23
+ y || l.onClick?.();
24
+ },
25
+ theme: p,
26
+ gap: E,
27
+ alpha: y ? b : 1,
28
+ children: [
29
+ x === "left" && D,
30
+ /* @__PURE__ */ s(t, {
31
+ width: m,
32
+ height: m,
33
+ ...T === void 0 ? {} : { backgroundColor: T },
34
+ borderColor: w,
35
+ borderWidth: _,
36
+ alignItems: "center",
37
+ justifyContent: "center",
38
+ padding: 0,
39
+ cornerRadius: m * .5,
40
+ children: /* @__PURE__ */ s(t, {
41
+ width: h,
42
+ height: h,
43
+ backgroundColor: S,
44
+ visible: v,
45
+ cornerRadius: g
46
+ })
47
+ }),
48
+ x === "right" ? D : null
49
+ ]
50
+ }, l.key);
51
+ }
52
+ //#endregion
53
+ export { l as RadioButton };
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/View.cjs`);require(`./primitives.cjs`);const t=require(`./RadioButton.cjs`);let n=require(`@number10/jsx-core`),r=require(`@number10/jsx-core/jsx-runtime`);function i(i){let a=(0,n.useTheme)(),o=i.theme?(0,n.mergeThemes)(a??{},i.theme):a,{props:s,nestedTheme:c}=(0,n.resolveComponentTheme)({componentName:`RadioGroup`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:o,knownComponents:n.KNOWN_COMPONENTS}),[l,u]=(0,n.useState)(i.value??i.defaultValue??``),d=i.value??l,f=e=>{i.disabled||(i.value===void 0&&u(e),i.onChange?.(e))};return(0,r.jsx)(e.View,{direction:i.direction??s.direction??`column`,theme:c,gap:s.gap??8,children:i.options.map(e=>{let n=d===e.value;return(0,r.jsx)(t.RadioButton,{label:e.label,selected:n,disabled:i.disabled??!1,onClick:()=>f(e.value)},e.value)})})}exports.RadioGroup=i;
@@ -0,0 +1,26 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ import { PortableComponentPartialTheme } from './theme-types';
3
+ export interface RadioGroupOption {
4
+ /** Unique value for this option */
5
+ value: string;
6
+ /** Display label for this option */
7
+ label: string;
8
+ }
9
+ export interface RadioGroupProps {
10
+ /** Array of options to display */
11
+ options: RadioGroupOption[];
12
+ /** Currently selected value (controlled) */
13
+ value?: string;
14
+ /** Initial selected value for uncontrolled groups */
15
+ defaultValue?: string;
16
+ /** Callback when selection changes */
17
+ onChange?: (value: string) => void;
18
+ /** Layout direction (default: 'column') */
19
+ direction?: 'row' | 'column';
20
+ /** Disabled state for all options */
21
+ disabled?: boolean;
22
+ /** Optional theme overrides */
23
+ theme?: PortableComponentPartialTheme<'RadioGroup'>;
24
+ }
25
+ export declare function RadioGroup(props: RadioGroupProps): VNodeLike;
26
+ //# sourceMappingURL=RadioGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAWnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAIlE,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAA;CACpD;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CA4C5D"}
@@ -0,0 +1,32 @@
1
+ import { View as e } from "./primitives/View.js";
2
+ import "./primitives.js";
3
+ import { RadioButton as t } from "./RadioButton.js";
4
+ import { KNOWN_COMPONENTS as n, getGlobalThemeDefaults as r, mergeThemes as i, resolveComponentTheme as a, useState as o, useTheme as s } from "@number10/jsx-core";
5
+ import { jsx as c } from "@number10/jsx-core/jsx-runtime";
6
+ //#region src/RadioGroup.tsx
7
+ function l(l) {
8
+ let u = s(), d = l.theme ? i(u ?? {}, l.theme) : u, { props: f, nestedTheme: p } = a({
9
+ componentName: "RadioGroup",
10
+ globalTheme: r(),
11
+ localTheme: d,
12
+ knownComponents: n
13
+ }), [m, h] = o(l.value ?? l.defaultValue ?? ""), g = l.value ?? m, _ = (e) => {
14
+ l.disabled || (l.value === void 0 && h(e), l.onChange?.(e));
15
+ };
16
+ return /* @__PURE__ */ c(e, {
17
+ direction: l.direction ?? f.direction ?? "column",
18
+ theme: p,
19
+ gap: f.gap ?? 8,
20
+ children: l.options.map((e) => {
21
+ let n = g === e.value;
22
+ return /* @__PURE__ */ c(t, {
23
+ label: e.label,
24
+ selected: n,
25
+ disabled: l.disabled ?? !1,
26
+ onClick: () => _(e.value)
27
+ }, e.value);
28
+ })
29
+ });
30
+ }
31
+ //#endregion
32
+ export { l as RadioGroup };
@@ -0,0 +1 @@
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`);function i(e){switch(e){case`small`:return{iconSize:16,fontSize:`16px`};case`large`:return{iconSize:32,fontSize:`32px`};default:return{iconSize:24,fontSize:`24px`}}}function a(e,t){return Math.max(0,Math.min(t,Math.round(e)))}function o(o){let{value:s,defaultValue:c=0,max:l=5,onChange:u,size:d,renderIcon:f,labels:p,disabled:m=!1,theme:h,alpha:g,..._}=o,v=(0,n.useTheme)(),y=h?(0,n.mergeThemes)(v??{},h):v,{props:b,nestedTheme:x}=(0,n.resolveComponentTheme)({componentName:`RatingBar`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:y,knownComponents:n.KNOWN_COMPONENTS}),S=d??b.size??`medium`,C=i(S),w=b.iconSize??C.iconSize,T=b.gap??4,E=s!==void 0,[D,O]=(0,n.useState)(a(s??c,l)),k=E?a(s??0,l):D;(0,n.useEffect)(()=>{E&&O(a(s??0,l))},[E,s,l]);let A={...b.labels??{},...p??{}},j=b.filledColor??`#fbbf24`,M=b.emptyColor??`#475569`,N=m?b.disabledAlpha??.5:g,P=e=>{if(m)return;let t=a(e,l);E||O(t),u?.(t)},F=Array.from({length:l},(e,t)=>t);return(0,r.jsxs)(t.View,{direction:`row`,alignItems:`center`,gap:T,..._,...N===void 0?{}:{alpha:N},theme:x,children:[F.map(n=>{let i=n<k,a=f?.({filled:i,index:n,size:S});return(0,r.jsx)(t.View,{width:w,height:w,alignItems:`center`,justifyContent:`center`,enableGestures:!m,onTouch:()=>P(n+1),theme:x,children:a??(0,r.jsx)(e.Text,{text:i?`★`:`☆`,style:{color:i?j:M,fontSize:C.fontSize}})},n)}),A.rating?(0,r.jsx)(e.Text,{text:A.rating,style:b.labelStyle}):null]})}exports.RatingBar=o;
@@ -0,0 +1,24 @@
1
+ import { ViewPrimitivePropsComplete, VNodeLike } from '@number10/jsx-core';
2
+ import { PortableComponentPartialTheme } from './theme-types';
3
+ export type RatingBarSize = 'small' | 'medium' | 'large';
4
+ export interface RatingBarLabels {
5
+ rating?: string;
6
+ }
7
+ export interface RatingBarIconRenderProps {
8
+ filled: boolean;
9
+ index: number;
10
+ size: RatingBarSize;
11
+ }
12
+ export interface RatingBarProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
13
+ value?: number;
14
+ defaultValue?: number;
15
+ max?: number;
16
+ onChange?: (value: number) => void;
17
+ size?: RatingBarSize;
18
+ renderIcon?: (props: RatingBarIconRenderProps) => VNodeLike;
19
+ labels?: RatingBarLabels;
20
+ disabled?: boolean;
21
+ theme?: PortableComponentPartialTheme<'RatingBar'>;
22
+ }
23
+ export declare function RatingBar(props: RatingBarProps): VNodeLike;
24
+ //# sourceMappingURL=RatingBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RatingBar.d.ts","sourceRoot":"","sources":["../src/RatingBar.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAqB,0BAA0B,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAWlG,OAAO,KAAK,EAAE,6BAA6B,EAAkB,MAAM,eAAe,CAAA;AAElF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;IAClF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,CAAA;IAC3D,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,6BAA6B,CAAC,WAAW,CAAC,CAAA;CACnD;AAiBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CA8F1D"}
@@ -0,0 +1,84 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { View as t } from "./primitives/View.js";
3
+ import "./primitives.js";
4
+ import { KNOWN_COMPONENTS as n, getGlobalThemeDefaults as r, mergeThemes as i, resolveComponentTheme as a, useEffect as o, useState as s, useTheme as c } from "@number10/jsx-core";
5
+ import { jsx as l, jsxs as u } from "@number10/jsx-core/jsx-runtime";
6
+ //#region src/RatingBar.tsx
7
+ function d(e) {
8
+ switch (e) {
9
+ case "small": return {
10
+ iconSize: 16,
11
+ fontSize: "16px"
12
+ };
13
+ case "large": return {
14
+ iconSize: 32,
15
+ fontSize: "32px"
16
+ };
17
+ default: return {
18
+ iconSize: 24,
19
+ fontSize: "24px"
20
+ };
21
+ }
22
+ }
23
+ function f(e, t) {
24
+ return Math.max(0, Math.min(t, Math.round(e)));
25
+ }
26
+ function p(p) {
27
+ let { value: m, defaultValue: h = 0, max: g = 5, onChange: _, size: v, renderIcon: y, labels: b, disabled: x = !1, theme: S, alpha: C, ...w } = p, T = c(), E = S ? i(T ?? {}, S) : T, { props: D, nestedTheme: O } = a({
28
+ componentName: "RatingBar",
29
+ globalTheme: r(),
30
+ localTheme: E,
31
+ knownComponents: n
32
+ }), k = v ?? D.size ?? "medium", A = d(k), j = D.iconSize ?? A.iconSize, M = D.gap ?? 4, N = m !== void 0, [P, F] = s(f(m ?? h, g)), I = N ? f(m ?? 0, g) : P;
33
+ o(() => {
34
+ N && F(f(m ?? 0, g));
35
+ }, [
36
+ N,
37
+ m,
38
+ g
39
+ ]);
40
+ let L = {
41
+ ...D.labels ?? {},
42
+ ...b ?? {}
43
+ }, R = D.filledColor ?? "#fbbf24", z = D.emptyColor ?? "#475569", B = x ? D.disabledAlpha ?? .5 : C, V = (e) => {
44
+ if (x) return;
45
+ let t = f(e, g);
46
+ N || F(t), _?.(t);
47
+ }, H = Array.from({ length: g }, (e, t) => t);
48
+ return /* @__PURE__ */ u(t, {
49
+ direction: "row",
50
+ alignItems: "center",
51
+ gap: M,
52
+ ...w,
53
+ ...B === void 0 ? {} : { alpha: B },
54
+ theme: O,
55
+ children: [H.map((n) => {
56
+ let r = n < I, i = y?.({
57
+ filled: r,
58
+ index: n,
59
+ size: k
60
+ });
61
+ return /* @__PURE__ */ l(t, {
62
+ width: j,
63
+ height: j,
64
+ alignItems: "center",
65
+ justifyContent: "center",
66
+ enableGestures: !x,
67
+ onTouch: () => V(n + 1),
68
+ theme: O,
69
+ children: i ?? /* @__PURE__ */ l(e, {
70
+ text: r ? "★" : "☆",
71
+ style: {
72
+ color: r ? R : z,
73
+ fontSize: A.fontSize
74
+ }
75
+ })
76
+ }, n);
77
+ }), L.rating ? /* @__PURE__ */ l(e, {
78
+ text: L.rating,
79
+ style: D.labelStyle
80
+ }) : null]
81
+ });
82
+ }
83
+ //#endregion
84
+ export { p as RatingBar };
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/View.cjs`);require(`./primitives.cjs`);let t=require(`@number10/jsx-core`),n=require(`@number10/jsx-core/jsx-runtime`);function r(e,n){let r=n??(0,t.getGlobalThemeDefaults)().ScrollSlider??{},i=e===`large`?1.25:e===`small`?.75:e===`tiny`?.5:e===`micro`?.25:e===`nano`?.125:1,a=(r.borderWidth??1)*i,o=(r.size??24)*i;return{border:a,outer:o,dimension:o-a*2}}function i(i){let{direction:a,scrollPosition:o,viewportSize:s,contentSize:c,onScroll:l,momentum:u=!0,onMomentumEnd:d}=i,f=(0,t.useTheme)(),{props:p}=(0,t.resolveComponentTheme)({componentName:`ScrollSlider`,globalTheme:(0,t.getGlobalThemeDefaults)(),localTheme:f,knownComponents:t.KNOWN_COMPONENTS}),m=(0,t.useRef)(null),h=(0,t.useRef)(!1),[g,_]=(0,t.useState)(!1),v=(0,t.useRef)(null),y=(0,t.useRef)(0),b=(0,t.useRef)(0),x=(0,t.useRef)(null),S=(0,t.useSurface)()?.scheduler??null,C=(0,t.useRef)(S);S&&C.current!==S&&(C.current=S);let w=a===`vertical`,{border:T,outer:E,dimension:D}=r(i.size,p),O=E/(p.size??24),k=Math.min((p.thumbBorderWidth??1)*O,Math.max(0,D/3)),A=p.cornerRadius??E/2,j=p.trackCornerRadius??D/2,M=p.thumbCornerRadius??D/2,N=v.current?.__getLayoutSize?.(),P=(N&&(w?N.height>0:N.width>0)?w?N.height:N.width:Math.max(0,s))-T*2,F=p.minThumbSize??20,I=Math.max(0,c-s),L=c>0?s/c:1,R=Math.max(F,P*L),z=P-R,B=I>0?o/I*z:0,V=e=>{if(e.stopPropagation(),e.state===`start`){h.current=!0,_(!0),y.current=0,b.current=Date.now(),x.current&&=(x.current.stop(),null);return}if(e.state===`end`){h.current=!1,_(!1),u&&Math.abs(y.current)>.1?H(o):d&&d();return}if(!h.current)return;let t=w?e.dy??0:e.dx??0,n=Date.now(),r=n-b.current;r>0&&(y.current=t/r*1e3,b.current=n);let i=Math.max(0,Math.min(z,B+t));l(z>0?i/z*I:0)},H=e=>{if(!C.current)return;let n=Math.min(1e3,Math.max(200,Math.abs(y.current))),r=Math.max(0,Math.min(I,e+y.current*(n/1e3)));x.current=(0,t.createTween)({pos:e},{to:{pos:r},duration:n,ease:t.Easing.quadOut,onUpdate:e=>l(e.pos),onComplete:()=>{x.current=null,d&&d()}},C.current)};return(0,n.jsx)(e.View,{ref:v,width:w?E:`100%`,height:w?`100%`:E,backgroundColor:p.borderColor??0,cornerRadius:A,padding:T,children:(0,n.jsxs)(e.View,{ref:m,width:w?D:`100%`,height:w?`100%`:D,backgroundColor:p.trackColor??14540253,cornerRadius:j,direction:`stack`,padding:0,children:[(0,n.jsx)(e.View,{width:w?D:`100%`,height:w?`100%`:D,x:0,y:0,backgroundColor:p.trackColor??11184810,cornerRadius:j,enableGestures:!0,onTouch:e=>{e.stopPropagation();let t=w?e.localY??0:e.localX??0,n=Math.max(R/2,Math.min(P-R/2,t))-R/2,r=z>0?n/z*I:0;l(Math.max(0,Math.min(I,r)))}}),(0,n.jsx)(e.View,{width:w?D:R,height:w?R:D,x:w?0:B,y:w?B:0,backgroundColor:g?p.thumbActiveColor??p.thumbColor??15658683:p.thumbColor??15658683,borderColor:p.thumbBorderColor,borderWidth:k,cornerRadius:M,enableGestures:!0,onTouchMove:V})]})})}exports.ScrollSlider=i,exports.calculateSliderSize=r;
@@ -0,0 +1,48 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ /** Size variants for the scroll slider */
3
+ export type SliderSize = 'large' | 'medium' | 'small' | 'tiny' | 'micro' | 'nano' | undefined;
4
+ /** Theme values exported for calculateSliderSize */
5
+ export interface ScrollSliderSizeTheme {
6
+ borderWidth?: number;
7
+ size?: number;
8
+ }
9
+ /**
10
+ * Calculate slider dimensions based on size variant and theme.
11
+ * Portable: falls back to global theme defaults when no theme provided.
12
+ * @param size - Size variant
13
+ * @param theme - Optional resolved ScrollSlider theme values
14
+ * @returns Calculated dimensions
15
+ */
16
+ export declare function calculateSliderSize(size: SliderSize, theme?: ScrollSliderSizeTheme): {
17
+ border: number;
18
+ outer: number;
19
+ dimension: number;
20
+ };
21
+ /**
22
+ * Props for ScrollSlider component
23
+ */
24
+ export interface ScrollSliderProps {
25
+ /** Direction of the slider */
26
+ direction: 'vertical' | 'horizontal';
27
+ /** Size variant, default is medium */
28
+ size?: SliderSize;
29
+ /** Current scroll position in pixels */
30
+ scrollPosition: number;
31
+ /** Viewport size in pixels */
32
+ viewportSize: number;
33
+ /** Content size in pixels */
34
+ contentSize: number;
35
+ /** Callback when slider is scrolled, returns new scroll position in pixels */
36
+ onScroll: (scrollPosition: number) => void;
37
+ /** Enable momentum scrolling for thumb dragging */
38
+ momentum?: boolean;
39
+ /** Callback when momentum (or drag end without momentum) finishes */
40
+ onMomentumEnd?: () => void;
41
+ }
42
+ /**
43
+ * ScrollSlider component providing slider functionality for ScrollView.
44
+ * @param props - ScrollSlider properties
45
+ * @returns JSX element
46
+ */
47
+ export declare function ScrollSlider(props: ScrollSliderProps): VNodeLike;
48
+ //# sourceMappingURL=ScrollSlider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollSlider.d.ts","sourceRoot":"","sources":["../src/ScrollSlider.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAqC,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAoBtF,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7F,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,qBAAqB;;;;EAoBlF;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,SAAS,EAAE,UAAU,GAAG,YAAY,CAAA;IACpC,sCAAsC;IACtC,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;CAC3B;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAqNhE"}
@@ -0,0 +1,93 @@
1
+ import { View as e } from "./primitives/View.js";
2
+ import "./primitives.js";
3
+ import { Easing as t, KNOWN_COMPONENTS as n, createTween as r, getGlobalThemeDefaults as i, resolveComponentTheme as a, useRef as o, useState as s, useSurface as c, useTheme as l } from "@number10/jsx-core";
4
+ import { jsx as u, jsxs as d } from "@number10/jsx-core/jsx-runtime";
5
+ //#region src/ScrollSlider.tsx
6
+ function f(e, t) {
7
+ let n = t ?? i().ScrollSlider ?? {}, r = e === "large" ? 1.25 : e === "small" ? .75 : e === "tiny" ? .5 : e === "micro" ? .25 : e === "nano" ? .125 : 1, a = (n.borderWidth ?? 1) * r, o = (n.size ?? 24) * r;
8
+ return {
9
+ border: a,
10
+ outer: o,
11
+ dimension: o - a * 2
12
+ };
13
+ }
14
+ function p(p) {
15
+ let { direction: m, scrollPosition: h, viewportSize: g, contentSize: _, onScroll: v, momentum: y = !0, onMomentumEnd: b } = p, x = l(), { props: S } = a({
16
+ componentName: "ScrollSlider",
17
+ globalTheme: i(),
18
+ localTheme: x,
19
+ knownComponents: n
20
+ }), C = o(null), w = o(!1), [T, E] = s(!1), D = o(null), O = o(0), k = o(0), A = o(null), j = c()?.scheduler ?? null, M = o(j);
21
+ j && M.current !== j && (M.current = j);
22
+ let N = m === "vertical", { border: P, outer: F, dimension: I } = f(p.size, S), L = F / (S.size ?? 24), R = Math.min((S.thumbBorderWidth ?? 1) * L, Math.max(0, I / 3)), z = S.cornerRadius ?? F / 2, B = S.trackCornerRadius ?? I / 2, V = S.thumbCornerRadius ?? I / 2, H = D.current?.__getLayoutSize?.(), U = (H && (N ? H.height > 0 : H.width > 0) ? N ? H.height : H.width : Math.max(0, g)) - P * 2, W = S.minThumbSize ?? 20, G = Math.max(0, _ - g), K = _ > 0 ? g / _ : 1, q = Math.max(W, U * K), J = U - q, Y = G > 0 ? h / G * J : 0, X = (e) => {
23
+ if (e.stopPropagation(), e.state === "start") {
24
+ w.current = !0, E(!0), O.current = 0, k.current = Date.now(), A.current &&= (A.current.stop(), null);
25
+ return;
26
+ }
27
+ if (e.state === "end") {
28
+ w.current = !1, E(!1), y && Math.abs(O.current) > .1 ? Z(h) : b && b();
29
+ return;
30
+ }
31
+ if (!w.current) return;
32
+ let t = N ? e.dy ?? 0 : e.dx ?? 0, n = Date.now(), r = n - k.current;
33
+ r > 0 && (O.current = t / r * 1e3, k.current = n);
34
+ let i = Math.max(0, Math.min(J, Y + t));
35
+ v(J > 0 ? i / J * G : 0);
36
+ }, Z = (e) => {
37
+ if (!M.current) return;
38
+ let n = Math.min(1e3, Math.max(200, Math.abs(O.current))), i = Math.max(0, Math.min(G, e + O.current * (n / 1e3)));
39
+ A.current = r({ pos: e }, {
40
+ to: { pos: i },
41
+ duration: n,
42
+ ease: t.quadOut,
43
+ onUpdate: (e) => v(e.pos),
44
+ onComplete: () => {
45
+ A.current = null, b && b();
46
+ }
47
+ }, M.current);
48
+ };
49
+ return /* @__PURE__ */ u(e, {
50
+ ref: D,
51
+ width: N ? F : "100%",
52
+ height: N ? "100%" : F,
53
+ backgroundColor: S.borderColor ?? 0,
54
+ cornerRadius: z,
55
+ padding: P,
56
+ children: /* @__PURE__ */ d(e, {
57
+ ref: C,
58
+ width: N ? I : "100%",
59
+ height: N ? "100%" : I,
60
+ backgroundColor: S.trackColor ?? 14540253,
61
+ cornerRadius: B,
62
+ direction: "stack",
63
+ padding: 0,
64
+ children: [/* @__PURE__ */ u(e, {
65
+ width: N ? I : "100%",
66
+ height: N ? "100%" : I,
67
+ x: 0,
68
+ y: 0,
69
+ backgroundColor: S.trackColor ?? 11184810,
70
+ cornerRadius: B,
71
+ enableGestures: !0,
72
+ onTouch: (e) => {
73
+ e.stopPropagation();
74
+ let t = N ? e.localY ?? 0 : e.localX ?? 0, n = Math.max(q / 2, Math.min(U - q / 2, t)) - q / 2, r = J > 0 ? n / J * G : 0;
75
+ v(Math.max(0, Math.min(G, r)));
76
+ }
77
+ }), /* @__PURE__ */ u(e, {
78
+ width: N ? I : q,
79
+ height: N ? q : I,
80
+ x: N ? 0 : Y,
81
+ y: N ? Y : 0,
82
+ backgroundColor: T ? S.thumbActiveColor ?? S.thumbColor ?? 15658683 : S.thumbColor ?? 15658683,
83
+ borderColor: S.thumbBorderColor,
84
+ borderWidth: R,
85
+ cornerRadius: V,
86
+ enableGestures: !0,
87
+ onTouchMove: X
88
+ })]
89
+ })
90
+ });
91
+ }
92
+ //#endregion
93
+ export { p as ScrollSlider, f as calculateSliderSize };
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/View.cjs`);require(`./primitives.cjs`);const t=require(`./ScrollSlider.cjs`);let n=require(`@number10/jsx-core`),r=require(`@number10/jsx-core/jsx-runtime`);function i(e,t,n){return Math.max(t,Math.min(n,e))}function a(e,t){if(e){if(typeof e==`function`){e(t);return}e.current=t}}function o(e,t){return Math.abs(e.width-t.width)<.5&&Math.abs(e.height-t.height)<.5}function s(e,t){return e?Math.abs(e.dx-t.dx)<.5&&Math.abs(e.dy-t.dy)<.5&&Math.abs(e.viewportWidth-t.viewportWidth)<.5&&Math.abs(e.viewportHeight-t.viewportHeight)<.5&&Math.abs(e.contentWidth-t.contentWidth)<.5&&Math.abs(e.contentHeight-t.contentHeight)<.5&&Math.abs(e.maxScrollX-t.maxScrollX)<.5&&Math.abs(e.maxScrollY-t.maxScrollY)<.5:!1}function c(e){let t=e?.__getLayoutSize?.();return{width:Math.max(0,t?.width??0),height:Math.max(0,t?.height??0)}}function l(e){let t=e.x??0,n=e.y??0,r=e.parent;for(;r;)t+=r.x??0,n+=r.y??0,r=r.parent;return{x:t,y:n}}function u(e,t){return e===!0?!0:e===!1?!1:t}function d(e){let t=e.epsilon??.5,n=Math.max(0,e.outerWidth),r=Math.max(0,e.outerHeight),i=Math.max(0,e.contentWidth),a=Math.max(0,e.contentHeight),o=Math.max(0,e.sliderSize),s=e.showVerticalSlider===!0,c=e.showHorizontalSlider===!0;for(let l=0;l<4;l++){let l=Math.max(0,n-(s?o:0)),d=Math.max(0,r-(c?o:0)),f=Math.max(i,l),p=Math.max(a,d),m=u(e.showVerticalSlider,p>d+t),h=u(e.showHorizontalSlider,f>l+t);if(m===s&&h===c)break;s=m,c=h}let l=Math.max(0,n-(s?o:0)),d=Math.max(0,r-(c?o:0)),f=Math.max(i,l),p=Math.max(a,d);return{outerWidth:n,outerHeight:r,viewportWidth:l,viewportHeight:d,contentWidth:i,contentHeight:a,effectiveContentWidth:f,effectiveContentHeight:p,showVerticalSlider:s,showHorizontalSlider:c,maxScrollX:Math.max(0,f-l),maxScrollY:Math.max(0,p-d)}}function f(e,t){let[r,i]=(0,n.useState)({width:0,height:0}),[a,s]=(0,n.useState)({width:0,height:0}),l=(0,n.useRef)(r),u=(0,n.useRef)(a);return(0,n.useEffect)(()=>{let r=!1,a=()=>{r||n.DeferredLayoutQueue.defer(d)},d=()=>{if(r)return;let n=c(e.current),d=c(t.current);o(l.current,n)||(l.current=n,i(n)),o(u.current,d)||(u.current=d,s(d)),a()};return a(),()=>{r=!0}},[]),{outerSize:r,contentSize:a}}function p(u){let{ref:p,children:m,showVerticalSlider:h=`auto`,showHorizontalSlider:g=`auto`,scroll:_,onScrollInfoChange:v,snap:y=!1,snapAlignment:ee=`start`,snapThreshold:te=20,momentum:b=!0,onSnap:x,onSliderSize:S,sliderSize:C,visible:w,...ne}=u,re=(0,n.useTheme)(),{props:ie}=(0,n.resolveComponentTheme)({componentName:`ScrollSlider`,globalTheme:(0,n.getGlobalThemeDefaults)(),localTheme:re,knownComponents:n.KNOWN_COMPONENTS}),[T,ae]=(0,n.useState)({dx:_?.dx??0,dy:_?.dy??0}),E=(0,n.useRef)(T),D=(0,n.useRef)(!1),O=(0,n.useRef)(_?.snapIndex),k=(0,n.useRef)(null),oe=(0,n.useRef)(null),A=(0,n.useRef)(null),{outerSize:j,contentSize:se}=f(k,A),M=(0,n.useRef)({vx:0,vy:0}),N=(0,n.useRef)(0),P=(0,n.useRef)({dx:0,dy:0}),F=(0,n.useRef)(null),I=(0,n.useRef)(null),L=(0,n.useRef)(null),R=(0,n.useSurface)()?.scheduler??null,z=(0,n.useRef)(R);R&&z.current!==R&&(z.current=R);let{outer:B}=t.calculateSliderSize(C,ie),V=d({outerWidth:j.width,outerHeight:j.height,contentWidth:se.width,contentHeight:se.height,sliderSize:B,showVerticalSlider:h,showHorizontalSlider:g}),H=(0,n.useRef)(V);H.current=V;let U=(0,n.useRef)(null),W=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(!S)return;let e={width:V.showVerticalSlider?B:0,height:V.showHorizontalSlider?B:0};o(U.current??{width:-1,height:-1},e)||(U.current=e,S(e))},[V.showHorizontalSlider,V.showVerticalSlider,S,B]);let G=e=>{ae(t=>{let n=typeof e==`function`?e(t):e;return Math.abs(n.dx-t.dx)<.001&&Math.abs(n.dy-t.dy)<.001?(E.current=t,t):(E.current=n,n)})},K=()=>{I.current&&=(I.current.stop(),null)},q=(e,t)=>{let r=H.current,a=i(e.dx??E.current.dx,0,r.maxScrollX),o=i(e.dy??E.current.dy,0,r.maxScrollY),s=t?.animate===!0&&z.current!==null;if(!(Math.abs(a-E.current.dx)<.5&&Math.abs(o-E.current.dy)<.5)){if(K(),s&&z.current){I.current=(0,n.createTween)({dx:E.current.dx,dy:E.current.dy},{to:{dx:a,dy:o},duration:t?.duration??220,ease:n.Easing.quadOut,onUpdate:e=>G({dx:e.dx,dy:e.dy}),onComplete:()=>{I.current=null}},z.current);return}G({dx:a,dy:o})}},J=(e,t,n=2)=>{let r=oe.current;if(!e||!r)return;let i=l(r),a=l(e),o=c(e),s=H.current;if(n>0&&(s.viewportWidth<=0||s.viewportHeight<=0||o.width<=0||o.height<=0)){requestAnimationFrame(()=>{J(e,t,n-1)});return}let u=E.current.dx,d=E.current.dy,f=a.x-i.x,p=f+o.width,m=a.y-i.y,h=m+o.height,g=t?.block??`nearest`,_=t?.inline??`nearest`;g===`start`?d+=m:g===`center`?d+=m-(s.viewportHeight-o.height)/2:g===`end`?d+=h-s.viewportHeight:m<0?d+=m:h>s.viewportHeight&&(d+=h-s.viewportHeight),_===`start`?u+=f:_===`center`?u+=f-(s.viewportWidth-o.width)/2:_===`end`?u+=p-s.viewportWidth:f<0?u+=f:p>s.viewportWidth&&(u+=p-s.viewportWidth),q({dx:u,dy:d},{animate:t?.animate,duration:t?.duration})},ce=e=>{let t=e;if(k.current=t,!t){a(p,null);return}let n=t;n.scrollTo=e=>{q(e,e)},n.scrollChildIntoView=(e,t)=>{J(e,t)},a(p,n)},Y=typeof y==`object`&&`positions`in y?y.threshold??te:te,le=Y===void 0||Y<0?1/0:Y,ue=()=>{let{viewportWidth:e,viewportHeight:t}=H.current;if(typeof y==`object`&&`positions`in y){let n=[...y.positions].sort((e,t)=>e-t),r=n.length>1?Math.max(0,(n[1]??0)-(n[0]??0)):t||0,i=n.length>1?Math.max(0,(n[1]??0)-(n[0]??0)):e||0;return{x:n.map((t,r)=>{let a=n[r+1];return{position:t,size:a===void 0?i>0?i:e||0:Math.max(0,a-t)}}),y:n.map((e,i)=>{let a=n[i+1];return{position:e,size:a===void 0?r>0?r:t||0:Math.max(0,a-e)}})}}return{x:[],y:[]}},X=(e,t,n)=>{let r=e.position;return ee===`center`?r=e.position+e.size/2-t/2:ee===`end`&&(r=e.position+e.size-t),i(r,0,n)},de=(e,t,n,r)=>{if(t.length===0)return{position:e,index:-1};let i=e,a=1/0,o=-1;for(let s=0;s<t.length;s++){let{position:c,size:l}=t[s]??{position:0,size:0},u=X({position:c,size:l},n,r),d=Math.abs(e-u);(d<a&&d<=le||d<a&&le===1/0)&&(a=d,i=u,o=s)}return{position:i,index:o}},fe=(e,t)=>{let{x:n,y:r}=ue(),{viewportWidth:i,viewportHeight:a,maxScrollX:o,maxScrollY:s}=H.current,c=.5,l=o>c?n:[],u=s>c?r:[],d=de(e,l,i,o),f=de(t,u,a,s),p=f.index>=0?f.index:d.index;return{dx:d.position,dy:f.position,index:p}},Z=()=>{if(!z.current||!y)return;let e=E.current,{dx:t,dy:r,index:i}=fe(e.dx,e.dy);if(t===e.dx&&r===e.dy){i>=0&&x&&x(i);return}K(),I.current=(0,n.createTween)({dx:e.dx,dy:e.dy},{to:{dx:t,dy:r},duration:250,ease:n.Easing.quadOut,onUpdate:e=>G({dx:e.dx,dy:e.dy}),onComplete:()=>{I.current=null,i>=0&&x&&x(i)}},z.current)};(0,n.useLayoutEffect)(()=>{if(!_)return;let e=D.current;if(y&&typeof y==`object`&&`positions`in y){let{x:t,y:r}=ue(),i=t.length>0||r.length>0;if(_.snapIndex!==void 0&&i){let i=Math.max(t.length,r.length)-1,a=Math.max(0,Math.min(_.snapIndex,i)),o=t[a],s=r[a],c=o===void 0?_.dx??E.current.dx:X(o,V.viewportWidth,V.maxScrollX),l=s===void 0?_.dy??E.current.dy:X(s,V.viewportHeight,V.maxScrollY),u=e&&(a!==O.current||Math.abs(E.current.dx-c)>.5||Math.abs(E.current.dy-l)>.5);O.current=a,u&&z.current?(K(),I.current=(0,n.createTween)({dx:E.current.dx,dy:E.current.dy},{to:{dx:c,dy:l},duration:220,ease:n.Easing.quadOut,onUpdate:e=>G({dx:e.dx,dy:e.dy}),onComplete:()=>{I.current=null,x&&x(a)}},z.current)):(G({dx:c,dy:l}),x&&x(a)),D.current=!0;return}}if(_.dx!==void 0&&_.dy!==void 0){let t=_.dx,r=_.dy;e&&(Math.abs(E.current.dx-t)>.5||Math.abs(E.current.dy-r)>.5)&&z.current?(K(),I.current=(0,n.createTween)({dx:E.current.dx,dy:E.current.dy},{to:{dx:t,dy:r},duration:220,ease:n.Easing.quadOut,onUpdate:e=>G({dx:e.dx,dy:e.dy}),onComplete:()=>{I.current=null}},z.current)):G({dx:t,dy:r})}D.current=!0},[_,V.maxScrollX,V.maxScrollY,V.viewportHeight,V.viewportWidth,y]);let Q=i(T.dx,0,V.maxScrollX),$=i(T.dy,0,V.maxScrollY);(0,n.useEffect)(()=>{(Q!==T.dx||$!==T.dy)&&G({dx:Q,dy:$})},[Q,$,T.dx,T.dy]),(0,n.useEffect)(()=>{if(v&&V.viewportWidth>0&&V.viewportHeight>0){let e={dx:Q,dy:$,viewportWidth:V.viewportWidth,viewportHeight:V.viewportHeight,contentWidth:V.effectiveContentWidth,contentHeight:V.effectiveContentHeight,maxScrollX:V.maxScrollX,maxScrollY:V.maxScrollY};if(s(W.current,e))return;W.current=e,v(e)}},[Q,$,V.effectiveContentHeight,V.effectiveContentWidth,V.maxScrollX,V.maxScrollY,V.viewportHeight,V.viewportWidth,v]);let pe=(e,t)=>{let n=H.current,r=E.current,a=i(r.dy-t,0,n.maxScrollY),o=i(r.dx-e,0,n.maxScrollX);Math.abs(o-r.dx)<.001&&Math.abs(a-r.dy)<.001||G({dx:o,dy:a})},me=()=>{F.current=null;let e=P.current;if(e.dx===0&&e.dy===0)return;let t=e.dx,n=e.dy;P.current={dx:0,dy:0},pe(t,n)},he=(e,t)=>{e===0&&t===0||(P.current={dx:P.current.dx+e,dy:P.current.dy+t},F.current===null&&(F.current=requestAnimationFrame(me)))},ge=()=>{if(!z.current)return;let e=H.current,t=M.current,r=Math.min(1e3,Math.max(200,Math.abs(t.vx)+Math.abs(t.vy))),a=E.current,o=i(a.dx-t.vx*(r/1e3),0,e.maxScrollX),s=i(a.dy-t.vy*(r/1e3),0,e.maxScrollY),c=y?fe(o,s):null;K(),I.current=(0,n.createTween)({dx:a.dx,dy:a.dy},{to:{dx:c?.dx??o,dy:c?.dy??s},duration:r,ease:n.Easing.quadOut,onUpdate:e=>G({dx:e.dx,dy:e.dy}),onComplete:()=>{I.current=null,c&&c.index>=0&&x&&x(c.index)}},z.current)},_e=e=>{G(t=>({...t,dy:i(e,0,H.current.maxScrollY)}))},ve=e=>{G(t=>({...t,dx:i(e,0,H.current.maxScrollX)}))},ye=()=>{y&&Z()},be=e=>{if(e.state===`end`){let e=M.current;b&&(Math.abs(e.vx)>.1||Math.abs(e.vy)>.1)?ge():y&&Z();return}if(e.state===`start`){K(),F.current!==null&&(cancelAnimationFrame(F.current),F.current=null),P.current={dx:0,dy:0},M.current={vx:0,vy:0},N.current=Date.now(),e.stopPropagation();return}e.stopPropagation();let t=e.dx??0,n=e.dy??0,r=Date.now(),i=r-N.current;i>0&&(M.current={vx:t/i*1e3,vy:n/i*1e3},N.current=r),he(t,n)},xe=e=>{e.stopPropagation(),e.preventDefault(),K(),he(-e.deltaX,-e.deltaY),y&&(L.current&&clearTimeout(L.current),L.current=setTimeout(()=>Z(),200))};(0,n.useEffect)(()=>()=>{F.current!==null&&(cancelAnimationFrame(F.current),F.current=null),P.current={dx:0,dy:0},L.current&&clearTimeout(L.current),K()},[]);let Se=w===`none`?`none`:w??!0;return(0,r.jsx)(e.View,{children:(0,r.jsx)(e.View,{...ne,visible:Se,children:(0,r.jsxs)(e.View,{ref:ce,width:`100%`,height:`100%`,direction:`stack`,children:[(0,r.jsxs)(e.View,{ref:oe,width:V.viewportWidth,height:V.viewportHeight,onTouchMove:be,onWheel:xe,overflow:`hidden`,direction:`stack`,children:[(0,r.jsx)(e.View,{ref:A,x:-Q,y:-$,children:m}),(0,r.jsx)(e.View,{width:V.viewportWidth,height:V.viewportHeight,enableGestures:!0,backgroundAlpha:0,onTouch:e=>{let t=e.localX,n=e.localY,r=.1;t>=-r&&t<=V.viewportWidth+r&&n>=-r&&n<=V.viewportHeight+r||e.stopPropagation()}})]}),V.showHorizontalSlider&&V.viewportWidth>0?(0,r.jsx)(e.View,{y:V.viewportHeight,width:V.viewportWidth,height:B,children:(0,r.jsx)(t.ScrollSlider,{direction:`horizontal`,size:C,scrollPosition:Q,viewportSize:V.viewportWidth,contentSize:V.effectiveContentWidth,onScroll:ve,momentum:b,onMomentumEnd:ye})}):null,V.showVerticalSlider&&V.viewportHeight>0?(0,r.jsx)(e.View,{x:V.viewportWidth,width:B,height:V.viewportHeight,children:(0,r.jsx)(t.ScrollSlider,{direction:`vertical`,size:C,scrollPosition:$,viewportSize:V.viewportHeight,contentSize:V.effectiveContentHeight,onScroll:_e,momentum:b,onMomentumEnd:ye})}):null,V.showHorizontalSlider&&V.showVerticalSlider?(0,r.jsx)(e.View,{x:V.viewportWidth,y:V.viewportHeight,width:B,height:B}):null]})})})}exports.ScrollView=p,exports.resolveScrollViewLayout=d;