@neoptocom/neopto-ui 0.4.1 → 0.5.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.
Files changed (40) hide show
  1. package/CONSUMER_SETUP.md +55 -36
  2. package/README.md +25 -9
  3. package/package.json +6 -1
  4. package/scripts/init.mjs +200 -0
  5. package/src/assets/agent-neopto-dark.svg +9 -0
  6. package/src/assets/agent-neopto.svg +9 -0
  7. package/src/components/Autocomplete.tsx +279 -0
  8. package/src/components/Avatar.tsx +83 -0
  9. package/src/components/AvatarGroup.tsx +53 -0
  10. package/src/components/Button.tsx +51 -0
  11. package/src/components/Chat/AnimatedBgCircle.tsx +51 -0
  12. package/src/components/Chat/AnimatedBgRectangle.tsx +55 -0
  13. package/src/components/Chat/ChatButton.tsx +132 -0
  14. package/src/components/Chat/index.ts +5 -0
  15. package/src/components/Chip.tsx +38 -0
  16. package/src/components/Counter.tsx +69 -0
  17. package/src/components/Icon.tsx +48 -0
  18. package/src/components/IconButton.tsx +89 -0
  19. package/src/components/Input.tsx +29 -0
  20. package/src/components/Modal.tsx +83 -0
  21. package/src/components/Search.tsx +244 -0
  22. package/src/components/Skeleton.tsx +29 -0
  23. package/src/components/Typo.tsx +93 -0
  24. package/src/index.ts +31 -0
  25. package/src/stories/Autocomplete.stories.tsx +41 -0
  26. package/src/stories/Avatar.stories.tsx +38 -0
  27. package/src/stories/AvatarGroup.stories.tsx +46 -0
  28. package/src/stories/Button.stories.tsx +103 -0
  29. package/src/stories/ChatButton.stories.tsx +94 -0
  30. package/src/stories/Chip.stories.tsx +36 -0
  31. package/src/stories/Counter.stories.tsx +35 -0
  32. package/src/stories/Icon.stories.tsx +34 -0
  33. package/src/stories/IconButton.stories.tsx +116 -0
  34. package/src/stories/Input.stories.tsx +38 -0
  35. package/src/stories/Search.stories.tsx +228 -0
  36. package/src/stories/Skeleton.stories.tsx +43 -0
  37. package/src/stories/Typo.stories.tsx +66 -0
  38. package/src/styles/library.css +35 -0
  39. package/src/styles/tailwind.css +36 -0
  40. package/src/styles/tokens.css +72 -0
