@inferencesh/ui 0.0.0-stage → 0.1.2
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/LICENSE +22 -0
- package/README.md +68 -2
- package/components.json +22 -0
- package/package.json +231 -4
- package/src/components/audio-player.tsx +549 -0
- package/src/components/button.tsx +13 -0
- package/src/components/chart.tsx +403 -0
- package/src/components/circuit.tsx +276 -0
- package/src/components/code-block/code-block.tsx +260 -0
- package/src/components/code-block/index.ts +18 -0
- package/src/components/code-block/languages.ts +311 -0
- package/src/components/code-block/styles.ts +39 -0
- package/src/components/code-block/tokenizer.ts +290 -0
- package/src/components/code-block/types.ts +38 -0
- package/src/components/code-block/utils.ts +39 -0
- package/src/components/code.tsx +48 -0
- package/src/components/cookie-consent.tsx +137 -0
- package/src/components/copy-button.tsx +44 -0
- package/src/components/country-dropdown.tsx +188 -0
- package/src/components/glow-loader-fast.tsx +32 -0
- package/src/components/glow-loader-mono.tsx +33 -0
- package/src/components/glow-loader-sm-fast.tsx +32 -0
- package/src/components/glow-loader-sm-mono.tsx +34 -0
- package/src/components/glow-loader-sm.tsx +32 -0
- package/src/components/glow-loader.tsx +32 -0
- package/src/components/glow-logo.tsx +32 -0
- package/src/components/gradient.tsx +80 -0
- package/src/components/index.ts +45 -0
- package/src/components/inline-sidebar.tsx +351 -0
- package/src/components/input-color.tsx +349 -0
- package/src/components/logo-base.tsx +213 -0
- package/src/components/logo-color.tsx +23 -0
- package/src/components/logo-full.tsx +71 -0
- package/src/components/logo-svg.tsx +23 -0
- package/src/components/menu-navigation.tsx +359 -0
- package/src/components/multi-select.tsx +721 -0
- package/src/components/pastel-gradient.tsx +25 -0
- package/src/components/pixel-symmetry.tsx +151 -0
- package/src/components/progress.tsx +28 -0
- package/src/components/scroll-more.tsx +131 -0
- package/src/components/select.tsx +85 -0
- package/src/components/shimmering-text.tsx +108 -0
- package/src/components/sidebar-light.tsx +102 -0
- package/src/components/sonner.tsx +38 -0
- package/src/components/theme-switcher-sidebar.tsx +56 -0
- package/src/components/theme-switcher-simple.tsx +110 -0
- package/src/components/theme-switcher.tsx +47 -0
- package/src/components/toggle-group.tsx +55 -0
- package/src/components/tooltip-button.tsx +91 -0
- package/src/components/tooltip.tsx +71 -0
- package/src/components/tree-view.tsx +499 -0
- package/src/components/unglow-loader.tsx +33 -0
- package/src/components/waveform.tsx +1632 -0
- package/src/components/zoomable-image.tsx +76 -0
- package/src/docs/api-docs.tsx +763 -0
- package/src/docs/callout.tsx +160 -0
- package/src/docs/code-group.tsx +215 -0
- package/src/docs/copy-menu.tsx +143 -0
- package/src/docs/doc-tabs.tsx +84 -0
- package/src/docs/index.ts +16 -0
- package/src/docs/steps.tsx +105 -0
- package/src/docs/table-of-contents.tsx +174 -0
- package/src/examples/guide-markdown.ts +129 -0
- package/src/examples/index.ts +1153 -0
- package/src/global.d.ts +1 -0
- package/src/hooks/use-copy-to-clipboard.ts +36 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/lib/display-name.ts +15 -0
- package/src/lib/example-input.ts +130 -0
- package/src/lib/plans.ts +44 -0
- package/src/lib/safe-content.ts +137 -0
- package/src/lib/schema.ts +320 -0
- package/src/lib/storage.ts +108 -0
- package/src/markdown/docs-markdown-renderer.tsx +518 -0
- package/src/markdown/helpers.ts +95 -0
- package/src/markdown/index.ts +24 -0
- package/src/markdown/markdown-renderer.tsx +232 -0
- package/src/markdown/youtube-embed.tsx +43 -0
- package/src/og/image.ts +312 -0
- package/src/og/index.tsx +430 -0
- package/src/og/query.ts +26 -0
- package/src/shadcn/accordion.tsx +71 -0
- package/src/shadcn/alert-dialog.tsx +187 -0
- package/src/shadcn/alert.tsx +75 -0
- package/src/shadcn/aspect-ratio.tsx +22 -0
- package/src/shadcn/attachment.tsx +207 -0
- package/src/shadcn/avatar.tsx +106 -0
- package/src/shadcn/badge.tsx +51 -0
- package/src/shadcn/breadcrumb.tsx +124 -0
- package/src/shadcn/bubble.tsx +127 -0
- package/src/shadcn/button-group.tsx +87 -0
- package/src/shadcn/button.tsx +57 -0
- package/src/shadcn/calendar.tsx +219 -0
- package/src/shadcn/card.tsx +102 -0
- package/src/shadcn/carousel.tsx +242 -0
- package/src/shadcn/chart.tsx +372 -0
- package/src/shadcn/checkbox.tsx +28 -0
- package/src/shadcn/collapsible.tsx +19 -0
- package/src/shadcn/combobox.tsx +297 -0
- package/src/shadcn/command.tsx +194 -0
- package/src/shadcn/context-menu.tsx +270 -0
- package/src/shadcn/dialog.tsx +158 -0
- package/src/shadcn/direction.tsx +4 -0
- package/src/shadcn/drawer.tsx +227 -0
- package/src/shadcn/dropdown-menu.tsx +265 -0
- package/src/shadcn/empty.tsx +103 -0
- package/src/shadcn/field.tsx +238 -0
- package/src/shadcn/form.tsx +173 -0
- package/src/shadcn/hover-card.tsx +50 -0
- package/src/shadcn/index.ts +53 -0
- package/src/shadcn/input-group.tsx +156 -0
- package/src/shadcn/input-otp.tsx +84 -0
- package/src/shadcn/input.tsx +19 -0
- package/src/shadcn/item.tsx +201 -0
- package/src/shadcn/kbd.tsx +26 -0
- package/src/shadcn/label.tsx +19 -0
- package/src/shadcn/marker.tsx +70 -0
- package/src/shadcn/menubar.tsx +278 -0
- package/src/shadcn/message-scroller.tsx +131 -0
- package/src/shadcn/message.tsx +91 -0
- package/src/shadcn/native-select.tsx +60 -0
- package/src/shadcn/navigation-menu.tsx +167 -0
- package/src/shadcn/pagination.tsx +130 -0
- package/src/shadcn/popover.tsx +87 -0
- package/src/shadcn/progress.tsx +82 -0
- package/src/shadcn/radio-group.tsx +35 -0
- package/src/shadcn/resizable.tsx +49 -0
- package/src/shadcn/scroll-area.tsx +52 -0
- package/src/shadcn/select.tsx +200 -0
- package/src/shadcn/separator.tsx +22 -0
- package/src/shadcn/sheet.tsx +136 -0
- package/src/shadcn/sidebar.tsx +721 -0
- package/src/shadcn/skeleton.tsx +13 -0
- package/src/shadcn/slider.tsx +51 -0
- package/src/shadcn/sonner.tsx +49 -0
- package/src/shadcn/spinner.tsx +10 -0
- package/src/shadcn/switch.tsx +29 -0
- package/src/shadcn/table.tsx +115 -0
- package/src/shadcn/tabs.tsx +79 -0
- package/src/shadcn/textarea.tsx +17 -0
- package/src/shadcn/toggle-group.tsx +89 -0
- package/src/shadcn/toggle.tsx +44 -0
- package/src/shadcn/tooltip.tsx +63 -0
- package/src/theme/config.ts +48 -0
- package/src/theme/css/base.css +92 -0
- package/src/theme/css/bitboy.css +75 -0
- package/src/theme/css/dark.css +47 -0
- package/src/theme/css/designer.css +122 -0
- package/src/theme/css/fonts.css +33 -0
- package/src/theme/css/globals.css +14 -0
- package/src/theme/css/hackintosh.css +57 -0
- package/src/theme/css/llama.css +103 -0
- package/src/theme/css/safelist.css +39 -0
- package/src/theme/css/shadcn.css +77 -0
- package/src/theme/css/theme.css +216 -0
- package/src/theme/embed-theme.ts +146 -0
- package/src/theme/fonts/FiraCode-VF.woff2 +0 -0
- package/src/theme/fonts/Hack-Regular.woff2 +0 -0
- package/src/theme/fonts/LICENSE-FiraCode.txt +93 -0
- package/src/theme/fonts/LICENSE-Hack.txt +45 -0
- package/src/theme/fonts/LICENSE-MonaSans.txt +93 -0
- package/src/theme/fonts/Mona-Sans.woff2 +0 -0
- package/src/theme/index.ts +15 -0
- package/src/utils/cn.ts +3 -0
- package/src/utils/index.ts +2 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React, { forwardRef, useCallback, useEffect, useState } from "react";
|
|
3
|
+
|
|
4
|
+
// shadcn
|
|
5
|
+
import {
|
|
6
|
+
Command,
|
|
7
|
+
CommandEmpty,
|
|
8
|
+
CommandGroup,
|
|
9
|
+
CommandInput,
|
|
10
|
+
CommandItem,
|
|
11
|
+
CommandList
|
|
12
|
+
} from "../shadcn/command";
|
|
13
|
+
import {
|
|
14
|
+
Popover,
|
|
15
|
+
PopoverContent,
|
|
16
|
+
PopoverTrigger
|
|
17
|
+
} from "../shadcn/popover";
|
|
18
|
+
|
|
19
|
+
// utils
|
|
20
|
+
import { cn } from "cn";
|
|
21
|
+
|
|
22
|
+
// assets
|
|
23
|
+
import { CheckIcon, ChevronDown, Globe } from "lucide-react";
|
|
24
|
+
import { CircleFlag } from "react-circle-flags";
|
|
25
|
+
|
|
26
|
+
// data
|
|
27
|
+
import { countries } from "country-data-list";
|
|
28
|
+
|
|
29
|
+
// Country interface
|
|
30
|
+
export interface Country {
|
|
31
|
+
alpha2: string;
|
|
32
|
+
alpha3: string;
|
|
33
|
+
countryCallingCodes: string[];
|
|
34
|
+
currencies: string[];
|
|
35
|
+
emoji?: string;
|
|
36
|
+
ioc: string;
|
|
37
|
+
languages: string[];
|
|
38
|
+
name: string;
|
|
39
|
+
status: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Dropdown props
|
|
43
|
+
interface CountryDropdownProps {
|
|
44
|
+
options?: Country[];
|
|
45
|
+
onChange?: (country: Country) => void;
|
|
46
|
+
defaultValue?: string;
|
|
47
|
+
disabled?: boolean;
|
|
48
|
+
placeholder?: string;
|
|
49
|
+
slim?: boolean;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const CountryDropdownComponent = (
|
|
53
|
+
{
|
|
54
|
+
options = countries.all.filter(
|
|
55
|
+
(country: Country) =>
|
|
56
|
+
country.emoji && country.status !== "deleted" && country.ioc !== "PRK"
|
|
57
|
+
),
|
|
58
|
+
onChange,
|
|
59
|
+
defaultValue,
|
|
60
|
+
disabled = false,
|
|
61
|
+
placeholder = "Select a country",
|
|
62
|
+
slim = false,
|
|
63
|
+
...props
|
|
64
|
+
}: CountryDropdownProps,
|
|
65
|
+
ref: React.ForwardedRef<HTMLButtonElement>
|
|
66
|
+
) => {
|
|
67
|
+
const [open, setOpen] = useState(false);
|
|
68
|
+
const [selectedCountry, setSelectedCountry] = useState<Country | undefined>(
|
|
69
|
+
undefined
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (defaultValue) {
|
|
74
|
+
// Match either alpha2 or alpha3 code
|
|
75
|
+
const initialCountry = options.find(
|
|
76
|
+
(country) => country.alpha2 === defaultValue || country.alpha3 === defaultValue
|
|
77
|
+
);
|
|
78
|
+
if (initialCountry) {
|
|
79
|
+
setSelectedCountry(initialCountry);
|
|
80
|
+
} else {
|
|
81
|
+
// Reset selected country if defaultValue is not found
|
|
82
|
+
setSelectedCountry(undefined);
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
// Reset selected country if defaultValue is undefined or null
|
|
86
|
+
setSelectedCountry(undefined);
|
|
87
|
+
}
|
|
88
|
+
}, [defaultValue, options]);
|
|
89
|
+
|
|
90
|
+
const handleSelect = useCallback(
|
|
91
|
+
(country: Country) => {
|
|
92
|
+
console.log("🌍 CountryDropdown value: ", country);
|
|
93
|
+
setSelectedCountry(country);
|
|
94
|
+
onChange?.(country);
|
|
95
|
+
setOpen(false);
|
|
96
|
+
},
|
|
97
|
+
[onChange]
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const triggerClasses = cn(
|
|
101
|
+
"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 cursor-pointer",
|
|
102
|
+
slim === true && "w-20"
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<Popover open={open} onOpenChange={setOpen}>
|
|
107
|
+
<PopoverTrigger
|
|
108
|
+
ref={ref}
|
|
109
|
+
className={triggerClasses}
|
|
110
|
+
disabled={disabled}
|
|
111
|
+
{...props}
|
|
112
|
+
>
|
|
113
|
+
{selectedCountry ? (
|
|
114
|
+
<div className="flex items-center flex-grow w-0 gap-2 overflow-hidden">
|
|
115
|
+
<div className="inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full">
|
|
116
|
+
<CircleFlag
|
|
117
|
+
countryCode={selectedCountry.alpha2.toLowerCase()}
|
|
118
|
+
height={20}
|
|
119
|
+
/>
|
|
120
|
+
</div>
|
|
121
|
+
{slim === false && (
|
|
122
|
+
<span className="overflow-hidden text-ellipsis whitespace-nowrap">
|
|
123
|
+
{selectedCountry.name}
|
|
124
|
+
</span>
|
|
125
|
+
)}
|
|
126
|
+
</div>
|
|
127
|
+
) : (
|
|
128
|
+
<span className="text-muted-foreground/30">
|
|
129
|
+
{slim === false ? (
|
|
130
|
+
placeholder || setSelectedCountry.name
|
|
131
|
+
) : (
|
|
132
|
+
<Globe size={20} />
|
|
133
|
+
)}
|
|
134
|
+
</span>
|
|
135
|
+
)}
|
|
136
|
+
<ChevronDown size={16} />
|
|
137
|
+
</PopoverTrigger>
|
|
138
|
+
<PopoverContent
|
|
139
|
+
side="bottom"
|
|
140
|
+
className="min-w-[--radix-popper-anchor-width] p-0"
|
|
141
|
+
>
|
|
142
|
+
<Command className="w-full max-h-[200px] sm:max-h-[270px]">
|
|
143
|
+
<CommandList>
|
|
144
|
+
<div className="sticky top-0 z-10 bg-popover">
|
|
145
|
+
<CommandInput placeholder="Search country..." />
|
|
146
|
+
</div>
|
|
147
|
+
<CommandEmpty>No country found.</CommandEmpty>
|
|
148
|
+
<CommandGroup>
|
|
149
|
+
{options
|
|
150
|
+
.filter((x) => x.name)
|
|
151
|
+
.map((option, key: number) => (
|
|
152
|
+
<CommandItem
|
|
153
|
+
className="flex items-center w-full gap-2"
|
|
154
|
+
key={key}
|
|
155
|
+
onSelect={() => handleSelect(option)}
|
|
156
|
+
>
|
|
157
|
+
<div className="flex flex-grow w-0 space-x-2 overflow-hidden">
|
|
158
|
+
<div className="inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full">
|
|
159
|
+
<CircleFlag
|
|
160
|
+
countryCode={option.alpha2.toLowerCase()}
|
|
161
|
+
height={20}
|
|
162
|
+
/>
|
|
163
|
+
</div>
|
|
164
|
+
<span className="overflow-hidden text-ellipsis whitespace-nowrap">
|
|
165
|
+
{option.name}
|
|
166
|
+
</span>
|
|
167
|
+
</div>
|
|
168
|
+
<CheckIcon
|
|
169
|
+
className={cn(
|
|
170
|
+
"ml-auto h-4 w-4 shrink-0",
|
|
171
|
+
option.name === selectedCountry?.name
|
|
172
|
+
? "opacity-100"
|
|
173
|
+
: "opacity-0"
|
|
174
|
+
)}
|
|
175
|
+
/>
|
|
176
|
+
</CommandItem>
|
|
177
|
+
))}
|
|
178
|
+
</CommandGroup>
|
|
179
|
+
</CommandList>
|
|
180
|
+
</Command>
|
|
181
|
+
</PopoverContent>
|
|
182
|
+
</Popover>
|
|
183
|
+
);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
CountryDropdownComponent.displayName = "CountryDropdownComponent";
|
|
187
|
+
|
|
188
|
+
export const CountryDropdown = forwardRef(CountryDropdownComponent);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderFastProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Fast animated logo loader (1s animation cycle).
|
|
14
|
+
* For contexts where speed/urgency is implied.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoaderFast = ({ width = 240, height = 240, className, strokeWidth = 3 }: GlowLoaderFastProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={1}
|
|
25
|
+
animationStagger={0.01}
|
|
26
|
+
colored={true}
|
|
27
|
+
withGlow={true}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default GlowLoaderFast;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderMonoProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Monochrome animated logo loader (uses muted-foreground).
|
|
14
|
+
* Apply opacity via className if needed.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoaderMono = ({ width = 240, height = 240, className, strokeWidth }: GlowLoaderMonoProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={3}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={false}
|
|
27
|
+
monoColor="hsl(var(--muted-foreground))"
|
|
28
|
+
withGlow={false}
|
|
29
|
+
/>
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default GlowLoaderMono;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderSmFastProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Small fast animated logo loader (60px, 1s animation).
|
|
14
|
+
* For inline loading indicators that need urgency.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoaderSmFast = ({ width = 60, height = 60, className, strokeWidth = 1 }: GlowLoaderSmFastProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={1}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={true}
|
|
27
|
+
withGlow={true}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default GlowLoaderSmFast;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderSmMonoProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Small monochrome animated logo loader (60px, thicker strokes).
|
|
14
|
+
* Apply opacity via className if needed.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoaderSmMono = ({ width = 60, height = 60, className, strokeWidth = 16 }: GlowLoaderSmMonoProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={3}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={false}
|
|
27
|
+
monoColor="hsl(var(--muted-foreground))"
|
|
28
|
+
withGlow={false}
|
|
29
|
+
label="loading"
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default GlowLoaderSmMono;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderSmProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Small animated logo loader (60px, 16px strokes, 3s animation).
|
|
14
|
+
* For inline loading indicators.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoaderSm = ({ width = 60, height = 60, className, strokeWidth = 2 }: GlowLoaderSmProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={3}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={true}
|
|
27
|
+
withGlow={true}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default GlowLoaderSm;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLoaderProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Standard animated logo loader (240px, 3s animation cycle).
|
|
14
|
+
* For full-page loading states.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLoader = ({ width = 240, height = 240, className, strokeWidth = 1 }: GlowLoaderProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={3}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={true}
|
|
27
|
+
withGlow={true}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default GlowLoader;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import LogoBase from "./logo-base";
|
|
4
|
+
|
|
5
|
+
interface GlowLogoProps {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Slow ambient animated logo (8s animation cycle).
|
|
14
|
+
* For decorative/branding displays where loading isn't implied.
|
|
15
|
+
*/
|
|
16
|
+
const GlowLogo = ({ width = 240, height = 240, className, strokeWidth = 1 }: GlowLogoProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<LogoBase
|
|
19
|
+
width={width}
|
|
20
|
+
height={height}
|
|
21
|
+
className={className}
|
|
22
|
+
strokeWidth={strokeWidth}
|
|
23
|
+
animated={true}
|
|
24
|
+
animationDuration={8}
|
|
25
|
+
animationStagger={0.05}
|
|
26
|
+
colored={true}
|
|
27
|
+
withGlow={true}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default GlowLogo;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { cn } from "cn";
|
|
2
|
+
|
|
3
|
+
export type GradientVariant =
|
|
4
|
+
| "sunset"
|
|
5
|
+
| "poppy"
|
|
6
|
+
| "rosebud"
|
|
7
|
+
| "sunshine"
|
|
8
|
+
| "gold"
|
|
9
|
+
| "twilight"
|
|
10
|
+
| "powder"
|
|
11
|
+
| "holly"
|
|
12
|
+
| "northern-lights"
|
|
13
|
+
| "raw-green"
|
|
14
|
+
| "lime"
|
|
15
|
+
| "nemesia"
|
|
16
|
+
| "snowflake"
|
|
17
|
+
| "blue-bird"
|
|
18
|
+
| "blueprint"
|
|
19
|
+
| "salvia"
|
|
20
|
+
| "heartsease"
|
|
21
|
+
| "amaranthus"
|
|
22
|
+
| "candy"
|
|
23
|
+
| "verbena"
|
|
24
|
+
| "clematis"
|
|
25
|
+
| "hibiscus"
|
|
26
|
+
| "clear-night"
|
|
27
|
+
| "clay"
|
|
28
|
+
| "soil"
|
|
29
|
+
| "silver"
|
|
30
|
+
| "fir-tree"
|
|
31
|
+
| "metal"
|
|
32
|
+
| "darkness";
|
|
33
|
+
|
|
34
|
+
interface GradientProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
35
|
+
variant?: GradientVariant;
|
|
36
|
+
}
|
|
37
|
+
const gradientVariants: Record<GradientVariant, string> = {
|
|
38
|
+
sunset: "bg-gradient-to-r from-red-400 to-orange-400",
|
|
39
|
+
poppy: "bg-gradient-to-r from-rose-300 to-red-400",
|
|
40
|
+
rosebud: "bg-gradient-to-r from-pink-400 to-rose-400",
|
|
41
|
+
sunshine: "bg-gradient-to-r from-amber-100 to-yellow-300",
|
|
42
|
+
gold: "bg-gradient-to-r from-amber-100 to-yellow-400",
|
|
43
|
+
twilight: "bg-gradient-to-r from-amber-400 to-pink-400",
|
|
44
|
+
powder: "bg-gradient-to-r from-violet-100 to-pink-100",
|
|
45
|
+
holly: "bg-gradient-to-r from-blue-100 to-cyan-100",
|
|
46
|
+
"northern-lights": "bg-gradient-to-r from-teal-100 to-teal-400",
|
|
47
|
+
"raw-green": "bg-gradient-to-r from-lime-300 to-lime-400",
|
|
48
|
+
lime: "bg-gradient-to-r from-teal-300 to-yellow-100",
|
|
49
|
+
nemesia: "bg-gradient-to-r from-emerald-300 to-cyan-300",
|
|
50
|
+
snowflake: "bg-gradient-to-r from-indigo-300 to-cyan-300",
|
|
51
|
+
"blue-bird": "bg-gradient-to-r from-cyan-400 to-blue-400",
|
|
52
|
+
blueprint: "bg-gradient-to-r from-indigo-400 to-blue-400",
|
|
53
|
+
salvia: "bg-gradient-to-r from-blue-500 to-violet-500",
|
|
54
|
+
heartsease: "bg-gradient-to-r from-fuchsia-500 to-pink-500",
|
|
55
|
+
amaranthus: "bg-gradient-to-r from-fuchsia-500 to-purple-500",
|
|
56
|
+
candy: "bg-gradient-to-r from-fuchsia-400 to-pink-400",
|
|
57
|
+
verbena: "bg-gradient-to-r from-violet-400 to-purple-400",
|
|
58
|
+
clematis: "bg-gradient-to-r from-violet-500 to-indigo-500",
|
|
59
|
+
hibiscus: "bg-gradient-to-r from-purple-400 to-purple-800",
|
|
60
|
+
"clear-night": "bg-gradient-to-r from-blue-700 to-indigo-800",
|
|
61
|
+
clay: "bg-gradient-to-r from-neutral-200 to-stone-300",
|
|
62
|
+
soil: "bg-gradient-to-r from-stone-400 to-stone-600",
|
|
63
|
+
silver: "bg-gradient-to-r from-slate-200 to-slate-400",
|
|
64
|
+
"fir-tree": "bg-gradient-to-r from-emerald-400 to-emerald-800",
|
|
65
|
+
metal: "bg-gradient-to-r from-slate-400 to-slate-700",
|
|
66
|
+
darkness: "bg-gradient-to-r from-slate-800 to-slate-600",
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export function Gradient({
|
|
70
|
+
variant = "salvia",
|
|
71
|
+
className,
|
|
72
|
+
...props
|
|
73
|
+
}: GradientProps) {
|
|
74
|
+
return (
|
|
75
|
+
<div
|
|
76
|
+
className={cn(gradientVariants[variant], className)}
|
|
77
|
+
{...props}
|
|
78
|
+
/>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Custom inference UI components
|
|
2
|
+
// Re-exported from @inference/common/ui/infsh
|
|
3
|
+
|
|
4
|
+
export * from "./audio-player"
|
|
5
|
+
export * from "./circuit"
|
|
6
|
+
export * from "./pastel-gradient"
|
|
7
|
+
export * from "./pixel-symmetry"
|
|
8
|
+
export * from "./code"
|
|
9
|
+
export * from "./copy-button"
|
|
10
|
+
export { default as CookieConsent } from "./cookie-consent"
|
|
11
|
+
export * from "./country-dropdown"
|
|
12
|
+
export * from "./gradient"
|
|
13
|
+
export * from "./inline-sidebar"
|
|
14
|
+
export * from "./input-color"
|
|
15
|
+
export * from "./logo-color"
|
|
16
|
+
export * from "./logo-full"
|
|
17
|
+
export * from "./logo-svg"
|
|
18
|
+
export * from "./menu-navigation"
|
|
19
|
+
export * from "./multi-select"
|
|
20
|
+
export * from "./scroll-more"
|
|
21
|
+
export * from "./shimmering-text"
|
|
22
|
+
export * from "./tooltip-button"
|
|
23
|
+
export * from "./tree-view"
|
|
24
|
+
export * from "./waveform"
|
|
25
|
+
export * from "./zoomable-image"
|
|
26
|
+
|
|
27
|
+
// Theme (sidebar-based - requires SidebarProvider)
|
|
28
|
+
export * from "./theme-switcher"
|
|
29
|
+
export * from "./theme-switcher-sidebar"
|
|
30
|
+
// Theme (simple - no sidebar required)
|
|
31
|
+
export * from "./theme-switcher-simple"
|
|
32
|
+
|
|
33
|
+
// Loaders
|
|
34
|
+
export { default as GlowLoader } from "./glow-loader"
|
|
35
|
+
export { default as GlowLoaderSm } from "./glow-loader-sm"
|
|
36
|
+
export { default as GlowLogo } from "./glow-logo"
|
|
37
|
+
export { default as GlowLoaderFast } from "./glow-loader-fast"
|
|
38
|
+
export { default as GlowLoaderMono } from "./glow-loader-mono"
|
|
39
|
+
export { default as GlowLoaderSmFast } from "./glow-loader-sm-fast"
|
|
40
|
+
export { default as GlowLoaderSmMono } from "./glow-loader-sm-mono"
|
|
41
|
+
export { default as UnglowLoader } from "./unglow-loader"
|
|
42
|
+
export * from "./select"
|
|
43
|
+
export * from "./sidebar-light"
|
|
44
|
+
export * from "./toggle-group"
|
|
45
|
+
export * from "./button"
|