jfs-components 0.0.84 → 0.0.85

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 (43) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/lib/commonjs/components/AppBar/AppBar.js +36 -22
  3. package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +866 -0
  4. package/lib/commonjs/components/AreaLineChart/chartMath.js +252 -0
  5. package/lib/commonjs/components/Attached/Attached.js +34 -4
  6. package/lib/commonjs/components/BubbleChart/BubbleChart.js +191 -0
  7. package/lib/commonjs/components/BubbleChart/bubblePacking.js +378 -0
  8. package/lib/commonjs/components/ClusterBubble/ClusterBubble.js +272 -0
  9. package/lib/commonjs/components/MetricLegendItem/MetricLegendItem.js +7 -1
  10. package/lib/commonjs/components/index.js +27 -0
  11. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  12. package/lib/commonjs/icons/registry.js +1 -1
  13. package/lib/module/components/AppBar/AppBar.js +36 -22
  14. package/lib/module/components/AreaLineChart/AreaLineChart.js +859 -0
  15. package/lib/module/components/AreaLineChart/chartMath.js +242 -0
  16. package/lib/module/components/Attached/Attached.js +34 -4
  17. package/lib/module/components/BubbleChart/BubbleChart.js +185 -0
  18. package/lib/module/components/BubbleChart/bubblePacking.js +370 -0
  19. package/lib/module/components/ClusterBubble/ClusterBubble.js +267 -0
  20. package/lib/module/components/MetricLegendItem/MetricLegendItem.js +7 -1
  21. package/lib/module/components/index.js +3 -0
  22. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  23. package/lib/module/icons/registry.js +1 -1
  24. package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +212 -0
  25. package/lib/typescript/src/components/AreaLineChart/chartMath.d.ts +90 -0
  26. package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +81 -0
  27. package/lib/typescript/src/components/BubbleChart/bubblePacking.d.ts +83 -0
  28. package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +76 -0
  29. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +7 -1
  30. package/lib/typescript/src/components/index.d.ts +3 -0
  31. package/lib/typescript/src/icons/registry.d.ts +1 -1
  32. package/package.json +1 -1
  33. package/src/components/AppBar/AppBar.tsx +37 -24
  34. package/src/components/AreaLineChart/AreaLineChart.tsx +1161 -0
  35. package/src/components/AreaLineChart/chartMath.ts +265 -0
  36. package/src/components/Attached/Attached.tsx +36 -5
  37. package/src/components/BubbleChart/BubbleChart.tsx +319 -0
  38. package/src/components/BubbleChart/bubblePacking.ts +397 -0
  39. package/src/components/ClusterBubble/ClusterBubble.tsx +359 -0
  40. package/src/components/MetricLegendItem/MetricLegendItem.tsx +20 -6
  41. package/src/components/index.ts +3 -0
  42. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  43. package/src/icons/registry.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,35 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [0.0.85] - 2026-06-03
8
+
9
+ - Added `AreaLineChart` — multi-series area/line chart with grid, axes, legend, goal pin, and interactive tooltip; exports `useChart` and compound `ChartGrid` / `ChartXAxis` / `ChartYAxis` / `GoalPin` parts.
10
+ - Added `BubbleChart` — packed bubble cluster layout with sqrt-scaled sizes and collision-aware label placement.
11
+ - Added `ClusterBubble` — single data-viz bubble with inside/outside/auto label placement.
12
+ - `AppBar` — SubPage middle slot uses full-height flex overlay (fixes Android vertical misalignment).
13
+ - `Attached` — token-driven outside border ring on the badge slot.
14
+ - `MetricLegendItem` — new `indicatorShape` prop (`dot` | `line`).
15
+
16
+ ---
17
+
18
+ ## [0.0.84] - 2026-06-02
19
+
20
+ - Added `Spinner` — animated three-segment loading indicator with gravity-based motion and reduced-motion support.
21
+ - Added 12 icons: `ArrowUp`/`ArrowDown`, chevron-in-circle variants, OS nav icons, `SignIn`/`SignOut`.
22
+ - `AppBar` — SubPage middle slot absolutely centered; new `middleSlotWidth` prop.
23
+ - `Attached` — `badgeSize` / `badgeRadius` to enforce a fixed badge box and clip content.
24
+ - `Checkbox` — 44 pt touch target via `hitSlop` instead of oversized visual box.
25
+ - `Drawer` / `FullscreenModal` — `keyboardShouldPersistTaps="handled"` on scroll content.
26
+ - `DropdownInput` — Android popup positioning fix; `menuOffset` defaults to `formField/gap`.
27
+ - `ExpandableCheckbox` — single-line label/checkbox vertical alignment on Android.
28
+ - `FormField` / `MessageField` — input wrapper reverted to `View`.
29
+ - `TextInput` — native uses `View` wrapper for reliable Android focus; web keeps Pressable tap-to-focus.
30
+ - `PaymentFeedback` — `AppearanceSystem` via `modes` drives default capsule color.
31
+ - `PlanComparisonCard` — 1.8fr/1fr flex grid; removed `labelColumnFlex`.
32
+ - `ListItem` — `leading` no longer defaults to `IconCapsule`; omit/`null` renders nothing.
33
+
34
+ ---
35
+
7
36
  ## [0.0.79] - 2026-05-30
