convex-feedback-ui 0.1.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 (118) hide show
  1. package/README.md +187 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/native/context.d.ts +10 -0
  4. package/dist/native/context.d.ts.map +1 -0
  5. package/dist/native/context.js +33 -0
  6. package/dist/native/context.js.map +1 -0
  7. package/dist/native/index.d.ts +7 -0
  8. package/dist/native/index.d.ts.map +1 -0
  9. package/dist/native/index.js +6 -0
  10. package/dist/native/index.js.map +1 -0
  11. package/dist/native/primitives.d.ts +94 -0
  12. package/dist/native/primitives.d.ts.map +1 -0
  13. package/dist/native/primitives.js +303 -0
  14. package/dist/native/primitives.js.map +1 -0
  15. package/dist/native/screen.d.ts +3 -0
  16. package/dist/native/screen.d.ts.map +1 -0
  17. package/dist/native/screen.js +284 -0
  18. package/dist/native/screen.js.map +1 -0
  19. package/dist/react/context.d.ts +22 -0
  20. package/dist/react/context.d.ts.map +1 -0
  21. package/dist/react/context.js +41 -0
  22. package/dist/react/context.js.map +1 -0
  23. package/dist/react/index.d.ts +7 -0
  24. package/dist/react/index.d.ts.map +1 -0
  25. package/dist/react/index.js +6 -0
  26. package/dist/react/index.js.map +1 -0
  27. package/dist/react/primitives.d.ts +105 -0
  28. package/dist/react/primitives.d.ts.map +1 -0
  29. package/dist/react/primitives.js +217 -0
  30. package/dist/react/primitives.js.map +1 -0
  31. package/dist/react/screen.d.ts +6 -0
  32. package/dist/react/screen.d.ts.map +1 -0
  33. package/dist/react/screen.js +152 -0
  34. package/dist/react/screen.js.map +1 -0
  35. package/dist/react/styles.css +299 -0
  36. package/dist/shared/messages.d.ts +4 -0
  37. package/dist/shared/messages.d.ts.map +1 -0
  38. package/dist/shared/messages.js +85 -0
  39. package/dist/shared/messages.js.map +1 -0
  40. package/dist/shared/render.d.ts +4 -0
  41. package/dist/shared/render.d.ts.map +1 -0
  42. package/dist/shared/render.js +6 -0
  43. package/dist/shared/render.js.map +1 -0
  44. package/dist/shared/theme.d.ts +4 -0
  45. package/dist/shared/theme.d.ts.map +1 -0
  46. package/dist/shared/theme.js +23 -0
  47. package/dist/shared/theme.js.map +1 -0
  48. package/dist/shared/types/board.d.ts +43 -0
  49. package/dist/shared/types/board.d.ts.map +1 -0
  50. package/dist/shared/types/board.js +2 -0
  51. package/dist/shared/types/board.js.map +1 -0
  52. package/dist/shared/types/comment.d.ts +85 -0
  53. package/dist/shared/types/comment.d.ts.map +1 -0
  54. package/dist/shared/types/comment.js +2 -0
  55. package/dist/shared/types/comment.js.map +1 -0
  56. package/dist/shared/types/context.d.ts +68 -0
  57. package/dist/shared/types/context.d.ts.map +1 -0
  58. package/dist/shared/types/context.js +2 -0
  59. package/dist/shared/types/context.js.map +1 -0
  60. package/dist/shared/types/entry.d.ts +41 -0
  61. package/dist/shared/types/entry.d.ts.map +1 -0
  62. package/dist/shared/types/entry.js +2 -0
  63. package/dist/shared/types/entry.js.map +1 -0
  64. package/dist/shared/types/form.d.ts +25 -0
  65. package/dist/shared/types/form.d.ts.map +1 -0
  66. package/dist/shared/types/form.js +2 -0
  67. package/dist/shared/types/form.js.map +1 -0
  68. package/dist/shared/types/helpers.d.ts +2 -0
  69. package/dist/shared/types/helpers.d.ts.map +1 -0
  70. package/dist/shared/types/helpers.js +2 -0
  71. package/dist/shared/types/helpers.js.map +1 -0
  72. package/dist/shared/types/index.d.ts +10 -0
  73. package/dist/shared/types/index.d.ts.map +1 -0
  74. package/dist/shared/types/index.js +2 -0
  75. package/dist/shared/types/index.js.map +1 -0
  76. package/dist/shared/types/messages.d.ts +117 -0
  77. package/dist/shared/types/messages.d.ts.map +1 -0
  78. package/dist/shared/types/messages.js +2 -0
  79. package/dist/shared/types/messages.js.map +1 -0
  80. package/dist/shared/types/render.d.ts +12 -0
  81. package/dist/shared/types/render.d.ts.map +1 -0
  82. package/dist/shared/types/render.js +2 -0
  83. package/dist/shared/types/render.js.map +1 -0
  84. package/dist/shared/types/screen.d.ts +95 -0
  85. package/dist/shared/types/screen.d.ts.map +1 -0
  86. package/dist/shared/types/screen.js +2 -0
  87. package/dist/shared/types/screen.js.map +1 -0
  88. package/dist/shared/types/theme.d.ts +48 -0
  89. package/dist/shared/types/theme.d.ts.map +1 -0
  90. package/dist/shared/types/theme.js +2 -0
  91. package/dist/shared/types/theme.js.map +1 -0
  92. package/package.json +58 -0
  93. package/src/native/README.md +17 -0
  94. package/src/native/context.tsx +74 -0
  95. package/src/native/index.ts +39 -0
  96. package/src/native/primitives.tsx +730 -0
  97. package/src/native/screen.tsx +831 -0
  98. package/src/react/README.md +7 -0
  99. package/src/react/context.tsx +83 -0
  100. package/src/react/index.ts +42 -0
  101. package/src/react/primitives.tsx +589 -0
  102. package/src/react/screen.tsx +633 -0
  103. package/src/react/styles.css +299 -0
  104. package/src/shared/README.md +9 -0
  105. package/src/shared/messages.ts +99 -0
  106. package/src/shared/render.ts +12 -0
  107. package/src/shared/theme.ts +27 -0
  108. package/src/shared/types/board.ts +48 -0
  109. package/src/shared/types/comment.ts +101 -0
  110. package/src/shared/types/context.ts +81 -0
  111. package/src/shared/types/entry.ts +48 -0
  112. package/src/shared/types/form.ts +27 -0
  113. package/src/shared/types/helpers.ts +1 -0
  114. package/src/shared/types/index.ts +45 -0
  115. package/src/shared/types/messages.ts +160 -0
  116. package/src/shared/types/render.ts +12 -0
  117. package/src/shared/types/screen.ts +123 -0
  118. package/src/shared/types/theme.ts +61 -0
