@cardano-slips/flow 0.2.0 → 0.3.1

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 (73) hide show
  1. package/README.md +53 -9
  2. package/dist/address.d.ts +12 -0
  3. package/dist/address.d.ts.map +1 -1
  4. package/dist/address.js +43 -0
  5. package/dist/address.js.map +1 -1
  6. package/dist/card.css +492 -0
  7. package/dist/card.d.ts +41 -0
  8. package/dist/card.d.ts.map +1 -0
  9. package/dist/card.js +69 -0
  10. package/dist/card.js.map +1 -0
  11. package/dist/complete-error.d.ts +8 -1
  12. package/dist/complete-error.d.ts.map +1 -1
  13. package/dist/complete-error.js +6 -1
  14. package/dist/complete-error.js.map +1 -1
  15. package/dist/complete.d.ts +29 -10
  16. package/dist/complete.d.ts.map +1 -1
  17. package/dist/complete.js +83 -9
  18. package/dist/complete.js.map +1 -1
  19. package/dist/derived.d.ts +8 -0
  20. package/dist/derived.d.ts.map +1 -0
  21. package/dist/derived.js +2 -0
  22. package/dist/derived.js.map +1 -0
  23. package/dist/effects-panel.d.ts +37 -0
  24. package/dist/effects-panel.d.ts.map +1 -0
  25. package/dist/effects-panel.js +64 -0
  26. package/dist/effects-panel.js.map +1 -0
  27. package/dist/effects.css +629 -0
  28. package/dist/exchange.d.ts +54 -0
  29. package/dist/exchange.d.ts.map +1 -0
  30. package/dist/exchange.js +136 -0
  31. package/dist/exchange.js.map +1 -0
  32. package/dist/explain.d.ts +39 -0
  33. package/dist/explain.d.ts.map +1 -0
  34. package/dist/explain.js +172 -0
  35. package/dist/explain.js.map +1 -0
  36. package/dist/index.d.ts +19 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +9 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/ledger.d.ts +74 -0
  41. package/dist/ledger.d.ts.map +1 -0
  42. package/dist/ledger.js +402 -0
  43. package/dist/ledger.js.map +1 -0
  44. package/dist/outcome-panel.d.ts +63 -0
  45. package/dist/outcome-panel.d.ts.map +1 -0
  46. package/dist/outcome-panel.js +40 -0
  47. package/dist/outcome-panel.js.map +1 -0
  48. package/dist/parameter-form.d.ts +26 -0
  49. package/dist/parameter-form.d.ts.map +1 -0
  50. package/dist/parameter-form.js +42 -0
  51. package/dist/parameter-form.js.map +1 -0
  52. package/dist/slip-card.d.ts +55 -0
  53. package/dist/slip-card.d.ts.map +1 -0
  54. package/dist/slip-card.js +89 -0
  55. package/dist/slip-card.js.map +1 -0
  56. package/dist/tokens.css +57 -32
  57. package/package.json +11 -7
  58. package/src/address.ts +53 -0
  59. package/src/card.css +492 -0
  60. package/src/card.ts +86 -0
  61. package/src/complete-error.ts +14 -2
  62. package/src/complete.ts +128 -19
  63. package/src/derived.ts +8 -0
  64. package/src/effects-panel.tsx +386 -0
  65. package/src/effects.css +629 -0
  66. package/src/exchange.ts +212 -0
  67. package/src/explain.ts +211 -0
  68. package/src/index.ts +39 -3
  69. package/src/ledger.ts +503 -0
  70. package/src/outcome-panel.tsx +263 -0
  71. package/src/parameter-form.tsx +138 -0
  72. package/src/slip-card.tsx +244 -0
  73. package/src/tokens.css +57 -32
