@frosted-ui/react-native 0.0.1-canary.91

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 (188) hide show
  1. package/README.md +102 -0
  2. package/dist/components/accordion.d.ts +21 -0
  3. package/dist/components/accordion.d.ts.map +1 -0
  4. package/dist/components/accordion.js +94 -0
  5. package/dist/components/accordion.js.map +1 -0
  6. package/dist/components/alert-dialog.d.ts +67 -0
  7. package/dist/components/alert-dialog.d.ts.map +1 -0
  8. package/dist/components/alert-dialog.js +170 -0
  9. package/dist/components/alert-dialog.js.map +1 -0
  10. package/dist/components/aspect-ratio.d.ts +4 -0
  11. package/dist/components/aspect-ratio.d.ts.map +1 -0
  12. package/dist/components/aspect-ratio.js +4 -0
  13. package/dist/components/aspect-ratio.js.map +1 -0
  14. package/dist/components/avatar.d.ts +23 -0
  15. package/dist/components/avatar.d.ts.map +1 -0
  16. package/dist/components/avatar.js +143 -0
  17. package/dist/components/avatar.js.map +1 -0
  18. package/dist/components/badge.d.ts +17 -0
  19. package/dist/components/badge.d.ts.map +1 -0
  20. package/dist/components/badge.js +95 -0
  21. package/dist/components/badge.js.map +1 -0
  22. package/dist/components/button.d.ts +14 -0
  23. package/dist/components/button.d.ts.map +1 -0
  24. package/dist/components/button.js +85 -0
  25. package/dist/components/button.js.map +1 -0
  26. package/dist/components/callout.d.ts +25 -0
  27. package/dist/components/callout.d.ts.map +1 -0
  28. package/dist/components/callout.js +146 -0
  29. package/dist/components/callout.js.map +1 -0
  30. package/dist/components/card.d.ts +10 -0
  31. package/dist/components/card.d.ts.map +1 -0
  32. package/dist/components/card.js +41 -0
  33. package/dist/components/card.js.map +1 -0
  34. package/dist/components/checkbox.d.ts +13 -0
  35. package/dist/components/checkbox.d.ts.map +1 -0
  36. package/dist/components/checkbox.js +116 -0
  37. package/dist/components/checkbox.js.map +1 -0
  38. package/dist/components/code.d.ts +20 -0
  39. package/dist/components/code.d.ts.map +1 -0
  40. package/dist/components/code.js +83 -0
  41. package/dist/components/code.js.map +1 -0
  42. package/dist/components/context-menu.d.ts +65 -0
  43. package/dist/components/context-menu.d.ts.map +1 -0
  44. package/dist/components/context-menu.js +441 -0
  45. package/dist/components/context-menu.js.map +1 -0
  46. package/dist/components/dialog.d.ts +49 -0
  47. package/dist/components/dialog.d.ts.map +1 -0
  48. package/dist/components/dialog.js +141 -0
  49. package/dist/components/dialog.js.map +1 -0
  50. package/dist/components/dropdown-menu.d.ts +65 -0
  51. package/dist/components/dropdown-menu.d.ts.map +1 -0
  52. package/dist/components/dropdown-menu.js +441 -0
  53. package/dist/components/dropdown-menu.js.map +1 -0
  54. package/dist/components/heading.d.ts +15 -0
  55. package/dist/components/heading.d.ts.map +1 -0
  56. package/dist/components/heading.js +8 -0
  57. package/dist/components/heading.js.map +1 -0
  58. package/dist/components/hover-card.d.ts +24 -0
  59. package/dist/components/hover-card.d.ts.map +1 -0
  60. package/dist/components/hover-card.js +49 -0
  61. package/dist/components/hover-card.js.map +1 -0
  62. package/dist/components/icon-button.d.ts +14 -0
  63. package/dist/components/icon-button.d.ts.map +1 -0
  64. package/dist/components/icon-button.js +85 -0
  65. package/dist/components/icon-button.js.map +1 -0
  66. package/dist/components/icon.d.ts +28 -0
  67. package/dist/components/icon.d.ts.map +1 -0
  68. package/dist/components/icon.js +45 -0
  69. package/dist/components/icon.js.map +1 -0
  70. package/dist/components/index.d.ts +33 -0
  71. package/dist/components/index.d.ts.map +1 -0
  72. package/dist/components/index.js +45 -0
  73. package/dist/components/index.js.map +1 -0
  74. package/dist/components/label.d.ts +8 -0
  75. package/dist/components/label.d.ts.map +1 -0
  76. package/dist/components/label.js +26 -0
  77. package/dist/components/label.js.map +1 -0
  78. package/dist/components/native-only-animated-view.d.ts +223 -0
  79. package/dist/components/native-only-animated-view.d.ts.map +1 -0
  80. package/dist/components/native-only-animated-view.js +26 -0
  81. package/dist/components/native-only-animated-view.js.map +1 -0
  82. package/dist/components/popover.d.ts +24 -0
  83. package/dist/components/popover.d.ts.map +1 -0
  84. package/dist/components/popover.js +52 -0
  85. package/dist/components/popover.js.map +1 -0
  86. package/dist/components/progress.d.ts +15 -0
  87. package/dist/components/progress.d.ts.map +1 -0
  88. package/dist/components/progress.js +68 -0
  89. package/dist/components/progress.js.map +1 -0
  90. package/dist/components/radio-group.d.ts +19 -0
  91. package/dist/components/radio-group.d.ts.map +1 -0
  92. package/dist/components/radio-group.js +138 -0
  93. package/dist/components/radio-group.js.map +1 -0
  94. package/dist/components/segmented-control.d.ts +21 -0
  95. package/dist/components/segmented-control.d.ts.map +1 -0
  96. package/dist/components/segmented-control.js +113 -0
  97. package/dist/components/segmented-control.js.map +1 -0
  98. package/dist/components/select.d.ts +58 -0
  99. package/dist/components/select.d.ts.map +1 -0
  100. package/dist/components/select.js +493 -0
  101. package/dist/components/select.js.map +1 -0
  102. package/dist/components/separator.d.ts +12 -0
  103. package/dist/components/separator.d.ts.map +1 -0
  104. package/dist/components/separator.js +64 -0
  105. package/dist/components/separator.js.map +1 -0
  106. package/dist/components/skeleton.d.ts +28 -0
  107. package/dist/components/skeleton.d.ts.map +1 -0
  108. package/dist/components/skeleton.js +153 -0
  109. package/dist/components/skeleton.js.map +1 -0
  110. package/dist/components/spinner.d.ts +17 -0
  111. package/dist/components/spinner.d.ts.map +1 -0
  112. package/dist/components/spinner.js +199 -0
  113. package/dist/components/spinner.js.map +1 -0
  114. package/dist/components/switch.d.ts +13 -0
  115. package/dist/components/switch.d.ts.map +1 -0
  116. package/dist/components/switch.js +204 -0
  117. package/dist/components/switch.js.map +1 -0
  118. package/dist/components/tabs.d.ts +25 -0
  119. package/dist/components/tabs.d.ts.map +1 -0
  120. package/dist/components/tabs.js +124 -0
  121. package/dist/components/tabs.js.map +1 -0
  122. package/dist/components/text-area.d.ts +16 -0
  123. package/dist/components/text-area.d.ts.map +1 -0
  124. package/dist/components/text-area.js +117 -0
  125. package/dist/components/text-area.js.map +1 -0
  126. package/dist/components/text-field.d.ts +35 -0
  127. package/dist/components/text-field.d.ts.map +1 -0
  128. package/dist/components/text-field.js +256 -0
  129. package/dist/components/text-field.js.map +1 -0
  130. package/dist/components/text.d.ts +23 -0
  131. package/dist/components/text.d.ts.map +1 -0
  132. package/dist/components/text.js +33 -0
  133. package/dist/components/text.js.map +1 -0
  134. package/dist/components/tooltip.d.ts +24 -0
  135. package/dist/components/tooltip.d.ts.map +1 -0
  136. package/dist/components/tooltip.js +63 -0
  137. package/dist/components/tooltip.js.map +1 -0
  138. package/dist/index.d.ts +4 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +8 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/lib/button-styles.d.ts +13 -0
  143. package/dist/lib/button-styles.d.ts.map +1 -0
  144. package/dist/lib/button-styles.js +131 -0
  145. package/dist/lib/button-styles.js.map +1 -0
  146. package/dist/lib/color-utils.d.ts +21 -0
  147. package/dist/lib/color-utils.d.ts.map +1 -0
  148. package/dist/lib/color-utils.js +84 -0
  149. package/dist/lib/color-utils.js.map +1 -0
  150. package/dist/lib/dialog-styles.d.ts +42 -0
  151. package/dist/lib/dialog-styles.d.ts.map +1 -0
  152. package/dist/lib/dialog-styles.js +162 -0
  153. package/dist/lib/dialog-styles.js.map +1 -0
  154. package/dist/lib/native-colors.d.ts +8 -0
  155. package/dist/lib/native-colors.d.ts.map +1 -0
  156. package/dist/lib/native-colors.js +67 -0
  157. package/dist/lib/native-colors.js.map +1 -0
  158. package/dist/lib/panel-styles.d.ts +32 -0
  159. package/dist/lib/panel-styles.d.ts.map +1 -0
  160. package/dist/lib/panel-styles.js +96 -0
  161. package/dist/lib/panel-styles.js.map +1 -0
  162. package/dist/lib/text-input-styles.d.ts +35 -0
  163. package/dist/lib/text-input-styles.d.ts.map +1 -0
  164. package/dist/lib/text-input-styles.js +107 -0
  165. package/dist/lib/text-input-styles.js.map +1 -0
  166. package/dist/lib/theme-vars.d.ts +222 -0
  167. package/dist/lib/theme-vars.d.ts.map +1 -0
  168. package/dist/lib/theme-vars.js +173 -0
  169. package/dist/lib/theme-vars.js.map +1 -0
  170. package/dist/lib/theme.d.ts +57 -0
  171. package/dist/lib/theme.d.ts.map +1 -0
  172. package/dist/lib/theme.js +80 -0
  173. package/dist/lib/theme.js.map +1 -0
  174. package/dist/lib/types.d.ts +14 -0
  175. package/dist/lib/types.d.ts.map +1 -0
  176. package/dist/lib/types.js +2 -0
  177. package/dist/lib/types.js.map +1 -0
  178. package/dist/lib/use-theme-vars.d.ts +325 -0
  179. package/dist/lib/use-theme-vars.d.ts.map +1 -0
  180. package/dist/lib/use-theme-vars.js +17 -0
  181. package/dist/lib/use-theme-vars.js.map +1 -0
  182. package/dist/lib/utils.d.ts +3 -0
  183. package/dist/lib/utils.d.ts.map +1 -0
  184. package/dist/lib/utils.js +17 -0
  185. package/dist/lib/utils.js.map +1 -0
  186. package/global.css +1813 -0
  187. package/package.json +114 -0
  188. package/tailwind-preset.js +310 -0
