@oxyhq/bloom 0.29.6 → 0.30.1

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 (183) hide show
  1. package/lib/commonjs/activity-heatmap/ActivityHeatmap.js +304 -0
  2. package/lib/commonjs/activity-heatmap/ActivityHeatmap.js.map +1 -0
  3. package/lib/commonjs/activity-heatmap/bucketByDay.js +51 -0
  4. package/lib/commonjs/activity-heatmap/bucketByDay.js.map +1 -0
  5. package/lib/commonjs/activity-heatmap/index.js +20 -0
  6. package/lib/commonjs/activity-heatmap/index.js.map +1 -0
  7. package/lib/commonjs/activity-heatmap/types.js +6 -0
  8. package/lib/commonjs/activity-heatmap/types.js.map +1 -0
  9. package/lib/commonjs/avatar-group/AvatarGroupBase.js +44 -18
  10. package/lib/commonjs/avatar-group/AvatarGroupBase.js.map +1 -1
  11. package/lib/commonjs/composition-bar/CompositionBar.js +159 -0
  12. package/lib/commonjs/composition-bar/CompositionBar.js.map +1 -0
  13. package/lib/commonjs/composition-bar/index.js +13 -0
  14. package/lib/commonjs/composition-bar/index.js.map +1 -0
  15. package/lib/commonjs/composition-bar/types.js +6 -0
  16. package/lib/commonjs/composition-bar/types.js.map +1 -0
  17. package/lib/commonjs/dot-grid-meter/DotGridMeter.js +69 -0
  18. package/lib/commonjs/dot-grid-meter/DotGridMeter.js.map +1 -0
  19. package/lib/commonjs/dot-grid-meter/index.js +13 -0
  20. package/lib/commonjs/dot-grid-meter/index.js.map +1 -0
  21. package/lib/commonjs/dot-grid-meter/types.js +6 -0
  22. package/lib/commonjs/dot-grid-meter/types.js.map +1 -0
  23. package/lib/commonjs/index.js +59 -12
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/index.web.js +59 -12
  26. package/lib/commonjs/index.web.js.map +1 -1
  27. package/lib/commonjs/profile-card/ProfileCard.js +311 -0
  28. package/lib/commonjs/profile-card/ProfileCard.js.map +1 -0
  29. package/lib/commonjs/profile-card/index.js +13 -0
  30. package/lib/commonjs/profile-card/index.js.map +1 -0
  31. package/lib/commonjs/profile-card/types.js +6 -0
  32. package/lib/commonjs/profile-card/types.js.map +1 -0
  33. package/lib/commonjs/stat-bar/StatBar.js +213 -0
  34. package/lib/commonjs/stat-bar/StatBar.js.map +1 -0
  35. package/lib/commonjs/stat-bar/index.js +13 -0
  36. package/lib/commonjs/stat-bar/index.js.map +1 -0
  37. package/lib/commonjs/stat-bar/types.js +6 -0
  38. package/lib/commonjs/stat-bar/types.js.map +1 -0
  39. package/lib/module/activity-heatmap/ActivityHeatmap.js +299 -0
  40. package/lib/module/activity-heatmap/ActivityHeatmap.js.map +1 -0
  41. package/lib/module/activity-heatmap/bucketByDay.js +47 -0
  42. package/lib/module/activity-heatmap/bucketByDay.js.map +1 -0
  43. package/lib/module/activity-heatmap/index.js +5 -0
  44. package/lib/module/activity-heatmap/index.js.map +1 -0
  45. package/lib/module/activity-heatmap/types.js +4 -0
  46. package/lib/module/activity-heatmap/types.js.map +1 -0
  47. package/lib/module/avatar-group/AvatarGroupBase.js +44 -18
  48. package/lib/module/avatar-group/AvatarGroupBase.js.map +1 -1
  49. package/lib/module/composition-bar/CompositionBar.js +154 -0
  50. package/lib/module/composition-bar/CompositionBar.js.map +1 -0
  51. package/lib/module/composition-bar/index.js +4 -0
  52. package/lib/module/composition-bar/index.js.map +1 -0
  53. package/lib/module/composition-bar/types.js +4 -0
  54. package/lib/module/composition-bar/types.js.map +1 -0
  55. package/lib/module/dot-grid-meter/DotGridMeter.js +64 -0
  56. package/lib/module/dot-grid-meter/DotGridMeter.js.map +1 -0
  57. package/lib/module/dot-grid-meter/index.js +4 -0
  58. package/lib/module/dot-grid-meter/index.js.map +1 -0
  59. package/lib/module/dot-grid-meter/types.js +4 -0
  60. package/lib/module/dot-grid-meter/types.js.map +1 -0
  61. package/lib/module/index.js +6 -0
  62. package/lib/module/index.js.map +1 -1
  63. package/lib/module/index.web.js +6 -0
  64. package/lib/module/index.web.js.map +1 -1
  65. package/lib/module/profile-card/ProfileCard.js +306 -0
  66. package/lib/module/profile-card/ProfileCard.js.map +1 -0
  67. package/lib/module/profile-card/index.js +4 -0
  68. package/lib/module/profile-card/index.js.map +1 -0
  69. package/lib/module/profile-card/types.js +4 -0
  70. package/lib/module/profile-card/types.js.map +1 -0
  71. package/lib/module/stat-bar/StatBar.js +208 -0
  72. package/lib/module/stat-bar/StatBar.js.map +1 -0
  73. package/lib/module/stat-bar/index.js +4 -0
  74. package/lib/module/stat-bar/index.js.map +1 -0
  75. package/lib/module/stat-bar/types.js +4 -0
  76. package/lib/module/stat-bar/types.js.map +1 -0
  77. package/lib/typescript/commonjs/activity-heatmap/ActivityHeatmap.d.ts +4 -0
  78. package/lib/typescript/commonjs/activity-heatmap/ActivityHeatmap.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/activity-heatmap/bucketByDay.d.ts +9 -0
  80. package/lib/typescript/commonjs/activity-heatmap/bucketByDay.d.ts.map +1 -0
  81. package/lib/typescript/commonjs/activity-heatmap/index.d.ts +4 -0
  82. package/lib/typescript/commonjs/activity-heatmap/index.d.ts.map +1 -0
  83. package/lib/typescript/commonjs/activity-heatmap/types.d.ts +73 -0
  84. package/lib/typescript/commonjs/activity-heatmap/types.d.ts.map +1 -0
  85. package/lib/typescript/commonjs/avatar-group/AvatarGroupBase.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/avatar-group/types.d.ts +23 -1
  87. package/lib/typescript/commonjs/avatar-group/types.d.ts.map +1 -1
  88. package/lib/typescript/commonjs/composition-bar/CompositionBar.d.ts +4 -0
  89. package/lib/typescript/commonjs/composition-bar/CompositionBar.d.ts.map +1 -0
  90. package/lib/typescript/commonjs/composition-bar/index.d.ts +3 -0
  91. package/lib/typescript/commonjs/composition-bar/index.d.ts.map +1 -0
  92. package/lib/typescript/commonjs/composition-bar/types.d.ts +29 -0
  93. package/lib/typescript/commonjs/composition-bar/types.d.ts.map +1 -0
  94. package/lib/typescript/commonjs/dot-grid-meter/DotGridMeter.d.ts +4 -0
  95. package/lib/typescript/commonjs/dot-grid-meter/DotGridMeter.d.ts.map +1 -0
  96. package/lib/typescript/commonjs/dot-grid-meter/index.d.ts +3 -0
  97. package/lib/typescript/commonjs/dot-grid-meter/index.d.ts.map +1 -0
  98. package/lib/typescript/commonjs/dot-grid-meter/types.d.ts +36 -0
  99. package/lib/typescript/commonjs/dot-grid-meter/types.d.ts.map +1 -0
  100. package/lib/typescript/commonjs/index.d.ts +10 -0
  101. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/index.web.d.ts +10 -0
  103. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  104. package/lib/typescript/commonjs/profile-card/ProfileCard.d.ts +4 -0
  105. package/lib/typescript/commonjs/profile-card/ProfileCard.d.ts.map +1 -0
  106. package/lib/typescript/commonjs/profile-card/index.d.ts +3 -0
  107. package/lib/typescript/commonjs/profile-card/index.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/profile-card/types.d.ts +86 -0
  109. package/lib/typescript/commonjs/profile-card/types.d.ts.map +1 -0
  110. package/lib/typescript/commonjs/stat-bar/StatBar.d.ts +4 -0
  111. package/lib/typescript/commonjs/stat-bar/StatBar.d.ts.map +1 -0
  112. package/lib/typescript/commonjs/stat-bar/index.d.ts +3 -0
  113. package/lib/typescript/commonjs/stat-bar/index.d.ts.map +1 -0
  114. package/lib/typescript/commonjs/stat-bar/types.d.ts +62 -0
  115. package/lib/typescript/commonjs/stat-bar/types.d.ts.map +1 -0
  116. package/lib/typescript/module/activity-heatmap/ActivityHeatmap.d.ts +4 -0
  117. package/lib/typescript/module/activity-heatmap/ActivityHeatmap.d.ts.map +1 -0
  118. package/lib/typescript/module/activity-heatmap/bucketByDay.d.ts +9 -0
  119. package/lib/typescript/module/activity-heatmap/bucketByDay.d.ts.map +1 -0
  120. package/lib/typescript/module/activity-heatmap/index.d.ts +4 -0
  121. package/lib/typescript/module/activity-heatmap/index.d.ts.map +1 -0
  122. package/lib/typescript/module/activity-heatmap/types.d.ts +73 -0
  123. package/lib/typescript/module/activity-heatmap/types.d.ts.map +1 -0
  124. package/lib/typescript/module/avatar-group/AvatarGroupBase.d.ts.map +1 -1
  125. package/lib/typescript/module/avatar-group/types.d.ts +23 -1
  126. package/lib/typescript/module/avatar-group/types.d.ts.map +1 -1
  127. package/lib/typescript/module/composition-bar/CompositionBar.d.ts +4 -0
  128. package/lib/typescript/module/composition-bar/CompositionBar.d.ts.map +1 -0
  129. package/lib/typescript/module/composition-bar/index.d.ts +3 -0
  130. package/lib/typescript/module/composition-bar/index.d.ts.map +1 -0
  131. package/lib/typescript/module/composition-bar/types.d.ts +29 -0
  132. package/lib/typescript/module/composition-bar/types.d.ts.map +1 -0
  133. package/lib/typescript/module/dot-grid-meter/DotGridMeter.d.ts +4 -0
  134. package/lib/typescript/module/dot-grid-meter/DotGridMeter.d.ts.map +1 -0
  135. package/lib/typescript/module/dot-grid-meter/index.d.ts +3 -0
  136. package/lib/typescript/module/dot-grid-meter/index.d.ts.map +1 -0
  137. package/lib/typescript/module/dot-grid-meter/types.d.ts +36 -0
  138. package/lib/typescript/module/dot-grid-meter/types.d.ts.map +1 -0
  139. package/lib/typescript/module/index.d.ts +10 -0
  140. package/lib/typescript/module/index.d.ts.map +1 -1
  141. package/lib/typescript/module/index.web.d.ts +10 -0
  142. package/lib/typescript/module/index.web.d.ts.map +1 -1
  143. package/lib/typescript/module/profile-card/ProfileCard.d.ts +4 -0
  144. package/lib/typescript/module/profile-card/ProfileCard.d.ts.map +1 -0
  145. package/lib/typescript/module/profile-card/index.d.ts +3 -0
  146. package/lib/typescript/module/profile-card/index.d.ts.map +1 -0
  147. package/lib/typescript/module/profile-card/types.d.ts +86 -0
  148. package/lib/typescript/module/profile-card/types.d.ts.map +1 -0
  149. package/lib/typescript/module/stat-bar/StatBar.d.ts +4 -0
  150. package/lib/typescript/module/stat-bar/StatBar.d.ts.map +1 -0
  151. package/lib/typescript/module/stat-bar/index.d.ts +3 -0
  152. package/lib/typescript/module/stat-bar/index.d.ts.map +1 -0
  153. package/lib/typescript/module/stat-bar/types.d.ts +62 -0
  154. package/lib/typescript/module/stat-bar/types.d.ts.map +1 -0
  155. package/package.json +56 -1
  156. package/src/__tests__/StatWidgets.test.tsx +184 -0
  157. package/src/__tests__/public-api-contract.test.ts +15 -0
  158. package/src/activity-heatmap/ActivityHeatmap.stories.tsx +108 -0
  159. package/src/activity-heatmap/ActivityHeatmap.tsx +289 -0
  160. package/src/activity-heatmap/bucketByDay.ts +49 -0
  161. package/src/activity-heatmap/index.ts +3 -0
  162. package/src/activity-heatmap/types.ts +74 -0
  163. package/src/avatar-group/AvatarGroup.stories.tsx +14 -0
  164. package/src/avatar-group/AvatarGroupBase.tsx +48 -20
  165. package/src/avatar-group/types.ts +23 -1
  166. package/src/composition-bar/CompositionBar.stories.tsx +70 -0
  167. package/src/composition-bar/CompositionBar.tsx +161 -0
  168. package/src/composition-bar/index.ts +2 -0
  169. package/src/composition-bar/types.ts +30 -0
  170. package/src/dot-grid-meter/DotGridMeter.stories.tsx +47 -0
  171. package/src/dot-grid-meter/DotGridMeter.tsx +71 -0
  172. package/src/dot-grid-meter/index.ts +2 -0
  173. package/src/dot-grid-meter/types.ts +36 -0
  174. package/src/index.ts +24 -0
  175. package/src/index.web.ts +24 -0
  176. package/src/profile-card/ProfileCard.stories.tsx +210 -0
  177. package/src/profile-card/ProfileCard.tsx +269 -0
  178. package/src/profile-card/index.ts +9 -0
  179. package/src/profile-card/types.ts +86 -0
  180. package/src/stat-bar/StatBar.stories.tsx +61 -0
  181. package/src/stat-bar/StatBar.tsx +126 -0
  182. package/src/stat-bar/index.ts +7 -0
  183. package/src/stat-bar/types.ts +65 -0
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+
3
+ import React, { memo } from 'react';
4
+ import { View, StyleSheet } from 'react-native';
5
+ import { Card } from "../card/index.js";
6
+ import { Avatar } from "../avatar/index.js";
7
+ import { AvatarGroup } from "../avatar-group/index.js";
8
+ import { DotGridMeter } from "../dot-grid-meter/index.js";
9
+ import { StatBar } from "../stat-bar/index.js";
10
+ import { Text } from "../typography/index.js";
11
+ import { useTheme } from "../theme/use-theme.js";
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ const WIDGET_WIDTH = 240;
14
+ const CARD_PADDING = 18;
15
+ const CARD_RADIUS = 28;
16
+ const AVATAR_SIZE = 54;
17
+ const FOOTER_AVATAR_SIZE = 30;
18
+
19
+ /**
20
+ * Vivid per-variant accent, drawn from the theme's semantic tokens so it tracks
21
+ * the active Bloom preset. Every accent stays overridable per-prop.
22
+ */
23
+ function variantAccent(variant, colors) {
24
+ switch (variant) {
25
+ case 'wallet':
26
+ return colors.success;
27
+ case 'shopping':
28
+ return colors.warning;
29
+ case 'social':
30
+ return colors.primary;
31
+ case 'stat':
32
+ default:
33
+ return colors.info;
34
+ }
35
+ }
36
+ function AvatarWithBadge({
37
+ source,
38
+ name,
39
+ ring,
40
+ badge,
41
+ haloColor
42
+ }) {
43
+ return /*#__PURE__*/_jsxs(View, {
44
+ style: styles.avatarWrap,
45
+ children: [/*#__PURE__*/_jsx(Avatar, {
46
+ source: source ?? undefined,
47
+ name: name,
48
+ size: AVATAR_SIZE,
49
+ ring: ring
50
+ }), badge != null && /*#__PURE__*/_jsx(View, {
51
+ style: [styles.badgeHalo, {
52
+ backgroundColor: haloColor
53
+ }],
54
+ children: badge
55
+ })]
56
+ });
57
+ }
58
+ function MetricSection({
59
+ metric,
60
+ accent,
61
+ labelColor
62
+ }) {
63
+ switch (metric.kind) {
64
+ case 'dots':
65
+ return /*#__PURE__*/_jsxs(View, {
66
+ style: styles.section,
67
+ children: [metric.label != null && /*#__PURE__*/_jsx(Text, {
68
+ style: [styles.sectionLabel, {
69
+ color: labelColor
70
+ }],
71
+ numberOfLines: 1,
72
+ children: metric.label
73
+ }), /*#__PURE__*/_jsx(DotGridMeter, {
74
+ filled: metric.filled,
75
+ total: metric.total,
76
+ columns: metric.total,
77
+ dotSize: 9,
78
+ gap: 6,
79
+ filledColor: metric.filledColor ?? accent
80
+ })]
81
+ });
82
+ case 'progress':
83
+ return /*#__PURE__*/_jsx(StatBar, {
84
+ variant: "progress",
85
+ label: metric.label,
86
+ value: metric.value,
87
+ max: metric.max,
88
+ minLabel: metric.minLabel,
89
+ maxLabel: metric.maxLabel,
90
+ icon: metric.icon,
91
+ fillColor: metric.fillColor ?? accent
92
+ });
93
+ case 'split':
94
+ return /*#__PURE__*/_jsx(StatBar, {
95
+ variant: "split",
96
+ label: metric.label,
97
+ percent: metric.percent,
98
+ leftValue: metric.leftValue,
99
+ rightValue: metric.rightValue,
100
+ fillColor: metric.fillColor ?? accent
101
+ });
102
+ case 'custom':
103
+ default:
104
+ return /*#__PURE__*/_jsx(_Fragment, {
105
+ children: metric.node
106
+ });
107
+ }
108
+ }
109
+
110
+ /**
111
+ * A composed profile "widget" card — the Apple-Watch-style stat card. Fully
112
+ * app-agnostic: it takes pre-formatted strings, colors, and `ReactNode` icons
113
+ * (no domain/currency logic). Built on {@link Card}, {@link Avatar} (ring +
114
+ * badge), {@link DotGridMeter}/{@link StatBar}, and an {@link AvatarGroup} row.
115
+ *
116
+ * Theme-driven (Bloom's `useTheme()` reads the same NativeWind token pipeline
117
+ * that backs the `--*` vars): the surface is the theme's `background` — the
118
+ * darkest token, a near-black in dark mode — with a hairline `border` so it
119
+ * separates on any page, and the metric tracks read from `backgroundSecondary`,
120
+ * a step lighter, so they always show. `variant` picks a vivid semantic accent
121
+ * (success/warning/info/primary), overridable per-prop.
122
+ */
123
+ const ProfileCardComponent = ({
124
+ layout = 'widget',
125
+ variant = 'stat',
126
+ avatar,
127
+ value,
128
+ subtitle,
129
+ headlineIcon,
130
+ metric,
131
+ footer,
132
+ onPress,
133
+ style,
134
+ testID
135
+ }) => {
136
+ const {
137
+ colors
138
+ } = useTheme();
139
+ const accent = variantAccent(variant, colors);
140
+ const isWide = layout === 'wide';
141
+
142
+ // Consumer ring wins for color; default to the accent, always with a small
143
+ // gap so the ring reads as a distinct halo (as in the reference).
144
+ const ring = {
145
+ colors: accent,
146
+ width: 2,
147
+ gap: 2,
148
+ ...avatar.ring
149
+ };
150
+ const surfaceStyle = {
151
+ width: isWide ? '100%' : WIDGET_WIDTH,
152
+ padding: CARD_PADDING,
153
+ borderRadius: CARD_RADIUS,
154
+ borderWidth: 1,
155
+ borderColor: colors.border,
156
+ backgroundColor: colors.background,
157
+ borderCurve: 'continuous'
158
+ };
159
+ const headline = /*#__PURE__*/_jsxs(_Fragment, {
160
+ children: [/*#__PURE__*/_jsx(Text, {
161
+ style: [styles.value, {
162
+ color: colors.text
163
+ }],
164
+ numberOfLines: 1,
165
+ children: value
166
+ }), subtitle != null && /*#__PURE__*/_jsx(Text, {
167
+ style: [styles.subtitle, {
168
+ color: colors.textSecondary
169
+ }],
170
+ numberOfLines: 1,
171
+ children: subtitle
172
+ })]
173
+ });
174
+ const metricNode = metric != null ? /*#__PURE__*/_jsx(MetricSection, {
175
+ metric: metric,
176
+ accent: accent,
177
+ labelColor: colors.textSecondary
178
+ }) : null;
179
+ const footerNode = footer != null ? /*#__PURE__*/_jsxs(View, {
180
+ style: styles.section,
181
+ children: [footer.label != null && /*#__PURE__*/_jsx(Text, {
182
+ style: [styles.sectionLabel, {
183
+ color: colors.textSecondary
184
+ }],
185
+ numberOfLines: 1,
186
+ children: footer.label
187
+ }), /*#__PURE__*/_jsx(AvatarGroup, {
188
+ layout: "row",
189
+ items: footer.items,
190
+ size: FOOTER_AVATAR_SIZE,
191
+ spacing: 7,
192
+ max: footer.max ?? 4,
193
+ showInitials: true
194
+ })]
195
+ }) : null;
196
+ return /*#__PURE__*/_jsxs(Card, {
197
+ variant: "filled",
198
+ onPress: onPress,
199
+ style: [surfaceStyle, style],
200
+ testID: testID,
201
+ children: [/*#__PURE__*/_jsxs(View, {
202
+ style: styles.body,
203
+ children: [isWide ? /*#__PURE__*/_jsxs(View, {
204
+ style: styles.headerRowWide,
205
+ children: [/*#__PURE__*/_jsx(AvatarWithBadge, {
206
+ source: avatar.source,
207
+ name: avatar.name,
208
+ ring: ring,
209
+ badge: avatar.badge,
210
+ haloColor: colors.background
211
+ }), /*#__PURE__*/_jsxs(View, {
212
+ style: styles.wideValueRow,
213
+ children: [/*#__PURE__*/_jsx(View, {
214
+ style: styles.headlineColumn,
215
+ children: headline
216
+ }), headlineIcon != null && /*#__PURE__*/_jsx(View, {
217
+ style: styles.wideIcon,
218
+ children: headlineIcon
219
+ })]
220
+ })]
221
+ }) : /*#__PURE__*/_jsxs(View, {
222
+ style: styles.headerRow,
223
+ children: [/*#__PURE__*/_jsx(AvatarWithBadge, {
224
+ source: avatar.source,
225
+ name: avatar.name,
226
+ ring: ring,
227
+ badge: avatar.badge,
228
+ haloColor: colors.background
229
+ }), /*#__PURE__*/_jsx(View, {
230
+ style: styles.headlineColumn,
231
+ children: headline
232
+ })]
233
+ }), metricNode, footerNode]
234
+ }), !isWide && headlineIcon != null && /*#__PURE__*/_jsx(View, {
235
+ style: styles.floatingIcon,
236
+ children: headlineIcon
237
+ })]
238
+ });
239
+ };
240
+ const styles = StyleSheet.create({
241
+ body: {
242
+ gap: 16
243
+ },
244
+ headerRow: {
245
+ flexDirection: 'row',
246
+ alignItems: 'center',
247
+ gap: 12
248
+ },
249
+ headerRowWide: {
250
+ flexDirection: 'row',
251
+ alignItems: 'center',
252
+ gap: 14
253
+ },
254
+ headlineColumn: {
255
+ flex: 1,
256
+ minWidth: 0
257
+ },
258
+ wideValueRow: {
259
+ flex: 1,
260
+ flexDirection: 'row',
261
+ alignItems: 'center',
262
+ gap: 8
263
+ },
264
+ wideIcon: {
265
+ marginLeft: 8
266
+ },
267
+ value: {
268
+ fontSize: 27,
269
+ fontWeight: '800',
270
+ letterSpacing: -0.6,
271
+ fontVariant: ['tabular-nums']
272
+ },
273
+ subtitle: {
274
+ marginTop: 2,
275
+ fontSize: 13,
276
+ fontWeight: '500',
277
+ fontVariant: ['tabular-nums']
278
+ },
279
+ section: {
280
+ gap: 10
281
+ },
282
+ sectionLabel: {
283
+ fontSize: 13,
284
+ fontWeight: '500'
285
+ },
286
+ avatarWrap: {
287
+ position: 'relative'
288
+ },
289
+ badgeHalo: {
290
+ position: 'absolute',
291
+ right: -3,
292
+ bottom: -3,
293
+ padding: 2,
294
+ borderRadius: 999,
295
+ alignItems: 'center',
296
+ justifyContent: 'center'
297
+ },
298
+ floatingIcon: {
299
+ position: 'absolute',
300
+ top: CARD_PADDING,
301
+ right: CARD_PADDING
302
+ }
303
+ });
304
+ export const ProfileCard = /*#__PURE__*/memo(ProfileCardComponent);
305
+ ProfileCard.displayName = 'ProfileCard';
306
+ //# sourceMappingURL=ProfileCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","memo","View","StyleSheet","Card","Avatar","AvatarGroup","DotGridMeter","StatBar","Text","useTheme","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","WIDGET_WIDTH","CARD_PADDING","CARD_RADIUS","AVATAR_SIZE","FOOTER_AVATAR_SIZE","variantAccent","variant","colors","success","warning","primary","info","AvatarWithBadge","source","name","ring","badge","haloColor","style","styles","avatarWrap","children","undefined","size","badgeHalo","backgroundColor","MetricSection","metric","accent","labelColor","kind","section","label","sectionLabel","color","numberOfLines","filled","total","columns","dotSize","gap","filledColor","value","max","minLabel","maxLabel","icon","fillColor","percent","leftValue","rightValue","node","ProfileCardComponent","layout","avatar","subtitle","headlineIcon","footer","onPress","testID","isWide","width","surfaceStyle","padding","borderRadius","borderWidth","borderColor","border","background","borderCurve","headline","text","textSecondary","metricNode","footerNode","items","spacing","showInitials","body","headerRowWide","wideValueRow","headlineColumn","wideIcon","headerRow","floatingIcon","create","flexDirection","alignItems","flex","minWidth","marginLeft","fontSize","fontWeight","letterSpacing","fontVariant","marginTop","position","right","bottom","justifyContent","top","ProfileCard","displayName"],"sourceRoot":"../../../src","sources":["profile-card/ProfileCard.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { ProfileCard } from "./ProfileCard.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProfileCard"],"sourceRoot":"../../../src","sources":["profile-card/index.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,kBAAe","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["profile-card/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+
3
+ import React, { memo } from 'react';
4
+ import { View, StyleSheet } from 'react-native';
5
+ import { useTheme } from "../theme/use-theme.js";
6
+ import { Text } from "../typography/index.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ function clampPercent(value) {
9
+ if (Number.isNaN(value)) return 0;
10
+ return Math.max(0, Math.min(100, value));
11
+ }
12
+
13
+ /**
14
+ * A horizontal labeled value bar with two variants:
15
+ *
16
+ * - `progress` — a rounded capsule track with a proportional `value / max`
17
+ * fill, an optional top-right `icon`, and an optional min/max footer row.
18
+ * - `split` — a capsule split at `percent` (left portion active, remainder the
19
+ * track color), a bold percentage right of the label, and a two-sided footer
20
+ * of opposing values (inflow/outflow style).
21
+ *
22
+ * Colors come from the theme (the same NativeWind token pipeline that backs the
23
+ * `--*` vars) — text via `text`/`textSecondary`/`textTertiary`, the track from
24
+ * `backgroundSecondary` — with the fill overridable per-prop. Pure `<View>`
25
+ * composition, so it renders identically on web and native.
26
+ */
27
+ const StatBarComponent = props => {
28
+ const {
29
+ colors
30
+ } = useTheme();
31
+ const {
32
+ label,
33
+ fillColor,
34
+ trackColor,
35
+ height = 6,
36
+ icon,
37
+ style,
38
+ testID
39
+ } = props;
40
+ const fill = fillColor ?? colors.primary;
41
+ const track = trackColor ?? colors.backgroundSecondary;
42
+ const radius = height / 2;
43
+ if (props.variant === 'split') {
44
+ const {
45
+ percent,
46
+ leftValue,
47
+ rightValue,
48
+ leftColor,
49
+ rightColor
50
+ } = props;
51
+ const leftPercent = clampPercent(percent);
52
+ const activeLeft = leftColor ?? fill;
53
+ const remainder = rightColor ?? track;
54
+ return /*#__PURE__*/_jsxs(View, {
55
+ style: [styles.wrap, style],
56
+ testID: testID,
57
+ children: [/*#__PURE__*/_jsxs(View, {
58
+ style: styles.labelRow,
59
+ children: [/*#__PURE__*/_jsx(Text, {
60
+ style: [styles.label, {
61
+ color: colors.textSecondary
62
+ }],
63
+ numberOfLines: 1,
64
+ children: label
65
+ }), /*#__PURE__*/_jsxs(Text, {
66
+ style: [styles.percent, {
67
+ color: colors.text
68
+ }],
69
+ numberOfLines: 1,
70
+ children: [Math.round(leftPercent), "%"]
71
+ })]
72
+ }), /*#__PURE__*/_jsx(View, {
73
+ style: [styles.track, {
74
+ height,
75
+ borderRadius: radius,
76
+ backgroundColor: remainder
77
+ }],
78
+ children: /*#__PURE__*/_jsx(View, {
79
+ style: {
80
+ width: `${leftPercent}%`,
81
+ height,
82
+ borderRadius: radius,
83
+ backgroundColor: activeLeft
84
+ }
85
+ })
86
+ }), /*#__PURE__*/_jsxs(View, {
87
+ style: styles.footerRow,
88
+ children: [/*#__PURE__*/_jsx(Text, {
89
+ style: [styles.footerValue, {
90
+ color: colors.textTertiary
91
+ }],
92
+ numberOfLines: 1,
93
+ children: leftValue
94
+ }), /*#__PURE__*/_jsx(Text, {
95
+ style: [styles.footerValue, {
96
+ color: colors.textTertiary
97
+ }],
98
+ numberOfLines: 1,
99
+ children: rightValue
100
+ })]
101
+ })]
102
+ });
103
+ }
104
+ const {
105
+ value,
106
+ max,
107
+ minLabel,
108
+ maxLabel
109
+ } = props;
110
+ const ratio = max > 0 ? clampPercent(value / max * 100) : 0;
111
+ const hasFooter = minLabel != null || maxLabel != null;
112
+ return /*#__PURE__*/_jsxs(View, {
113
+ style: [styles.wrap, style],
114
+ testID: testID,
115
+ children: [/*#__PURE__*/_jsxs(View, {
116
+ style: styles.labelRow,
117
+ children: [/*#__PURE__*/_jsx(Text, {
118
+ style: [styles.label, {
119
+ color: colors.textSecondary
120
+ }],
121
+ numberOfLines: 1,
122
+ children: label
123
+ }), icon != null && /*#__PURE__*/_jsx(View, {
124
+ style: styles.icon,
125
+ children: icon
126
+ })]
127
+ }), /*#__PURE__*/_jsx(View, {
128
+ style: [styles.track, {
129
+ height,
130
+ borderRadius: radius,
131
+ backgroundColor: track
132
+ }],
133
+ accessibilityRole: "progressbar",
134
+ accessibilityValue: {
135
+ min: 0,
136
+ max,
137
+ now: value
138
+ },
139
+ children: /*#__PURE__*/_jsx(View, {
140
+ style: {
141
+ width: `${ratio}%`,
142
+ height,
143
+ borderRadius: radius,
144
+ backgroundColor: fill
145
+ }
146
+ })
147
+ }), hasFooter && /*#__PURE__*/_jsxs(View, {
148
+ style: styles.footerRow,
149
+ children: [/*#__PURE__*/_jsx(Text, {
150
+ style: [styles.footerValue, {
151
+ color: colors.textTertiary
152
+ }],
153
+ numberOfLines: 1,
154
+ children: minLabel ?? ''
155
+ }), /*#__PURE__*/_jsx(Text, {
156
+ style: [styles.footerValue, {
157
+ color: colors.textTertiary
158
+ }],
159
+ numberOfLines: 1,
160
+ children: maxLabel ?? ''
161
+ })]
162
+ })]
163
+ });
164
+ };
165
+ const styles = StyleSheet.create({
166
+ wrap: {
167
+ gap: 8
168
+ },
169
+ labelRow: {
170
+ flexDirection: 'row',
171
+ alignItems: 'center',
172
+ justifyContent: 'space-between',
173
+ gap: 8
174
+ },
175
+ label: {
176
+ flexShrink: 1,
177
+ fontSize: 13,
178
+ fontWeight: '500'
179
+ },
180
+ percent: {
181
+ fontSize: 14,
182
+ fontWeight: '700',
183
+ letterSpacing: -0.2,
184
+ fontVariant: ['tabular-nums']
185
+ },
186
+ icon: {
187
+ marginLeft: 8
188
+ },
189
+ track: {
190
+ width: '100%',
191
+ overflow: 'hidden',
192
+ flexDirection: 'row',
193
+ borderCurve: 'continuous'
194
+ },
195
+ footerRow: {
196
+ flexDirection: 'row',
197
+ alignItems: 'center',
198
+ justifyContent: 'space-between',
199
+ gap: 8
200
+ },
201
+ footerValue: {
202
+ fontSize: 12,
203
+ fontVariant: ['tabular-nums']
204
+ }
205
+ });
206
+ export const StatBar = /*#__PURE__*/memo(StatBarComponent);
207
+ StatBar.displayName = 'StatBar';
208
+ //# sourceMappingURL=StatBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","memo","View","StyleSheet","useTheme","Text","jsx","_jsx","jsxs","_jsxs","clampPercent","value","Number","isNaN","Math","max","min","StatBarComponent","props","colors","label","fillColor","trackColor","height","icon","style","testID","fill","primary","track","backgroundSecondary","radius","variant","percent","leftValue","rightValue","leftColor","rightColor","leftPercent","activeLeft","remainder","styles","wrap","children","labelRow","color","textSecondary","numberOfLines","text","round","borderRadius","backgroundColor","width","footerRow","footerValue","textTertiary","minLabel","maxLabel","ratio","hasFooter","accessibilityRole","accessibilityValue","now","create","gap","flexDirection","alignItems","justifyContent","flexShrink","fontSize","fontWeight","letterSpacing","fontVariant","marginLeft","overflow","borderCurve","StatBar","displayName"],"sourceRoot":"../../../src","sources":["stat-bar/StatBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { StatBar } from "./StatBar.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StatBar"],"sourceRoot":"../../../src","sources":["stat-bar/index.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,cAAW","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["stat-bar/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { ActivityHeatmapProps } from './types';
3
+ export declare const ActivityHeatmap: React.NamedExoticComponent<ActivityHeatmapProps>;
4
+ //# sourceMappingURL=ActivityHeatmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityHeatmap.d.ts","sourceRoot":"","sources":["../../../../src/activity-heatmap/ActivityHeatmap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAK7C,OAAO,KAAK,EAAsB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AA0RxE,eAAO,MAAM,eAAe,kDAAiC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ActivityHeatmapDay } from './types';
2
+ /**
3
+ * Group arbitrary items by their `YYYY-MM-DD` day and count how many fall on
4
+ * each day. Returns entries sorted ascending by date — ready to hand to
5
+ * {@link ActivityHeatmap}'s `data` prop. Items whose date can't be parsed are
6
+ * skipped.
7
+ */
8
+ export declare function bucketByDay<T>(items: T[], getDate: (item: T) => string | Date): ActivityHeatmapDay[];
9
+ //# sourceMappingURL=bucketByDay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucketByDay.d.ts","sourceRoot":"","sources":["../../../../src/activity-heatmap/bucketByDay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA6BlD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,GAClC,kBAAkB,EAAE,CAUtB"}
@@ -0,0 +1,4 @@
1
+ export { ActivityHeatmap } from './ActivityHeatmap';
2
+ export { bucketByDay } from './bucketByDay';
3
+ export type { ActivityHeatmapProps, ActivityHeatmapDay } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/activity-heatmap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}