@trackany-device/components 1.1.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 +9 -9
  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 CHANGED
@@ -1,4 +1,4 @@
1
- # @track-any-device/components
1
+ # @trackany-device/components
2
2
 
3
3
  Shared React component library for the **Track Any Device** platform.
4
4
  Built with React 19, Tailwind CSS v4, Radix UI primitives, and shadcn/ui conventions.
@@ -10,7 +10,7 @@ Built with React 19, Tailwind CSS v4, Radix UI primitives, and shadcn/ui convent
10
10
  ## Install
11
11
 
12
12
  ```bash
13
- npm install @track-any-device/components
13
+ npm install @trackany-device/components
14
14
  ```
15
15
 
16
16
  > **Peer dependencies** — install the ones you use:
@@ -30,10 +30,10 @@ In your app's CSS entry point (e.g. `app.css`):
30
30
 
31
31
  ```css
32
32
  @import "tailwindcss";
33
- @import "@track-any-device/components/styles/themes.css";
33
+ @import "@trackany-device/components/styles/themes.css";
34
34
 
35
35
  /* If you use KeenIcons: */
36
- @import "@track-any-device/components/styles/keenicons.css";
36
+ @import "@trackany-device/components/styles/keenicons.css";
37
37
  ```
38
38
 
39
39
  ### 2. Wrap your app with a theme
@@ -56,7 +56,7 @@ The library abstracts routing/forms behind a `PlatformProvider`. Pick the adapte
56
56
 
57
57
  ```tsx
58
58
  // Next.js
59
- import { PlatformProvider, createNextjsAdapter } from '@track-any-device/components';
59
+ import { PlatformProvider, createNextjsAdapter } from '@trackany-device/components';
60
60
 
61
61
  export default function RootLayout({ children }) {
62
62
  return (
@@ -69,7 +69,7 @@ export default function RootLayout({ children }) {
69
69
 
70
70
  ```tsx
71
71
  // Inertia.js (Laravel)
72
- import { PlatformProvider, createInertiaAdapter } from '@track-any-device/components';
72
+ import { PlatformProvider, createInertiaAdapter } from '@trackany-device/components';
73
73
 
74
74
  createInertiaApp({
75
75
  setup({ el, App, props }) {
@@ -87,7 +87,7 @@ createInertiaApp({
87
87
  ## Usage
88
88
 
89
89
  ```tsx
90
- import { Button, Card, CardContent, CardHeader, CardTitle } from '@track-any-device/components';
90
+ import { Button, Card, CardContent, CardHeader, CardTitle } from '@trackany-device/components';
91
91
 
92
92
  export default function Example() {
93
93
  return (
@@ -155,8 +155,8 @@ Each theme ships with a matching dark variant — add `.dark` to the same elemen
155
155
  `KeenIcon` — ~1 200 icons in four styles (`duotone` · `filled` · `outline` · `solid`):
156
156
 
157
157
  ```tsx
158
- import { KeenIcon } from '@track-any-device/components';
159
- // Don't forget: import '@track-any-device/components/styles/keenicons.css';
158
+ import { KeenIcon } from '@trackany-device/components';
159
+ // Don't forget: import '@trackany-device/components/styles/keenicons.css';
160
160
 
161
161
  <KeenIcon icon="home" style="duotone" className="size-5" />
162
162
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackany-device/components",
3
- "version": "1.1.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';