@hjmds/react-native 1.19.0 → 1.21.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 (81) hide show
  1. package/dist/actions.d.ts +10 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js.map +1 -1
  4. package/dist/authoring-tools.d.ts +24 -0
  5. package/dist/authoring-tools.d.ts.map +1 -0
  6. package/dist/authoring-tools.js +28 -0
  7. package/dist/authoring-tools.js.map +1 -0
  8. package/dist/calendar.d.ts.map +1 -1
  9. package/dist/calendar.js +2 -1
  10. package/dist/calendar.js.map +1 -1
  11. package/dist/chart.d.ts +138 -0
  12. package/dist/chart.d.ts.map +1 -0
  13. package/dist/chart.js +271 -0
  14. package/dist/chart.js.map +1 -0
  15. package/dist/collection-editing.d.ts +63 -0
  16. package/dist/collection-editing.d.ts.map +1 -0
  17. package/dist/collection-editing.js +114 -0
  18. package/dist/collection-editing.js.map +1 -0
  19. package/dist/communication.d.ts +51 -0
  20. package/dist/communication.d.ts.map +1 -0
  21. package/dist/communication.js +68 -0
  22. package/dist/communication.js.map +1 -0
  23. package/dist/data-table.d.ts +48 -0
  24. package/dist/data-table.d.ts.map +1 -0
  25. package/dist/data-table.js +90 -0
  26. package/dist/data-table.js.map +1 -0
  27. package/dist/data-workflows.d.ts +68 -0
  28. package/dist/data-workflows.d.ts.map +1 -0
  29. package/dist/data-workflows.js +60 -0
  30. package/dist/data-workflows.js.map +1 -0
  31. package/dist/evidence.d.ts +1 -1
  32. package/dist/evidence.js +1 -1
  33. package/dist/internal/recipe-button.d.ts +4 -0
  34. package/dist/internal/recipe-button.d.ts.map +1 -1
  35. package/dist/internal/recipe-button.js +24 -5
  36. package/dist/internal/recipe-button.js.map +1 -1
  37. package/dist/internal/use-composition-action.d.ts +17 -0
  38. package/dist/internal/use-composition-action.d.ts.map +1 -0
  39. package/dist/internal/use-composition-action.js +17 -0
  40. package/dist/internal/use-composition-action.js.map +1 -0
  41. package/dist/media-transport.d.ts +22 -0
  42. package/dist/media-transport.d.ts.map +1 -0
  43. package/dist/media-transport.js +49 -0
  44. package/dist/media-transport.js.map +1 -0
  45. package/dist/navigation.d.ts +3 -1
  46. package/dist/navigation.d.ts.map +1 -1
  47. package/dist/navigation.js +41 -12
  48. package/dist/navigation.js.map +1 -1
  49. package/dist/screen-flows.d.ts +3 -2
  50. package/dist/screen-flows.d.ts.map +1 -1
  51. package/dist/screen-flows.js +1 -1
  52. package/dist/screen-flows.js.map +1 -1
  53. package/dist/screens.d.ts +8 -2
  54. package/dist/screens.d.ts.map +1 -1
  55. package/dist/screens.js +21 -7
  56. package/dist/screens.js.map +1 -1
  57. package/dist/social-compositions.d.ts +52 -0
  58. package/dist/social-compositions.d.ts.map +1 -0
  59. package/dist/social-compositions.js +40 -0
  60. package/dist/social-compositions.js.map +1 -0
  61. package/dist/streaming-answer.d.ts +24 -0
  62. package/dist/streaming-answer.d.ts.map +1 -0
  63. package/dist/streaming-answer.js +57 -0
  64. package/dist/streaming-answer.js.map +1 -0
  65. package/dist/table-family.d.ts +46 -0
  66. package/dist/table-family.d.ts.map +1 -0
  67. package/dist/table-family.js +56 -0
  68. package/dist/table-family.js.map +1 -0
  69. package/dist/task-controls.d.ts +47 -0
  70. package/dist/task-controls.d.ts.map +1 -0
  71. package/dist/task-controls.js +46 -0
  72. package/dist/task-controls.js.map +1 -0
  73. package/dist/toggle-feedback.d.ts +26 -0
  74. package/dist/toggle-feedback.d.ts.map +1 -0
  75. package/dist/toggle-feedback.js +46 -0
  76. package/dist/toggle-feedback.js.map +1 -0
  77. package/dist/transfer-task.d.ts +18 -0
  78. package/dist/transfer-task.d.ts.map +1 -0
  79. package/dist/transfer-task.js +56 -0
  80. package/dist/transfer-task.js.map +1 -0
  81. package/package.json +75 -3
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { resolveTaskChoice, resolvePasswordRules, resolvePriceOption } from "@hjmds/design-contracts/task-controls";
4
+ import { Button } from "./actions.js";
5
+ import { Menu } from "./navigation.js";
6
+ import { PasswordField } from "./inputs.js";
7
+ import { RadioGroup } from "./inputs.js";
8
+ import { Card } from "./data-display.js";
9
+ import { Progress } from "./feedback.js";
10
+ import { Stack, Text } from "./primitives.js";
11
+ import { useCompositionAction } from "./internal/use-composition-action.js";
12
+ function ChoiceMenu(props) {
13
+ const available = props.choices.some(choice => !choice.disabled);
14
+ if (!available)
15
+ return _jsx(Button, { disabled: true, children: props.label });
16
+ return _jsx(Menu, { triggerLabel: props.label, dismissLabel: props.dismissLabel, disabled: props.disabled, busy: props.pending === true, renderTrigger: trigger => _jsx(Button, { tone: "secondary", onPress: trigger.onPress, disabled: props.disabled, loading: props.pending === true, children: props.label }), items: props.choices, selection: { mode: "single", selectedKey: props.selectedId, onSelectionChange: () => undefined }, onSelectionAfterDismiss: id => props.onChoose(id) });
17
+ }
18
+ function Failure({ failed, label }) {
19
+ return failed ? _jsx(Text, { accessibilityRole: "alert", accessibilityLiveRegion: "assertive", tone: "danger", align: "center", children: label }) : null;
20
+ }
21
+ export function SplitAction(props) {
22
+ const mode = resolveTaskChoice(props.modes, props.modeId), action = useCompositionAction(props.disabled);
23
+ const locked = props.disabled === true || action.pending;
24
+ return _jsxs(Stack, { gap: "sm", children: [_jsxs(Stack, { axis: "inline", gap: "xs", wrap: true, children: [_jsx(Button, { loading: action.pending, disabled: props.disabled === true || mode.disabled === true, onPress: () => { if (!mode.disabled)
25
+ void action.run(mode.id, () => props.onExecute(mode.id)); }, children: props.executeLabel(mode) }), _jsx(ChoiceMenu, { choices: props.modes, selectedId: mode.id, label: props.menuLabel, dismissLabel: props.dismissLabel, disabled: locked, onChoose: id => { if (!locked && !resolveTaskChoice(props.modes, id).disabled)
26
+ props.onModeChange(id); } })] }), _jsx(Failure, { failed: action.failed, label: props.errorLabel })] });
27
+ }
28
+ export function AccountSwitcher(props) {
29
+ const account = resolveTaskChoice(props.accounts, props.accountId), action = useCompositionAction(props.disabled);
30
+ const locked = props.disabled === true || action.pending;
31
+ // The controlled account stays confirmed until the product completes the session change.
32
+ return _jsxs(Stack, { gap: "sm", children: [_jsx(Text, { emphasis: "strong", children: account.label }), _jsx(ChoiceMenu, { choices: props.accounts, selectedId: account.id, label: props.label, dismissLabel: props.dismissLabel, disabled: locked, pending: action.pending, onChoose: id => { if (id !== account.id && !resolveTaskChoice(props.accounts, id).disabled)
33
+ void action.run(id, () => props.onSwitch(id)); } }), _jsx(Failure, { failed: action.failed, label: props.errorLabel })] });
34
+ }
35
+ export function PasswordRulesField({ rules, progressLabel, summaryLabel, ruleLabel, ...field }) {
36
+ const state = resolvePasswordRules(field.value, rules);
37
+ return _jsxs(Stack, { gap: "sm", children: [_jsx(PasswordField, { ...field }), _jsx(Progress, { label: progressLabel, value: state.satisfied, max: state.total, valueText: summaryLabel(state.satisfied, state.total) }), state.rules.map(rule => _jsx(Text, { variant: "caption", tone: rule.satisfied ? "primary" : "muted", children: ruleLabel(rule) }, rule.id))] });
38
+ }
39
+ export function PricingChoice(props) {
40
+ const option = resolvePriceOption(props.options, props.selectedId), action = useCompositionAction(props.disabled);
41
+ const locked = props.disabled === true || action.pending;
42
+ return _jsx(Card, { title: props.label, children: _jsxs(Stack, { gap: "md", children: [_jsx(RadioGroup, { accessibilityLabel: props.label, presentation: "card", value: option.id, disabled: locked, items: props.options.map(price => ({ value: price.id, label: price.label, description: props.formatPrice(price), disabled: price.disabled === true })), onValueChange: id => { if (id !== null && !locked && !resolveTaskChoice(props.options, id).disabled)
43
+ props.onSelectionChange(id); } }), _jsx(Text, { emphasis: "strong", children: props.formatPrice(option) }), option.benefits.map((benefit, index) => _jsx(Text, { children: benefit }, index)), _jsx(Button, { loading: action.pending, disabled: props.disabled === true || option.disabled === true, onPress: () => { if (!option.disabled)
44
+ void action.run(option.id, () => props.onContinue(Object.freeze({ ...option, benefits: Object.freeze([...option.benefits]) }))); }, children: props.continueLabel }), _jsx(Failure, { failed: action.failed, label: props.errorLabel })] }) });
45
+ }
46
+ //# sourceMappingURL=task-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-controls.js","sourceRoot":"","sources":["../src/task-controls.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ReactNode } from "react";
2
+ import { type ToggleFeedbackEffect, type ToggleFeedbackState } from "@hjmds/design-contracts/toggle-feedback";
3
+ export type ToggleFeedbackButtonProps = Readonly<{
4
+ entityId: string;
5
+ state: ToggleFeedbackState;
6
+ effect: ToggleFeedbackEffect;
7
+ locale: string;
8
+ icon?: ReactNode;
9
+ renderIcon?: (state: Readonly<{
10
+ selected: boolean;
11
+ pending: boolean;
12
+ }>) => ReactNode;
13
+ labels: Readonly<{
14
+ select: string;
15
+ selected: string;
16
+ pending: string;
17
+ count: string;
18
+ error: string;
19
+ }>;
20
+ /** Update confirmed state from the real API snapshot before resolving. */
21
+ onSelectedChange: (selected: boolean) => void | Promise<void>;
22
+ disabled?: boolean;
23
+ active?: boolean;
24
+ }>;
25
+ export declare function ToggleFeedbackButton(props: ToggleFeedbackButtonProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=toggle-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-feedback.d.ts","sourceRoot":"","sources":["../src/toggle-feedback.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvF,OAAO,EAAwG,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AA0BpN,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC7G,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,SAAS,CAAC;IACrF,MAAM,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtG,0EAA0E;IAC1E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CACrG,CAAC,CAAC;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,+BAGpE"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { Animated, AppState, View } from "react-native";
4
+ import Svg, { Circle, Path } from "react-native-svg";
5
+ import { resolveToggleFeedbackProposal, resolveToggleFeedbackFrame, toggleFeedbackPaths, toggleFeedbackRecipe } from "@hjmds/design-contracts/toggle-feedback";
6
+ import { Button } from "./actions.js";
7
+ import { AnimatedStatistic } from "./statistic-motion.js";
8
+ import { Stack, Text } from "./primitives.js";
9
+ import { useHjmNativeTheme } from "./provider.js";
10
+ import { useCompositionAction } from "./internal/use-composition-action.js";
11
+ function FeedbackGlyph({ effect, selected, active, icon }) {
12
+ const glyph = useRef(null), circle = useRef(null), rays = useRef(null), previous = useRef(selected);
13
+ const [value] = useState(() => new Animated.Value(1));
14
+ const theme = useHjmNativeTheme(), reduced = theme.environment.reducedMotion;
15
+ useEffect(() => {
16
+ const entering = selected && !previous.current;
17
+ previous.current = selected;
18
+ const draw = (p) => { const f = resolveToggleFeedbackFrame(effect, p); glyph.current?.setNativeProps?.({ style: { transform: [{ translateY: f.translateY }, { scale: f.scale }] } }); circle.current?.setNativeProps?.({ r: f.radius, opacity: effect === "ripple" ? f.opacity : 0 }); rays.current?.setNativeProps?.({ d: f.rays, opacity: effect === "burst" ? f.opacity : 0 }); };
19
+ const listener = value.addListener(({ value: p }) => draw(p));
20
+ const settle = () => { value.stopAnimation(); value.setValue(1); draw(1); };
21
+ // SVG geometry cannot use the native driver. Only host props change on each frame.
22
+ if (!entering || reduced || !active || AppState.currentState !== "active")
23
+ settle();
24
+ else {
25
+ value.setValue(0);
26
+ Animated.timing(value, { toValue: 1, duration: toggleFeedbackRecipe.duration, useNativeDriver: false }).start();
27
+ }
28
+ const app = AppState.addEventListener("change", state => { if (state !== "active")
29
+ settle(); });
30
+ return () => { value.stopAnimation(); value.removeListener(listener); app.remove(); };
31
+ }, [selected, effect, active, reduced, value]);
32
+ const f = resolveToggleFeedbackFrame(effect, 1);
33
+ return _jsxs(View, { accessible: false, accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: { position: "relative", width: toggleFeedbackRecipe.glyphSize, height: toggleFeedbackRecipe.glyphSize }, children: [_jsx(View, { ref: glyph, children: icon ?? _jsx(Svg, { width: 24, height: 24, viewBox: "0 0 24 24", children: _jsx(Path, { d: toggleFeedbackPaths[effect], fill: selected ? theme.colors.contentBrand : "none", stroke: theme.colors.contentBrand, strokeWidth: 1.7, strokeLinejoin: "round" }) }) }), _jsxs(Svg, { pointerEvents: "none", width: 40, height: 40, viewBox: "0 0 40 40", style: { position: "absolute", left: -8, top: -8 }, fill: "none", stroke: theme.colors.contentBrand, strokeWidth: 1.7, children: [_jsx(Circle, { ref: circle, cx: 20, cy: 20, r: f.radius, opacity: 0 }), _jsx(Path, { ref: rays, d: f.rays, opacity: 0, strokeLinecap: "round" })] })] });
34
+ }
35
+ export function ToggleFeedbackButton(props) {
36
+ if (!props.entityId.trim())
37
+ throw new TypeError("Toggle feedback requires a stable entity id");
38
+ return _jsx(ToggleFeedbackBody, { ...props }, props.entityId);
39
+ }
40
+ function ToggleFeedbackBody(props) {
41
+ resolveToggleFeedbackProposal(props.state, props.state.selected);
42
+ const active = props.active !== false, action = useCompositionAction(props.disabled === true || !active), state = action.active ?? props.state;
43
+ const icon = props.renderIcon ? props.renderIcon({ selected: state.selected, pending: action.pending }) : props.icon;
44
+ return _jsxs(Stack, { gap: "sm", children: [_jsxs(Stack, { axis: "inline", gap: "md", align: "center", wrap: true, children: [_jsx(Button, { tone: "secondary", selected: state.selected, loading: action.pending, loadingLabel: props.labels.pending, disabled: props.disabled === true || !active, leading: _jsx(FeedbackGlyph, { effect: props.effect, selected: state.selected, active: active, ...(icon === undefined ? {} : { icon }) }), onPress: () => { const proposal = resolveToggleFeedbackProposal(props.state, !props.state.selected); void action.run(proposal, () => props.onSelectedChange(proposal.selected)); }, children: state.selected ? props.labels.selected : props.labels.select }), _jsx(AnimatedStatistic, { density: "compact", descriptor: { id: "selection-count", label: props.labels.count }, value: state.count, locale: props.locale, animated: active })] }), action.failed ? _jsx(Text, { accessibilityRole: "alert", accessibilityLiveRegion: "assertive", tone: "danger", align: "center", children: props.labels.error }) : null] });
45
+ }
46
+ //# sourceMappingURL=toggle-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-feedback.js","sourceRoot":"","sources":["../src/toggle-feedback.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type TransferObservation, type TransferContext } from "@hjmds/design-contracts/transfer-task";
2
+ export type TransferTaskProps = Readonly<{
3
+ onTransfer: (context: TransferContext) => Promise<void>;
4
+ labels: Readonly<{
5
+ start: string;
6
+ queued: string;
7
+ transferring: string;
8
+ cancel: string;
9
+ cancelling: string;
10
+ cancelled: string;
11
+ success: string;
12
+ error: string;
13
+ }>;
14
+ formatProgress: (observation: TransferObservation) => string;
15
+ disabled?: boolean;
16
+ }>;
17
+ export declare function TransferTask(props: TransferTaskProps): import("react").JSX.Element;
18
+ //# sourceMappingURL=transfer-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-task.d.ts","sourceRoot":"","sources":["../src/transfer-task.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwD,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAK7J,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,UAAU,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjK,cAAc,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAClF,CAAC,CAAC;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAmCpD"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { isConfirmedTransferAbort, resolveTransferObservation } from "@hjmds/design-contracts/transfer-task";
5
+ import { Button } from "./actions.js";
6
+ import { Progress } from "./feedback.js";
7
+ import { Stack, Text } from "./primitives.js";
8
+ import { useCompositionAction } from "./internal/use-composition-action.js";
9
+ export function TransferTask(props) {
10
+ const action = useCompositionAction(props.disabled), mounted = useRef(true), disabled = useRef(props.disabled);
11
+ disabled.current = props.disabled;
12
+ const request = useRef(null), latest = useRef(null);
13
+ const [observation, setObservation] = useState(null), [cancelRequested, setCancelRequested] = useState(false), [cancelled, setCancelled] = useState(false);
14
+ useEffect(() => { mounted.current = true; return () => { mounted.current = false; request.current?.abort(); request.current = null; }; }, []);
15
+ const start = () => {
16
+ if (!mounted.current || disabled.current || request.current)
17
+ return;
18
+ const controller = new AbortController();
19
+ let accepting = true;
20
+ request.current = controller;
21
+ latest.current = null;
22
+ setObservation(null);
23
+ setCancelled(false);
24
+ setCancelRequested(false);
25
+ void action.run("transfer", async () => {
26
+ try {
27
+ await props.onTransfer({ signal: controller.signal, report: next => {
28
+ if (!accepting || !mounted.current || request.current !== controller || controller.signal.aborted)
29
+ return;
30
+ const value = resolveTransferObservation(next, latest.current);
31
+ latest.current = value;
32
+ setObservation(value);
33
+ } });
34
+ }
35
+ catch (error) {
36
+ if (mounted.current && request.current === controller && isConfirmedTransferAbort(error, controller.signal))
37
+ setCancelled(true);
38
+ throw error;
39
+ }
40
+ finally {
41
+ accepting = false;
42
+ }
43
+ }).then(() => { if (request.current === controller)
44
+ request.current = null; });
45
+ };
46
+ const cancel = () => { if (mounted.current && !disabled.current && request.current && !request.current.signal.aborted) {
47
+ setCancelRequested(true);
48
+ request.current.abort();
49
+ } };
50
+ const phase = action.session.getSnapshot().status;
51
+ const status = action.pending ? cancelRequested ? props.labels.cancelling : observation ? props.labels.transferring : props.labels.queued
52
+ : cancelled ? props.labels.cancelled : phase === "success" ? props.labels.success : action.failed ? props.labels.error : null;
53
+ const known = observation !== null && observation.total !== null;
54
+ return _jsxs(Stack, { gap: "md", children: [_jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [_jsx(Button, { loading: action.pending, disabled: props.disabled === true, onPress: start, children: props.labels.start }), action.pending ? _jsx(Button, { tone: "secondary", disabled: props.disabled === true || cancelRequested, onPress: cancel, children: props.labels.cancel }) : null] }), action.pending || known ? _jsx(Progress, { label: status ?? props.labels.transferring, ...(known ? { value: observation.completed, max: observation.total } : {}), ...(observation ? { valueText: props.formatProgress(observation) } : {}) }) : null, observation && !action.pending && !known ? _jsx(Text, { variant: "caption", children: props.formatProgress(observation) }) : null, status && !action.pending ? _jsx(Text, { accessibilityRole: action.failed && !cancelled ? "alert" : "text", accessibilityLiveRegion: "polite", align: "center", tone: action.failed && !cancelled ? "danger" : "primary", children: status }) : null] });
55
+ }
56
+ //# sourceMappingURL=transfer-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-task.js","sourceRoot":"","sources":["../src/transfer-task.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hjmds/react-native",
3
- "version": "1.19.0",
3
+ "version": "1.21.0",
4
4
  "description": "Expo-independent React Native renderers for HJM design contracts.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -418,6 +418,18 @@
