panelui-native 0.1.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 (122) hide show
  1. package/lib/module/components/alert/index.js +122 -0
  2. package/lib/module/components/alert/index.js.map +1 -0
  3. package/lib/module/components/avatar/index.js +74 -0
  4. package/lib/module/components/avatar/index.js.map +1 -0
  5. package/lib/module/components/badge/index.js +77 -0
  6. package/lib/module/components/badge/index.js.map +1 -0
  7. package/lib/module/components/bottom-sheet/index.js +137 -0
  8. package/lib/module/components/bottom-sheet/index.js.map +1 -0
  9. package/lib/module/components/button/index.js +101 -0
  10. package/lib/module/components/button/index.js.map +1 -0
  11. package/lib/module/components/card/index.js +73 -0
  12. package/lib/module/components/card/index.js.map +1 -0
  13. package/lib/module/components/checkbox/index.js +84 -0
  14. package/lib/module/components/checkbox/index.js.map +1 -0
  15. package/lib/module/components/dialog/index.js +140 -0
  16. package/lib/module/components/dialog/index.js.map +1 -0
  17. package/lib/module/components/input/index.js +92 -0
  18. package/lib/module/components/input/index.js.map +1 -0
  19. package/lib/module/components/radio-group/index.js +92 -0
  20. package/lib/module/components/radio-group/index.js.map +1 -0
  21. package/lib/module/components/select/index.js +147 -0
  22. package/lib/module/components/select/index.js.map +1 -0
  23. package/lib/module/components/skeleton/index.js +26 -0
  24. package/lib/module/components/skeleton/index.js.map +1 -0
  25. package/lib/module/components/spinner/index.js +47 -0
  26. package/lib/module/components/spinner/index.js.map +1 -0
  27. package/lib/module/components/switch/index.js +96 -0
  28. package/lib/module/components/switch/index.js.map +1 -0
  29. package/lib/module/components/tabs/index.js +161 -0
  30. package/lib/module/components/tabs/index.js.map +1 -0
  31. package/lib/module/icons/index.js +65 -0
  32. package/lib/module/icons/index.js.map +1 -0
  33. package/lib/module/index.js +36 -0
  34. package/lib/module/index.js.map +1 -0
  35. package/lib/module/package.json +1 -0
  36. package/lib/module/primitives/animated-pressable.js +51 -0
  37. package/lib/module/primitives/animated-pressable.js.map +1 -0
  38. package/lib/module/primitives/portal.js +76 -0
  39. package/lib/module/primitives/portal.js.map +1 -0
  40. package/lib/module/primitives/text.js +51 -0
  41. package/lib/module/primitives/text.js.map +1 -0
  42. package/lib/module/providers/panel-ui-provider.js +29 -0
  43. package/lib/module/providers/panel-ui-provider.js.map +1 -0
  44. package/lib/module/theme/use-theme.js +19 -0
  45. package/lib/module/theme/use-theme.js.map +1 -0
  46. package/lib/module/uniwind-env.d.js +4 -0
  47. package/lib/module/uniwind-env.d.js.map +1 -0
  48. package/lib/module/utils/cn.js +8 -0
  49. package/lib/module/utils/cn.js.map +1 -0
  50. package/lib/typescript/package.json +1 -0
  51. package/lib/typescript/src/components/alert/index.d.ts +113 -0
  52. package/lib/typescript/src/components/alert/index.d.ts.map +1 -0
  53. package/lib/typescript/src/components/avatar/index.d.ts +83 -0
  54. package/lib/typescript/src/components/avatar/index.d.ts.map +1 -0
  55. package/lib/typescript/src/components/badge/index.d.ts +114 -0
  56. package/lib/typescript/src/components/badge/index.d.ts.map +1 -0
  57. package/lib/typescript/src/components/bottom-sheet/index.d.ts +30 -0
  58. package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -0
  59. package/lib/typescript/src/components/button/index.d.ts +159 -0
  60. package/lib/typescript/src/components/button/index.d.ts.map +1 -0
  61. package/lib/typescript/src/components/card/index.d.ts +13 -0
  62. package/lib/typescript/src/components/card/index.d.ts.map +1 -0
  63. package/lib/typescript/src/components/checkbox/index.d.ts +47 -0
  64. package/lib/typescript/src/components/checkbox/index.d.ts.map +1 -0
  65. package/lib/typescript/src/components/dialog/index.d.ts +50 -0
  66. package/lib/typescript/src/components/dialog/index.d.ts.map +1 -0
  67. package/lib/typescript/src/components/input/index.d.ts +12 -0
  68. package/lib/typescript/src/components/input/index.d.ts.map +1 -0
  69. package/lib/typescript/src/components/radio-group/index.d.ts +20 -0
  70. package/lib/typescript/src/components/radio-group/index.d.ts.map +1 -0
  71. package/lib/typescript/src/components/select/index.d.ts +23 -0
  72. package/lib/typescript/src/components/select/index.d.ts.map +1 -0
  73. package/lib/typescript/src/components/skeleton/index.d.ts +6 -0
  74. package/lib/typescript/src/components/skeleton/index.d.ts.map +1 -0
  75. package/lib/typescript/src/components/spinner/index.d.ts +27 -0
  76. package/lib/typescript/src/components/spinner/index.d.ts.map +1 -0
  77. package/lib/typescript/src/components/switch/index.d.ts +76 -0
  78. package/lib/typescript/src/components/switch/index.d.ts.map +1 -0
  79. package/lib/typescript/src/components/tabs/index.d.ts +34 -0
  80. package/lib/typescript/src/components/tabs/index.d.ts.map +1 -0
  81. package/lib/typescript/src/icons/index.d.ts +9 -0
  82. package/lib/typescript/src/icons/index.d.ts.map +1 -0
  83. package/lib/typescript/src/index.d.ts +23 -0
  84. package/lib/typescript/src/index.d.ts.map +1 -0
  85. package/lib/typescript/src/primitives/animated-pressable.d.ts +14 -0
  86. package/lib/typescript/src/primitives/animated-pressable.d.ts.map +1 -0
  87. package/lib/typescript/src/primitives/portal.d.ts +11 -0
  88. package/lib/typescript/src/primitives/portal.d.ts.map +1 -0
  89. package/lib/typescript/src/primitives/text.d.ts +66 -0
  90. package/lib/typescript/src/primitives/text.d.ts.map +1 -0
  91. package/lib/typescript/src/providers/panel-ui-provider.d.ts +13 -0
  92. package/lib/typescript/src/providers/panel-ui-provider.d.ts.map +1 -0
  93. package/lib/typescript/src/theme/use-theme.d.ts +12 -0
  94. package/lib/typescript/src/theme/use-theme.d.ts.map +1 -0
  95. package/lib/typescript/src/utils/cn.d.ts +3 -0
  96. package/lib/typescript/src/utils/cn.d.ts.map +1 -0
  97. package/package.json +73 -0
  98. package/src/components/alert/index.tsx +106 -0
  99. package/src/components/avatar/index.tsx +68 -0
  100. package/src/components/badge/index.tsx +51 -0
  101. package/src/components/bottom-sheet/index.tsx +186 -0
  102. package/src/components/button/index.tsx +93 -0
  103. package/src/components/card/index.tsx +64 -0
  104. package/src/components/checkbox/index.tsx +79 -0
  105. package/src/components/dialog/index.tsx +180 -0
  106. package/src/components/input/index.tsx +104 -0
  107. package/src/components/radio-group/index.tsx +118 -0
  108. package/src/components/select/index.tsx +165 -0
  109. package/src/components/skeleton/index.tsx +34 -0
  110. package/src/components/spinner/index.tsx +53 -0
  111. package/src/components/switch/index.tsx +83 -0
  112. package/src/components/tabs/index.tsx +208 -0
  113. package/src/icons/index.tsx +48 -0
  114. package/src/index.ts +54 -0
  115. package/src/primitives/animated-pressable.tsx +71 -0
  116. package/src/primitives/portal.tsx +90 -0
  117. package/src/primitives/text.tsx +47 -0
  118. package/src/providers/panel-ui-provider.tsx +30 -0
  119. package/src/theme/use-theme.ts +18 -0
  120. package/src/uniwind-env.d.ts +1 -0
  121. package/src/utils/cn.ts +6 -0
  122. package/theme.css +143 -0
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ import { memo, useEffect } from 'react';
4
+ import Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming, cancelAnimation } from 'react-native-reanimated';
5
+ import { tv } from 'tailwind-variants';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const spinnerVariants = tv({
8
+ base: 'rounded-full border-2 border-foreground/15 border-t-primary',
9
+ variants: {
10
+ size: {
11
+ sm: 'h-4 w-4',
12
+ md: 'h-6 w-6',
13
+ lg: 'h-8 w-8 border-[3px]'
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ size: 'md'
18
+ }
19
+ });
20
+ /** Rotating ring spinner. Animation runs entirely on the UI thread. */
21
+ export const Spinner = /*#__PURE__*/memo(function Spinner({
22
+ className,
23
+ size
24
+ }) {
25
+ const rotation = useSharedValue(0);
26
+ useEffect(() => {
27
+ rotation.value = withRepeat(withTiming(360, {
28
+ duration: 800,
29
+ easing: Easing.linear
30
+ }), -1);
31
+ return () => cancelAnimation(rotation);
32
+ }, [rotation]);
33
+ const animatedStyle = useAnimatedStyle(() => ({
34
+ transform: [{
35
+ rotate: `${rotation.value}deg`
36
+ }]
37
+ }));
38
+ return /*#__PURE__*/_jsx(Animated.View, {
39
+ accessibilityRole: "progressbar",
40
+ style: animatedStyle,
41
+ className: spinnerVariants({
42
+ size,
43
+ className
44
+ })
45
+ });
46
+ });
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useEffect","Animated","Easing","useAnimatedStyle","useSharedValue","withRepeat","withTiming","cancelAnimation","tv","jsx","_jsx","spinnerVariants","base","variants","size","sm","md","lg","defaultVariants","Spinner","className","rotation","value","duration","easing","linear","animatedStyle","transform","rotate","View","accessibilityRole","style"],"sourceRoot":"../../../../src","sources":["components/spinner/index.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,SAAS,QAAQ,OAAO;AACvC,OAAOC,QAAQ,IACbC,MAAM,EACNC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,EACVC,UAAU,EACVC,eAAe,QACV,yBAAyB;AAChC,SAASC,EAAE,QAA2B,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1D,MAAMC,eAAe,GAAGH,EAAE,CAAC;EACzBI,IAAI,EAAE,6DAA6D;EACnEC,QAAQ,EAAE;IACRC,IAAI,EAAE;MACJC,EAAE,EAAE,SAAS;MACbC,EAAE,EAAE,SAAS;MACbC,EAAE,EAAE;IACN;EACF,CAAC;EACDC,eAAe,EAAE;IACfJ,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAMF;AACA,OAAO,MAAMK,OAAO,gBAAGpB,IAAI,CAAC,SAASoB,OAAOA,CAAC;EAAEC,SAAS;EAAEN;AAAmB,CAAC,EAAE;EAC9E,MAAMO,QAAQ,GAAGjB,cAAc,CAAC,CAAC,CAAC;EAElCJ,SAAS,CAAC,MAAM;IACdqB,QAAQ,CAACC,KAAK,GAAGjB,UAAU,CACzBC,UAAU,CAAC,GAAG,EAAE;MAAEiB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEtB,MAAM,CAACuB;IAAO,CAAC,CAAC,EACzD,CAAC,CACH,CAAC;IACD,OAAO,MAAMlB,eAAe,CAACc,QAAQ,CAAC;EACxC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,MAAMK,aAAa,GAAGvB,gBAAgB,CAAC,OAAO;IAC5CwB,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE,GAAGP,QAAQ,CAACC,KAAK;IAAM,CAAC;EAChD,CAAC,CAAC,CAAC;EAEH,oBACEZ,IAAA,CAACT,QAAQ,CAAC4B,IAAI;IACZC,iBAAiB,EAAC,aAAa;IAC/BC,KAAK,EAAEL,aAAc;IACrBN,SAAS,EAAET,eAAe,CAAC;MAAEG,IAAI;MAAEM;IAAU,CAAC;EAAE,CACjD,CAAC;AAEN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import { forwardRef, useEffect } from 'react';
4
+ import { Pressable, View } from 'react-native';
5
+ import Animated, { interpolate, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
6
+ import { tv } from 'tailwind-variants';
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const SPRING = {
9
+ damping: 18,
10
+ stiffness: 250,
11
+ mass: 0.5
12
+ };
13
+ const switchVariants = tv({
14
+ slots: {
15
+ track: 'justify-center rounded-full border border-transparent bg-input p-[3px]',
16
+ activeTrack: 'absolute inset-0 rounded-full bg-primary',
17
+ thumb: 'rounded-full bg-white shadow-sm'
18
+ },
19
+ variants: {
20
+ size: {
21
+ sm: {
22
+ track: 'h-6 w-10',
23
+ thumb: 'h-4 w-4'
24
+ },
25
+ md: {
26
+ track: 'h-7 w-12',
27
+ thumb: 'h-5 w-5'
28
+ }
29
+ },
30
+ disabled: {
31
+ true: {
32
+ track: 'opacity-50'
33
+ }
34
+ }
35
+ },
36
+ defaultVariants: {
37
+ size: 'md'
38
+ }
39
+ });
40
+ const TRAVEL = {
41
+ sm: 16,
42
+ md: 20
43
+ };
44
+ /**
45
+ * Animated switch. Thumb position and active-track opacity are driven on the
46
+ * UI thread; toggling never re-renders beyond the value change itself.
47
+ */
48
+ export const Switch = /*#__PURE__*/forwardRef(({
49
+ className,
50
+ value,
51
+ onValueChange,
52
+ disabled,
53
+ size = 'md'
54
+ }, ref) => {
55
+ const progress = useSharedValue(value ? 1 : 0);
56
+ const slots = switchVariants({
57
+ size,
58
+ disabled: !!disabled
59
+ });
60
+ useEffect(() => {
61
+ progress.value = withSpring(value ? 1 : 0, SPRING);
62
+ }, [value, progress]);
63
+ const thumbStyle = useAnimatedStyle(() => ({
64
+ transform: [{
65
+ translateX: interpolate(progress.value, [0, 1], [0, TRAVEL[size]])
66
+ }]
67
+ }));
68
+ const activeTrackStyle = useAnimatedStyle(() => ({
69
+ opacity: progress.value
70
+ }));
71
+ return /*#__PURE__*/_jsx(Pressable, {
72
+ ref: ref,
73
+ accessibilityRole: "switch",
74
+ accessibilityState: {
75
+ checked: value,
76
+ disabled: !!disabled
77
+ },
78
+ disabled: disabled,
79
+ onPress: () => onValueChange?.(!value),
80
+ hitSlop: 8,
81
+ children: /*#__PURE__*/_jsxs(View, {
82
+ className: slots.track({
83
+ className
84
+ }),
85
+ children: [/*#__PURE__*/_jsx(Animated.View, {
86
+ style: activeTrackStyle,
87
+ className: slots.activeTrack()
88
+ }), /*#__PURE__*/_jsx(Animated.View, {
89
+ style: thumbStyle,
90
+ className: slots.thumb()
91
+ })]
92
+ })
93
+ });
94
+ });
95
+ Switch.displayName = 'Switch';
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","useEffect","Pressable","View","Animated","interpolate","useAnimatedStyle","useSharedValue","withSpring","tv","jsx","_jsx","jsxs","_jsxs","SPRING","damping","stiffness","mass","switchVariants","slots","track","activeTrack","thumb","variants","size","sm","md","disabled","true","defaultVariants","TRAVEL","Switch","className","value","onValueChange","ref","progress","thumbStyle","transform","translateX","activeTrackStyle","opacity","accessibilityRole","accessibilityState","checked","onPress","hitSlop","children","style","displayName"],"sourceRoot":"../../../../src","sources":["components/switch/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ import { createContext, useCallback, useContext, useMemo, useState } from 'react';
4
+ import { Pressable, View } from 'react-native';
5
+ import Animated, { FadeIn, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
6
+ import { Text } from "../../primitives/text.js";
7
+ import { cn } from "../../utils/cn.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const SPRING = {
10
+ damping: 24,
11
+ stiffness: 300,
12
+ mass: 0.7
13
+ };
14
+ const TabsContext = /*#__PURE__*/createContext(null);
15
+ function useTabs(component) {
16
+ const context = useContext(TabsContext);
17
+ if (!context) {
18
+ throw new Error(`${component} must be used within a <Tabs>`);
19
+ }
20
+ return context;
21
+ }
22
+ function TabsRoot({
23
+ className,
24
+ value,
25
+ onValueChange,
26
+ defaultValue,
27
+ children,
28
+ ...props
29
+ }) {
30
+ const [internalValue, setInternalValue] = useState(defaultValue);
31
+ const [layouts, setLayouts] = useState({});
32
+ const isControlled = value !== undefined;
33
+ const resolvedValue = isControlled ? value : internalValue;
34
+ const setValue = useCallback(next => {
35
+ if (!isControlled) setInternalValue(next);
36
+ onValueChange?.(next);
37
+ }, [isControlled, onValueChange]);
38
+ const registerLayout = useCallback((tab, layout) => {
39
+ setLayouts(current => {
40
+ const existing = current[tab];
41
+ if (existing && existing.x === layout.x && existing.width === layout.width) {
42
+ return current;
43
+ }
44
+ return {
45
+ ...current,
46
+ [tab]: layout
47
+ };
48
+ });
49
+ }, []);
50
+ const context = useMemo(() => ({
51
+ value: resolvedValue,
52
+ setValue,
53
+ registerLayout,
54
+ layouts
55
+ }), [resolvedValue, setValue, registerLayout, layouts]);
56
+ return /*#__PURE__*/_jsx(TabsContext.Provider, {
57
+ value: context,
58
+ children: /*#__PURE__*/_jsx(View, {
59
+ className: cn('gap-3', className),
60
+ ...props,
61
+ children: children
62
+ })
63
+ });
64
+ }
65
+ function TabsIndicator() {
66
+ const {
67
+ value,
68
+ layouts
69
+ } = useTabs('Tabs.List');
70
+ const x = useSharedValue(0);
71
+ const width = useSharedValue(0);
72
+ const initialized = useSharedValue(0);
73
+ const layout = layouts[value];
74
+ if (layout) {
75
+ if (initialized.value === 0) {
76
+ x.value = layout.x;
77
+ width.value = layout.width;
78
+ initialized.value = 1;
79
+ } else {
80
+ x.value = withSpring(layout.x, SPRING);
81
+ width.value = withSpring(layout.width, SPRING);
82
+ }
83
+ }
84
+ const style = useAnimatedStyle(() => ({
85
+ opacity: initialized.value,
86
+ transform: [{
87
+ translateX: x.value
88
+ }],
89
+ width: width.value
90
+ }));
91
+ return /*#__PURE__*/_jsx(Animated.View, {
92
+ style: style,
93
+ className: "absolute bottom-1 top-1 left-0 rounded-md bg-popover shadow-sm"
94
+ });
95
+ }
96
+ function TabsList({
97
+ className,
98
+ children,
99
+ ...props
100
+ }) {
101
+ return /*#__PURE__*/_jsxs(View, {
102
+ accessibilityRole: "tablist",
103
+ className: cn('flex-row rounded-lg bg-muted p-1', className),
104
+ ...props,
105
+ children: [/*#__PURE__*/_jsx(TabsIndicator, {}), children]
106
+ });
107
+ }
108
+ function TabsTrigger({
109
+ className,
110
+ value,
111
+ children
112
+ }) {
113
+ const context = useTabs('Tabs.Trigger');
114
+ const active = context.value === value;
115
+ const handleLayout = useCallback(event => {
116
+ const {
117
+ x,
118
+ width
119
+ } = event.nativeEvent.layout;
120
+ context.registerLayout(value, {
121
+ x,
122
+ width
123
+ });
124
+ }, [context, value]);
125
+ return /*#__PURE__*/_jsx(Pressable, {
126
+ accessibilityRole: "tab",
127
+ accessibilityState: {
128
+ selected: active
129
+ },
130
+ onPress: () => context.setValue(value),
131
+ onLayout: handleLayout,
132
+ className: cn('flex-1 items-center justify-center rounded-md py-1.5', className),
133
+ children: typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
134
+ size: "sm",
135
+ weight: "medium",
136
+ className: active ? 'text-foreground' : 'text-muted-foreground',
137
+ children: children
138
+ }) : children
139
+ });
140
+ }
141
+ function TabsContent({
142
+ className,
143
+ value,
144
+ children,
145
+ ...props
146
+ }) {
147
+ const context = useTabs('Tabs.Content');
148
+ if (context.value !== value) return null;
149
+ return /*#__PURE__*/_jsx(Animated.View, {
150
+ entering: FadeIn.duration(150),
151
+ className: className,
152
+ ...props,
153
+ children: children
154
+ });
155
+ }
156
+ export const Tabs = Object.assign(TabsRoot, {
157
+ List: TabsList,
158
+ Trigger: TabsTrigger,
159
+ Content: TabsContent
160
+ });
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useCallback","useContext","useMemo","useState","Pressable","View","Animated","FadeIn","useAnimatedStyle","useSharedValue","withSpring","Text","cn","jsx","_jsx","jsxs","_jsxs","SPRING","damping","stiffness","mass","TabsContext","useTabs","component","context","Error","TabsRoot","className","value","onValueChange","defaultValue","children","props","internalValue","setInternalValue","layouts","setLayouts","isControlled","undefined","resolvedValue","setValue","next","registerLayout","tab","layout","current","existing","x","width","Provider","TabsIndicator","initialized","style","opacity","transform","translateX","TabsList","accessibilityRole","TabsTrigger","active","handleLayout","event","nativeEvent","accessibilityState","selected","onPress","onLayout","size","weight","TabsContent","entering","duration","Tabs","Object","assign","List","Trigger","Content"],"sourceRoot":"../../../../src","sources":["components/tabs/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ import Svg, { Path } from 'react-native-svg';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export function CheckIcon({
6
+ size = 14,
7
+ color = '#fff',
8
+ ...props
9
+ }) {
10
+ return /*#__PURE__*/_jsx(Svg, {
11
+ width: size,
12
+ height: size,
13
+ viewBox: "0 0 24 24",
14
+ fill: "none",
15
+ ...props,
16
+ children: /*#__PURE__*/_jsx(Path, {
17
+ d: "M20 6 9 17l-5-5",
18
+ stroke: color,
19
+ strokeWidth: 3,
20
+ strokeLinecap: "round",
21
+ strokeLinejoin: "round"
22
+ })
23
+ });
24
+ }
25
+ export function ChevronDownIcon({
26
+ size = 16,
27
+ color = '#737373',
28
+ ...props
29
+ }) {
30
+ return /*#__PURE__*/_jsx(Svg, {
31
+ width: size,
32
+ height: size,
33
+ viewBox: "0 0 24 24",
34
+ fill: "none",
35
+ ...props,
36
+ children: /*#__PURE__*/_jsx(Path, {
37
+ d: "m6 9 6 6 6-6",
38
+ stroke: color,
39
+ strokeWidth: 2,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round"
42
+ })
43
+ });
44
+ }
45
+ export function XIcon({
46
+ size = 16,
47
+ color = '#737373',
48
+ ...props
49
+ }) {
50
+ return /*#__PURE__*/_jsx(Svg, {
51
+ width: size,
52
+ height: size,
53
+ viewBox: "0 0 24 24",
54
+ fill: "none",
55
+ ...props,
56
+ children: /*#__PURE__*/_jsx(Path, {
57
+ d: "M18 6 6 18M6 6l12 12",
58
+ stroke: color,
59
+ strokeWidth: 2,
60
+ strokeLinecap: "round",
61
+ strokeLinejoin: "round"
62
+ })
63
+ });
64
+ }
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Svg","Path","jsx","_jsx","CheckIcon","size","color","props","width","height","viewBox","fill","children","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","ChevronDownIcon","XIcon"],"sourceRoot":"../../../src","sources":["icons/index.tsx"],"mappings":";;AAAA,OAAOA,GAAG,IAAIC,IAAI,QAAuB,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO5D,OAAO,SAASC,SAASA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAG,MAAM;EAAE,GAAGC;AAAiB,CAAC,EAAE;EAC5E,oBACEJ,IAAA,CAACH,GAAG;IAACQ,KAAK,EAAEH,IAAK;IAACI,MAAM,EAAEJ,IAAK;IAACK,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAA,GAAKJ,KAAK;IAAAK,QAAA,eACvET,IAAA,CAACF,IAAI;MACHY,CAAC,EAAC,iBAAiB;MACnBC,MAAM,EAAER,KAAM;MACdS,WAAW,EAAE,CAAE;MACfC,aAAa,EAAC,OAAO;MACrBC,cAAc,EAAC;IAAO,CACvB;EAAC,CACC,CAAC;AAEV;AAEA,OAAO,SAASC,eAAeA,CAAC;EAAEb,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAG,SAAS;EAAE,GAAGC;AAAiB,CAAC,EAAE;EACrF,oBACEJ,IAAA,CAACH,GAAG;IAACQ,KAAK,EAAEH,IAAK;IAACI,MAAM,EAAEJ,IAAK;IAACK,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAA,GAAKJ,KAAK;IAAAK,QAAA,eACvET,IAAA,CAACF,IAAI;MACHY,CAAC,EAAC,cAAc;MAChBC,MAAM,EAAER,KAAM;MACdS,WAAW,EAAE,CAAE;MACfC,aAAa,EAAC,OAAO;MACrBC,cAAc,EAAC;IAAO,CACvB;EAAC,CACC,CAAC;AAEV;AAEA,OAAO,SAASE,KAAKA,CAAC;EAAEd,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAG,SAAS;EAAE,GAAGC;AAAiB,CAAC,EAAE;EAC3E,oBACEJ,IAAA,CAACH,GAAG;IAACQ,KAAK,EAAEH,IAAK;IAACI,MAAM,EAAEJ,IAAK;IAACK,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAA,GAAKJ,KAAK;IAAAK,QAAA,eACvET,IAAA,CAACF,IAAI;MACHY,CAAC,EAAC,sBAAsB;MACxBC,MAAM,EAAER,KAAM;MACdS,WAAW,EAAE,CAAE;MACfC,aAAa,EAAC,OAAO;MACrBC,cAAc,EAAC;IAAO,CACvB;EAAC,CACC,CAAC;AAEV","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ // Providers
4
+ export { PanelUIProvider } from "./providers/panel-ui-provider.js";
5
+
6
+ // Theme
7
+ export { useTheme } from "./theme/use-theme.js";
8
+
9
+ // Primitives
10
+ export { Portal, PortalHost, PortalProvider } from "./primitives/portal.js";
11
+ export { Text } from "./primitives/text.js";
12
+ export { AnimatedPressable } from "./primitives/animated-pressable.js";
13
+
14
+ // Components
15
+ export { Alert } from "./components/alert/index.js";
16
+ export { Avatar } from "./components/avatar/index.js";
17
+ export { Badge } from "./components/badge/index.js";
18
+ export { BottomSheet } from "./components/bottom-sheet/index.js";
19
+ export { Button } from "./components/button/index.js";
20
+ export { Dialog } from "./components/dialog/index.js";
21
+ export { Select } from "./components/select/index.js";
22
+ export { Tabs } from "./components/tabs/index.js";
23
+ export { Card } from "./components/card/index.js";
24
+ export { Checkbox } from "./components/checkbox/index.js";
25
+ export { Input } from "./components/input/index.js";
26
+ export { RadioGroup } from "./components/radio-group/index.js";
27
+ export { Skeleton } from "./components/skeleton/index.js";
28
+ export { Spinner } from "./components/spinner/index.js";
29
+ export { Switch } from "./components/switch/index.js";
30
+
31
+ // Icons
32
+ export { CheckIcon, ChevronDownIcon, XIcon } from "./icons/index.js";
33
+
34
+ // Utils
35
+ export { cn } from "./utils/cn.js";
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PanelUIProvider","useTheme","Portal","PortalHost","PortalProvider","Text","AnimatedPressable","Alert","Avatar","Badge","BottomSheet","Button","Dialog","Select","Tabs","Card","Checkbox","Input","RadioGroup","Skeleton","Spinner","Switch","CheckIcon","ChevronDownIcon","XIcon","cn"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,SAASA,eAAe,QAAmC,kCAA+B;;AAE1F;AACA,SAASC,QAAQ,QAAwB,sBAAmB;;AAE5D;AACA,SAASC,MAAM,EAAEC,UAAU,EAAEC,cAAc,QAAQ,wBAAqB;AACxE,SAASC,IAAI,QAAwB,sBAAmB;AACxD,SACEC,iBAAiB,QAEZ,oCAAiC;;AAExC;AACA,SAASC,KAAK,QAAyB,6BAAoB;AAC3D,SAASC,MAAM,QAA0B,8BAAqB;AAC9D,SAASC,KAAK,QAAyB,6BAAoB;AAC3D,SACEC,WAAW,QAGN,oCAA2B;AAClC,SAASC,MAAM,QAA0B,8BAAqB;AAC9D,SACEC,MAAM,QAGD,8BAAqB;AAC5B,SAASC,MAAM,QAAgD,8BAAqB;AACpF,SACEC,IAAI,QAKC,4BAAmB;AAC1B,SAASC,IAAI,QAAwB,4BAAmB;AACxD,SAASC,QAAQ,QAA4B,gCAAuB;AACpE,SAASC,KAAK,QAAyB,6BAAoB;AAC3D,SACEC,UAAU,QAGL,mCAA0B;AACjC,SAASC,QAAQ,QAA4B,gCAAuB;AACpE,SAASC,OAAO,QAA2B,+BAAsB;AACjE,SAASC,MAAM,QAA0B,8BAAqB;;AAE9D;AACA,SAASC,SAAS,EAAEC,eAAe,EAAEC,KAAK,QAAwB,kBAAS;;AAE3E;AACA,SAASC,EAAE,QAAQ,eAAY","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { forwardRef, useCallback } from 'react';
4
+ import { Pressable } from 'react-native';
5
+ import Animated, { useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const AnimatedPressableBase = Animated.createAnimatedComponent(Pressable);
8
+ const SPRING_CONFIG = {
9
+ damping: 20,
10
+ stiffness: 300,
11
+ mass: 0.4
12
+ };
13
+ /**
14
+ * Pressable with UI-thread press feedback (scale/opacity via Reanimated).
15
+ * The shared base for every interactive PanelUI component.
16
+ */
17
+ export const AnimatedPressable = /*#__PURE__*/forwardRef(({
18
+ pressScale = 0.97,
19
+ pressOpacity = 1,
20
+ onPressIn,
21
+ onPressOut,
22
+ style,
23
+ ...props
24
+ }, ref) => {
25
+ const pressed = useSharedValue(0);
26
+ const handlePressIn = useCallback(event => {
27
+ pressed.value = withTiming(1, {
28
+ duration: 80
29
+ });
30
+ onPressIn?.(event);
31
+ }, [onPressIn, pressed]);
32
+ const handlePressOut = useCallback(event => {
33
+ pressed.value = withSpring(0, SPRING_CONFIG);
34
+ onPressOut?.(event);
35
+ }, [onPressOut, pressed]);
36
+ const animatedStyle = useAnimatedStyle(() => ({
37
+ transform: [{
38
+ scale: 1 + pressed.value * (pressScale - 1)
39
+ }],
40
+ opacity: 1 + pressed.value * (pressOpacity - 1)
41
+ }));
42
+ return /*#__PURE__*/_jsx(AnimatedPressableBase, {
43
+ ref: ref,
44
+ style: [animatedStyle, style],
45
+ onPressIn: handlePressIn,
46
+ onPressOut: handlePressOut,
47
+ ...props
48
+ });
49
+ });
50
+ AnimatedPressable.displayName = 'AnimatedPressable';
51
+ //# sourceMappingURL=animated-pressable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","useCallback","Pressable","Animated","useAnimatedStyle","useSharedValue","withSpring","withTiming","jsx","_jsx","AnimatedPressableBase","createAnimatedComponent","SPRING_CONFIG","damping","stiffness","mass","AnimatedPressable","pressScale","pressOpacity","onPressIn","onPressOut","style","props","ref","pressed","handlePressIn","event","value","duration","handlePressOut","animatedStyle","transform","scale","opacity","displayName"],"sourceRoot":"../../../src","sources":["primitives/animated-pressable.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,WAAW,QAAQ,OAAO;AAC/C,SACEC,SAAS,QAIJ,cAAc;AACrB,OAAOC,QAAQ,IACbC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,EACVC,UAAU,QACL,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEjC,MAAMC,qBAAqB,GAAGP,QAAQ,CAACQ,uBAAuB,CAACT,SAAS,CAAC;AAEzE,MAAMU,aAAa,GAAG;EAAEC,OAAO,EAAE,EAAE;EAAEC,SAAS,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAI,CAAU;AAUzE;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,gBAAGhB,UAAU,CACzC,CACE;EAAEiB,UAAU,GAAG,IAAI;EAAEC,YAAY,GAAG,CAAC;EAAEC,SAAS;EAAEC,UAAU;EAAEC,KAAK;EAAE,GAAGC;AAAM,CAAC,EAC/EC,GAAG,KACA;EACH,MAAMC,OAAO,GAAGnB,cAAc,CAAC,CAAC,CAAC;EAEjC,MAAMoB,aAAa,GAAGxB,WAAW,CAC9ByB,KAA4B,IAAK;IAChCF,OAAO,CAACG,KAAK,GAAGpB,UAAU,CAAC,CAAC,EAAE;MAAEqB,QAAQ,EAAE;IAAG,CAAC,CAAC;IAC/CT,SAAS,GAAGO,KAAK,CAAC;EACpB,CAAC,EACD,CAACP,SAAS,EAAEK,OAAO,CACrB,CAAC;EAED,MAAMK,cAAc,GAAG5B,WAAW,CAC/ByB,KAA4B,IAAK;IAChCF,OAAO,CAACG,KAAK,GAAGrB,UAAU,CAAC,CAAC,EAAEM,aAAa,CAAC;IAC5CQ,UAAU,GAAGM,KAAK,CAAC;EACrB,CAAC,EACD,CAACN,UAAU,EAAEI,OAAO,CACtB,CAAC;EAED,MAAMM,aAAa,GAAG1B,gBAAgB,CAAC,OAAO;IAC5C2B,SAAS,EAAE,CAAC;MAAEC,KAAK,EAAE,CAAC,GAAGR,OAAO,CAACG,KAAK,IAAIV,UAAU,GAAG,CAAC;IAAE,CAAC,CAAC;IAC5DgB,OAAO,EAAE,CAAC,GAAGT,OAAO,CAACG,KAAK,IAAIT,YAAY,GAAG,CAAC;EAChD,CAAC,CAAC,CAAC;EAEH,oBACET,IAAA,CAACC,qBAAqB;IACpBa,GAAG,EAAEA,GAAI;IACTF,KAAK,EAAE,CAACS,aAAa,EAAET,KAAK,CAAW;IACvCF,SAAS,EAAEM,aAAc;IACzBL,UAAU,EAAES,cAAe;IAAA,GACvBP;EAAK,CACV,CAAC;AAEN,CACF,CAAC;AAEDN,iBAAiB,CAACkB,WAAW,GAAG,mBAAmB","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ import { createContext, useContext, useEffect, useId, useRef, useSyncExternalStore } from 'react';
4
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
5
+ class PortalStore {
6
+ portals = new Map();
7
+ snapshot = this.portals;
8
+ listeners = new Set();
9
+ mount = (key, node) => {
10
+ this.portals.set(key, node);
11
+ this.emit();
12
+ };
13
+ unmount = key => {
14
+ this.portals.delete(key);
15
+ this.emit();
16
+ };
17
+ subscribe = listener => {
18
+ this.listeners.add(listener);
19
+ return () => this.listeners.delete(listener);
20
+ };
21
+ getSnapshot = () => this.snapshot;
22
+ emit() {
23
+ this.snapshot = new Map(this.portals);
24
+ this.listeners.forEach(listener => listener());
25
+ }
26
+ }
27
+ const PortalContext = /*#__PURE__*/createContext(null);
28
+ export function PortalProvider({
29
+ children
30
+ }) {
31
+ const storeRef = useRef(null);
32
+ storeRef.current ??= new PortalStore();
33
+ return /*#__PURE__*/_jsx(PortalContext.Provider, {
34
+ value: storeRef.current,
35
+ children: children
36
+ });
37
+ }
38
+ function usePortalStore(component) {
39
+ const store = useContext(PortalContext);
40
+ if (!store) {
41
+ throw new Error(`${component} must be used within a <PanelUIProvider>`);
42
+ }
43
+ return store;
44
+ }
45
+
46
+ /** Renders children into the nearest PortalHost (above everything else). */
47
+ export function Portal({
48
+ children
49
+ }) {
50
+ const store = usePortalStore('Portal');
51
+ const key = useId();
52
+ useEffect(() => {
53
+ store.mount(key, children);
54
+ return () => store.unmount(key);
55
+ }, [store, key, children]);
56
+ return null;
57
+ }
58
+
59
+ /** Mount point for portaled content. PanelUIProvider renders one automatically. */
60
+ export function PortalHost() {
61
+ const store = usePortalStore('PortalHost');
62
+ const portals = useSyncExternalStore(store.subscribe, store.getSnapshot);
63
+ return /*#__PURE__*/_jsx(_Fragment, {
64
+ children: Array.from(portals.entries(), ([key, node]) => /*#__PURE__*/_jsx(PortalFragment, {
65
+ children: node
66
+ }, key))
67
+ });
68
+ }
69
+ function PortalFragment({
70
+ children
71
+ }) {
72
+ return /*#__PURE__*/_jsx(_Fragment, {
73
+ children: children
74
+ });
75
+ }
76
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","useEffect","useId","useRef","useSyncExternalStore","jsx","_jsx","Fragment","_Fragment","PortalStore","portals","Map","snapshot","listeners","Set","mount","key","node","set","emit","unmount","delete","subscribe","listener","add","getSnapshot","forEach","PortalContext","PortalProvider","children","storeRef","current","Provider","value","usePortalStore","component","store","Error","Portal","PortalHost","Array","from","entries","PortalFragment"],"sourceRoot":"../../../src","sources":["primitives/portal.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { forwardRef } from 'react';
4
+ import { Text as RNText } from 'react-native';
5
+ import { tv } from 'tailwind-variants';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const textVariants = tv({
8
+ base: 'text-foreground',
9
+ variants: {
10
+ size: {
11
+ xs: 'text-xs',
12
+ sm: 'text-sm',
13
+ base: 'text-base',
14
+ lg: 'text-lg',
15
+ xl: 'text-xl',
16
+ '2xl': 'text-2xl',
17
+ '3xl': 'text-3xl'
18
+ },
19
+ weight: {
20
+ normal: 'font-normal',
21
+ medium: 'font-medium',
22
+ semibold: 'font-semibold',
23
+ bold: 'font-bold'
24
+ },
25
+ muted: {
26
+ true: 'text-muted-foreground'
27
+ }
28
+ },
29
+ defaultVariants: {
30
+ size: 'base',
31
+ weight: 'normal'
32
+ }
33
+ });
34
+ export const Text = /*#__PURE__*/forwardRef(({
35
+ className,
36
+ size,
37
+ weight,
38
+ muted,
39
+ ...props
40
+ }, ref) => /*#__PURE__*/_jsx(RNText, {
41
+ ref: ref,
42
+ className: textVariants({
43
+ size,
44
+ weight,
45
+ muted,
46
+ className
47
+ }),
48
+ ...props
49
+ }));
50
+ Text.displayName = 'Text';
51
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","Text","RNText","tv","jsx","_jsx","textVariants","base","variants","size","xs","sm","lg","xl","weight","normal","medium","semibold","bold","muted","true","defaultVariants","className","props","ref","displayName"],"sourceRoot":"../../../src","sources":["primitives/text.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,IAAI,IAAIC,MAAM,QAAgE,cAAc;AACrG,SAASC,EAAE,QAA2B,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1D,MAAMC,YAAY,GAAGH,EAAE,CAAC;EACtBI,IAAI,EAAE,iBAAiB;EACvBC,QAAQ,EAAE;IACRC,IAAI,EAAE;MACJC,EAAE,EAAE,SAAS;MACbC,EAAE,EAAE,SAAS;MACbJ,IAAI,EAAE,WAAW;MACjBK,EAAE,EAAE,SAAS;MACbC,EAAE,EAAE,SAAS;MACb,KAAK,EAAE,UAAU;MACjB,KAAK,EAAE;IACT,CAAC;IACDC,MAAM,EAAE;MACNC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE,aAAa;MACrBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;IACR,CAAC;IACDC,KAAK,EAAE;MACLC,IAAI,EAAE;IACR;EACF,CAAC;EACDC,eAAe,EAAE;IACfZ,IAAI,EAAE,MAAM;IACZK,MAAM,EAAE;EACV;AACF,CAAC,CAAC;AAMF,OAAO,MAAMb,IAAI,gBAAGD,UAAU,CAC5B,CAAC;EAAEsB,SAAS;EAAEb,IAAI;EAAEK,MAAM;EAAEK,KAAK;EAAE,GAAGI;AAAM,CAAC,EAAEC,GAAG,kBAChDnB,IAAA,CAACH,MAAM;EACLsB,GAAG,EAAEA,GAAI;EACTF,SAAS,EAAEhB,YAAY,CAAC;IAAEG,IAAI;IAAEK,MAAM;IAAEK,KAAK;IAAEG;EAAU,CAAC,CAAE;EAAA,GACxDC;AAAK,CACV,CAEL,CAAC;AAEDtB,IAAI,CAACwB,WAAW,GAAG,MAAM","ignoreList":[]}