@toon-protocol/views 0.2.0 → 0.5.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 (39) hide show
  1. package/dist/app/index.html +146 -71
  2. package/dist/atoms/content.d.ts +6 -0
  3. package/dist/atoms/content.d.ts.map +1 -0
  4. package/dist/atoms/content.js +83 -0
  5. package/dist/atoms/content.js.map +1 -0
  6. package/dist/atoms/interactive.d.ts.map +1 -1
  7. package/dist/atoms/interactive.js +32 -11
  8. package/dist/atoms/interactive.js.map +1 -1
  9. package/dist/atoms/media.d.ts +7 -0
  10. package/dist/atoms/media.d.ts.map +1 -1
  11. package/dist/atoms/media.js +9 -5
  12. package/dist/atoms/media.js.map +1 -1
  13. package/dist/atoms/registry.d.ts.map +1 -1
  14. package/dist/atoms/registry.js +4 -0
  15. package/dist/atoms/registry.js.map +1 -1
  16. package/dist/atoms/social-ui.d.ts +41 -0
  17. package/dist/atoms/social-ui.d.ts.map +1 -0
  18. package/dist/atoms/social-ui.js +80 -0
  19. package/dist/atoms/social-ui.js.map +1 -0
  20. package/dist/atoms/social.d.ts.map +1 -1
  21. package/dist/atoms/social.js +37 -11
  22. package/dist/atoms/social.js.map +1 -1
  23. package/dist/atoms/status.d.ts +3 -0
  24. package/dist/atoms/status.d.ts.map +1 -0
  25. package/dist/atoms/status.js +83 -0
  26. package/dist/atoms/status.js.map +1 -0
  27. package/dist/atoms/types.d.ts +43 -3
  28. package/dist/atoms/types.d.ts.map +1 -1
  29. package/dist/catalog.d.ts.map +1 -1
  30. package/dist/catalog.js +43 -0
  31. package/dist/catalog.js.map +1 -1
  32. package/dist/examples.d.ts +13 -0
  33. package/dist/examples.d.ts.map +1 -1
  34. package/dist/examples.js +46 -0
  35. package/dist/examples.js.map +1 -1
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/runtime.js +12 -0
  38. package/dist/runtime.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { type Atom } from './types.js';
