@beemafrica/ui 0.1.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.
@@ -0,0 +1,144 @@
1
+ import { Avatar, AvatarFallback } from "@beem/ui/components/avatar"
2
+ import { Button } from "@beem/ui/components/button"
3
+ import {
4
+ Collapsible,
5
+ CollapsibleContent,
6
+ CollapsibleTrigger,
7
+ } from "@beem/ui/components/collapsible"
8
+ import { cn } from "@beem/ui/lib/utils"
9
+ import { ChevronRightIcon } from "lucide-react"
10
+
11
+ interface History {
12
+ label: string
13
+ value: string
14
+ }
15
+ interface TicketProps {
16
+ key: number
17
+ user_initial?: string
18
+ user_name?: string
19
+ message?: string
20
+ time?: string
21
+ type?: string
22
+ history?: History[]
23
+ }
24
+
25
+ function Ticket({
26
+ user_initial,
27
+ type,
28
+ user_name,
29
+ message,
30
+ time,
31
+ history,
32
+ }: TicketProps) {
33
+ let avatar_background = ""
34
+ let container_background = ""
35
+ let border = ""
36
+ let ticket_type = ""
37
+ let pill_background = ""
38
+ let pill_text_color = ""
39
+ switch (type) {
40
+ case "system":
41
+ avatar_background = "bg-[#B8C6D1]"
42
+ container_background = "bg-[#F7FAFC]"
43
+ border = "border-[#E3EAF0]"
44
+ ticket_type = "System"
45
+ pill_text_color = "text-[#364550]"
46
+ pill_background = "bg-[#EEF2F5]"
47
+ break
48
+ case "notes":
49
+ avatar_background = "bg-[#f3a929]"
50
+ container_background = "bg-[#FFFBEB]"
51
+ border = "border-[#FDE9B8]"
52
+ ticket_type = "Internal Note"
53
+ pill_text_color = "text-[#B45309]"
54
+ pill_background = "bg-[#FEF3C7]"
55
+ break
56
+ case "user":
57
+ avatar_background = "bg-[#6B7B8D]"
58
+ container_background = "bg-[#FFFFFF]"
59
+ border = "border-[#D5DEE6]"
60
+ ticket_type = "Customer Email"
61
+ pill_text_color = "text-[#1A6B72]"
62
+ pill_background = "bg-[#EAF8F9]"
63
+ break
64
+ default:
65
+ avatar_background = "bg-[#6b7b8d]"
66
+ container_background = "bg-[#FFFFFF]"
67
+ border = "border-[#D5DEE6]"
68
+ break
69
+ }
70
+ return (
71
+ <div
72
+ className={cn(
73
+ container_background,
74
+ border,
75
+ "py-[14px] px-[16px] rounded-[12px] border shadow-sm flex flex-col gap-3"
76
+ )}
77
+ >
78
+ <div className="flex flex-row items-center justify-between">
79
+ <div className="flex flex-row gap-1.5 items-center">
80
+ <Avatar
81
+ className={cn(
82
+ avatar_background,
83
+ "inline-flex size-[30px] select-none items-center justify-center overflow-hidden rounded-full align-middle"
84
+ )}
85
+ >
86
+ <AvatarFallback
87
+ className={cn(
88
+ avatar_background,
89
+ "leading-1 flex size-full items-center justify-center text-[12px] text-white font-semibold"
90
+ )}
91
+ delayMs={600}
92
+ >
93
+ <p>{user_initial ?? "N/A"}</p>
94
+ </AvatarFallback>
95
+ </Avatar>
96
+
97
+ {user_name && <p className="font-bold text-black">{user_name}</p>}
98
+ <p
99
+ className={cn(
100
+ pill_background,
101
+ pill_text_color,
102
+ "py-[3px] px-[10px] rounded-[9999px] text-xs"
103
+ )}
104
+ >
105
+ {ticket_type}
106
+ </p>
107
+ </div>
108
+
109
+ {time && <p className="text-[#98A9B8] text-[11.5px]">{time} </p>}
110
+ </div>
111
+
112
+ {message && <p className="leading-snug">{message}</p>}
113
+ {history && history.length > 0 && (
114
+ <div className="border-t border-dashed">
115
+ <Collapsible>
116
+ <CollapsibleTrigger asChild>
117
+ <Button
118
+ variant="ghost"
119
+ className="group w-full hover:bg-transparent hover:text-inherit data-[state=open]:bg-transparent justify-start -ml-4"
120
+ >
121
+ <ChevronRightIcon className="group-data-[state=open]:rotate-90" />
122
+ Product details
123
+ </Button>
124
+ </CollapsibleTrigger>
125
+ <CollapsibleContent className="flex flex-col items-start gap-2 p-2.5 pt-0 text-sm max-h-[150px] overflow-y-auto scrollbar scrollbar-thin scrollbar-thumb-rounded-full scrollbar-track-rounded-full">
126
+ {history.map((hs, index) => {
127
+ return (
128
+ // biome-ignore lint/suspicious/noArrayIndexKey: <explanation>
129
+ <div key={index} className="">
130
+ {" "}
131
+ <div>{hs.label}</div>
132
+ <div>{hs.value}</div>
133
+ </div>
134
+ )
135
+ })}
136
+ </CollapsibleContent>
137
+ </Collapsible>
138
+ </div>
139
+ )}
140
+ </div>
141
+ )
142
+ }
143
+
144
+ export { Ticket }
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ import { type ClassValue, clsx } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,62 @@
1
+ @import "tailwindcss";
2
+
3
+ @custom-variant dark (&:is(.dark *));
4
+ @source "../**/*.{ts,tsx}";
5
+
6
+ @theme inline {
7
+ --font-heading: var(--beem-font-heading);
8
+ --font-sans: var(--beem-font-sans);
9
+ --font-mono: var(--beem-font-mono);
10
+ --color-sidebar-ring: var(--sidebar-ring);
11
+ --color-sidebar-border: var(--sidebar-border);
12
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
13
+ --color-sidebar-accent: var(--sidebar-accent);
14
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
15
+ --color-sidebar-primary: var(--sidebar-primary);
16
+ --color-sidebar-foreground: var(--sidebar-foreground);
17
+ --color-sidebar: var(--sidebar);
18
+ --color-chart-5: var(--chart-5);
19
+ --color-chart-4: var(--chart-4);
20
+ --color-chart-3: var(--chart-3);
21
+ --color-chart-2: var(--chart-2);
22
+ --color-chart-1: var(--chart-1);
23
+ --color-ring: var(--ring);
24
+ --color-input: var(--input);
25
+ --color-border: var(--border);
26
+ --color-destructive: var(--destructive);
27
+ --color-accent-foreground: var(--accent-foreground);
28
+ --color-accent: var(--accent);
29
+ --color-muted-foreground: var(--muted-foreground);
30
+ --color-muted: var(--muted);
31
+ --color-secondary-foreground: var(--secondary-foreground);
32
+ --color-secondary: var(--secondary);
33
+ --color-primary-foreground: var(--primary-foreground);
34
+ --color-primary: var(--primary);
35
+ --color-popover-foreground: var(--popover-foreground);
36
+ --color-popover: var(--popover);
37
+ --color-card-foreground: var(--card-foreground);
38
+ --color-card: var(--card);
39
+ --color-foreground: var(--foreground);
40
+ --color-background: var(--background);
41
+ --radius-sm: calc(var(--radius) * 0.6);
42
+ --radius-md: calc(var(--radius) * 0.8);
43
+ --radius-lg: var(--radius);
44
+ --radius-xl: calc(var(--radius) * 1.4);
45
+ --radius-2xl: calc(var(--radius) * 1.8);
46
+ --radius-3xl: calc(var(--radius) * 2.2);
47
+ --radius-4xl: calc(var(--radius) * 2.6);
48
+ }
49
+
50
+ @layer base {
51
+ * {
52
+ @apply border-border outline-ring/50;
53
+ }
54
+ body {
55
+ @apply bg-background text-foreground;
56
+ font-family: var(--beem-font-sans);
57
+ }
58
+ button:not(:disabled),
59
+ [role="button"]:not(:disabled) {
60
+ cursor: pointer;
61
+ }
62
+ }
@@ -0,0 +1,68 @@
1
+ @theme inline {
2
+ --font-heading: var(--beem-font-heading);
3
+ --font-sans: var(--beem-font-sans);
4
+ --font-mono: var(--beem-font-mono);
5
+
6
+ /* Semantic / shadcn tokens (from semantic.css) */
7
+ --color-sidebar-ring: var(--sidebar-ring);
8
+ --color-sidebar-border: var(--sidebar-border);
9
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
10
+ --color-sidebar-accent: var(--sidebar-accent);
11
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
12
+ --color-sidebar-primary: var(--sidebar-primary);
13
+ --color-sidebar-foreground: var(--sidebar-foreground);
14
+ --color-sidebar: var(--sidebar);
15
+ --color-chart-5: var(--chart-5);
16
+ --color-chart-4: var(--chart-4);
17
+ --color-chart-3: var(--chart-3);
18
+ --color-chart-2: var(--chart-2);
19
+ --color-chart-1: var(--chart-1);
20
+ --color-ring: var(--ring);
21
+ --color-input: var(--input);
22
+ --color-border: var(--border);
23
+ --color-destructive: var(--destructive);
24
+ --color-accent-foreground: var(--accent-foreground);
25
+ --color-accent: var(--accent);
26
+ --color-muted-foreground: var(--muted-foreground);
27
+ --color-muted: var(--muted);
28
+ --color-secondary-foreground: var(--secondary-foreground);
29
+ --color-secondary: var(--secondary);
30
+ --color-primary-foreground: var(--primary-foreground);
31
+ --color-primary: var(--primary);
32
+ --color-popover-foreground: var(--popover-foreground);
33
+ --color-popover: var(--popover);
34
+ --color-card-foreground: var(--card-foreground);
35
+ --color-card: var(--card);
36
+ --color-foreground: var(--foreground);
37
+ --color-background: var(--background);
38
+
39
+ /* Brand primitives (from beem.css) → bg/text/border-brand-* */
40
+ --color-brand-primary: var(--beem-brand);
41
+ --color-brand-primary-foreground: var(--beem-brand-foreground);
42
+ --color-brand-light: var(--beem-brand-light);
43
+ --color-brand-muted: var(--beem-brand-muted);
44
+ --color-brand-ste: var(--beem-brand-ste);
45
+ --color-brand-secondary: var(--beem-brand-secondary);
46
+ --color-brand-secondary-foreground: var(--beem-secondary-brand-foreground);
47
+ --color-brand-accent: var(--beem-accent);
48
+ --color-brand-accent-foreground: var(--beem-accent-foreground);
49
+
50
+ /* Raw beem surfaces (optional direct access) */
51
+ --color-beem-brand: var(--beem-brand);
52
+ --color-beem-brand-light: var(--beem-brand-light);
53
+ --color-beem-brand-muted: var(--beem-brand-muted);
54
+ --color-beem-brand-ste: var(--beem-brand-ste);
55
+ --color-beem-secondary: var(--beem-secondary);
56
+ --color-beem-secondary-brand: var(--beem-secondary-brand);
57
+ --color-beem-accent: var(--beem-accent);
58
+ --color-beem-border: var(--beem-border);
59
+ --color-beem-ring: var(--beem-ring);
60
+
61
+ --radius-sm: calc(var(--radius) * 0.6);
62
+ --radius-md: calc(var(--radius) * 0.8);
63
+ --radius-lg: var(--radius);
64
+ --radius-xl: calc(var(--radius) * 1.4);
65
+ --radius-2xl: calc(var(--radius) * 1.8);
66
+ --radius-3xl: calc(var(--radius) * 2.2);
67
+ --radius-4xl: calc(var(--radius) * 2.6);
68
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Beem brand theme — design system tokens.
3
+ *
4
+ * Brand:
5
+ * Primary: #33B1BA
6
+ * Yellow: #F3A929
7
+ * Font: Inter
8
+ *
9
+ * Primitive tokens (--beem-*) are mapped to shadcn/Tailwind
10
+ * semantic tokens in semantic.css.
11
+ */
12
+
13
+ :root {
14
+ /* Brand colors */
15
+ --beem-brand: #33b1ba;
16
+ --beem-brand-light: #eef6f7;
17
+ --beem-brand-foreground: #ffffff;
18
+ --beem-brand-secondary: #f3a929;
19
+ --beem-brand-ste: #eef2f5;
20
+
21
+
22
+ /* Lighter primary shade */
23
+ --beem-brand-muted: #d9f3f5;
24
+
25
+ /* Surfaces */
26
+ --beem-background: #ffffff;
27
+ --beem-foreground: #1f2937;
28
+
29
+ --beem-card: #ffffff;
30
+ --beem-card-foreground: #1f2937;
31
+
32
+ --beem-popover: #ffffff;
33
+ --beem-popover-foreground: #1f2937;
34
+
35
+ /* UI states */
36
+ --beem-secondary: #f4f7f8;
37
+ --beem-secondary-foreground: #374151;
38
+
39
+ --beem-muted: #eef2f5;
40
+ --beem-muted-foreground: #6b7280;
41
+
42
+ --beem-accent: #e6f7f8;
43
+ --beem-accent-foreground: #1f6f75;
44
+
45
+ /* Beem yellow */
46
+ --beem-secondary-brand: #f3a929;
47
+ --beem-secondary-brand-foreground: #1f2937;
48
+
49
+ /* Beem yellow / CTA */
50
+ --beem-destructive: #dc4a4a;
51
+
52
+ --beem-border: #d5dee6;
53
+ --beem-input: #e2e8ea;
54
+ --beem-ring: #33b1ba;
55
+
56
+ /* Sidebar */
57
+ --beem-sidebar: #f8fafa;
58
+ --beem-sidebar-foreground: #1f2937;
59
+
60
+ --beem-sidebar-primary: #33b1ba;
61
+ --beem-sidebar-primary-foreground: #ffffff;
62
+
63
+ --beem-sidebar-accent: #e6f7f8;
64
+ --beem-sidebar-accent-foreground: #1f6f75;
65
+
66
+ --beem-sidebar-border: #e2e8ea;
67
+ --beem-sidebar-ring: #33b1ba;
68
+
69
+ /* Charts */
70
+ --beem-chart-1: #33b1ba;
71
+ --beem-chart-2: #5fc2c9;
72
+ --beem-chart-3: #89d3d8;
73
+ --beem-chart-4: #b3e4e7;
74
+ --beem-chart-5: #d9f3f5;
75
+
76
+ /* Typography & shape */
77
+ --beem-font-sans: Inter, ui-sans-serif, system-ui, sans-serif;
78
+ --beem-font-heading: Inter, ui-sans-serif, system-ui, sans-serif;
79
+ --beem-font-mono:
80
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
81
+
82
+ --beem-radius: 0.5rem;
83
+ }
84
+
85
+ /* Beem dark theme */
86
+ .dark {
87
+ /* Brand */
88
+ --beem-brand: #5fc2c9;
89
+ --beem-brand-light: #164b50;
90
+ --beem-brand-foreground: #103b3e;
91
+ --beem-brand-secondary: #f3a929;
92
+ --beem-brand-ste: #223031;
93
+ --beem-brand-muted: #164b50;
94
+
95
+ /* Surfaces */
96
+ --beem-background: #11191a;
97
+ --beem-foreground: #f4fafa;
98
+
99
+ --beem-card: #182223;
100
+ --beem-card-foreground: #f4fafa;
101
+
102
+ --beem-popover: #182223;
103
+ --beem-popover-foreground: #f4fafa;
104
+
105
+ /* UI states */
106
+ --beem-secondary: #223031;
107
+ --beem-secondary-foreground: #f4fafa;
108
+
109
+ --beem-muted: #223031;
110
+ --beem-muted-foreground: #a9b9ba;
111
+
112
+ --beem-accent: #164b50;
113
+ --beem-accent-foreground: #e6f7f8;
114
+
115
+ --beem-secondary-brand: #f3a929;
116
+ --beem-secondary-brand-foreground: #ffffff;
117
+
118
+ /* States */
119
+ --beem-destructive: #f06a6a;
120
+
121
+ --beem-border: rgba(255, 255, 255, 0.12);
122
+ --beem-input: rgba(255, 255, 255, 0.16);
123
+ --beem-ring: #5fc2c9;
124
+
125
+ /* Sidebar */
126
+ --beem-sidebar: #182223;
127
+ --beem-sidebar-foreground: #f4fafa;
128
+
129
+ --beem-sidebar-primary: #5fc2c9;
130
+ --beem-sidebar-primary-foreground: #103b3e;
131
+
132
+ --beem-sidebar-accent: #223031;
133
+ --beem-sidebar-accent-foreground: #f4fafa;
134
+
135
+ --beem-sidebar-border: rgba(255, 255, 255, 0.12);
136
+ --beem-sidebar-ring: #5fc2c9;
137
+
138
+ /* Charts */
139
+ --beem-chart-1: #5fc2c9;
140
+ --beem-chart-2: #7ccdd2;
141
+ --beem-chart-3: #99d9dd;
142
+ --beem-chart-4: #b6e5e8;
143
+ --beem-chart-5: #d3f1f2;
144
+
145
+ /* Typography */
146
+ --beem-font-sans: Inter, ui-sans-serif, system-ui, sans-serif;
147
+ --beem-font-heading: Inter, ui-sans-serif, system-ui, sans-serif;
148
+ --beem-font-mono:
149
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
150
+
151
+ --beem-radius: 0.5rem;
152
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Maps Beem brand tokens → shadcn semantic CSS variables.
3
+ * You usually don't need to edit this file — change theme/beem.css instead.
4
+ */
5
+
6
+ :root {
7
+ --background: var(--beem-background);
8
+ --foreground: var(--beem-foreground);
9
+ --card: var(--beem-card);
10
+ --card-foreground: var(--beem-card-foreground);
11
+ --popover: var(--beem-popover);
12
+ --popover-foreground: var(--beem-popover-foreground);
13
+ --primary: var(--beem-brand);
14
+ --brand-light: var(--beem-brand-light);
15
+ --primary-foreground: var(--beem-brand-foreground);
16
+ --secondary: var(--beem-brand-secondary);
17
+ --secondary-foreground: var(--beem-secondary-foreground);
18
+ --muted: var(--beem-muted);
19
+ --muted-foreground: var(--beem-muted-foreground);
20
+ --accent: var(--beem-accent);
21
+ --accent-foreground: var(--beem-accent-foreground);
22
+ --destructive: var(--beem-destructive);
23
+ --border: var(--beem-border);
24
+ --input: var(--beem-input);
25
+ --ring: var(--beem-ring);
26
+ --chart-1: var(--beem-chart-1);
27
+ --chart-2: var(--beem-chart-2);
28
+ --chart-3: var(--beem-chart-3);
29
+ --chart-4: var(--beem-chart-4);
30
+ --chart-5: var(--beem-chart-5);
31
+ --radius: var(--beem-radius);
32
+ --sidebar: var(--beem-sidebar);
33
+ --sidebar-foreground: var(--beem-sidebar-foreground);
34
+ --sidebar-primary: var(--beem-sidebar-primary);
35
+ --sidebar-primary-foreground: var(--beem-sidebar-primary-foreground);
36
+ --sidebar-accent: var(--beem-sidebar-accent);
37
+ --sidebar-accent-foreground: var(--beem-sidebar-accent-foreground);
38
+ --sidebar-border: var(--beem-sidebar-border);
39
+ --sidebar-ring: var(--beem-sidebar-ring);
40
+ }
41
+
42
+ .dark {
43
+ --background: var(--beem-background);
44
+ --foreground: var(--beem-foreground);
45
+ --card: var(--beem-card);
46
+ --card-foreground: var(--beem-card-foreground);
47
+ --popover: var(--beem-popover);
48
+ --popover-foreground: var(--beem-popover-foreground);
49
+ --primary: var(--beem-brand);
50
+ --brand-light: var(--beem-brand-light);
51
+ --primary-foreground: var(--beem-brand-foreground);
52
+ --secondary: var(--beem-secondary);
53
+ --secondary-foreground: var(--beem-secondary-foreground);
54
+ --muted: var(--beem-muted);
55
+ --muted-foreground: var(--beem-muted-foreground);
56
+ --accent: var(--beem-accent);
57
+ --accent-foreground: var(--beem-accent-foreground);
58
+ --destructive: var(--beem-destructive);
59
+ --border: var(--beem-border);
60
+ --input: var(--beem-input);
61
+ --ring: var(--beem-ring);
62
+ --chart-1: var(--beem-chart-1);
63
+ --chart-2: var(--beem-chart-2);
64
+ --chart-3: var(--beem-chart-3);
65
+ --chart-4: var(--beem-chart-4);
66
+ --chart-5: var(--beem-chart-5);
67
+ --sidebar: var(--beem-sidebar);
68
+ --sidebar-foreground: var(--beem-sidebar-foreground);
69
+ --sidebar-primary: var(--beem-sidebar-primary);
70
+ --sidebar-primary-foreground: var(--beem-sidebar-primary-foreground);
71
+ --sidebar-accent: var(--beem-sidebar-accent);
72
+ --sidebar-accent-foreground: var(--beem-sidebar-accent-foreground);
73
+ --sidebar-border: var(--beem-sidebar-border);
74
+ --sidebar-ring: var(--beem-sidebar-ring);
75
+ }