@number10/jsx-components 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +667 -0
- package/README.md +43 -0
- package/dist/Accordion.cjs +1 -0
- package/dist/Accordion.d.ts +43 -0
- package/dist/Accordion.d.ts.map +1 -0
- package/dist/Accordion.js +71 -0
- package/dist/Accordion.test.d.ts +2 -0
- package/dist/Accordion.test.d.ts.map +1 -0
- package/dist/ActivityIndicator.cjs +1 -0
- package/dist/ActivityIndicator.d.ts +21 -0
- package/dist/ActivityIndicator.d.ts.map +1 -0
- package/dist/ActivityIndicator.js +133 -0
- package/dist/AlertDialog.cjs +1 -0
- package/dist/AlertDialog.d.ts +53 -0
- package/dist/AlertDialog.d.ts.map +1 -0
- package/dist/AlertDialog.js +76 -0
- package/dist/Badge.cjs +1 -0
- package/dist/Badge.d.ts +96 -0
- package/dist/Badge.d.ts.map +1 -0
- package/dist/Badge.js +238 -0
- package/dist/Badge.test.d.ts +2 -0
- package/dist/Badge.test.d.ts.map +1 -0
- package/dist/BottomSheet.cjs +1 -0
- package/dist/BottomSheet.d.ts +72 -0
- package/dist/BottomSheet.d.ts.map +1 -0
- package/dist/BottomSheet.js +132 -0
- package/dist/Button.cjs +1 -0
- package/dist/Button.d.ts +61 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +251 -0
- package/dist/Checkbox.cjs +1 -0
- package/dist/Checkbox.d.ts +40 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +84 -0
- package/dist/Checkbox.test.d.ts +2 -0
- package/dist/Checkbox.test.d.ts.map +1 -0
- package/dist/ColorPicker.cjs +1 -0
- package/dist/ColorPicker.d.ts +48 -0
- package/dist/ColorPicker.d.ts.map +1 -0
- package/dist/ColorPicker.js +256 -0
- package/dist/DebugPanel.cjs +1 -0
- package/dist/DebugPanel.d.ts +63 -0
- package/dist/DebugPanel.d.ts.map +1 -0
- package/dist/DebugPanel.js +116 -0
- package/dist/Dialog.cjs +1 -0
- package/dist/Dialog.d.ts +59 -0
- package/dist/Dialog.d.ts.map +1 -0
- package/dist/Dialog.js +142 -0
- package/dist/Divider.cjs +1 -0
- package/dist/Divider.d.ts +19 -0
- package/dist/Divider.d.ts.map +1 -0
- package/dist/Divider.js +15 -0
- package/dist/Divider.test.d.ts +2 -0
- package/dist/Divider.test.d.ts.map +1 -0
- package/dist/Dropdown.cjs +1 -0
- package/dist/Dropdown.d.ts +35 -0
- package/dist/Dropdown.d.ts.map +1 -0
- package/dist/Dropdown.js +222 -0
- package/dist/Icon.cjs +1 -0
- package/dist/Icon.d.ts +71 -0
- package/dist/Icon.d.ts.map +1 -0
- package/dist/Icon.js +57 -0
- package/dist/Icon.test.d.ts +2 -0
- package/dist/Icon.test.d.ts.map +1 -0
- package/dist/Image.cjs +1 -0
- package/dist/Image.d.ts +10 -0
- package/dist/Image.d.ts.map +1 -0
- package/dist/Image.js +18 -0
- package/dist/Joystick.cjs +1 -0
- package/dist/Joystick.d.ts +32 -0
- package/dist/Joystick.d.ts.map +1 -0
- package/dist/Joystick.js +185 -0
- package/dist/ListBox.cjs +1 -0
- package/dist/ListBox.d.ts +67 -0
- package/dist/ListBox.d.ts.map +1 -0
- package/dist/ListBox.js +104 -0
- package/dist/ListBox.test.d.ts +2 -0
- package/dist/ListBox.test.d.ts.map +1 -0
- package/dist/MenuButton.cjs +1 -0
- package/dist/MenuButton.d.ts +33 -0
- package/dist/MenuButton.d.ts.map +1 -0
- package/dist/MenuButton.js +63 -0
- package/dist/Modal.cjs +1 -0
- package/dist/Modal.d.ts +27 -0
- package/dist/Modal.d.ts.map +1 -0
- package/dist/Modal.js +174 -0
- package/dist/Modal.test.d.ts +2 -0
- package/dist/Modal.test.d.ts.map +1 -0
- package/dist/NineSlice.cjs +1 -0
- package/dist/NineSlice.d.ts +40 -0
- package/dist/NineSlice.d.ts.map +1 -0
- package/dist/NineSlice.js +314 -0
- package/dist/NineSlice.props.test.d.ts +2 -0
- package/dist/NineSlice.props.test.d.ts.map +1 -0
- package/dist/NineSlice.test.d.ts +2 -0
- package/dist/NineSlice.test.d.ts.map +1 -0
- package/dist/NineSliceButton.cjs +1 -0
- package/dist/NineSliceButton.d.ts +94 -0
- package/dist/NineSliceButton.d.ts.map +1 -0
- package/dist/NineSliceButton.js +61 -0
- package/dist/NineSliceButton.test.d.ts +2 -0
- package/dist/NineSliceButton.test.d.ts.map +1 -0
- package/dist/NumberInput.cjs +1 -0
- package/dist/NumberInput.d.ts +90 -0
- package/dist/NumberInput.d.ts.map +1 -0
- package/dist/NumberInput.js +222 -0
- package/dist/NumberInput.test.d.ts +2 -0
- package/dist/NumberInput.test.d.ts.map +1 -0
- package/dist/PalettePicker.cjs +1 -0
- package/dist/PalettePicker.d.ts +49 -0
- package/dist/PalettePicker.d.ts.map +1 -0
- package/dist/PalettePicker.js +152 -0
- package/dist/PalettePicker.test.d.ts +2 -0
- package/dist/PalettePicker.test.d.ts.map +1 -0
- package/dist/Popover.cjs +1 -0
- package/dist/Popover.d.ts +95 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +267 -0
- package/dist/Portal.cjs +1 -0
- package/dist/Portal.d.ts +30 -0
- package/dist/Portal.d.ts.map +1 -0
- package/dist/Portal.js +64 -0
- package/dist/Portal.test.d.ts +2 -0
- package/dist/Portal.test.d.ts.map +1 -0
- package/dist/ProgressBar.cjs +1 -0
- package/dist/ProgressBar.d.ts +61 -0
- package/dist/ProgressBar.d.ts.map +1 -0
- package/dist/ProgressBar.js +80 -0
- package/dist/ProgressBar.test.d.ts +2 -0
- package/dist/ProgressBar.test.d.ts.map +1 -0
- package/dist/ProgressView.cjs +1 -0
- package/dist/ProgressView.d.ts +37 -0
- package/dist/ProgressView.d.ts.map +1 -0
- package/dist/ProgressView.js +71 -0
- package/dist/RadioButton.cjs +1 -0
- package/dist/RadioButton.d.ts +21 -0
- package/dist/RadioButton.d.ts.map +1 -0
- package/dist/RadioButton.js +53 -0
- package/dist/RadioGroup.cjs +1 -0
- package/dist/RadioGroup.d.ts +26 -0
- package/dist/RadioGroup.d.ts.map +1 -0
- package/dist/RadioGroup.js +32 -0
- package/dist/RatingBar.cjs +1 -0
- package/dist/RatingBar.d.ts +24 -0
- package/dist/RatingBar.d.ts.map +1 -0
- package/dist/RatingBar.js +84 -0
- package/dist/ScrollSlider.cjs +1 -0
- package/dist/ScrollSlider.d.ts +48 -0
- package/dist/ScrollSlider.d.ts.map +1 -0
- package/dist/ScrollSlider.js +93 -0
- package/dist/ScrollView.cjs +1 -0
- package/dist/ScrollView.d.ts +121 -0
- package/dist/ScrollView.d.ts.map +1 -0
- package/dist/ScrollView.js +541 -0
- package/dist/ScrollView.test.d.ts +2 -0
- package/dist/ScrollView.test.d.ts.map +1 -0
- package/dist/SegmentedControl.cjs +1 -0
- package/dist/SegmentedControl.d.ts +50 -0
- package/dist/SegmentedControl.d.ts.map +1 -0
- package/dist/SegmentedControl.js +201 -0
- package/dist/SegmentedControl.test.d.ts +2 -0
- package/dist/SegmentedControl.test.d.ts.map +1 -0
- package/dist/Sidebar.cjs +1 -0
- package/dist/Sidebar.d.ts +36 -0
- package/dist/Sidebar.d.ts.map +1 -0
- package/dist/Sidebar.js +122 -0
- package/dist/Slider.cjs +1 -0
- package/dist/Slider.d.ts +80 -0
- package/dist/Slider.d.ts.map +1 -0
- package/dist/Slider.js +233 -0
- package/dist/Tabs.cjs +1 -0
- package/dist/Tabs.d.ts +23 -0
- package/dist/Tabs.d.ts.map +1 -0
- package/dist/Tabs.js +101 -0
- package/dist/TextInput.cjs +17 -0
- package/dist/TextInput.d.ts +82 -0
- package/dist/TextInput.d.ts.map +1 -0
- package/dist/TextInput.js +441 -0
- package/dist/Toast.cjs +1 -0
- package/dist/Toast.d.ts +66 -0
- package/dist/Toast.d.ts.map +1 -0
- package/dist/Toast.js +188 -0
- package/dist/Toast.test.d.ts +2 -0
- package/dist/Toast.test.d.ts.map +1 -0
- package/dist/Toggle.cjs +1 -0
- package/dist/Toggle.d.ts +14 -0
- package/dist/Toggle.d.ts.map +1 -0
- package/dist/Toggle.js +135 -0
- package/dist/Toolbar.cjs +1 -0
- package/dist/Toolbar.d.ts +129 -0
- package/dist/Toolbar.d.ts.map +1 -0
- package/dist/Toolbar.js +159 -0
- package/dist/Toolbar.test.d.ts +2 -0
- package/dist/Toolbar.test.d.ts.map +1 -0
- package/dist/TransformOriginView.cjs +1 -0
- package/dist/TransformOriginView.d.ts +8 -0
- package/dist/TransformOriginView.d.ts.map +1 -0
- package/dist/TransformOriginView.js +38 -0
- package/dist/WheelPicker.cjs +1 -0
- package/dist/WheelPicker.d.ts +58 -0
- package/dist/WheelPicker.d.ts.map +1 -0
- package/dist/WheelPicker.js +167 -0
- package/dist/WrapText.cjs +1 -0
- package/dist/WrapText.d.ts +83 -0
- package/dist/WrapText.d.ts.map +1 -0
- package/dist/WrapText.js +93 -0
- package/dist/WrapText.test.d.ts +2 -0
- package/dist/WrapText.test.d.ts.map +1 -0
- package/dist/contrast-slot-map.d.ts +33 -0
- package/dist/contrast-slot-map.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/primitives/Image.cjs +1 -0
- package/dist/primitives/Image.d.ts +11 -0
- package/dist/primitives/Image.d.ts.map +1 -0
- package/dist/primitives/Image.js +7 -0
- package/dist/primitives/Sprite.cjs +1 -0
- package/dist/primitives/Sprite.d.ts +11 -0
- package/dist/primitives/Sprite.d.ts.map +1 -0
- package/dist/primitives/Sprite.js +7 -0
- package/dist/primitives/Text.cjs +1 -0
- package/dist/primitives/Text.d.ts +14 -0
- package/dist/primitives/Text.d.ts.map +1 -0
- package/dist/primitives/Text.js +15 -0
- package/dist/primitives/VectorDrawContent.cjs +1 -0
- package/dist/primitives/VectorDrawContent.d.ts +3 -0
- package/dist/primitives/VectorDrawContent.d.ts.map +1 -0
- package/dist/primitives/VectorDrawContent.js +7 -0
- package/dist/primitives/View.cjs +1 -0
- package/dist/primitives/View.d.ts +13 -0
- package/dist/primitives/View.d.ts.map +1 -0
- package/dist/primitives/View.js +7 -0
- package/dist/primitives/index.d.ts +13 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/primitives.test.d.ts +2 -0
- package/dist/primitives/primitives.test.d.ts.map +1 -0
- package/dist/primitives.cjs +1 -0
- package/dist/primitives.d.ts +2 -0
- package/dist/primitives.js +6 -0
- package/dist/theme-defaults.cjs +1 -0
- package/dist/theme-defaults.d.ts +12 -0
- package/dist/theme-defaults.d.ts.map +1 -0
- package/dist/theme-defaults.js +1288 -0
- package/dist/theme-defaults.test.d.ts +2 -0
- package/dist/theme-defaults.test.d.ts.map +1 -0
- package/dist/theme-types.cjs +0 -0
- package/dist/theme-types.d.ts +708 -0
- package/dist/theme-types.d.ts.map +1 -0
- package/dist/theme-types.js +0 -0
- package/dist/useOverlayPresence.cjs +1 -0
- package/dist/useOverlayPresence.d.ts +24 -0
- package/dist/useOverlayPresence.d.ts.map +1 -0
- package/dist/useOverlayPresence.js +19 -0
- package/package.json +83 -0
|
@@ -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;
|