@geenius/feedback 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +16 -3
- package/packages/convex/dist/index.d.ts +192 -0
- package/packages/convex/dist/index.js +239 -0
- package/packages/convex/dist/index.js.map +1 -0
- package/packages/react/README.md +1 -1
- package/packages/react/dist/index.d.ts +146 -0
- package/packages/react/dist/index.js +545 -0
- package/packages/react/dist/index.js.map +1 -0
- package/packages/react-css/README.md +1 -1
- package/packages/react-css/dist/index.css +965 -0
- package/packages/react-css/dist/index.css.map +1 -0
- package/packages/react-css/dist/index.d.ts +49 -0
- package/packages/react-css/dist/index.js +228 -0
- package/packages/react-css/dist/index.js.map +1 -0
- package/packages/shared/README.md +1 -1
- package/packages/shared/dist/index.d.ts +115 -0
- package/packages/shared/dist/index.js +112 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/solidjs/README.md +1 -1
- package/packages/solidjs/dist/index.d.ts +128 -0
- package/packages/solidjs/dist/index.js +289 -0
- package/packages/solidjs/dist/index.js.map +1 -0
- package/packages/solidjs-css/README.md +1 -1
- package/packages/solidjs-css/dist/index.css +965 -0
- package/packages/solidjs-css/dist/index.css.map +1 -0
- package/packages/solidjs-css/dist/index.d.ts +2 -0
- package/packages/solidjs-css/dist/index.js +29 -0
- package/packages/solidjs-css/dist/index.js.map +1 -0
- package/.changeset/config.json +0 -11
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -23
- package/.github/workflows/release.yml +0 -29
- package/.nvmrc +0 -1
- package/.project/ACCOUNT.yaml +0 -4
- package/.project/IDEAS.yaml +0 -7
- package/.project/PROJECT.yaml +0 -11
- package/.project/ROADMAP.yaml +0 -15
- package/CODE_OF_CONDUCT.md +0 -16
- package/CONTRIBUTING.md +0 -26
- package/SECURITY.md +0 -15
- package/SUPPORT.md +0 -8
- package/packages/convex/package.json +0 -42
- package/packages/convex/src/index.ts +0 -3
- package/packages/convex/src/mutations.ts +0 -88
- package/packages/convex/src/queries.ts +0 -78
- package/packages/convex/src/schema.ts +0 -47
- package/packages/convex/tsconfig.json +0 -18
- package/packages/convex/tsup.config.ts +0 -17
- package/packages/react/package.json +0 -49
- package/packages/react/src/components/FeedbackCard.tsx +0 -51
- package/packages/react/src/components/FeedbackForm.tsx +0 -43
- package/packages/react/src/components/FeedbackWidget.tsx +0 -32
- package/packages/react/src/components/NPSSurvey.tsx +0 -62
- package/packages/react/src/components/index.ts +0 -4
- package/packages/react/src/hooks/index.ts +0 -5
- package/packages/react/src/hooks/useFeedback.ts +0 -23
- package/packages/react/src/hooks/useFeedbackAdmin.ts +0 -24
- package/packages/react/src/hooks/useFeedbackForm.ts +0 -35
- package/packages/react/src/hooks/useNPS.ts +0 -26
- package/packages/react/src/index.tsx +0 -13
- package/packages/react/src/pages/FeedbackAdminPage.tsx +0 -71
- package/packages/react/src/pages/FeedbackPublicPage.tsx +0 -42
- package/packages/react/src/pages/FeedbackWidgetPage.tsx +0 -25
- package/packages/react/src/pages/index.ts +0 -3
- package/packages/react/tsconfig.json +0 -19
- package/packages/react/tsup.config.ts +0 -12
- package/packages/react-css/package.json +0 -36
- package/packages/react-css/src/components/index.ts +0 -5
- package/packages/react-css/src/components/index.tsx +0 -107
- package/packages/react-css/src/hooks/index.ts +0 -2
- package/packages/react-css/src/index.tsx +0 -5
- package/packages/react-css/src/pages/FeedbackAdminPage.tsx +0 -112
- package/packages/react-css/src/pages/FeedbackPage.tsx +0 -76
- package/packages/react-css/src/styles.css +0 -281
- package/packages/react-css/tsconfig.json +0 -19
- package/packages/react-css/tsup.config.ts +0 -10
- package/packages/shared/package.json +0 -44
- package/packages/shared/src/__tests__/feedback.test.ts +0 -72
- package/packages/shared/src/config.ts +0 -49
- package/packages/shared/src/index.ts +0 -111
- package/packages/shared/src/types.ts +0 -59
- package/packages/shared/tsconfig.json +0 -18
- package/packages/shared/tsup.config.ts +0 -11
- package/packages/shared/vitest.config.ts +0 -4
- package/packages/solidjs/package.json +0 -45
- package/packages/solidjs/src/components.tsx +0 -72
- package/packages/solidjs/src/index.tsx +0 -3
- package/packages/solidjs/src/primitives.ts +0 -49
- package/packages/solidjs/tsconfig.json +0 -20
- package/packages/solidjs/tsup.config.ts +0 -12
- package/packages/solidjs-css/package.json +0 -32
- package/packages/solidjs-css/src/index.tsx +0 -4
- package/packages/solidjs-css/src/pages/FeedbackAdminPage.tsx +0 -78
- package/packages/solidjs-css/src/pages/FeedbackPage.tsx +0 -65
- package/packages/solidjs-css/src/primitives/index.ts +0 -1
- package/packages/solidjs-css/src/styles.css +0 -281
- package/packages/solidjs-css/tsconfig.json +0 -20
- package/packages/solidjs-css/tsup.config.ts +0 -10
- package/pnpm-workspace.yaml +0 -2
- package/tsconfig.json +0 -23
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/FeedbackProvider.tsx","../src/primitives.ts","../src/components.tsx","../src/pages/FeedbackPublicPage.tsx","../src/pages/FeedbackAdminPage.tsx","../src/pages/FeedbackWidgetPage.tsx"],"names":["createSignal","calcNPSStats","Show","For","FEEDBACK_TYPES","TYPE_CONFIG","STATUS_CONFIG","PRIORITY_CONFIG","formatRelativeTime"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext, type JSX } from 'solid-js'\nimport type { FeedbackConfig } from '@geenius/feedback-shared'\nimport { defaultFeedbackConfig } from '@geenius/feedback-shared'\n\nconst FeedbackContext = createContext<FeedbackConfig>(defaultFeedbackConfig)\n\nexport function FeedbackProvider(props: { children: JSX.Element; config?: Partial<FeedbackConfig> }) {\n const value: FeedbackConfig = { ...defaultFeedbackConfig, ...props.config }\n return <FeedbackContext.Provider value={value}>{props.children}</FeedbackContext.Provider>\n}\n\nexport function useFeedbackConfig(): FeedbackConfig {\n return useContext(FeedbackContext)!\n}\n","import { createSignal, createMemo } from 'solid-js'\nimport type { FeedbackItem, FeedbackType, FeedbackStatus, FeedbackPriority, FeedbackStats, NPSResponse } from '@geenius/feedback-shared'\nimport { calcFeedbackStats, calcNPSStats } from '@geenius/feedback-shared'\n\nexport function createFeedback(items: () => FeedbackItem[] | undefined) {\n const [typeFilter, setTypeFilter] = createSignal<FeedbackType | undefined>()\n const [search, setSearch] = createSignal('')\n const [sort, setSort] = createSignal<'newest' | 'votes'>('newest')\n const isLoading = createMemo(() => items() === undefined)\n const stats = createMemo(() => calcFeedbackStats(items() ?? []))\n const filtered = createMemo(() => {\n let r = items() ?? []; const tf = typeFilter(); if (tf) r = r.filter(i => i.type === tf)\n const q = search().toLowerCase(); if (q) r = r.filter(i => i.title.toLowerCase().includes(q) || i.description.toLowerCase().includes(q))\n if (sort() === 'votes') r = [...r].sort((a, b) => b.votes - a.votes)\n return r\n })\n return { items: filtered, stats, isLoading, typeFilter, setTypeFilter, search, setSearch, sort, setSort }\n}\n\nexport function createFeedbackForm(submitFn: (data: { type: FeedbackType; title: string; description: string }) => Promise<string>) {\n const [type, setType] = createSignal<FeedbackType>('general')\n const [title, setTitle] = createSignal(''); const [desc, setDesc] = createSignal('')\n const [isSubmitting, setIsSubmitting] = createSignal(false); const [error, setError] = createSignal<string | null>(null); const [success, setSuccess] = createSignal(false)\n const submit = async () => {\n if (!title().trim()) { setError('Title required'); return }; if (desc().length < 10) { setError('Description must be 10+ chars'); return }\n setIsSubmitting(true); setError(null)\n try { await submitFn({ type: type(), title: title(), description: desc() }); setSuccess(true); setTitle(''); setDesc('') }\n catch (e) { setError(e instanceof Error ? e.message : 'Failed') } finally { setIsSubmitting(false) }\n }\n const reset = () => { setType('general'); setTitle(''); setDesc(''); setError(null); setSuccess(false) }\n return { type, setType, title, setTitle, description: desc, setDescription: setDesc, submit, isSubmitting, error, success, reset }\n}\n\nexport function createNPS(submitFn: (score: number, comment?: string) => Promise<void>, intervalDays = 90) {\n const NPS_KEY = 'geenius-nps-last-shown'\n const [isSubmitting, setIsSubmitting] = createSignal(false)\n\n // Check interval: show survey if never shown OR if enough days have passed\n const shouldShow = () => {\n if (typeof window === 'undefined') return false\n const last = localStorage.getItem(NPS_KEY)\n if (!last) return true\n const daysSince = (Date.now() - Number(last)) / (1000 * 60 * 60 * 24)\n return daysSince >= intervalDays\n }\n const [showSurvey, setShowSurvey] = createSignal(shouldShow())\n\n const submit = async (score: number, comment?: string) => {\n setIsSubmitting(true)\n try { await submitFn(score, comment); localStorage.setItem(NPS_KEY, String(Date.now())); setShowSurvey(false) }\n finally { setIsSubmitting(false) }\n }\n const dismiss = () => { setShowSurvey(false); localStorage.setItem(NPS_KEY, String(Date.now())) }\n return { submit, isSubmitting, showSurvey, dismiss }\n}\n\nexport function createFeedbackAdmin(items: () => FeedbackItem[] | undefined, mutations: { updateStatus: (id: string, s: FeedbackStatus, note?: string) => Promise<void>; updatePriority: (id: string, p: FeedbackPriority) => Promise<void>; deleteFeedback: (id: string) => Promise<void> }) {\n const [search, setSearch] = createSignal('')\n const stats = createMemo(() => calcFeedbackStats(items() ?? []))\n const filtered = createMemo(() => { const q = search().toLowerCase(); return q ? (items() ?? []).filter(i => i.title.toLowerCase().includes(q)) : (items() ?? []) })\n return { items: filtered, stats, search, setSearch, isLoading: createMemo(() => items() === undefined), ...mutations }\n}\n","import { Show, For, createSignal } from 'solid-js'\nimport type { FeedbackItem, FeedbackType, FeedbackStatus, FeedbackPriority, NPSResponse } from '@geenius/feedback-shared'\nimport { STATUS_CONFIG, PRIORITY_CONFIG, TYPE_CONFIG, FEEDBACK_TYPES, formatRelativeTime, calcNPSStats } from '@geenius/feedback-shared'\n\nexport function StatusBadge(props: { status: FeedbackStatus }) {\n const cfg = () => STATUS_CONFIG[props.status]\n return <span class=\"inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-[10px] font-medium\" style={{ background: `${cfg().color}22`, color: cfg().color }}><span>{cfg().emoji}</span>{cfg().label}</span>\n}\n\nexport function PriorityBadge(props: { priority: FeedbackPriority }) {\n const cfg = () => PRIORITY_CONFIG[props.priority]\n return <span class=\"rounded-full px-2 py-0.5 text-[10px] font-medium\" style={{ background: `${cfg().color}22`, color: cfg().color }}>{cfg().label}</span>\n}\n\nexport function TypeBadge(props: { type: FeedbackType }) {\n const cfg = () => TYPE_CONFIG[props.type]\n return <span class=\"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium\" style={{ background: `${cfg().color}22`, color: cfg().color }}><span>{cfg().icon}</span>{cfg().label}</span>\n}\n\nexport function FeedbackCard(props: { item: FeedbackItem; onVote?: (id: string) => void; hasVoted?: boolean }) {\n return (\n <div class=\"group flex gap-3 rounded-xl border border-white/8 bg-white/[0.02] p-4 hover:border-indigo-500/20\">\n <Show when={props.onVote}><button type=\"button\" onClick={() => props.onVote?.(props.item.id)}\n class={`flex flex-col items-center gap-0.5 rounded-lg px-2 py-1.5 text-xs font-bold ${props.hasVoted ? 'bg-indigo-500/15 text-indigo-400' : 'bg-white/5 text-white/30 hover:bg-white/10'}`}>\n <span class=\"text-sm\">{props.hasVoted ? '▲' : '△'}</span><span>{props.item.votes}</span>\n </button></Show>\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-2 mb-1 flex-wrap\"><TypeBadge type={props.item.type} /><StatusBadge status={props.item.status} /></div>\n <h3 class=\"text-sm font-semibold text-white/90 mb-0.5 truncate\">{props.item.title}</h3>\n <p class=\"text-xs text-white/40 line-clamp-2\">{props.item.description}</p>\n <div class=\"mt-2 text-[10px] text-white/25\">{formatRelativeTime(props.item.createdAt)}</div>\n </div>\n </div>\n )\n}\n\nexport function FeedbackWidget(props: { onSubmit: (data: { type: FeedbackType; title: string; description: string }) => Promise<string> }) {\n const [isOpen, setIsOpen] = createSignal(false)\n const [type, setType] = createSignal<FeedbackType>('general')\n const [title, setTitle] = createSignal(''); const [desc, setDesc] = createSignal('')\n const [submitting, setSubmitting] = createSignal(false); const [done, setDone] = createSignal(false)\n const submit = async () => { setSubmitting(true); try { await props.onSubmit({ type: type(), title: title(), description: desc() }); setDone(true) } finally { setSubmitting(false) } }\n return (<>\n <button type=\"button\" onClick={() => setIsOpen(true)} class=\"fixed top-1/2 right-0 -translate-y-1/2 z-40 rounded-l-xl bg-indigo-600 px-2 py-4 text-white shadow-lg hover:bg-indigo-500\" style={{ \"writing-mode\": \"vertical-rl\" }}><span class=\"text-xs font-medium tracking-wider\">Feedback</span></button>\n <Show when={isOpen()}>\n <div class=\"fixed inset-0 z-50 flex justify-end\" onClick={() => setIsOpen(false)}>\n <div class=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" />\n <div class=\"relative w-full max-w-md bg-[#0f0f17] border-l border-white/10 p-6\" onClick={e => e.stopPropagation()}>\n <div class=\"mb-6 flex items-center justify-between\"><h2 class=\"text-lg font-bold text-white\">Send Feedback</h2><button type=\"button\" onClick={() => setIsOpen(false)} class=\"text-white/30 hover:text-white/50\">✕</button></div>\n <Show when={!done()} fallback={<div class=\"text-center py-8\"><div class=\"text-4xl mb-3\">🎉</div><p class=\"text-sm text-white/80\">Thank you!</p></div>}>\n <div class=\"flex gap-1.5 mb-4\"><For each={FEEDBACK_TYPES}>{t => <button type=\"button\" onClick={() => setType(t)} class={`flex items-center gap-1 rounded-lg px-3 py-2 text-xs font-medium ${type() === t ? 'text-white' : 'bg-white/5 text-white/50'}`} style={type() === t ? { background: TYPE_CONFIG[t].color } : undefined}>{TYPE_CONFIG[t].icon} {TYPE_CONFIG[t].label}</button>}</For></div>\n <input type=\"text\" placeholder=\"Title…\" value={title()} onInput={e => setTitle((e.target as HTMLInputElement).value)} class=\"w-full rounded-xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white placeholder-white/30 outline-none mb-3\" />\n <textarea placeholder=\"Description…\" value={desc()} onInput={e => setDesc((e.target as HTMLTextAreaElement).value)} rows={4} class=\"w-full rounded-xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white placeholder-white/30 outline-none resize-none mb-4\" />\n <button type=\"button\" onClick={submit} disabled={submitting()} class=\"w-full rounded-lg bg-indigo-600 py-2.5 text-sm font-medium text-white hover:bg-indigo-500 disabled:opacity-50\">{submitting() ? 'Submitting…' : 'Submit'}</button>\n </Show>\n </div>\n </div>\n </Show>\n </>)\n}\n\nexport function NPSSurvey(props: { onSubmit: (score: number, comment?: string) => void; onDismiss: () => void }) {\n const [score, setScore] = createSignal<number | null>(null)\n const [comment, setComment] = createSignal(''); const [step, setStep] = createSignal<'score'|'comment'|'thanks'>('score')\n return (\n <div class=\"fixed bottom-6 right-6 z-50 w-96 rounded-2xl border border-white/10 bg-[#111118] p-6 shadow-2xl\">\n <Show when={step() === 'score'}><div><div class=\"mb-1 flex items-center justify-between\"><h3 class=\"text-sm font-semibold text-white/90\">How likely to recommend us?</h3><button type=\"button\" onClick={props.onDismiss} class=\"text-white/20\">✕</button></div><div class=\"flex gap-1 mt-3\"><For each={Array.from({length:11},(_,i)=>i)}>{i => <button type=\"button\" onClick={() => { setScore(i); setStep('comment') }} class=\"flex-1 rounded-lg py-2.5 text-xs font-bold bg-white/5 text-white/50 hover:bg-white/10\">{i}</button>}</For></div></div></Show>\n <Show when={step() === 'comment'}><div><p class=\"text-sm font-semibold text-white/90 mb-3\">Score: {score()}</p><textarea value={comment()} onInput={e => setComment((e.target as HTMLTextAreaElement).value)} rows={3} class=\"w-full rounded-xl border border-white/10 bg-white/5 px-3 py-2 text-sm text-white outline-none resize-none mb-3\" /><button type=\"button\" onClick={() => { props.onSubmit(score()!, comment() || undefined); setStep('thanks') }} class=\"w-full rounded-lg bg-indigo-600 py-2 text-xs text-white\">Submit</button></div></Show>\n <Show when={step() === 'thanks'}><div class=\"text-center py-4\"><div class=\"text-3xl mb-2\">🎉</div><p class=\"text-sm text-white/80\">Thank you!</p></div></Show>\n </div>\n )\n}\n\nexport function FeedbackList(props: { items: FeedbackItem[]; onVote?: (id: string) => void; votedIds?: string[] }) {\n return (\n <Show when={props.items.length > 0} fallback={<div class=\"flex flex-col items-center py-16\"><div class=\"mb-3 text-5xl opacity-20\">💬</div><p class=\"text-sm text-white/40\">No feedback yet</p></div>}>\n <div class=\"space-y-2\"><For each={props.items}>{item => <FeedbackCard item={item} onVote={props.onVote} hasVoted={props.votedIds?.includes(item.id)} />}</For></div>\n </Show>\n )\n}\n\nexport function FeedbackTypeSelector(props: { value: FeedbackType; onChange: (t: FeedbackType) => void }) {\n return (\n <div class=\"flex gap-1.5\">\n <For each={FEEDBACK_TYPES}>{t =>\n <button type=\"button\" onClick={() => props.onChange(t)}\n class={`flex items-center gap-1.5 rounded-lg px-3 py-2 text-xs font-medium ${props.value === t ? 'text-white' : 'bg-white/5 text-white/50 hover:bg-white/10'}`}\n style={props.value === t ? { background: TYPE_CONFIG[t].color } : undefined}><span>{TYPE_CONFIG[t].icon}</span>{TYPE_CONFIG[t].label}</button>\n }</For>\n </div>\n )\n}\n\nexport function FeedbackForm(props: { onSubmit: (data: { type: FeedbackType; title: string; description: string }) => Promise<string>; onClose?: () => void }) {\n const [type, setType] = createSignal<FeedbackType>('general')\n const [title, setTitle] = createSignal(''); const [desc, setDesc] = createSignal('')\n const [submitting, setSubmitting] = createSignal(false); const [error, setError] = createSignal<string | null>(null); const [success, setSuccess] = createSignal(false)\n const submit = async () => {\n if (!title().trim()) { setError('Title required'); return }; if (desc().length < 10) { setError('Description must be 10+ chars'); return }\n setSubmitting(true); setError(null)\n try { await props.onSubmit({ type: type(), title: title(), description: desc() }); setSuccess(true) }\n catch (e) { setError(e instanceof Error ? e.message : 'Failed') } finally { setSubmitting(false) }\n }\n return (\n <Show when={!success()} fallback={<div class=\"flex flex-col items-center py-8 text-center\"><div class=\"mb-3 text-4xl\">🎉</div><h3 class=\"text-base font-semibold text-white/90 mb-1\">Thank you!</h3><p class=\"text-sm text-white/50 mb-4\">Your feedback has been submitted.</p>\n <button type=\"button\" onClick={() => { setSuccess(false); props.onClose?.() }} class=\"rounded-lg bg-indigo-600 px-4 py-2 text-xs font-medium text-white\">Done</button></div>}>\n <div class=\"space-y-4\">\n <FeedbackTypeSelector value={type()} onChange={setType} />\n <input type=\"text\" placeholder=\"Short title for your feedback…\" value={title()} onInput={e => setTitle((e.target as HTMLInputElement).value)}\n class=\"w-full rounded-xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white placeholder-white/30 outline-none\" />\n <textarea placeholder=\"Describe your feedback in detail…\" value={desc()} onInput={e => setDesc((e.target as HTMLTextAreaElement).value)} rows={4}\n class=\"w-full rounded-xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white placeholder-white/30 outline-none resize-none\" />\n {error() && <p class=\"text-xs text-red-400\">{error()}</p>}\n <div class=\"flex justify-end gap-2\">\n <Show when={props.onClose}><button type=\"button\" onClick={props.onClose} class=\"rounded-lg border border-white/10 px-4 py-2 text-xs text-white/50 hover:bg-white/5\">Cancel</button></Show>\n <button type=\"button\" onClick={submit} disabled={submitting()} class=\"rounded-lg bg-indigo-600 px-5 py-2 text-xs font-medium text-white hover:bg-indigo-500 disabled:opacity-50\">{submitting() ? 'Submitting…' : 'Submit'}</button>\n </div>\n </div>\n </Show>\n )\n}\n\nexport function NPSResults(props: { responses: NPSResponse[] }) {\n const stats = () => calcNPSStats(props.responses)\n const total = () => stats().totalResponses || 1\n const scoreColor = () => stats().npsScore >= 50 ? 'text-emerald-400' : stats().npsScore >= 0 ? 'text-amber-400' : 'text-red-400'\n return (\n <div class=\"rounded-xl border border-white/8 bg-white/[0.02] p-5\">\n <div class=\"mb-4 flex items-center justify-between\"><h4 class=\"text-sm font-semibold text-white/80\">NPS Score</h4><span class={`text-3xl font-black tabular-nums ${scoreColor()}`}>{stats().npsScore}</span></div>\n <div class=\"mb-4 flex h-5 overflow-hidden rounded-full\">\n <div class=\"bg-red-500/70\" style={{ width: `${(stats().detractors / total()) * 100}%` }} />\n <div class=\"bg-amber-500/70\" style={{ width: `${(stats().passives / total()) * 100}%` }} />\n <div class=\"bg-emerald-500/70\" style={{ width: `${(stats().promoters / total()) * 100}%` }} />\n </div>\n <div class=\"grid grid-cols-3 gap-2 text-center text-xs\">\n <div><span class=\"block text-red-400 font-bold\">{stats().detractors}</span><span class=\"text-white/30\">Detractors</span></div>\n <div><span class=\"block text-amber-400 font-bold\">{stats().passives}</span><span class=\"text-white/30\">Passives</span></div>\n <div><span class=\"block text-emerald-400 font-bold\">{stats().promoters}</span><span class=\"text-white/30\">Promoters</span></div>\n </div>\n <div class=\"mt-3 pt-3 border-t border-white/5 flex justify-between text-xs text-white/40\"><span>Avg: {stats().averageScore}/10</span><span>{stats().totalResponses} responses</span></div>\n </div>\n )\n}\n","import { Show, For, createSignal } from 'solid-js'\nimport type { FeedbackItem, FeedbackType } from '@geenius/feedback-shared'\nimport { FEEDBACK_TYPES, TYPE_CONFIG } from '@geenius/feedback-shared'\nimport { createFeedback } from '../primitives'\nimport { FeedbackList } from '../components'\n\nexport function FeedbackPublicPage(props: { items: FeedbackItem[] | undefined; onVote?: (id: string) => void; votedIds?: string[] }) {\n const feedback = createFeedback(() => props.items)\n const [activeType, setActiveType] = createSignal<FeedbackType | 'all'>('all')\n\n return (\n <Show when={!feedback.isLoading()} fallback={\n <div class=\"min-h-screen bg-[#090a0f] px-6 py-12\"><div class=\"mx-auto max-w-3xl\">\n <div class=\"mb-8 h-10 w-48 animate-pulse rounded-lg bg-white/5\" />\n <div class=\"mb-6 flex gap-2\"><For each={Array.from({ length: 5 })}>{() => <div class=\"h-9 w-24 animate-pulse rounded-lg bg-white/5\" />}</For></div>\n <div class=\"space-y-3\"><For each={Array.from({ length: 4 })}>{() => <div class=\"h-24 animate-pulse rounded-xl bg-white/5\" />}</For></div>\n </div></div>\n }>\n <div class=\"min-h-screen bg-[#090a0f] text-white\">\n <div class=\"mx-auto max-w-3xl px-6 py-12\">\n <div class=\"mb-8\"><h1 class=\"text-2xl font-bold tracking-tight mb-1\">Feedback Board</h1><p class=\"text-sm text-white/40\">{feedback.stats().total} submissions · {feedback.stats().byStatus.open} open</p></div>\n <div class=\"mb-6 flex flex-wrap items-center gap-3\">\n <input type=\"text\" placeholder=\"Search feedback…\" value={feedback.search()} onInput={e => feedback.setSearch((e.target as HTMLInputElement).value)}\n class=\"w-56 rounded-xl border border-white/10 bg-white/5 px-4 py-2.5 text-sm text-white placeholder-white/30 outline-none\" />\n <div class=\"flex gap-1.5\">\n <button type=\"button\" onClick={() => { setActiveType('all'); feedback.setTypeFilter(undefined) }}\n class={`rounded-lg px-3 py-1.5 text-xs font-medium ${activeType() === 'all' ? 'bg-indigo-600 text-white' : 'bg-white/5 text-white/50 hover:bg-white/10'}`}>All ({feedback.stats().total})</button>\n <For each={FEEDBACK_TYPES}>{t =>\n <button type=\"button\" onClick={() => { setActiveType(t); feedback.setTypeFilter(t) }}\n class={`rounded-lg px-3 py-1.5 text-xs font-medium ${activeType() === t ? 'text-white' : 'bg-white/5 text-white/50 hover:bg-white/10'}`}\n style={activeType() === t ? { background: TYPE_CONFIG[t].color } : undefined}>{TYPE_CONFIG[t].icon} {TYPE_CONFIG[t].label} ({feedback.stats().byType[t]})</button>\n }</For>\n </div>\n <div class=\"ml-auto flex gap-1.5\">\n <button type=\"button\" onClick={() => feedback.setSort('newest')} class={`rounded-lg px-3 py-1.5 text-xs ${feedback.sort() === 'newest' ? 'bg-white/10 text-white/80' : 'text-white/40'}`}>Newest</button>\n <button type=\"button\" onClick={() => feedback.setSort('votes')} class={`rounded-lg px-3 py-1.5 text-xs ${feedback.sort() === 'votes' ? 'bg-white/10 text-white/80' : 'text-white/40'}`}>Top voted</button>\n </div>\n </div>\n <FeedbackList items={feedback.items()} onVote={props.onVote} votedIds={props.votedIds} />\n </div>\n </div>\n </Show>\n )\n}\n","import { Show, For } from 'solid-js'\nimport type { FeedbackItem, FeedbackStatus, FeedbackPriority, NPSResponse } from '@geenius/feedback-shared'\nimport { STATUS_CONFIG, PRIORITY_CONFIG, FEEDBACK_STATUSES, FEEDBACK_PRIORITIES, formatRelativeTime, TYPE_CONFIG } from '@geenius/feedback-shared'\nimport { createFeedbackAdmin } from '../primitives'\nimport { StatusBadge, PriorityBadge, TypeBadge, NPSResults } from '../components'\n\ninterface FeedbackAdminPageProps {\n items: FeedbackItem[] | undefined; npsResponses?: NPSResponse[]\n mutations: Parameters<typeof createFeedbackAdmin>[1]\n}\n\nexport function FeedbackAdminPage(props: FeedbackAdminPageProps) {\n const admin = createFeedbackAdmin(() => props.items, props.mutations)\n\n return (\n <Show when={!admin.isLoading()} fallback={\n <div class=\"min-h-screen bg-[#090a0f] px-6 py-12\"><div class=\"mx-auto max-w-6xl\">\n <div class=\"mb-8 h-10 w-48 animate-pulse rounded-lg bg-white/5\" />\n <div class=\"mb-6 grid grid-cols-4 gap-4\"><For each={Array.from({ length: 4 })}>{() => <div class=\"h-20 animate-pulse rounded-xl bg-white/5\" />}</For></div>\n <div class=\"h-96 animate-pulse rounded-xl bg-white/5\" />\n </div></div>\n }>\n <div class=\"min-h-screen bg-[#090a0f] text-white\"><div class=\"mx-auto max-w-6xl px-6 py-12\">\n <h1 class=\"text-2xl font-bold tracking-tight mb-8\">Feedback Admin</h1>\n <div class=\"mb-8 grid grid-cols-2 gap-4 md:grid-cols-5\">\n <StatCard label=\"Total\" value={admin.stats().total} icon=\"📊\" />\n <StatCard label=\"Open\" value={admin.stats().byStatus.open} icon=\"📬\" color=\"text-blue-400\" />\n <StatCard label=\"Planned\" value={admin.stats().byStatus.planned} icon=\"📋\" color=\"text-purple-300\" />\n <StatCard label=\"In Progress\" value={admin.stats().byStatus['in-progress']} icon=\"🚧\" color=\"text-indigo-300\" />\n <StatCard label=\"Done\" value={admin.stats().byStatus.done} icon=\"✅\" color=\"text-emerald-400\" />\n </div>\n\n <div class=\"grid gap-6 lg:grid-cols-3\">\n <div class=\"lg:col-span-2\">\n <div class=\"mb-4 flex items-center gap-3\">\n <input type=\"text\" placeholder=\"Search…\" value={admin.search()} onInput={e => admin.setSearch((e.target as HTMLInputElement).value)} class=\"w-64 rounded-xl border border-white/10 bg-white/5 px-4 py-2.5 text-sm text-white placeholder-white/30 outline-none\" />\n <span class=\"text-xs text-white/30\">{admin.items().length} items</span>\n </div>\n <div class=\"overflow-x-auto rounded-xl border border-white/8\">\n <table class=\"w-full text-sm\"><thead><tr class=\"border-b border-white/8 bg-white/[0.02]\"><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Type</th><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Title</th><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Status</th><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Priority</th><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Votes</th><th class=\"px-4 py-3 text-left text-xs font-medium text-white/40 uppercase\">Date</th><th class=\"px-4 py-3 text-right text-xs font-medium text-white/40 uppercase\">Actions</th></tr></thead>\n <tbody class=\"divide-y divide-white/5\"><For each={admin.items()}>{item =>\n <tr class=\"group hover:bg-white/[0.02]\">\n <td class=\"px-4 py-3\"><TypeBadge type={item.type} /></td>\n <td class=\"px-4 py-3 max-w-xs truncate text-white/80 font-medium\">{item.title}</td>\n <td class=\"px-4 py-3\"><select value={item.status} onChange={e => admin.updateStatus(item.id, (e.target as HTMLSelectElement).value as FeedbackStatus)} class=\"rounded border border-white/10 bg-white/5 px-1.5 py-0.5 text-xs text-white outline-none\"><For each={FEEDBACK_STATUSES}>{s => <option value={s}>{STATUS_CONFIG[s].label}</option>}</For></select></td>\n <td class=\"px-4 py-3\"><select value={item.priority} onChange={e => admin.updatePriority(item.id, (e.target as HTMLSelectElement).value as FeedbackPriority)} class=\"rounded border border-white/10 bg-white/5 px-1.5 py-0.5 text-xs text-white outline-none\"><For each={FEEDBACK_PRIORITIES}>{p => <option value={p}>{PRIORITY_CONFIG[p].label}</option>}</For></select></td>\n <td class=\"px-4 py-3 tabular-nums text-white/50\">{item.votes}</td>\n <td class=\"px-4 py-3 text-xs text-white/30\">{formatRelativeTime(item.createdAt)}</td>\n <td class=\"px-4 py-3 text-right\"><button type=\"button\" onClick={() => admin.deleteFeedback(item.id)} class=\"rounded px-2 py-1 text-xs text-white/20 hover:text-red-400 hover:bg-red-500/10 opacity-0 group-hover:opacity-100\">Delete</button></td>\n </tr>\n }</For></tbody></table>\n </div>\n </div>\n\n <div class=\"space-y-6\">\n <Show when={props.npsResponses}>{responses => <NPSResults responses={responses()} />}</Show>\n <div class=\"rounded-xl border border-white/8 bg-white/[0.02] p-5\">\n <h4 class=\"text-sm font-semibold text-white/80 mb-3\">By Type</h4>\n <For each={Object.entries(admin.stats().byType)}>{([t, c]) =>\n <div class=\"flex justify-between mb-1.5\"><span class=\"text-xs text-white/50 capitalize\">{TYPE_CONFIG[t as keyof typeof TYPE_CONFIG]?.icon} {t}</span><span class=\"text-xs font-bold text-white/70\">{c as number}</span></div>\n }</For>\n </div>\n </div>\n </div>\n </div></div>\n </Show>\n )\n}\n\nfunction StatCard(props: { label: string; value: number; icon: string; color?: string }) {\n return <div class=\"rounded-xl border border-white/8 bg-white/[0.02] p-4\"><div class=\"mb-2 flex items-center justify-between\"><span class=\"text-lg\">{props.icon}</span><span class={`text-2xl font-bold tabular-nums ${props.color ?? 'text-white/90'}`}>{props.value}</span></div><p class=\"text-xs text-white/40\">{props.label}</p></div>\n}\n","import type { FeedbackType } from '@geenius/feedback-shared'\nimport { FeedbackWidget } from '../components'\n\nexport function FeedbackWidgetPage(props: { onSubmit: (data: { type: FeedbackType; title: string; description: string }) => Promise<string> }) {\n return (\n <div class=\"min-h-screen bg-[#090a0f] text-white flex items-center justify-center\">\n <div class=\"text-center max-w-md\">\n <h1 class=\"text-2xl font-bold mb-2\">Feedback Widget</h1>\n <p class=\"text-sm text-white/40 mb-8\">Click the floating \"Feedback\" tab on the right edge to open the feedback form.</p>\n <div class=\"rounded-xl border border-white/8 bg-white/[0.02] p-6 text-left\">\n <h3 class=\"text-sm font-semibold text-white/80 mb-3\">Features</h3>\n <ul class=\"space-y-2 text-xs text-white/50\">\n <li class=\"flex items-center gap-2\"><span class=\"text-emerald-400\">✓</span> Floating edge tab trigger</li>\n <li class=\"flex items-center gap-2\"><span class=\"text-emerald-400\">✓</span> Type selector (Bug/Feature/Suggestion/General)</li>\n <li class=\"flex items-center gap-2\"><span class=\"text-emerald-400\">✓</span> Title + description form with validation</li>\n <li class=\"flex items-center gap-2\"><span class=\"text-emerald-400\">✓</span> Auto-captures page URL + browser</li>\n <li class=\"flex items-center gap-2\"><span class=\"text-emerald-400\">✓</span> Success confirmation</li>\n </ul>\n </div>\n </div>\n <FeedbackWidget onSubmit={props.onSubmit} />\n </div>\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
# ✦ @geenius-
|
|
1
|
+
# ✦ @geenius/feedback-solidjs-css\n\n> Geenius Feedback — SolidJS primitives (vanilla CSS variant)\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius/feedback-solidjs-css\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius/feedback-solidjs-css';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
|