@@ -0,0 +1,33 @@
1
+ import { useThemeVars } from '../lib/use-theme-vars';
2
+ import { cn } from '../lib/utils';
3
+ import * as Slot from '@rn-primitives/slot';
4
+ import * as React from 'react';
5
+ import { Text as RNText } from 'react-native';
6
+ const TextClassContext = React.createContext(undefined);
7
+ const TextStyleContext = React.createContext(undefined);
8
+ function Text({ className, asChild = false, size, weight, color, role, style, ...props }) {
9
+ const { colors, typography, fontWeights } = useThemeVars();
10
+ const textStyleContext = React.useContext(TextStyleContext);
11
+ const Component = asChild ? Slot.Text : RNText;
12
+ const effectiveSize = size ?? textStyleContext?.size;
13
+ const effectiveWeight = weight ?? textStyleContext?.weight;
14
+ // Use direct color values from Frosted colors on all platforms.
15
+ // Priority: explicit color prop > context color override > default gray-12.
16
+ const resolvedColor = (color && colors.palettes[color]['11']) ??
17
+ textStyleContext?.color ??
18
+ colors.palettes.gray['12'];
19
+ const typo = effectiveSize ? typography[effectiveSize] : undefined;
20
+ const fontWeightValue = effectiveWeight ? fontWeights[effectiveWeight] : undefined;
21
+ const typographyStyle = typo
22
+ ? {
23
+ fontSize: typo.fontSize,
24
+ lineHeight: typo.lineHeight,
25
+ letterSpacing: typo.letterSpacing,
26
+ }
27
+ : undefined;
28
+ const colorStyle = { color: resolvedColor };
29
+ const weightStyle = fontWeightValue ? { fontWeight: fontWeightValue } : undefined;
30
+ return (<Component className={cn(className)} style={[typographyStyle, weightStyle, colorStyle, style]} role={role} {...props}/>);
31
+ }
32
+ export { Text, TextClassContext, TextStyleContext };
33
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/components/text.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAY9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAqB,SAAS,CAAC,CAAC;AAO5E,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAoC,SAAS,CAAC,CAAC;AAE3F,SAAS,IAAI,CAAC,EACZ,SAAS,EACT,OAAO,GAAG,KAAK,EACf,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,KAAK,EACE;IACV,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IAC3D,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/C,MAAM,aAAa,GAAG,IAAI,IAAI,gBAAgB,EAAE,IAAI,CAAC;IACrD,MAAM,eAAe,GAAG,MAAM,IAAI,gBAAgB,EAAE,MAAM,CAAC;IAE3D,gEAAgE;IAChE,4EAA4E;IAC5E,MAAM,aAAa,GACjB,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,gBAAgB,EAAE,KAAK;QACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,MAAM,eAAe,GAAG,IAAI;QAC1B,CAAC,CAAC;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAElF,OAAO,CACL,CAAC,SAAS,CACR,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CACzB,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CACzD,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import * as TooltipPrimitive from '@rn-primitives/tooltip';
2
+ import * as React from 'react';
3
+ interface TooltipProps extends Omit<TooltipPrimitive.RootProps, 'delayDuration'> {
4
+ /** The content to display in the tooltip */
5
+ content: React.ReactNode;
6
+ /** The trigger element */
7
+ children: React.ReactNode;
8
+ /** Delay before showing tooltip (ms) */
9
+ delayDuration?: number;
10
+ /** Side offset from trigger */
11
+ sideOffset?: number;
12
+ /** Which side to show tooltip */
13
+ side?: 'top' | 'bottom' | 'left' | 'right';
14
+ /** Portal host name */
15
+ portalHost?: string;
16
+ }
17
+ /**
18
+ * Tooltip component matching web version.
19
+ * Uses reversed theme appearance (light mode shows dark tooltip, dark mode shows light tooltip).
20
+ */
21
+ declare function Tooltip({ children, content, delayDuration, sideOffset, side, portalHost, ...rootProps }: TooltipProps): React.JSX.Element;
22
+ export { Tooltip };
23
+ export type { TooltipProps };
24
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,YAAa,SAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC;IAC9E,4CAA4C;IAC5C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,0BAA0B;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,iBAAS,OAAO,CAAC,EACf,QAAQ,EACR,OAAO,EACP,aAAmB,EACnB,UAAc,EACd,IAAY,EACZ,UAAU,EACV,GAAG,SAAS,EACb,EAAE,YAAY,qBAqDd;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { NativeOnlyAnimatedView } from '../components/native-only-animated-view';
2
+ import { Text } from '../components/text';
3
+ import { useThemeVars } from '../lib/use-theme-vars';
4
+ import * as TooltipPrimitive from '@rn-primitives/tooltip';
5
+ import * as React from 'react';
6
+ import { Platform, StyleSheet, View } from 'react-native';
7
+ import { FadeIn, FadeOut } from 'react-native-reanimated';
8
+ import { FullWindowOverlay as RNFullWindowOverlay } from 'react-native-screens';
9
+ const FullWindowOverlay = Platform.OS === 'ios' ? RNFullWindowOverlay : React.Fragment;
10
+ /**
11
+ * Tooltip component matching web version.
12
+ * Uses reversed theme appearance (light mode shows dark tooltip, dark mode shows light tooltip).
13
+ */
14
+ function Tooltip({ children, content, delayDuration = 400, sideOffset = 4, side = 'top', portalHost, ...rootProps }) {
15
+ const { invertedColors } = useThemeVars();
16
+ // Use inverted theme colors - tooltip shows opposite of current theme
17
+ const backgroundColor = invertedColors.background;
18
+ const textColor = invertedColors.palettes.gray['12'];
19
+ // Shadow style
20
+ const shadowStyle = Platform.select({
21
+ web: {
22
+ boxShadow: `
23
+ 0 4px 16px -8px rgba(0, 0, 0, 0.08),
24
+ 0 3px 12px -4px rgba(0, 0, 0, 0.05),
25
+ 0 2px 3px -2px rgba(0, 0, 61, 0.05)
26
+ `.trim(),
27
+ },
28
+ default: {
29
+ shadowColor: '#000',
30
+ shadowOffset: { width: 0, height: 2 },
31
+ shadowOpacity: 0.1,
32
+ shadowRadius: 8,
33
+ elevation: 4,
34
+ },
35
+ });
36
+ const contentStyle = {
37
+ backgroundColor,
38
+ paddingVertical: 4, // space-1
39
+ paddingHorizontal: 8, // space-2
40
+ borderRadius: 10, // radius-4
41
+ ...shadowStyle,
42
+ };
43
+ return (<TooltipPrimitive.Root delayDuration={delayDuration} {...rootProps}>
44
+ <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>
45
+ <TooltipPrimitive.Portal hostName={portalHost}>
46
+ <FullWindowOverlay>
47
+ <TooltipPrimitive.Overlay style={Platform.select({ native: StyleSheet.absoluteFill })}>
48
+ <NativeOnlyAnimatedView entering={FadeIn.duration(100)} exiting={FadeOut.duration(100)}>
49
+ <TooltipPrimitive.Content sideOffset={sideOffset} side={side}>
50
+ <View style={contentStyle}>
51
+ <Text size="2" style={{ color: textColor }}>
52
+ {content}
53
+ </Text>
54
+ </View>
55
+ </TooltipPrimitive.Content>
56
+ </NativeOnlyAnimatedView>
57
+ </TooltipPrimitive.Overlay>
58
+ </FullWindowOverlay>
59
+ </TooltipPrimitive.Portal>
60
+ </TooltipPrimitive.Root>);
61
+ }
62
+ export { Tooltip };
63
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './components';
2
+ export * from './lib/types';
3
+ export * from './lib/use-theme-vars';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAI7B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ // COMPONENTS
2
+ //------------------------------------------------------------------------------
3
+ export * from './components';
4
+ // UTILITIES
5
+ //------------------------------------------------------------------------------
6
+ export * from './lib/types';
7
+ export * from './lib/use-theme-vars';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,gFAAgF;AAChF,cAAc,cAAc,CAAC;AAE7B,YAAY;AACZ,gFAAgF;AAChF,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AccentColor, Color } from '../lib/types';
2
+ import { useThemeVars } from '../lib/use-theme-vars';
3
+ import type { ViewStyle } from 'react-native';
4
+ export type ButtonSize = '1' | '2' | '3' | '4';
5
+ export type ButtonVariant = 'solid' | 'soft' | 'surface' | 'ghost';
6
+ export declare function resolveAccentFromColor(color?: Color): AccentColor;
7
+ export declare function getButtonSizeStyle(size: ButtonSize, isIconButton?: boolean): ViewStyle;
8
+ export declare function getButtonVariantStyle(variant: ButtonVariant, colors: ReturnType<typeof useThemeVars>['colors'], palette: ReturnType<typeof useThemeVars>['colors']['palettes'][AccentColor], gray: ReturnType<typeof useThemeVars>['colors']['palettes']['gray'], disabled: boolean, pressed: boolean, hovered: boolean): ViewStyle;
9
+ export declare function getButtonShadowStyle(variant: ButtonVariant, disabled: boolean, pressed: boolean): ViewStyle | undefined;
10
+ export declare function getButtonFocusStyle(palette: ReturnType<typeof useThemeVars>['colors']['palettes'][AccentColor], focused: boolean, disabled: boolean): ViewStyle | undefined;
11
+ export declare function getButtonPressedFilter(variant: ButtonVariant, pressed: boolean, disabled: boolean): ViewStyle | undefined;
12
+ export declare function getButtonTextColor(variant: ButtonVariant, palette: ReturnType<typeof useThemeVars>['colors']['palettes'][AccentColor], gray: ReturnType<typeof useThemeVars>['colors']['palettes']['gray'], disabled: boolean): string;
13
+ //# sourceMappingURL=button-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-styles.d.ts","sourceRoot":"","sources":["../../src/lib/button-styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,CAcjE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,UAAQ,GAAG,SAAS,CA+BpF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,EACjD,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAC3E,IAAI,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EACnE,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GACf,SAAS,CA+CX;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,GACf,SAAS,GAAG,SAAS,CAWvB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAC3E,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GAChB,SAAS,GAAG,SAAS,CAUvB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GAChB,SAAS,GAAG,SAAS,CAKvB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAC3E,IAAI,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EACnE,QAAQ,EAAE,OAAO,GAChB,MAAM,CAQR"}
@@ -0,0 +1,131 @@
1
+ import { Platform } from 'react-native';
2
+ export function resolveAccentFromColor(color) {
3
+ if (!color)
4
+ return 'blue';
5
+ switch (color) {
6
+ case 'danger':
7
+ return 'red';
8
+ case 'warning':
9
+ return 'amber';
10
+ case 'success':
11
+ return 'green';
12
+ case 'info':
13
+ return 'blue';
14
+ default:
15
+ return color;
16
+ }
17
+ }
18
+ export function getButtonSizeStyle(size, isIconButton = false) {
19
+ // Based on web CSS:
20
+ // Size 1: height=space-5(24), gap=space-1(4), padding=space-2(8), radius=6
21
+ // Size 2: height=space-6(32), gap=space-1*1.5(6), padding=space-3(12), radius=8
22
+ // Size 3: height=space-7(40), gap=space-2(8), padding=space-4(16), radius=10
23
+ // Size 4: height=space-8(48), gap=space-3(12), padding=space-4(16), radius=14
24
+ const baseSize = size === '1'
25
+ ? { height: 24, borderRadius: 6, gap: 4 }
26
+ : size === '2'
27
+ ? { height: 32, borderRadius: 8, gap: 6 }
28
+ : size === '3'
29
+ ? { height: 40, borderRadius: 10, gap: 8 }
30
+ : { height: 48, borderRadius: 14, gap: 12 };
31
+ if (isIconButton) {
32
+ // IconButton: square (width = height), no horizontal padding
33
+ return {
34
+ ...baseSize,
35
+ width: baseSize.height,
36
+ paddingHorizontal: 0,
37
+ };
38
+ }
39
+ // Regular Button: horizontal padding based on size
40
+ const paddingHorizontal = size === '1' ? 8 : size === '2' ? 12 : size === '3' ? 16 : 16;
41
+ return {
42
+ ...baseSize,
43
+ paddingHorizontal,
44
+ };
45
+ }
46
+ export function getButtonVariantStyle(variant, colors, palette, gray, disabled, pressed, hovered) {
47
+ let backgroundColor;
48
+ let borderColor;
49
+ let borderWidth;
50
+ if (disabled) {
51
+ switch (variant) {
52
+ case 'solid':
53
+ case 'soft':
54
+ backgroundColor = gray.a3;
55
+ break;
56
+ case 'surface':
57
+ backgroundColor = gray.a2;
58
+ borderColor = gray.a6;
59
+ borderWidth = 1;
60
+ break;
61
+ case 'ghost':
62
+ backgroundColor = 'transparent';
63
+ break;
64
+ }
65
+ }
66
+ else {
67
+ switch (variant) {
68
+ case 'solid':
69
+ backgroundColor = pressed ? palette['10'] : hovered ? palette['10'] : palette['9'];
70
+ break;
71
+ case 'soft':
72
+ backgroundColor = pressed ? palette.a5 : hovered ? palette.a4 : palette.a3;
73
+ break;
74
+ case 'surface':
75
+ // Default: panelSolid bg, gray-a5 border (stroke), outer shadow
76
+ // Hover: same bg, gray-a7 border, outer shadow
77
+ // Pressed: gray-a3 bg, gray-a6 border, no outer shadow
78
+ backgroundColor = pressed ? gray.a3 : colors.panelSolid;
79
+ borderColor = pressed ? gray.a6 : hovered ? gray.a7 : gray.a5;
80
+ borderWidth = 1;
81
+ break;
82
+ case 'ghost':
83
+ backgroundColor = pressed ? palette.a4 : hovered ? palette.a3 : undefined;
84
+ break;
85
+ }
86
+ }
87
+ return {
88
+ backgroundColor,
89
+ borderColor,
90
+ borderWidth,
91
+ };
92
+ }
93
+ export function getButtonShadowStyle(variant, disabled, pressed) {
94
+ if (!disabled && !pressed && variant === 'surface') {
95
+ return {
96
+ shadowColor: '#000000',
97
+ shadowOpacity: 0.05,
98
+ shadowOffset: { width: 0, height: 1 },
99
+ shadowRadius: 2,
100
+ elevation: 2,
101
+ };
102
+ }
103
+ return undefined;
104
+ }
105
+ export function getButtonFocusStyle(palette, focused, disabled) {
106
+ if (focused && !disabled) {
107
+ return {
108
+ outlineWidth: 2,
109
+ outlineStyle: 'solid',
110
+ outlineColor: palette.a8,
111
+ outlineOffset: 2,
112
+ };
113
+ }
114
+ return undefined;
115
+ }
116
+ export function getButtonPressedFilter(variant, pressed, disabled) {
117
+ if (Platform.OS === 'web' && pressed && !disabled && variant === 'solid') {
118
+ return { filter: 'brightness(0.92) saturate(1.1)' };
119
+ }
120
+ return undefined;
121
+ }
122
+ export function getButtonTextColor(variant, palette, gray, disabled) {
123
+ if (disabled) {
124
+ return gray.a8;
125
+ }
126
+ if (variant === 'solid') {
127
+ return palette['9-contrast'];
128
+ }
129
+ return palette.a11 || palette['11'];
130
+ }
131
+ //# sourceMappingURL=button-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-styles.js","sourceRoot":"","sources":["../../src/lib/button-styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { vars } from 'nativewind';
2
+ import type { AccentColor } from './types';
3
+ /**
4
+ * Pre-defined color themes for all accent colors.
5
+ * Similar to the theme pattern, but for color variants.
6
+ * This allows components to use text-accent-11, bg-accent-9, etc.
7
+ * and have them automatically map to the specified color.
8
+ */
9
+ export declare const colorThemes: Record<AccentColor, ReturnType<typeof vars>>;
10
+ /**
11
+ * Gets the accent color theme for a given color.
12
+ * Returns the pre-defined vars object for that color.
13
+ *
14
+ * @example
15
+ * const theme = getAccentColorTheme('yellow');
16
+ * <View style={theme}>
17
+ * <Text className="text-accent-11">This will be yellow-11</Text>
18
+ * </View>
19
+ */
20
+ export declare function getAccentColorTheme(color: AccentColor): Record<string, string>;
21
+ //# sourceMappingURL=color-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/lib/color-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAoC3C;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CA6BpE,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,0BAErD"}
@@ -0,0 +1,84 @@
1
+ import { vars } from 'nativewind';
2
+ /**
3
+ * Creates a vars object for a given color name.
4
+ * This maps all accent color variables to the specified color's variables.
5
+ */
6
+ function createColorTheme(colorName) {
7
+ return vars({
8
+ '--accent-1': `var(--${colorName}-1)`,
9
+ '--accent-2': `var(--${colorName}-2)`,
10
+ '--accent-3': `var(--${colorName}-3)`,
11
+ '--accent-4': `var(--${colorName}-4)`,
12
+ '--accent-5': `var(--${colorName}-5)`,
13
+ '--accent-6': `var(--${colorName}-6)`,
14
+ '--accent-7': `var(--${colorName}-7)`,
15
+ '--accent-8': `var(--${colorName}-8)`,
16
+ '--accent-9': `var(--${colorName}-9)`,
17
+ '--accent-9-contrast': `var(--${colorName}-9-contrast)`,
18
+ '--accent-10': `var(--${colorName}-10)`,
19
+ '--accent-11': `var(--${colorName}-11)`,
20
+ '--accent-12': `var(--${colorName}-12)`,
21
+ '--accent-a1': `var(--${colorName}-a1)`,
22
+ '--accent-a2': `var(--${colorName}-a2)`,
23
+ '--accent-a3': `var(--${colorName}-a3)`,
24
+ '--accent-a4': `var(--${colorName}-a4)`,
25
+ '--accent-a5': `var(--${colorName}-a5)`,
26
+ '--accent-a6': `var(--${colorName}-a6)`,
27
+ '--accent-a7': `var(--${colorName}-a7)`,
28
+ '--accent-a8': `var(--${colorName}-a8)`,
29
+ '--accent-a9': `var(--${colorName}-a9)`,
30
+ '--accent-a10': `var(--${colorName}-a10)`,
31
+ '--accent-a11': `var(--${colorName}-a11)`,
32
+ '--accent-a12': `var(--${colorName}-a12)`,
33
+ });
34
+ }
35
+ /**
36
+ * Pre-defined color themes for all accent colors.
37
+ * Similar to the theme pattern, but for color variants.
38
+ * This allows components to use text-accent-11, bg-accent-9, etc.
39
+ * and have them automatically map to the specified color.
40
+ */
41
+ export const colorThemes = {
42
+ tomato: createColorTheme('tomato'),
43
+ red: createColorTheme('red'),
44
+ ruby: createColorTheme('ruby'),
45
+ crimson: createColorTheme('crimson'),
46
+ pink: createColorTheme('pink'),
47
+ plum: createColorTheme('plum'),
48
+ purple: createColorTheme('purple'),
49
+ violet: createColorTheme('violet'),
50
+ iris: createColorTheme('iris'),
51
+ cyan: createColorTheme('cyan'),
52
+ teal: createColorTheme('teal'),
53
+ jade: createColorTheme('jade'),
54
+ green: createColorTheme('green'),
55
+ grass: createColorTheme('grass'),
56
+ brown: createColorTheme('brown'),
57
+ sky: createColorTheme('sky'),
58
+ mint: createColorTheme('mint'),
59
+ yellow: createColorTheme('yellow'),
60
+ amber: createColorTheme('amber'),
61
+ gold: createColorTheme('gold'),
62
+ bronze: createColorTheme('bronze'),
63
+ gray: createColorTheme('gray'),
64
+ blue: createColorTheme('blue'),
65
+ orange: createColorTheme('orange'),
66
+ indigo: createColorTheme('indigo'),
67
+ magenta: createColorTheme('magenta'),
68
+ lemon: createColorTheme('lemon'),
69
+ lime: createColorTheme('lime'),
70
+ };
71
+ /**
72
+ * Gets the accent color theme for a given color.
73
+ * Returns the pre-defined vars object for that color.
74
+ *
75
+ * @example
76
+ * const theme = getAccentColorTheme('yellow');
77
+ * <View style={theme}>
78
+ * <Text className="text-accent-11">This will be yellow-11</Text>
79
+ * </View>
80
+ */
81
+ export function getAccentColorTheme(color) {
82
+ return colorThemes[color];
83
+ }
84
+ //# sourceMappingURL=color-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../../src/lib/color-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type StyleProp, type ViewStyle } from 'react-native';
2
+ export type DialogSize = '1' | '2' | '3' | '4';
3
+ interface ThemeColors {
4
+ panelSolid: string;
5
+ palettes: {
6
+ gray: {
7
+ a3: string;
8
+ a6: string;
9
+ a7: string;
10
+ };
11
+ black: {
12
+ a3: string;
13
+ a4: string;
14
+ a6: string;
15
+ a11: string;
16
+ };
17
+ };
18
+ }
19
+ export declare function getDialogSizeStyles(size: DialogSize): {
20
+ padding: number;
21
+ borderRadius: number;
22
+ titleMarginBottom: number;
23
+ descriptionMarginBottom: number;
24
+ minWidth: number;
25
+ };
26
+ export declare function getDialogTitleSize(size: DialogSize): '3' | '5' | '6';
27
+ export declare function getDialogDescriptionSize(size: DialogSize): '1' | '2' | '3';
28
+ export declare function getDialogShadowStyle(gray: {
29
+ a3: string;
30
+ a6: string;
31
+ a7: string;
32
+ }, black: {
33
+ a3: string;
34
+ a4: string;
35
+ a6: string;
36
+ a11: string;
37
+ }, isDark: boolean): ViewStyle;
38
+ export declare function getDialogOverlayStyle(): ViewStyle;
39
+ export declare function getDialogBackdropStyle(): ViewStyle;
40
+ export declare function getDialogContentStyle(size: DialogSize, colors: ThemeColors, isDark: boolean, windowWidth: number, userStyle?: StyleProp<ViewStyle>): ViewStyle;
41
+ export {};
42
+ //# sourceMappingURL=dialog-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-styles.d.ts","sourceRoot":"","sources":["../../src/lib/dialog-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAMxE,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/C,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;SACZ,CAAC;QACF,KAAK,EAAE;YACL,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;CACH;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU;;;;;;EAmCnD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAUpE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAU1E;AAMD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAC5C,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAC1D,MAAM,EAAE,OAAO,GACd,SAAS,CAoBX;AAMD,wBAAgB,qBAAqB,IAAI,SAAS,CAejD;AAED,wBAAgB,sBAAsB,IAAI,SAAS,CAsBlD;AAMD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAC/B,SAAS,CAsCX"}
@@ -0,0 +1,162 @@
1
+ import { Platform } from 'react-native';
2
+ // ============================================================================
3
+ // Size helpers
4
+ // ============================================================================
5
+ export function getDialogSizeStyles(size) {
6
+ switch (size) {
7
+ case '1':
8
+ return {
9
+ padding: 12, // space-3
10
+ borderRadius: 8,
11
+ titleMarginBottom: 4, // space-1
12
+ descriptionMarginBottom: 12, // space-3
13
+ minWidth: 200,
14
+ };
15
+ case '2':
16
+ return {
17
+ padding: 16, // space-4
18
+ borderRadius: 12,
19
+ titleMarginBottom: 8, // space-2
20
+ descriptionMarginBottom: 16, // space-4
21
+ minWidth: 240,
22
+ };
23
+ case '3':
24
+ return {
25
+ padding: 20,
26
+ borderRadius: 16,
27
+ titleMarginBottom: 12, // space-3
28
+ descriptionMarginBottom: 20,
29
+ minWidth: 280,
30
+ };
31
+ case '4':
32
+ return {
33
+ padding: 24, // space-5
34
+ borderRadius: 20,
35
+ titleMarginBottom: 12, // space-3
36
+ descriptionMarginBottom: 24, // space-5
37
+ minWidth: 320,
38
+ };
39
+ }
40
+ }
41
+ export function getDialogTitleSize(size) {
42
+ switch (size) {
43
+ case '1':
44
+ return '3';
45
+ case '2':
46
+ case '3':
47
+ return '5';
48
+ case '4':
49
+ return '6';
50
+ }
51
+ }
52
+ export function getDialogDescriptionSize(size) {
53
+ switch (size) {
54
+ case '1':
55
+ return '1';
56
+ case '2':
57
+ case '3':
58
+ return '2';
59
+ case '4':
60
+ return '3';
61
+ }
62
+ }
63
+ // ============================================================================
64
+ // Shadow helper (shadow-6)
65
+ // ============================================================================
66
+ export function getDialogShadowStyle(gray, black, isDark) {
67
+ if (Platform.OS === 'web') {
68
+ const boxShadow = isDark
69
+ ? `0 0 0 1px ${gray.a6}, 0 12px 60px ${black.a4}, 0 16px 64px ${black.a6}, 0 16px 36px -20px ${black.a11}`
70
+ : `0 0 0 1px ${gray.a3}, 0 12px 60px ${black.a3}, 0 16px 64px ${gray.a3}, 0 16px 36px -20px ${gray.a7}`;
71
+ return { boxShadow };
72
+ }
73
+ // Native shadow approximation
74
+ return {
75
+ shadowColor: '#000',
76
+ shadowOffset: { width: 0, height: 16 },
77
+ shadowOpacity: isDark ? 0.5 : 0.25,
78
+ shadowRadius: 32,
79
+ elevation: 24,
80
+ // Add border for native
81
+ borderWidth: 1,
82
+ borderColor: isDark ? gray.a6 : gray.a3,
83
+ };
84
+ }
85
+ // ============================================================================
86
+ // Overlay styles
87
+ // ============================================================================
88
+ export function getDialogOverlayStyle() {
89
+ return {
90
+ position: Platform.OS === 'web' ? 'fixed' : 'absolute',
91
+ top: 0,
92
+ left: 0,
93
+ right: 0,
94
+ bottom: 0,
95
+ zIndex: 50,
96
+ alignItems: 'center',
97
+ justifyContent: 'center',
98
+ paddingTop: 16, // space-4
99
+ paddingBottom: 32, // max(space-4, 4vh) approximation
100
+ paddingLeft: 16, // space-4
101
+ paddingRight: 16, // space-4
102
+ };
103
+ }
104
+ export function getDialogBackdropStyle() {
105
+ if (Platform.OS === 'web') {
106
+ return {
107
+ position: 'absolute',
108
+ top: 0,
109
+ left: 0,
110
+ right: 0,
111
+ bottom: 0,
112
+ backdropFilter: 'blur(3px) brightness(0.7)',
113
+ WebkitBackdropFilter: 'blur(3px) brightness(0.7)',
114
+ };
115
+ }
116
+ // Native: semi-transparent black backdrop
117
+ return {
118
+ position: 'absolute',
119
+ top: 0,
120
+ left: 0,
121
+ right: 0,
122
+ bottom: 0,
123
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
124
+ };
125
+ }
126
+ // ============================================================================
127
+ // Content styles
128
+ // ============================================================================
129
+ export function getDialogContentStyle(size, colors, isDark, windowWidth, userStyle) {
130
+ const sizeStyles = getDialogSizeStyles(size);
131
+ const gray = colors.palettes.gray;
132
+ const black = colors.palettes.black;
133
+ const shadowStyle = getDialogShadowStyle(gray, black, isDark);
134
+ // Calculate available width (screen width minus overlay padding)
135
+ const overlayPadding = 16; // space-4
136
+ const availableWidth = windowWidth - overlayPadding * 2;
137
+ const defaultMaxWidth = 580;
138
+ // Extract maxWidth from style prop if provided
139
+ const flatStyle = userStyle
140
+ ? Array.isArray(userStyle)
141
+ ? Object.assign({}, ...userStyle.filter((s) => s != null && typeof s === 'object'))
142
+ : typeof userStyle === 'object' && userStyle != null
143
+ ? userStyle
144
+ : {}
145
+ : {};
146
+ const userMaxWidth = flatStyle.maxWidth;
147
+ const effectiveMaxWidth = typeof userMaxWidth === 'number' ? userMaxWidth : defaultMaxWidth;
148
+ return {
149
+ // On web, width: '100%' works with flexbox centering
150
+ // On native, we calculate a fixed width based on available space and maxWidth
151
+ width: Platform.OS === 'web' ? '100%' : Math.min(availableWidth, effectiveMaxWidth),
152
+ minWidth: sizeStyles.minWidth,
153
+ maxWidth: defaultMaxWidth,
154
+ backgroundColor: colors.panelSolid,
155
+ padding: sizeStyles.padding,
156
+ borderRadius: sizeStyles.borderRadius,
157
+ overflow: Platform.OS === 'web' ? 'auto' : 'hidden',
158
+ zIndex: 1,
159
+ ...shadowStyle,
160
+ };
161
+ }
162
+ //# sourceMappingURL=dialog-styles.js.map