@hjmds/react 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.
- package/dist/actions.d.ts +10 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +9 -3
- package/dist/actions.js.map +1 -1
- package/dist/authoring-tools.d.ts +38 -0
- package/dist/authoring-tools.d.ts.map +1 -0
- package/dist/authoring-tools.js +65 -0
- package/dist/authoring-tools.js.map +1 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +1 -1
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +1 -0
- package/dist/calendar.js.map +1 -1
- package/dist/chart.d.ts +157 -0
- package/dist/chart.d.ts.map +1 -0
- package/dist/chart.js +467 -0
- package/dist/chart.js.map +1 -0
- package/dist/collection-editing.d.ts +66 -0
- package/dist/collection-editing.d.ts.map +1 -0
- package/dist/collection-editing.js +126 -0
- package/dist/collection-editing.js.map +1 -0
- package/dist/communication.d.ts +51 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +71 -0
- package/dist/communication.js.map +1 -0
- package/dist/data-table.d.ts +21 -1
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +105 -10
- package/dist/data-table.js.map +1 -1
- package/dist/data-workflows.d.ts +67 -0
- package/dist/data-workflows.d.ts.map +1 -0
- package/dist/data-workflows.js +60 -0
- package/dist/data-workflows.js.map +1 -0
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/internal/use-composition-action.d.ts +17 -0
- package/dist/internal/use-composition-action.d.ts.map +1 -0
- package/dist/internal/use-composition-action.js +18 -0
- package/dist/internal/use-composition-action.js.map +1 -0
- package/dist/media-transport.d.ts +22 -0
- package/dist/media-transport.d.ts.map +1 -0
- package/dist/media-transport.js +50 -0
- package/dist/media-transport.js.map +1 -0
- package/dist/navigation.d.ts +3 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +29 -5
- package/dist/navigation.js.map +1 -1
- package/dist/screen-flows.d.ts +1 -1
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +1 -1
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +8 -2
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +11 -5
- package/dist/screens.js.map +1 -1
- package/dist/social-compositions.d.ts +52 -0
- package/dist/social-compositions.d.ts.map +1 -0
- package/dist/social-compositions.js +41 -0
- package/dist/social-compositions.js.map +1 -0
- package/dist/streaming-answer.d.ts +24 -0
- package/dist/streaming-answer.d.ts.map +1 -0
- package/dist/streaming-answer.js +57 -0
- package/dist/streaming-answer.js.map +1 -0
- package/dist/styles.css +149 -1
- package/dist/styles.layered.css +149 -1
- package/dist/table-family.d.ts +66 -0
- package/dist/table-family.d.ts.map +1 -0
- package/dist/table-family.js +75 -0
- package/dist/table-family.js.map +1 -0
- package/dist/task-controls.d.ts +47 -0
- package/dist/task-controls.d.ts.map +1 -0
- package/dist/task-controls.js +46 -0
- package/dist/task-controls.js.map +1 -0
- package/dist/toggle-feedback.d.ts +26 -0
- package/dist/toggle-feedback.d.ts.map +1 -0
- package/dist/toggle-feedback.js +47 -0
- package/dist/toggle-feedback.js.map +1 -0
- package/dist/transfer-task.d.ts +18 -0
- package/dist/transfer-task.d.ts.map +1 -0
- package/dist/transfer-task.js +56 -0
- package/dist/transfer-task.js.map +1 -0
- package/package.json +58 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-feedback.js","sourceRoot":"","sources":["../src/toggle-feedback.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport { useEffect, useRef, type ReactNode } from \"react\";\nimport { resolveToggleFeedbackProposal, resolveToggleFeedbackFrame, toggleFeedbackPaths, toggleFeedbackRecipe, type ToggleFeedbackEffect, type ToggleFeedbackState } from \"@hjmds/design-contracts/toggle-feedback\";\nimport { Button } from \"./actions.js\";\nimport { AnimatedStatistic } from \"./statistic-motion.js\";\nimport { Stack, Text } from \"./layout.js\";\nimport { useHjmTheme } from \"./provider.js\";\nimport { useCompositionAction } from \"./internal/use-composition-action.js\";\nfunction FeedbackGlyph({ effect, selected, active, icon }: Readonly<{ effect: ToggleFeedbackEffect; selected: boolean; active: boolean; icon?: ReactNode }>) {\n const glyph = useRef<HTMLSpanElement>(null), circle = useRef<SVGCircleElement>(null), rays = useRef<SVGPathElement>(null), previous = useRef(selected);\n const reduced = useHjmTheme().environment.reducedMotion;\n useEffect(() => {\n const entering = selected && !previous.current; previous.current = selected;\n let frame = 0, start: number | undefined;\n const draw = (p: number) => { const f = resolveToggleFeedbackFrame(effect, p); glyph.current?.style.setProperty(\"transform\", `translateY(${f.translateY}px) scale(${f.scale})`); circle.current?.setAttribute(\"r\", String(f.radius)); circle.current?.setAttribute(\"opacity\", effect === \"ripple\" ? String(f.opacity) : \"0\"); rays.current?.setAttribute(\"d\", f.rays); rays.current?.setAttribute(\"opacity\", effect === \"burst\" ? String(f.opacity) : \"0\"); };\n const settle = () => { cancelAnimationFrame(frame); draw(1); };\n const animate = (now: number) => { start ??= now; const p = Math.min(1, (now - start) / toggleFeedbackRecipe.duration); draw(p); if (p < 1) frame = requestAnimationFrame(animate); };\n // The old selected state consumes the event; environment changes never replay it.\n if (!entering || reduced || !active || document.hidden) settle(); else { draw(0); frame = requestAnimationFrame(animate); }\n const visibility = () => { if (document.hidden) settle(); }; document.addEventListener(\"visibilitychange\", visibility);\n return () => { cancelAnimationFrame(frame); document.removeEventListener(\"visibilitychange\", visibility); };\n }, [selected, effect, active, reduced]);\n const f = resolveToggleFeedbackFrame(effect, 1);\n return <span aria-hidden=\"true\" style={{ position: \"relative\", display: \"inline-flex\", width: toggleFeedbackRecipe.glyphSize, height: toggleFeedbackRecipe.glyphSize }}>\n <span ref={glyph} style={{ display: \"inline-flex\" }}>{icon ?? <svg width={24} height={24} viewBox=\"0 0 24 24\" focusable=\"false\"><path d={toggleFeedbackPaths[effect]} fill={selected ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth={1.7} strokeLinejoin=\"round\" /></svg>}</span>\n <svg data-toggle-effect={effect} width={40} height={40} viewBox=\"0 0 40 40\" focusable=\"false\" style={{ position: \"absolute\", left: -8, top: -8, pointerEvents: \"none\" }} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.7}><circle ref={circle} cx={20} cy={20} r={f.radius} opacity={0} /><path ref={rays} d={f.rays} opacity={0} strokeLinecap=\"round\" /></svg>\n </span>;\n}\nexport type ToggleFeedbackButtonProps = Readonly<{\n entityId: string; state: ToggleFeedbackState; effect: ToggleFeedbackEffect; locale: string; icon?: ReactNode;\n renderIcon?: (state: Readonly<{ selected: boolean; pending: boolean }>) => ReactNode;\n labels: Readonly<{ select: string; selected: string; pending: string; count: string; error: string }>;\n /** Update confirmed state from the real API snapshot before resolving. */\n onSelectedChange: (selected: boolean) => void | Promise<void>; disabled?: boolean; active?: boolean;\n}>;\nexport function ToggleFeedbackButton(props: ToggleFeedbackButtonProps) {\n if (!props.entityId.trim()) throw new TypeError(\"Toggle feedback requires a stable entity id\");\n return <ToggleFeedbackBody key={props.entityId} {...props} />;\n}\nfunction ToggleFeedbackBody(props: ToggleFeedbackButtonProps) {\n resolveToggleFeedbackProposal(props.state, props.state.selected);\n const active = props.active !== false, action = useCompositionAction<ToggleFeedbackState>(props.disabled === true || !active), state = action.active ?? props.state;\n const icon = props.renderIcon ? props.renderIcon({ selected: state.selected, pending: action.pending }) : props.icon;\n return <Stack gap=\"sm\"><Stack axis=\"inline\" gap=\"md\" align=\"center\" wrap>\n <Button tone=\"secondary\" selected={state.selected} loading={action.pending} disabled={props.disabled === true || !active} aria-label={action.pending ? props.labels.pending : undefined}\n leading={<FeedbackGlyph effect={props.effect} selected={state.selected} active={active} {...(icon === undefined ? {} : { icon })} />}\n onClick={() => { const proposal = resolveToggleFeedbackProposal(props.state, !props.state.selected); void action.run(proposal, () => props.onSelectedChange(proposal.selected)); }}>{state.selected ? props.labels.selected : props.labels.select}</Button>\n <AnimatedStatistic density=\"compact\" descriptor={{ id: \"selection-count\", label: props.labels.count }} value={state.count} locale={props.locale} animated={active} />\n </Stack>{action.failed ? <Text role=\"alert\" tone=\"danger\" style={{ textAlign: \"center\" }}>{props.labels.error}</Text> : null}</Stack>;\n}\n"]}
|
|
@@ -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 "./layout.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, onClick: start, children: props.labels.start }), action.pending ? _jsx(Button, { tone: "secondary", disabled: props.disabled === true || cancelRequested, onClick: 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, { role: action.failed && !cancelled ? "alert" : "status", style: { textAlign: "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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","sourcesContent":["\"use client\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { isConfirmedTransferAbort, resolveTransferObservation, type TransferObservation, type TransferContext } from \"@hjmds/design-contracts/transfer-task\";\nimport { Button } from \"./actions.js\";\nimport { Progress } from \"./feedback.js\";\nimport { Stack, Text } from \"./layout.js\";\nimport { useCompositionAction } from \"./internal/use-composition-action.js\";\nexport type TransferTaskProps = Readonly<{\n onTransfer: (context: TransferContext) => Promise<void>;\n labels: Readonly<{ start: string; queued: string; transferring: string; cancel: string; cancelling: string; cancelled: string; success: string; error: string }>;\n formatProgress: (observation: TransferObservation) => string; disabled?: boolean;\n}>;\nexport function TransferTask(props: TransferTaskProps) {\n const action = useCompositionAction(props.disabled), mounted = useRef(true), disabled = useRef(props.disabled);\n disabled.current = props.disabled;\n const request = useRef<AbortController | null>(null), latest = useRef<TransferObservation | null>(null);\n const [observation, setObservation] = useState<TransferObservation | null>(null), [cancelRequested, setCancelRequested] = useState(false), [cancelled, setCancelled] = useState(false);\n useEffect(() => { mounted.current = true; return () => { mounted.current = false; request.current?.abort(); request.current = null; }; }, []);\n const start = () => {\n if (!mounted.current || disabled.current || request.current) return;\n const controller = new AbortController(); let accepting = true; request.current = controller; latest.current = null;\n setObservation(null); setCancelled(false); setCancelRequested(false);\n void action.run(\"transfer\", async () => {\n try {\n await props.onTransfer({ signal: controller.signal, report: next => {\n if (!accepting || !mounted.current || request.current !== controller || controller.signal.aborted) return;\n const value = resolveTransferObservation(next, latest.current); latest.current = value; setObservation(value);\n } });\n } catch (error) {\n if (mounted.current && request.current === controller && isConfirmedTransferAbort(error, controller.signal)) setCancelled(true);\n throw error;\n } finally { accepting = false; }\n }).then(() => { if (request.current === controller) request.current = null; });\n };\n const cancel = () => { if (mounted.current && !disabled.current && request.current && !request.current.signal.aborted) { setCancelRequested(true); request.current.abort(); } };\n const phase = action.session.getSnapshot().status;\n const status = action.pending ? cancelRequested ? props.labels.cancelling : observation ? props.labels.transferring : props.labels.queued\n : cancelled ? props.labels.cancelled : phase === \"success\" ? props.labels.success : action.failed ? props.labels.error : null;\n const known = observation !== null && observation.total !== null;\n return <Stack gap=\"md\"><Stack axis=\"inline\" gap=\"sm\" wrap>\n <Button loading={action.pending} disabled={props.disabled === true} onClick={start}>{props.labels.start}</Button>\n {action.pending ? <Button tone=\"secondary\" disabled={props.disabled === true || cancelRequested} onClick={cancel}>{props.labels.cancel}</Button> : null}</Stack>\n {action.pending || known ? <Progress label={status ?? props.labels.transferring} {...(known ? { value: observation.completed, max: observation.total! } : {})}\n {...(observation ? { valueText: props.formatProgress(observation) } : {})} /> : null}\n {observation && !action.pending && !known ? <Text variant=\"caption\">{props.formatProgress(observation)}</Text> : null}\n {status && !action.pending ? <Text role={action.failed && !cancelled ? \"alert\" : \"status\"} style={{ textAlign: \"center\" }} tone={action.failed && !cancelled ? \"danger\" : \"primary\"}>{status}</Text> : null}\n </Stack>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "Accessible React 19 renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -522,6 +522,61 @@
|
|
|
522
522
|
"types": "./dist/activity-chip.d.ts",
|
|
523
523
|
"import": "./dist/activity-chip.js",
|
|
524
524
|
"default": "./dist/activity-chip.js"
|
|
525
|
+
},
|
|
526
|
+
"./chart": {
|
|
527
|
+
"types": "./dist/chart.d.ts",
|
|
528
|
+
"import": "./dist/chart.js",
|
|
529
|
+
"default": "./dist/chart.js"
|
|
530
|
+
},
|
|
531
|
+
"./collection-editing": {
|
|
532
|
+
"types": "./dist/collection-editing.d.ts",
|
|
533
|
+
"import": "./dist/collection-editing.js",
|
|
534
|
+
"default": "./dist/collection-editing.js"
|
|
535
|
+
},
|
|
536
|
+
"./data-workflows": {
|
|
537
|
+
"types": "./dist/data-workflows.d.ts",
|
|
538
|
+
"import": "./dist/data-workflows.js",
|
|
539
|
+
"default": "./dist/data-workflows.js"
|
|
540
|
+
},
|
|
541
|
+
"./task-controls": {
|
|
542
|
+
"types": "./dist/task-controls.d.ts",
|
|
543
|
+
"import": "./dist/task-controls.js",
|
|
544
|
+
"default": "./dist/task-controls.js"
|
|
545
|
+
},
|
|
546
|
+
"./media-transport": {
|
|
547
|
+
"types": "./dist/media-transport.d.ts",
|
|
548
|
+
"import": "./dist/media-transport.js",
|
|
549
|
+
"default": "./dist/media-transport.js"
|
|
550
|
+
},
|
|
551
|
+
"./transfer-task": {
|
|
552
|
+
"types": "./dist/transfer-task.d.ts",
|
|
553
|
+
"import": "./dist/transfer-task.js",
|
|
554
|
+
"default": "./dist/transfer-task.js"
|
|
555
|
+
},
|
|
556
|
+
"./authoring-tools": {
|
|
557
|
+
"types": "./dist/authoring-tools.d.ts",
|
|
558
|
+
"import": "./dist/authoring-tools.js",
|
|
559
|
+
"default": "./dist/authoring-tools.js"
|
|
560
|
+
},
|
|
561
|
+
"./social-compositions": {
|
|
562
|
+
"types": "./dist/social-compositions.d.ts",
|
|
563
|
+
"import": "./dist/social-compositions.js",
|
|
564
|
+
"default": "./dist/social-compositions.js"
|
|
565
|
+
},
|
|
566
|
+
"./communication": {
|
|
567
|
+
"types": "./dist/communication.d.ts",
|
|
568
|
+
"import": "./dist/communication.js",
|
|
569
|
+
"default": "./dist/communication.js"
|
|
570
|
+
},
|
|
571
|
+
"./toggle-feedback": {
|
|
572
|
+
"types": "./dist/toggle-feedback.d.ts",
|
|
573
|
+
"import": "./dist/toggle-feedback.js",
|
|
574
|
+
"default": "./dist/toggle-feedback.js"
|
|
575
|
+
},
|
|
576
|
+
"./streaming-answer": {
|
|
577
|
+
"types": "./dist/streaming-answer.d.ts",
|
|
578
|
+
"import": "./dist/streaming-answer.js",
|
|
579
|
+
"default": "./dist/streaming-answer.js"
|
|
525
580
|
}
|
|
526
581
|
},
|
|
527
582
|
"files": [
|
|
@@ -531,7 +586,7 @@
|
|
|
531
586
|
"THIRD_PARTY_NOTICES.md"
|
|
532
587
|
],
|
|
533
588
|
"peerDependencies": {
|
|
534
|
-
"@hjmds/design-contracts": ">=1.
|
|
589
|
+
"@hjmds/design-contracts": ">=1.21.0 <1.22.0",
|
|
535
590
|
"react": ">=19.0.0",
|
|
536
591
|
"react-dom": ">=19.0.0",
|
|
537
592
|
"@number-flow/react": "0.6.2",
|
|
@@ -568,7 +623,7 @@
|
|
|
568
623
|
"blobatar": "2.7.0",
|
|
569
624
|
"@blobatar/react": "2.7.0",
|
|
570
625
|
"lucide-react": "1.49.0",
|
|
571
|
-
"@hjmds/design-contracts": "1.
|
|
626
|
+
"@hjmds/design-contracts": "1.21.0"
|
|
572
627
|
},
|
|
573
628
|
"peerDependenciesMeta": {
|
|
574
629
|
"@number-flow/react": {
|