jfs-components 0.0.54 → 0.0.55
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.
- package/lib/commonjs/components/Drawer/Drawer.js +11 -4
- package/lib/commonjs/components/ListGroup/ListGroup.js +15 -9
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/module/components/Drawer/Drawer.js +11 -4
- package/lib/module/components/ListGroup/ListGroup.js +15 -9
- package/lib/module/icons/registry.js +1 -1
- package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +12 -7
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/Drawer/Drawer.tsx +12 -4
- package/src/components/ListGroup/ListGroup.tsx +21 -11
- package/src/icons/registry.ts +1 -1
|
@@ -3,32 +3,37 @@ import { View, type StyleProp, type ViewStyle } from 'react-native';
|
|
|
3
3
|
type ListGroupProps = {
|
|
4
4
|
label?: string;
|
|
5
5
|
listGroupSlot?: React.ReactNode;
|
|
6
|
+
children?: React.ReactNode;
|
|
6
7
|
modes?: Record<string, any>;
|
|
7
8
|
style?: StyleProp<ViewStyle>;
|
|
8
9
|
accessibilityLabel?: string;
|
|
9
10
|
accessibilityHint?: string;
|
|
10
|
-
} & React.ComponentProps<typeof View>;
|
|
11
|
+
} & Omit<React.ComponentProps<typeof View>, 'children'>;
|
|
11
12
|
/**
|
|
12
13
|
* ListGroup component that mirrors the Figma "List Group" component.
|
|
13
14
|
*
|
|
14
15
|
* This component supports:
|
|
15
16
|
* - **label** text at the top
|
|
16
|
-
* - **listGroupSlot** for
|
|
17
|
+
* - **listGroupSlot** or **children** for content (typically ListItem components)
|
|
17
18
|
* - **design-token driven styling** via `getVariableByName` and `modes`
|
|
18
19
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* -
|
|
20
|
+
* Content can be provided in two interchangeable ways:
|
|
21
|
+
* - Via the `listGroupSlot` prop (Figma Slot "List group")
|
|
22
|
+
* - Via `children`
|
|
23
|
+
*
|
|
24
|
+
* Both produce identical results. If both are provided, they are merged
|
|
25
|
+
* (listGroupSlot items render first, then children).
|
|
22
26
|
*
|
|
23
27
|
* @component
|
|
24
28
|
* @param {Object} props
|
|
25
29
|
* @param {string} [props.label=''] - Label text displayed at the top of the list group
|
|
26
|
-
* @param {React.ReactNode} [props.listGroupSlot] -
|
|
30
|
+
* @param {React.ReactNode} [props.listGroupSlot] - Slot for list items (Figma Slot "List group")
|
|
31
|
+
* @param {React.ReactNode} [props.children] - Children for list items (equivalent to listGroupSlot)
|
|
27
32
|
* @param {Object} [props.modes={}] - Modes object passed to `getVariableByName` for all design tokens
|
|
28
33
|
* @param {Object} [props.style] - Optional container style overrides
|
|
29
34
|
* @param {string} [props.accessibilityLabel] - Accessibility label for the list group. If not provided, uses label
|
|
30
35
|
* @param {string} [props.accessibilityHint] - Additional accessibility hint for screen readers
|
|
31
36
|
*/
|
|
32
|
-
declare function ListGroup({ label, listGroupSlot, modes, style, accessibilityLabel, accessibilityHint, ...rest }: ListGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
declare function ListGroup({ label, listGroupSlot, children, modes, style, accessibilityLabel, accessibilityHint, ...rest }: ListGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
33
38
|
export default ListGroup;
|
|
34
39
|
//# sourceMappingURL=ListGroup.d.ts.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Auto-generated from SVG files in src/icons/
|
|
5
5
|
* DO NOT EDIT MANUALLY - Run "npm run icons:generate" to regenerate
|
|
6
6
|
*
|
|
7
|
-
* Generated: 2026-04-13T20:
|
|
7
|
+
* Generated: 2026-04-13T20:48:16.865Z
|
|
8
8
|
*/
|
|
9
9
|
export declare const iconRegistry: Record<string, {
|
|
10
10
|
path: string;
|
package/package.json
CHANGED
|
@@ -232,17 +232,25 @@ function Drawer({
|
|
|
232
232
|
? (translateY.value - minTranslateY) / totalRange
|
|
233
233
|
: 0
|
|
234
234
|
|
|
235
|
-
//
|
|
236
|
-
|
|
235
|
+
// How far the drawer sheet itself moved from its position at gesture
|
|
236
|
+
// start. When the scroll view consumed the gesture (content was not
|
|
237
|
+
// at the top), the drawer stays put and displacement ≈ 0 — even
|
|
238
|
+
// though the finger moved fast. We must NOT use velocity to snap in
|
|
239
|
+
// that case; otherwise a fast content-scroll collapses the drawer.
|
|
240
|
+
const drawerDisplacement = Math.abs(translateY.value - context.value.y)
|
|
241
|
+
const drawerMovedEnough = drawerDisplacement > 10
|
|
242
|
+
|
|
243
|
+
if (drawerMovedEnough && event.velocityY < -500) {
|
|
237
244
|
scrollTo(minTranslateY)
|
|
238
245
|
isFullyExpanded.value = true
|
|
239
246
|
runOnJS(updateMode)('expanded')
|
|
240
|
-
} else if (event.velocityY > 500) {
|
|
247
|
+
} else if (drawerMovedEnough && event.velocityY > 500) {
|
|
241
248
|
scrollTo(maxTranslateY)
|
|
242
249
|
isFullyExpanded.value = false
|
|
243
250
|
runOnJS(updateMode)('collapsed')
|
|
244
251
|
} else {
|
|
245
|
-
// Slow / medium gesture
|
|
252
|
+
// Slow / medium gesture, or the drawer barely moved → position
|
|
253
|
+
// based snap with asymmetric thresholds.
|
|
246
254
|
// Down stroke: must cross 75% to collapse (hard to dismiss).
|
|
247
255
|
// Up stroke: must reach top 35% to expand (35% from top).
|
|
248
256
|
const isDraggingDown = event.velocityY >= 0
|
|
@@ -11,28 +11,33 @@ import { cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils
|
|
|
11
11
|
type ListGroupProps = {
|
|
12
12
|
label?: string;
|
|
13
13
|
listGroupSlot?: React.ReactNode;
|
|
14
|
+
children?: React.ReactNode;
|
|
14
15
|
modes?: Record<string, any>;
|
|
15
16
|
style?: StyleProp<ViewStyle>;
|
|
16
17
|
accessibilityLabel?: string;
|
|
17
18
|
accessibilityHint?: string;
|
|
18
|
-
} & React.ComponentProps<typeof View>;
|
|
19
|
+
} & Omit<React.ComponentProps<typeof View>, 'children'>;
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* ListGroup component that mirrors the Figma "List Group" component.
|
|
22
23
|
*
|
|
23
24
|
* This component supports:
|
|
24
25
|
* - **label** text at the top
|
|
25
|
-
* - **listGroupSlot** for
|
|
26
|
+
* - **listGroupSlot** or **children** for content (typically ListItem components)
|
|
26
27
|
* - **design-token driven styling** via `getVariableByName` and `modes`
|
|
27
28
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* -
|
|
29
|
+
* Content can be provided in two interchangeable ways:
|
|
30
|
+
* - Via the `listGroupSlot` prop (Figma Slot "List group")
|
|
31
|
+
* - Via `children`
|
|
32
|
+
*
|
|
33
|
+
* Both produce identical results. If both are provided, they are merged
|
|
34
|
+
* (listGroupSlot items render first, then children).
|
|
31
35
|
*
|
|
32
36
|
* @component
|
|
33
37
|
* @param {Object} props
|
|
34
38
|
* @param {string} [props.label=''] - Label text displayed at the top of the list group
|
|
35
|
-
* @param {React.ReactNode} [props.listGroupSlot] -
|
|
39
|
+
* @param {React.ReactNode} [props.listGroupSlot] - Slot for list items (Figma Slot "List group")
|
|
40
|
+
* @param {React.ReactNode} [props.children] - Children for list items (equivalent to listGroupSlot)
|
|
36
41
|
* @param {Object} [props.modes={}] - Modes object passed to `getVariableByName` for all design tokens
|
|
37
42
|
* @param {Object} [props.style] - Optional container style overrides
|
|
38
43
|
* @param {string} [props.accessibilityLabel] - Accessibility label for the list group. If not provided, uses label
|
|
@@ -41,6 +46,7 @@ type ListGroupProps = {
|
|
|
41
46
|
function ListGroup({
|
|
42
47
|
label = '',
|
|
43
48
|
listGroupSlot,
|
|
49
|
+
children,
|
|
44
50
|
modes = {},
|
|
45
51
|
style,
|
|
46
52
|
accessibilityLabel,
|
|
@@ -79,11 +85,15 @@ function ListGroup({
|
|
|
79
85
|
fontWeight: labelFontWeight,
|
|
80
86
|
}
|
|
81
87
|
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
const
|
|
86
|
-
?
|
|
88
|
+
// Merge listGroupSlot and children into a single list, then flatten and
|
|
89
|
+
// propagate modes. Both props are interchangeable; when both are provided
|
|
90
|
+
// the slot items render first, followed by children.
|
|
91
|
+
const rawItems = [
|
|
92
|
+
...(listGroupSlot ? flattenChildren(listGroupSlot) : []),
|
|
93
|
+
...(children ? flattenChildren(children) : []),
|
|
94
|
+
]
|
|
95
|
+
const processedSlot = rawItems.length > 0
|
|
96
|
+
? cloneChildrenWithModes(rawItems, modes)
|
|
87
97
|
: null
|
|
88
98
|
|
|
89
99
|
// Use provided accessibilityLabel or fall back to label
|
package/src/icons/registry.ts
CHANGED