@valpro-labs/ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/components/blocks/accessory-card.d.ts +37 -0
  4. package/dist/components/blocks/accessory-card.d.ts.map +1 -0
  5. package/dist/components/blocks/accessory-card.js +42 -0
  6. package/dist/components/blocks/accessory-card.js.map +1 -0
  7. package/dist/components/blocks/agent-card.d.ts +28 -0
  8. package/dist/components/blocks/agent-card.d.ts.map +1 -0
  9. package/dist/components/blocks/agent-card.js +21 -0
  10. package/dist/components/blocks/agent-card.js.map +1 -0
  11. package/dist/components/blocks/bundle-card.d.ts +37 -0
  12. package/dist/components/blocks/bundle-card.d.ts.map +1 -0
  13. package/dist/components/blocks/bundle-card.js +33 -0
  14. package/dist/components/blocks/bundle-card.js.map +1 -0
  15. package/dist/components/blocks/daily-progress-skeleton.d.ts +8 -0
  16. package/dist/components/blocks/daily-progress-skeleton.d.ts.map +1 -0
  17. package/dist/components/blocks/daily-progress-skeleton.js +31 -0
  18. package/dist/components/blocks/daily-progress-skeleton.js.map +1 -0
  19. package/dist/components/blocks/daily-progress.d.ts +16 -0
  20. package/dist/components/blocks/daily-progress.d.ts.map +1 -0
  21. package/dist/components/blocks/daily-progress.js +209 -0
  22. package/dist/components/blocks/daily-progress.js.map +1 -0
  23. package/dist/components/blocks/expression-wheel.d.ts +30 -0
  24. package/dist/components/blocks/expression-wheel.d.ts.map +1 -0
  25. package/dist/components/blocks/expression-wheel.js +76 -0
  26. package/dist/components/blocks/expression-wheel.js.map +1 -0
  27. package/dist/components/blocks/friend-party-others-row.d.ts +20 -0
  28. package/dist/components/blocks/friend-party-others-row.d.ts.map +1 -0
  29. package/dist/components/blocks/friend-party-others-row.js +17 -0
  30. package/dist/components/blocks/friend-party-others-row.js.map +1 -0
  31. package/dist/components/blocks/friend-row-skeleton.d.ts +13 -0
  32. package/dist/components/blocks/friend-row-skeleton.d.ts.map +1 -0
  33. package/dist/components/blocks/friend-row-skeleton.js +14 -0
  34. package/dist/components/blocks/friend-row-skeleton.js.map +1 -0
  35. package/dist/components/blocks/friend-row.d.ts +39 -0
  36. package/dist/components/blocks/friend-row.d.ts.map +1 -0
  37. package/dist/components/blocks/friend-row.js +39 -0
  38. package/dist/components/blocks/friend-row.js.map +1 -0
  39. package/dist/components/blocks/index.d.ts +2 -0
  40. package/dist/components/blocks/index.d.ts.map +1 -0
  41. package/dist/components/blocks/index.js +4 -0
  42. package/dist/components/blocks/index.js.map +1 -0
  43. package/dist/components/blocks/item-bought-overlay.d.ts +32 -0
  44. package/dist/components/blocks/item-bought-overlay.d.ts.map +1 -0
  45. package/dist/components/blocks/item-bought-overlay.js +20 -0
  46. package/dist/components/blocks/item-bought-overlay.js.map +1 -0
  47. package/dist/components/blocks/map-banner.d.ts +39 -0
  48. package/dist/components/blocks/map-banner.d.ts.map +1 -0
  49. package/dist/components/blocks/map-banner.js +22 -0
  50. package/dist/components/blocks/map-banner.js.map +1 -0
  51. package/dist/components/blocks/match-card-skeleton.d.ts +13 -0
  52. package/dist/components/blocks/match-card-skeleton.d.ts.map +1 -0
  53. package/dist/components/blocks/match-card-skeleton.js +14 -0
  54. package/dist/components/blocks/match-card-skeleton.js.map +1 -0
  55. package/dist/components/blocks/match-card.d.ts +52 -0
  56. package/dist/components/blocks/match-card.d.ts.map +1 -0
  57. package/dist/components/blocks/match-card.js +48 -0
  58. package/dist/components/blocks/match-card.js.map +1 -0
  59. package/dist/components/blocks/match-info-row.d.ts +30 -0
  60. package/dist/components/blocks/match-info-row.d.ts.map +1 -0
  61. package/dist/components/blocks/match-info-row.js +18 -0
  62. package/dist/components/blocks/match-info-row.js.map +1 -0
  63. package/dist/components/blocks/mission-card-skeleton.d.ts +15 -0
  64. package/dist/components/blocks/mission-card-skeleton.d.ts.map +1 -0
  65. package/dist/components/blocks/mission-card-skeleton.js +16 -0
  66. package/dist/components/blocks/mission-card-skeleton.js.map +1 -0
  67. package/dist/components/blocks/mission-card.d.ts +28 -0
  68. package/dist/components/blocks/mission-card.d.ts.map +1 -0
  69. package/dist/components/blocks/mission-card.js +32 -0
  70. package/dist/components/blocks/mission-card.js.map +1 -0
  71. package/dist/components/blocks/mission-list.d.ts +42 -0
  72. package/dist/components/blocks/mission-list.d.ts.map +1 -0
  73. package/dist/components/blocks/mission-list.js +27 -0
  74. package/dist/components/blocks/mission-list.js.map +1 -0
  75. package/dist/components/blocks/offer-card.d.ts +44 -0
  76. package/dist/components/blocks/offer-card.d.ts.map +1 -0
  77. package/dist/components/blocks/offer-card.js +71 -0
  78. package/dist/components/blocks/offer-card.js.map +1 -0
  79. package/dist/components/blocks/owned-item-card.d.ts +54 -0
  80. package/dist/components/blocks/owned-item-card.d.ts.map +1 -0
  81. package/dist/components/blocks/owned-item-card.js +37 -0
  82. package/dist/components/blocks/owned-item-card.js.map +1 -0
  83. package/dist/components/blocks/player-card-skeleton.d.ts +13 -0
  84. package/dist/components/blocks/player-card-skeleton.d.ts.map +1 -0
  85. package/dist/components/blocks/player-card-skeleton.js +14 -0
  86. package/dist/components/blocks/player-card-skeleton.js.map +1 -0
  87. package/dist/components/blocks/player-card.d.ts +28 -0
  88. package/dist/components/blocks/player-card.d.ts.map +1 -0
  89. package/dist/components/blocks/player-card.js +22 -0
  90. package/dist/components/blocks/player-card.js.map +1 -0
  91. package/dist/components/blocks/player-row.d.ts +37 -0
  92. package/dist/components/blocks/player-row.d.ts.map +1 -0
  93. package/dist/components/blocks/player-row.js +23 -0
  94. package/dist/components/blocks/player-row.js.map +1 -0
  95. package/dist/components/blocks/rank-card.d.ts +42 -0
  96. package/dist/components/blocks/rank-card.d.ts.map +1 -0
  97. package/dist/components/blocks/rank-card.js +23 -0
  98. package/dist/components/blocks/rank-card.js.map +1 -0
  99. package/dist/components/blocks/rank-pyramid.d.ts +35 -0
  100. package/dist/components/blocks/rank-pyramid.d.ts.map +1 -0
  101. package/dist/components/blocks/rank-pyramid.js +97 -0
  102. package/dist/components/blocks/rank-pyramid.js.map +1 -0
  103. package/dist/components/blocks/rank-tier-card-skeleton.d.ts +13 -0
  104. package/dist/components/blocks/rank-tier-card-skeleton.d.ts.map +1 -0
  105. package/dist/components/blocks/rank-tier-card-skeleton.js +14 -0
  106. package/dist/components/blocks/rank-tier-card-skeleton.js.map +1 -0
  107. package/dist/components/blocks/rank-tier-card.d.ts +27 -0
  108. package/dist/components/blocks/rank-tier-card.d.ts.map +1 -0
  109. package/dist/components/blocks/rank-tier-card.js +21 -0
  110. package/dist/components/blocks/rank-tier-card.js.map +1 -0
  111. package/dist/components/blocks/reward-item.d.ts +38 -0
  112. package/dist/components/blocks/reward-item.d.ts.map +1 -0
  113. package/dist/components/blocks/reward-item.js +29 -0
  114. package/dist/components/blocks/reward-item.js.map +1 -0
  115. package/dist/components/blocks/role-card.d.ts +24 -0
  116. package/dist/components/blocks/role-card.d.ts.map +1 -0
  117. package/dist/components/blocks/role-card.js +25 -0
  118. package/dist/components/blocks/role-card.js.map +1 -0
  119. package/dist/components/blocks/section-title.d.ts +21 -0
  120. package/dist/components/blocks/section-title.d.ts.map +1 -0
  121. package/dist/components/blocks/section-title.js +17 -0
  122. package/dist/components/blocks/section-title.js.map +1 -0
  123. package/dist/components/blocks/settings-group.d.ts +19 -0
  124. package/dist/components/blocks/settings-group.d.ts.map +1 -0
  125. package/dist/components/blocks/settings-group.js +15 -0
  126. package/dist/components/blocks/settings-group.js.map +1 -0
  127. package/dist/components/blocks/settings-row.d.ts +36 -0
  128. package/dist/components/blocks/settings-row.d.ts.map +1 -0
  129. package/dist/components/blocks/settings-row.js +24 -0
  130. package/dist/components/blocks/settings-row.js.map +1 -0
  131. package/dist/components/blocks/skin-tile.d.ts +39 -0
  132. package/dist/components/blocks/skin-tile.d.ts.map +1 -0
  133. package/dist/components/blocks/skin-tile.js +26 -0
  134. package/dist/components/blocks/skin-tile.js.map +1 -0
  135. package/dist/components/blocks/wallet.d.ts +27 -0
  136. package/dist/components/blocks/wallet.d.ts.map +1 -0
  137. package/dist/components/blocks/wallet.js +21 -0
  138. package/dist/components/blocks/wallet.js.map +1 -0
  139. package/dist/components/blocks/weapon-category-grid.d.ts +50 -0
  140. package/dist/components/blocks/weapon-category-grid.d.ts.map +1 -0
  141. package/dist/components/blocks/weapon-category-grid.js +25 -0
  142. package/dist/components/blocks/weapon-category-grid.js.map +1 -0
  143. package/dist/components/ui/button.d.ts +15 -0
  144. package/dist/components/ui/button.d.ts.map +1 -0
  145. package/dist/components/ui/button.js +61 -0
  146. package/dist/components/ui/button.js.map +1 -0
  147. package/dist/components/ui/image.d.ts +7 -0
  148. package/dist/components/ui/image.d.ts.map +1 -0
  149. package/dist/components/ui/image.js +9 -0
  150. package/dist/components/ui/image.js.map +1 -0
  151. package/dist/components/ui/image.web.d.ts +40 -0
  152. package/dist/components/ui/image.web.d.ts.map +1 -0
  153. package/dist/components/ui/image.web.js +33 -0
  154. package/dist/components/ui/image.web.js.map +1 -0
  155. package/dist/components/ui/progress.d.ts +9 -0
  156. package/dist/components/ui/progress.d.ts.map +1 -0
  157. package/dist/components/ui/progress.js +36 -0
  158. package/dist/components/ui/progress.js.map +1 -0
  159. package/dist/components/ui/progress.web.d.ts +16 -0
  160. package/dist/components/ui/progress.web.d.ts.map +1 -0
  161. package/dist/components/ui/progress.web.js +20 -0
  162. package/dist/components/ui/progress.web.js.map +1 -0
  163. package/dist/components/ui/separator.d.ts +9 -0
  164. package/dist/components/ui/separator.d.ts.map +1 -0
  165. package/dist/components/ui/separator.js +8 -0
  166. package/dist/components/ui/separator.js.map +1 -0
  167. package/dist/components/ui/skeleton.d.ts +7 -0
  168. package/dist/components/ui/skeleton.d.ts.map +1 -0
  169. package/dist/components/ui/skeleton.js +17 -0
  170. package/dist/components/ui/skeleton.js.map +1 -0
  171. package/dist/components/ui/skeleton.web.d.ts +14 -0
  172. package/dist/components/ui/skeleton.web.d.ts.map +1 -0
  173. package/dist/components/ui/skeleton.web.js +15 -0
  174. package/dist/components/ui/skeleton.web.js.map +1 -0
  175. package/dist/components/ui/text.d.ts +13 -0
  176. package/dist/components/ui/text.d.ts.map +1 -0
  177. package/dist/components/ui/text.js +49 -0
  178. package/dist/components/ui/text.js.map +1 -0
  179. package/dist/index.d.ts +84 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +46 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/svg-shim.d.ts +12 -0
  184. package/dist/lib/svg-shim.d.ts.map +1 -0
  185. package/dist/lib/svg-shim.js +12 -0
  186. package/dist/lib/svg-shim.js.map +1 -0
  187. package/dist/lib/svg-shim.web.d.ts +32 -0
  188. package/dist/lib/svg-shim.web.d.ts.map +1 -0
  189. package/dist/lib/svg-shim.web.js +16 -0
  190. package/dist/lib/svg-shim.web.js.map +1 -0
  191. package/dist/lib/utils.d.ts +3 -0
  192. package/dist/lib/utils.d.ts.map +1 -0
  193. package/dist/lib/utils.js +6 -0
  194. package/dist/lib/utils.js.map +1 -0
  195. package/dist/lib/weapon-grid-transform.d.ts +30 -0
  196. package/dist/lib/weapon-grid-transform.d.ts.map +1 -0
  197. package/dist/lib/weapon-grid-transform.js +106 -0
  198. package/dist/lib/weapon-grid-transform.js.map +1 -0
  199. package/dist/styles/global.css +132 -0
  200. package/package.json +102 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-group.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/settings-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,kBAAkB;IAC1B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB,2CAWxE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { Text } from '../../components/ui/text';