@@ -0,0 +1,152 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMemo, useState } from "react";
4
+ import { FeedbackProvider, useFeedbackUi } from "./context.js";
5
+ import { Comment, FeedbackBoard, FeedbackEntry, FeedbackForm, } from "./primitives.js";
6
+ const entryKinds = [
7
+ "feedback",
8
+ "feature_request",
9
+ "bug_report",
10
+ ];
11
+ export function FeedbackScreen({ hooks, messages, theme, unstyled, entrySort = "top", commentSort = "top", enabledKinds = entryKinds, maxCommentDepth = 5, transformComments, renderActor, className, ...colors }) {
12
+ return (_jsx(FeedbackProvider, { messages: messages, theme: theme, unstyled: unstyled, children: _jsx(FeedbackScreenInner, { hooks: hooks, entrySort: entrySort, commentSort: commentSort, enabledKinds: enabledKinds, maxCommentDepth: maxCommentDepth, transformComments: transformComments, renderActor: renderActor, className: className, ...colors }) }));
13
+ }
14
+ function FeedbackScreenInner({ hooks, entrySort, commentSort, enabledKinds, maxCommentDepth, transformComments, renderActor, className, ...colors }) {
15
+ const { messages } = useFeedbackUi();
16
+ const [searchQuery, setSearchQuery] = useState("");
17
+ const [showForm, setShowForm] = useState(false);
18
+ const [selectedEntryId, setSelectedEntryId] = useState(null);
19
+ const list = hooks.useEntries({ sort: entrySort, kinds: enabledKinds });
20
+ const searchResults = hooks.useSearchEntries({
21
+ searchQuery,
22
+ kinds: enabledKinds,
23
+ });
24
+ if (selectedEntryId !== null) {
25
+ return (_jsx(FeedbackBoard.Root, { className: className, ...colors, children: _jsx(EntryDetail, { hooks: hooks, entryId: selectedEntryId, onBack: () => setSelectedEntryId(null), commentSort: commentSort, maxCommentDepth: maxCommentDepth, transformComments: transformComments, renderActor: renderActor }) }));
26
+ }
27
+ const searching = searchQuery.trim().length > 0;
28
+ const entries = searching ? searchResults : list.results;
29
+ const loading = searching
30
+ ? searchResults === undefined
31
+ : list.status === "LoadingFirstPage";
32
+ return (_jsxs(FeedbackBoard.Root, { className: className, ...colors, children: [_jsxs(FeedbackBoard.Header, { children: [_jsxs("div", { children: [_jsx(FeedbackBoard.Title, {}), _jsx("p", { className: "cf-board__subtitle", children: messages.board.subtitle })] }), _jsx("button", { type: "button", className: "cf-button cf-button--primary", onClick: () => setShowForm((current) => !current), children: showForm ? messages.form.cancel : messages.board.createEntry })] }), showForm ? (_jsx(CreateEntryForm, { hooks: hooks, enabledKinds: enabledKinds, onCreated: (entryId) => {
33
+ setShowForm(false);
34
+ setSelectedEntryId(entryId);
35
+ } })) : null, _jsx(FeedbackBoard.Search, { value: searchQuery, onValueChange: setSearchQuery }), loading ? _jsx("p", { className: "cf-state", children: messages.board.loading }) : null, !loading && entries !== undefined && entries.length === 0 ? (_jsx("p", { className: "cf-state", children: searching
36
+ ? messages.board.noSearchResults
37
+ : messages.board.noEntries })) : null, _jsx(FeedbackBoard.List, { children: (entries ?? []).map((entry) => (_jsx(EntryCard, { entry: entry, hooks: hooks, onOpen: () => setSelectedEntryId(entry.id) }, entry.id))) }), !searching && list.status === "CanLoadMore" ? (_jsx("button", { type: "button", className: "cf-button", onClick: () => list.loadMore(hooks.pageSizes.entries), children: messages.board.loadMore })) : null] }));
38
+ }
39
+ function EntryCard({ entry, hooks, onOpen }) {
40
+ const setUpvote = hooks.useSetEntryUpvote();
41
+ return (_jsxs(FeedbackEntry.Root, { entry: entry, children: [_jsx(FeedbackEntry.Upvote, { onToggle: (active) => void setUpvote({ entryId: entry.id, desiredState: active }) }), _jsxs(FeedbackEntry.Content, { onClick: onOpen, onKeyDown: (event) => {
42
+ if (event.key === "Enter" || event.key === " ") {
43
+ event.preventDefault();
44
+ onOpen();
45
+ }
46
+ }, role: "button", tabIndex: 0, children: [_jsxs("div", { className: "cf-entry__meta", children: [_jsx(FeedbackEntry.Kind, {}), _jsx(FeedbackEntry.Status, {}), _jsx(FeedbackEntry.CommentCount, {})] }), _jsx(FeedbackEntry.Title, {}), _jsx(FeedbackEntry.Body, {})] })] }));
47
+ }
48
+ function CreateEntryForm({ hooks, enabledKinds, onCreated, }) {
49
+ const { messages } = useFeedbackUi();
50
+ const [kind, setKind] = useState(enabledKinds[0] ?? "feedback");
51
+ const [title, setTitle] = useState("");
52
+ const [body, setBody] = useState("");
53
+ const [submitting, setSubmitting] = useState(false);
54
+ const createEntry = hooks.useCreateEntry();
55
+ const similar = hooks.useSimilarEntries({ title, body, kind });
56
+ const [confirmingDuplicate, setConfirmingDuplicate] = useState(false);
57
+ const submit = (event) => {
58
+ event.preventDefault();
59
+ if (similar === undefined ||
60
+ title.trim().length === 0 ||
61
+ body.trim().length === 0) {
62
+ return;
63
+ }
64
+ if (suggestions.length > 0) {
65
+ setConfirmingDuplicate(true);
66
+ return;
67
+ }
68
+ void create();
69
+ };
70
+ const create = async () => {
71
+ if (submitting)
72
+ return;
73
+ setSubmitting(true);
74
+ try {
75
+ const entryId = await createEntry({
76
+ kind,
77
+ title,
78
+ body,
79
+ });
80
+ onCreated(entryId);
81
+ }
82
+ finally {
83
+ setSubmitting(false);
84
+ }
85
+ };
86
+ const suggestions = useMemo(() => {
87
+ if (similar === undefined)
88
+ return [];
89
+ return [...similar.exact, ...similar.similar];
90
+ }, [similar]);
91
+ return (_jsxs(FeedbackForm.Root, { onSubmit: submit, children: [_jsxs("label", { className: "cf-field", children: [_jsx("span", { children: messages.form.kind }), _jsx(FeedbackForm.Select, { value: kind, onChange: (event) => setKind(event.currentTarget.value), children: enabledKinds.map((value) => (_jsx("option", { value: value, children: messages.kinds[value] }, value))) })] }), _jsxs("label", { className: "cf-field", children: [_jsx("span", { children: messages.form.title }), _jsx(FeedbackForm.Input, { value: title, onChange: (event) => setTitle(event.currentTarget.value), placeholder: messages.form.titlePlaceholder, required: true })] }), _jsxs("label", { className: "cf-field", children: [_jsx("span", { children: messages.form.body }), _jsx(FeedbackForm.Textarea, { value: body, onChange: (event) => setBody(event.currentTarget.value), placeholder: messages.form.bodyPlaceholder, rows: 5, required: true })] }), suggestions.length > 0 && (_jsxs("aside", { className: "cf-duplicates", children: [_jsx("strong", { children: similar?.exact.length
92
+ ? messages.form.exactDuplicate
93
+ : messages.form.possibleDuplicates }), _jsx("div", { className: "cf-duplicates__list", children: suggestions.map((entry) => (_jsxs("div", { className: "cf-duplicate", children: [_jsxs("div", { className: "cf-entry__meta", children: [_jsx("span", { className: "cf-entry__kind", children: messages.kinds[entry.kind] }), _jsx("span", { className: "cf-status", children: messages.statuses[entry.status] })] }), _jsx("strong", { children: entry.title }), _jsx("span", { className: "cf-duplicate__body", children: entry.body }), _jsxs("span", { className: "cf-duplicate__meta", children: ["\u25B2 ", entry.upvoteCount, " \u00B7", " ", messages.entry.comments(entry.commentCount)] })] }, entry.id))) })] })), _jsx(FeedbackForm.Submit, { submitting: submitting, disabled: confirmingDuplicate || submitting }), confirmingDuplicate && (_jsx("div", { className: "cf-confirm-backdrop", children: _jsxs("div", { className: "cf-confirm", role: "alertdialog", "aria-modal": "true", "aria-labelledby": "cf-duplicate-confirm-title", children: [_jsx("strong", { id: "cf-duplicate-confirm-title", children: similar?.exact.length
94
+ ? messages.form.exactDuplicate
95
+ : messages.form.possibleDuplicates }), _jsx("p", { children: messages.form.duplicateWarning }), _jsxs("div", { className: "cf-inline-actions", children: [_jsx("button", { type: "button", className: "cf-button", onClick: () => setConfirmingDuplicate(false), children: messages.form.cancel }), _jsx("button", { type: "button", className: "cf-button cf-button--primary", onClick: () => {
96
+ setConfirmingDuplicate(false);
97
+ void create();
98
+ }, children: messages.form.submitAnyway })] })] }) }))] }));
99
+ }
100
+ function EntryDetail({ hooks, entryId, onBack, commentSort, maxCommentDepth, transformComments, renderActor, }) {
101
+ const { messages } = useFeedbackUi();
102
+ const entry = hooks.useEntry(entryId);
103
+ const setUpvote = hooks.useSetEntryUpvote();
104
+ const comments = hooks.useComments({ entryId, sort: commentSort });
105
+ const createComment = hooks.useCreateComment();
106
+ const [body, setBody] = useState("");
107
+ const visibleComments = useMemo(() => transformComments?.(comments.results) ?? comments.results, [comments.results, transformComments]);
108
+ if (entry === undefined)
109
+ return _jsx("p", { className: "cf-state", children: messages.board.loading });
110
+ if (entry === null)
111
+ return (_jsx("button", { type: "button", className: "cf-button", onClick: onBack, children: messages.entry.back }));
112
+ return (_jsxs("div", { className: "cf-detail", children: [_jsx("button", { type: "button", className: "cf-button cf-button--link", onClick: onBack, children: messages.entry.back }), _jsxs(FeedbackEntry.Root, { entry: entry, children: [_jsx(FeedbackEntry.Upvote, { onToggle: (active) => void setUpvote({ entryId, desiredState: active }) }), _jsxs(FeedbackEntry.Content, { children: [_jsxs("div", { className: "cf-entry__meta", children: [_jsx(FeedbackEntry.Status, {}), _jsx(FeedbackEntry.CommentCount, {})] }), _jsx(FeedbackEntry.Title, {}), _jsx(FeedbackEntry.Body, {})] })] }), _jsxs("section", { className: "cf-discussion", children: [_jsx("h3", { children: messages.comments.title }), _jsxs(FeedbackForm.Root, { onSubmit: async (event) => {
113
+ event.preventDefault();
114
+ if (body.trim().length === 0)
115
+ return;
116
+ await createComment({ entryId, body });
117
+ setBody("");
118
+ }, children: [_jsx(FeedbackForm.Textarea, { value: body, onChange: (event) => setBody(event.currentTarget.value), placeholder: messages.comments.placeholder, rows: 3 }), _jsx("button", { type: "submit", className: "cf-button cf-button--primary", children: messages.comments.submit })] }), comments.status === "LoadingFirstPage" ? (_jsx("p", { className: "cf-state", children: messages.board.loading })) : null, comments.status !== "LoadingFirstPage" &&
119
+ visibleComments.length === 0 ? (_jsx("p", { className: "cf-state", children: messages.comments.noComments })) : null, _jsx("div", { className: "cf-comments", children: visibleComments.map((comment) => (_jsx(CommentBranch, { comment: comment, entryId: entryId, hooks: hooks, commentSort: commentSort, maxCommentDepth: maxCommentDepth, transformComments: transformComments, renderActor: renderActor }, comment.id))) }), comments.status === "CanLoadMore" ? (_jsx("button", { type: "button", className: "cf-button", onClick: () => comments.loadMore(hooks.pageSizes.comments), children: messages.comments.loadMore })) : null] })] }));
120
+ }
121
+ function CommentBranch({ comment, entryId, hooks, commentSort, maxCommentDepth, transformComments, renderActor, }) {
122
+ const { messages } = useFeedbackUi();
123
+ const [expanded, setExpanded] = useState(false);
124
+ const [replying, setReplying] = useState(false);
125
+ const [replyBody, setReplyBody] = useState("");
126
+ const setLike = hooks.useSetCommentLike();
127
+ const createComment = hooks.useCreateComment();
128
+ return (_jsxs(Comment.Root, { comment: comment, children: [renderActor === undefined ? null : (_jsx("div", { className: "cf-comment__author", children: renderActor(comment.actorId) })), _jsx(Comment.Body, {}), _jsxs("div", { className: "cf-comment__toolbar", children: [_jsx(Comment.Like, { onToggle: (active) => void setLike({ commentId: comment.id, desiredState: active }) }), comment.body !== null && comment.depth < maxCommentDepth ? (_jsx(Comment.Reply, { onActivate: () => setReplying((value) => !value) })) : null, _jsx(Comment.RepliesButton, { expanded: expanded, onExpandedChange: setExpanded })] }), replying ? (_jsxs(FeedbackForm.Root, { onSubmit: async (event) => {
129
+ event.preventDefault();
130
+ if (replyBody.trim().length === 0)
131
+ return;
132
+ await createComment({
133
+ entryId,
134
+ parentCommentId: comment.id,
135
+ body: replyBody,
136
+ });
137
+ setReplyBody("");
138
+ setReplying(false);
139
+ setExpanded(true);
140
+ }, children: [_jsx(FeedbackForm.Textarea, { value: replyBody, onChange: (event) => setReplyBody(event.currentTarget.value), placeholder: messages.comments.placeholder, rows: 2 }), _jsxs("div", { className: "cf-inline-actions", children: [_jsx("button", { type: "submit", className: "cf-button cf-button--primary", children: messages.comments.reply }), _jsx("button", { type: "button", className: "cf-button", onClick: () => setReplying(false), children: messages.comments.cancelReply })] })] })) : null, expanded ? (_jsx(ReplyList, { hooks: hooks, entryId: entryId, parentCommentId: comment.id, commentSort: commentSort, maxCommentDepth: maxCommentDepth, transformComments: transformComments, renderActor: renderActor })) : null] }));
141
+ }
142
+ function ReplyList({ hooks, entryId, parentCommentId, commentSort, maxCommentDepth, transformComments, renderActor, }) {
143
+ const { messages } = useFeedbackUi();
144
+ const replies = hooks.useComments({
145
+ entryId,
146
+ parentCommentId,
147
+ sort: commentSort,
148
+ });
149
+ const visibleReplies = useMemo(() => transformComments?.(replies.results) ?? replies.results, [replies.results, transformComments]);
150
+ return (_jsxs(Comment.Children, { children: [replies.status === "LoadingFirstPage" ? (_jsx("p", { className: "cf-state", children: messages.board.loading })) : null, visibleReplies.map((reply) => (_jsx(CommentBranch, { comment: reply, entryId: entryId, hooks: hooks, commentSort: commentSort, maxCommentDepth: maxCommentDepth, transformComments: transformComments, renderActor: renderActor }, reply.id))), replies.status === "CanLoadMore" ? (_jsx("button", { type: "button", className: "cf-button", onClick: () => replies.loadMore(hooks.pageSizes.replies), children: messages.comments.loadMore })) : null] }));
151
+ }
152
+ //# sourceMappingURL=screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/react/screen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,299 @@
1
+ :where(.cf-board) {
2
+ box-sizing: border-box;
3
+ width: 100%;
4
+ max-width: 920px;
5
+ margin: 0 auto;
6
+ padding: calc(var(--cf-space) * 1.5);
7
+ color: var(--cf-text);
8
+ background: var(--cf-background);
9
+ font: inherit;
10
+ }
11
+
12
+ :where(.cf-board *),
13
+ :where(.cf-board *::before),
14
+ :where(.cf-board *::after) {
15
+ box-sizing: border-box;
16
+ }
17
+ :where(.cf-board) :where(.cf-board__header) {
18
+ display: flex;
19
+ align-items: flex-start;
20
+ justify-content: space-between;
21
+ gap: var(--cf-space);
22
+ margin-bottom: calc(var(--cf-space) * 1.5);
23
+ }
24
+ :where(.cf-board) :where(.cf-board__title) {
25
+ margin: 0;
26
+ font-size: 1.65rem;
27
+ line-height: 1.15;
28
+ }
29
+ :where(.cf-board) :where(.cf-board__subtitle) {
30
+ margin: 0.4rem 0 0;
31
+ color: var(--cf-muted);
32
+ }
33
+ :where(.cf-board) :where(.cf-board__list),
34
+ :where(.cf-board) :where(.cf-comments) {
35
+ display: grid;
36
+ gap: 10px;
37
+ }
38
+ :where(.cf-board) :where(.cf-search),
39
+ :where(.cf-board) :where(.cf-input),
40
+ :where(.cf-board) :where(.cf-textarea),
41
+ :where(.cf-board) :where(.cf-select) {
42
+ width: 100%;
43
+ border: 1px solid var(--cf-border);
44
+ border-radius: calc(var(--cf-radius) * 0.75);
45
+ background: var(--cf-surface);
46
+ color: var(--cf-text);
47
+ padding: 10px 12px;
48
+ font: inherit;
49
+ outline: none;
50
+ }
51
+ :where(.cf-board) :where(.cf-search) {
52
+ margin-bottom: var(--cf-space);
53
+ }
54
+ :where(.cf-board) :where(.cf-search:focus),
55
+ :where(.cf-board) :where(.cf-input:focus),
56
+ :where(.cf-board) :where(.cf-textarea:focus),
57
+ :where(.cf-board) :where(.cf-select:focus) {
58
+ border-color: var(--cf-primary);
59
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cf-primary) 14%, transparent);
60
+ }
61
+ :where(.cf-board) :where(.cf-entry) {
62
+ display: grid;
63
+ grid-template-columns: 52px minmax(0, 1fr);
64
+ gap: 12px;
65
+ padding: 14px;
66
+ border: 1px solid var(--cf-border);
67
+ border-radius: var(--cf-radius);
68
+ background: var(--cf-surface);
69
+ }
70
+ :where(.cf-board) :where(.cf-entry__content) {
71
+ min-width: 0;
72
+ cursor: pointer;
73
+ }
74
+ :where(.cf-board) :where(.cf-entry__title) {
75
+ margin: 5px 0 3px;
76
+ font-size: 1rem;
77
+ }
78
+ :where(.cf-board) :where(.cf-entry__body) {
79
+ margin: 0;
80
+ color: var(--cf-muted);
81
+ line-height: 1.5;
82
+ white-space: pre-wrap;
83
+ }
84
+ :where(.cf-board) :where(.cf-entry__meta) {
85
+ display: flex;
86
+ gap: 8px;
87
+ align-items: center;
88
+ flex-wrap: wrap;
89
+ color: var(--cf-muted);
90
+ font-size: 0.8rem;
91
+ }
92
+ :where(.cf-board) :where(.cf-entry__kind) {
93
+ color: var(--cf-muted);
94
+ font-size: 0.78rem;
95
+ font-weight: 600;
96
+ }
97
+ :where(.cf-board) :where(.cf-status) {
98
+ display: inline-flex;
99
+ border-radius: 999px;
100
+ padding: 3px 8px;
101
+ background: var(--cf-surface-muted);
102
+ color: var(--cf-muted);
103
+ font-size: 0.78rem;
104
+ font-weight: 600;
105
+ }
106
+ :where(.cf-board) :where(.cf-upvote) {
107
+ width: 46px;
108
+ min-height: 54px;
109
+ display: inline-flex;
110
+ flex-direction: column;
111
+ align-items: center;
112
+ justify-content: center;
113
+ gap: 2px;
114
+ border: 1px solid var(--cf-border);
115
+ border-radius: 10px;
116
+ background: var(--cf-surface-muted);
117
+ color: var(--cf-muted);
118
+ cursor: pointer;
119
+ }
120
+ :where(.cf-board) :where(.cf-upvote[data-active="true"]) {
121
+ border-color: var(--cf-primary);
122
+ color: var(--cf-primary);
123
+ background: color-mix(in srgb, var(--cf-primary) 8%, var(--cf-surface));
124
+ }
125
+ :where(.cf-board) :where(.cf-button) {
126
+ display: inline-flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ gap: 6px;
130
+ min-height: 38px;
131
+ border: 1px solid var(--cf-border);
132
+ border-radius: 9px;
133
+ padding: 8px 12px;
134
+ background: var(--cf-surface);
135
+ color: var(--cf-text);
136
+ font: inherit;
137
+ font-weight: 600;
138
+ cursor: pointer;
139
+ }
140
+ :where(.cf-board) :where(.cf-button--primary) {
141
+ border-color: var(--cf-primary);
142
+ background: var(--cf-primary);
143
+ color: white;
144
+ }
145
+ :where(.cf-board) :where(.cf-button--link) {
146
+ border-color: transparent;
147
+ padding-inline: 0;
148
+ background: transparent;
149
+ color: var(--cf-primary);
150
+ }
151
+ :where(.cf-board) :where(.cf-form) {
152
+ display: grid;
153
+ gap: 10px;
154
+ padding: 14px;
155
+ border: 1px solid var(--cf-border);
156
+ border-radius: var(--cf-radius);
157
+ background: var(--cf-surface-muted);
158
+ margin-bottom: 14px;
159
+ }
160
+ :where(.cf-board) :where(.cf-field) {
161
+ display: grid;
162
+ gap: 5px;
163
+ font-size: 0.88rem;
164
+ font-weight: 600;
165
+ }
166
+ :where(.cf-board) :where(.cf-duplicates) {
167
+ display: grid;
168
+ gap: 5px;
169
+ padding: 10px;
170
+ border-radius: 9px;
171
+ background: color-mix(in srgb, var(--cf-primary) 7%, var(--cf-surface));
172
+ font-size: 0.86rem;
173
+ }
174
+ :where(.cf-board) :where(.cf-duplicates__list) {
175
+ display: grid;
176
+ gap: 8px;
177
+ }
178
+
179
+ :where(.cf-board) :where(.cf-duplicate) {
180
+ display: grid;
181
+ gap: 5px;
182
+ padding: 10px;
183
+ border: 1px solid var(--cf-border);
184
+ border-radius: calc(var(--cf-radius) * 0.75);
185
+ background: var(--cf-surface);
186
+ }
187
+
188
+ :where(.cf-board) :where(.cf-duplicate__body),
189
+ :where(.cf-board) :where(.cf-duplicate__meta) {
190
+ color: var(--cf-muted);
191
+ font-size: 0.82rem;
192
+ }
193
+
194
+ :where(.cf-board) :where(.cf-duplicate__body) {
195
+ display: -webkit-box;
196
+ overflow: hidden;
197
+ line-clamp: 2;
198
+ -webkit-box-orient: vertical;
199
+ }
200
+ :where(.cf-board) :where(.cf-state) {
201
+ color: var(--cf-muted);
202
+ padding: 12px 2px;
203
+ }
204
+ :where(.cf-board) :where(.cf-detail),
205
+ :where(.cf-board) :where(.cf-discussion) {
206
+ display: grid;
207
+ gap: 14px;
208
+ }
209
+ :where(.cf-board) :where(.cf-discussion) {
210
+ margin-top: 8px;
211
+ }
212
+ :where(.cf-board) :where(.cf-comment) {
213
+ padding: 12px;
214
+ border: 1px solid var(--cf-border);
215
+ border-radius: calc(var(--cf-radius) * 0.85);
216
+ background: var(--cf-surface);
217
+ }
218
+ :where(.cf-board) :where(.cf-comment__body) {
219
+ margin: 0 0 8px;
220
+ line-height: 1.45;
221
+ white-space: pre-wrap;
222
+ }
223
+ :where(.cf-board) :where(.cf-comment__toolbar),
224
+ :where(.cf-board) :where(.cf-inline-actions) {
225
+ display: flex;
226
+ align-items: center;
227
+ gap: 8px;
228
+ flex-wrap: wrap;
229
+ }
230
+ :where(.cf-board) :where(.cf-comment__like),
231
+ :where(.cf-board) :where(.cf-comment__action),
232
+ :where(.cf-board) :where(.cf-comment__replies) {
233
+ border: 0;
234
+ padding: 4px 6px;
235
+ background: transparent;
236
+ color: var(--cf-muted);
237
+ font: inherit;
238
+ font-size: 0.82rem;
239
+ cursor: pointer;
240
+ }
241
+ :where(.cf-board) :where(.cf-comment__like[data-active="true"]) {
242
+ color: var(--cf-primary);
243
+ }
244
+ :where(.cf-board) :where(.cf-comment__children) {
245
+ display: grid;
246
+ gap: 8px;
247
+ margin: 10px 0 0 16px;
248
+ padding-left: 10px;
249
+ border-left: 2px solid var(--cf-border);
250
+ }
251
+ :where(.cf-board) :where(.cf-comment__author) {
252
+ margin-bottom: 5px;
253
+ color: var(--cf-muted);
254
+ font-size: 0.8rem;
255
+ }
256
+
257
+ @media (max-width: 600px) {
258
+ :where(.cf-board) {
259
+ padding: var(--cf-space);
260
+ }
261
+ :where(.cf-board) :where(.cf-board__header) {
262
+ flex-direction: column;
263
+ }
264
+ :where(.cf-board) :where(.cf-entry) {
265
+ grid-template-columns: 44px minmax(0, 1fr);
266
+ padding: 10px;
267
+ }
268
+ :where(.cf-board) :where(.cf-upvote) {
269
+ width: 40px;
270
+ min-height: 48px;
271
+ }
272
+ }
273
+ :where(.cf-board) :where(.cf-confirm-backdrop) {
274
+ position: fixed;
275
+ z-index: 1000;
276
+ inset: 0;
277
+ display: grid;
278
+ place-items: center;
279
+ padding: 20px;
280
+ background: rgb(0 0 0 / 0.35);
281
+ }
282
+
283
+ :where(.cf-board) :where(.cf-confirm) {
284
+ width: min(100%, 420px);
285
+ display: grid;
286
+ gap: 12px;
287
+ padding: 18px;
288
+ border: 1px solid var(--cf-border);
289
+ border-radius: var(--cf-radius);
290
+ background: var(--cf-surface);
291
+ color: var(--cf-text);
292
+ box-shadow: 0 20px 60px rgb(0 0 0 / 0.18);
293
+ }
294
+
295
+ :where(.cf-board) :where(.cf-confirm p) {
296
+ margin: 0;
297
+ color: var(--cf-muted);
298
+ line-height: 1.5;
299
+ }
@@ -0,0 +1,4 @@
1
+ import type { FeedbackMessageOverrides, FeedbackMessages } from "./types";
2
+ export declare const englishFeedbackMessages: FeedbackMessages;
3
+ export declare function mergeFeedbackMessages(overrides?: FeedbackMessageOverrides): FeedbackMessages;
4
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/shared/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE1E,eAAO,MAAM,uBAAuB,EAAE,gBA4DrC,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,SAAS,GAAE,wBAA6B,GACvC,gBAAgB,CAgClB"}
@@ -0,0 +1,85 @@
1
+ export const englishFeedbackMessages = {
2
+ board: {
3
+ title: "Feedback",
4
+ subtitle: "Share ideas, report problems, and help shape what comes next.",
5
+ searchPlaceholder: "Search feedback…",
6
+ createEntry: "Create feedback",
7
+ noEntries: "No feedback yet.",
8
+ noSearchResults: "No matching feedback found.",
9
+ loading: "Loading…",
10
+ loadMore: "Load more",
11
+ },
12
+ kinds: {
13
+ feedback: "Feedback",
14
+ feature_request: "Feature request",
15
+ bug_report: "Bug report",
16
+ },
17
+ statuses: {
18
+ open: "Open",
19
+ under_review: "Under review",
20
+ planned: "Planned",
21
+ in_progress: "In progress",
22
+ completed: "Completed",
23
+ closed: "Closed",
24
+ },
25
+ entry: {
26
+ upvote: "Upvote",
27
+ removeUpvote: "Remove upvote",
28
+ comments: (count) => `${count} ${count === 1 ? "comment" : "comments"}`,
29
+ open: "Open",
30
+ back: "Back to feedback",
31
+ },
32
+ form: {
33
+ kind: "Type",
34
+ title: "Title",
35
+ titlePlaceholder: "Summarize your feedback",
36
+ body: "Details",
37
+ bodyPlaceholder: "Tell us more…",
38
+ submit: "Submit feedback",
39
+ cancel: "Cancel",
40
+ possibleDuplicates: "Possible existing feedback",
41
+ exactDuplicate: "This may already exist",
42
+ duplicateWarning: "Similar feedback already exists. Are you sure you want to submit another entry?",
43
+ submitAnyway: "Submit anyways",
44
+ },
45
+ comments: {
46
+ title: "Discussion",
47
+ placeholder: "Add a comment…",
48
+ submit: "Comment",
49
+ reply: "Reply",
50
+ cancelReply: "Cancel reply",
51
+ like: "Like",
52
+ unlike: "Unlike",
53
+ viewReplies: (count) => `View ${count} ${count === 1 ? "reply" : "replies"}`,
54
+ hideReplies: "Hide replies",
55
+ deleted: "Comment deleted",
56
+ noComments: "No comments yet.",
57
+ loadMore: "Load more comments",
58
+ },
59
+ };
60
+ export function mergeFeedbackMessages(overrides = {}) {
61
+ return {
62
+ board: { ...englishFeedbackMessages.board, ...overrides.board },
63
+ kinds: {
64
+ feedback: overrides.kinds?.feedback ?? englishFeedbackMessages.kinds.feedback,
65
+ feature_request: overrides.kinds?.feature_request ??
66
+ englishFeedbackMessages.kinds.feature_request,
67
+ bug_report: overrides.kinds?.bug_report ?? englishFeedbackMessages.kinds.bug_report,
68
+ },
69
+ statuses: {
70
+ open: overrides.statuses?.open ?? englishFeedbackMessages.statuses.open,
71
+ under_review: overrides.statuses?.under_review ??
72
+ englishFeedbackMessages.statuses.under_review,
73
+ planned: overrides.statuses?.planned ?? englishFeedbackMessages.statuses.planned,
74
+ in_progress: overrides.statuses?.in_progress ??
75
+ englishFeedbackMessages.statuses.in_progress,
76
+ completed: overrides.statuses?.completed ??
77
+ englishFeedbackMessages.statuses.completed,
78
+ closed: overrides.statuses?.closed ?? englishFeedbackMessages.statuses.closed,
79
+ },
80
+ entry: { ...englishFeedbackMessages.entry, ...overrides.entry },
81
+ form: { ...englishFeedbackMessages.form, ...overrides.form },
82
+ comments: { ...englishFeedbackMessages.comments, ...overrides.comments },
83
+ };
84
+ }
85
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/shared/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from "react";
2
+ import type { RenderChildren } from "./types";
3
+ export declare function renderChildren<State>(children: RenderChildren<State> | undefined, state: State, fallback: ReactNode): ReactNode;
4
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/shared/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,cAAc,CAAC,KAAK,EAClC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,EAC3C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,SAAS,GAClB,SAAS,CAIX"}
@@ -0,0 +1,6 @@
1
+ export function renderChildren(children, state, fallback) {
2
+ return typeof children === "function"
3
+ ? children(state)
4
+ : (children ?? fallback);
5
+ }
6
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/shared/render.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,QAA2C,EAC3C,KAAY,EACZ,QAAmB;IAEnB,OAAO,OAAO,QAAQ,KAAK,UAAU;QACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FeedbackTheme, FeedbackThemeOverride } from "./types";
2
+ export declare const defaultFeedbackTheme: FeedbackTheme;
3
+ export declare function mergeFeedbackTheme(override?: FeedbackThemeOverride): FeedbackTheme;
4
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/shared/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEpE,eAAO,MAAM,oBAAoB,EAAE,aAclC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,GAAE,qBAA0B,GACnC,aAAa,CAMf"}
@@ -0,0 +1,23 @@
1
+ export const defaultFeedbackTheme = {
2
+ colors: {
3
+ primary: "#5b5bd6",
4
+ background: "#ffffff",
5
+ surface: "#ffffff",
6
+ surfaceMuted: "#f6f6f8",
7
+ text: "#17171a",
8
+ mutedText: "#68686f",
9
+ border: "#e2e2e8",
10
+ danger: "#c73535",
11
+ success: "#27834a",
12
+ },
13
+ radius: 12,
14
+ spacing: 12,
15
+ };
16
+ export function mergeFeedbackTheme(override = {}) {
17
+ return {
18
+ colors: { ...defaultFeedbackTheme.colors, ...override.colors },
19
+ radius: override.radius ?? defaultFeedbackTheme.radius,
20
+ spacing: override.spacing ?? defaultFeedbackTheme.spacing,
21
+ };
22
+ }
23
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/shared/theme.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,MAAM,EAAE;QACN,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,SAAS;QACvB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;KACnB;IACD,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,WAAkC,EAAE;IAEpC,OAAO;QACL,MAAM,EAAE,EAAE,GAAG,oBAAoB,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;QAC9D,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,oBAAoB,CAAC,MAAM;QACtD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO;KAC1D,CAAC;AACJ,CAAC"}