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.
- package/README.md +187 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/native/context.d.ts +10 -0
- package/dist/native/context.d.ts.map +1 -0
- package/dist/native/context.js +33 -0
- package/dist/native/context.js.map +1 -0
- package/dist/native/index.d.ts +7 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +6 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/primitives.d.ts +94 -0
- package/dist/native/primitives.d.ts.map +1 -0
- package/dist/native/primitives.js +303 -0
- package/dist/native/primitives.js.map +1 -0
- package/dist/native/screen.d.ts +3 -0
- package/dist/native/screen.d.ts.map +1 -0
- package/dist/native/screen.js +284 -0
- package/dist/native/screen.js.map +1 -0
- package/dist/react/context.d.ts +22 -0
- package/dist/react/context.d.ts.map +1 -0
- package/dist/react/context.js +41 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/index.d.ts +7 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +6 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/primitives.d.ts +105 -0
- package/dist/react/primitives.d.ts.map +1 -0
- package/dist/react/primitives.js +217 -0
- package/dist/react/primitives.js.map +1 -0
- package/dist/react/screen.d.ts +6 -0
- package/dist/react/screen.d.ts.map +1 -0
- package/dist/react/screen.js +152 -0
- package/dist/react/screen.js.map +1 -0
- package/dist/react/styles.css +299 -0
- package/dist/shared/messages.d.ts +4 -0
- package/dist/shared/messages.d.ts.map +1 -0
- package/dist/shared/messages.js +85 -0
- package/dist/shared/messages.js.map +1 -0
- package/dist/shared/render.d.ts +4 -0
- package/dist/shared/render.d.ts.map +1 -0
- package/dist/shared/render.js +6 -0
- package/dist/shared/render.js.map +1 -0
- package/dist/shared/theme.d.ts +4 -0
- package/dist/shared/theme.d.ts.map +1 -0
- package/dist/shared/theme.js +23 -0
- package/dist/shared/theme.js.map +1 -0
- package/dist/shared/types/board.d.ts +43 -0
- package/dist/shared/types/board.d.ts.map +1 -0
- package/dist/shared/types/board.js +2 -0
- package/dist/shared/types/board.js.map +1 -0
- package/dist/shared/types/comment.d.ts +85 -0
- package/dist/shared/types/comment.d.ts.map +1 -0
- package/dist/shared/types/comment.js +2 -0
- package/dist/shared/types/comment.js.map +1 -0
- package/dist/shared/types/context.d.ts +68 -0
- package/dist/shared/types/context.d.ts.map +1 -0
- package/dist/shared/types/context.js +2 -0
- package/dist/shared/types/context.js.map +1 -0
- package/dist/shared/types/entry.d.ts +41 -0
- package/dist/shared/types/entry.d.ts.map +1 -0
- package/dist/shared/types/entry.js +2 -0
- package/dist/shared/types/entry.js.map +1 -0
- package/dist/shared/types/form.d.ts +25 -0
- package/dist/shared/types/form.d.ts.map +1 -0
- package/dist/shared/types/form.js +2 -0
- package/dist/shared/types/form.js.map +1 -0
- package/dist/shared/types/helpers.d.ts +2 -0
- package/dist/shared/types/helpers.d.ts.map +1 -0
- package/dist/shared/types/helpers.js +2 -0
- package/dist/shared/types/helpers.js.map +1 -0
- package/dist/shared/types/index.d.ts +10 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +2 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/messages.d.ts +117 -0
- package/dist/shared/types/messages.d.ts.map +1 -0
- package/dist/shared/types/messages.js +2 -0
- package/dist/shared/types/messages.js.map +1 -0
- package/dist/shared/types/render.d.ts +12 -0
- package/dist/shared/types/render.d.ts.map +1 -0
- package/dist/shared/types/render.js +2 -0
- package/dist/shared/types/render.js.map +1 -0
- package/dist/shared/types/screen.d.ts +95 -0
- package/dist/shared/types/screen.d.ts.map +1 -0
- package/dist/shared/types/screen.js +2 -0
- package/dist/shared/types/screen.js.map +1 -0
- package/dist/shared/types/theme.d.ts +48 -0
- package/dist/shared/types/theme.d.ts.map +1 -0
- package/dist/shared/types/theme.js +2 -0
- package/dist/shared/types/theme.js.map +1 -0
- package/package.json +58 -0
- package/src/native/README.md +17 -0
- package/src/native/context.tsx +74 -0
- package/src/native/index.ts +39 -0
- package/src/native/primitives.tsx +730 -0
- package/src/native/screen.tsx +831 -0
- package/src/react/README.md +7 -0
- package/src/react/context.tsx +83 -0
- package/src/react/index.ts +42 -0
- package/src/react/primitives.tsx +589 -0
- package/src/react/screen.tsx +633 -0
- package/src/react/styles.css +299 -0
- package/src/shared/README.md +9 -0
- package/src/shared/messages.ts +99 -0
- package/src/shared/render.ts +12 -0
- package/src/shared/theme.ts +27 -0
- package/src/shared/types/board.ts +48 -0
- package/src/shared/types/comment.ts +101 -0
- package/src/shared/types/context.ts +81 -0
- package/src/shared/types/entry.ts +48 -0
- package/src/shared/types/form.ts +27 -0
- package/src/shared/types/helpers.ts +1 -0
- package/src/shared/types/index.ts +45 -0
- package/src/shared/types/messages.ts +160 -0
- package/src/shared/types/render.ts +12 -0
- package/src/shared/types/screen.ts +123 -0
- package/src/shared/types/theme.ts +61 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic colors used by the feedback UI on both React DOM and React Native.
|
|
3
|
+
*/
|
|
4
|
+
export interface FeedbackColors {
|
|
5
|
+
/** Primary interaction and accent color. */
|
|
6
|
+
primary: string;
|
|
7
|
+
/** Main screen or board background color. */
|
|
8
|
+
background: string;
|
|
9
|
+
/** Default card and control surface color. */
|
|
10
|
+
surface: string;
|
|
11
|
+
/** Secondary or muted surface color. */
|
|
12
|
+
surfaceMuted: string;
|
|
13
|
+
/** Primary text color. */
|
|
14
|
+
text: string;
|
|
15
|
+
/** Secondary, metadata, and helper text color. */
|
|
16
|
+
mutedText: string;
|
|
17
|
+
/** Border and separator color. */
|
|
18
|
+
border: string;
|
|
19
|
+
/** Destructive and error-state color. */
|
|
20
|
+
danger: string;
|
|
21
|
+
/** Positive and success-state color. */
|
|
22
|
+
success: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Fully resolved visual theme consumed by feedback UI primitives.
|
|
26
|
+
*/
|
|
27
|
+
export interface FeedbackTheme {
|
|
28
|
+
/** Semantic feedback color palette. */
|
|
29
|
+
colors: FeedbackColors;
|
|
30
|
+
/** Base corner radius in logical pixels. */
|
|
31
|
+
radius: number;
|
|
32
|
+
/** Base spacing unit in logical pixels. */
|
|
33
|
+
spacing: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Partial theme accepted by feedback providers and prebuilt screens.
|
|
37
|
+
*
|
|
38
|
+
* Missing values fall back to the package's default feedback theme.
|
|
39
|
+
*/
|
|
40
|
+
export interface FeedbackThemeOverride {
|
|
41
|
+
/** Partial semantic color overrides. */
|
|
42
|
+
colors?: Partial<FeedbackColors> | undefined;
|
|
43
|
+
/** Base corner-radius override. */
|
|
44
|
+
radius?: number | undefined;
|
|
45
|
+
/** Base spacing-unit override. */
|
|
46
|
+
spacing?: number | undefined;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/shared/types/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IAErB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,MAAM,EAAE,cAAc,CAAC;IAEvB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IAEf,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAE7C,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/shared/types/theme.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "convex-feedback-ui",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Customizable React and React Native UI primitives for convex-feedback.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"./dist/react/styles.css"
|
|
9
|
+
],
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": "./package.json",
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/react/index.d.ts",
|
|
18
|
+
"default": "./dist/react/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./react": {
|
|
21
|
+
"types": "./dist/react/index.d.ts",
|
|
22
|
+
"default": "./dist/react/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./native": {
|
|
25
|
+
"types": "./dist/native/index.d.ts",
|
|
26
|
+
"default": "./dist/native/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./styles.css": "./dist/react/styles.css"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.build.json && node ./scripts/copy-css.mjs",
|
|
32
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
33
|
+
"lint": "eslint src test",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:all": "npm run typecheck && npm run lint && npm run test",
|
|
36
|
+
"prepack": "npm run build"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"convex-feedback": "^0.1.0",
|
|
40
|
+
"react": "^18.3.1 || ^19.0.0",
|
|
41
|
+
"react-native": "^0.83.0",
|
|
42
|
+
"react-native-safe-area-context": "^4.5.3"
|
|
43
|
+
},
|
|
44
|
+
"peerDependenciesMeta": {
|
|
45
|
+
"react-native": {
|
|
46
|
+
"optional": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/react": "^19.2.18",
|
|
51
|
+
"convex-feedback": "0.1.0",
|
|
52
|
+
"react": "^19.2.0",
|
|
53
|
+
"react-native": "^0.83.10",
|
|
54
|
+
"react-native-safe-area-context": "^4.5.3"
|
|
55
|
+
},
|
|
56
|
+
"types": "./dist/react/index.d.ts",
|
|
57
|
+
"module": "./dist/react/index.js"
|
|
58
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Native layer
|
|
2
|
+
|
|
3
|
+
Import this layer only from `convex-feedback-ui/native`.
|
|
4
|
+
|
|
5
|
+
The native layer uses React Native core primitives and the shared `FeedbackMessages` / `FeedbackTheme` contracts. It intentionally does not depend on NativeWind or Expo UI.
|
|
6
|
+
|
|
7
|
+
To replace a control with Expo UI, use render-function children on an interactive leaf:
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<Comment.Like onToggle={setLiked}>
|
|
11
|
+
{({ active, count, toggle }) => (
|
|
12
|
+
<YourExpoUiControl active={active} count={count} onPress={toggle} />
|
|
13
|
+
)}
|
|
14
|
+
</Comment.Like>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Containers such as `FeedbackEntry.Content`, `FeedbackForm.Root`, and `Comment.Children` accept arbitrary children, so custom Expo UI fields/buttons can also be placed directly inside the compound layout.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { createContext, useContext, useMemo, type ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
import { mergeFeedbackMessages } from "../shared/messages.js";
|
|
4
|
+
|
|
5
|
+
import { mergeFeedbackTheme } from "../shared/theme.js";
|
|
6
|
+
import type {
|
|
7
|
+
FeedbackProviderProps,
|
|
8
|
+
FeedbackTheme,
|
|
9
|
+
FeedbackUiContextValue,
|
|
10
|
+
} from "../shared/types";
|
|
11
|
+
|
|
12
|
+
const FeedbackNativeContext = createContext<FeedbackUiContextValue | null>(
|
|
13
|
+
null,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
export function FeedbackProvider({
|
|
17
|
+
children,
|
|
18
|
+
messages,
|
|
19
|
+
theme,
|
|
20
|
+
unstyled = false,
|
|
21
|
+
}: FeedbackProviderProps) {
|
|
22
|
+
const value = useMemo<FeedbackUiContextValue>(
|
|
23
|
+
() => ({
|
|
24
|
+
messages: mergeFeedbackMessages(messages),
|
|
25
|
+
theme: mergeFeedbackTheme(theme),
|
|
26
|
+
unstyled,
|
|
27
|
+
}),
|
|
28
|
+
[messages, theme, unstyled],
|
|
29
|
+
);
|
|
30
|
+
return (
|
|
31
|
+
<FeedbackNativeContext.Provider value={value}>
|
|
32
|
+
{children}
|
|
33
|
+
</FeedbackNativeContext.Provider>
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function useFeedbackUi(): FeedbackUiContextValue {
|
|
38
|
+
const value = useContext(FeedbackNativeContext);
|
|
39
|
+
return (
|
|
40
|
+
value ?? {
|
|
41
|
+
messages: mergeFeedbackMessages(),
|
|
42
|
+
theme: mergeFeedbackTheme(),
|
|
43
|
+
unstyled: false,
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface FeedbackNativeThemeScopeProps {
|
|
49
|
+
children: ReactNode;
|
|
50
|
+
colors: Partial<FeedbackTheme["colors"]>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function FeedbackNativeThemeScope({
|
|
54
|
+
children,
|
|
55
|
+
colors,
|
|
56
|
+
}: FeedbackNativeThemeScopeProps) {
|
|
57
|
+
const parent = useFeedbackUi();
|
|
58
|
+
const value = useMemo<FeedbackUiContextValue>(
|
|
59
|
+
() => ({
|
|
60
|
+
...parent,
|
|
61
|
+
theme: {
|
|
62
|
+
...parent.theme,
|
|
63
|
+
colors: { ...parent.theme.colors, ...colors },
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
[colors, parent],
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<FeedbackNativeContext.Provider value={value}>
|
|
71
|
+
{children}
|
|
72
|
+
</FeedbackNativeContext.Provider>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export {
|
|
2
|
+
englishFeedbackMessages,
|
|
3
|
+
mergeFeedbackMessages,
|
|
4
|
+
} from "../shared/messages.js";
|
|
5
|
+
export { defaultFeedbackTheme, mergeFeedbackTheme } from "../shared/theme.js";
|
|
6
|
+
export type {
|
|
7
|
+
BoardSearchState,
|
|
8
|
+
CommentActionState,
|
|
9
|
+
CommentLikeState,
|
|
10
|
+
EntryUpvoteState,
|
|
11
|
+
FeedbackColors,
|
|
12
|
+
FeedbackMessageOverrides,
|
|
13
|
+
FeedbackMessages,
|
|
14
|
+
FeedbackTheme,
|
|
15
|
+
FeedbackThemeOverride,
|
|
16
|
+
FormSubmitState,
|
|
17
|
+
RenderChildren,
|
|
18
|
+
RepliesButtonState,
|
|
19
|
+
FeedbackScreenBaseProps,
|
|
20
|
+
FeedbackScreenRootProps,
|
|
21
|
+
FeedbackScreenBodyProps,
|
|
22
|
+
} from "../shared/types";
|
|
23
|
+
export { FeedbackProvider, useFeedbackUi } from "./context.js";
|
|
24
|
+
export {
|
|
25
|
+
Comment,
|
|
26
|
+
FeedbackBoard,
|
|
27
|
+
FeedbackEntry,
|
|
28
|
+
FeedbackForm,
|
|
29
|
+
type BoardRootProps,
|
|
30
|
+
type BoardSearchProps,
|
|
31
|
+
type CommentActionProps,
|
|
32
|
+
type CommentLikeProps,
|
|
33
|
+
type CommentRootProps,
|
|
34
|
+
type EntryRootProps,
|
|
35
|
+
type EntryUpvoteProps,
|
|
36
|
+
type FormSubmitProps,
|
|
37
|
+
type RepliesButtonProps,
|
|
38
|
+
} from "./primitives.js";
|
|
39
|
+
export { FeedbackScreen } from "./screen.js";
|