8
37
 
9
38
  - Added `Attached` — positions a badge over main content at nine anchor points (corners, edges, center).
@@ -139,21 +139,31 @@ function AppBar({
139
139
  justifyContent: hasInFlowMiddle ? 'flex-start' : 'space-between'
140
140
  };
141
141
 
142
- // Absolutely-centered middle box for SubPage, mirroring the Figma geometry.
143
- // `left/top: 50%` + a negative translate keeps it centered regardless of the
144
- // bar width, while the fixed width clips overly-wide content (overflow:
145
- // hidden) instead of letting it bleed under the leading/actions slots.
146
- const subPageMiddleStyle = {
142
+ // Absolutely-positioned overlay for the SubPage middle slot. Instead of
143
+ // centering a fixed-height box with `top/left: 50%` + transform (which on
144
+ // Android resolves the percentage against an intermediate, content-driven
145
+ // parent height and lands a few px too high), the overlay STRETCHES to fill
146
+ // the whole bar (`top/bottom/left/right: 0`) and centers its content with
147
+ // flexbox. This uses the exact same full-height vertical reference as the
148
+ // leading/actions row (`alignItems: 'center'`), so the middle content always
149
+ // sits on the same line as the back arrow and end slot on every platform.
150
+ const subPageMiddleOverlayStyle = {
147
151
  position: 'absolute',
148
- top: '50%',
149
- left: '50%',
152
+ top: 0,
153
+ left: 0,
154
+ right: 0,
155
+ bottom: 0,
156
+ flexDirection: 'row',
157
+ alignItems: 'center',
158
+ justifyContent: 'center'
159
+ };
160
+
161
+ // Fixed-width clipping box (mirrors the Figma "slot wrap" geometry): keeps the
162
+ // middle content from bleeding under the leading/actions slots while staying
163
+ // centered within the overlay above.
164
+ const subPageMiddleBoxStyle = {
150
165
  width: middleSlotWidth,
151
166
  height: SUBPAGE_MIDDLE_HEIGHT,
152
- transform: [{
153
- translateX: -middleSlotWidth / 2
154
- }, {
155
- translateY: -SUBPAGE_MIDDLE_HEIGHT / 2
156
- }],
157
167
  flexDirection: 'row',
158
168
  alignItems: 'center',
159
169
  justifyContent: 'center',
@@ -188,19 +198,23 @@ function AppBar({
188
198
  style: actionsStyle,
189
199
  children: processedActions
190
200
  }), isSub && processedMiddle && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
191
- style: subPageMiddleStyle,
201
+ style: subPageMiddleOverlayStyle,
192
202
  pointerEvents: "box-none",
193
203
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
194
- style: {
195
- flex: 1,
196
- minWidth: 1,
197
- height: '100%',
198
- flexDirection: 'row',
199
- alignItems: 'center',
200
- justifyContent: 'center'
201
- },
204
+ style: subPageMiddleBoxStyle,
202
205
  pointerEvents: "box-none",
203
- children: processedMiddle
206
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
207
+ style: {
208
+ flex: 1,
209
+ minWidth: 1,
210
+ height: '100%',
211
+ flexDirection: 'row',
212
+ alignItems: 'center',
213
+ justifyContent: 'center'
214
+ },
215
+ pointerEvents: "box-none",
216
+ children: processedMiddle
217
+ })
204
218
  })
205
219
  })]
206
220
  });