@hjmds/react-native 1.27.1 → 1.27.2
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/dist/actions.d.ts +26 -3
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +6 -2
- package/dist/actions.js.map +1 -1
- package/dist/collection-editing.d.ts.map +1 -1
- package/dist/collection-editing.js +5 -4
- package/dist/collection-editing.js.map +1 -1
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +29 -10
- package/dist/data-display.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +17 -4
- package/dist/feedback.js.map +1 -1
- package/dist/internal/drawn-glyphs.d.ts +18 -0
- package/dist/internal/drawn-glyphs.d.ts.map +1 -1
- package/dist/internal/drawn-glyphs.js +16 -0
- package/dist/internal/drawn-glyphs.js.map +1 -1
- package/dist/internal/recipe-button.d.ts +1 -0
- package/dist/internal/recipe-button.d.ts.map +1 -1
- package/dist/internal/recipe-button.js +6 -2
- package/dist/internal/recipe-button.js.map +1 -1
- package/dist/internal/screen-exit.d.ts.map +1 -1
- package/dist/internal/screen-exit.js +2 -1
- package/dist/internal/screen-exit.js.map +1 -1
- package/dist/saved-items.js +1 -1
- package/dist/saved-items.js.map +1 -1
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +21 -12
- package/dist/screen-flows.js.map +1 -1
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +8 -2
- package/dist/upload-item.js.map +1 -1
- package/dist/virtual-list.d.ts.map +1 -1
- package/dist/virtual-list.js +5 -1
- package/dist/virtual-list.js.map +1 -1
- package/package.json +2 -2
package/dist/upload-item.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { getUploadItemAvailableAction, resolveUploadItemAnnouncement, uploadItemRecipe, } from "@hjmds/design-contracts/components/upload-item";
|
|
3
3
|
import { glyph } from "@hjmds/design-contracts/foundations";
|
|
4
|
-
import {
|
|
4
|
+
import { View } from "react-native";
|
|
5
|
+
import { iconButtonRecipe } from "@hjmds/design-contracts/recipes";
|
|
6
|
+
import { DrawnClose, DrawnRefresh } from "./internal/drawn-glyphs.js";
|
|
5
7
|
import { IconButton } from "./actions.js";
|
|
6
8
|
import { Progress } from "./feedback.js";
|
|
7
9
|
import { Text } from "./primitives.js";
|
|
@@ -28,6 +30,10 @@ export function UploadItem({ descriptor, labels, onCancel, onRetry, leading, lay
|
|
|
28
30
|
// element, VoiceOver and TalkBack swallowed Cancel/Retry into it and the
|
|
29
31
|
// action was unreachable (2026-09-30 audit). The file text is one grouped
|
|
30
32
|
// element and the action is a separate button, as the contract's slots list.
|
|
31
|
-
_jsxs(View, { style: [{ alignItems: "center", borderColor: colors.border, borderRadius: corner, borderWidth: 1, direction: environment.direction, flexDirection: "row", gap: uploadItemRecipe.row.gap, minHeight: uploadItemRecipe.row.minHeight, paddingHorizontal: uploadItemRecipe.row.paddingHorizontal, paddingVertical: uploadItemRecipe.row.paddingVertical }, layoutStyle], children: [leading === undefined ? null : _jsx(View, { accessible: false, importantForAccessibility: "no-hide-descendants", children: leading }), _jsxs(View, { accessibilityLabel: announcement.label, accessibilityState: { busy: descriptor.state.status === "uploading" }, accessibilityValue: { text: announcement.description }, accessible: true, style: { flex: 1, gap: 2, minWidth: 0 }, children: [_jsx(Text, { children: descriptor.name }), descriptor.sizeLabel === undefined ? null : _jsx(Text, { tone: "muted", variant: "label", children: descriptor.sizeLabel }), _jsx(Text, { accessibilityLiveRegion: "polite", style: { color: statusColor }, variant: "label", children: announcement.description }), descriptor.state.status === "uploading" ? _jsx(Progress, { accessibilityLabel: announcement.description, ...(descriptor.state.progress === null ? {} : { value: descriptor.state.progress * 100 }), valueText: announcement.description }) : null] }), action === null ? null : (
|
|
33
|
+
_jsxs(View, { style: [{ alignItems: "center", borderColor: colors.border, borderRadius: corner, borderWidth: 1, direction: environment.direction, flexDirection: "row", gap: uploadItemRecipe.row.gap, minHeight: uploadItemRecipe.row.minHeight, paddingHorizontal: uploadItemRecipe.row.paddingHorizontal, paddingVertical: uploadItemRecipe.row.paddingVertical }, layoutStyle], children: [leading === undefined ? null : _jsx(View, { accessible: false, importantForAccessibility: "no-hide-descendants", children: leading }), _jsxs(View, { accessibilityLabel: announcement.label, accessibilityState: { busy: descriptor.state.status === "uploading" }, accessibilityValue: { text: announcement.description }, accessible: true, style: { flex: 1, gap: 2, minWidth: 0 }, children: [_jsx(Text, { children: descriptor.name }), descriptor.sizeLabel === undefined ? null : _jsx(Text, { tone: "muted", variant: "label", children: descriptor.sizeLabel }), _jsx(Text, { accessibilityLiveRegion: "polite", style: { color: statusColor }, variant: "label", children: announcement.description }), descriptor.state.status === "uploading" ? _jsx(Progress, { accessibilityLabel: announcement.description, ...(descriptor.state.progress === null ? {} : { value: descriptor.state.progress * 100 }), valueText: announcement.description }) : null] }), action === null ? null : (
|
|
34
|
+
// edge="end": the glyph slot ends on the row's md inset, mirroring the file text's start inset (2026-10-17 audit).
|
|
35
|
+
_jsx(IconButton, { edge: "end", label: action === "cancel" ? labels.cancel : labels.retry, onPress: () => action === "cancel" ? onCancel?.(descriptor.id) : onRetry?.(descriptor.id), tone: "ghost", children: action === "cancel"
|
|
36
|
+
? _jsx(DrawnClose, { size: glyph[iconButtonRecipe.sizes.medium.glyph], color: colors.textMuted })
|
|
37
|
+
: _jsx(DrawnRefresh, { size: glyph[iconButtonRecipe.sizes.medium.glyph], color: colors.textMuted }) }))] }));
|
|
32
38
|
}
|
|
33
39
|
//# sourceMappingURL=upload-item.js.map
|
package/dist/upload-item.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-item.js","sourceRoot":"","sources":["../src/upload-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,GAGjB,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"upload-item.js","sourceRoot":"","sources":["../src/upload-item.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../src/virtual-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../src/virtual-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAAC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACxO,gHAAgH;AAChH,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BAYrI"}
|
package/dist/virtual-list.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { FlatList, View } from "react-native";
|
|
3
3
|
import { resolveVirtualWindow, validateListKeys } from "@hjmds/design-contracts/components/virtual-list";
|
|
4
|
+
import { listRowRecipe } from "@hjmds/design-contracts/recipes";
|
|
4
5
|
/** FlatList owns recycling and native assistive scrolling; rowHeight must fit the host's current text scale. */
|
|
5
6
|
export function VirtualList({ items, keyExtractor, renderItem, rowHeight, height, label, empty, overscan = 3 }) {
|
|
6
7
|
validateListKeys(items.map(keyExtractor), label);
|
|
@@ -8,6 +9,9 @@ export function VirtualList({ items, keyExtractor, renderItem, rowHeight, height
|
|
|
8
9
|
// ScrollView defaults to flexGrow: 1; disable it so the declared viewport
|
|
9
10
|
// remains fixed inside a tall host instead of expanding beyond `height`.
|
|
10
11
|
// Empty guidance occupies the declared viewport, not a zero-height first row.
|
|
11
|
-
return _jsx(FlatList, { data: items, accessibilityLabel: label, keyExtractor: keyExtractor,
|
|
12
|
+
return _jsx(FlatList, { data: items, accessibilityLabel: label, keyExtractor: keyExtractor,
|
|
13
|
+
// FlatList clips its rows, so it leaves room for the ListRow surface bleed and bleeds itself by the same amount (row
|
|
14
|
+
// text stays on the host's content edge, the row fill is not cut; 2026-10-17, as Web).
|
|
15
|
+
style: { height, flexGrow: 0, flexShrink: 0, marginHorizontal: -listRowRecipe.surfaceBleed }, getItemLayout: (_data, index) => ({ length: rowHeight, offset: index * rowHeight, index }), contentContainerStyle: [{ paddingHorizontal: listRowRecipe.surfaceBleed }, items.length === 0 ? { flexGrow: 1, justifyContent: "center", alignItems: "center" } : undefined], initialNumToRender: Math.ceil(height / rowHeight) + overscan, ListEmptyComponent: _jsx(View, { children: empty }), renderItem: ({ item, index }) => _jsx(View, { style: { height: rowHeight }, children: renderItem(item, index) }) });
|
|
12
16
|
}
|
|
13
17
|
//# sourceMappingURL=virtual-list.js.map
|
package/dist/virtual-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-list.js","sourceRoot":"","sources":["../src/virtual-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"virtual-list.js","sourceRoot":"","sources":["../src/virtual-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,gHAAgH;AAChH,MAAM,UAAU,WAAW,CAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAuB;IACpI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrH,0EAA0E;IAC1E,yEAAyE;IACzE,8EAA8E;IAC9E,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY;QACjF,qHAAqH;QACrH,uFAAuF;QACvF,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,EACxL,qBAAqB,EAAE,CAAC,EAAE,iBAAiB,EAAE,aAAa,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5K,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,QAAQ,EAAE,kBAAkB,EAAE,KAAC,IAAI,cAAE,KAAK,GAAQ,EACtG,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAQ,GAAI,CAAC;AAC9G,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react-native",
|
|
3
|
-
"version": "1.27.
|
|
3
|
+
"version": "1.27.2",
|
|
4
4
|
"description": "Expo-independent React Native renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"blobatar": "2.7.0",
|
|
705
705
|
"@blobatar/react-native": "2.7.0",
|
|
706
706
|
"lucide-react-native": "1.49.0",
|
|
707
|
-
"@hjmds/design-contracts": "1.27.
|
|
707
|
+
"@hjmds/design-contracts": "1.27.2"
|
|
708
708
|
},
|
|
709
709
|
"engines": {
|
|
710
710
|
"node": ">=20"
|