cursedbelt 5.92.2 → 5.92.3
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/react/components/CommentThread.d.ts.map +1 -1
- package/dist/react/components/CommentThread.js +6 -2
- package/dist/react/components/CommentThread.js.map +1 -1
- package/dist/react/components/ReactionBar.d.ts.map +1 -1
- package/dist/react/components/ReactionBar.js +4 -2
- package/dist/react/components/ReactionBar.js.map +1 -1
- package/dist/react/components/TagsInput.d.ts +1 -1
- package/dist/react/components/TagsInput.d.ts.map +1 -1
- package/dist/react/components/TagsInput.js +5 -1
- package/dist/react/components/TagsInput.js.map +1 -1
- package/dist/react/nav/HeaderSearch.d.ts.map +1 -1
- package/dist/react/nav/HeaderSearch.js +4 -1
- package/dist/react/nav/HeaderSearch.js.map +1 -1
- package/dist/styles-areas/nav.css +13 -13
- package/package.json +8 -1
- package/scripts/checkAreaStyles.spec.ts +14 -0
- package/scripts/checkAreaStyles.ts +15 -1
- package/src/react/components/CommentThread.spec.tsx +8 -0
- package/src/react/components/CommentThread.tsx +5 -2
- package/src/react/components/ReactionBar.spec.tsx +8 -0
- package/src/react/components/ReactionBar.tsx +5 -3
- package/src/react/components/TagsInput.spec.tsx +9 -0
- package/src/react/components/TagsInput.tsx +5 -1
- package/src/react/hooks/useScrollMemory.spec.tsx +8 -7
- package/src/react/nav/HeaderSearch.tsx +3 -1
- package/src/react/nav/nav.spec.tsx +6 -0
- package/src/styles-areas/nav.css +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../../src/react/components/CommentThread.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../../src/react/components/CommentThread.tsx"],"names":[],"mappings":"AASA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA4QD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAa,EACb,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAS,EACT,YAA0D,EAC1D,WAAqD,EACrD,GAAG,IAAI,EACR,EAAE,kBAAkB,+BA0BpB"}
|
|
@@ -3,6 +3,7 @@ import { Edit2, Send, Trash2 } from 'lucide-react';
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
5
5
|
import { FIELD_CLASS } from '../lib/field.js';
|
|
6
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
6
7
|
import { AutoGrowTextarea } from './AutoGrowTextarea.js';
|
|
7
8
|
import { Avatar } from './Avatar.js';
|
|
8
9
|
import { Button } from './Button.js';
|
|
@@ -47,7 +48,10 @@ function Composer({ onSubmit, placeholder, autoFocus, onCancel, }) {
|
|
|
47
48
|
submit();
|
|
48
49
|
if (e.key === 'Escape')
|
|
49
50
|
onCancel?.();
|
|
50
|
-
},
|
|
51
|
+
},
|
|
52
|
+
// `TAP_TARGET_HEIGHT`: at `min-h-9` (36px) the composer fell short of the 44px tap
|
|
53
|
+
// floor on a coarse pointer (DESIGN.md LAY-13).
|
|
54
|
+
className: cn(FIELD_CLASS, 'min-h-9 flex-1', TAP_TARGET_HEIGHT) }), _jsx(Button, { variant: 'primary', size: 'sm', "aria-label": 'Send', disabled: !body.trim(), onClick: submit, tooltip: 'Post comment', children: _jsx(Send, { className: 'h-4 w-4', "aria-hidden": true }) }), onCancel && (_jsx(Button, { variant: 'ghost', size: 'sm', onClick: onCancel, tooltip: 'Cancel comment', children: "Cancel" }))] }));
|
|
51
55
|
}
|
|
52
56
|
// ── CommentItem ───────────────────────────────────────────────────────────────
|
|
53
57
|
/** Two placeholder comments, in a comment's own shape: avatar, then a body bubble. */
|
|
@@ -62,7 +66,7 @@ function CommentItem({ comment, replies, onPost, onEdit, onDelete, onReact, }) {
|
|
|
62
66
|
const [confirmDel, setConfirmDel] = useState(false);
|
|
63
67
|
const [draft, setDraft] = useState(comment.body);
|
|
64
68
|
const createdAt = comment.createdAt instanceof Date ? comment.createdAt : new Date(comment.createdAt);
|
|
65
|
-
return (_jsxs("div", { className: 'flex gap-2', children: [_jsx(Avatar, { name: comment.author.name, src: comment.author.avatarUrl, size: 'sm', className: 'mt-0.5 shrink-0' }), _jsxs("div", { className: 'min-w-0 flex-1', children: [_jsxs("div", { className: 'rounded-lg bg-muted px-3 py-2', children: [_jsxs("div", { className: 'flex items-baseline gap-2', children: [_jsx("span", { className: 'text-sm font-medium text-foreground', children: comment.author.name || 'Someone' }), _jsx("span", { className: 'text-xs text-muted-foreground', children: formatRelative(createdAt) })] }), editing ? (_jsxs("div", { className: 'mt-1 flex items-end gap-2', children: [_jsx(AutoGrowTextarea, { value: draft, rows: 1, onChange: (e) => setDraft(e.target.value), className: cn(FIELD_CLASS, 'min-h-9 flex-1') }), _jsx(Button, { variant: 'primary', size: 'sm', disabled: !draft.trim(), onClick: () => {
|
|
69
|
+
return (_jsxs("div", { className: 'flex gap-2', children: [_jsx(Avatar, { name: comment.author.name, src: comment.author.avatarUrl, size: 'sm', className: 'mt-0.5 shrink-0' }), _jsxs("div", { className: 'min-w-0 flex-1', children: [_jsxs("div", { className: 'rounded-lg bg-muted px-3 py-2', children: [_jsxs("div", { className: 'flex items-baseline gap-2', children: [_jsx("span", { className: 'text-sm font-medium text-foreground', children: comment.author.name || 'Someone' }), _jsx("span", { className: 'text-xs text-muted-foreground', children: formatRelative(createdAt) })] }), editing ? (_jsxs("div", { className: 'mt-1 flex items-end gap-2', children: [_jsx(AutoGrowTextarea, { value: draft, rows: 1, onChange: (e) => setDraft(e.target.value), className: cn(FIELD_CLASS, 'min-h-9 flex-1', TAP_TARGET_HEIGHT) }), _jsx(Button, { variant: 'primary', size: 'sm', disabled: !draft.trim(), onClick: () => {
|
|
66
70
|
onEdit?.(comment.id, draft.trim());
|
|
67
71
|
setEditing(false);
|
|
68
72
|
}, tooltip: 'Save edited comment', children: "Save" }), _jsx(Button, { variant: 'ghost', size: 'sm', onClick: () => setEditing(false), tooltip: 'Cancel editing', children: "Cancel" })] })) : (_jsx("p", { className: 'mt-0.5 whitespace-pre-wrap break-words text-sm text-foreground', children: comment.deleted ? (_jsx("span", { className: 'italic text-muted-foreground', children: "deleted" })) : (comment.body) }))] }), !comment.deleted && (_jsxs("div", { className: 'mt-1 flex flex-wrap items-center gap-2 pl-1', children: [comment.reactions && (_jsx(ReactionBar, { emojis: comment.reactions.emojis, myReaction: comment.reactions.myReaction, onReact: (emoji) => onReact?.(comment.id, emoji) })), _jsx(Button, { variant: 'link', onClick: () => setReplying((v) => !v), className: 'text-xs text-muted-foreground hover:text-foreground', tooltip: replying ? 'Cancel reply' : 'Reply to comment', children: "Reply" }), comment.canEdit && !editing && (_jsx(IconButton, { label: 'Edit comment', size: 'sm', className: QUIET_ACTION, onClick: () => setEditing(true), children: _jsx(Edit2, {}) })), comment.canDelete &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../../src/react/components/CommentThread.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../../src/react/components/CommentThread.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactionBar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ReactionBar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactionBar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ReactionBar.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iFAAiF;IACjF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,+BAoCrG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../lib/cn.js';
|
|
3
|
+
import { TAP_TARGET } from '../lib/tapTarget.js';
|
|
3
4
|
import { ReactionPicker } from './ReactionPicker.js';
|
|
4
5
|
import { Tooltip } from './Tooltip.js';
|
|
5
6
|
import { RAW_BUTTON } from '../lib/cn.js';
|
|
@@ -21,8 +22,9 @@ export function ReactionBar({ emojis = [], myReaction, onReact, className, ...re
|
|
|
21
22
|
// element (it's already the Tooltip.Trigger child here).
|
|
22
23
|
type: 'button', onClick: () => onReact(g.emoji), "aria-label": `${g.emoji} — ${g.users.join(', ')}`, "aria-pressed": mine, className: cn(RAW_BUTTON,
|
|
23
24
|
// h-7, the add-reaction trigger's height: at py-0.5 a pill was 22px beside
|
|
24
|
-
// the 24px trigger, one row at two heights (FND-4).
|
|
25
|
-
|
|
25
|
+
// the 24px trigger, one row at two heights (FND-4). `TAP_TARGET` grows it to
|
|
26
|
+
// 44px on a coarse pointer (DESIGN.md LAY-13) without touching the mouse size.
|
|
27
|
+
`inline-flex h-7 items-center gap-1 rounded-full border px-2.5 text-xs tabular-nums transition ${TAP_TARGET}`,
|
|
26
28
|
// text-accent-strong (cbux-101) — plain text-accent only clears 4.43:1 on this tint.
|
|
27
29
|
mine
|
|
28
30
|
? 'border-accent bg-accent/10 text-accent-strong'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactionBar.js","sourceRoot":"","sources":["../../../src/react/components/ReactionBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB1C;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAoB;IACpG,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,aACzE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC;gBACpC,OAAO,CACL,KAAC,OAAO,IAAe,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,kBAC3D;wBACE,oEAAoE;wBACpE,sEAAsE;wBACtE,sEAAsE;wBACtE,yDAAyD;wBACzD,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,gBACnB,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kBAClC,IAAI,EAClB,SAAS,EAAE,EAAE,CAAC,UAAU;wBACtB,2EAA2E;wBAC3E,
|
|
1
|
+
{"version":3,"file":"ReactionBar.js","sourceRoot":"","sources":["../../../src/react/components/ReactionBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB1C;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAoB;IACpG,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,aACzE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC;gBACpC,OAAO,CACL,KAAC,OAAO,IAAe,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,kBAC3D;wBACE,oEAAoE;wBACpE,sEAAsE;wBACtE,sEAAsE;wBACtE,yDAAyD;wBACzD,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,gBACnB,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kBAClC,IAAI,EAClB,SAAS,EAAE,EAAE,CAAC,UAAU;wBACtB,2EAA2E;wBAC3E,6EAA6E;wBAC7E,+EAA+E;wBAC/E,iGAAiG,UAAU,EAAE;wBAC7G,qFAAqF;wBACrF,IAAI;4BACF,CAAC,CAAC,+CAA+C;4BACjD,CAAC,CAAC,8CAA8C,CACnD,aAED,yBAAO,CAAC,CAAC,KAAK,GAAQ,EACtB,yBAAO,CAAC,CAAC,KAAK,GAAQ,IACf,IAvBG,CAAC,CAAC,KAAK,CAwBX,CACX,CAAC;YACJ,CAAC,CAAC,EACF,KAAC,cAAc,IAAC,MAAM,EAAE,OAAO,GAAI,IAC/B,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -51,7 +51,7 @@ export declare function useTagEditing({ value, onChange, draft, setDraft }: Pick
|
|
|
51
51
|
};
|
|
52
52
|
/** The chip row's frame — an Input-shaped container reading the field tokens. */
|
|
53
53
|
export declare function tagsRowClass(size: ControlSize, disabled: boolean | undefined, className: string | undefined): string;
|
|
54
|
-
export declare const TAGS_INPUT_CLASS = "min-w-24 flex-1 bg-transparent py-0.5 text-base text-field-fg outline-none placeholder:text-field-placeholder sm:pointer-fine:text-sm";
|
|
54
|
+
export declare const TAGS_INPUT_CLASS = "min-w-24 flex-1 bg-transparent py-0.5 text-base text-field-fg outline-none placeholder:text-field-placeholder sm:pointer-fine:text-sm pointer-coarse:min-h-11";
|
|
55
55
|
/** The committed tags as removable chips. */
|
|
56
56
|
export declare function TagChips({ value, disabled, onRemove }: {
|
|
57
57
|
value: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagsInput.d.ts","sourceRoot":"","sources":["../../../src/react/components/TagsInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAE5F,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TagsInput.d.ts","sourceRoot":"","sources":["../../../src/react/components/TagsInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAE5F,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI7E,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;yEAEqE;IACrE,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAaD;qFACqF;AACrF,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;kBAC9G,MAAM;sBAKF,MAAM;mBACT,aAAa,CAAC,gBAAgB,CAAC;cASpC,MAAM;EASxB;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,UAU3G;AAKD,eAAO,MAAM,gBAAgB,kKACiI,CAAC;AAE/J,6CAA6C;AAE7C,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,iCAc7I;AAED,KAAK,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AAKrD,uEAAuE;AACvE,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,eAAe,CAAC,CAQrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BA+B9C"}
|
|
@@ -3,6 +3,7 @@ import { X } from 'lucide-react';
|
|
|
3
3
|
import { useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
5
5
|
import { CONTROL_MIN_HEIGHT_CLASS } from '../lib/field.js';
|
|
6
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
6
7
|
import { IconButton } from './IconButton.js';
|
|
7
8
|
/** Append `additions` to `current`, trimming + dropping empties and duplicates
|
|
8
9
|
* (case-sensitive, against both the existing tags and each other). */
|
|
@@ -55,7 +56,10 @@ export function tagsRowClass(size, disabled, className) {
|
|
|
55
56
|
// guardrails-ignore control-height-tokens: min-height chip-wrapping row (not fixed) — py- clears wrapped lines
|
|
56
57
|
'flex w-full flex-wrap items-center gap-1.5 rounded-field border border-field-border bg-field-bg px-2 py-1 transition focus-within:border-field-ring focus-within:ring-2 focus-within:ring-field-ring/30 aria-[invalid=true]:border-field-error', CONTROL_MIN_HEIGHT_CLASS[size], disabled && 'cursor-not-allowed opacity-50', className);
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
+
// `TAP_TARGET_HEIGHT`: at `py-0.5` the draft input was 28px tall on a coarse pointer, under the
|
|
60
|
+
// 44px tap floor (DESIGN.md LAY-13) — the row itself grows with it since this input is a flex
|
|
61
|
+
// child of `tagsRowClass`'s `items-center` row.
|
|
62
|
+
export const TAGS_INPUT_CLASS = `min-w-24 flex-1 bg-transparent py-0.5 text-base text-field-fg outline-none placeholder:text-field-placeholder sm:pointer-fine:text-sm ${TAP_TARGET_HEIGHT}`;
|
|
59
63
|
/** The committed tags as removable chips. */
|
|
60
64
|
// no-attribute-forward: a list of chips with no element of its own — the row it sits in takes the caller's attributes
|
|
61
65
|
export function TagChips({ value, disabled, onRemove }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagsInput.js","sourceRoot":"","sources":["../../../src/react/components/TagsInput.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TagsInput.js","sourceRoot":"","sources":["../../../src/react/components/TagsInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderSearch.d.ts","sourceRoot":"","sources":["../../../src/react/nav/HeaderSearch.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,OAAO,CAAC;AACjE,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAK3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,KAAK,iBAAiB,EAIvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,4EAA4E;IAC5E,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAuB,EACvB,UAAc,EACd,QAAY,EACZ,UAAoB,EACpB,YAA4B,EAC5B,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,+
|
|
1
|
+
{"version":3,"file":"HeaderSearch.d.ts","sourceRoot":"","sources":["../../../src/react/nav/HeaderSearch.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,OAAO,CAAC;AACjE,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAK3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,KAAK,iBAAiB,EAIvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,4EAA4E;IAC5E,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,YAAY,EACZ,aAAa,EACb,WAAuB,EACvB,UAAc,EACd,QAAY,EACZ,UAAoB,EACpB,YAA4B,EAC5B,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,+BAuKnB"}
|
|
@@ -110,7 +110,10 @@ export function HeaderSearch({ catalogue, serverGroups, onQueryChange, placehold
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
|
-
return (_jsxs("div", { ...rest, className: cn('relative w-full', className), "data-cb-headersearch": '', children: [_jsxs("div", { className: 'relative', ref: refs.setReference, ...getReferenceProps(), children: [_jsx(Search, { className: 'pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground', "aria-hidden": 'true' }), _jsx(Input, { type: 'search', role: 'combobox', "aria-expanded": showPanel, "aria-controls": listboxId, "aria-autocomplete": 'list', "aria-activedescendant": showPanel && activeRow ? searchOptionId(baseId, activeRow.id) : undefined, placeholder: placeholder, value: query,
|
|
113
|
+
return (_jsxs("div", { ...rest, className: cn('relative w-full', className), "data-cb-headersearch": '', children: [_jsxs("div", { className: 'relative', ref: refs.setReference, ...getReferenceProps(), children: [_jsx(Search, { className: 'pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground', "aria-hidden": 'true' }), _jsx(Input, { type: 'search', role: 'combobox', "aria-expanded": showPanel, "aria-controls": listboxId, "aria-autocomplete": 'list', "aria-activedescendant": showPanel && activeRow ? searchOptionId(baseId, activeRow.id) : undefined, placeholder: placeholder, value: query,
|
|
114
|
+
// The belt's own ✕ (below) is the clear button; a `type="search"` input draws a
|
|
115
|
+
// SECOND one natively in Chromium/Safari without this (DESIGN.md, two clear buttons).
|
|
116
|
+
className: 'pl-9 pr-9 [&::-webkit-search-cancel-button]:hidden', onChange: (e) => update(e.target.value), onFocus: () => query.trim().length >= minChars && setOpen(true), onKeyDown: onKeyDown }), query && (_jsx(IconButton, { label: 'Clear search', variant: 'ghost', onClick: clear, className: 'absolute right-2 top-1/2 size-6 -translate-y-1/2 [&_svg]:size-4', children: _jsx(X, {}) }))] }), showPanel && (_jsx(FloatingPortal, { children: _jsx("div", { ref: refs.setFloating, style: floatingStyles, ...getFloatingProps(), className: 'z-50', children: _jsx(ScrollArea, { id: listboxId, axis: 'y', safeArea: false, space: 'none', className: 'max-h-[inherit] rounded-lg border border-border bg-popover py-1 text-popover-foreground shadow-[var(--shadow-overlay)]', children: _jsx(SearchResults, { groups: groups, activeId: activeRow?.id, optionIdPrefix: baseId, emptyContent: emptyContent, linkComponent: linkComponent, onNavigate: onNavigate, onAfterNavigate: () => {
|
|
114
117
|
onAfterNavigate?.();
|
|
115
118
|
setOpen(false);
|
|
116
119
|
}, resolveIcon: resolveIcon }) }) }) }))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderSearch.js","sourceRoot":"","sources":["../../../src/react/nav/HeaderSearch.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HeaderSearch.js","sourceRoot":"","sources":["../../../src/react/nav/HeaderSearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,24 +18,24 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 129 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
|
-
@source inline("-mt-5 -right-0.5 -top-0.5 -top-1 [&::-webkit-scrollbar]:hidden
|
|
28
|
-
@source inline("[
|
|
29
|
-
@source inline("[&_[cmdk-group-heading]]:
|
|
30
|
-
@source inline("[&_[cmdk-group-heading]]:text-
|
|
31
|
-
@source inline("[&_[cmdk-group-heading]]:
|
|
32
|
-
@source inline("[&_[data-cb-banner-icon]]:text-
|
|
33
|
-
@source inline("[&_svg]:size-3.5 [scrollbar-width:none]
|
|
34
|
-
@source inline("aria-checked:ring-
|
|
35
|
-
@source inline("border-border/40 border-dashed collapse
|
|
36
|
-
@source inline("data-[disabled=true]:
|
|
37
|
-
@source inline("data-[selected=true]:text-foreground disabled:hover:scale-100
|
|
38
|
-
@source inline("focus-within:opacity-100 g grid-cols-4 group-hover/navitem:opacity-100");
|
|
27
|
+
@source inline("-mt-5 -right-0.5 -top-0.5 -top-1 [&::-webkit-scrollbar]:hidden");
|
|
28
|
+
@source inline("[&::-webkit-search-cancel-button]:hidden [&>*]:min-w-0 [&_[cmdk-group-heading]]:font-semibold");
|
|
29
|
+
@source inline("[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1");
|
|
30
|
+
@source inline("[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:text-xs");
|
|
31
|
+
@source inline("[&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group-heading]]:uppercase");
|
|
32
|
+
@source inline("[&_[data-cb-banner-icon]]:text-accent [&_[data-cb-banner-icon]]:text-destructive");
|
|
33
|
+
@source inline("[&_[data-cb-banner-icon]]:text-warning [&_svg]:size-3.5 [scrollbar-width:none]");
|
|
34
|
+
@source inline("aria-checked:ring-2 aria-checked:ring-foreground aria-checked:ring-offset-1 bg-accent/15");
|
|
35
|
+
@source inline("bg-card-overlay bg-destructive/10 bg-warning/10 border-border/40 border-dashed collapse");
|
|
36
|
+
@source inline("cursor-grab data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none");
|
|
37
|
+
@source inline("data-[selected=true]:bg-muted data-[selected=true]:text-foreground disabled:hover:scale-100");
|
|
38
|
+
@source inline("disabled:opacity-40 focus-within:opacity-100 g grid-cols-4 group-hover/navitem:opacity-100");
|
|
39
39
|
@source inline("group-hover/tile:opacity-100 group/navitem group/tile h-12 h-[var(--header-h)]");
|
|
40
40
|
@source inline("h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh hover:border-foreground/20");
|
|
41
41
|
@source inline("hover:decoration-border hover:scale-110 hover:underline-offset-4 inset-x-2 inset-x-3 inset-y-1");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cursedbelt",
|
|
3
|
-
"version": "5.92.
|
|
3
|
+
"version": "5.92.3",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"./react/media",
|
|
32
32
|
"./react/media-gallery",
|
|
33
33
|
"./react/media/player-strip",
|
|
34
|
+
"./react/media/picture-editor",
|
|
34
35
|
"./react/media/video-player",
|
|
35
36
|
"./react/pane-split",
|
|
36
37
|
"./react/pdf-viewer",
|
|
@@ -384,6 +385,12 @@
|
|
|
384
385
|
"source": "./src/react/media/fileUploadClient.ts",
|
|
385
386
|
"import": "./dist/react/media/fileUploadClient.js"
|
|
386
387
|
},
|
|
388
|
+
"./react/media/picture-editor": {
|
|
389
|
+
"types": "./dist/react/media/PictureEditor.d.ts",
|
|
390
|
+
"bun": "./src/react/media/PictureEditor.tsx",
|
|
391
|
+
"source": "./src/react/media/PictureEditor.tsx",
|
|
392
|
+
"import": "./dist/react/media/PictureEditor.js"
|
|
393
|
+
},
|
|
387
394
|
"./react/media/video-player": {
|
|
388
395
|
"types": "./dist/react/media/VideoPlayer.d.ts",
|
|
389
396
|
"bun": "./src/react/media/VideoPlayer.tsx",
|
|
@@ -316,6 +316,20 @@ describe('🔴 the THEME VARIABLE check — a `var()` of a theme variable no bui
|
|
|
316
316
|
expect([...variablesDeclared('@property --tw-x{syntax:"*"}.a{--b:1;color:var(--c)}')].sort()).toEqual(['--b', '--tw-x']);
|
|
317
317
|
});
|
|
318
318
|
|
|
319
|
+
test('🔴 a shadow-DOM library declaring a theme-named variable in its own CSS-in-JS string is DECLARED, not a miss (ReactionPicker/emoji-mart, forge task cursedbelt-reaction-bar-tap-floor)', () => {
|
|
320
|
+
// Verbatim in shape from emoji-mart's dist/module.js: its Picker custom element's
|
|
321
|
+
// shadow-root stylesheet, shipped as one JS string, declares --shadow on its own
|
|
322
|
+
// :host right beside the var(--shadow) that reads it — self-contained, but it
|
|
323
|
+
// happens to share a bare name with Tailwind's own theme --shadow.
|
|
324
|
+
const EMOJI_MART_JS =
|
|
325
|
+
'$exports = ":host {\\n border-radius: var(--border-radius);\\n box-shadow: var(--shadow);\\n ' +
|
|
326
|
+
'--border-radius: 10px;\\n --shadow-color: 0deg 0% 0%;\\n --shadow: .3px .5px 2.7px hsl(var(--shadow-color) / .14);\\n}\\n";';
|
|
327
|
+
const theme = new Set(['--shadow']);
|
|
328
|
+
// Without scanning JS for declarations this reported ["--shadow"] — a false positive: the
|
|
329
|
+
// declaration is real, just inside a shadow root no built CSS could ever carry.
|
|
330
|
+
expect(undefinedThemeVariables({ js: [EMOJI_MART_JS], css: [''] }, theme)).toEqual([]);
|
|
331
|
+
});
|
|
332
|
+
|
|
319
333
|
test('the CLI exits 1 on a build that reads an undeclared theme variable, naming it', async () => {
|
|
320
334
|
const dir = mkdtempSync(join(tmpdir(), 'belt-theme-var-check-'));
|
|
321
335
|
try {
|
|
@@ -341,10 +341,24 @@ export function variablesReferenced(text: string): Set<string> {
|
|
|
341
341
|
* Each one is a value that silently resolves to nothing — `var(--color-card)` as a background is
|
|
342
342
|
* transparent, not an error. A fallback (`var(--x, red)`) does not excuse one: it renders, but not
|
|
343
343
|
* as the theme says, which is the same divergence from the union.
|
|
344
|
+
*
|
|
345
|
+
* 🔴 `declared` also scans the JS, not only the CSS — a web-component library (emoji-mart's
|
|
346
|
+
* `Picker`) ships its shadow-root stylesheet as a CSS-in-JS STRING inside the bundle, declaring
|
|
347
|
+
* `--shadow` on its own `:host` right next to the `var(--shadow)` that reads it. That is a real,
|
|
348
|
+
* self-contained declaration — scoped to a shadow root Tailwind never reaches, but satisfied all
|
|
349
|
+
* the same — and it happens to share a bare name (`--shadow`) with a Tailwind theme variable the
|
|
350
|
+
* app's own build never emits because nothing on the page uses the stock `shadow` utility
|
|
351
|
+
* (`ReactionPicker`/`EmojiPicker`, forge task cursedbelt-reaction-bar-tap-floor). Scanning JS text
|
|
352
|
+
* for declarations too is the general fix: any library that carries its own scoped CSS in a string
|
|
353
|
+
* is covered, not only emoji-mart. The alternative — adding a page-level `--shadow` rule to this
|
|
354
|
+
* package's own CSS to satisfy the scan — would be the special case: `--shadow` is not a cursedbelt
|
|
355
|
+
* token (the shadow scale is `--shadow-raised`/`-overlay`/`-popover`), the declaration would sit in
|
|
356
|
+
* `:root` where a shadow-DOM `:host` rule can never be reached by it anyway, and it would needlessly
|
|
357
|
+
* risk colliding with Tailwind's own default `shadow` utility if an app ever used it unqualified.
|
|
344
358
|
*/
|
|
345
359
|
export function undefinedThemeVariables(input: { js: string[]; css: string[] }, theme: ReadonlySet<string>): string[] {
|
|
346
360
|
const declared = new Set<string>();
|
|
347
|
-
for (const
|
|
361
|
+
for (const text of [...input.css, ...input.js]) for (const name of variablesDeclared(text)) declared.add(name);
|
|
348
362
|
const read = new Set<string>();
|
|
349
363
|
for (const text of [...input.js, ...input.css]) for (const name of variablesReferenced(text)) read.add(name);
|
|
350
364
|
return [...read].filter((name) => theme.has(name) && !declared.has(name)).sort();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { afterEach, describe, expect, mock, test } from 'bun:test';
|
|
2
2
|
import { cleanup, fireEvent, render } from '@testing-library/react';
|
|
3
3
|
import { type CommentData, CommentThread } from './CommentThread.js';
|
|
4
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
4
5
|
|
|
5
6
|
afterEach(cleanup);
|
|
6
7
|
|
|
@@ -68,6 +69,13 @@ describe('CommentThread', () => {
|
|
|
68
69
|
expect(onPost).not.toHaveBeenCalled();
|
|
69
70
|
});
|
|
70
71
|
|
|
72
|
+
test('🔴 the composer textarea clears 44px on a coarse pointer (DESIGN.md LAY-13)', () => {
|
|
73
|
+
// At min-h-9 (36px) the composer fell short of the tap floor.
|
|
74
|
+
const { getByPlaceholderText } = render(<CommentThread comments={[]} onPost={() => {}} />);
|
|
75
|
+
const ta = getByPlaceholderText('Add a comment… (⌘/Ctrl+Enter to send)') as HTMLTextAreaElement;
|
|
76
|
+
expect(ta.className.split(/\s+/)).toContain(TAP_TARGET_HEIGHT);
|
|
77
|
+
});
|
|
78
|
+
|
|
71
79
|
test('shows Reply button for non-deleted comments', () => {
|
|
72
80
|
const { getAllByText } = render(<CommentThread comments={[makeComment()]} onPost={() => {}} />);
|
|
73
81
|
expect(getAllByText('Reply').length).toBeGreaterThan(0);
|
|
@@ -2,6 +2,7 @@ import { Edit2, Send, Trash2 } from 'lucide-react';
|
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
4
|
import { FIELD_CLASS } from '../lib/field.js';
|
|
5
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
5
6
|
import { AutoGrowTextarea } from './AutoGrowTextarea.js';
|
|
6
7
|
import { Avatar } from './Avatar.js';
|
|
7
8
|
import { Button } from './Button.js';
|
|
@@ -109,7 +110,9 @@ function Composer({
|
|
|
109
110
|
if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) submit();
|
|
110
111
|
if (e.key === 'Escape') onCancel?.();
|
|
111
112
|
}}
|
|
112
|
-
|
|
113
|
+
// `TAP_TARGET_HEIGHT`: at `min-h-9` (36px) the composer fell short of the 44px tap
|
|
114
|
+
// floor on a coarse pointer (DESIGN.md LAY-13).
|
|
115
|
+
className={cn(FIELD_CLASS, 'min-h-9 flex-1', TAP_TARGET_HEIGHT)}
|
|
113
116
|
/>
|
|
114
117
|
<Button
|
|
115
118
|
variant='primary'
|
|
@@ -195,7 +198,7 @@ function CommentItem({
|
|
|
195
198
|
value={draft}
|
|
196
199
|
rows={1}
|
|
197
200
|
onChange={(e) => setDraft(e.target.value)}
|
|
198
|
-
className={cn(FIELD_CLASS, 'min-h-9 flex-1')}
|
|
201
|
+
className={cn(FIELD_CLASS, 'min-h-9 flex-1', TAP_TARGET_HEIGHT)}
|
|
199
202
|
/>
|
|
200
203
|
<Button
|
|
201
204
|
variant='primary'
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { afterEach, describe, expect, mock, test } from 'bun:test';
|
|
2
2
|
import { cleanup, fireEvent, render } from '@testing-library/react';
|
|
3
3
|
import { ReactionBar } from './ReactionBar.js';
|
|
4
|
+
import { TAP_TARGET } from '../lib/tapTarget.js';
|
|
4
5
|
|
|
5
6
|
afterEach(cleanup);
|
|
6
7
|
|
|
@@ -52,6 +53,13 @@ describe('ReactionBar', () => {
|
|
|
52
53
|
expect(getByLabelText('👍 — Alice, Bob, Carol').textContent).toContain('3');
|
|
53
54
|
});
|
|
54
55
|
|
|
56
|
+
test('🔴 every pill clears 44px on a coarse pointer (DESIGN.md LAY-13)', () => {
|
|
57
|
+
// At h-7 (28px) the pill was well under the tap floor — TAP_TARGET widens it on touch only.
|
|
58
|
+
const { getByLabelText } = render(<ReactionBar emojis={EMOJIS} onReact={() => {}} />);
|
|
59
|
+
const cls = getByLabelText('👍 — Alice, Bob, Carol').getAttribute('class') ?? '';
|
|
60
|
+
for (const utility of TAP_TARGET.split(' ')) expect(cls).toContain(utility);
|
|
61
|
+
});
|
|
62
|
+
|
|
55
63
|
test('empty emojis renders only the picker trigger', () => {
|
|
56
64
|
const { container, getByLabelText } = render(<ReactionBar emojis={[]} onReact={() => {}} />);
|
|
57
65
|
expect(container.querySelectorAll('button[aria-pressed]').length).toBe(0);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from '../lib/cn.js';
|
|
2
|
+
import { TAP_TARGET } from '../lib/tapTarget.js';
|
|
2
3
|
import { ReactionPicker } from './ReactionPicker.js';
|
|
3
4
|
import { Tooltip } from './Tooltip.js';
|
|
4
5
|
import { RAW_BUTTON } from '../lib/cn.js';
|
|
@@ -44,10 +45,11 @@ export function ReactionBar({ emojis = [], myReaction, onReact, className, ...re
|
|
|
44
45
|
onClick={() => onReact(g.emoji)}
|
|
45
46
|
aria-label={`${g.emoji} — ${g.users.join(', ')}`}
|
|
46
47
|
aria-pressed={mine}
|
|
47
|
-
className={cn(RAW_BUTTON,
|
|
48
|
+
className={cn(RAW_BUTTON,
|
|
48
49
|
// h-7, the add-reaction trigger's height: at py-0.5 a pill was 22px beside
|
|
49
|
-
// the 24px trigger, one row at two heights (FND-4).
|
|
50
|
-
|
|
50
|
+
// the 24px trigger, one row at two heights (FND-4). `TAP_TARGET` grows it to
|
|
51
|
+
// 44px on a coarse pointer (DESIGN.md LAY-13) without touching the mouse size.
|
|
52
|
+
`inline-flex h-7 items-center gap-1 rounded-full border px-2.5 text-xs tabular-nums transition ${TAP_TARGET}`,
|
|
51
53
|
// text-accent-strong (cbux-101) — plain text-accent only clears 4.43:1 on this tint.
|
|
52
54
|
mine
|
|
53
55
|
? 'border-accent bg-accent/10 text-accent-strong'
|
|
@@ -4,6 +4,7 @@ import { join } from 'node:path';
|
|
|
4
4
|
import { act, cleanup, fireEvent, render, waitFor } from '@testing-library/react';
|
|
5
5
|
import { useState } from 'react';
|
|
6
6
|
import { preloadSuggestingTagsInput, TagsInput } from './TagsInput.js';
|
|
7
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
7
8
|
|
|
8
9
|
afterEach(cleanup);
|
|
9
10
|
|
|
@@ -80,6 +81,14 @@ describe('TagsInput', () => {
|
|
|
80
81
|
fireEvent.blur(input);
|
|
81
82
|
expect(json(container)).toEqual(['late']);
|
|
82
83
|
});
|
|
84
|
+
|
|
85
|
+
test('🔴 the draft field clears 44px on a coarse pointer (DESIGN.md LAY-13)', () => {
|
|
86
|
+
// At py-0.5 the draft input was 28px tall on a coarse pointer — under the tap floor.
|
|
87
|
+
const { container } = render(<TagsInput value={[]} onChange={() => {}} aria-label='Tags' />);
|
|
88
|
+
const input = container.querySelector('input') as HTMLInputElement;
|
|
89
|
+
const cls = (input.getAttribute('class') ?? '').split(/\s+/);
|
|
90
|
+
expect(cls).toContain(TAP_TARGET_HEIGHT);
|
|
91
|
+
});
|
|
83
92
|
});
|
|
84
93
|
|
|
85
94
|
/**
|
|
@@ -2,6 +2,7 @@ import { X } from 'lucide-react';
|
|
|
2
2
|
import { type ComponentType, type KeyboardEvent, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
4
|
import { CONTROL_MIN_HEIGHT_CLASS, type ControlSize } from '../lib/field.js';
|
|
5
|
+
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
5
6
|
import { IconButton } from './IconButton.js';
|
|
6
7
|
|
|
7
8
|
export interface TagsInputProps {
|
|
@@ -100,8 +101,11 @@ export function tagsRowClass(size: ControlSize, disabled: boolean | undefined, c
|
|
|
100
101
|
);
|
|
101
102
|
}
|
|
102
103
|
|
|
104
|
+
// `TAP_TARGET_HEIGHT`: at `py-0.5` the draft input was 28px tall on a coarse pointer, under the
|
|
105
|
+
// 44px tap floor (DESIGN.md LAY-13) — the row itself grows with it since this input is a flex
|
|
106
|
+
// child of `tagsRowClass`'s `items-center` row.
|
|
103
107
|
export const TAGS_INPUT_CLASS =
|
|
104
|
-
|
|
108
|
+
`min-w-24 flex-1 bg-transparent py-0.5 text-base text-field-fg outline-none placeholder:text-field-placeholder sm:pointer-fine:text-sm ${TAP_TARGET_HEIGHT}`;
|
|
105
109
|
|
|
106
110
|
/** The committed tags as removable chips. */
|
|
107
111
|
// no-attribute-forward: a list of chips with no element of its own — the row it sits in takes the caller's attributes
|
|
@@ -110,20 +110,21 @@ describe('useScrollMemory', () => {
|
|
|
110
110
|
*/
|
|
111
111
|
test('a list growing page by page is followed past the deadline, as long as each page lands within it', async () => {
|
|
112
112
|
const s = fakeScroller(20_000);
|
|
113
|
-
const { rerender } = render(<Shell at='/' el={s.el} deadlineMs={
|
|
113
|
+
const { rerender } = render(<Shell at='/' el={s.el} deadlineMs={400} />);
|
|
114
114
|
s.scrollTo(15_000);
|
|
115
115
|
const list = { state: window.history.state, path: '/' };
|
|
116
116
|
push('/item/7');
|
|
117
|
-
rerender(<Shell at='/item/7' el={s.el} deadlineMs={
|
|
117
|
+
rerender(<Shell at='/item/7' el={s.el} deadlineMs={400} />);
|
|
118
118
|
|
|
119
119
|
s.grow(3_000);
|
|
120
120
|
back(list);
|
|
121
|
-
rerender(<Shell at='/' el={s.el} deadlineMs={
|
|
122
|
-
// Eight pages,
|
|
123
|
-
//
|
|
124
|
-
// went red under a
|
|
121
|
+
rerender(<Shell at='/' el={s.el} deadlineMs={400} />);
|
|
122
|
+
// Eight pages, 100ms apart: 800ms in all — twice the 400ms deadline from the start, and 300ms
|
|
123
|
+
// of slack before any gap reaches it. Slack is what a loaded machine eats, in absolute time:
|
|
124
|
+
// a 60ms deadline over 40ms sleeps went red under a full gate on 2026-10-13, and 150ms over
|
|
125
|
+
// 40ms (110ms of slack) went red again on 2026-10-24 with two repos' gates running at once.
|
|
125
126
|
for (const height of [5_000, 7_000, 9_000, 11_000, 13_000, 15_000, 17_000, 20_000]) {
|
|
126
|
-
await act(() => Bun.sleep(
|
|
127
|
+
await act(() => Bun.sleep(100));
|
|
127
128
|
s.grow(height);
|
|
128
129
|
}
|
|
129
130
|
await frames(2);
|
|
@@ -189,7 +189,9 @@ export function HeaderSearch({
|
|
|
189
189
|
}
|
|
190
190
|
placeholder={placeholder}
|
|
191
191
|
value={query}
|
|
192
|
-
|
|
192
|
+
// The belt's own ✕ (below) is the clear button; a `type="search"` input draws a
|
|
193
|
+
// SECOND one natively in Chromium/Safari without this (DESIGN.md, two clear buttons).
|
|
194
|
+
className='pl-9 pr-9 [&::-webkit-search-cancel-button]:hidden'
|
|
193
195
|
onChange={(e) => update(e.target.value)}
|
|
194
196
|
onFocus={() => query.trim().length >= minChars && setOpen(true)}
|
|
195
197
|
onKeyDown={onKeyDown}
|
|
@@ -315,6 +315,12 @@ describe('HeaderSearch', () => {
|
|
|
315
315
|
expect(onNavigate).toHaveBeenCalledWith('/env-sets');
|
|
316
316
|
});
|
|
317
317
|
|
|
318
|
+
test('🔴 the native search-cancel button is hidden — the belt draws its own ✕, never two', () => {
|
|
319
|
+
const { container } = render(<HeaderSearch catalogue={catalogue} onNavigate={() => {}} />);
|
|
320
|
+
const input = container.querySelector('input[type="search"]') as HTMLInputElement;
|
|
321
|
+
expect(input.className).toContain('[&::-webkit-search-cancel-button]:hidden');
|
|
322
|
+
});
|
|
323
|
+
|
|
318
324
|
test('blank query shows no panel', () => {
|
|
319
325
|
const { container } = render(<HeaderSearch catalogue={catalogue} onNavigate={() => {}} />);
|
|
320
326
|
expect(container.querySelector('[role="listbox"]')).toBeNull();
|
package/src/styles-areas/nav.css
CHANGED
|
@@ -18,24 +18,24 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 129 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
|
-
@source inline("-mt-5 -right-0.5 -top-0.5 -top-1 [&::-webkit-scrollbar]:hidden
|
|
28
|
-
@source inline("[
|
|
29
|
-
@source inline("[&_[cmdk-group-heading]]:
|
|
30
|
-
@source inline("[&_[cmdk-group-heading]]:text-
|
|
31
|
-
@source inline("[&_[cmdk-group-heading]]:
|
|
32
|
-
@source inline("[&_[data-cb-banner-icon]]:text-
|
|
33
|
-
@source inline("[&_svg]:size-3.5 [scrollbar-width:none]
|
|
34
|
-
@source inline("aria-checked:ring-
|
|
35
|
-
@source inline("border-border/40 border-dashed collapse
|
|
36
|
-
@source inline("data-[disabled=true]:
|
|
37
|
-
@source inline("data-[selected=true]:text-foreground disabled:hover:scale-100
|
|
38
|
-
@source inline("focus-within:opacity-100 g grid-cols-4 group-hover/navitem:opacity-100");
|
|
27
|
+
@source inline("-mt-5 -right-0.5 -top-0.5 -top-1 [&::-webkit-scrollbar]:hidden");
|
|
28
|
+
@source inline("[&::-webkit-search-cancel-button]:hidden [&>*]:min-w-0 [&_[cmdk-group-heading]]:font-semibold");
|
|
29
|
+
@source inline("[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1");
|
|
30
|
+
@source inline("[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:text-xs");
|
|
31
|
+
@source inline("[&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group-heading]]:uppercase");
|
|
32
|
+
@source inline("[&_[data-cb-banner-icon]]:text-accent [&_[data-cb-banner-icon]]:text-destructive");
|
|
33
|
+
@source inline("[&_[data-cb-banner-icon]]:text-warning [&_svg]:size-3.5 [scrollbar-width:none]");
|
|
34
|
+
@source inline("aria-checked:ring-2 aria-checked:ring-foreground aria-checked:ring-offset-1 bg-accent/15");
|
|
35
|
+
@source inline("bg-card-overlay bg-destructive/10 bg-warning/10 border-border/40 border-dashed collapse");
|
|
36
|
+
@source inline("cursor-grab data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none");
|
|
37
|
+
@source inline("data-[selected=true]:bg-muted data-[selected=true]:text-foreground disabled:hover:scale-100");
|
|
38
|
+
@source inline("disabled:opacity-40 focus-within:opacity-100 g grid-cols-4 group-hover/navitem:opacity-100");
|
|
39
39
|
@source inline("group-hover/tile:opacity-100 group/navitem group/tile h-12 h-[var(--header-h)]");
|
|
40
40
|
@source inline("h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh hover:border-foreground/20");
|
|
41
41
|
@source inline("hover:decoration-border hover:scale-110 hover:underline-offset-4 inset-x-2 inset-x-3 inset-y-1");
|