4
+ import { cn } from '../../lib/utils';
5
+ /**
6
+ * Rounded card container for a cluster of settings rows, with an optional
7
+ * uppercase label above. Matches the grouping used on the app's settings
8
+ * screen — consumer composes `SettingsRow`s inside, interleaving
9
+ * `Separator` between rows as needed.
10
+ */
11
+ function SettingsGroup({ label, children, className }) {
12
+ return (_jsxs(View, { children: [label ? (_jsx(Text, { className: "text-muted-foreground px-1 pb-1.5 text-sm font-semibold uppercase", children: label })) : null, _jsx(View, { className: cn('bg-card overflow-hidden rounded-2xl', className), children: children })] }));
13
+ }
14
+ export { SettingsGroup };
15
+ //# sourceMappingURL=settings-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-group.js","sourceRoot":"","sources":["../../../src/components/blocks/settings-group.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAWjC;;;;;GAKG;AACH,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAsB;IACvE,OAAO,CACL,MAAC,IAAI,eACF,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,IAAI,IAAC,SAAS,EAAC,mEAAmE,YAChF,KAAK,GACD,CACR,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAQ,IACnF,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ interface SettingsRowProps {
3
+ /** Leading icon slot. Consumer provides the icon node — the library is icon-agnostic. */
4
+ icon?: React.ReactNode;
5
+ /** Primary row label. */
6
+ label: string;
7
+ /** Secondary text rendered beneath the label. */
8
+ sub?: string;
9
+ /**
10
+ * Trailing slot — typically a chevron, external-link icon, badge, or a value
11
+ * `<Text>` (e.g. app version). Consumer provides the node.
12
+ */
13
+ rightSlot?: React.ReactNode;
14
+ /**
15
+ * Tap handler. When omitted the row renders as a plain, non-interactive
16
+ * `View` with the same layout (used for read-only rows like "App version").
17
+ */
18
+ onPress?: () => void;
19
+ /** Forwarded to the underlying Button when `onPress` is set. */
20
+ disabled?: boolean;
21
+ /** Extra classes merged onto the row wrapper. */
22
+ className?: string;
23
+ }
24
+ /**
25
+ * Single row inside a `SettingsGroup` — leading icon, label (with optional
26
+ * sub-label), and a trailing slot. Purely presentational: the consumer
27
+ * supplies the icon node, strings, and tap handler.
28
+ *
29
+ * With `onPress`, renders a ghost `Button` so the full row gets press
30
+ * feedback. Without, renders a plain `View` for read-only rows (e.g. a
31
+ * version display where `rightSlot` is just a value `<Text>`).
32
+ */
33
+ declare function SettingsRow({ icon, label, sub, rightSlot, onPress, disabled, className, }: SettingsRowProps): import("react/jsx-runtime").JSX.Element;
34
+ export { SettingsRow };
35
+ export type { SettingsRowProps };
36
+ //# sourceMappingURL=settings-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-row.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/settings-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,UAAU,gBAAgB;IACxB,yFAAyF;IACzF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,iBAAS,WAAW,CAAC,EACnB,IAAI,EACJ,KAAK,EACL,GAAG,EACH,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,2CAyBlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { Button } from '../../components/ui/button';
4
+ import { Text } from '../../components/ui/text';
5
+ import { cn } from '../../lib/utils';
6
+ const ROW_CLASSES = 'h-auto min-h-12 flex-row items-center gap-x-3 rounded-none px-3.5 py-3';
7
+ /**
8
+ * Single row inside a `SettingsGroup` — leading icon, label (with optional
9
+ * sub-label), and a trailing slot. Purely presentational: the consumer
10
+ * supplies the icon node, strings, and tap handler.
11
+ *
12
+ * With `onPress`, renders a ghost `Button` so the full row gets press
13
+ * feedback. Without, renders a plain `View` for read-only rows (e.g. a
14
+ * version display where `rightSlot` is just a value `<Text>`).
15
+ */
16
+ function SettingsRow({ icon, label, sub, rightSlot, onPress, disabled, className, }) {
17
+ const content = (_jsxs(_Fragment, { children: [icon, _jsxs(View, { className: "flex-1", children: [_jsx(Text, { className: "text-foreground text-sm", children: label }), sub ? _jsx(Text, { className: "text-muted-foreground mt-px text-xs", children: sub }) : null] }), rightSlot] }));
18
+ if (!onPress) {
19
+ return _jsx(View, { className: cn(ROW_CLASSES, className), children: content });
20
+ }
21
+ return (_jsx(Button, { variant: "ghost", onPress: onPress, disabled: disabled, className: cn(ROW_CLASSES, className), children: content }));
22
+ }
23
+ export { SettingsRow };
24
+ //# sourceMappingURL=settings-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-row.js","sourceRoot":"","sources":["../../../src/components/blocks/settings-row.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAyBjC,MAAM,WAAW,GAAG,wEAAwE,CAAC;AAE7F;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,KAAK,EACL,GAAG,EACH,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,GACQ;IACjB,MAAM,OAAO,GAAG,CACd,8BACG,IAAI,EACL,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,aACtB,KAAC,IAAI,IAAC,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAQ,EACvD,GAAG,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,qCAAqC,YAAE,GAAG,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC3E,EACN,SAAS,IACT,CACJ,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YAAG,OAAO,GAAQ,CAAC;IACvE,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YACpC,OAAO,GACD,CACV,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ interface SkinTileProps {
3
+ /**
4
+ * Optional swatch / preview image used as the tile background. Chroma
5
+ * tiles pass the chroma swatch; level tiles omit this and render on
6
+ * the plain card background.
7
+ */
8
+ swatchUrl?: string;
9
+ /** Render the selection ring + tinted wash. */
10
+ isSelected?: boolean;
11
+ /**
12
+ * Content rendered inside the 45° rotated diamond overlay in the
13
+ * tile's center. Consumer supplies a lock icon (not owned) or a
14
+ * checkmark (equipped), already counter-rotated. Pass `null` for
15
+ * owned-but-not-equipped tiles.
16
+ */
17
+ stateIcon?: React.ReactNode;
18
+ /**
19
+ * Badge pinned to the bottom-right — typically a favorite star.
20
+ * Only used by chroma tiles in the source.
21
+ */
22
+ favoriteBadge?: React.ReactNode;
23
+ /** Extra classes merged onto the outer tile wrapper. */
24
+ className?: string;
25
+ }
26
+ /**
27
+ * 48-square tile used for both skin levels and chromas in the weapon
28
+ * detail view. Always renders a centered diamond overlay that hosts
29
+ * lock / equipped state; chromas additionally fill the tile with a
30
+ * swatch image and may pin a favorite badge.
31
+ *
32
+ * Data-free: consumer resolves ownership / equipped / favorite state
33
+ * upstream and supplies the icons as `ReactNode`. Pair with a
34
+ * `<Pressable>` wrapper for tap handling.
35
+ */
36
+ declare function SkinTile({ swatchUrl, isSelected, stateIcon, favoriteBadge, className, }: SkinTileProps): import("react/jsx-runtime").JSX.Element;
37
+ export { SkinTile };
38
+ export type { SkinTileProps };
39
+ //# sourceMappingURL=skin-tile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skin-tile.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/skin-tile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,aAAa;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,UAAkB,EAClB,SAAS,EACT,aAAa,EACb,SAAS,GACV,EAAE,aAAa,2CA2Cf;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { Image } from '../../components/ui/image';
4
+ import { cn } from '../../lib/utils';
5
+ /**
6
+ * 48-square tile used for both skin levels and chromas in the weapon
7
+ * detail view. Always renders a centered diamond overlay that hosts
8
+ * lock / equipped state; chromas additionally fill the tile with a
9
+ * swatch image and may pin a favorite badge.
10
+ *
11
+ * Data-free: consumer resolves ownership / equipped / favorite state
12
+ * upstream and supplies the icons as `ReactNode`. Pair with a
13
+ * `<Pressable>` wrapper for tap handling.
14
+ */
15
+ function SkinTile({ swatchUrl, isSelected = false, stateIcon, favoriteBadge, className, }) {
16
+ return (_jsxs(View, { className: cn('bg-card relative items-center justify-center overflow-hidden rounded-lg', isSelected && 'ring-val-red ring-2', className), style: { width: 48, height: 48 }, children: [swatchUrl ? (_jsx(Image, { source: swatchUrl, style: { width: '100%', height: '100%' }, contentFit: "cover" })) : null, isSelected ? (_jsx(View, { className: "bg-val-red/20 absolute inset-0", pointerEvents: "none" })) : null, _jsx(View, { className: "absolute inset-0 items-center justify-center", children: _jsx(View, { className: "items-center justify-center", style: {
17
+ width: 18,
18
+ height: 18,
19
+ transform: [{ rotate: '45deg' }],
20
+ backgroundColor: 'rgba(0,0,0,0.6)',
21
+ borderWidth: 1,
22
+ borderColor: 'rgba(255,255,255,0.4)',
23
+ }, children: stateIcon ? (_jsx(View, { style: { transform: [{ rotate: '-45deg' }] }, children: stateIcon })) : null }) }), favoriteBadge ? (_jsx(View, { className: "absolute right-0.5 bottom-0.5", children: favoriteBadge })) : null] }));
24
+ }
25
+ export { SkinTile };
26
+ //# sourceMappingURL=skin-tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skin-tile.js","sourceRoot":"","sources":["../../../src/components/blocks/skin-tile.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AA2BjC;;;;;;;;;GASG;AACH,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,UAAU,GAAG,KAAK,EAClB,SAAS,EACT,aAAa,EACb,SAAS,GACK;IACd,OAAO,CACL,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,UAAU,IAAI,qBAAqB,EACnC,SAAS,CACV,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAC/B,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,KAAK,IACJ,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACxC,UAAU,EAAC,OAAO,GAClB,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,SAAS,EAAC,gCAAgC,EAAC,aAAa,EAAC,MAAM,GAAG,CACzE,CAAC,CAAC,CAAC,IAAI,EAER,KAAC,IAAI,IAAC,SAAS,EAAC,8CAA8C,YAC5D,KAAC,IAAI,IACH,SAAS,EAAC,6BAA6B,EACvC,KAAK,EAAE;wBACL,KAAK,EAAE,EAAE;wBACT,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;wBAChC,eAAe,EAAE,iBAAiB;wBAClC,WAAW,EAAE,CAAC;wBACd,WAAW,EAAE,uBAAuB;qBACrC,YACA,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAG,SAAS,GAAQ,CACvE,CAAC,CAAC,CAAC,IAAI,GACH,GACF,EAEN,aAAa,CAAC,CAAC,CAAC,CACf,KAAC,IAAI,IAAC,SAAS,EAAC,+BAA+B,YAAE,aAAa,GAAQ,CACvE,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ interface WalletBalance {
2
+ /** Stable key (typically the currency UUID). */
3
+ key: string;
4
+ /** Currency icon — tinted with `--color-foreground`. */
5
+ iconUrl?: string;
6
+ /** Current balance. Omit to render a dash placeholder. */
7
+ amount?: number;
8
+ }
9
+ interface WalletProps {
10
+ /** Currencies to render, in the display order chosen by the caller. */
11
+ balances: WalletBalance[];
12
+ /** Swap each amount for a skeleton placeholder. */
13
+ isLoading?: boolean;
14
+ /** Extra classes merged onto the outer wrapper. */
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Store wallet strip — a horizontal row of currency balances shown above
19
+ * the store feed (Valorant Points, Radianite Points, Kingdom Credits, …).
20
+ *
21
+ * Data-free: the consumer resolves the currency list + icons (from
22
+ * whichever asset store they use) and passes `balances` in display order.
23
+ */
24
+ declare function Wallet({ balances, isLoading, className }: WalletProps): import("react/jsx-runtime").JSX.Element;
25
+ export { Wallet };
26
+ export type { WalletProps, WalletBalance };
27
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/wallet.tsx"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACnB,uEAAuE;IACvE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAiB,EAAE,SAAS,EAAE,EAAE,WAAW,2CA4BtE;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { useCSSVariable } from 'uniwind';
4
+ import { Image } from '../../components/ui/image';
5
+ import { Skeleton } from '../../components/ui/skeleton';
6
+ import { Text } from '../../components/ui/text';
7
+ import { cn } from '../../lib/utils';
8
+ /**
9
+ * Store wallet strip — a horizontal row of currency balances shown above
10
+ * the store feed (Valorant Points, Radianite Points, Kingdom Credits, …).
11
+ *
12
+ * Data-free: the consumer resolves the currency list + icons (from
13
+ * whichever asset store they use) and passes `balances` in display order.
14
+ */
15
+ function Wallet({ balances, isLoading = false, className }) {
16
+ const foregroundRaw = useCSSVariable('--color-foreground');
17
+ const foreground = typeof foregroundRaw === 'string' ? foregroundRaw : undefined;
18
+ return (_jsx(View, { className: cn('bg-card overflow-hidden rounded-2xl px-4 py-3', className), children: _jsx(View, { className: "flex-row items-center gap-x-4", children: balances.map((b) => (_jsxs(View, { className: "flex-1 flex-row items-center gap-x-1.5", children: [b.iconUrl ? (_jsx(Image, { source: b.iconUrl, style: { width: 18, height: 18, tintColor: foreground }, contentFit: "contain" })) : null, isLoading ? (_jsx(Skeleton, { className: "h-5 w-12 rounded-sm" })) : (_jsx(Text, { className: "text-foreground text-sm leading-5 font-bold", children: b.amount?.toLocaleString() ?? '—' }))] }, b.key))) }) }));
19
+ }
20
+ export { Wallet };
21
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/components/blocks/wallet.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAoBjC;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAe;IACrE,MAAM,aAAa,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjF,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,+CAA+C,EAAE,SAAS,CAAC,YAC7E,KAAC,IAAI,IAAC,SAAS,EAAC,+BAA+B,YAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,MAAC,IAAI,IAAa,SAAS,EAAC,wCAAwC,aACjE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACX,KAAC,KAAK,IACJ,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EACvD,UAAU,EAAC,SAAS,GACpB,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,QAAQ,IAAC,SAAS,EAAC,qBAAqB,GAAG,CAC7C,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,SAAS,EAAC,6CAA6C,YAC1D,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,GAAG,GAC7B,CACR,KAdQ,CAAC,CAAC,GAAG,CAeT,CACR,CAAC,GACG,GACF,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+ interface WeaponCategoryGridItem {
3
+ /** Stable React key. */
4
+ key: string;
5
+ /** Resolved weapon / equipped-skin image URL shown centered in the tile. */
6
+ imageUrl?: string;
7
+ /** Image width as a percentage of card width (0-100). Defaults to 80. */
8
+ widthPercent?: number;
9
+ /** Optional equipped gun buddy icon pinned to the bottom-left. */
10
+ buddyIconUrl?: string;
11
+ /** Called when the tile is tapped. */
12
+ onPress?: () => void;
13
+ }
14
+ interface WeaponCategoryGridSection {
15
+ /** Stable React key for the section. */
16
+ key: string;
17
+ /** Uppercased category label shown above the grid (e.g. "RIFLES"). */
18
+ title: string;
19
+ /** Weapons in display order. */
20
+ items: ReadonlyArray<WeaponCategoryGridItem>;
21
+ }
22
+ interface WeaponCategoryGridProps {
23
+ /** Sections in display order. */
24
+ sections: ReadonlyArray<WeaponCategoryGridSection>;
25
+ /** Render skeleton cards instead of real tiles. */
26
+ isLoading?: boolean;
27
+ /**
28
+ * Icon rendered on each card's right edge indicating it's tappable.
29
+ * Typically a small right-facing chevron. Consumer-supplied so the
30
+ * block stays icon-agnostic.
31
+ */
32
+ chevronIcon?: React.ReactNode;
33
+ /** Extra classes merged onto the outer wrapper. */
34
+ className?: string;
35
+ }
36
+ /**
37
+ * Weapon-loadout grid — one section per weapon category with a
38
+ * two-column grid of tiles. Each tile shows the equipped skin art
39
+ * centered on the card background, an optional buddy icon pinned
40
+ * bottom-left, and a consumer-supplied chevron on the right edge.
41
+ *
42
+ * Data-free: consumer pre-groups weapons into sections, resolves the
43
+ * equipped skin URL + buddy icon URL + per-category width, and passes
44
+ * press handlers. Wrap in a `ScrollView` upstream if you need
45
+ * pull-to-refresh.
46
+ */
47
+ declare function WeaponCategoryGrid({ sections, isLoading, chevronIcon, className, }: WeaponCategoryGridProps): import("react/jsx-runtime").JSX.Element;
48
+ export { WeaponCategoryGrid };
49
+ export type { WeaponCategoryGridProps, WeaponCategoryGridSection, WeaponCategoryGridItem, };
50
+ //# sourceMappingURL=weapon-category-grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weapon-category-grid.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/weapon-category-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,UAAU,sBAAsB;IAC9B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,yBAAyB;IACjC,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CAC9C;AAED,UAAU,uBAAuB;IAC/B,iCAAiC;IACjC,QAAQ,EAAE,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACnD,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,SAAiB,EACjB,WAAW,EACX,SAAS,GACV,EAAE,uBAAuB,2CA+BzB;AA0CD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Pressable, View } from 'react-native';
3
+ import { SectionTitle } from '../../components/blocks/section-title';
4
+ import { Image } from '../../components/ui/image';
5
+ import { Skeleton } from '../../components/ui/skeleton';
6
+ import { cn } from '../../lib/utils';
7
+ /**
8
+ * Weapon-loadout grid — one section per weapon category with a
9
+ * two-column grid of tiles. Each tile shows the equipped skin art
10
+ * centered on the card background, an optional buddy icon pinned
11
+ * bottom-left, and a consumer-supplied chevron on the right edge.
12
+ *
13
+ * Data-free: consumer pre-groups weapons into sections, resolves the
14
+ * equipped skin URL + buddy icon URL + per-category width, and passes
15
+ * press handlers. Wrap in a `ScrollView` upstream if you need
16
+ * pull-to-refresh.
17
+ */
18
+ function WeaponCategoryGrid({ sections, isLoading = false, chevronIcon, className, }) {
19
+ return (_jsx(View, { className: cn('flex gap-y-4', className), children: sections.map((section) => (_jsxs(View, { children: [_jsx(SectionTitle, { title: section.title }), _jsxs(View, { className: "flex-row flex-wrap gap-2", children: [section.items.map((item) => (_jsx(View, { className: "w-[48%] grow", children: isLoading ? (_jsx(Skeleton, { className: "aspect-video w-full rounded-xl" })) : (_jsx(Pressable, { onPress: item.onPress, style: ({ pressed }) => ({ opacity: pressed ? 0.7 : 1 }), children: _jsx(WeaponGridCard, { imageUrl: item.imageUrl, widthPercent: item.widthPercent ?? 80, buddyIconUrl: item.buddyIconUrl, chevronIcon: chevronIcon }) })) }, item.key))), section.items.length % 2 !== 0 && _jsx(View, { className: "w-[48%] grow" })] })] }, section.key))) }));
20
+ }
21
+ function WeaponGridCard({ imageUrl, widthPercent, buddyIconUrl, chevronIcon, }) {
22
+ return (_jsxs(View, { className: "bg-card relative aspect-video w-full items-center justify-center overflow-hidden rounded-xl", children: [imageUrl ? (_jsx(Image, { source: imageUrl, style: { width: `${widthPercent}%`, height: '90%' }, contentFit: "contain" })) : null, buddyIconUrl ? (_jsx(View, { className: "absolute bottom-1 left-0", children: _jsx(Image, { source: buddyIconUrl, style: { width: 36, height: 36 }, contentFit: "contain" }) })) : null, chevronIcon ? (_jsx(View, { className: "absolute top-0 right-1 bottom-0 justify-center", children: chevronIcon })) : null] }));
23
+ }
24
+ export { WeaponCategoryGrid };
25
+ //# sourceMappingURL=weapon-category-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weapon-category-grid.js","sourceRoot":"","sources":["../../../src/components/blocks/weapon-category-grid.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAuCjC;;;;;;;;;;GAUG;AACH,SAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,WAAW,EACX,SAAS,GACe;IACxB,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,YAC3C,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,MAAC,IAAI,eACH,KAAC,YAAY,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAI,EACtC,MAAC,IAAI,IAAC,SAAS,EAAC,0BAA0B,aACvC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,IAAI,IAAgB,SAAS,EAAC,cAAc,YAC1C,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,QAAQ,IAAC,SAAS,EAAC,gCAAgC,GAAG,CACxD,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IACR,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YACxD,KAAC,cAAc,IACb,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EACrC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,WAAW,EAAE,WAAW,GACxB,GACQ,CACb,IAdQ,IAAI,CAAC,GAAG,CAeZ,CACR,CAAC,EACD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,IAC/D,KAtBE,OAAO,CAAC,GAAG,CAuBf,CACR,CAAC,GACG,CACR,CAAC;AACJ,CAAC;AASD,SAAS,cAAc,CAAC,EACtB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,WAAW,GACS;IACpB,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAC,6FAA6F,aAC1G,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,KAAK,IACJ,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EACnD,UAAU,EAAC,SAAS,GACpB,CACH,CAAC,CAAC,CAAC,IAAI,EACP,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,IAAI,IAAC,SAAS,EAAC,0BAA0B,YACxC,KAAC,KAAK,IACJ,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAChC,UAAU,EAAC,SAAS,GACpB,GACG,CACR,CAAC,CAAC,CAAC,IAAI,EACP,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,IAAI,IAAC,SAAS,EAAC,gDAAgD,YAC7D,WAAW,GACP,CACR,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Pressable } from 'react-native';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare const buttonTextVariants: (props?: ({
8
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
9
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ type ButtonProps = React.ComponentProps<typeof Pressable> & React.RefAttributes<typeof Pressable> & VariantProps<typeof buttonVariants>;
12
+ declare function Button({ className, variant, size, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
13
+ export { Button, buttonTextVariants, buttonVariants };
14
+ export type { ButtonProps };
15
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOlE,QAAA,MAAM,cAAc;;;8EAgDnB,CAAC;AAEF,QAAA,MAAM,kBAAkB;;;8EAiCvB,CAAC;AAEF,KAAK,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,GACvD,KAAK,CAAC,aAAa,CAAC,OAAO,SAAS,CAAC,GACrC,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtC,iBAAS,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,2CAUlE;AAED,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Platform, Pressable } from 'react-native';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../../lib/utils';
5
+ import { TextClassContext } from '../../components/ui/text';
6
+ // NOTE: group-* is not supported yet by Uniwind
7
+ const buttonVariants = cva(cn('group shrink-0 flex-row items-center justify-center gap-2 rounded-md shadow-none', Platform.select({
8
+ web: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
+ })), {
10
+ variants: {
11
+ variant: {
12
+ default: cn('bg-primary active:bg-primary/90 shadow-sm shadow-black/5', Platform.select({ web: 'hover:bg-primary/90' })),
13
+ destructive: cn('bg-val-red active:bg-val-red/90 shadow-sm shadow-black/5', Platform.select({
14
+ web: 'hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40',
15
+ })),
16
+ outline: cn('border-border bg-background active:bg-accent dark:bg-input/30 dark:border-input dark:active:bg-input/50 border shadow-sm shadow-black/5', Platform.select({
17
+ web: 'hover:bg-accent dark:hover:bg-input/50',
18
+ })),
19
+ secondary: cn('bg-secondary active:bg-secondary/80 shadow-sm shadow-black/5', Platform.select({ web: 'hover:bg-secondary/80' })),
20
+ ghost: cn('active:bg-accent dark:active:bg-accent/50', Platform.select({ web: 'hover:bg-accent dark:hover:bg-accent/50' })),
21
+ link: '',
22
+ },
23
+ size: {
24
+ default: cn('h-10 px-4 py-2 sm:h-9', Platform.select({ web: 'has-[>svg]:px-3' })),
25
+ sm: cn('h-9 gap-1.5 rounded-md px-3 sm:h-8', Platform.select({ web: 'has-[>svg]:px-2.5' })),
26
+ lg: cn('h-11 rounded-md px-6 sm:h-10', Platform.select({ web: 'has-[>svg]:px-4' })),
27
+ icon: 'h-10 w-10 sm:h-9 sm:w-9',
28
+ },
29
+ },
30
+ defaultVariants: {
31
+ variant: 'default',
32
+ size: 'default',
33
+ },
34
+ });
35
+ const buttonTextVariants = cva(cn('text-foreground text-sm font-medium', Platform.select({ web: 'pointer-events-none transition-colors' })), {
36
+ variants: {
37
+ variant: {
38
+ default: 'text-primary-foreground',
39
+ destructive: 'text-white',
40
+ outline: cn('group-active:text-accent-foreground', Platform.select({ web: 'group-hover:text-accent-foreground' })),
41
+ secondary: 'text-secondary-foreground',
42
+ ghost: 'group-active:text-accent-foreground',
43
+ link: cn('text-primary group-active:underline', Platform.select({ web: 'underline-offset-4 group-hover:underline hover:underline' })),
44
+ },
45
+ size: {
46
+ default: '',
47
+ sm: '',
48
+ lg: '',
49
+ icon: '',
50
+ },
51
+ },
52
+ defaultVariants: {
53
+ variant: 'default',
54
+ size: 'default',
55
+ },
56
+ });
57
+ function Button({ className, variant, size, ...props }) {
58
+ return (_jsx(TextClassContext.Provider, { value: buttonTextVariants({ variant, size }), children: _jsx(Pressable, { className: cn(props.disabled && 'opacity-50', buttonVariants({ variant, size }), className), role: "button", ...props }) }));
59
+ }
60
+ export { Button, buttonTextVariants, buttonVariants };
61
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,gDAAgD;AAEhD,MAAM,cAAc,GAAG,GAAG,CACxB,EAAE,CACA,kFAAkF,EAClF,QAAQ,CAAC,MAAM,CAAC;IACd,GAAG,EAAE,mVAAmV;CACzV,CAAC,CACH,EACD;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,EAAE,CACT,0DAA0D,EAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAChD;YACD,WAAW,EAAE,EAAE,CACb,0DAA0D,EAC1D,QAAQ,CAAC,MAAM,CAAC;gBACd,GAAG,EAAE,kGAAkG;aACxG,CAAC,CACH;YACD,OAAO,EAAE,EAAE,CACT,yIAAyI,EACzI,QAAQ,CAAC,MAAM,CAAC;gBACd,GAAG,EAAE,wCAAwC;aAC9C,CAAC,CACH;YACD,SAAS,EAAE,EAAE,CACX,8DAA8D,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAClD;YACD,KAAK,EAAE,EAAE,CACP,2CAA2C,EAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,yCAAyC,EAAE,CAAC,CACpE;YACD,IAAI,EAAE,EAAE;SACT;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE,CAAC,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACjF,EAAE,EAAE,EAAE,CAAC,oCAAoC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC3F,EAAE,EAAE,EAAE,CAAC,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnF,IAAI,EAAE,yBAAyB;SAChC;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAG,CAC5B,EAAE,CACA,qCAAqC,EACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,uCAAuC,EAAE,CAAC,CAClE,EACD;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,EAAE,CACT,qCAAqC,EACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,oCAAoC,EAAE,CAAC,CAC/D;YACD,SAAS,EAAE,2BAA2B;YACtC,KAAK,EAAE,qCAAqC;YAC5C,IAAI,EAAE,EAAE,CACN,qCAAqC,EACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,0DAA0D,EAAE,CAAC,CACrF;SACF;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE;YACX,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,EAAE;SACT;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAMF,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAe;IACjE,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,YACrE,KAAC,SAAS,IACR,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,YAAY,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAC3F,IAAI,EAAC,QAAQ,KACT,KAAK,GACT,GACwB,CAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ImageProps as ExpoImageProps } from 'expo-image';
2
+ export type ImageProps = ExpoImageProps & {
3
+ className?: string;
4
+ };
5
+ declare function Image({ className, ...props }: ImageProps): import("react/jsx-runtime").JSX.Element;
6
+ export { Image };
7
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/components/ui/image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAInF,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAGjD;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Image as ExpoImage } from 'expo-image';
3
+ import { cn } from '../../lib/utils';
4
+ function Image({ className, ...props }) {
5
+ // UniWind resolves className on native; expo-image forwards remaining props natively.
6
+ return _jsx(ExpoImage, { className: cn(className), ...props });
7
+ }
8
+ export { Image };
9
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/components/ui/image.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAqC,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAMjC,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAc;IAChD,sFAAsF;IACtF,OAAO,KAAC,SAAS,IAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CAAC;AAC5D,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type ImageProps as RNImageProps } from 'react-native';
2
+ /**
3
+ * Subset of expo-image's ImageContentFit that we map to react-native-web's resizeMode.
4
+ * expo-image's 'scale-down' and 'none' have no exact RNW equivalents — closest approximations used.
5
+ */
6
+ type ContentFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
7
+ /**
8
+ * expo-image accepts `source` as a string URL, a URI object, a number (require),
9
+ * or an array. react-native-web's Image only accepts `{ uri }` objects or numbers,
10
+ * so we normalize string sources to `{ uri: string }`.
11
+ */
12
+ type SourceInput = string | number | {
13
+ uri: string;
14
+ width?: number;
15
+ height?: number;
16
+ } | ReadonlyArray<{
17
+ uri: string;
18
+ width?: number;
19
+ height?: number;
20
+ }> | null | undefined;
21
+ export type ImageProps = Omit<RNImageProps, 'source' | 'resizeMode'> & {
22
+ source?: SourceInput;
23
+ contentFit?: ContentFit;
24
+ className?: string;
25
+ /** Accepted for API parity with expo-image; ignored on web. */
26
+ cachePolicy?: string;
27
+ /** Accepted for API parity with expo-image; ignored on web. */
28
+ transition?: number | object;
29
+ /** Accepted for API parity with expo-image; ignored on web. */
30
+ placeholder?: unknown;
31
+ /** Accepted for API parity with expo-image; ignored on web. */
32
+ placeholderContentFit?: ContentFit;
33
+ /** Accepted for API parity with expo-image; ignored on web. */
34
+ recyclingKey?: string;
35
+ /** Accepted for API parity with expo-image; ignored on web. */
36
+ priority?: string;
37
+ };
38
+ declare function Image({ source, contentFit, className, cachePolicy: _cachePolicy, transition: _transition, placeholder: _placeholder, placeholderContentFit: _placeholderContentFit, recyclingKey: _recyclingKey, priority: _priority, style, ...props }: ImageProps): import("react/jsx-runtime").JSX.Element;
39
+ export { Image };
40
+ //# sourceMappingURL=image.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.web.d.ts","sourceRoot":"","sources":["../../../src/components/ui/image.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,IAAI,YAAY,EAGhC,MAAM,cAAc,CAAC;AAItB;;;GAGG;AACH,KAAK,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEvE;;;;GAIG;AACH,KAAK,WAAW,GACZ,MAAM,GACN,MAAM,GACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG;IACrE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAsBF,iBAAS,KAAK,CAAC,EACb,MAAM,EACN,UAAoB,EACpB,SAAS,EAET,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,YAAY,EACzB,qBAAqB,EAAE,sBAAsB,EAC7C,YAAY,EAAE,aAAa,EAC3B,QAAQ,EAAE,SAAS,EACnB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,UAAU,2CAaZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Image as RNImage, } from 'react-native';
3
+ import { cn } from '../../lib/utils';
4
+ const CONTENT_FIT_TO_RESIZE_MODE = {
5
+ cover: 'cover',
6
+ contain: 'contain',
7
+ fill: 'stretch',
8
+ none: 'center',
9
+ 'scale-down': 'contain',
10
+ };
11
+ function normalizeSource(source) {
12
+ if (source == null)
13
+ return undefined;
14
+ if (typeof source === 'string')
15
+ return { uri: source };
16
+ if (typeof source === 'number')
17
+ return source;
18
+ if (Array.isArray(source)) {
19
+ // RNW can't handle multi-resolution arrays; pick the first entry.
20
+ const first = source[0];
21
+ return first ? first : undefined;
22
+ }
23
+ return source;
24
+ }
25
+ function Image({ source, contentFit = 'cover', className,
26
+ // Drop native-only props so they don't leak onto the DOM.
27
+ cachePolicy: _cachePolicy, transition: _transition, placeholder: _placeholder, placeholderContentFit: _placeholderContentFit, recyclingKey: _recyclingKey, priority: _priority, style, ...props }) {
28
+ const normalized = normalizeSource(source);
29
+ const resizeMode = CONTENT_FIT_TO_RESIZE_MODE[contentFit] ?? 'cover';
30
+ return (_jsx(RNImage, { ...props, source: normalized, resizeMode: resizeMode, style: style, className: cn(className) }));
31
+ }
32
+ export { Image };
33
+ //# sourceMappingURL=image.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.web.js","sourceRoot":"","sources":["../../../src/components/ui/image.web.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,IAAI,OAAO,GAIjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAuCjC,MAAM,0BAA0B,GAAwC;IACtE,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,SAAS;CACxB,CAAC;AAEF,SAAS,eAAe,CAAC,MAAmB;IAC1C,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,kEAAkE;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC,CAAE,KAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,CAAC;IACD,OAAO,MAA6B,CAAC;AACvC,CAAC;AAED,SAAS,KAAK,CAAC,EACb,MAAM,EACN,UAAU,GAAG,OAAO,EACpB,SAAS;AACT,0DAA0D;AAC1D,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,YAAY,EACzB,qBAAqB,EAAE,sBAAsB,EAC7C,YAAY,EAAE,aAAa,EAC3B,QAAQ,EAAE,SAAS,EACnB,KAAK,EACL,GAAG,KAAK,EACG;IACX,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,0BAA0B,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC;IAErE,OAAO,CACL,KAAC,OAAO,OACF,KAAK,EACT,MAAM,EAAE,UAAiC,EACzC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,SAAS,CAAW,GAClC,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import * as ProgressPrimitive from '@rn-primitives/progress';
3
+ type ProgressProps = ProgressPrimitive.RootProps & React.RefAttributes<ProgressPrimitive.RootRef> & {
4
+ indicatorClassName?: string;
5
+ };
6
+ declare function Progress({ className, value, indicatorClassName, ...props }: ProgressProps): import("react/jsx-runtime").JSX.Element;
7
+ export { Progress };
8
+ export type { ProgressProps };
9
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/components/ui/progress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAW7D,KAAK,aAAa,GAAG,iBAAiB,CAAC,SAAS,GAC9C,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEJ,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAQlF;AAsDD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Platform, View } from 'react-native';
3
+ import * as ProgressPrimitive from '@rn-primitives/progress';
4
+ import Animated, { Extrapolation, interpolate, useAnimatedStyle, useDerivedValue, withSpring, } from 'react-native-reanimated';
5
+ import { cn } from '../../lib/utils';
6
+ function Progress({ className, value, indicatorClassName, ...props }) {
7
+ return (_jsx(ProgressPrimitive.Root, { className: cn('bg-primary/20 relative h-2 w-full overflow-hidden rounded-full', className), ...props, children: _jsx(Indicator, { value: value, className: indicatorClassName }) }));
8
+ }
9
+ function WebIndicator({ value, className }) {
10
+ if (Platform.OS !== 'web') {
11
+ return null;
12
+ }
13
+ return (_jsx(View, { className: cn('bg-primary h-full w-full flex-1 transition-all', className), style: { transform: `translateX(-${100 - (value ?? 0)}%)` }, children: _jsx(ProgressPrimitive.Indicator, { className: cn('h-full w-full', className) }) }));
14
+ }
15
+ function NativeIndicator({ value, className }) {
16
+ const progress = useDerivedValue(() => value ?? 0);
17
+ const indicator = useAnimatedStyle(() => {
18
+ return {
19
+ width: withSpring(`${interpolate(progress.value, [0, 100], [0, 100], Extrapolation.CLAMP)}%`, { overshootClamping: true }),
20
+ };
21
+ }, [value]);
22
+ if (Platform.OS === 'web') {
23
+ return null;
24
+ }
25
+ return (_jsx(ProgressPrimitive.Indicator, { asChild: true, children: _jsx(Animated.View, { style: indicator, className: cn('bg-foreground h-full', className) }) }));
26
+ }
27
+ function NullIndicator(_props) {
28
+ return null;
29
+ }
30
+ const Indicator = Platform.select({
31
+ web: WebIndicator,
32
+ native: NativeIndicator,
33
+ default: NullIndicator,
34
+ });
35
+ export { Progress };
36
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/components/ui/progress.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,QAAQ,EAAE,EACf,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,UAAU,GACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOjC,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,EAAiB;IACjF,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,IACrB,SAAS,EAAE,EAAE,CAAC,gEAAgE,EAAE,SAAS,CAAC,KACtF,KAAK,YACT,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,GAAI,GACnC,CAC1B,CAAC;AACJ,CAAC;AAOD,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAkB;IACxD,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,EAC1E,KAAK,EAAE,EAAE,SAAS,EAAE,eAAe,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAY,YACrE,KAAC,iBAAiB,CAAC,SAAS,IAAC,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,GAAI,GACrE,CACR,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAkB;IAC3D,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE;QACtC,OAAO;YACL,KAAK,EAAE,UAAU,CACf,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,EAC1E,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,iBAAiB,CAAC,SAAS,IAAC,OAAO,kBAClC,KAAC,QAAQ,CAAC,IAAI,IAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAI,GACzD,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAsB;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,GAAG,EAAE,YAAY;IACjB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type ViewProps } from 'react-native';
2
+ type ProgressProps = ViewProps & {
3
+ /** 0–100 */
4
+ value?: number | null;
5
+ indicatorClassName?: string;
6
+ };
7
+ /**
8
+ * Web-only Progress implementation.
9
+ * Pure View + CSS width transition, no reanimated and no @rn-primitives.
10
+ * The native sibling (`progress.tsx`) keeps the animated + accessible
11
+ * @rn-primitives implementation for iOS/Android.
12
+ */
13
+ declare function Progress({ className, value, indicatorClassName, ...props }: ProgressProps): import("react/jsx-runtime").JSX.Element;
14
+ export { Progress };
15
+ export type { ProgressProps };
16
+ //# sourceMappingURL=progress.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.web.d.ts","sourceRoot":"","sources":["../../../src/components/ui/progress.web.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpD,KAAK,aAAa,GAAG,SAAS,GAAG;IAC/B,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAqBlF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}