2
+ /** Status tone → semantic colour, shared by `stat` and `badge`. */
3
+ export type Tone = 'default' | 'success' | 'warn' | 'danger';
4
+ export declare function toTone(value: unknown): Tone;
5
+ export declare const contentAtoms: Atom[];
6
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/atoms/content.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AAE7D,mEAAmE;AACnE,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAiB7D,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE3C;AAqED,eAAO,MAAM,YAAY,EAAE,IAAI,EAM9B,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Generic content primitives — the props-driven vocabulary the agent composes
4
+ * with to render arbitrary, non-event structured data (daemon status, write
5
+ * targets, balances, identity) without falling back to plain text. Like
6
+ * `composer`/`tabs`, these are pure and carry no event `kinds`: they render
7
+ * exactly what the ViewSpec hands them.
8
+ */
9
+ import {} from 'react';
10
+ import { cn } from '@/lib/utils.js';
11
+ import { Badge } from '@/components/ui/badge.js';
12
+ import {} from './types.js';
13
+ const TONE_TEXT = {
14
+ default: 'text-foreground',
15
+ success: 'text-emerald-600 dark:text-emerald-400',
16
+ warn: 'text-amber-600 dark:text-amber-400',
17
+ danger: 'text-destructive',
18
+ };
19
+ /** shadcn badge variant for each tone (the pill colours). */
20
+ const TONE_BADGE = {
21
+ default: 'secondary',
22
+ success: 'default',
23
+ warn: 'secondary',
24
+ danger: 'destructive',
25
+ };
26
+ export function toTone(value) {
27
+ return value === 'success' || value === 'warn' || value === 'danger' ? value : 'default';
28
+ }
29
+ const str = (v, fallback = '') => typeof v === 'string' ? v : typeof v === 'number' ? String(v) : fallback;
30
+ const Heading = ({ props }) => {
31
+ const text = str(props['text']);
32
+ if (!text)
33
+ return null;
34
+ const level = props['level'] === 2 || props['level'] === 3 ? props['level'] : 1;
35
+ const cls = level === 1
36
+ ? 'text-lg font-semibold tracking-tight'
37
+ : level === 2
38
+ ? 'text-base font-semibold'
39
+ : 'text-sm font-semibold uppercase tracking-wide text-muted-foreground';
40
+ if (level === 2)
41
+ return _jsx("h2", { className: cls, children: text });
42
+ if (level === 3)
43
+ return _jsx("h3", { className: cls, children: text });
44
+ return _jsx("h1", { className: cls, children: text });
45
+ };
46
+ const Text = ({ props }) => {
47
+ const text = str(props['text']);
48
+ if (!text)
49
+ return null;
50
+ const muted = props['muted'] === true;
51
+ return (_jsx("p", { className: cn('text-sm leading-relaxed', muted && 'text-muted-foreground'), children: text }));
52
+ };
53
+ const Stat = ({ props }) => {
54
+ const label = str(props['label']);
55
+ const value = str(props['value'], '—');
56
+ const tone = toTone(props['tone']);
57
+ return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: label }), _jsx("span", { className: cn('text-xl font-semibold tabular-nums', TONE_TEXT[tone]), children: value })] }));
58
+ };
59
+ const KeyValue = ({ props }) => {
60
+ const rows = Array.isArray(props['rows'])
61
+ ? props['rows']
62
+ .filter((r) => !!r && typeof r === 'object')
63
+ .map((r) => ({ label: str(r['label']), value: str(r['value'], '—') }))
64
+ : [];
65
+ if (rows.length === 0)
66
+ return null;
67
+ return (_jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5 text-sm", children: rows.map((row, i) => (_jsxs("div", { className: "contents", children: [_jsx("dt", { className: "text-muted-foreground", children: row.label }), _jsx("dd", { className: "min-w-0 break-words text-right font-medium tabular-nums", children: row.value })] }, i))) }));
68
+ };
69
+ const BadgeAtom = ({ props }) => {
70
+ const label = str(props['label']);
71
+ if (!label)
72
+ return null;
73
+ const tone = toTone(props['tone']);
74
+ return _jsx(Badge, { variant: TONE_BADGE[tone], children: label });
75
+ };
76
+ export const contentAtoms = [
77
+ { id: 'heading', Component: Heading },
78
+ { id: 'text', Component: Text },
79
+ { id: 'stat', Component: Stat },
80
+ { id: 'key-value', Component: KeyValue },
81
+ { id: 'badge', Component: BadgeAtom },
82
+ ];
83
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/atoms/content.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,OAAO,EAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAmC,MAAM,YAAY,CAAC;AAK7D,MAAM,SAAS,GAAyB;IACtC,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,wCAAwC;IACjD,IAAI,EAAE,oCAAoC;IAC1C,MAAM,EAAE,kBAAkB;CAC3B,CAAC;AAEF,6DAA6D;AAC7D,MAAM,UAAU,GAA0D;IACxE,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3F,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,QAAQ,GAAG,EAAE,EAAU,EAAE,CAChD,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAE3E,MAAM,OAAO,GAAwB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,GAAG,GACP,KAAK,KAAK,CAAC;QACT,CAAC,CAAC,sCAAsC;QACxC,CAAC,CAAC,KAAK,KAAK,CAAC;YACX,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,qEAAqE,CAAC;IAC9E,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,aAAI,SAAS,EAAE,GAAG,YAAG,IAAI,GAAM,CAAC;IACxD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,aAAI,SAAS,EAAE,GAAG,YAAG,IAAI,GAAM,CAAC;IACxD,OAAO,aAAI,SAAS,EAAE,GAAG,YAAG,IAAI,GAAM,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,IAAI,GAAwB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACtC,OAAO,CACL,YAAG,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,uBAAuB,CAAC,YAAG,IAAI,GAAK,CAC1F,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,IAAI,GAAwB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAM,SAAS,EAAC,mEAAmE,YAChF,KAAK,GACD,EACP,eAAM,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,YAAG,KAAK,GAAQ,IACtF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAwB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,CAAE,KAAK,CAAC,MAAM,CAAe;aACzB,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;aACzE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CACL,aAAI,SAAS,EAAC,qDAAqD,YAChE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,eAAa,SAAS,EAAC,UAAU,aAC/B,aAAI,SAAS,EAAC,uBAAuB,YAAE,GAAG,CAAC,KAAK,GAAM,EACtD,aAAI,SAAS,EAAC,yDAAyD,YAAE,GAAG,CAAC,KAAK,GAAM,KAFhF,CAAC,CAGL,CACP,CAAC,GACC,CACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAwB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,OAAO,KAAC,KAAK,IAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,YAAG,KAAK,GAAS,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;IACrC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/B,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/B,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;CACtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/atoms/interactive.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,IAAI,EAAyC,MAAM,YAAY,CAAC;AAmM9E,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAIlC,CAAC"}
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/atoms/interactive.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,IAAI,EAAyC,MAAM,YAAY,CAAC;AAyQ9E,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAIlC,CAAC"}
@@ -1,10 +1,22 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /** Interactive atoms that hold local UI state (composer, tabs, pay-confirm). */
3
3
  import { Children, useEffect, useState } from 'react';
4
+ import { ArrowLeft, CircleCheck, Coins, Loader2 } from 'lucide-react';
4
5
  import { Button } from '@/components/ui/button.js';
5
6
  import { Textarea } from '@/components/ui/textarea.js';
6
7
  import { MonoId } from '@/components/mono-id.js';
7
8
  import {} from './types.js';
9
+ import { byteLength } from './social-ui.js';
10
+ /**
11
+ * The shared composer surface: an auto-sizing textarea over a footer toolbar
12
+ * that carries the byte counter (TOON fees scale with encoded bytes) and the
13
+ * primary action. Used by both the free `composer` and the paid `pay-confirm`
14
+ * idle phase so the two read as the same control.
15
+ */
16
+ const ComposerSurface = ({ value, onChange, placeholder, actionLabel, actionIcon, disabled, onSubmit }) => {
17
+ const bytes = byteLength(value);
18
+ return (_jsxs("div", { className: "rounded-xl border border-border bg-card focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/30", children: [_jsx(Textarea, { value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, rows: 3, className: "min-h-20 resize-none border-0 bg-transparent px-3.5 pt-3.5 text-base focus-visible:border-0 focus-visible:ring-0 md:text-sm" }), _jsxs("div", { className: "flex items-center justify-between gap-2 border-t border-border px-3 py-2", children: [_jsxs("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", "aria-label": `${bytes} bytes, the unit pay-to-write fees scale with`, title: "Fees scale with encoded bytes", children: [bytes, " ", bytes === 1 ? 'byte' : 'bytes'] }), _jsxs(Button, { size: "sm", disabled: disabled, onClick: onSubmit, children: [actionIcon, actionLabel] })] })] }));
19
+ };
8
20
  const Composer = ({ props, actions }) => {
9
21
  const [text, setText] = useState('');
10
22
  const placeholder = typeof props['placeholder'] === 'string' ? props['placeholder'] : "What's happening?";
@@ -16,7 +28,7 @@ const Composer = ({ props, actions }) => {
16
28
  void actions['post']({ content: value });
17
29
  setText('');
18
30
  };
19
- return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Textarea, { value: text, onChange: (e) => setText(e.target.value), placeholder: placeholder, rows: 3 }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { size: "sm", disabled: !text.trim() || !actions['post'], onClick: submit, children: label }) })] }));
31
+ return (_jsx(ComposerSurface, { value: text, onChange: setText, placeholder: placeholder, actionLabel: label, disabled: !text.trim() || !actions['post'], onSubmit: submit }));
20
32
  };