@@ -0,0 +1,64 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useId, useState } from "react";
4
+ import { formatCountdown, secondsLeft } from "./explain.js";
5
+ import { blockedLine, evidenceOf, groupsOf, headlineOf, isCollapsed, isGrouped, ledgerOf, matchLine, rawLines } from "./ledger.js";
6
+ /** Under this, the countdown leaves the meta row and takes the headline's place (state f). */
7
+ const expiringUnder = 60;
8
+ const groupNames = {
9
+ arriving: "Arriving",
10
+ leaving: "Leaving",
11
+ unmoved: "No value moved"
12
+ };
13
+ const markWords = { "not-in-the-link": "Not in the link", "not-as-the-link-says": "Not as the link says" };
14
+ const chipWords = { refundable: "Refundable", "as-stated": "As stated" };
15
+ const useNow = (clock) => {
16
+ const [now, setNow] = useState(clock);
17
+ useEffect(() => {
18
+ const timer = setInterval(() => setNow(clock()), 1000);
19
+ return () => clearInterval(timer);
20
+ }, [clock]);
21
+ return now;
22
+ };
23
+ const LedgerRow = ({ row }) => (_jsxs("div", { className: "slip-panel__row", "data-mark": row.mark, children: [_jsxs("div", { className: "slip-panel__row-name", children: [_jsxs("div", { className: "slip-panel__row-label", children: [_jsx("span", { className: "slip-panel__label", children: row.label }), row.chip === undefined ? undefined : (_jsx("span", { className: "slip-panel__chip", "data-chip": row.chip, children: chipWords[row.chip] })), row.mark === undefined ? undefined : (_jsx("span", { className: "slip-panel__chip", "data-chip": "mark", children: markWords[row.mark] }))] }), row.detail === undefined ? undefined : _jsx("span", { className: "slip-panel__detail", children: row.detail })] }), _jsxs("div", { className: "slip-panel__amounts", children: [row.identifier === undefined ? undefined : _jsx("span", { className: "slip-panel__identifier", children: row.identifier }), row.amounts.map((amount, index) => (_jsx("span", { className: "slip-panel__amount", "data-tone": amount.tone, children: amount.text }, index)))] }), row.note === undefined ? undefined : _jsx("p", { className: "slip-panel__note", children: row.note })] }));
24
+ const Rows = ({ rows }) => (_jsx("div", { className: "slip-panel__ledger", children: rows.map((row) => (_jsx(LedgerRow, { row: row }, row.key))) }));
25
+ /**
26
+ * Past eight rows each group folds to its header and a count. A group holding
27
+ * a marked row never starts folded: the one thing the block points at is not
28
+ * something a person should have to open.
29
+ */
30
+ export const Ledger = ({ rows }) => {
31
+ if (!isGrouped(rows))
32
+ return _jsx(Rows, { rows: rows });
33
+ const collapsed = isCollapsed(rows);
34
+ return (_jsx("div", { className: "slip-panel__groups", children: groupsOf(rows).map(({ group, rows: inGroup }) => collapsed ? (_jsxs("details", { className: "slip-panel__group", open: inGroup.some((row) => row.mark !== undefined) || undefined, children: [_jsxs("summary", { className: "slip-panel__group-name", children: [groupNames[group], " \u00B7 ", inGroup.length] }), _jsx(Rows, { rows: inGroup })] }, group)) : (_jsxs("div", { className: "slip-panel__group", children: [_jsx("p", { className: "slip-panel__group-name", children: groupNames[group] }), _jsx(Rows, { rows: inGroup })] }, group))) }));
35
+ };
36
+ const Raw = ({ derived }) => (_jsx("pre", { className: "slip-panel__raw-lines", children: rawLines(derived).join("\n") }));
37
+ const Countdown = ({ seconds }) => (_jsx("span", { suppressHydrationWarning: true, children: formatCountdown(seconds) }));
38
+ const Blocked = ({ claim, description, derived, reasons, onCancel, onReport }) => {
39
+ const [rawOpen, setRawOpen] = useState(false);
40
+ const title = useId();
41
+ const rows = ledgerOf(derived, reasons);
42
+ return (_jsxs("section", { className: "slip-root slip-panel", "data-blocked": "", "aria-labelledby": title, children: [_jsxs("div", { className: "slip-panel__claim", role: "alert", children: [_jsx("p", { className: "slip-panel__kicker", "data-tone": "bad", children: "Signing blocked" }), _jsx("h2", { className: "slip-panel__title", id: title, children: "This transaction doesn't do what the link says" }), _jsx("p", { className: "slip-panel__lead", children: blockedLine(reasons) })] }), _jsxs("div", { className: "slip-panel__compare", children: [_jsxs("div", { className: "slip-panel__side", children: [_jsx("p", { className: "slip-panel__kicker", children: "The link claims" }), _jsx("p", { className: "slip-panel__claimed", children: claim }), description === undefined ? undefined : _jsx("p", { className: "slip-panel__note", children: description })] }), _jsxs("div", { className: "slip-panel__side", "data-tone": "bad", children: [_jsx("p", { className: "slip-panel__kicker", "data-tone": "bad", children: "The transaction does" }), reasons.map((reason, index) => {
43
+ const { figure, lines } = evidenceOf(reason, derived);
44
+ return (_jsxs("div", { className: "slip-panel__evidence", children: [figure === undefined ? undefined : _jsx("p", { className: "slip-panel__evidence-figure", children: figure }), lines.map((line) => (_jsx("p", { className: "slip-panel__detail", children: line }, line)))] }, index));
45
+ })] })] }), _jsx(Ledger, { rows: rows }), rawOpen ? _jsx(Raw, { derived: derived }) : undefined, _jsxs("div", { className: "slip-panel__exits", children: [_jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "close", onClick: onCancel, children: "Close without signing" }), _jsxs("div", { className: "slip-panel__quiet", children: [_jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "quiet", "aria-expanded": rawOpen, onClick: () => setRawOpen((open) => !open), children: rawOpen ? "Hide raw transaction" : "Show raw transaction" }), onReport === undefined ? undefined : (_jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "quiet", onClick: onReport, children: "Report this link" }))] })] })] }));
46
+ };
47
+ export const EffectsPanel = ({ claim, description, origin, derived, verdict, clock = Date.now, onSign, onCancel, onRebuild, onReport }) => {
48
+ const now = useNow(clock);
49
+ const [rawOpen, setRawOpen] = useState(false);
50
+ const title = useId();
51
+ if (verdict._tag === "mismatch") {
52
+ return (_jsx(Blocked, { claim: claim, derived: derived, reasons: verdict.reasons, ...(description === undefined ? {} : { description }), ...(onCancel === undefined ? {} : { onCancel }), ...(onReport === undefined ? {} : { onReport }) }));
53
+ }
54
+ const rows = ledgerOf(derived);
55
+ const until = derived.effects.validity.validUntil;
56
+ const seconds = until === null ? undefined : secondsLeft(until.time, BigInt(now));
57
+ if (seconds === 0) {
58
+ return (_jsxs("section", { className: "slip-root slip-panel", "data-expired": "", "aria-labelledby": title, children: [_jsxs("div", { className: "slip-panel__claim", children: [_jsx("p", { className: "slip-panel__kicker", "data-tone": "warn", children: "Expired" }), _jsx("h2", { className: "slip-panel__title", id: title, children: "This transaction ran out of time" }), _jsx("p", { className: "slip-panel__lead", children: "Nothing was signed and nothing left your wallet. Building a new one takes a second, and the amounts will be checked again." })] }), _jsx("div", { className: "slip-panel__stale", children: _jsx(Ledger, { rows: rows }) }), _jsxs("div", { className: "slip-panel__buttons", children: [_jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "cancel", onClick: onCancel, children: "Cancel" }), _jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "primary", onClick: onRebuild, children: "Build a new transaction" })] })] }));
59
+ }
60
+ const headline = headlineOf(derived);
61
+ const expiring = seconds !== undefined && seconds < expiringUnder;
62
+ return (_jsxs("section", { className: "slip-root slip-panel", "aria-labelledby": title, children: [_jsxs("div", { className: "slip-panel__claim", children: [_jsx("p", { className: "slip-panel__kicker", children: "What you're signing" }), _jsx("h2", { className: "slip-panel__title", id: title, children: claim }), origin === undefined ? undefined : _jsx("span", { className: "slip-panel__origin", children: origin })] }), expiring ? (_jsxs("div", { className: "slip-panel__expiring", role: "timer", children: [_jsxs("div", { className: "slip-panel__expiring-head", children: [_jsx("span", { children: "This transaction expires in" }), _jsx("span", { className: "slip-panel__expiring-clock", children: _jsx(Countdown, { seconds: seconds }) })] }), _jsx("div", { className: "slip-panel__bar", "aria-hidden": "true", children: _jsx("span", { className: "slip-panel__bar-fill", suppressHydrationWarning: true, style: { width: `${(seconds / expiringUnder) * 100}%` } }) }), _jsx("p", { className: "slip-panel__note", children: "After that the amounts could be stale, so we'll build a fresh one." })] })) : (_jsxs("div", { className: "slip-panel__headline", children: [_jsxs("div", { className: "slip-panel__figure", children: [_jsx("span", { className: "slip-panel__note", children: headline.label }), _jsx("span", { className: "slip-panel__figure-amount", "data-tone": headline.tone, children: headline.amount }), headline.fee === undefined ? undefined : _jsx("span", { className: "slip-panel__note", children: headline.fee })] }), headline.held === undefined ? undefined : (_jsxs(_Fragment, { children: [_jsx("span", { className: "slip-panel__rule", "aria-hidden": "true" }), _jsxs("div", { className: "slip-panel__figure", children: [_jsx("span", { className: "slip-panel__note", children: headline.held.label }), _jsx("span", { className: "slip-panel__figure-amount", "data-tone": headline.held.tone, children: headline.held.amount })] })] }))] })), _jsx(Ledger, { rows: rows }), expiring || seconds === undefined ? undefined : (_jsxs("div", { className: "slip-panel__expiry", children: [_jsx("span", { className: "slip-panel__note", children: "Expires in" }), _jsx("span", { className: "slip-panel__clock", children: _jsx(Countdown, { seconds: seconds }) })] })), _jsxs("p", { className: "slip-panel__verdict", children: [_jsx("span", { className: "slip-panel__tick", "aria-hidden": "true", children: "\u2713" }), _jsx("span", { children: matchLine(derived, rows) })] }), _jsxs("div", { className: "slip-panel__buttons", children: [_jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "cancel", onClick: onCancel, children: "Cancel" }), _jsx("button", { type: "button", className: "slip-panel__button", "data-kind": "primary", onClick: onSign, children: "Sign transaction" })] }), _jsxs("div", { className: "slip-panel__raw", children: [_jsxs("button", { type: "button", className: "slip-panel__raw-toggle", "aria-expanded": rawOpen, onClick: () => setRawOpen((open) => !open), children: [_jsx("span", { "aria-hidden": "true", children: rawOpen ? "▾" : "▸" }), _jsx("span", { children: "Raw transaction" })] }), rawOpen ? _jsx(Raw, { derived: derived }) : undefined] })] }));
63
+ };
64
+ //# sourceMappingURL=effects-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects-panel.js","sourceRoot":"","sources":["../src/effects-panel.tsx"],"names":[],"mappings":"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"}