@@ -0,0 +1,9 @@
1
+ <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
+ <rect x="0.280273" y="-0.00195312" width="36" height="36" fill="url(#pattern0_385_669)"/>
3
+ <defs>
4
+ <pattern id="pattern0_385_669" patternContentUnits="objectBoundingBox" width="1" height="1">
5
+ <use xlink:href="#image0_385_669" transform="scale(0.00195312)"/>
6
+ </pattern>
7
+ <image id="image0_385_669" width="512" height="512" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
8
+ </defs>
9
+ </svg>
@@ -0,0 +1,279 @@
1
+ import * as React from "react";
2
+ import { useId, useMemo, useRef, useState } from "react";
3
+ import { IconButton } from "./IconButton";
4
+ import Typo from "./Typo";
5
+ import Avatar from "./Avatar";
6
+ import AvatarGroup from "./AvatarGroup";
7
+
8
+ export type AutocompleteOption = {
9
+ label: string;
10
+ value: any;
11
+ image?: string;
12
+ group?: Array<{ name: string; image?: string }>;
13
+ };
14
+
15
+ export interface AutocompleteProps
16
+ extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
17
+ /** Label text displayed above the input */
18
+ title: string;
19
+ /** Array of options to display */
20
+ options: AutocompleteOption[] | string[];
21
+ /** Currently selected option */
22
+ selectedOption: AutocompleteOption | string | null;
23
+ /** Callback when an option is selected */
24
+ onSelect: (option: AutocompleteOption | string | null) => void;
25
+ /** Placeholder text for the input */
26
+ placeholder?: string;
27
+ /** Whether the component is disabled */
28
+ disabled?: boolean;
29
+ /** Maximum height of the options dropdown */
30
+ maxHeight?: number;
31
+ /** Optional id base (for accessibility hooks) */
32
+ id?: string;
33
+ }
34
+
35
+ export default function Autocomplete({
36
+ className = "",
37
+ title,
38
+ options,
39
+ selectedOption,
40
+ onSelect,
41
+ placeholder = "",
42
+ disabled = false,
43
+ maxHeight = 152,
44
+ id,
45
+ ...props
46
+ }: AutocompleteProps) {
47
+ const inputId = id ?? useId();
48
+ const listboxId = `${inputId}-listbox`;
49
+ const [searchQuery, setSearchQuery] = useState("");
50
+ const [open, setOpen] = useState(false);
51
+ const [activeIndex, setActiveIndex] = useState<number>(-1);
52
+ const rootRef = useRef<HTMLDivElement>(null);
53
+ const listRef = useRef<HTMLUListElement>(null);
54
+
55
+ // Normalize options
56
+ const normalizedOptions: AutocompleteOption[] = useMemo(() => {
57
+ if (Array.isArray(options) && typeof options[0] === "string") {
58
+ return (options as string[]).map((str) => ({ label: str, value: str }));
59
+ }
60
+ return options as AutocompleteOption[];
61
+ }, [options]);
62
+
63
+ // Filter options
64
+ const filtered = useMemo(() => {
65
+ const q = searchQuery.trim().toLowerCase();
66
+ if (!q) return normalizedOptions;
67
+ return normalizedOptions.filter((o) => o.label.toLowerCase().includes(q));
68
+ }, [normalizedOptions, searchQuery]);
69
+
70
+ const anyOptionHasImage = useMemo(
71
+ () => normalizedOptions.some((o) => !!o.image),
72
+ [normalizedOptions]
73
+ );
74
+
75
+ const displayValue =
76
+ selectedOption != null
77
+ ? typeof selectedOption === "string"
78
+ ? selectedOption
79
+ : selectedOption.label
80
+ : searchQuery;
81
+
82
+ function openList() {
83
+ if (disabled) return;
84
+ setOpen(true);
85
+ }
86
+ function closeList() {
87
+ setOpen(false);
88
+ setActiveIndex(-1);
89
+ }
90
+ function handleSelect(option: AutocompleteOption) {
91
+ onSelect(option);
92
+ setSearchQuery("");
93
+ closeList();
94
+ }
95
+ function handleClear() {
96
+ onSelect(null);
97
+ setSearchQuery("");
98
+ closeList();
99
+ }
100
+
101
+ function onKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {
102
+ if (!open && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
103
+ setOpen(true);
104
+ setActiveIndex(0);
105
+ e.preventDefault();
106
+ return;
107
+ }
108
+ if (!open) return;
109
+ if (e.key === "ArrowDown") {
110
+ e.preventDefault();
111
+ setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
112
+ scrollActiveIntoView();
113
+ } else if (e.key === "ArrowUp") {
114
+ e.preventDefault();
115
+ setActiveIndex((i) => Math.max(i - 1, 0));
116
+ scrollActiveIntoView();
117
+ } else if (e.key === "Enter") {
118
+ e.preventDefault();
119
+ const item = filtered[activeIndex];
120
+ if (item) handleSelect(item);
121
+ } else if (e.key === "Escape") {
122
+ e.preventDefault();
123
+ closeList();
124
+ } else if (e.key === "Home") {
125
+ e.preventDefault();
126
+ setActiveIndex(0);
127
+ scrollActiveIntoView();
128
+ } else if (e.key === "End") {
129
+ e.preventDefault();
130
+ setActiveIndex(filtered.length - 1);
131
+ scrollActiveIntoView();
132
+ }
133
+ }
134
+
135
+ function scrollActiveIntoView() {
136
+ const list = listRef.current;
137
+ const idx = activeIndex;
138
+ if (!list || idx < 0) return;
139
+ const el = list.children[idx] as HTMLElement | undefined;
140
+ el?.scrollIntoView({ block: "nearest" });
141
+ }
142
+
143
+ return (
144
+ <div
145
+ ref={rootRef}
146
+ className={["relative w-full", className].join(" ")}
147
+ {...props}
148
+ >
149
+ <fieldset
150
+ className={[
151
+ "w-full min-w-0 rounded-full border bg-[var(--surface)] transition-colors h-16",
152
+ "border-[var(--border)] focus-within:border-[var(--color-brand)]",
153
+ disabled ? "opacity-60 cursor-not-allowed" : ""
154
+ ].join(" ")}
155
+ >
156
+ <legend className="ml-4 px-1 text-sm leading-none relative">
157
+ <Typo
158
+ variant="label-lg"
159
+ className={[
160
+ "font-normal select-none",
161
+ open ? "text-[var(--color-brand)]" : "text-[var(--muted-fg)]",
162
+ disabled ? "text-[var(--muted-fg)]" : ""
163
+ ].join(" ")}
164
+ >
165
+ {title}
166
+ </Typo>
167
+ </legend>
168
+ <div className="relative flex pl-5 pr-3 pb-1 h-full">
169
+ <div className="flex w-full">
170
+ {/* Input */}
171
+ <input
172
+ id={inputId}
173
+ role="combobox"
174
+ aria-expanded={open}
175
+ aria-controls={listboxId}
176
+ aria-autocomplete="list"
177
+ aria-disabled={disabled || undefined}
178
+ type="text"
179
+ value={displayValue}
180
+ onChange={(e) => {
181
+ setSearchQuery(e.target.value);
182
+ if (!open) setOpen(true);
183
+ setActiveIndex(0);
184
+ }}
185
+ onFocus={openList}
186
+ onKeyDown={onKeyDown}
187
+ onBlur={() => setTimeout(closeList, 150)}
188
+ disabled={disabled}
189
+ className={[
190
+ "w-full rounded-full border-0 outline-none bg-transparent",
191
+ "text-sm text-[var(--fg)] placeholder:text-[var(--muted-fg)]",
192
+ "pr-2"
193
+ ].join(" ")}
194
+ placeholder={placeholder}
195
+ onClick={() => !disabled && setOpen(true)}
196
+ />
197
+
198
+ {/* Action button (clear or expand) */}
199
+ <IconButton
200
+ icon={selectedOption && !open ? "close" : "expand_more"}
201
+ onClick={
202
+ selectedOption && !open ? handleClear : () => setOpen((s) => !s)
203
+ }
204
+ disabled={disabled}
205
+ aria-label={selectedOption && !open ? "Clear" : open ? "Collapse" : "Expand"}
206
+ iconClassName={[
207
+ "transition-transform duration-300 text-[var(--muted-fg)]",
208
+ open ? "rotate-180 text-[var(--color-brand)]" : ""
209
+ ].join(" ")}
210
+ />
211
+ </div>
212
+ </div>
213
+ </fieldset>
214
+
215
+ {/* Options */}
216
+ {open && !disabled && (
217
+ <div
218
+ className={[
219
+ "absolute z-20 mt-2 w-full overflow-y-auto rounded-3xl border border-[var(--border)]",
220
+ "bg-[var(--surface)] text-[var(--fg)] shadow-md"
221
+ ].join(" ")}
222
+ style={{ maxHeight }}
223
+ >
224
+ {filtered.length > 0 ? (
225
+ <ul id={listboxId} role="listbox" ref={listRef}>
226
+ {filtered.map((option, index) => {
227
+ const active = index === activeIndex;
228
+ const selected =
229
+ selectedOption != null &&
230
+ (typeof selectedOption === "string"
231
+ ? selectedOption === option.label
232
+ : selectedOption.label === option.label);
233
+ return (
234
+ <li
235
+ key={`${option.label}-${index}`}
236
+ role="option"
237
+ aria-selected={selected}
238
+ className={[
239
+ "flex items-center justify-between px-4 py-2 text-sm cursor-pointer transition-colors",
240
+ active ? "bg-[var(--muted)]" : "",
241
+ index !== filtered.length - 1
242
+ ? "border-b border-[var(--border)]"
243
+ : ""
244
+ ].join(" ")}
245
+ onMouseEnter={() => setActiveIndex(index)}
246
+ onMouseDown={(e) => e.preventDefault()} /* keep input focus */
247
+ onClick={() => handleSelect(option)}
248
+ >
249
+ <div className="flex items-center gap-2">
250
+ {anyOptionHasImage && (
251
+ <Avatar name={option.label} src={option.image || undefined} />
252
+ )}
253
+ <Typo variant="label-lg" className="font-normal text-[var(--fg)]">
254
+ {option.label}
255
+ </Typo>
256
+ </div>
257
+ {Array.isArray(option.group) && option.group.length > 0 && (
258
+ <AvatarGroup>
259
+ {option.group.map((member, i) => (
260
+ <Avatar key={i} name={member.name} src={member.image || undefined} />
261
+ ))}
262
+ </AvatarGroup>
263
+ )}
264
+ </li>
265
+ );
266
+ })}
267
+ </ul>
268
+ ) : (
269
+ <div className="px-4 py-3">
270
+ <Typo variant="body-sm" className="text-[var(--muted-fg)]">
271
+ No results found
272
+ </Typo>
273
+ </div>
274
+ )}
275
+ </div>
276
+ )}
277
+ </div>
278
+ );
279
+ }
@@ -0,0 +1,83 @@
1
+ import * as React from "react";
2
+ import { useState, useMemo } from "react";
3
+ import { tv, type VariantProps } from "tailwind-variants";
4
+ import Typo from "./Typo";
5
+
6
+ export type AvatarProps = {
7
+ /** Person's full name (used for initials and alt text) */
8
+ name: string;
9
+ /** Image URL */
10
+ src?: string;
11
+ /** Optional custom background color (CSS color). If omitted, token bg or a derived pastel is used. */
12
+ color?: string;
13
+ /** Accessible alt text; defaults to the person's name */
14
+ alt?: string;
15
+ } & VariantProps<typeof avatarStyles> &
16
+ Omit<React.HTMLAttributes<HTMLDivElement>, "children">;
17
+
18
+ const avatarStyles = tv({
19
+ base:
20
+ "relative box-border flex items-center justify-center overflow-hidden rounded-full " +
21
+ "border border-[var(--border)] bg-[var(--muted)] text-[var(--fg)] select-none",
22
+ variants: {
23
+ size: {
24
+ sm: "w-[28px] h-[28px]",
25
+ md: "w-[60px] h-[60px]"
26
+ }
27
+ },
28
+ defaultVariants: { size: "sm" }
29
+ });
30
+
31
+ function getInitials(name: string) {
32
+ if (!name) return "…";
33
+ const words = name.trim().split(/\s+/);
34
+ if (words.length === 1) return (words[0][0] ?? "").toUpperCase();
35
+ return ((words[0][0] ?? "") + (words[words.length - 1][0] ?? "")).toUpperCase();
36
+ }
37
+
38
+ export default function Avatar({
39
+ name,
40
+ src,
41
+ color,
42
+ size,
43
+ alt,
44
+ className,
45
+ style,
46
+ ...props
47
+ }: AvatarProps) {
48
+ const [imgError, setImgError] = useState(false);
49
+ const initials = useMemo(() => getInitials(name), [name]);
50
+ const computedStyle = useMemo<React.CSSProperties>(() => {
51
+ const s: React.CSSProperties = { ...style };
52
+ if (color) s.backgroundColor = color;
53
+ return s;
54
+ }, [color, style]);
55
+
56
+ const textVariant = size === "sm" ? ("label-md" as const) : ("headline-md" as const);
57
+
58
+ const showImage = !!src && !imgError;
59
+
60
+ return (
61
+ <div
62
+ className={avatarStyles({ size, className })}
63
+ aria-label={alt ?? name}
64
+ role="img"
65
+ {...props}
66
+ style={computedStyle}
67
+ >
68
+ {showImage ? (
69
+ <img
70
+ src={src}
71
+ alt={alt ?? name}
72
+ className="absolute inset-0 h-full w-full object-cover rounded-full"
73
+ onError={() => setImgError(true)}
74
+ draggable={false}
75
+ />
76
+ ) : (
77
+ <Typo variant={textVariant} bold="medium" className="pointer-events-none">
78
+ {initials}
79
+ </Typo>
80
+ )}
81
+ </div>
82
+ );
83
+ }
@@ -0,0 +1,53 @@
1
+ import * as React from "react";
2
+
3
+ export type AvatarGroupProps = {
4
+ children: React.ReactNode;
5
+ className?: string;
6
+ /** Maximum avatars to display before showing a +N counter */
7
+ max?: number;
8
+ /** Overlap offset in pixels (default 8px) */
9
+ overlapPx?: number;
10
+ /** Adds a separating ring around each avatar to improve contrast */
11
+ withRings?: boolean;
12
+ };
13
+
14
+ export default function AvatarGroup({
15
+ children,
16
+ className = "",
17
+ max = 5,
18
+ overlapPx = 8,
19
+ withRings = true
20
+ }: AvatarGroupProps) {
21
+ const avatars = React.Children.toArray(children);
22
+ const displayAvatars = typeof max === "number" ? avatars.slice(0, max) : avatars;
23
+ const extraCount = typeof max === "number" && avatars.length > max ? avatars.length - max : 0;
24
+
25
+ return (
26
+ <div className={["flex items-center", className].filter(Boolean).join(" ")}>
27
+ {displayAvatars.map((child, i) => (
28
+ <div
29
+ key={i}
30
+ className={[
31
+ "relative",
32
+ i > 0 ? "" : "ml-0"
33
+ ].join(" ")}
34
+ style={{
35
+ marginLeft: i === 0 ? 0 : -overlapPx,
36
+ zIndex: 100 + i
37
+ }}
38
+ >
39
+ <div className={withRings ? "ring-2 ring-[var(--surface)] rounded-full" : ""}>{child}</div>
40
+ </div>
41
+ ))}
42
+ {extraCount > 0 && (
43
+ <span
44
+ className="ml-2 inline-flex h-7 w-7 items-center justify-center rounded-full border border-[var(--border)] bg-[var(--muted)] text-[var(--fg)] text-xs"
45
+ aria-label={`${extraCount} more`}
46
+ title={`${extraCount} more`}
47
+ >
48
+ +{extraCount}
49
+ </span>
50
+ )}
51
+ </div>
52
+ );
53
+ }
@@ -0,0 +1,51 @@
1
+ import * as React from "react";
2
+ import { tv, type VariantProps } from "tailwind-variants";
3
+ import Typo from "./Typo";
4
+
5
+ const buttonStyles = tv({
6
+ base:
7
+ "cursor-pointer inline-flex items-center justify-center gap-2 rounded-[var(--radius-2xl)] px-[18px] h-12 transition-colors " +
8
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-cyan-500/40 " +
9
+ "disabled:cursor-not-allowed disabled:opacity-50",
10
+ variants: {
11
+ variant: {
12
+ primary: "bg-cyan-500 text-white hover:bg-cyan-400 active:bg-cyan-600 disabled:bg-neutral-400",
13
+ secondary: "border border-cyan-500 text-cyan-500 bg-transparent hover:bg-cyan-50 active:bg-cyan-100 disabled:border-neutral-400 disabled:text-neutral-400",
14
+ ghost: "bg-transparent text-cyan-500 hover:bg-cyan-50 active:bg-cyan-100 disabled:text-neutral-400"
15
+ },
16
+ size: {
17
+ sm: "h-9 px-3",
18
+ md: "h-12 px-[18px]",
19
+ lg: "h-14 px-6"
20
+ },
21
+ fullWidth: {
22
+ true: "w-full"
23
+ }
24
+ },
25
+ defaultVariants: {
26
+ variant: "primary",
27
+ size: "md"
28
+ }
29
+ });
30
+
31
+ type ButtonVariants = VariantProps<typeof buttonStyles>;
32
+ export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & ButtonVariants & {
33
+ /** Icon component to display instead of text */
34
+ icon?: React.ReactNode;
35
+ };
36
+
37
+ export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
38
+ ({ variant, size, fullWidth, className, children, icon, ...props }, ref) => {
39
+
40
+ return (
41
+ <button
42
+ ref={ref}
43
+ className={buttonStyles({ variant, size, fullWidth, className })}
44
+ {...props}
45
+ >
46
+ {children}
47
+ </button>
48
+ );
49
+ }
50
+ );
51
+ Button.displayName = "Button";
@@ -0,0 +1,51 @@
1
+ import { useMemo } from "react";
2
+
3
+ interface AnimatedBgCircleProps {
4
+ colors: string[];
5
+ delay?: number;
6
+ stretch?: boolean;
7
+ }
8
+
9
+ const AnimatedBgCircle = ({ colors, delay = 0 }: AnimatedBgCircleProps) => {
10
+ const uniqueId = useMemo(() => Math.random().toString(36).substr(2, 9), []);
11
+
12
+ return (
13
+ <svg viewBox="0 0 64 64" fill="none" className="h-full transition-all duration-500 ease-in-out w-full">
14
+ <style>
15
+ {`
16
+ @keyframes colorCycle-${uniqueId} {
17
+ 0% { fill: ${colors[0]}; }
18
+ 25% { fill: ${colors[1]}; }
19
+ 50% { fill: ${colors[2]}; }
20
+ 75% { fill: ${colors[3]}; }
21
+ 100% { fill: ${colors[0]}; }
22
+ }
23
+ @keyframes fadeIn-${uniqueId} {
24
+ 0% { opacity: 0; }
25
+ 100% { opacity: 1; }
26
+ }
27
+ .animated-circle-${uniqueId} {
28
+ animation:
29
+ fadeIn-${uniqueId} 1.5s ease-in-out 1.5s forwards,
30
+ colorCycle-${uniqueId} 4s infinite linear ${delay}s;
31
+ opacity: 0;
32
+ transition: all 0.5s ease-in-out;
33
+ }
34
+ `}
35
+ </style>
36
+ <g style={{ mixBlendMode: "overlay" }} filter="url(#filter0_f_241_319)">
37
+ <ellipse cx="32" rx="20" cy="32" ry="20" className={`animated-circle-${uniqueId}`} />
38
+ </g>
39
+ <defs>
40
+ <filter id="filter0_f_241_319" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
41
+ <feFlood floodOpacity="0" result="BackgroundImageFix" />
42
+ <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
43
+ <feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur_241_319" />
44
+ </filter>
45
+ </defs>
46
+ </svg>
47
+ );
48
+ };
49
+
50
+ export default AnimatedBgCircle;
51
+