21
33
  const Tabs = ({ props, children }) => {
22
34
  const labels = Array.isArray(props['labels'])
@@ -43,11 +55,17 @@ const PayConfirm = ({ props, actions, readStatus }) => {
43
55
  return;
44
56
  let cancelled = false;
45
57
  void readStatus()
46
- .then((s) => { if (!cancelled)
47
- setStatus(s); })
48
- .catch(() => { if (!cancelled)
49
- setStatusError(true); });
50
- return () => { cancelled = true; };
58
+ .then((s) => {
59
+ if (!cancelled)
60
+ setStatus(s);
61
+ })
62
+ .catch(() => {
63
+ if (!cancelled)
64
+ setStatusError(true);
65
+ });
66
+ return () => {
67
+ cancelled = true;
68
+ };
51
69
  }, [phase, status, statusError, readStatus]);
52
70
  const review = () => {
53
71
  if (!text.trim() || !actions['confirm'])
@@ -80,16 +98,19 @@ const PayConfirm = ({ props, actions, readStatus }) => {
80
98
  };
81
99
  const feeLabel = status
82
100
  ? `${status.feePerEvent}${status.asset ? ` ${status.asset}` : ''}`
83
- : statusError ? 'unavailable' : '…';
101
+ : statusError
102
+ ? 'unavailable'
103
+ : '…';
84
104
  const chainLabel = status ? status.settlementChain : statusError ? 'unknown' : '…';
105
+ const bytes = byteLength(text.trim());
85
106
  if (phase === 'receipt') {
86
- return (_jsxs("div", { className: "rounded-lg border-l-2 border-primary bg-primary/5 p-4", children: [_jsx("div", { className: "mb-1 font-semibold text-primary", children: "Posted \u2014 and paid." }), _jsx("p", { className: "mb-3 text-xs text-muted-foreground", children: "The message is the money." }), _jsxs("dl", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-xs", children: [_jsx("dt", { className: "text-muted-foreground", children: "Event" }), _jsx("dd", { children: eventId ? _jsx(MonoId, { value: eventId, prefixLen: 12, suffixLen: 6 }) : '—' }), _jsx("dt", { className: "text-muted-foreground", children: "Fee paid" }), _jsxs("dd", { children: [feeLabel, " on ", chainLabel] })] }), _jsx("div", { className: "mt-3 flex justify-end", children: _jsx(Button, { variant: "outline", size: "sm", onClick: reset, children: "Post another" }) })] }));
107
+ return (_jsxs("div", { className: "overflow-hidden rounded-xl border border-primary/30 bg-card", children: [_jsxs("div", { className: "flex items-center gap-2.5 border-b border-primary/20 bg-primary/5 px-4 py-3", children: [_jsx(CircleCheck, { "aria-hidden": "true", className: "size-5 text-primary" }), _jsxs("div", { children: [_jsx("div", { className: "font-semibold leading-tight", children: "Posted \u2014 and paid" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "The message is the money." })] })] }), _jsxs("dl", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5 px-4 py-3 text-xs", children: [_jsx("dt", { className: "text-muted-foreground", children: "Event" }), _jsx("dd", { children: eventId ? _jsx(MonoId, { value: eventId, prefixLen: 12, suffixLen: 6 }) : '—' }), _jsx("dt", { className: "text-muted-foreground", children: "Fee paid" }), _jsxs("dd", { className: "font-medium", children: [feeLabel, " on ", chainLabel] })] }), _jsx("div", { className: "flex justify-end border-t border-border px-4 py-2.5", children: _jsx(Button, { variant: "outline", size: "sm", onClick: reset, children: "Post another" }) })] }));
87
108
  }
88
109
  if (phase === 'confirming' || phase === 'publishing') {
89
110
  const publishing = phase === 'publishing';
90
- return (_jsxs("div", { className: "flex flex-col gap-3 rounded-lg border-l-2 border-ring bg-card p-4", children: [_jsx("div", { className: "font-semibold text-sm", children: "Confirm pay-to-write" }), _jsx("blockquote", { className: "whitespace-pre-wrap rounded-md border-l-2 border-primary/40 bg-muted/50 px-3 py-2 text-sm", children: text }), _jsxs("p", { className: "text-xs text-muted-foreground", children: ["Sending this message pays", ' ', _jsx("span", { className: "font-medium text-foreground", children: feeLabel }), " per event, settling on", ' ', _jsx("span", { className: "font-medium text-foreground", children: chainLabel }), ". The message is the money."] }), failed ? (_jsxs("p", { className: "text-xs text-destructive", children: ["Publish failed: ", failed] })) : null, _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", disabled: publishing, onClick: cancel, children: "Cancel" }), _jsx(Button, { size: "sm", disabled: publishing || statusError, onClick: () => void confirm(), children: publishing ? 'Publishing…' : 'Confirm & pay' })] })] }));
111
+ return (_jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-card", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-border px-4 py-3", children: [_jsx(Coins, { "aria-hidden": "true", className: "size-4 text-primary" }), _jsx("span", { className: "text-sm font-semibold", children: "Confirm pay-to-write" })] }), _jsxs("div", { className: "flex flex-col gap-3 px-4 py-3", children: [_jsx("blockquote", { className: "max-h-40 overflow-y-auto whitespace-pre-wrap break-words rounded-lg border-l-2 border-primary/40 bg-muted/50 px-3 py-2 text-sm", children: text }), _jsxs("dl", { className: "flex flex-wrap items-center gap-x-6 gap-y-1 text-xs", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("dt", { className: "text-muted-foreground", children: "Fee" }), _jsx("dd", { className: "font-medium tabular-nums", children: feeLabel })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("dt", { className: "text-muted-foreground", children: "Settles on" }), _jsx("dd", { className: "font-medium", children: chainLabel })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("dt", { className: "text-muted-foreground", children: "Size" }), _jsxs("dd", { className: "font-mono font-medium tabular-nums", children: [bytes, " bytes"] })] })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Posting pays the fee above per event. The message is the money." }), failed ? (_jsxs("p", { className: "text-xs text-destructive", children: ["Publish failed: ", failed] })) : null] }), _jsxs("div", { className: "flex justify-end gap-2 border-t border-border px-4 py-2.5", children: [_jsxs(Button, { variant: "outline", size: "sm", disabled: publishing, onClick: cancel, children: [_jsx(ArrowLeft, { "aria-hidden": "true" }), "Back"] }), _jsx(Button, { size: "sm", disabled: publishing || statusError, onClick: () => void confirm(), children: publishing ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { "aria-hidden": "true", className: "animate-spin" }), "Publishing\u2026"] })) : (_jsxs(_Fragment, { children: [_jsx(Coins, { "aria-hidden": "true" }), "Confirm & pay"] })) })] })] }));
91
112
  }
92
- return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Textarea, { value: text, onChange: (e) => setText(e.target.value), placeholder: placeholder, rows: 3 }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { size: "sm", disabled: !text.trim() || !actions['confirm'], onClick: review, children: label }) })] }));
113
+ return (_jsx(ComposerSurface, { value: text, onChange: setText, placeholder: placeholder, actionLabel: label, actionIcon: _jsx(Coins, { "aria-hidden": "true" }), disabled: !text.trim() || !actions['confirm'], onSubmit: review }));
93
114
  };
94
115
  export const interactiveAtoms = [
95
116
  { id: 'composer', writes: [{ name: 'toon_publish_unsigned' }], Component: Composer },
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/atoms/interactive.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/atoms/interactive.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /** Media atoms — NIP-68/71 posts + NIP-94 files (read), and the spendy uploader. */
2
+ import { type FC } from 'react';
3
+ import { type MediaVariant } from '../parsers/media.js';
1
4
  import { type Atom } from './types.js';
5
+ /** Renders a list of NIP-92 media variants (image → img, video → video). */
6
+ export declare const InlineMediaList: FC<{
7
+ variants: MediaVariant[];
8
+ }>;
2
9
  export declare const mediaAtoms: Atom[];
3
10
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/atoms/media.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AAmH7D,eAAO,MAAM,UAAU,EAAE,IAAI,EAO5B,CAAC"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/atoms/media.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAoB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,KAAK,YAAY,EAAuD,MAAM,qBAAqB,CAAC;AAE7G,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AAoB7D,4EAA4E;AAC5E,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAmB5D,CAAC;AAgFF,eAAO,MAAM,UAAU,EAAE,IAAI,EAO5B,CAAC"}
@@ -23,17 +23,21 @@ function variantsFor(event) {
23
23
  }
24
24
  return { variants: parseInlineMedia(event), video: false };
25
25
  }
26
- const MediaEmbed = ({ events }) => {
27
- const event = events[0];
28
- if (!event)
29
- return null;
30
- const { variants } = variantsFor(event);
26
+ /** Renders a list of NIP-92 media variants (image img, video → video). */
27
+ export const InlineMediaList = ({ variants }) => {
31
28
  if (variants.length === 0)
32
29
  return null;
33
30
  return (_jsx("div", { className: "flex flex-col gap-2", children: variants.map((v, i) => isVideo(v) ? (
34
31
  // eslint-disable-next-line jsx-a11y/media-has-caption
35
32
  _jsx("video", { src: v.url, controls: true, className: "max-h-96 w-full rounded-md" }, i)) : (_jsx("img", { src: v.url, alt: v.alt ?? '', className: "max-h-96 w-full rounded-md object-contain" }, i))) }));
36
33
  };
34
+ const MediaEmbed = ({ events }) => {
35
+ const event = events[0];
36
+ if (!event)
37
+ return null;
38
+ const { variants } = variantsFor(event);
39
+ return _jsx(InlineMediaList, { variants: variants });
40
+ };
37
41
  const MediaUploader = ({ props, actions }) => {
38
42
  const label = typeof props['label'] === 'string' ? props['label'] : 'Upload media';
39
43
  const inputRef = useRef(null);
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/atoms/media.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/atoms/media.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAgB,eAAe,EAAE,MAAM,eAAe,CAAC;AAa9D,sBAAsB;AACtB,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAA4C,CAAC;AAEzF,kEAAkE;AAClE,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAYnE,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAStD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAUvC,OAAO,EAAgB,eAAe,EAAE,MAAM,eAAe,CAAC;AAe9D,sBAAsB;AACtB,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAA4C,CAAC;AAEzF,kEAAkE;AAClE,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAYnE,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAStD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -14,6 +14,8 @@ import { forgeAtoms } from './forge.js';
14
14
  import { interactiveAtoms } from './interactive.js';
15
15
  import { defiAtoms } from './defi.js';
16
16
  import { onboardAtoms } from './onboard.js';
17
+ import { contentAtoms } from './content.js';
18
+ import { statusAtoms } from './status.js';
17
19
  import { fallbackAtom, GENERIC_ATOM_ID } from './fallback.js';
18
20
  const ALL_ATOMS = [
19
21
  ...layoutAtoms,
@@ -23,6 +25,8 @@ const ALL_ATOMS = [
23
25
  ...interactiveAtoms,
24
26
  ...defiAtoms,
25
27
  ...onboardAtoms,
28
+ ...contentAtoms,
29
+ ...statusAtoms,
26
30
  fallbackAtom,
27
31
  ];
28
32
  /** Atom id → Atom. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,SAAS,GAAW;IACxB,GAAG,WAAW;IACd,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,gBAAgB;IACnB,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,YAAY;CACb,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,KAAK,GAA8B,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnE,MAAM,YAAY,GAA8B,CAAC,GAAG,EAAE;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,EAAE,CAAC;AAEL,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;AAChD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,YAAY;YAAE,SAAS;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAwE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,SAAS,GAAW;IACxB,GAAG,WAAW;IACd,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,gBAAgB;IACnB,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,GAAG,YAAY;IACf,GAAG,WAAW;IACd,YAAY;CACb,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,KAAK,GAA8B,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnE,MAAM,YAAY,GAA8B,CAAC,GAAG,EAAE;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,EAAE,CAAC;AAEL,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;AAChD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,YAAY;YAAE,SAAS;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAwE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Shared presentational helpers for the social atoms.
3
+ *
4
+ * Pure, deterministic, no network calls and no new deps — everything is derived
5
+ * from the data already on the event (pubkey, timestamps, content bytes).
6
+ */
7
+ import { type FC } from 'react';
8
+ /** Two-char initials from a pubkey/npub, for the avatar fallback. */
9
+ export declare function initialsFor(pubkey: string): string;
10
+ /**
11
+ * A deterministic gradient + readable foreground for an identity, derived from
12
+ * its pubkey. No network, no persisted state — the same key always renders the
13
+ * same colour, so a feed reads as a set of stable identities. Hue comes from the
14
+ * hash; lightness/chroma are fixed so it stays legible in light and dark.
15
+ */
16
+ export declare function avatarColorsFor(pubkey: string): {
17
+ from: string;
18
+ to: string;
19
+ fg: string;
20
+ };
21
+ /**
22
+ * Format a unix timestamp (seconds) as a compact relative label: now, 5m, 3h,
23
+ * 2d, then an absolute month/day for anything older than a week. `nowMs` is
24
+ * injectable for deterministic tests.
25
+ */
26
+ export declare function relativeTime(createdAtSec: number, nowMs?: number): string;
27
+ /** UTF-8 byte length of a string — the unit pay-to-write fees scale with. */
28
+ export declare function byteLength(value: string): number;
29
+ /**
30
+ * Identity avatar: profile picture when we have one, otherwise a deterministic
31
+ * gradient fallback with initials. The gradient hue is the only inline style and
32
+ * is derived from the pubkey; everything else rides the design tokens.
33
+ */
34
+ export declare const IdentityAvatar: FC<{
35
+ pubkey: string;
36
+ name?: string | undefined;
37
+ picture?: string | undefined;
38
+ className?: string;
39
+ size?: 'default' | 'sm' | 'lg';
40
+ }>;
41
+ //# sourceMappingURL=social-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-ui.d.ts","sourceRoot":"","sources":["../../src/atoms/social-ui.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAchC,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAQxF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,CAWrF;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAChC,CAiBA,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Shared presentational helpers for the social atoms.
4
+ *
5
+ * Pure, deterministic, no network calls and no new deps — everything is derived
6
+ * from the data already on the event (pubkey, timestamps, content bytes).
7
+ */
8
+ import {} from 'react';
9
+ import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar.js';
10
+ import { cn } from '@/lib/utils.js';
11
+ /** A small fnv-1a hash → 32-bit unsigned int, stable for a given string. */
12
+ function hashString(value) {
13
+ let h = 0x811c9dc5;
14
+ for (let i = 0; i < value.length; i++) {
15
+ h ^= value.charCodeAt(i);
16
+ h = Math.imul(h, 0x01000193);
17
+ }
18
+ return h >>> 0;
19
+ }
20
+ /** Two-char initials from a pubkey/npub, for the avatar fallback. */
21
+ export function initialsFor(pubkey) {
22
+ const cleaned = pubkey.replace(/^npub1?/i, '') || pubkey;
23
+ return cleaned.slice(0, 2).toUpperCase();
24
+ }
25
+ /**
26
+ * A deterministic gradient + readable foreground for an identity, derived from
27
+ * its pubkey. No network, no persisted state — the same key always renders the
28
+ * same colour, so a feed reads as a set of stable identities. Hue comes from the
29
+ * hash; lightness/chroma are fixed so it stays legible in light and dark.
30
+ */
31
+ export function avatarColorsFor(pubkey) {
32
+ const hue = hashString(pubkey) % 360;
33
+ const hue2 = (hue + 38) % 360;
34
+ return {
35
+ from: `oklch(0.62 0.17 ${hue})`,
36
+ to: `oklch(0.55 0.19 ${hue2})`,
37
+ fg: 'oklch(0.99 0 0)',
38
+ };
39
+ }
40
+ /**
41
+ * Format a unix timestamp (seconds) as a compact relative label: now, 5m, 3h,
42
+ * 2d, then an absolute month/day for anything older than a week. `nowMs` is
43
+ * injectable for deterministic tests.
44
+ */
45
+ export function relativeTime(createdAtSec, nowMs = Date.now()) {
46
+ const deltaSec = Math.max(0, Math.floor(nowMs / 1000 - createdAtSec));
47
+ if (deltaSec < 45)
48
+ return 'now';
49
+ const min = Math.floor(deltaSec / 60);
50
+ if (min < 60)
51
+ return `${min}m`;
52
+ const hr = Math.floor(min / 60);
53
+ if (hr < 24)
54
+ return `${hr}h`;
55
+ const day = Math.floor(hr / 24);
56
+ if (day < 7)
57
+ return `${day}d`;
58
+ const d = new Date(createdAtSec * 1000);
59
+ return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });
60
+ }
61
+ /** UTF-8 byte length of a string — the unit pay-to-write fees scale with. */
62
+ export function byteLength(value) {
63
+ if (typeof TextEncoder !== 'undefined')
64
+ return new TextEncoder().encode(value).length;
65
+ return unescape(encodeURIComponent(value)).length;
66
+ }
67
+ /**
68
+ * Identity avatar: profile picture when we have one, otherwise a deterministic
69
+ * gradient fallback with initials. The gradient hue is the only inline style and
70
+ * is derived from the pubkey; everything else rides the design tokens.
71
+ */
72
+ export const IdentityAvatar = ({ pubkey, name, picture, className, size = 'lg' }) => {
73
+ const colors = avatarColorsFor(pubkey);
74
+ const label = name ?? pubkey;
75
+ return (_jsxs(Avatar, { size: size, className: cn('shrink-0', className), children: [picture ? _jsx(AvatarImage, { src: picture, alt: `${label} avatar` }) : null, _jsx(AvatarFallback, { className: "font-semibold tracking-tight", style: {
76
+ backgroundImage: `linear-gradient(135deg, ${colors.from}, ${colors.to})`,
77
+ color: colors.fg,
78
+ }, children: initialsFor(pubkey) })] }));
79
+ };
80
+ //# sourceMappingURL=social-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-ui.js","sourceRoot":"","sources":["../../src/atoms/social-ui.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../src/atoms/social.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AAyG7D,eAAO,MAAM,WAAW,EAAE,IAAI,EAS7B,CAAC"}
1
+ {"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../src/atoms/social.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AAgM7D,eAAO,MAAM,WAAW,EAAE,IAAI,EAS7B,CAAC"}
@@ -1,28 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /** Social atoms — NIP-01 profile/note, NIP-25 reactions, NIP-02 follow. */
3
3
  import {} from 'react';
4
+ import { Heart, MessageCircle } from 'lucide-react';
4
5
  import { Button } from '@/components/ui/button.js';
5
6
  import { Badge } from '@/components/ui/badge.js';
6
- import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar.js';
7
7
  import { MonoId } from '@/components/mono-id.js';
8
- import { parseProfile, parseNote, parseReaction } from '../parsers/social.js';
8
+ import { parseProfile, parseNote, parseReaction, } from '../parsers/social.js';
9
+ import { parseInlineMedia } from '../parsers/media.js';
10
+ import {} from '../types.js';
11
+ import { InlineMediaList } from './media.js';
9
12
  import {} from './types.js';
10
- function displayName(pubkey) {
11
- return pubkey.slice(0, 2).toUpperCase();
12
- }
13
+ import { IdentityAvatar, relativeTime } from './social-ui.js';
13
14
  const ProfileHeader = ({ events }) => {
14
15
  const profile = events.map(parseProfile).find((p) => p !== null) ?? null;
15
16
  if (!profile)
16
17
  return null;
17
18
  const name = profile.displayName ?? profile.name ?? profile.pubkey;
18
- const initials = displayName(profile.pubkey);
19
- return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs(Avatar, { className: "h-11 w-11", children: [_jsx(AvatarImage, { src: profile.picture, alt: name }), _jsx(AvatarFallback, { className: "text-xs font-semibold", children: initials })] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate font-semibold leading-tight", children: name }), profile.nip05 ? (_jsx("div", { className: "truncate text-xs text-muted-foreground", children: profile.nip05 })) : (_jsx(MonoId, { value: profile.pubkey, className: "text-muted-foreground" })), profile.about ? (_jsx("p", { className: "mt-1 line-clamp-2 text-sm text-muted-foreground", children: profile.about })) : null] })] }));
19
+ return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(IdentityAvatar, { pubkey: profile.pubkey, name: name, picture: profile.picture }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate font-semibold leading-tight", children: name }), profile.nip05 ? (_jsx("div", { className: "truncate text-xs text-muted-foreground", children: profile.nip05 })) : (_jsx(MonoId, { value: profile.pubkey, className: "text-muted-foreground" })), profile.about ? (_jsx("p", { className: "mt-1 line-clamp-2 text-sm text-muted-foreground", children: profile.about })) : null] })] }));
20
+ };
21
+ /** A single feed item: identity row, note body, inline media, engagement. */
22
+ const NoteRow = ({ event, note, profile, reactionCount, actions }) => {
23
+ const media = parseInlineMedia(event);
24
+ const displayName = profile?.displayName ?? profile?.name;
25
+ const reply = actions['reply'];
26
+ const react = actions['react'];
27
+ return (_jsxs("article", { className: "group/note flex gap-3 px-1 py-3 transition-colors first:pt-0 last:pb-0 hover:bg-muted/30", children: [_jsx(IdentityAvatar, { pubkey: note.authorPubkey, name: displayName, picture: profile?.picture }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [_jsxs("header", { className: "flex items-baseline gap-2", children: [displayName ? (_jsx("span", { className: "truncate font-semibold leading-tight", children: displayName })) : (_jsx(MonoId, { value: note.authorPubkey })), note.isReply ? (_jsx(Badge, { variant: "secondary", className: "px-1.5 py-0 text-[10px] font-normal", children: "reply" })) : null, _jsx("span", { className: "ml-auto shrink-0 text-xs text-muted-foreground tabular-nums", children: relativeTime(note.createdAt) })] }), note.content ? (_jsx("p", { className: "whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground", children: note.content })) : null, media.length > 0 ? (_jsx("div", { className: "mt-1", children: _jsx(InlineMediaList, { variants: media }) })) : null, reply || react ? (_jsxs("footer", { className: "mt-1 flex items-center gap-1 text-muted-foreground", children: [reply ? (_jsxs(Button, { variant: "ghost", size: "sm", "aria-label": "Reply to this note", className: "h-7 gap-1.5 px-2 text-xs hover:text-foreground", onClick: () => void reply({ parentId: note.eventId }), children: [_jsx(MessageCircle, { "aria-hidden": "true" }), "Reply"] })) : null, react ? (_jsxs(Button, { variant: "ghost", size: "sm", "aria-label": "React to this note", className: "h-7 gap-1.5 px-2 text-xs hover:text-foreground", onClick: () => void react({ content: '+' }), children: [_jsx(Heart, { "aria-hidden": "true" }), "React", reactionCount > 0 ? (_jsx("span", { className: "tabular-nums", children: reactionCount })) : null] })) : null] })) : null] })] }));
20
28
  };
21
29
  const NoteCard = ({ events, actions }) => {
22
- const notes = events.map(parseNote).filter((n) => n !== null);
23
- if (notes.length === 0)
30
+ const noteItems = events
31
+ .map((event) => ({ event, note: parseNote(event) }))
32
+ .filter((item) => item.note !== null);
33
+ if (noteItems.length === 0)
24
34
  return null;
25
- return (_jsx("div", { className: "flex flex-col divide-y divide-border", children: notes.map((note) => (_jsxs("article", { className: "flex flex-col gap-1.5 py-3 first:pt-0 last:pb-0", children: [_jsxs("header", { className: "flex items-center gap-2", children: [_jsx(MonoId, { value: note.authorPubkey }), note.isReply ? (_jsx(Badge, { variant: "secondary", className: "text-[10px]", children: "reply" })) : null] }), _jsx("p", { className: "whitespace-pre-wrap break-words text-sm leading-relaxed", children: note.content }), actions['reply'] ? (_jsx(Button, { variant: "ghost", size: "sm", className: "self-start h-6 px-0 text-xs text-muted-foreground hover:text-foreground", onClick: () => void actions['reply']?.({ parentId: note.eventId }), children: "Reply" })) : null] }, note.eventId))) }));
35
+ // A feed bind may carry kind:0 profiles alongside the notes; join them by
36
+ // pubkey so an author renders with a real name/picture when one is present.
37
+ const profiles = new Map();
38
+ for (const event of events) {
39
+ const profile = parseProfile(event);
40
+ if (profile)
41
+ profiles.set(profile.pubkey, profile);
42
+ }
43
+ // Reaction counts, keyed by the targeted note (NIP-25 `e` tag).
44
+ const reactionCounts = new Map();
45
+ for (const event of events) {
46
+ const reaction = parseReaction(event);
47
+ if (reaction?.targetEventId) {
48
+ reactionCounts.set(reaction.targetEventId, (reactionCounts.get(reaction.targetEventId) ?? 0) + 1);
49
+ }
50
+ }
51
+ return (_jsx("div", { className: "flex flex-col divide-y divide-border", children: noteItems.map(({ event, note }) => (_jsx(NoteRow, { event: event, note: note, profile: profiles.get(note.authorPubkey), reactionCount: reactionCounts.get(note.eventId) ?? 0, actions: actions }, note.eventId))) }));
26
52
  };
27
53
  const ReactionBar = ({ events, actions }) => {
28
54
  const counts = new Map();
@@ -33,7 +59,7 @@ const ReactionBar = ({ events, actions }) => {
33
59
  const key = reaction.content || '+';
34
60
  counts.set(key, (counts.get(key) ?? 0) + 1);
35
61
  }
36
- return (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [[...counts.entries()].map(([emoji, n]) => (_jsxs(Badge, { variant: "secondary", children: [emoji, " ", n] }, emoji))), actions['react'] ? (_jsx(Button, { variant: "outline", size: "sm", className: "h-6 rounded-full px-2 text-xs", onClick: () => void actions['react']?.({ content: '+' }), children: "+ React" })) : null] }));
62
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [[...counts.entries()].map(([emoji, n]) => (_jsxs(Badge, { variant: "secondary", className: "gap-1 tabular-nums", children: [emoji, " ", n] }, emoji))), actions['react'] ? (_jsxs(Button, { variant: "outline", size: "sm", "aria-label": "Add a reaction", className: "h-6 gap-1 rounded-full px-2 text-xs", onClick: () => void actions['react']?.({ content: '+' }), children: [_jsx(Heart, { "aria-hidden": "true" }), "React"] })) : null] }));
37
63
  };
38
64
  const FollowButton = ({ props, actions }) => {
39
65
  const label = typeof props['label'] === 'string' ? props['label'] : 'Follow';