-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstants.tsx
More file actions
214 lines (206 loc) · 15 KB
/
constants.tsx
File metadata and controls
214 lines (206 loc) · 15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
import React from 'react';
import { Product, Category, HeroSlide } from './types';
export const COLORS = {
primary: '#E60026',
accent: '#FFD700',
dark: '#0A0A0A',
};
// Abstract Hardware Visuals (SVG Data URLs)
const VISUALS = {
ROUTING: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiIGZpbGw9InVybCgjZ3JhZDEpIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkMSIgeDE9IjAiIHkxPSIwIiB4Mj0iODAwIiB5Mj0iODAwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzE0MDAwNSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAzMDMwMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik0xMDAgMzAwSDcwME0xMDAgNTAwSDcwME0zMDAgMTAwVjcwME01MDAgMTAwVjcwMCIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPjxyZWN0IHg9IjIwMCIgeT0iMzUwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjEwMCIgcng9IjQiIGZpbGw9IiNFMzAwMjYiIGZpbGwtb3BhY2l0eT0iMC4wNSIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjIiLz48Y2lyY2xlIGN4PSIyNDAiIGN5PSI0MDAiIHI9IjUiIGZpbGw9IiNFMzAwMjYiLz48Y2lyY2xlIGN4PSIyNzAiIGN5PSI0MDAiIHI9IjUiIGZpbGw9IiNFMzAwMjYiLz48Y2lyY2xlIGN4PSIzMDAiIGN5PSI0MDAiIHI9IjUiIGZpbGw9IiNFMzAwMjYiLz48L3N2Zz4=',
SWITCHING: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiIGZpbGw9InVybCgjZ3JhZDIpIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkMiIgeDE9IjgwMCIgeTE9IjgwMCIgeDI9IjAiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0U2MDAyNiIgc3RvcC1vcGFjaXR5PSIwLjE1Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDMwMzAzIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMTUwIiB5PSIyMDAiIHdpZHRoPSI1MDAiIGhlaWdodD0iNDAwIiByeD0iOCIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjAiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuMDUiLz48cGF0aCBkPSJNMTgwIDI0MEg2MjBNMTgwIDI4MEg2MjBNMTgwIDMyMEg2MjBNMTgwIDM2MEg2MjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2Utb3BhY2l0eT0iMC4xIi8+PC9zdmc+',
WIRELESS: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiIGZpbGw9IiMwMzAzMDMiLz48Y2lyY2xlIGN4PSI0MDAiIGN5PSI0MDAiIHI9IjMwMCIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1vcGFjaXR5PSIwLjEiLz48Y2lyY2xlIGN4PSI0MDAiIGN5PSI0MDAiIHI9IjIwMCIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz48Y2lyY2xlIGN4PSI0MDAiIGN5PSI0MDAiIHI9IjEwMCIgc3Ryb2tlPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1vcGFjaXR5PSIwLjQiLz48Y2lyY2xlIGN4PSI0MDAiIGN5PSI0MDAiIHI9IjEwIiBmaWxsPSIjRTYwMDI2Ii8+PC9zdmc+',
LTE: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiIGZpbGw9InVybCgjZ3JhZDMpIi8+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkMyIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iNTAlIj48c3RvcCBzdG9wLWNvbG9yPSIjRTYwMDI2IiBzdHJva2Utd2lkdGg9IjAuMiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAzMDMwMyIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik00MDAgMTAwTDQwMCA3MDBNNDAwIDEwMEwzNTAgMTUwTTQwMCAxMDBMNDUwIDE1MCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2Utb3BhY2l0eT0iMC44Ii8+PC9zdmc+',
ACCESSORIES: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDgwMCA4MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiIGZpbGw9IiMwYjBiMGIiLz48cmVjdCB4PSIzMDAiIHk9IjMwMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuMDUiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz48L3N2Zz4='
};
export const ICONS = {
Globe: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><circle cx="12" cy="12" r="10"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/><path d="M2 12h20"/></svg>,
Search: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>,
Grid: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><rect width="7" height="7" x="3" y="3" rx="1"/><rect width="7" height="7" x="14" y="3" rx="1"/><rect width="7" height="7" x="14" y="14" rx="1"/><rect width="7" height="7" x="3" y="14" rx="1"/></svg>,
ChevronRight: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="m9 18 6-6-6-6"/></svg>,
WhatsApp: (props: React.SVGProps<SVGSVGElement>) => (
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}>
<path d="M17.498 14.382c-.301-.15-1.767-.872-2.04-.971-.272-.1-.47-.15-.667.15-.198.3-.765.971-.937 1.171-.173.199-.346.225-.646.075-.3-.15-1.268-.467-2.414-1.49-.89-.794-1.492-1.775-1.666-2.076-.174-.3-.019-.463.13-.612.135-.134.3-.35.45-.525.15-.175.2-.3.3-.5.1-.199.05-.374-.025-.525-.075-.15-.667-1.608-.913-2.198-.24-.576-.484-.497-.667-.506-.172-.007-.37-.009-.567-.009-.197 0-.518.074-.789.373-.27.299-1.033 1.009-1.033 2.459 0 1.45 1.054 2.85 1.202 3.05.148.2 2.074 3.167 5.023 4.444.7.304 1.247.485 1.673.621.705.223 1.344.192 1.85.117.564-.083 1.767-.722 2.016-1.417.248-.695.248-1.291.173-1.416-.075-.125-.272-.199-.57-.35z"/>
<path d="M21 11.5a8.38 8.38 0 1 1-16.31 3.8L3 21l5.7-1.7A8.38 8.38 0 0 1 21 11.5z"/>
</svg>
),
Bolt: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>,
Shield: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>,
Router: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><rect x="2" y="14" width="20" height="8" rx="2"/><path d="M6 18h.01"/><path d="M10 18h.01"/><path d="M14 18h.01"/><path d="M18 18h.01"/><path d="M2 14v-4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4"/><path d="M12 2v6"/></svg>,
Wifi: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M5 13a10 10 0 0 1 14 0"/><path d="M8.5 16.5a5 5 0 0 1 7 0"/><circle cx="12" cy="20" r="1"/></svg>,
Menu: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></svg>,
X: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>,
Upload: (props: React.SVGProps<SVGSVGElement>) => <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" x2="12" y1="3" y2="15"/></svg>,
};
export const PRODUCTS: Product[] = [
// ROUTERS
{
id: 'ccr2004-12s',
name: 'MikroTik® CCR2004-1G-12S+2XS',
code: 'Cloud Core Router',
category: 'Routing',
specs: ['12× 10G SFP+', '2× 25G SFP28', 'RouterOS v7', 'AL52400 quad-core @ 2 GHz', 'BGP/OSPF/MPLS'],
description: 'The definitive solution for ISP backbones and enterprise core routing. Features phenomenal single-core performance.',
imageUrl: VISUALS.ROUTING,
status: 'In Stock',
featured: true
},
{
id: 'hap-ax3',
name: 'MikroTik® hAP ax³',
code: 'Home Access Point',
category: 'Wireless',
specs: ['Wi-Fi 6 (802.11ax)', '2.5 Gigabit Ethernet', 'Triple-chain 5 GHz', 'PoE-in/out', 'IPsec acceleration'],
description: 'Our top-of-the-line home/small office access point. Blazing fast wireless with the most advanced security features.',
imageUrl: VISUALS.WIRELESS,
status: 'In Stock',
featured: true
},
{
id: 'rb5009',
name: 'MikroTik® RB5009UG+S+IN',
code: 'RouterBOARD',
category: 'Routing',
specs: ['7× Gigabit Ethernet', '1× 2.5G Ethernet', '1× 10G SFP+', 'ARM quad-core @ 1.4 GHz', '1GB RAM'],
description: 'The ultimate heavy-duty home lab router. Seven times faster than the previous generation with versatile power options.',
imageUrl: VISUALS.ROUTING,
status: 'In Stock'
},
// SWITCHES
{
id: 'crs518',
name: 'MikroTik® CRS518-16XS-2XQ-RM',
code: 'Cloud Router Switch',
category: 'Switching',
specs: ['16× 10G SFP+', '2× 100G QSFP28', 'Hot-swap PSU', 'Quad-core 2 GHz', 'SwOS/RouterOS'],
description: 'High-density fiber switching for data centers and enterprise backbones. 100G capacity on every core port.',
imageUrl: VISUALS.SWITCHING,
status: 'In Stock',
featured: true
},
{
id: 'crs326',
name: 'MikroTik® CRS326-24G-2S+RM',
code: 'Cloud Router Switch',
category: 'Switching',
specs: ['24× Gigabit Ethernet', '2× 10G SFP+ uplinks', 'Rackmount 1U', 'PoE available', 'L3 routing'],
description: 'Reliable access layer switching with wire-speed performance and RouterOS L3 capabilities.',
imageUrl: VISUALS.SWITCHING,
status: 'In Stock'
},
{
id: 'css610',
name: 'MikroTik® CSS610-8G-2S+IN',
code: 'Cloud Smart Switch',
category: 'Switching',
specs: ['8× Gigabit Ethernet', '2× 10G SFP+', 'SwOS', 'Low power', 'Fanless'],
description: 'Compact 10G aggregation for small businesses. Silent, efficient, and professional.',
imageUrl: VISUALS.SWITCHING,
status: 'In Stock'
},
// WIRELESS
{
id: 'audience-ax',
name: 'MikroTik® Audience Wi-Fi 6',
code: 'Access Point',
category: 'Wireless',
specs: ['Wi-Fi 6', 'Tri-radio Mesh', '4×4 MIMO on 5 GHz', '2.5G uplink', 'PoE 802.3at'],
description: 'Stylish tri-band mesh solution for high-density environments like hotels, conferences, and modern offices.',
imageUrl: VISUALS.WIRELESS,
status: 'In Stock'
},
{
id: 'wap-ax',
name: 'MikroTik® wAP ax',
code: 'Wireless Access Point',
category: 'Wireless',
specs: ['Wi-Fi 6 dual-concurrent', 'Weatherproof IP54', 'PoE 802.3af/at', 'Integrated antennas'],
description: 'Rugged, weatherproof outdoor access point. Perfect for campus networks, warehouses, and mobile deployments.',
imageUrl: VISUALS.WIRELESS,
status: 'In Stock'
},
{
id: 'lhg-5-ac',
name: 'MikroTik® LHG 5 ac',
code: 'Light Head Grid',
category: 'Wireless',
specs: ['5 GHz 802.11ac', '24.5 dBi antenna', 'PtP up to 10 km', 'Weatherproof', 'RouterOS L3'],
description: 'The standard for point-to-point wireless links. Grid design offers unmatched wind protection for high-altitude installs.',
imageUrl: VISUALS.WIRELESS,
status: 'In Stock'
},
// 5G/LTE
{
id: 'chateau-5g-ax',
name: 'MikroTik® Chateau 5G ax',
code: '5G Router',
category: '5G/LTE',
specs: ['5G NR R16 modem', 'Wi-Fi 6 dual-band', '2.5 Gigabit Ethernet', 'eSIM + nano SIM'],
description: 'Carrier-grade 5G connectivity for home and enterprise. Features advanced carrier aggregation and high-gain antennas.',
imageUrl: VISUALS.LTE,
status: 'In Stock'
},
{
id: 'ltap-lte',
name: 'MikroTik® LtAP LTE kit',
code: 'LTE Access Point',
category: '5G/LTE',
specs: ['LTE Cat 4', 'Dual-SIM failover', 'Wi-Fi 2.4/5 GHz', 'GPS', 'Weatherproof IP67'],
description: 'Industrial-grade mobile gateway for vehicles and remote IoT deployments with GPS and triple SIM slots.',
imageUrl: VISUALS.LTE,
status: 'In Stock'
},
// ACCESSORIES
{
id: 's-rj10',
name: 'MikroTik® S+RJ10',
code: 'SFP+ Module',
category: 'Accessories',
specs: ['10GBASE-T copper SFP+', 'RJ45 Connector', '100m on Cat6a', 'Low power consumption'],
description: 'Transform your SFP+ ports into 10G copper ports. Supports 6 speeds for maximum hardware compatibility.',
imageUrl: VISUALS.ACCESSORIES,
status: 'In Stock'
}
];
export const CATEGORIES: Category[] = [
{ name: 'All', id: 'all', count: 12, icon: 'Globe' },
{ name: 'Routing', id: 'routing', count: 3, icon: 'Router' },
{ name: 'Switching', id: 'switching', count: 3, icon: 'Grid' },
{ name: 'Wireless', id: 'wireless', count: 3, icon: 'Wifi' },
{ name: '5G/LTE', id: '5g', count: 2, icon: 'Bolt' },
{ name: 'Accessories', id: 'accessories', count: 1, icon: 'Shield' },
];
export const HERO_SLIDES: HeroSlide[] = [
{
title: 'OFFICIAL MIKROTIK® MASTER DISTRIBUTOR.',
subtitle: 'NEXLYN Distribution LLC: Your authorized source for genuine network infrastructure in the MENA region.',
image: VISUALS.ROUTING,
categoryId: 'Routing'
},
{
title: 'ENTERPRISE-GRADE INFRASTRUCTURE.',
subtitle: 'Deploy 100G carrier-grade hardware for data centers, ISPs, and large-scale enterprise environments.',
image: VISUALS.SWITCHING,
categoryId: 'Switching'
},
{
title: 'B2B DISTRIBUTION EXCELLENCE.',
subtitle: 'Tiered volume pricing and technical logistics for authorized resellers and system integrators.',
image: VISUALS.WIRELESS,
categoryId: 'Wireless'
},
{
title: 'NEXT-GEN 5G CONNECTIVITY.',
subtitle: 'High-speed LTE and 5G NR hardware for mission-critical mobile and remote networking deployments.',
image: VISUALS.LTE,
categoryId: '5G/LTE'
},
{
title: 'PROFESSIONAL NETWORK ACCESSORIES.',
subtitle: 'SFP+ modules, high-gain antennas, and specialized technical accessories for complete build-outs.',
image: VISUALS.ACCESSORIES,
categoryId: 'Accessories'
}
];
export const WHATSAPP_NUMBER = '971502474482';
export const ADMIN_PASSCODE = 'vidi-admin-2025';