@trackany-device/components 1.0.0 → 1.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 +216 -0
- package/package.json +133 -4
- package/src/assets/index.ts +120 -0
- package/src/assets/media/avatars/300-1.png +0 -0
- package/src/assets/media/avatars/300-10.png +0 -0
- package/src/assets/media/avatars/300-11.png +0 -0
- package/src/assets/media/avatars/300-12.png +0 -0
- package/src/assets/media/avatars/300-13.png +0 -0
- package/src/assets/media/avatars/300-14.png +0 -0
- package/src/assets/media/avatars/300-15.png +0 -0
- package/src/assets/media/avatars/300-16.png +0 -0
- package/src/assets/media/avatars/300-17.png +0 -0
- package/src/assets/media/avatars/300-18.png +0 -0
- package/src/assets/media/avatars/300-19.png +0 -0
- package/src/assets/media/avatars/300-2.png +0 -0
- package/src/assets/media/avatars/300-20.png +0 -0
- package/src/assets/media/avatars/300-21.png +0 -0
- package/src/assets/media/avatars/300-22.png +0 -0
- package/src/assets/media/avatars/300-23.png +0 -0
- package/src/assets/media/avatars/300-24.png +0 -0
- package/src/assets/media/avatars/300-25.png +0 -0
- package/src/assets/media/avatars/300-26.png +0 -0
- package/src/assets/media/avatars/300-27.png +0 -0
- package/src/assets/media/avatars/300-28.png +0 -0
- package/src/assets/media/avatars/300-29.png +0 -0
- package/src/assets/media/avatars/300-3.png +0 -0
- package/src/assets/media/avatars/300-30.png +0 -0
- package/src/assets/media/avatars/300-31.png +0 -0
- package/src/assets/media/avatars/300-32.png +0 -0
- package/src/assets/media/avatars/300-33.png +0 -0
- package/src/assets/media/avatars/300-34.png +0 -0
- package/src/assets/media/avatars/300-4.png +0 -0
- package/src/assets/media/avatars/300-5.png +0 -0
- package/src/assets/media/avatars/300-6.png +0 -0
- package/src/assets/media/avatars/300-7.png +0 -0
- package/src/assets/media/avatars/300-8.png +0 -0
- package/src/assets/media/avatars/300-9.png +0 -0
- package/src/assets/media/avatars/blank.png +0 -0
- package/src/assets/media/avatars/gray/1.png +0 -0
- package/src/assets/media/avatars/gray/2.png +0 -0
- package/src/assets/media/avatars/gray/3.png +0 -0
- package/src/assets/media/avatars/gray/4.png +0 -0
- package/src/assets/media/avatars/gray/5.png +0 -0
- package/src/assets/media/illustrations/1-dark.svg +78 -0
- package/src/assets/media/illustrations/1.svg +78 -0
- package/src/assets/media/illustrations/10-dark.svg +148 -0
- package/src/assets/media/illustrations/10.svg +148 -0
- package/src/assets/media/illustrations/11-dark.svg +234 -0
- package/src/assets/media/illustrations/11.svg +234 -0
- package/src/assets/media/illustrations/12.svg +138 -0
- package/src/assets/media/illustrations/13.svg +205 -0
- package/src/assets/media/illustrations/14.svg +259 -0
- package/src/assets/media/illustrations/15.svg +242 -0
- package/src/assets/media/illustrations/16.svg +128 -0
- package/src/assets/media/illustrations/17.svg +180 -0
- package/src/assets/media/illustrations/18-dark.svg +6 -0
- package/src/assets/media/illustrations/18.svg +6 -0
- package/src/assets/media/illustrations/19-dark.svg +8 -0
- package/src/assets/media/illustrations/19.svg +8 -0
- package/src/assets/media/illustrations/2-dark.svg +78 -0
- package/src/assets/media/illustrations/2.svg +78 -0
- package/src/assets/media/illustrations/20-dark.svg +13 -0
- package/src/assets/media/illustrations/20.svg +13 -0
- package/src/assets/media/illustrations/21-dark.svg +9 -0
- package/src/assets/media/illustrations/21.svg +9 -0
- package/src/assets/media/illustrations/22-dark.svg +17 -0
- package/src/assets/media/illustrations/22.svg +17 -0
- package/src/assets/media/illustrations/23-dark.svg +13 -0
- package/src/assets/media/illustrations/23.svg +13 -0
- package/src/assets/media/illustrations/24.svg +6 -0
- package/src/assets/media/illustrations/25.svg +8 -0
- package/src/assets/media/illustrations/26.svg +8 -0
- package/src/assets/media/illustrations/27.svg +6 -0
- package/src/assets/media/illustrations/28-dark.svg +28 -0
- package/src/assets/media/illustrations/28.svg +14 -0
- package/src/assets/media/illustrations/29-dark.svg +6 -0
- package/src/assets/media/illustrations/29.svg +6 -0
- package/src/assets/media/illustrations/3-dark.svg +70 -0
- package/src/assets/media/illustrations/3.svg +70 -0
- package/src/assets/media/illustrations/30-dark.svg +8 -0
- package/src/assets/media/illustrations/30.svg +8 -0
- package/src/assets/media/illustrations/31-dark.svg +9 -0
- package/src/assets/media/illustrations/31.svg +9 -0
- package/src/assets/media/illustrations/32-dark.svg +10 -0
- package/src/assets/media/illustrations/32.svg +10 -0
- package/src/assets/media/illustrations/33-dark.svg +15 -0
- package/src/assets/media/illustrations/33.svg +15 -0
- package/src/assets/media/illustrations/34-dark.svg +5 -0
- package/src/assets/media/illustrations/34.svg +5 -0
- package/src/assets/media/illustrations/35-dark.svg +11 -0
- package/src/assets/media/illustrations/35.svg +4 -0
- package/src/assets/media/illustrations/4-dark.svg +51 -0
- package/src/assets/media/illustrations/4.svg +51 -0
- package/src/assets/media/illustrations/5-dark.svg +78 -0
- package/src/assets/media/illustrations/5.svg +78 -0
- package/src/assets/media/illustrations/6.svg +58 -0
- package/src/assets/media/illustrations/7.svg +49 -0
- package/src/assets/media/illustrations/8.svg +61 -0
- package/src/assets/media/illustrations/9.svg +57 -0
- package/src/assets/media/misc/placeholder.svg +15 -0
- package/src/components/devices/devices-mini-map.tsx +32 -26
- package/src/components/devices/map-marker.tsx +98 -0
- package/src/components/ui/checklist-item.tsx +55 -0
- package/src/components/ui/plan-card.tsx +68 -0
- package/src/components/ui/settings-row.tsx +32 -0
- package/src/components/ui/settings-section.tsx +22 -0
- package/src/components/ui/usage-meter.tsx +35 -0
- package/src/index.ts +12 -1
- package/src/layouts/LayoutSwitcher.tsx +220 -0
- package/src/layouts/app/MegaMenuLayout.tsx +69 -34
- package/src/layouts/app/MegaMenuNavbarLayout.tsx +73 -37
- package/src/layouts/app/NavbarCollapsibleLayout.tsx +53 -4
- package/src/layouts/app/NavbarSidebarLayout.tsx +74 -29
- package/src/layouts/app/SidebarDualMenuLayout.tsx +48 -5
- package/src/layouts/app/SidebarFixedLayout.tsx +15 -10
- package/src/layouts/app/SidebarMinimalLayout.tsx +51 -3
- package/src/layouts/app/SidebarTabsLayout.tsx +48 -2
- package/src/layouts/app/SplitSidebarLayout.tsx +91 -43
- package/src/layouts/app/TopNavLayout.tsx +7 -12
- package/src/layouts/app/WorkspaceSidebarLayout.tsx +103 -46
- package/src/layouts/app/partials/Navbar.tsx +61 -10
- package/src/layouts/app/partials/Toolbar.tsx +1 -1
- package/src/layouts/auth/AuthCenteredLayout.tsx +10 -4
- package/src/lib/map-markers.ts +21 -3
- package/src/pages/login/ConfirmPasswordPage.tsx +35 -0
- package/src/pages/login/ForgotPasswordPage.tsx +41 -0
- package/src/pages/login/LoginPage.tsx +50 -0
- package/src/pages/login/RegisterPage.tsx +41 -0
- package/src/pages/login/ResetPasswordPage.tsx +35 -0
- package/src/pages/login/TwoFactorChallengePage.tsx +41 -0
- package/src/pages/login/VerifyEmailPage.tsx +31 -0
- package/src/pages/my/ActivityPage.tsx +160 -0
- package/src/pages/my/GetStartedPage.tsx +221 -0
- package/src/pages/my/NotificationsPage.tsx +133 -0
- package/src/pages/my/ProfilePage.tsx +650 -0
- package/src/pages/my/TenantsPage.tsx +37 -0
- package/src/pages/tenant/AssigneesPage.tsx +155 -0
- package/src/pages/tenant/BeatsPage.tsx +403 -0
- package/src/pages/tenant/DashboardPage.tsx +195 -0
- package/src/pages/tenant/GeofencePage.tsx +422 -0
- package/src/pages/tenant/IncidentsPage.tsx +214 -0
- package/src/pages/tenant/IntegrationsPage.tsx +352 -0
- package/src/pages/tenant/InvitePage.tsx +153 -0
- package/src/pages/tenant/LiveStreamPage.tsx +141 -0
- package/src/pages/tenant/MembersPage.tsx +414 -0
- package/src/pages/tenant/TenantProfilePage.tsx +701 -0
- package/src/platform/adapters/default.tsx +1 -1
- package/src/platform/types.ts +2 -0
- package/src/styles/components/apexcharts.css +101 -0
- package/src/styles/components/image-input.css +51 -0
- package/src/styles/components/leaflet.css +25 -0
- package/src/styles/components/rating.css +89 -0
- package/src/styles/components/scrollable.css +119 -0
- package/src/styles/layout.css +24 -0
- package/src/styles/layouts/sidebar-fixed.css +93 -138
- package/src/styles/themes.css +5 -5
- package/src/vite-env.d.ts +21 -0
- package/src/layouts/SettingsLayout.tsx +0 -21
- package/src/layouts/app-layout.tsx +0 -29
package/README.md
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# @trackany-device/components
|
|
2
|
+
|
|
3
|
+
Shared React component library for the **Track Any Device** platform.
|
|
4
|
+
Built with React 19, Tailwind CSS v4, Radix UI primitives, and shadcn/ui conventions.
|
|
5
|
+
|
|
6
|
+
[](https://badge.socket.dev/npm/package/@trackany-device/components/1.0.0)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @trackany-device/components
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
> **Peer dependencies** — install the ones you use:
|
|
17
|
+
> ```bash
|
|
18
|
+
> npm install react react-dom lucide-react tailwindcss
|
|
19
|
+
> ```
|
|
20
|
+
> Optional peers (only needed for specific components):
|
|
21
|
+
> `@dnd-kit/*`, `@tanstack/react-table`, `@xyflow/react`, `recharts`, `react-hook-form`, `zod`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Setup
|
|
26
|
+
|
|
27
|
+
### 1. Import the styles
|
|
28
|
+
|
|
29
|
+
In your app's CSS entry point (e.g. `app.css`):
|
|
30
|
+
|
|
31
|
+
```css
|
|
32
|
+
@import "tailwindcss";
|
|
33
|
+
@import "@trackany-device/components/styles/themes.css";
|
|
34
|
+
|
|
35
|
+
/* If you use KeenIcons: */
|
|
36
|
+
@import "@trackany-device/components/styles/keenicons.css";
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Wrap your app with a theme
|
|
40
|
+
|
|
41
|
+
Apply a `data-theme` attribute to your root element (or `<html>`):
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<html data-theme="blue"> <!-- or green, purple, red, orange … -->
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Add `.dark` for dark mode:
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<html data-theme="blue" class="dark">
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 3. Set up the Platform adapter
|
|
54
|
+
|
|
55
|
+
The library abstracts routing/forms behind a `PlatformProvider`. Pick the adapter for your framework:
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
// Next.js
|
|
59
|
+
import { PlatformProvider, createNextjsAdapter } from '@trackany-device/components';
|
|
60
|
+
|
|
61
|
+
export default function RootLayout({ children }) {
|
|
62
|
+
return (
|
|
63
|
+
<PlatformProvider adapter={createNextjsAdapter()}>
|
|
64
|
+
{children}
|
|
65
|
+
</PlatformProvider>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
// Inertia.js (Laravel)
|
|
72
|
+
import { PlatformProvider, createInertiaAdapter } from '@trackany-device/components';
|
|
73
|
+
|
|
74
|
+
createInertiaApp({
|
|
75
|
+
setup({ el, App, props }) {
|
|
76
|
+
createRoot(el).render(
|
|
77
|
+
<PlatformProvider adapter={createInertiaAdapter()}>
|
|
78
|
+
<App {...props} />
|
|
79
|
+
</PlatformProvider>
|
|
80
|
+
);
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Usage
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import { Button, Card, CardContent, CardHeader, CardTitle } from '@trackany-device/components';
|
|
91
|
+
|
|
92
|
+
export default function Example() {
|
|
93
|
+
return (
|
|
94
|
+
<Card className="w-80">
|
|
95
|
+
<CardHeader>
|
|
96
|
+
<CardTitle>Hello world</CardTitle>
|
|
97
|
+
</CardHeader>
|
|
98
|
+
<CardContent className="flex gap-2">
|
|
99
|
+
<Button variant="primary">Save</Button>
|
|
100
|
+
<Button variant="outline">Cancel</Button>
|
|
101
|
+
</CardContent>
|
|
102
|
+
</Card>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Themes
|
|
110
|
+
|
|
111
|
+
21 brand colour schemes are included. Apply via `data-theme` on any ancestor element:
|
|
112
|
+
|
|
113
|
+
| Token | Colour |
|
|
114
|
+
|-------|--------|
|
|
115
|
+
| `default` / `blue` | Blue-600 |
|
|
116
|
+
| `green` | Green-600 |
|
|
117
|
+
| `purple` | Purple-600 |
|
|
118
|
+
| `red` | Red-600 |
|
|
119
|
+
| `orange` | Orange-500 |
|
|
120
|
+
| `rose` | Rose-600 |
|
|
121
|
+
| `sky` | Sky-500 |
|
|
122
|
+
| `teal` | Teal-600 |
|
|
123
|
+
| `cyan` | Cyan-600 |
|
|
124
|
+
| `indigo` | Indigo-600 |
|
|
125
|
+
| `violet` | Violet-600 |
|
|
126
|
+
| `emerald` | Emerald-600 |
|
|
127
|
+
| `lime` | Lime-600 |
|
|
128
|
+
| `yellow` | Yellow-500 |
|
|
129
|
+
| `amber` | Amber-500 |
|
|
130
|
+
| `pink` | Pink-500 |
|
|
131
|
+
| `fuchsia` | Fuchsia-600 |
|
|
132
|
+
| `neutral` | Neutral-700 |
|
|
133
|
+
| `slate` | Slate-600 |
|
|
134
|
+
| `gray` | Gray-600 |
|
|
135
|
+
|
|
136
|
+
Each theme ships with a matching dark variant — add `.dark` to the same element.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Components
|
|
141
|
+
|
|
142
|
+
### App chrome
|
|
143
|
+
`AppShell` · `AppHeader` · `AppSidebar` · `AppSidebarHeader` · `AppContent` · `NavMain` · `NavUser` · `NavFooter` · `NotificationBell` · `AppLogo` · `Breadcrumbs` · `AppearanceTabs`
|
|
144
|
+
|
|
145
|
+
### UI primitives
|
|
146
|
+
`Button` · `Input` · `Select` · `Checkbox` · `Switch` · `Slider` · `Textarea` · `Label` · `Badge` · `Avatar` · `Card` · `Dialog` · `Drawer` · `Sheet` · `Popover` · `Tooltip` · `DropdownMenu` · `Tabs` · `Accordion` · `Progress` · `Skeleton` · `Spinner` · `Separator` · `Alert` · `Sonner` (toast)
|
|
147
|
+
|
|
148
|
+
### Data
|
|
149
|
+
`DataGrid` · `DataList` · `Chart` · `StatCard` · `Pagination`
|
|
150
|
+
|
|
151
|
+
### Forms & auth
|
|
152
|
+
`LoginForm` · `RegisterForm` · `ForgotPasswordForm` · `ResetPasswordForm` · `ConfirmPasswordForm` · `OtpForm` · `VerifyEmailForm` · `SmsChallengeForm`
|
|
153
|
+
|
|
154
|
+
### Icons
|
|
155
|
+
`KeenIcon` — ~1 200 icons in four styles (`duotone` · `filled` · `outline` · `solid`):
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
import { KeenIcon } from '@trackany-device/components';
|
|
159
|
+
// Don't forget: import '@trackany-device/components/styles/keenicons.css';
|
|
160
|
+
|
|
161
|
+
<KeenIcon icon="home" style="duotone" className="size-5" />
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Storybook
|
|
167
|
+
|
|
168
|
+
Browse all components interactively — includes a **Theme** toolbar to switch between all 21 colour schemes and a **Color Mode** toggle for dark mode.
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
npm run storybook # dev server on :6006
|
|
172
|
+
npm run build-storybook # static build → storybook-static/
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Docker (static Storybook)
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
docker build -t tad-storybook .
|
|
179
|
+
docker run -p 8080:80 tad-storybook
|
|
180
|
+
# open http://localhost:8080
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Development
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
npm install
|
|
189
|
+
npm run storybook # live-reload component dev
|
|
190
|
+
npm run types:check # TypeScript validation
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Release
|
|
196
|
+
|
|
197
|
+
Releases are fully automated via [semantic-release](https://github.com/semantic-release/semantic-release) on every push to `main`.
|
|
198
|
+
|
|
199
|
+
| Commit prefix | Version bump |
|
|
200
|
+
|---------------|-------------|
|
|
201
|
+
| `fix:` | patch — `1.0.0 → 1.0.1` |
|
|
202
|
+
| `feat:` | minor — `1.0.1 → 1.1.0` |
|
|
203
|
+
| `feat!:` / `BREAKING CHANGE` | major — `1.1.0 → 2.0.0` |
|
|
204
|
+
| `chore:` `docs:` `ci:` `style:` `refactor:` | no release |
|
|
205
|
+
|
|
206
|
+
On release, semantic-release automatically:
|
|
207
|
+
1. Calculates the next version from commit messages
|
|
208
|
+
2. Updates `package.json` and `CHANGELOG.md`
|
|
209
|
+
3. Creates a GitHub release with notes
|
|
210
|
+
4. Publishes to npm
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## License
|
|
215
|
+
|
|
216
|
+
UNLICENSED — private, all rights reserved.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackany-device/components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Shared React components for the Track Any Device platform.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -10,20 +10,33 @@
|
|
|
10
10
|
"sideEffects": [
|
|
11
11
|
"**/*.css"
|
|
12
12
|
],
|
|
13
|
-
"
|
|
14
|
-
|
|
13
|
+
"overrides": {
|
|
14
|
+
"esbuild": "0.24.0"
|
|
15
|
+
},
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"module": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
15
19
|
"exports": {
|
|
16
|
-
".":
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./assets": {
|
|
25
|
+
"types": "./dist/assets/index.d.ts",
|
|
26
|
+
"import": "./dist/assets/index.js"
|
|
27
|
+
},
|
|
17
28
|
"./styles/*": "./src/styles/*",
|
|
18
29
|
"./styles/keenicons.css": "./src/components/keenicons/assets/styles.css"
|
|
19
30
|
},
|
|
20
31
|
"files": [
|
|
21
32
|
"src",
|
|
33
|
+
"dist",
|
|
22
34
|
"!src/**/*.test.*",
|
|
23
35
|
"!src/**/*.spec.*",
|
|
24
36
|
"!src/**/.DS_Store"
|
|
25
37
|
],
|
|
26
38
|
"scripts": {
|
|
39
|
+
"build": "vite build",
|
|
27
40
|
"storybook": "storybook dev -p 6006",
|
|
28
41
|
"build-storybook": "storybook build",
|
|
29
42
|
"types:check": "tsc --noEmit",
|
|
@@ -106,14 +119,128 @@
|
|
|
106
119
|
"@googlemaps/js-api-loader": {
|
|
107
120
|
"optional": true
|
|
108
121
|
},
|
|
122
|
+
"@hookform/resolvers": {
|
|
123
|
+
"optional": true
|
|
124
|
+
},
|
|
125
|
+
"@radix-ui/react-accordion": {
|
|
126
|
+
"optional": true
|
|
127
|
+
},
|
|
128
|
+
"@radix-ui/react-alert-dialog": {
|
|
129
|
+
"optional": true
|
|
130
|
+
},
|
|
131
|
+
"@radix-ui/react-aspect-ratio": {
|
|
132
|
+
"optional": true
|
|
133
|
+
},
|
|
134
|
+
"@radix-ui/react-avatar": {
|
|
135
|
+
"optional": true
|
|
136
|
+
},
|
|
137
|
+
"@radix-ui/react-checkbox": {
|
|
138
|
+
"optional": true
|
|
139
|
+
},
|
|
140
|
+
"@radix-ui/react-collapsible": {
|
|
141
|
+
"optional": true
|
|
142
|
+
},
|
|
143
|
+
"@radix-ui/react-dialog": {
|
|
144
|
+
"optional": true
|
|
145
|
+
},
|
|
146
|
+
"@radix-ui/react-dropdown-menu": {
|
|
147
|
+
"optional": true
|
|
148
|
+
},
|
|
149
|
+
"@radix-ui/react-hover-card": {
|
|
150
|
+
"optional": true
|
|
151
|
+
},
|
|
152
|
+
"@radix-ui/react-label": {
|
|
153
|
+
"optional": true
|
|
154
|
+
},
|
|
155
|
+
"@radix-ui/react-navigation-menu": {
|
|
156
|
+
"optional": true
|
|
157
|
+
},
|
|
158
|
+
"@radix-ui/react-popover": {
|
|
159
|
+
"optional": true
|
|
160
|
+
},
|
|
161
|
+
"@radix-ui/react-progress": {
|
|
162
|
+
"optional": true
|
|
163
|
+
},
|
|
164
|
+
"@radix-ui/react-radio-group": {
|
|
165
|
+
"optional": true
|
|
166
|
+
},
|
|
167
|
+
"@radix-ui/react-scroll-area": {
|
|
168
|
+
"optional": true
|
|
169
|
+
},
|
|
170
|
+
"@radix-ui/react-select": {
|
|
171
|
+
"optional": true
|
|
172
|
+
},
|
|
173
|
+
"@radix-ui/react-separator": {
|
|
174
|
+
"optional": true
|
|
175
|
+
},
|
|
176
|
+
"@radix-ui/react-slider": {
|
|
177
|
+
"optional": true
|
|
178
|
+
},
|
|
179
|
+
"@radix-ui/react-slot": {
|
|
180
|
+
"optional": true
|
|
181
|
+
},
|
|
182
|
+
"@radix-ui/react-switch": {
|
|
183
|
+
"optional": true
|
|
184
|
+
},
|
|
185
|
+
"@radix-ui/react-tabs": {
|
|
186
|
+
"optional": true
|
|
187
|
+
},
|
|
188
|
+
"@radix-ui/react-toggle": {
|
|
189
|
+
"optional": true
|
|
190
|
+
},
|
|
191
|
+
"@radix-ui/react-toggle-group": {
|
|
192
|
+
"optional": true
|
|
193
|
+
},
|
|
194
|
+
"@radix-ui/react-tooltip": {
|
|
195
|
+
"optional": true
|
|
196
|
+
},
|
|
197
|
+
"@tanstack/react-table": {
|
|
198
|
+
"optional": true
|
|
199
|
+
},
|
|
109
200
|
"@xyflow/react": {
|
|
110
201
|
"optional": true
|
|
111
202
|
},
|
|
203
|
+
"cmdk": {
|
|
204
|
+
"optional": true
|
|
205
|
+
},
|
|
206
|
+
"date-fns": {
|
|
207
|
+
"optional": true
|
|
208
|
+
},
|
|
209
|
+
"input-otp": {
|
|
210
|
+
"optional": true
|
|
211
|
+
},
|
|
212
|
+
"lucide-react": {
|
|
213
|
+
"optional": true
|
|
214
|
+
},
|
|
215
|
+
"motion": {
|
|
216
|
+
"optional": true
|
|
217
|
+
},
|
|
218
|
+
"react-aria-components": {
|
|
219
|
+
"optional": true
|
|
220
|
+
},
|
|
221
|
+
"react-day-picker": {
|
|
222
|
+
"optional": true
|
|
223
|
+
},
|
|
224
|
+
"react-hook-form": {
|
|
225
|
+
"optional": true
|
|
226
|
+
},
|
|
227
|
+
"react-resizable-panels": {
|
|
228
|
+
"optional": true
|
|
229
|
+
},
|
|
112
230
|
"recharts": {
|
|
113
231
|
"optional": true
|
|
114
232
|
},
|
|
233
|
+
"sonner": {
|
|
234
|
+
"optional": true
|
|
235
|
+
},
|
|
115
236
|
"tw-animate-css": {
|
|
116
237
|
"optional": true
|
|
238
|
+
},
|
|
239
|
+
"vaul": {
|
|
240
|
+
"optional": true
|
|
241
|
+
},
|
|
242
|
+
"zod": {
|
|
243
|
+
"optional": true
|
|
117
244
|
}
|
|
118
245
|
},
|
|
119
246
|
"devDependencies": {
|
|
@@ -156,6 +283,7 @@
|
|
|
156
283
|
"@storybook/test": "^8.6.18",
|
|
157
284
|
"@tailwindcss/vite": "^4.3.0",
|
|
158
285
|
"@tanstack/react-table": "^8.21.3",
|
|
286
|
+
"@types/google.maps": "^3.64.1",
|
|
159
287
|
"@types/react": "^19.0.0",
|
|
160
288
|
"@types/react-dom": "^19.0.0",
|
|
161
289
|
"@vitejs/plugin-react": "^4.7.0",
|
|
@@ -180,6 +308,7 @@
|
|
|
180
308
|
"typescript": "^5.0.0",
|
|
181
309
|
"vaul": "^1.1.2",
|
|
182
310
|
"vite": "^6.4.2",
|
|
311
|
+
"vite-plugin-dts": "^5.0.1",
|
|
183
312
|
"zod": "^3.25.67"
|
|
184
313
|
}
|
|
185
314
|
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static asset exports for @trackany-device/components.
|
|
3
|
+
*
|
|
4
|
+
* Import named assets and use them as `src` values in img elements:
|
|
5
|
+
*
|
|
6
|
+
* import { avatar1, illustration1 } from '@trackany-device/components/assets';
|
|
7
|
+
* <img src={avatar1} alt="User avatar" />
|
|
8
|
+
*
|
|
9
|
+
* Dark-mode illustration variants are suffixed with `Dark`:
|
|
10
|
+
* <img src={isDark ? illustration1Dark : illustration1} alt="" />
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ── Avatars ───────────────────────────────────────────────────────────────────
|
|
14
|
+
export { default as avatar1 } from './media/avatars/300-1.png';
|
|
15
|
+
export { default as avatar2 } from './media/avatars/300-2.png';
|
|
16
|
+
export { default as avatar3 } from './media/avatars/300-3.png';
|
|
17
|
+
export { default as avatar4 } from './media/avatars/300-4.png';
|
|
18
|
+
export { default as avatar5 } from './media/avatars/300-5.png';
|
|
19
|
+
export { default as avatar6 } from './media/avatars/300-6.png';
|
|
20
|
+
export { default as avatar7 } from './media/avatars/300-7.png';
|
|
21
|
+
export { default as avatar8 } from './media/avatars/300-8.png';
|
|
22
|
+
export { default as avatar9 } from './media/avatars/300-9.png';
|
|
23
|
+
export { default as avatar10 } from './media/avatars/300-10.png';
|
|
24
|
+
export { default as avatar11 } from './media/avatars/300-11.png';
|
|
25
|
+
export { default as avatar12 } from './media/avatars/300-12.png';
|
|
26
|
+
export { default as avatar13 } from './media/avatars/300-13.png';
|
|
27
|
+
export { default as avatar14 } from './media/avatars/300-14.png';
|
|
28
|
+
export { default as avatar15 } from './media/avatars/300-15.png';
|
|
29
|
+
export { default as avatar16 } from './media/avatars/300-16.png';
|
|
30
|
+
export { default as avatar17 } from './media/avatars/300-17.png';
|
|
31
|
+
export { default as avatar18 } from './media/avatars/300-18.png';
|
|
32
|
+
export { default as avatar19 } from './media/avatars/300-19.png';
|
|
33
|
+
export { default as avatar20 } from './media/avatars/300-20.png';
|
|
34
|
+
export { default as avatar21 } from './media/avatars/300-21.png';
|
|
35
|
+
export { default as avatar22 } from './media/avatars/300-22.png';
|
|
36
|
+
export { default as avatar23 } from './media/avatars/300-23.png';
|
|
37
|
+
export { default as avatar24 } from './media/avatars/300-24.png';
|
|
38
|
+
export { default as avatar25 } from './media/avatars/300-25.png';
|
|
39
|
+
export { default as avatar26 } from './media/avatars/300-26.png';
|
|
40
|
+
export { default as avatar27 } from './media/avatars/300-27.png';
|
|
41
|
+
export { default as avatar28 } from './media/avatars/300-28.png';
|
|
42
|
+
export { default as avatar29 } from './media/avatars/300-29.png';
|
|
43
|
+
export { default as avatar30 } from './media/avatars/300-30.png';
|
|
44
|
+
export { default as avatar31 } from './media/avatars/300-31.png';
|
|
45
|
+
export { default as avatar32 } from './media/avatars/300-32.png';
|
|
46
|
+
export { default as avatar33 } from './media/avatars/300-33.png';
|
|
47
|
+
export { default as avatar34 } from './media/avatars/300-34.png';
|
|
48
|
+
|
|
49
|
+
// ── Gray / placeholder avatars ────────────────────────────────────────────────
|
|
50
|
+
export { default as avatarPlaceholder1 } from './media/avatars/1.png';
|
|
51
|
+
export { default as avatarPlaceholder2 } from './media/avatars/2.png';
|
|
52
|
+
export { default as avatarPlaceholder3 } from './media/avatars/3.png';
|
|
53
|
+
export { default as avatarPlaceholder4 } from './media/avatars/4.png';
|
|
54
|
+
export { default as avatarPlaceholder5 } from './media/avatars/5.png';
|
|
55
|
+
|
|
56
|
+
// ── Illustrations (light) ─────────────────────────────────────────────────────
|
|
57
|
+
export { default as illustration1 } from './media/illustrations/1.svg';
|
|
58
|
+
export { default as illustration2 } from './media/illustrations/2.svg';
|
|
59
|
+
export { default as illustration3 } from './media/illustrations/3.svg';
|
|
60
|
+
export { default as illustration4 } from './media/illustrations/4.svg';
|
|
61
|
+
export { default as illustration5 } from './media/illustrations/5.svg';
|
|
62
|
+
export { default as illustration6 } from './media/illustrations/6.svg';
|
|
63
|
+
export { default as illustration7 } from './media/illustrations/7.svg';
|
|
64
|
+
export { default as illustration8 } from './media/illustrations/8.svg';
|
|
65
|
+
export { default as illustration9 } from './media/illustrations/9.svg';
|
|
66
|
+
export { default as illustration10 } from './media/illustrations/10.svg';
|
|
67
|
+
export { default as illustration11 } from './media/illustrations/11.svg';
|
|
68
|
+
export { default as illustration12 } from './media/illustrations/12.svg';
|
|
69
|
+
export { default as illustration13 } from './media/illustrations/13.svg';
|
|
70
|
+
export { default as illustration14 } from './media/illustrations/14.svg';
|
|
71
|
+
export { default as illustration15 } from './media/illustrations/15.svg';
|
|
72
|
+
export { default as illustration16 } from './media/illustrations/16.svg';
|
|
73
|
+
export { default as illustration17 } from './media/illustrations/17.svg';
|
|
74
|
+
export { default as illustration18 } from './media/illustrations/18.svg';
|
|
75
|
+
export { default as illustration19 } from './media/illustrations/19.svg';
|
|
76
|
+
export { default as illustration20 } from './media/illustrations/20.svg';
|
|
77
|
+
export { default as illustration21 } from './media/illustrations/21.svg';
|
|
78
|
+
export { default as illustration22 } from './media/illustrations/22.svg';
|
|
79
|
+
export { default as illustration23 } from './media/illustrations/23.svg';
|
|
80
|
+
export { default as illustration24 } from './media/illustrations/24.svg';
|
|
81
|
+
export { default as illustration25 } from './media/illustrations/25.svg';
|
|
82
|
+
export { default as illustration26 } from './media/illustrations/26.svg';
|
|
83
|
+
export { default as illustration27 } from './media/illustrations/27.svg';
|
|
84
|
+
export { default as illustration28 } from './media/illustrations/28.svg';
|
|
85
|
+
export { default as illustration29 } from './media/illustrations/29.svg';
|
|
86
|
+
export { default as illustration30 } from './media/illustrations/30.svg';
|
|
87
|
+
export { default as illustration31 } from './media/illustrations/31.svg';
|
|
88
|
+
export { default as illustration32 } from './media/illustrations/32.svg';
|
|
89
|
+
export { default as illustration33 } from './media/illustrations/33.svg';
|
|
90
|
+
export { default as illustration34 } from './media/illustrations/34.svg';
|
|
91
|
+
export { default as illustration35 } from './media/illustrations/35.svg';
|
|
92
|
+
|
|
93
|
+
// ── Illustrations (dark variants) ─────────────────────────────────────────────
|
|
94
|
+
export { default as illustration1Dark } from './media/illustrations/1-dark.svg';
|
|
95
|
+
export { default as illustration2Dark } from './media/illustrations/2-dark.svg';
|
|
96
|
+
export { default as illustration3Dark } from './media/illustrations/3-dark.svg';
|
|
97
|
+
export { default as illustration4Dark } from './media/illustrations/4-dark.svg';
|
|
98
|
+
export { default as illustration5Dark } from './media/illustrations/5-dark.svg';
|
|
99
|
+
export { default as illustration10Dark } from './media/illustrations/10-dark.svg';
|
|
100
|
+
export { default as illustration11Dark } from './media/illustrations/11-dark.svg';
|
|
101
|
+
export { default as illustration18Dark } from './media/illustrations/18-dark.svg';
|
|
102
|
+
export { default as illustration19Dark } from './media/illustrations/19-dark.svg';
|
|
103
|
+
export { default as illustration20Dark } from './media/illustrations/20-dark.svg';
|
|
104
|
+
export { default as illustration21Dark } from './media/illustrations/21-dark.svg';
|
|
105
|
+
export { default as illustration22Dark } from './media/illustrations/22-dark.svg';
|
|
106
|
+
export { default as illustration23Dark } from './media/illustrations/23-dark.svg';
|
|
107
|
+
export { default as illustration28Dark } from './media/illustrations/28-dark.svg';
|
|
108
|
+
export { default as illustration29Dark } from './media/illustrations/29-dark.svg';
|
|
109
|
+
export { default as illustration30Dark } from './media/illustrations/30-dark.svg';
|
|
110
|
+
export { default as illustration31Dark } from './media/illustrations/31-dark.svg';
|
|
111
|
+
export { default as illustration32Dark } from './media/illustrations/32-dark.svg';
|
|
112
|
+
export { default as illustration33Dark } from './media/illustrations/33-dark.svg';
|
|
113
|
+
export { default as illustration34Dark } from './media/illustrations/34-dark.svg';
|
|
114
|
+
export { default as illustration35Dark } from './media/illustrations/35-dark.svg';
|
|
115
|
+
|
|
116
|
+
// ── Misc ──────────────────────────────────────────────────────────────────────
|
|
117
|
+
export { default as imagePlaceholder } from './media/misc/placeholder.svg';
|
|
118
|
+
|
|
119
|
+
// ── Brand ─────────────────────────────────────────────────────────────────────
|
|
120
|
+
export { default as logoUrl } from './logo.png';
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|