reend-components 0.1.0 → 0.2.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/README.md +106 -8
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.ts +100 -0
- package/dist/lib/index.mjs +669 -142
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/style.css +1 -1
- package/package.json +33 -13
- package/src/styles/variables.css +71 -1
- package/src/tailwind-preset.ts +189 -2
package/README.md
CHANGED
|
@@ -3,11 +3,22 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/reend-components)
|
|
4
4
|
[](https://www.npmjs.com/package/reend-components)
|
|
5
5
|
[](LICENSE)
|
|
6
|
+
[](https://github.com/VBeatDead/ReEnd-Components/actions/workflows/ci.yml)
|
|
6
7
|
|
|
7
|
-
**
|
|
8
|
+
**The only React component library built for tactical, sci-fi, and gaming-inspired UI.**
|
|
9
|
+
|
|
10
|
+
Not another shadcn clone. Not a Bootstrap wrapper.
|
|
11
|
+
ReEnd is for when your app should look like a tactical HUD.
|
|
12
|
+
|
|
13
|
+
→ Dark-first design system (Endfield aesthetic)
|
|
14
|
+
→ Signature components you won't find anywhere else
|
|
15
|
+
→ CSS variable tokens + Tailwind preset
|
|
16
|
+
→ TypeScript, Radix UI primitives, accessible
|
|
8
17
|
|
|
9
18
|
[Documentation](https://reend-components.pages.dev) · [GitHub](https://github.com/VBeatDead/ReEnd-Components) · [npm](https://www.npmjs.com/package/reend-components)
|
|
10
19
|
|
|
20
|
+
---
|
|
21
|
+
|
|
11
22
|
## Installation
|
|
12
23
|
|
|
13
24
|
```bash
|
|
@@ -22,11 +33,20 @@ bun add reend-components
|
|
|
22
33
|
|
|
23
34
|
### Peer Dependencies
|
|
24
35
|
|
|
25
|
-
| Package
|
|
26
|
-
|
|
|
27
|
-
| react
|
|
28
|
-
| react-dom
|
|
29
|
-
| tailwindcss
|
|
36
|
+
| Package | Version | Required for |
|
|
37
|
+
| ---------------- | ------------------ | --------------------- |
|
|
38
|
+
| `react` | ≥18.0.0 | All components |
|
|
39
|
+
| `react-dom` | ≥18.0.0 | All components |
|
|
40
|
+
| `tailwindcss` | ≥3.4.0 *(optional)*| Tailwind preset |
|
|
41
|
+
| `framer-motion` | ≥10.0.0 *(optional)*| Signature components |
|
|
42
|
+
| `lucide-react` | ≥0.400.0 *(optional)*| HoloCard icon prop |
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# For Signature components (GlitchText, RadarChart, TacticalPanel, etc.)
|
|
46
|
+
npm install framer-motion lucide-react
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
30
50
|
|
|
31
51
|
## Quick Start
|
|
32
52
|
|
|
@@ -40,6 +60,7 @@ export default {
|
|
|
40
60
|
presets: [reendPreset],
|
|
41
61
|
content: [
|
|
42
62
|
"./src/**/*.{ts,tsx}",
|
|
63
|
+
// Required for Signature component classes to be included
|
|
43
64
|
"./node_modules/reend-components/dist/**/*.{js,mjs}",
|
|
44
65
|
],
|
|
45
66
|
};
|
|
@@ -76,13 +97,15 @@ function App() {
|
|
|
76
97
|
|
|
77
98
|
### Without Tailwind
|
|
78
99
|
|
|
79
|
-
|
|
100
|
+
Import the pre-built stylesheet instead:
|
|
80
101
|
|
|
81
102
|
```tsx
|
|
82
103
|
import "reend-components/styles.css";
|
|
83
104
|
import { Tooltip } from "reend-components";
|
|
84
105
|
```
|
|
85
106
|
|
|
107
|
+
---
|
|
108
|
+
|
|
86
109
|
## Components
|
|
87
110
|
|
|
88
111
|
| Component | Description |
|
|
@@ -94,6 +117,61 @@ import { Tooltip } from "reend-components";
|
|
|
94
117
|
| `cn()` | Utility for merging Tailwind classes |
|
|
95
118
|
| `useToast()` | Toast notification hook |
|
|
96
119
|
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Signature Components
|
|
123
|
+
|
|
124
|
+
> **Requires** `framer-motion` and/or `lucide-react` peer dependencies.
|
|
125
|
+
> Add `./node_modules/reend-components/dist/**/*.{js,mjs}` to your Tailwind `content`
|
|
126
|
+
> array so animation utilities (`animate-glitch`, `clip-corner`, etc.) are included.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm install framer-motion lucide-react
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| Component | Description | Key Props |
|
|
133
|
+
| ---------------- | -------------------------------------------------------- | --------- |
|
|
134
|
+
| `GlitchText` | Animated glitch effect text span | `children: string`, `className?` |
|
|
135
|
+
| `DiamondLoader` | Rotating diamond loading spinner | `size?: "sm"\|"md"\|"lg"`, `label?` |
|
|
136
|
+
| `TacticalPanel` | HUD-style content panel with status indicator | `title`, `status?: "online"\|"warning"\|"offline"\|"scanning"` |
|
|
137
|
+
| `HoloCard` | Holographic stat/feature card with hover tilt | `title`, `subtitle`, `icon: React.ElementType`, `value?` |
|
|
138
|
+
| `DataStream` | Scrolling live data feed terminal | `messages?: string[]` |
|
|
139
|
+
| `TacticalBadge` | Status badge with semantic variants (CVA-powered) | `variant?: "default"\|"success"\|"warning"\|"danger"\|"info"` |
|
|
140
|
+
| `WarningBanner` | Alert banner with severity levels | `level?: "caution"\|"alert"\|"critical"` |
|
|
141
|
+
| `ScanDivider` | Animated scan-line section divider | `label?` |
|
|
142
|
+
| `CoordinateTag` | HUD coordinate display tag | `label`, `value`, `unit?` |
|
|
143
|
+
| `RadarChart` | Animated SVG radar/spider chart | `data: {label, value}[]`, `size?`, `color?: "primary"\|"cyan"` |
|
|
144
|
+
| `HUDOverlay` | Corner-bracket HUD overlay with crosshair and coords | `systemLabel?`, `lat?`, `lon?`, `showCoords?`, `showCrosshair?` |
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
import {
|
|
148
|
+
TacticalPanel,
|
|
149
|
+
HUDOverlay,
|
|
150
|
+
RadarChart,
|
|
151
|
+
GlitchText,
|
|
152
|
+
} from "reend-components";
|
|
153
|
+
|
|
154
|
+
function Dashboard() {
|
|
155
|
+
return (
|
|
156
|
+
<HUDOverlay systemLabel="ENDFIELD::DASHBOARD">
|
|
157
|
+
<TacticalPanel title="OPERATOR STATUS" status="online">
|
|
158
|
+
<GlitchText>DR. AMBROSE</GlitchText>
|
|
159
|
+
<RadarChart
|
|
160
|
+
data={[
|
|
161
|
+
{ label: "ATK", value: 88 },
|
|
162
|
+
{ label: "DEF", value: 62 },
|
|
163
|
+
{ label: "TECH", value: 95 },
|
|
164
|
+
{ label: "SPD", value: 74 },
|
|
165
|
+
]}
|
|
166
|
+
/>
|
|
167
|
+
</TacticalPanel>
|
|
168
|
+
</HUDOverlay>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
97
175
|
## Theming
|
|
98
176
|
|
|
99
177
|
ReEnd uses CSS custom properties for all colors. Override any variable:
|
|
@@ -128,6 +206,8 @@ See [CSS Variable Reference](https://reend-components.pages.dev/docs/foundations
|
|
|
128
206
|
|
|
129
207
|
[Full token reference →](https://reend-components.pages.dev/docs/foundations)
|
|
130
208
|
|
|
209
|
+
---
|
|
210
|
+
|
|
131
211
|
## Development
|
|
132
212
|
|
|
133
213
|
```bash
|
|
@@ -137,9 +217,27 @@ npm install
|
|
|
137
217
|
npm run dev # docs dev server at :8080
|
|
138
218
|
npm run build # build docs SPA
|
|
139
219
|
npm run build:lib # build library for npm
|
|
140
|
-
npm run test # run tests
|
|
220
|
+
npm run test # run tests (89 tests)
|
|
221
|
+
npm run test:coverage # test + coverage report
|
|
141
222
|
```
|
|
142
223
|
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Internationalization (i18n)
|
|
227
|
+
|
|
228
|
+
The documentation site supports **English** (default) and **Bahasa Indonesia** via [react-i18next](https://react.i18next.com).
|
|
229
|
+
|
|
230
|
+
### URL Structure
|
|
231
|
+
|
|
232
|
+
| URL Pattern | Language |
|
|
233
|
+
| ---------------------- | ---------- |
|
|
234
|
+
| `/docs/foundations` | English |
|
|
235
|
+
| `/id/docs/foundations` | Indonesian |
|
|
236
|
+
|
|
237
|
+
**1,425 translation keys** across 16 namespaces × 2 languages.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
143
241
|
## License
|
|
144
242
|
|
|
145
243
|
MIT © [VBeatDead](https://github.com/VBeatDead)
|
package/dist/lib/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),R=require("react"),D=require("@radix-ui/react-tooltip"),P=require("clsx"),E=require("tailwind-merge"),M=require("@radix-ui/react-toast"),I=require("class-variance-authority"),V=require("lucide-react"),w=require("sonner");function g(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const s=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,s.get?s:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const i=g(R),u=g(D),a=g(M);function n(...t){return E.twMerge(P.clsx(t))}const q=u.Provider,C=u.Root,k=u.Trigger,S=i.forwardRef(({className:t,sideOffset:e=4,...o},s)=>r.jsx(u.Content,{ref:s,sideOffset:e,className:n("z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...o}));S.displayName=u.Content.displayName;const N=a.Provider,T=i.forwardRef(({className:t,...e},o)=>r.jsx(a.Viewport,{ref:o,className:n("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",t),...e}));T.displayName=a.Viewport.displayName;const z=I.cva("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),v=i.forwardRef(({className:t,variant:e,...o},s)=>r.jsx(a.Root,{ref:s,className:n(z({variant:e}),t),...o}));v.displayName=a.Root.displayName;const j=i.forwardRef(({className:t,...e},o)=>r.jsx(a.Action,{ref:o,className:n("inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",t),...e}));j.displayName=a.Action.displayName;const x=i.forwardRef(({className:t,...e},o)=>r.jsx(a.Close,{ref:o,className:n("absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",t),"toast-close":"",...e,children:r.jsx(V.X,{className:"h-4 w-4"})}));x.displayName=a.Close.displayName;const b=i.forwardRef(({className:t,...e},o)=>r.jsx(a.Title,{ref:o,className:n("text-sm font-semibold",t),...e}));b.displayName=a.Title.displayName;const y=i.forwardRef(({className:t,...e},o)=>r.jsx(a.Description,{ref:o,className:n("text-sm opacity-90",t),...e}));y.displayName=a.Description.displayName;const B=1,L=5e3;let f=0;function U(){return f=(f+1)%Number.MAX_SAFE_INTEGER,f.toString()}const m=new Map,h=t=>{if(m.has(t))return;const e=setTimeout(()=>{m.delete(t),c({type:"REMOVE_TOAST",toastId:t})},L);m.set(t,e)},X=(t,e)=>{switch(e.type){case"ADD_TOAST":return{...t,toasts:[e.toast,...t.toasts].slice(0,B)};case"UPDATE_TOAST":return{...t,toasts:t.toasts.map(o=>o.id===e.toast.id?{...o,...e.toast}:o)};case"DISMISS_TOAST":{const{toastId:o}=e;return o?h(o):t.toasts.forEach(s=>{h(s.id)}),{...t,toasts:t.toasts.map(s=>s.id===o||o===void 0?{...s,open:!1}:s)}}case"REMOVE_TOAST":return e.toastId===void 0?{...t,toasts:[]}:{...t,toasts:t.toasts.filter(o=>o.id!==e.toastId)}}},l=[];let p={toasts:[]};function c(t){p=X(p,t),l.forEach(e=>{e(p)})}function A({...t}){const e=U(),o=d=>c({type:"UPDATE_TOAST",toast:{...d,id:e}}),s=()=>c({type:"DISMISS_TOAST",toastId:e});return c({type:"ADD_TOAST",toast:{...t,id:e,open:!0,onOpenChange:d=>{d||s()}}}),{id:e,dismiss:s,update:o}}function O(){const[t,e]=i.useState(p);return i.useEffect(()=>(l.push(e),()=>{const o=l.indexOf(e);o>-1&&l.splice(o,1)}),[t]),{...t,toast:A,dismiss:o=>c({type:"DISMISS_TOAST",toastId:o})}}function F(){const{toasts:t}=O();return r.jsxs(N,{children:[t.map(function({id:e,title:o,description:s,action:d,..._}){return r.jsxs(v,{..._,children:[r.jsxs("div",{className:"grid gap-1",children:[o&&r.jsx(b,{children:o}),s&&r.jsx(y,{children:s})]}),d,r.jsx(x,{})]},e)}),r.jsx(T,{})]})}const G=({theme:t="dark",...e})=>r.jsx(w.Toaster,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e});Object.defineProperty(exports,"toast",{enumerable:!0,get:()=>w.toast});exports.SonnerToaster=G;exports.Toast=v;exports.ToastAction=j;exports.ToastClose=x;exports.ToastDescription=y;exports.ToastProvider=N;exports.ToastTitle=b;exports.ToastViewport=T;exports.Toaster=F;exports.Tooltip=C;exports.TooltipContent=S;exports.TooltipProvider=q;exports.TooltipTrigger=k;exports.cn=n;exports.toastAction=A;exports.useToast=O;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),ce=require("react"),de=require("@radix-ui/react-tooltip"),pe=require("clsx"),me=require("tailwind-merge"),ue=require("@radix-ui/react-toast"),U=require("class-variance-authority"),E=require("lucide-react"),G=require("sonner"),y=require("framer-motion");function R(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const a=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(r,s,a.get?a:{enumerable:!0,get:()=>t[s]})}}return r.default=t,Object.freeze(r)}const n=R(ce),j=R(de),p=R(ue);function g(...t){return me.twMerge(pe.clsx(t))}const fe=j.Provider,xe=j.Root,ge=j.Trigger,q=n.forwardRef(({className:t,sideOffset:r=4,...s},a)=>e.jsx(j.Content,{ref:a,sideOffset:r,className:g("z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...s}));q.displayName=j.Content.displayName;const H=p.Provider,I=n.forwardRef(({className:t,...r},s)=>e.jsx(p.Viewport,{ref:s,className:g("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",t),...r}));I.displayName=p.Viewport.displayName;const be=U.cva("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),P=n.forwardRef(({className:t,variant:r,...s},a)=>e.jsx(p.Root,{ref:a,className:g(be({variant:r}),t),...s}));P.displayName=p.Root.displayName;const z=n.forwardRef(({className:t,...r},s)=>e.jsx(p.Action,{ref:s,className:g("inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",t),...r}));z.displayName=p.Action.displayName;const k=n.forwardRef(({className:t,...r},s)=>e.jsx(p.Close,{ref:s,className:g("absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",t),"toast-close":"",...r,children:e.jsx(E.X,{className:"h-4 w-4"})}));k.displayName=p.Close.displayName;const O=n.forwardRef(({className:t,...r},s)=>e.jsx(p.Title,{ref:s,className:g("text-sm font-semibold",t),...r}));O.displayName=p.Title.displayName;const C=n.forwardRef(({className:t,...r},s)=>e.jsx(p.Description,{ref:s,className:g("text-sm opacity-90",t),...r}));C.displayName=p.Description.displayName;const ve=1,he=5e3;let D=0;function ye(){return D=(D+1)%Number.MAX_SAFE_INTEGER,D.toString()}const $=new Map,B=t=>{if($.has(t))return;const r=setTimeout(()=>{$.delete(t),N({type:"REMOVE_TOAST",toastId:t})},he);$.set(t,r)},Ne=(t,r)=>{switch(r.type){case"ADD_TOAST":return{...t,toasts:[r.toast,...t.toasts].slice(0,ve)};case"UPDATE_TOAST":return{...t,toasts:t.toasts.map(s=>s.id===r.toast.id?{...s,...r.toast}:s)};case"DISMISS_TOAST":{const{toastId:s}=r;return s?B(s):t.toasts.forEach(a=>{B(a.id)}),{...t,toasts:t.toasts.map(a=>a.id===s||s===void 0?{...a,open:!1}:a)}}case"REMOVE_TOAST":return r.toastId===void 0?{...t,toasts:[]}:{...t,toasts:t.toasts.filter(s=>s.id!==r.toastId)}}},w=[];let S={toasts:[]};function N(t){S=Ne(S,t),w.forEach(r=>{r(S)})}function F({...t}){const r=ye(),s=o=>N({type:"UPDATE_TOAST",toast:{...o,id:r}}),a=()=>N({type:"DISMISS_TOAST",toastId:r});return N({type:"ADD_TOAST",toast:{...t,id:r,open:!0,onOpenChange:o=>{o||a()}}}),{id:r,dismiss:a,update:s}}function W(){const[t,r]=n.useState(S);return n.useEffect(()=>(w.push(r),()=>{const s=w.indexOf(r);s>-1&&w.splice(s,1)}),[t]),{...t,toast:F,dismiss:s=>N({type:"DISMISS_TOAST",toastId:s})}}function je(){const{toasts:t}=W();return e.jsxs(H,{children:[t.map(function({id:r,title:s,description:a,action:o,...c}){return e.jsxs(P,{...c,children:[e.jsxs("div",{className:"grid gap-1",children:[s&&e.jsx(O,{children:s}),a&&e.jsx(C,{children:a})]}),o,e.jsx(k,{})]},r)}),e.jsx(I,{})]})}const Te=({theme:t="dark",...r})=>e.jsx(G.Toaster,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...r}),Y=n.forwardRef(({children:t,className:r=""},s)=>e.jsxs("span",{ref:s,className:`relative inline-block ${r}`,children:[e.jsx("span",{className:"relative z-10",children:t}),e.jsx("span",{"aria-hidden":!0,className:"absolute inset-0 text-ef-cyan opacity-70 animate-glitch",style:{clipPath:"inset(20% 0 50% 0)",transform:"translate(-2px, 0)"},children:t}),e.jsx("span",{"aria-hidden":!0,className:"absolute inset-0 text-ef-red opacity-70 animate-glitch",style:{clipPath:"inset(50% 0 20% 0)",transform:"translate(2px, 0)",animationDelay:"0.1s"},children:t})]}));Y.displayName="GlitchText";const we={sm:16,md:28,lg:44},X=n.forwardRef(({size:t="md",label:r,className:s},a)=>{const o=we[t];return e.jsxs("div",{ref:a,className:`flex flex-col items-center gap-3${s?` ${s}`:""}`,children:[e.jsx("div",{className:"relative",style:{width:o*2,height:o*2},children:[0,1,2].map(c=>e.jsx("div",{className:"absolute inset-0 border-2 border-primary",style:{transform:`rotate(45deg) scale(${1-c*.25})`,animation:`diamondSpin ${1.2+c*.4}s linear infinite${c===1?" reverse":""}`,opacity:1-c*.25}},c))}),r&&e.jsx("span",{className:"font-mono text-xs text-muted-foreground tracking-[0.15em] uppercase",children:r})]})});X.displayName="DiamondLoader";const Se={online:"ONLINE",warning:"CAUTION",offline:"OFFLINE",scanning:"SCANNING"},Ee={online:"bg-ef-green",warning:"bg-ef-yellow",offline:"bg-ef-red",scanning:"bg-ef-cyan animate-pulse"},K=n.forwardRef(({title:t,status:r="online",children:s,className:a},o)=>e.jsxs("div",{ref:o,className:`relative border border-border bg-surface-1 scanline-overlay${a?` ${a}`:""}`,children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(E.Crosshair,{className:"w-3.5 h-3.5 text-primary"}),e.jsx("span",{className:"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-foreground",children:t})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`w-2 h-2 ${Ee[r]}`,style:{clipPath:"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)"}}),e.jsx("span",{className:"font-mono text-[10px] tracking-[0.1em] text-muted-foreground",children:Se[r]})]})]}),e.jsx("div",{className:"absolute top-0 left-0 w-6 h-6 border-t-2 border-l-2 border-primary/40 pointer-events-none"}),e.jsx("div",{className:"absolute top-0 right-0 w-6 h-6 border-t-2 border-r-2 border-primary/40 pointer-events-none"}),e.jsx("div",{className:"absolute bottom-0 left-0 w-6 h-6 border-b-2 border-l-2 border-primary/40 pointer-events-none"}),e.jsx("div",{className:"absolute bottom-0 right-0 w-6 h-6 border-b-2 border-r-2 border-primary/40 pointer-events-none"}),e.jsx("div",{className:"p-5",children:s})]}));K.displayName="TacticalPanel";const Q=n.forwardRef(({title:t,subtitle:r,icon:s,value:a,className:o},c)=>{const[i,f]=n.useState(!1);return e.jsxs("div",{ref:c,className:`relative clip-corner border border-border bg-surface-1 p-6 overflow-hidden group cursor-pointer transition-all duration-500 hover:border-primary/30${o?` ${o}`:""}`,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[e.jsx("div",{className:"absolute left-0 right-0 h-px bg-gradient-to-r from-transparent via-primary/60 to-transparent pointer-events-none transition-all",style:{top:i?"100%":"-10%",opacity:i?1:0,transitionDuration:"2000ms"}}),e.jsx("div",{className:"absolute inset-0 pointer-events-none transition-opacity duration-500",style:{background:"linear-gradient(135deg, transparent 0%, hsl(var(--primary) / 0.03) 40%, transparent 60%)",opacity:i?1:0}}),e.jsxs("div",{className:"relative z-10",children:[e.jsx(s,{className:"w-5 h-5 text-primary mb-4 group-hover:drop-shadow-[0_0_8px_hsl(var(--primary)/0.5)] transition-all"}),a&&e.jsx("p",{className:"font-display text-3xl font-bold text-primary mb-1",children:a}),e.jsx("h4",{className:"font-display text-sm font-bold tracking-[0.05em] uppercase text-foreground mb-1",children:t}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r})]}),e.jsx("div",{className:"absolute bottom-3 right-3 text-primary/20 group-hover:text-primary/60 transition-colors text-xs",children:"◆"})]})});Q.displayName="HoloCard";const Ae=["[SYS] Initializing ENDFIELD protocol...","[NET] Connection established — latency: 12ms","[SEC] Authentication verified ◆ Level: ALPHA","[DAT] Loading design tokens: 94 variables mapped","[GPU] Render pipeline: Optimized (60fps locked)","[SYS] Component registry: 70 modules online","[NET] Sync complete — all nodes operational","[DAT] Color system: HSL-based, 9 neutrals, 9 accents","[SEC] Encryption: AES-256 ◆ Status: ACTIVE","[SYS] ENDFIELD DESIGN SYSTEM v2.0 ◆ READY"],Z=n.forwardRef(({messages:t=Ae,className:r},s)=>{const[a,o]=n.useState([]),c=n.useRef(null);return n.useEffect(()=>{let i=0;const f=setInterval(()=>{o(x=>{const u=[...x,t[i%t.length]];return u.length>8?u.slice(-8):u}),i++},1200);return()=>clearInterval(f)},[t]),n.useEffect(()=>{c.current&&(c.current.scrollTop=c.current.scrollHeight)},[a]),e.jsxs("div",{ref:s,className:`border border-border bg-background clip-corner overflow-hidden${r?` ${r}`:""}`,children:[e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 border-b border-border bg-surface-0",children:[e.jsx(E.Terminal,{className:"w-3.5 h-3.5 text-primary"}),e.jsx("span",{className:"font-mono text-[10px] tracking-[0.1em] text-muted-foreground uppercase",children:"LIVE FEED"}),e.jsxs("div",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-ef-green animate-pulse",style:{clipPath:"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)"}}),e.jsx("span",{className:"font-mono text-[10px] text-ef-green",children:"ACTIVE"})]})]}),e.jsxs("div",{ref:c,className:"p-4 h-48 overflow-y-auto font-mono text-xs space-y-1",children:[e.jsx(y.AnimatePresence,{children:a.map((i,f)=>e.jsx(y.motion.div,{initial:{opacity:0,x:-10},animate:{opacity:1,x:0},className:i.includes("[SEC]")?"text-ef-green":i.includes("[NET]")?"text-ef-blue":i.includes("[DAT]")?"text-ef-cyan":i.includes("[GPU]")?"text-ef-purple":"text-muted-foreground",children:i},`${i}-${f}`))}),e.jsx("span",{className:"inline-block w-2 h-4 bg-primary animate-cursor-blink"})]})]})});Z.displayName="DataStream";const J=U.cva("inline-flex items-center gap-1.5 clip-corner-sm border px-3 py-1 font-display text-[10px] font-bold tracking-[0.15em] uppercase",{variants:{variant:{default:"border-primary/40 text-primary bg-primary/10",success:"border-ef-green/40 text-ef-green bg-ef-green/10",warning:"border-ef-yellow/40 text-ef-yellow bg-ef-yellow/10",danger:"border-ef-red/40 text-ef-red bg-ef-red/10",info:"border-ef-cyan/40 text-ef-cyan bg-ef-cyan/10"}},defaultVariants:{variant:"default"}}),ee=n.forwardRef(({variant:t,className:r,children:s,...a},o)=>e.jsxs("span",{ref:o,className:g(J({variant:t}),r),...a,children:[e.jsx("span",{style:{fontSize:"6px"},children:"◆"}),s]}));ee.displayName="TacticalBadge";const De={caution:{border:"border-ef-yellow/30",bg:"bg-ef-yellow/5",icon:"text-ef-yellow",label:"CAUTION"},alert:{border:"border-ef-orange/30",bg:"bg-ef-orange/5",icon:"text-ef-orange",label:"ALERT"},critical:{border:"border-ef-red/30",bg:"bg-ef-red/5",icon:"text-ef-red",label:"CRITICAL"}},te=n.forwardRef(({level:t="caution",children:r,className:s},a)=>{const o=De[t];return e.jsxs("div",{ref:a,className:`clip-corner border ${o.border} ${o.bg} p-4 flex items-start gap-3${s?` ${s}`:""}`,children:[e.jsx(E.AlertTriangle,{className:`w-5 h-5 ${o.icon} shrink-0 mt-0.5`}),e.jsxs("div",{children:[e.jsx("span",{className:`font-display text-[11px] font-bold tracking-[0.15em] ${o.icon}`,children:o.label}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:r})]})]})});te.displayName="WarningBanner";const re=n.forwardRef(({label:t,className:r},s)=>e.jsxs("div",{ref:s,className:`relative flex items-center gap-4 py-2${r?` ${r}`:""}`,children:[e.jsx("div",{className:"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent"}),t&&e.jsxs("span",{className:"font-display text-[10px] font-bold tracking-[0.2em] uppercase text-primary/60 flex items-center gap-2",children:[e.jsx("span",{style:{fontSize:"6px"},children:"◆"})," ",t," ",e.jsx("span",{style:{fontSize:"6px"},children:"◆"})]}),e.jsx("div",{className:"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent"})]}));re.displayName="ScanDivider";const se=n.forwardRef(({label:t,value:r,unit:s,className:a},o)=>e.jsxs("div",{ref:o,className:`inline-flex items-center border border-border bg-surface-0 overflow-hidden${a?` ${a}`:""}`,children:[e.jsx("span",{className:"font-mono text-[10px] tracking-[0.1em] uppercase text-muted-foreground bg-surface-2 px-2.5 py-1.5 border-r border-border",children:t}),e.jsx("span",{className:"font-mono text-xs text-primary px-2.5 py-1.5 font-bold",children:r}),s&&e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground pr-2.5",children:s})]}));se.displayName="CoordinateTag";const ae=n.forwardRef(({data:t,size:r=260,color:s="primary",className:a},o)=>{const c=n.useRef(null),i=y.useInView(c,{once:!0}),f=n.useCallback(l=>{c.current=l,typeof o=="function"?o(l):o&&(o.current=l)},[o]),x=r/2,u=r/2,m=r*.38,v=4,ne=t.length,_=Math.PI*2/ne,h=s==="cyan"?"--ef-cyan":"--primary",T=(l,d)=>({x:x+d*Math.sin(l*_),y:u-d*Math.cos(l*_)}),ie=Array.from({length:v},(l,d)=>{const b=m*((d+1)/v);return t.map((A,le)=>T(le,b)).map(A=>`${A.x},${A.y}`).join(" ")}),L=t.map((l,d)=>T(d,l.value/100*m)),M=L.map(l=>`${l.x},${l.y}`).join(" "),V=t.map(()=>`${x},${u}`).join(" ");return e.jsx("div",{ref:f,className:`flex flex-col items-center w-full${a?` ${a}`:""}`,children:e.jsxs("svg",{viewBox:`0 0 ${r} ${r}`,className:"w-full max-w-[260px] h-auto overflow-visible",children:[ie.map((l,d)=>e.jsx("polygon",{points:l,fill:"none",stroke:"hsl(var(--border))",strokeWidth:1,opacity:.5},d)),t.map((l,d)=>{const b=T(d,m);return e.jsx("line",{x1:x,y1:u,x2:b.x,y2:b.y,stroke:"hsl(var(--border))",strokeWidth:1,opacity:.3},d)}),e.jsx(y.motion.polygon,{points:i?M:V,fill:`hsl(var(${h}) / 0.15)`,stroke:`hsl(var(${h}))`,strokeWidth:2,initial:!1,animate:{points:i?M:V},transition:{duration:.8,ease:[.25,.8,.25,1]},style:{filter:`drop-shadow(0 0 8px hsl(var(${h}) / 0.3))`}}),L.map((l,d)=>e.jsx(y.motion.circle,{cx:x,cy:u,r:4,fill:`hsl(var(${h}))`,stroke:"hsl(var(--background))",strokeWidth:2,initial:!1,animate:{cx:i?l.x:x,cy:i?l.y:u},transition:{duration:.8,delay:d*.05},style:{filter:`drop-shadow(0 0 4px hsl(var(${h}) / 0.5))`}},d)),t.map((l,d)=>{const b=T(d,m+20);return e.jsx("text",{x:b.x,y:b.y,textAnchor:"middle",dominantBaseline:"middle",className:"font-display text-[9px] font-bold tracking-[0.1em] uppercase",fill:"hsl(var(--muted-foreground))",children:l.label},d)})]})})});ae.displayName="RadarChart";const oe=n.forwardRef(({children:t,systemLabel:r="SYS::ENDFIELD v2.0",lat:s="LAT 37.7749°N",lon:a="LON 122.4194°W",showCoords:o=!0,showCrosshair:c=!0,className:i},f)=>{const[x,u]=n.useState("");return n.useEffect(()=>{const m=()=>u(new Date().toLocaleTimeString("en-GB"));m();const v=setInterval(m,1e3);return()=>clearInterval(v)},[]),e.jsxs("div",{ref:f,className:`relative border border-border bg-surface-0 aspect-video flex items-center justify-center overflow-hidden${i?` ${i}`:""}`,children:[e.jsx("div",{className:"absolute inset-0 scanline-overlay"}),["top-3 left-3 border-t-2 border-l-2","top-3 right-3 border-t-2 border-r-2","bottom-3 left-3 border-b-2 border-l-2","bottom-3 right-3 border-b-2 border-r-2"].map((m,v)=>e.jsx("div",{className:`absolute w-8 h-8 ${m} border-primary/40 pointer-events-none`},v)),c&&e.jsxs("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none",children:[e.jsx("div",{className:"w-6 h-px bg-primary/20",style:{position:"absolute",top:"50%",left:"-12px"}}),e.jsx("div",{className:"h-6 w-px bg-primary/20",style:{position:"absolute",left:"50%",top:"-12px"}})]}),o&&e.jsxs("div",{className:"absolute top-4 left-12 font-mono text-[9px] text-muted-foreground/60 space-y-0.5",children:[e.jsx("div",{children:r}),e.jsx("div",{className:"text-primary/60",children:x})]}),o&&e.jsxs("div",{className:"absolute top-4 right-12 font-mono text-[9px] text-muted-foreground/60 text-right space-y-0.5",children:[e.jsx("div",{children:s}),e.jsx("div",{children:a})]}),e.jsxs("div",{className:"absolute bottom-4 left-12 right-12 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-ef-green",style:{clipPath:"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)"}}),e.jsx("span",{className:"font-mono text-[9px] text-ef-green/80",children:"LINK ACTIVE"})]}),e.jsx("div",{className:"flex gap-4",children:["FPS:60","MEM:47%","NET:12ms"].map(m=>e.jsx("span",{className:"font-mono text-[9px] text-muted-foreground/50",children:m},m))})]}),e.jsx("div",{className:"relative z-10",children:t})]})});oe.displayName="HUDOverlay";Object.defineProperty(exports,"toast",{enumerable:!0,get:()=>G.toast});exports.CoordinateTag=se;exports.DataStream=Z;exports.DiamondLoader=X;exports.GlitchText=Y;exports.HUDOverlay=oe;exports.HoloCard=Q;exports.RadarChart=ae;exports.ScanDivider=re;exports.SonnerToaster=Te;exports.TacticalBadge=ee;exports.TacticalPanel=K;exports.Toast=P;exports.ToastAction=z;exports.ToastClose=k;exports.ToastDescription=C;exports.ToastProvider=H;exports.ToastTitle=O;exports.ToastViewport=I;exports.Toaster=je;exports.Tooltip=xe;exports.TooltipContent=q;exports.TooltipProvider=fe;exports.TooltipTrigger=ge;exports.WarningBanner=te;exports.cn=g;exports.tacticalBadgeVariants=J;exports.toastAction=F;exports.useToast=W;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster, toast };\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/signature/glitch-text.tsx","../../src/components/ui/signature/diamond-loader.tsx","../../src/components/ui/signature/tactical-panel.tsx","../../src/components/ui/signature/holo-card.tsx","../../src/components/ui/signature/data-stream.tsx","../../src/components/ui/signature/tactical-badge.tsx","../../src/components/ui/signature/warning-banner.tsx","../../src/components/ui/signature/scan-divider.tsx","../../src/components/ui/signature/coordinate-tag.tsx","../../src/components/ui/signature/radar-chart.tsx","../../src/components/ui/signature/hud-overlay.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster, toast };\n","import * as React from \"react\";\n\nexport interface GlitchTextProps {\n children: string;\n className?: string;\n}\n\nexport const GlitchText = React.forwardRef<HTMLSpanElement, GlitchTextProps>(\n ({ children, className = \"\" }, ref) => (\n <span ref={ref} className={`relative inline-block ${className}`}>\n <span className=\"relative z-10\">{children}</span>\n <span\n aria-hidden\n className=\"absolute inset-0 text-ef-cyan opacity-70 animate-glitch\"\n style={{\n clipPath: \"inset(20% 0 50% 0)\",\n transform: \"translate(-2px, 0)\",\n }}\n >\n {children}\n </span>\n <span\n aria-hidden\n className=\"absolute inset-0 text-ef-red opacity-70 animate-glitch\"\n style={{\n clipPath: \"inset(50% 0 20% 0)\",\n transform: \"translate(2px, 0)\",\n animationDelay: \"0.1s\",\n }}\n >\n {children}\n </span>\n </span>\n ),\n);\nGlitchText.displayName = \"GlitchText\";\n","import * as React from \"react\";\n\nexport interface DiamondLoaderProps {\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n className?: string;\n}\n\nconst SIZE_MAP = { sm: 16, md: 28, lg: 44 } as const;\n\nexport const DiamondLoader = React.forwardRef<\n HTMLDivElement,\n DiamondLoaderProps\n>(({ size = \"md\", label, className }, ref) => {\n const s = SIZE_MAP[size];\n return (\n <div\n ref={ref}\n className={`flex flex-col items-center gap-3${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"relative\" style={{ width: s * 2, height: s * 2 }}>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"absolute inset-0 border-2 border-primary\"\n style={{\n transform: `rotate(45deg) scale(${1 - i * 0.25})`,\n animation: `diamondSpin ${1.2 + i * 0.4}s linear infinite${i === 1 ? \" reverse\" : \"\"}`,\n opacity: 1 - i * 0.25,\n }}\n />\n ))}\n </div>\n {label && (\n <span className=\"font-mono text-xs text-muted-foreground tracking-[0.15em] uppercase\">\n {label}\n </span>\n )}\n </div>\n );\n});\nDiamondLoader.displayName = \"DiamondLoader\";\n","import * as React from \"react\";\nimport { Crosshair } from \"lucide-react\";\n\nexport interface TacticalPanelProps {\n title: string;\n status?: \"online\" | \"warning\" | \"offline\" | \"scanning\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n online: \"ONLINE\",\n warning: \"CAUTION\",\n offline: \"OFFLINE\",\n scanning: \"SCANNING\",\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"bg-ef-green\",\n warning: \"bg-ef-yellow\",\n offline: \"bg-ef-red\",\n scanning: \"bg-ef-cyan animate-pulse\",\n};\n\nexport const TacticalPanel = React.forwardRef<\n HTMLDivElement,\n TacticalPanelProps\n>(({ title, status = \"online\", children, className }, ref) => (\n <div\n ref={ref}\n className={`relative border border-border bg-surface-1 scanline-overlay${className ? ` ${className}` : \"\"}`}\n >\n {/* HUD Header */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0\">\n <div className=\"flex items-center gap-3\">\n <Crosshair className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-foreground\">\n {title}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <div\n className={`w-2 h-2 ${STATUS_COLORS[status]}`}\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground\">\n {STATUS_LABELS[status]}\n </span>\n </div>\n </div>\n {/* Corner accents */}\n <div className=\"absolute top-0 left-0 w-6 h-6 border-t-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute top-0 right-0 w-6 h-6 border-t-2 border-r-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 left-0 w-6 h-6 border-b-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 right-0 w-6 h-6 border-b-2 border-r-2 border-primary/40 pointer-events-none\" />\n {/* Content */}\n <div className=\"p-5\">{children}</div>\n </div>\n));\nTacticalPanel.displayName = \"TacticalPanel\";\n","import * as React from \"react\";\n\nexport interface HoloCardProps {\n title: string;\n subtitle: string;\n icon: React.ElementType;\n value?: string;\n className?: string;\n}\n\nexport const HoloCard = React.forwardRef<HTMLDivElement, HoloCardProps>(\n ({ title, subtitle, icon: Icon, value, className }, ref) => {\n const [hovering, setHovering] = React.useState(false);\n return (\n <div\n ref={ref}\n className={`relative clip-corner border border-border bg-surface-1 p-6 overflow-hidden group cursor-pointer transition-all duration-500 hover:border-primary/30${className ? ` ${className}` : \"\"}`}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n {/* Scan line */}\n <div\n className=\"absolute left-0 right-0 h-px bg-gradient-to-r from-transparent via-primary/60 to-transparent pointer-events-none transition-all\"\n style={{\n top: hovering ? \"100%\" : \"-10%\",\n opacity: hovering ? 1 : 0,\n transitionDuration: \"2000ms\",\n }}\n />\n {/* Holographic shimmer */}\n <div\n className=\"absolute inset-0 pointer-events-none transition-opacity duration-500\"\n style={{\n background:\n \"linear-gradient(135deg, transparent 0%, hsl(var(--primary) / 0.03) 40%, transparent 60%)\",\n opacity: hovering ? 1 : 0,\n }}\n />\n <div className=\"relative z-10\">\n <Icon className=\"w-5 h-5 text-primary mb-4 group-hover:drop-shadow-[0_0_8px_hsl(var(--primary)/0.5)] transition-all\" />\n {value && (\n <p className=\"font-display text-3xl font-bold text-primary mb-1\">\n {value}\n </p>\n )}\n <h4 className=\"font-display text-sm font-bold tracking-[0.05em] uppercase text-foreground mb-1\">\n {title}\n </h4>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n {/* Bottom diamond */}\n <div className=\"absolute bottom-3 right-3 text-primary/20 group-hover:text-primary/60 transition-colors text-xs\">\n ◆\n </div>\n </div>\n );\n },\n);\nHoloCard.displayName = \"HoloCard\";\n","import * as React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Terminal } from \"lucide-react\";\n\nconst DEFAULT_MESSAGES = [\n \"[SYS] Initializing ENDFIELD protocol...\",\n \"[NET] Connection established — latency: 12ms\",\n \"[SEC] Authentication verified ◆ Level: ALPHA\",\n \"[DAT] Loading design tokens: 94 variables mapped\",\n \"[GPU] Render pipeline: Optimized (60fps locked)\",\n \"[SYS] Component registry: 70 modules online\",\n \"[NET] Sync complete — all nodes operational\",\n \"[DAT] Color system: HSL-based, 9 neutrals, 9 accents\",\n \"[SEC] Encryption: AES-256 ◆ Status: ACTIVE\",\n \"[SYS] ENDFIELD DESIGN SYSTEM v2.0 ◆ READY\",\n];\n\nexport interface DataStreamProps {\n messages?: string[];\n className?: string;\n}\n\nexport const DataStream = React.forwardRef<HTMLDivElement, DataStreamProps>(\n ({ messages = DEFAULT_MESSAGES, className }, ref) => {\n const [lines, setLines] = React.useState<string[]>([]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n let i = 0;\n const interval = setInterval(() => {\n setLines((prev) => {\n const next = [...prev, messages[i % messages.length]];\n return next.length > 8 ? next.slice(-8) : next;\n });\n i++;\n }, 1200);\n return () => clearInterval(interval);\n }, [messages]);\n\n React.useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [lines]);\n\n return (\n <div\n ref={ref}\n className={`border border-border bg-background clip-corner overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-border bg-surface-0\">\n <Terminal className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground uppercase\">\n LIVE FEED\n </span>\n <div className=\"ml-auto flex items-center gap-1.5\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green animate-pulse\"\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[10px] text-ef-green\">ACTIVE</span>\n </div>\n </div>\n <div\n ref={containerRef}\n className=\"p-4 h-48 overflow-y-auto font-mono text-xs space-y-1\"\n >\n <AnimatePresence>\n {lines.map((line, i) => (\n <motion.div\n key={`${line}-${i}`}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n className={\n line.includes(\"[SEC]\")\n ? \"text-ef-green\"\n : line.includes(\"[NET]\")\n ? \"text-ef-blue\"\n : line.includes(\"[DAT]\")\n ? \"text-ef-cyan\"\n : line.includes(\"[GPU]\")\n ? \"text-ef-purple\"\n : \"text-muted-foreground\"\n }\n >\n {line}\n </motion.div>\n ))}\n </AnimatePresence>\n <span className=\"inline-block w-2 h-4 bg-primary animate-cursor-blink\" />\n </div>\n </div>\n );\n },\n);\nDataStream.displayName = \"DataStream\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nexport const tacticalBadgeVariants = cva(\n \"inline-flex items-center gap-1.5 clip-corner-sm border px-3 py-1 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n {\n variants: {\n variant: {\n default: \"border-primary/40 text-primary bg-primary/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-yellow/40 text-ef-yellow bg-ef-yellow/10\",\n danger: \"border-ef-red/40 text-ef-red bg-ef-red/10\",\n info: \"border-ef-cyan/40 text-ef-cyan bg-ef-cyan/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface TacticalBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof tacticalBadgeVariants> {}\n\nexport const TacticalBadge = React.forwardRef<\n HTMLSpanElement,\n TacticalBadgeProps\n>(({ variant, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(tacticalBadgeVariants({ variant }), className)}\n {...props}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {children}\n </span>\n));\nTacticalBadge.displayName = \"TacticalBadge\";\n","import * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\n\nexport interface WarningBannerProps {\n level?: \"caution\" | \"alert\" | \"critical\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst WARNING_STYLES = {\n caution: {\n border: \"border-ef-yellow/30\",\n bg: \"bg-ef-yellow/5\",\n icon: \"text-ef-yellow\",\n label: \"CAUTION\",\n },\n alert: {\n border: \"border-ef-orange/30\",\n bg: \"bg-ef-orange/5\",\n icon: \"text-ef-orange\",\n label: \"ALERT\",\n },\n critical: {\n border: \"border-ef-red/30\",\n bg: \"bg-ef-red/5\",\n icon: \"text-ef-red\",\n label: \"CRITICAL\",\n },\n} as const;\n\nexport const WarningBanner = React.forwardRef<\n HTMLDivElement,\n WarningBannerProps\n>(({ level = \"caution\", children, className }, ref) => {\n const s = WARNING_STYLES[level];\n return (\n <div\n ref={ref}\n className={`clip-corner border ${s.border} ${s.bg} p-4 flex items-start gap-3${className ? ` ${className}` : \"\"}`}\n >\n <AlertTriangle className={`w-5 h-5 ${s.icon} shrink-0 mt-0.5`} />\n <div>\n <span\n className={`font-display text-[11px] font-bold tracking-[0.15em] ${s.icon}`}\n >\n {s.label}\n </span>\n <p className=\"text-sm text-muted-foreground mt-1\">{children}</p>\n </div>\n </div>\n );\n});\nWarningBanner.displayName = \"WarningBanner\";\n","import * as React from \"react\";\n\nexport interface ScanDividerProps {\n label?: string;\n className?: string;\n}\n\nexport const ScanDivider = React.forwardRef<HTMLDivElement, ScanDividerProps>(\n ({ label, className }, ref) => (\n <div\n ref={ref}\n className={`relative flex items-center gap-4 py-2${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n {label && (\n <span className=\"font-display text-[10px] font-bold tracking-[0.2em] uppercase text-primary/60 flex items-center gap-2\">\n <span style={{ fontSize: \"6px\" }}>◆</span> {label}{\" \"}\n <span style={{ fontSize: \"6px\" }}>◆</span>\n </span>\n )}\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n </div>\n ),\n);\nScanDivider.displayName = \"ScanDivider\";\n","import * as React from \"react\";\n\nexport interface CoordinateTagProps {\n label: string;\n value: string;\n unit?: string;\n className?: string;\n}\n\nexport const CoordinateTag = React.forwardRef<\n HTMLDivElement,\n CoordinateTagProps\n>(({ label, value, unit, className }, ref) => (\n <div\n ref={ref}\n className={`inline-flex items-center border border-border bg-surface-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <span className=\"font-mono text-[10px] tracking-[0.1em] uppercase text-muted-foreground bg-surface-2 px-2.5 py-1.5 border-r border-border\">\n {label}\n </span>\n <span className=\"font-mono text-xs text-primary px-2.5 py-1.5 font-bold\">\n {value}\n </span>\n {unit && (\n <span className=\"font-mono text-[10px] text-muted-foreground pr-2.5\">\n {unit}\n </span>\n )}\n </div>\n));\nCoordinateTag.displayName = \"CoordinateTag\";\n","import * as React from \"react\";\nimport { motion, useInView } from \"framer-motion\";\n\nexport interface RadarChartDataPoint {\n label: string;\n value: number;\n}\n\nexport interface RadarChartProps {\n data: RadarChartDataPoint[];\n size?: number;\n color?: \"primary\" | \"cyan\";\n className?: string;\n}\n\nexport const RadarChart = React.forwardRef<HTMLDivElement, RadarChartProps>(\n ({ data, size = 260, color = \"primary\", className }, forwardedRef) => {\n // useInView requires a RefObject — maintain an internal ref and merge with\n // the forwarded ref via a callback so both are kept in sync.\n const innerRef = React.useRef<HTMLDivElement>(null);\n const isInView = useInView(innerRef, { once: true });\n\n const mergeRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el;\n }\n },\n [forwardedRef],\n );\n\n const cx = size / 2;\n const cy = size / 2;\n const r = size * 0.38;\n const levels = 4;\n const n = data.length;\n const angleStep = (Math.PI * 2) / n;\n\n const colorVar = color === \"cyan\" ? \"--ef-cyan\" : \"--primary\";\n\n const getPoint = (i: number, radius: number) => ({\n x: cx + radius * Math.sin(i * angleStep),\n y: cy - radius * Math.cos(i * angleStep),\n });\n\n const gridPolygons = Array.from({ length: levels }, (_, level) => {\n const lr = r * ((level + 1) / levels);\n return data\n .map((_, i) => getPoint(i, lr))\n .map((p) => `${p.x},${p.y}`)\n .join(\" \");\n });\n\n const dataPoints = data.map((d, i) => getPoint(i, (d.value / 100) * r));\n const dataPath = dataPoints.map((p) => `${p.x},${p.y}`).join(\" \");\n const centerPath = data.map(() => `${cx},${cy}`).join(\" \");\n\n return (\n <div\n ref={mergeRef}\n className={`flex flex-col items-center w-full${className ? ` ${className}` : \"\"}`}\n >\n <svg\n viewBox={`0 0 ${size} ${size}`}\n className=\"w-full max-w-[260px] h-auto overflow-visible\"\n >\n {/* Grid rings */}\n {gridPolygons.map((pts, i) => (\n <polygon\n key={i}\n points={pts}\n fill=\"none\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.5}\n />\n ))}\n {/* Axes */}\n {data.map((_, i) => {\n const p = getPoint(i, r);\n return (\n <line\n key={i}\n x1={cx}\n y1={cy}\n x2={p.x}\n y2={p.y}\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.3}\n />\n );\n })}\n {/* Data area */}\n <motion.polygon\n points={isInView ? dataPath : centerPath}\n fill={`hsl(var(${colorVar}) / 0.15)`}\n stroke={`hsl(var(${colorVar}))`}\n strokeWidth={2}\n initial={false}\n animate={{ points: isInView ? dataPath : centerPath }}\n transition={{ duration: 0.8, ease: [0.25, 0.8, 0.25, 1] }}\n style={{\n filter: `drop-shadow(0 0 8px hsl(var(${colorVar}) / 0.3))`,\n }}\n />\n {/* Data points */}\n {dataPoints.map((p, i) => (\n <motion.circle\n key={i}\n cx={cx}\n cy={cy}\n r={4}\n fill={`hsl(var(${colorVar}))`}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n initial={false}\n animate={{ cx: isInView ? p.x : cx, cy: isInView ? p.y : cy }}\n transition={{ duration: 0.8, delay: i * 0.05 }}\n style={{\n filter: `drop-shadow(0 0 4px hsl(var(${colorVar}) / 0.5))`,\n }}\n />\n ))}\n {/* Labels */}\n {data.map((d, i) => {\n const p = getPoint(i, r + 20);\n return (\n <text\n key={i}\n x={p.x}\n y={p.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"font-display text-[9px] font-bold tracking-[0.1em] uppercase\"\n fill=\"hsl(var(--muted-foreground))\"\n >\n {d.label}\n </text>\n );\n })}\n </svg>\n </div>\n );\n },\n);\nRadarChart.displayName = \"RadarChart\";\n","import * as React from \"react\";\n\nexport interface HUDOverlayProps {\n children?: React.ReactNode;\n systemLabel?: string;\n lat?: string;\n lon?: string;\n showCoords?: boolean;\n showCrosshair?: boolean;\n className?: string;\n}\n\nexport const HUDOverlay = React.forwardRef<HTMLDivElement, HUDOverlayProps>(\n (\n {\n children,\n systemLabel = \"SYS::ENDFIELD v2.0\",\n lat = \"LAT 37.7749°N\",\n lon = \"LON 122.4194°W\",\n showCoords = true,\n showCrosshair = true,\n className,\n },\n ref,\n ) => {\n const [time, setTime] = React.useState(\"\");\n\n React.useEffect(() => {\n const tick = () => setTime(new Date().toLocaleTimeString(\"en-GB\"));\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, []);\n\n return (\n <div\n ref={ref}\n className={`relative border border-border bg-surface-0 aspect-video flex items-center justify-center overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n {/* Scanline overlay */}\n <div className=\"absolute inset-0 scanline-overlay\" />\n {/* Corner brackets */}\n {(\n [\n \"top-3 left-3 border-t-2 border-l-2\",\n \"top-3 right-3 border-t-2 border-r-2\",\n \"bottom-3 left-3 border-b-2 border-l-2\",\n \"bottom-3 right-3 border-b-2 border-r-2\",\n ] as const\n ).map((pos, i) => (\n <div\n key={i}\n className={`absolute w-8 h-8 ${pos} border-primary/40 pointer-events-none`}\n />\n ))}\n {/* Crosshair */}\n {showCrosshair && (\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\">\n <div\n className=\"w-6 h-px bg-primary/20\"\n style={{ position: \"absolute\", top: \"50%\", left: \"-12px\" }}\n />\n <div\n className=\"h-6 w-px bg-primary/20\"\n style={{ position: \"absolute\", left: \"50%\", top: \"-12px\" }}\n />\n </div>\n )}\n {/* Top-left: system label + live time */}\n {showCoords && (\n <div className=\"absolute top-4 left-12 font-mono text-[9px] text-muted-foreground/60 space-y-0.5\">\n <div>{systemLabel}</div>\n <div className=\"text-primary/60\">{time}</div>\n </div>\n )}\n {/* Top-right: coordinates */}\n {showCoords && (\n <div className=\"absolute top-4 right-12 font-mono text-[9px] text-muted-foreground/60 text-right space-y-0.5\">\n <div>{lat}</div>\n <div>{lon}</div>\n </div>\n )}\n {/* Bottom status bar */}\n <div className=\"absolute bottom-4 left-12 right-12 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green\"\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[9px] text-ef-green/80\">\n LINK ACTIVE\n </span>\n </div>\n <div className=\"flex gap-4\">\n {[\"FPS:60\", \"MEM:47%\", \"NET:12ms\"].map((s) => (\n <span\n key={s}\n className=\"font-mono text-[9px] text-muted-foreground/50\"\n >\n {s}\n </span>\n ))}\n </div>\n </div>\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n },\n);\nHUDOverlay.displayName = \"HUDOverlay\";\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner","GlitchText","children","SIZE_MAP","DiamondLoader","size","label","s","i","STATUS_LABELS","STATUS_COLORS","TacticalPanel","status","Crosshair","HoloCard","subtitle","Icon","value","hovering","setHovering","DEFAULT_MESSAGES","DataStream","messages","lines","setLines","containerRef","interval","prev","next","Terminal","AnimatePresence","line","motion","tacticalBadgeVariants","TacticalBadge","WARNING_STYLES","WarningBanner","level","AlertTriangle","ScanDivider","CoordinateTag","unit","RadarChart","data","color","forwardedRef","innerRef","isInView","useInView","mergeRef","el","cx","cy","r","levels","n","angleStep","colorVar","getPoint","radius","gridPolygons","_","lr","p","dataPoints","d","dataPath","centerPath","pts","HUDOverlay","systemLabel","lat","lon","showCoords","showCrosshair","time","setTime","tick","pos"],"mappings":"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"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -10,8 +10,100 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
10
10
|
|
|
11
11
|
export declare function cn(...inputs: ClassValue[]): string;
|
|
12
12
|
|
|
13
|
+
export declare const CoordinateTag: React_2.ForwardRefExoticComponent<CoordinateTagProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
14
|
+
|
|
15
|
+
export declare interface CoordinateTagProps {
|
|
16
|
+
label: string;
|
|
17
|
+
value: string;
|
|
18
|
+
unit?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export declare const DataStream: React_2.ForwardRefExoticComponent<DataStreamProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
|
|
24
|
+
export declare interface DataStreamProps {
|
|
25
|
+
messages?: string[];
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare const DiamondLoader: React_2.ForwardRefExoticComponent<DiamondLoaderProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
|
|
31
|
+
export declare interface DiamondLoaderProps {
|
|
32
|
+
size?: "sm" | "md" | "lg";
|
|
33
|
+
label?: string;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export declare const GlitchText: React_2.ForwardRefExoticComponent<GlitchTextProps & React_2.RefAttributes<HTMLSpanElement>>;
|
|
38
|
+
|
|
39
|
+
export declare interface GlitchTextProps {
|
|
40
|
+
children: string;
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export declare const HoloCard: React_2.ForwardRefExoticComponent<HoloCardProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
|
|
46
|
+
export declare interface HoloCardProps {
|
|
47
|
+
title: string;
|
|
48
|
+
subtitle: string;
|
|
49
|
+
icon: React_2.ElementType;
|
|
50
|
+
value?: string;
|
|
51
|
+
className?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export declare const HUDOverlay: React_2.ForwardRefExoticComponent<HUDOverlayProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
55
|
+
|
|
56
|
+
export declare interface HUDOverlayProps {
|
|
57
|
+
children?: React_2.ReactNode;
|
|
58
|
+
systemLabel?: string;
|
|
59
|
+
lat?: string;
|
|
60
|
+
lon?: string;
|
|
61
|
+
showCoords?: boolean;
|
|
62
|
+
showCrosshair?: boolean;
|
|
63
|
+
className?: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export declare const RadarChart: React_2.ForwardRefExoticComponent<RadarChartProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
67
|
+
|
|
68
|
+
export declare interface RadarChartDataPoint {
|
|
69
|
+
label: string;
|
|
70
|
+
value: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export declare interface RadarChartProps {
|
|
74
|
+
data: RadarChartDataPoint[];
|
|
75
|
+
size?: number;
|
|
76
|
+
color?: "primary" | "cyan";
|
|
77
|
+
className?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export declare const ScanDivider: React_2.ForwardRefExoticComponent<ScanDividerProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
81
|
+
|
|
82
|
+
export declare interface ScanDividerProps {
|
|
83
|
+
label?: string;
|
|
84
|
+
className?: string;
|
|
85
|
+
}
|
|
86
|
+
|
|
13
87
|
export declare const SonnerToaster: ({ theme, ...props }: ToasterProps) => JSX_2.Element;
|
|
14
88
|
|
|
89
|
+
export declare const TacticalBadge: React_2.ForwardRefExoticComponent<TacticalBadgeProps & React_2.RefAttributes<HTMLSpanElement>>;
|
|
90
|
+
|
|
91
|
+
export declare interface TacticalBadgeProps extends React_2.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof tacticalBadgeVariants> {
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export declare const tacticalBadgeVariants: (props?: ({
|
|
95
|
+
variant?: "default" | "warning" | "success" | "danger" | "info" | null | undefined;
|
|
96
|
+
} & ClassProp) | undefined) => string;
|
|
97
|
+
|
|
98
|
+
export declare const TacticalPanel: React_2.ForwardRefExoticComponent<TacticalPanelProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
99
|
+
|
|
100
|
+
export declare interface TacticalPanelProps {
|
|
101
|
+
title: string;
|
|
102
|
+
status?: "online" | "warning" | "offline" | "scanning";
|
|
103
|
+
children: React_2.ReactNode;
|
|
104
|
+
className?: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
15
107
|
export declare const Toast: React_2.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastProps & React_2.RefAttributes<HTMLLIElement>, "ref"> & VariantProps<(props?: ({
|
|
16
108
|
variant?: "default" | "destructive" | null | undefined;
|
|
17
109
|
} & ClassProp) | undefined) => string> & React_2.RefAttributes<HTMLLIElement>>;
|
|
@@ -67,4 +159,12 @@ export declare function useToast(): {
|
|
|
67
159
|
toasts: ToasterToast[];
|
|
68
160
|
};
|
|
69
161
|
|
|
162
|
+
export declare const WarningBanner: React_2.ForwardRefExoticComponent<WarningBannerProps & React_2.RefAttributes<HTMLDivElement>>;
|
|
163
|
+
|
|
164
|
+
export declare interface WarningBannerProps {
|
|
165
|
+
level?: "caution" | "alert" | "critical";
|
|
166
|
+
children: React_2.ReactNode;
|
|
167
|
+
className?: string;
|
|
168
|
+
}
|
|
169
|
+
|
|
70
170
|
export { }
|