418
418
  "import": "./dist/activity-heatmap.js",
419
419
  "default": "./dist/activity-heatmap.js"
420
420
  },
421
+ "./chart": {
422
+ "types": "./dist/chart.d.ts",
423
+ "react-native": "./dist/chart.js",
424
+ "import": "./dist/chart.js",
425
+ "default": "./dist/chart.js"
426
+ },
427
+ "./data-table": {
428
+ "types": "./dist/data-table.d.ts",
429
+ "react-native": "./dist/data-table.js",
430
+ "import": "./dist/data-table.js",
431
+ "default": "./dist/data-table.js"
432
+ },
421
433
  "./statistic-motion": {
422
434
  "types": "./dist/statistic-motion.d.ts",
423
435
  "react-native": "./dist/statistic-motion.js",
@@ -531,6 +543,66 @@
531
543
  "react-native": "./dist/activity-chip.js",
532
544
  "import": "./dist/activity-chip.js",
533
545
  "default": "./dist/activity-chip.js"
546
+ },
547
+ "./collection-editing": {
548
+ "types": "./dist/collection-editing.d.ts",
549
+ "react-native": "./dist/collection-editing.js",
550
+ "import": "./dist/collection-editing.js",
551
+ "default": "./dist/collection-editing.js"
552
+ },
553
+ "./data-workflows": {
554
+ "types": "./dist/data-workflows.d.ts",
555
+ "react-native": "./dist/data-workflows.js",
556
+ "import": "./dist/data-workflows.js",
557
+ "default": "./dist/data-workflows.js"
558
+ },
559
+ "./task-controls": {
560
+ "types": "./dist/task-controls.d.ts",
561
+ "react-native": "./dist/task-controls.js",
562
+ "import": "./dist/task-controls.js",
563
+ "default": "./dist/task-controls.js"
564
+ },
565
+ "./media-transport": {
566
+ "types": "./dist/media-transport.d.ts",
567
+ "react-native": "./dist/media-transport.js",
568
+ "import": "./dist/media-transport.js",
569
+ "default": "./dist/media-transport.js"
570
+ },
571
+ "./transfer-task": {
572
+ "types": "./dist/transfer-task.d.ts",
573
+ "react-native": "./dist/transfer-task.js",
574
+ "import": "./dist/transfer-task.js",
575
+ "default": "./dist/transfer-task.js"
576
+ },
577
+ "./authoring-tools": {
578
+ "types": "./dist/authoring-tools.d.ts",
579
+ "react-native": "./dist/authoring-tools.js",
580
+ "import": "./dist/authoring-tools.js",
581
+ "default": "./dist/authoring-tools.js"
582
+ },
583
+ "./social-compositions": {
584
+ "types": "./dist/social-compositions.d.ts",
585
+ "react-native": "./dist/social-compositions.js",
586
+ "import": "./dist/social-compositions.js",
587
+ "default": "./dist/social-compositions.js"
588
+ },
589
+ "./communication": {
590
+ "types": "./dist/communication.d.ts",
591
+ "react-native": "./dist/communication.js",
592
+ "import": "./dist/communication.js",
593
+ "default": "./dist/communication.js"
594
+ },
595
+ "./toggle-feedback": {
596
+ "types": "./dist/toggle-feedback.d.ts",
597
+ "react-native": "./dist/toggle-feedback.js",
598
+ "import": "./dist/toggle-feedback.js",
599
+ "default": "./dist/toggle-feedback.js"
600
+ },
601
+ "./streaming-answer": {
602
+ "types": "./dist/streaming-answer.d.ts",
603
+ "react-native": "./dist/streaming-answer.js",
604
+ "import": "./dist/streaming-answer.js",
605
+ "default": "./dist/streaming-answer.js"
534
606
  }
535
607
  },
536
608
  "files": [
@@ -542,7 +614,7 @@
542
614
  ],
543
615
  "peerDependencies": {
544
616
  "@gorhom/bottom-sheet": "5.2.14",
545
- "@hjmds/design-contracts": ">=1.19.0 <1.20.0",
617
+ "@hjmds/design-contracts": ">=1.21.0 <1.22.0",
546
618
  "@react-native-menu/menu": "1.2.2",
547
619
  "@shopify/react-native-skia": "^2.6.2",
548
620
  "react": ">=19",
@@ -601,7 +673,7 @@
601
673
  "blobatar": "2.7.0",
602
674
  "@blobatar/react-native": "2.7.0",
603
675
  "lucide-react-native": "1.49.0",
604
- "@hjmds/design-contracts": "1.19.0"
676
+ "@hjmds/design-contracts": "1.21.0"
605
677
  },
606
678
  "engines": {
607
679
  "node": ">=20"