@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.
Files changed (159) hide show
  1. package/README.md +216 -0
  2. package/package.json +133 -4
  3. package/src/assets/index.ts +120 -0
  4. package/src/assets/media/avatars/300-1.png +0 -0
  5. package/src/assets/media/avatars/300-10.png +0 -0
  6. package/src/assets/media/avatars/300-11.png +0 -0
  7. package/src/assets/media/avatars/300-12.png +0 -0
  8. package/src/assets/media/avatars/300-13.png +0 -0
  9. package/src/assets/media/avatars/300-14.png +0 -0
  10. package/src/assets/media/avatars/300-15.png +0 -0
  11. package/src/assets/media/avatars/300-16.png +0 -0
  12. package/src/assets/media/avatars/300-17.png +0 -0
  13. package/src/assets/media/avatars/300-18.png +0 -0
  14. package/src/assets/media/avatars/300-19.png +0 -0
  15. package/src/assets/media/avatars/300-2.png +0 -0
  16. package/src/assets/media/avatars/300-20.png +0 -0
  17. package/src/assets/media/avatars/300-21.png +0 -0
  18. package/src/assets/media/avatars/300-22.png +0 -0
  19. package/src/assets/media/avatars/300-23.png +0 -0
  20. package/src/assets/media/avatars/300-24.png +0 -0
  21. package/src/assets/media/avatars/300-25.png +0 -0
  22. package/src/assets/media/avatars/300-26.png +0 -0
  23. package/src/assets/media/avatars/300-27.png +0 -0
  24. package/src/assets/media/avatars/300-28.png +0 -0
  25. package/src/assets/media/avatars/300-29.png +0 -0
  26. package/src/assets/media/avatars/300-3.png +0 -0
  27. package/src/assets/media/avatars/300-30.png +0 -0
  28. package/src/assets/media/avatars/300-31.png +0 -0
  29. package/src/assets/media/avatars/300-32.png +0 -0
  30. package/src/assets/media/avatars/300-33.png +0 -0
  31. package/src/assets/media/avatars/300-34.png +0 -0
  32. package/src/assets/media/avatars/300-4.png +0 -0
  33. package/src/assets/media/avatars/300-5.png +0 -0
  34. package/src/assets/media/avatars/300-6.png +0 -0
  35. package/src/assets/media/avatars/300-7.png +0 -0
  36. package/src/assets/media/avatars/300-8.png +0 -0
  37. package/src/assets/media/avatars/300-9.png +0 -0
  38. package/src/assets/media/avatars/blank.png +0 -0
  39. package/src/assets/media/avatars/gray/1.png +0 -0
  40. package/src/assets/media/avatars/gray/2.png +0 -0
  41. package/src/assets/media/avatars/gray/3.png +0 -0
  42. package/src/assets/media/avatars/gray/4.png +0 -0
  43. package/src/assets/media/avatars/gray/5.png +0 -0
  44. package/src/assets/media/illustrations/1-dark.svg +78 -0
  45. package/src/assets/media/illustrations/1.svg +78 -0
  46. package/src/assets/media/illustrations/10-dark.svg +148 -0
  47. package/src/assets/media/illustrations/10.svg +148 -0
  48. package/src/assets/media/illustrations/11-dark.svg +234 -0
  49. package/src/assets/media/illustrations/11.svg +234 -0
  50. package/src/assets/media/illustrations/12.svg +138 -0
  51. package/src/assets/media/illustrations/13.svg +205 -0
  52. package/src/assets/media/illustrations/14.svg +259 -0
  53. package/src/assets/media/illustrations/15.svg +242 -0
  54. package/src/assets/media/illustrations/16.svg +128 -0
  55. package/src/assets/media/illustrations/17.svg +180 -0
  56. package/src/assets/media/illustrations/18-dark.svg +6 -0
  57. package/src/assets/media/illustrations/18.svg +6 -0
  58. package/src/assets/media/illustrations/19-dark.svg +8 -0
  59. package/src/assets/media/illustrations/19.svg +8 -0
  60. package/src/assets/media/illustrations/2-dark.svg +78 -0
  61. package/src/assets/media/illustrations/2.svg +78 -0
  62. package/src/assets/media/illustrations/20-dark.svg +13 -0
  63. package/src/assets/media/illustrations/20.svg +13 -0
  64. package/src/assets/media/illustrations/21-dark.svg +9 -0
  65. package/src/assets/media/illustrations/21.svg +9 -0
  66. package/src/assets/media/illustrations/22-dark.svg +17 -0
  67. package/src/assets/media/illustrations/22.svg +17 -0
  68. package/src/assets/media/illustrations/23-dark.svg +13 -0
  69. package/src/assets/media/illustrations/23.svg +13 -0
  70. package/src/assets/media/illustrations/24.svg +6 -0
  71. package/src/assets/media/illustrations/25.svg +8 -0
  72. package/src/assets/media/illustrations/26.svg +8 -0
  73. package/src/assets/media/illustrations/27.svg +6 -0
  74. package/src/assets/media/illustrations/28-dark.svg +28 -0
  75. package/src/assets/media/illustrations/28.svg +14 -0
  76. package/src/assets/media/illustrations/29-dark.svg +6 -0
  77. package/src/assets/media/illustrations/29.svg +6 -0
  78. package/src/assets/media/illustrations/3-dark.svg +70 -0
  79. package/src/assets/media/illustrations/3.svg +70 -0
  80. package/src/assets/media/illustrations/30-dark.svg +8 -0
  81. package/src/assets/media/illustrations/30.svg +8 -0
  82. package/src/assets/media/illustrations/31-dark.svg +9 -0
  83. package/src/assets/media/illustrations/31.svg +9 -0
  84. package/src/assets/media/illustrations/32-dark.svg +10 -0
  85. package/src/assets/media/illustrations/32.svg +10 -0
  86. package/src/assets/media/illustrations/33-dark.svg +15 -0
  87. package/src/assets/media/illustrations/33.svg +15 -0
  88. package/src/assets/media/illustrations/34-dark.svg +5 -0
  89. package/src/assets/media/illustrations/34.svg +5 -0
  90. package/src/assets/media/illustrations/35-dark.svg +11 -0
  91. package/src/assets/media/illustrations/35.svg +4 -0
  92. package/src/assets/media/illustrations/4-dark.svg +51 -0
  93. package/src/assets/media/illustrations/4.svg +51 -0
  94. package/src/assets/media/illustrations/5-dark.svg +78 -0
  95. package/src/assets/media/illustrations/5.svg +78 -0
  96. package/src/assets/media/illustrations/6.svg +58 -0
  97. package/src/assets/media/illustrations/7.svg +49 -0
  98. package/src/assets/media/illustrations/8.svg +61 -0
  99. package/src/assets/media/illustrations/9.svg +57 -0
  100. package/src/assets/media/misc/placeholder.svg +15 -0
  101. package/src/components/devices/devices-mini-map.tsx +32 -26
  102. package/src/components/devices/map-marker.tsx +98 -0
  103. package/src/components/ui/checklist-item.tsx +55 -0
  104. package/src/components/ui/plan-card.tsx +68 -0
  105. package/src/components/ui/settings-row.tsx +32 -0
  106. package/src/components/ui/settings-section.tsx +22 -0
  107. package/src/components/ui/usage-meter.tsx +35 -0
  108. package/src/index.ts +12 -1
  109. package/src/layouts/LayoutSwitcher.tsx +220 -0
  110. package/src/layouts/app/MegaMenuLayout.tsx +69 -34
  111. package/src/layouts/app/MegaMenuNavbarLayout.tsx +73 -37
  112. package/src/layouts/app/NavbarCollapsibleLayout.tsx +53 -4
  113. package/src/layouts/app/NavbarSidebarLayout.tsx +74 -29
  114. package/src/layouts/app/SidebarDualMenuLayout.tsx +48 -5
  115. package/src/layouts/app/SidebarFixedLayout.tsx +15 -10
  116. package/src/layouts/app/SidebarMinimalLayout.tsx +51 -3
  117. package/src/layouts/app/SidebarTabsLayout.tsx +48 -2
  118. package/src/layouts/app/SplitSidebarLayout.tsx +91 -43
  119. package/src/layouts/app/TopNavLayout.tsx +7 -12
  120. package/src/layouts/app/WorkspaceSidebarLayout.tsx +103 -46
  121. package/src/layouts/app/partials/Navbar.tsx +61 -10
  122. package/src/layouts/app/partials/Toolbar.tsx +1 -1
  123. package/src/layouts/auth/AuthCenteredLayout.tsx +10 -4
  124. package/src/lib/map-markers.ts +21 -3
  125. package/src/pages/login/ConfirmPasswordPage.tsx +35 -0
  126. package/src/pages/login/ForgotPasswordPage.tsx +41 -0
  127. package/src/pages/login/LoginPage.tsx +50 -0
  128. package/src/pages/login/RegisterPage.tsx +41 -0
  129. package/src/pages/login/ResetPasswordPage.tsx +35 -0
  130. package/src/pages/login/TwoFactorChallengePage.tsx +41 -0
  131. package/src/pages/login/VerifyEmailPage.tsx +31 -0
  132. package/src/pages/my/ActivityPage.tsx +160 -0
  133. package/src/pages/my/GetStartedPage.tsx +221 -0
  134. package/src/pages/my/NotificationsPage.tsx +133 -0
  135. package/src/pages/my/ProfilePage.tsx +650 -0
  136. package/src/pages/my/TenantsPage.tsx +37 -0
  137. package/src/pages/tenant/AssigneesPage.tsx +155 -0
  138. package/src/pages/tenant/BeatsPage.tsx +403 -0
  139. package/src/pages/tenant/DashboardPage.tsx +195 -0
  140. package/src/pages/tenant/GeofencePage.tsx +422 -0
  141. package/src/pages/tenant/IncidentsPage.tsx +214 -0
  142. package/src/pages/tenant/IntegrationsPage.tsx +352 -0
  143. package/src/pages/tenant/InvitePage.tsx +153 -0
  144. package/src/pages/tenant/LiveStreamPage.tsx +141 -0
  145. package/src/pages/tenant/MembersPage.tsx +414 -0
  146. package/src/pages/tenant/TenantProfilePage.tsx +701 -0
  147. package/src/platform/adapters/default.tsx +1 -1
  148. package/src/platform/types.ts +2 -0
  149. package/src/styles/components/apexcharts.css +101 -0
  150. package/src/styles/components/image-input.css +51 -0
  151. package/src/styles/components/leaflet.css +25 -0
  152. package/src/styles/components/rating.css +89 -0
  153. package/src/styles/components/scrollable.css +119 -0
  154. package/src/styles/layout.css +24 -0
  155. package/src/styles/layouts/sidebar-fixed.css +93 -138
  156. package/src/styles/themes.css +5 -5
  157. package/src/vite-env.d.ts +21 -0
  158. package/src/layouts/SettingsLayout.tsx +0 -21
  159. 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
+ [![Socket Badge](https://badge.socket.dev/npm/package/@trackany-device/components/1.0.0)](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.0.0",
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
- "main": "./src/index.ts",
14
- "types": "./src/index.ts",
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
- ".": "./src/index.ts",
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';