@codesinger0/shared-components 1.1.85 → 1.1.86
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/package.json +1 -1
- package/dist/components 2/AccessibilityMenu.jsx +0 -474
- package/dist/components 2/AdvantagesList.jsx +0 -89
- package/dist/components 2/ArticlesList.jsx +0 -269
- package/dist/components 2/DualTextCard.jsx +0 -73
- package/dist/components 2/FloatingWhatsAppButton.jsx +0 -180
- package/dist/components 2/FullscreenCarousel.jsx +0 -292
- package/dist/components 2/Hero.jsx +0 -198
- package/dist/components 2/IconGrid.jsx +0 -144
- package/dist/components 2/IntroSection.jsx +0 -74
- package/dist/components 2/LargeItemCard.jsx +0 -267
- package/dist/components 2/MasonryItemCard.jsx +0 -247
- package/dist/components 2/Menu.d.ts +0 -26
- package/dist/components 2/Menu.jsx +0 -268
- package/dist/components 2/MyOrdersDisplay.jsx +0 -311
- package/dist/components 2/QAAccordion.jsx +0 -212
- package/dist/components 2/SmallItemCard.jsx +0 -152
- package/dist/components 2/SmallItemsGrid.jsx +0 -313
- package/dist/components 2/TextListCards.jsx +0 -107
- package/dist/components 2/ToastProvider.jsx +0 -38
- package/dist/components 2/UnderConstruction.jsx +0 -76
- package/dist/components 2/VideoCard.jsx +0 -88
- package/dist/components 2/cart/CartItem.jsx +0 -101
- package/dist/components 2/cart/FloatingCartButton.jsx +0 -49
- package/dist/components 2/cart/OrderForm.jsx +0 -960
- package/dist/components 2/cart/ShoppingCartModal.jsx +0 -229
- package/dist/components 2/clubMembership/ClubMembershipModal.jsx +0 -289
- package/dist/components 2/clubMembership/ClubPromoModal.jsx +0 -108
- package/dist/components 2/elements/CTAButton.jsx +0 -17
- package/dist/components 2/elements/FixedWidthHeroVideo.jsx +0 -92
- package/dist/components 2/elements/ImageLightbox.jsx +0 -112
- package/dist/components 2/elements/RoundButton.jsx +0 -44
- package/dist/components 2/elements/SmallButton.jsx +0 -35
- package/dist/components 2/elements/Toast.jsx +0 -37
- package/dist/components 2/elements/VideoLightbox.jsx +0 -76
- package/dist/components 2/modals/ItemDetailsModal.jsx +0 -192
- package/dist/components 2/products/CategoryList.jsx +0 -24
- package/dist/components 2/products/PriceRangeSlider.jsx +0 -162
- package/dist/components 2/products/ProductsDisplay.jsx +0 -40
- package/dist/components 2/products/ProductsSidebar.jsx +0 -46
- package/dist/components 2/products/SubcategorySection.jsx +0 -37
- package/dist/context 2/CartContext.jsx +0 -165
- package/dist/context 2/ItemModalContext.jsx +0 -40
- package/dist/hooks 2/useScrollLock.js +0 -52
- package/dist/index 2.js +0 -45
- package/dist/integrations 2/emailService.js +0 -167
- package/dist/styles 2/shared-components.css +0 -29
- package/dist/utils 2/ScrollManager.jsx +0 -85
- package/dist/utils 2/ScrollToTop.jsx +0 -14
package/package.json
CHANGED
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { motion, AnimatePresence } from 'framer-motion';
|
|
3
|
-
import {
|
|
4
|
-
Accessibility,
|
|
5
|
-
ZoomIn,
|
|
6
|
-
ZoomOut,
|
|
7
|
-
Sun,
|
|
8
|
-
Moon,
|
|
9
|
-
Type,
|
|
10
|
-
Eye,
|
|
11
|
-
X
|
|
12
|
-
} from 'lucide-react';
|
|
13
|
-
|
|
14
|
-
const AccessibilityMenu = ({
|
|
15
|
-
position = 'bottom-left', // 'bottom-left' or 'bottom-right'
|
|
16
|
-
bottomOffset = '1.5rem',
|
|
17
|
-
sideOffset = '1.5rem',
|
|
18
|
-
size = 'large', // 'small', 'medium', 'large'
|
|
19
|
-
className = '',
|
|
20
|
-
onSettingChange = null, // callback when settings change
|
|
21
|
-
...props
|
|
22
|
-
}) => {
|
|
23
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
24
|
-
const [settings, setSettings] = useState({
|
|
25
|
-
fontSize: 100,
|
|
26
|
-
contrast: 'normal',
|
|
27
|
-
darkMode: false,
|
|
28
|
-
underlineLinks: false,
|
|
29
|
-
largerCursor: false
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Size configurations
|
|
33
|
-
const sizeClasses = {
|
|
34
|
-
small: 'w-12 h-12',
|
|
35
|
-
medium: 'w-14 h-14',
|
|
36
|
-
large: 'w-16 h-16'
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const iconSizes = {
|
|
40
|
-
small: 20,
|
|
41
|
-
medium: 24,
|
|
42
|
-
large: 28
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
// Position styles for button
|
|
46
|
-
const positionStyles = {
|
|
47
|
-
'bottom-left': {
|
|
48
|
-
bottom: bottomOffset,
|
|
49
|
-
left: sideOffset,
|
|
50
|
-
right: 'auto'
|
|
51
|
-
},
|
|
52
|
-
'bottom-right': {
|
|
53
|
-
bottom: bottomOffset,
|
|
54
|
-
right: sideOffset,
|
|
55
|
-
left: 'auto'
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
// Menu position styles
|
|
60
|
-
const menuPositionStyles = {
|
|
61
|
-
'bottom-left': {
|
|
62
|
-
bottom: `calc(${bottomOffset} + ${sizeClasses[size] === 'w-12 h-12' ? '4rem' : sizeClasses[size] === 'w-14 h-14' ? '4.5rem' : '5rem'})`,
|
|
63
|
-
left: sideOffset,
|
|
64
|
-
right: 'auto'
|
|
65
|
-
},
|
|
66
|
-
'bottom-right': {
|
|
67
|
-
bottom: `calc(${bottomOffset} + ${sizeClasses[size] === 'w-12 h-12' ? '4rem' : sizeClasses[size] === 'w-14 h-14' ? '4.5rem' : '5rem'})`,
|
|
68
|
-
right: sideOffset,
|
|
69
|
-
left: 'auto'
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
useEffect(() => {
|
|
74
|
-
// Apply font size
|
|
75
|
-
document.documentElement.style.fontSize = `${settings.fontSize}%`;
|
|
76
|
-
|
|
77
|
-
// Apply contrast
|
|
78
|
-
if (settings.contrast === 'high') {
|
|
79
|
-
document.documentElement.style.filter = 'contrast(1.5)';
|
|
80
|
-
} else {
|
|
81
|
-
document.documentElement.style.filter = 'none';
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Apply dark mode
|
|
85
|
-
if (settings.darkMode) {
|
|
86
|
-
document.documentElement.classList.add('dark-mode-accessibility');
|
|
87
|
-
} else {
|
|
88
|
-
document.documentElement.classList.remove('dark-mode-accessibility');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Apply link underline
|
|
92
|
-
if (settings.underlineLinks) {
|
|
93
|
-
document.documentElement.classList.add('underline-links');
|
|
94
|
-
} else {
|
|
95
|
-
document.documentElement.classList.remove('underline-links');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Apply larger cursor
|
|
99
|
-
if (settings.largerCursor) {
|
|
100
|
-
document.documentElement.classList.add('large-cursor');
|
|
101
|
-
} else {
|
|
102
|
-
document.documentElement.classList.remove('large-cursor');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Callback
|
|
106
|
-
if (onSettingChange) {
|
|
107
|
-
onSettingChange(settings);
|
|
108
|
-
}
|
|
109
|
-
}, [settings, onSettingChange]);
|
|
110
|
-
|
|
111
|
-
const increaseFontSize = () => {
|
|
112
|
-
setSettings(prev => ({
|
|
113
|
-
...prev,
|
|
114
|
-
fontSize: Math.min(prev.fontSize + 10, 150)
|
|
115
|
-
}));
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const decreaseFontSize = () => {
|
|
119
|
-
setSettings(prev => ({
|
|
120
|
-
...prev,
|
|
121
|
-
fontSize: Math.max(prev.fontSize - 10, 80)
|
|
122
|
-
}));
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
const resetSettings = () => {
|
|
126
|
-
setSettings({
|
|
127
|
-
fontSize: 100,
|
|
128
|
-
contrast: 'normal',
|
|
129
|
-
darkMode: false,
|
|
130
|
-
underlineLinks: false,
|
|
131
|
-
largerCursor: false
|
|
132
|
-
});
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const toggleContrast = () => {
|
|
136
|
-
setSettings(prev => ({
|
|
137
|
-
...prev,
|
|
138
|
-
contrast: prev.contrast === 'normal' ? 'high' : 'normal'
|
|
139
|
-
}));
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
const toggleDarkMode = () => {
|
|
143
|
-
setSettings(prev => ({
|
|
144
|
-
...prev,
|
|
145
|
-
darkMode: !prev.darkMode
|
|
146
|
-
}));
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const toggleUnderlineLinks = () => {
|
|
150
|
-
setSettings(prev => ({
|
|
151
|
-
...prev,
|
|
152
|
-
underlineLinks: !prev.underlineLinks
|
|
153
|
-
}));
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
const toggleLargerCursor = () => {
|
|
157
|
-
setSettings(prev => ({
|
|
158
|
-
...prev,
|
|
159
|
-
largerCursor: !prev.largerCursor
|
|
160
|
-
}));
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
return (
|
|
164
|
-
<>
|
|
165
|
-
{/* Main Button */}
|
|
166
|
-
<motion.button
|
|
167
|
-
onClick={() => setIsOpen(!isOpen)}
|
|
168
|
-
className={`fixed z-50 bg-blue-600 hover:bg-blue-700 text-white rounded-full shadow-lg hover:shadow-xl transition-all duration-300 flex items-center justify-center ${sizeClasses[size]} ${className}`}
|
|
169
|
-
style={positionStyles[position]}
|
|
170
|
-
initial={{ scale: 0, opacity: 0 }}
|
|
171
|
-
animate={{ scale: 1, opacity: 1 }}
|
|
172
|
-
whileHover={{ scale: 1.1 }}
|
|
173
|
-
whileTap={{ scale: 0.9 }}
|
|
174
|
-
transition={{
|
|
175
|
-
type: "spring",
|
|
176
|
-
stiffness: 300,
|
|
177
|
-
damping: 25
|
|
178
|
-
}}
|
|
179
|
-
aria-label="תפריט נגישות"
|
|
180
|
-
{...props}
|
|
181
|
-
>
|
|
182
|
-
<Accessibility size={iconSizes[size]} />
|
|
183
|
-
</motion.button>
|
|
184
|
-
|
|
185
|
-
{/* Menu Panel */}
|
|
186
|
-
<AnimatePresence>
|
|
187
|
-
{isOpen && (
|
|
188
|
-
<>
|
|
189
|
-
{/* Backdrop */}
|
|
190
|
-
<motion.div
|
|
191
|
-
initial={{ opacity: 0 }}
|
|
192
|
-
animate={{ opacity: 1 }}
|
|
193
|
-
exit={{ opacity: 0 }}
|
|
194
|
-
className="fixed inset-0 bg-black bg-opacity-20 z-40"
|
|
195
|
-
onClick={() => setIsOpen(false)}
|
|
196
|
-
/>
|
|
197
|
-
|
|
198
|
-
{/* Menu */}
|
|
199
|
-
<motion.div
|
|
200
|
-
initial={{ opacity: 0, scale: 0.8, y: 20 }}
|
|
201
|
-
animate={{ opacity: 1, scale: 1, y: 0 }}
|
|
202
|
-
exit={{ opacity: 0, scale: 0.8, y: 20 }}
|
|
203
|
-
transition={{
|
|
204
|
-
type: "spring",
|
|
205
|
-
stiffness: 300,
|
|
206
|
-
damping: 25
|
|
207
|
-
}}
|
|
208
|
-
className="fixed z-50 bg-white rounded-lg shadow-2xl p-6 w-80"
|
|
209
|
-
style={menuPositionStyles[position]}
|
|
210
|
-
dir="rtl"
|
|
211
|
-
>
|
|
212
|
-
{/* Header */}
|
|
213
|
-
<div className="flex justify-between items-center mb-4 pb-3 border-b">
|
|
214
|
-
<h3 className="text-lg font-bold text-gray-800">נגישות</h3>
|
|
215
|
-
<button
|
|
216
|
-
onClick={() => setIsOpen(false)}
|
|
217
|
-
className="text-gray-500 hover:text-gray-700 p-1 rounded-full hover:bg-gray-100"
|
|
218
|
-
aria-label="סגור"
|
|
219
|
-
>
|
|
220
|
-
<X size={20} />
|
|
221
|
-
</button>
|
|
222
|
-
</div>
|
|
223
|
-
|
|
224
|
-
{/* Settings */}
|
|
225
|
-
<div className="space-y-4">
|
|
226
|
-
{/* Font Size */}
|
|
227
|
-
<div className="flex items-center justify-between">
|
|
228
|
-
<span className="text-sm font-medium text-gray-700 flex items-center gap-2">
|
|
229
|
-
<Type size={18} />
|
|
230
|
-
גודל טקסט
|
|
231
|
-
</span>
|
|
232
|
-
<div className="flex gap-2">
|
|
233
|
-
<button
|
|
234
|
-
onClick={decreaseFontSize}
|
|
235
|
-
className="p-2 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors"
|
|
236
|
-
aria-label="הקטן טקסט"
|
|
237
|
-
disabled={settings.fontSize <= 80}
|
|
238
|
-
>
|
|
239
|
-
<ZoomOut size={16} />
|
|
240
|
-
</button>
|
|
241
|
-
<span className="px-3 py-2 bg-gray-50 rounded-lg text-sm font-medium min-w-[3rem] text-center">
|
|
242
|
-
{settings.fontSize}%
|
|
243
|
-
</span>
|
|
244
|
-
<button
|
|
245
|
-
onClick={increaseFontSize}
|
|
246
|
-
className="p-2 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors"
|
|
247
|
-
aria-label="הגדל טקסט"
|
|
248
|
-
disabled={settings.fontSize >= 150}
|
|
249
|
-
>
|
|
250
|
-
<ZoomIn size={16} />
|
|
251
|
-
</button>
|
|
252
|
-
</div>
|
|
253
|
-
</div>
|
|
254
|
-
|
|
255
|
-
{/* Contrast */}
|
|
256
|
-
<button
|
|
257
|
-
onClick={toggleContrast}
|
|
258
|
-
className={`w-full flex items-center justify-between p-3 rounded-lg transition-colors ${
|
|
259
|
-
settings.contrast === 'high'
|
|
260
|
-
? 'bg-blue-50 border-2 border-blue-500'
|
|
261
|
-
: 'bg-gray-50 hover:bg-gray-100'
|
|
262
|
-
}`}
|
|
263
|
-
>
|
|
264
|
-
<span className="text-sm font-medium text-gray-700 flex items-center gap-2">
|
|
265
|
-
<Eye size={18} />
|
|
266
|
-
ניגודיות גבוהה
|
|
267
|
-
</span>
|
|
268
|
-
<div className={`w-10 h-6 rounded-full transition-colors ${
|
|
269
|
-
settings.contrast === 'high' ? 'bg-blue-500' : 'bg-gray-300'
|
|
270
|
-
} relative`}>
|
|
271
|
-
<div className={`absolute w-4 h-4 bg-white rounded-full top-1 transition-all ${
|
|
272
|
-
settings.contrast === 'high' ? 'right-1' : 'right-5'
|
|
273
|
-
}`} />
|
|
274
|
-
</div>
|
|
275
|
-
</button>
|
|
276
|
-
|
|
277
|
-
{/* Dark Mode */}
|
|
278
|
-
<button
|
|
279
|
-
onClick={toggleDarkMode}
|
|
280
|
-
className={`w-full flex items-center justify-between p-3 rounded-lg transition-colors ${
|
|
281
|
-
settings.darkMode
|
|
282
|
-
? 'bg-blue-50 border-2 border-blue-500'
|
|
283
|
-
: 'bg-gray-50 hover:bg-gray-100'
|
|
284
|
-
}`}
|
|
285
|
-
>
|
|
286
|
-
<span className="text-sm font-medium text-gray-700 flex items-center gap-2">
|
|
287
|
-
{settings.darkMode ? <Moon size={18} /> : <Sun size={18} />}
|
|
288
|
-
מצב כהה
|
|
289
|
-
</span>
|
|
290
|
-
<div className={`w-10 h-6 rounded-full transition-colors ${
|
|
291
|
-
settings.darkMode ? 'bg-blue-500' : 'bg-gray-300'
|
|
292
|
-
} relative`}>
|
|
293
|
-
<div className={`absolute w-4 h-4 bg-white rounded-full top-1 transition-all ${
|
|
294
|
-
settings.darkMode ? 'right-1' : 'right-5'
|
|
295
|
-
}`} />
|
|
296
|
-
</div>
|
|
297
|
-
</button>
|
|
298
|
-
|
|
299
|
-
{/* Underline Links */}
|
|
300
|
-
<button
|
|
301
|
-
onClick={toggleUnderlineLinks}
|
|
302
|
-
className={`w-full flex items-center justify-between p-3 rounded-lg transition-colors ${
|
|
303
|
-
settings.underlineLinks
|
|
304
|
-
? 'bg-blue-50 border-2 border-blue-500'
|
|
305
|
-
: 'bg-gray-50 hover:bg-gray-100'
|
|
306
|
-
}`}
|
|
307
|
-
>
|
|
308
|
-
<span className="text-sm font-medium text-gray-700">
|
|
309
|
-
הדגש קישורים
|
|
310
|
-
</span>
|
|
311
|
-
<div className={`w-10 h-6 rounded-full transition-colors ${
|
|
312
|
-
settings.underlineLinks ? 'bg-blue-500' : 'bg-gray-300'
|
|
313
|
-
} relative`}>
|
|
314
|
-
<div className={`absolute w-4 h-4 bg-white rounded-full top-1 transition-all ${
|
|
315
|
-
settings.underlineLinks ? 'right-1' : 'right-5'
|
|
316
|
-
}`} />
|
|
317
|
-
</div>
|
|
318
|
-
</button>
|
|
319
|
-
|
|
320
|
-
{/* Larger Cursor */}
|
|
321
|
-
<button
|
|
322
|
-
onClick={toggleLargerCursor}
|
|
323
|
-
className={`w-full flex items-center justify-between p-3 rounded-lg transition-colors ${
|
|
324
|
-
settings.largerCursor
|
|
325
|
-
? 'bg-blue-50 border-2 border-blue-500'
|
|
326
|
-
: 'bg-gray-50 hover:bg-gray-100'
|
|
327
|
-
}`}
|
|
328
|
-
>
|
|
329
|
-
<span className="text-sm font-medium text-gray-700">
|
|
330
|
-
סמן גדול
|
|
331
|
-
</span>
|
|
332
|
-
<div className={`w-10 h-6 rounded-full transition-colors ${
|
|
333
|
-
settings.largerCursor ? 'bg-blue-500' : 'bg-gray-300'
|
|
334
|
-
} relative`}>
|
|
335
|
-
<div className={`absolute w-4 h-4 bg-white rounded-full top-1 transition-all ${
|
|
336
|
-
settings.largerCursor ? 'right-1' : 'right-5'
|
|
337
|
-
}`} />
|
|
338
|
-
</div>
|
|
339
|
-
</button>
|
|
340
|
-
|
|
341
|
-
{/* Reset Button */}
|
|
342
|
-
<button
|
|
343
|
-
onClick={resetSettings}
|
|
344
|
-
className="w-full mt-4 p-3 bg-gray-200 hover:bg-gray-300 text-gray-800 font-medium rounded-lg transition-colors"
|
|
345
|
-
>
|
|
346
|
-
איפוס הגדרות
|
|
347
|
-
</button>
|
|
348
|
-
</div>
|
|
349
|
-
</motion.div>
|
|
350
|
-
</>
|
|
351
|
-
)}
|
|
352
|
-
</AnimatePresence>
|
|
353
|
-
|
|
354
|
-
{/* Global Styles */}
|
|
355
|
-
<style jsx global>{`
|
|
356
|
-
.dark-mode-accessibility {
|
|
357
|
-
filter: invert(1) hue-rotate(180deg);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
.dark-mode-accessibility img,
|
|
361
|
-
.dark-mode-accessibility video,
|
|
362
|
-
.dark-mode-accessibility [style*="background-image"] {
|
|
363
|
-
filter: invert(1) hue-rotate(180deg);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
.underline-links a {
|
|
367
|
-
text-decoration: underline !important;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
.large-cursor,
|
|
371
|
-
.large-cursor * {
|
|
372
|
-
cursor: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path d="M8 4 L8 24 L14 18 L18 28 L22 26 L18 16 L26 16 Z" fill="black" stroke="white" stroke-width="1"/></svg>') 0 0, auto !important;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
.large-cursor button,
|
|
376
|
-
.large-cursor a {
|
|
377
|
-
cursor: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path d="M16 4 L12 12 L4 12 L4 16 L12 16 L16 24 L20 24 L20 16 L28 16 L28 12 L20 12 L20 4 Z" fill="black" stroke="white" stroke-width="1"/></svg>') 16 16, pointer !important;
|
|
378
|
-
}
|
|
379
|
-
`}</style>
|
|
380
|
-
</>
|
|
381
|
-
);
|
|
382
|
-
};
|
|
383
|
-
|
|
384
|
-
// Demo
|
|
385
|
-
const Demo = () => {
|
|
386
|
-
const handleSettingChange = (settings) => {
|
|
387
|
-
console.log('Settings changed:', settings);
|
|
388
|
-
};
|
|
389
|
-
|
|
390
|
-
return (
|
|
391
|
-
<div className="min-h-screen bg-gradient-to-br from-purple-50 to-blue-100 p-8" dir="rtl">
|
|
392
|
-
<div className="max-w-4xl mx-auto">
|
|
393
|
-
<h1 className="text-4xl font-bold text-gray-800 mb-6 text-center">
|
|
394
|
-
Accessibility Menu Demo
|
|
395
|
-
</h1>
|
|
396
|
-
|
|
397
|
-
<div className="bg-white rounded-xl shadow-lg p-8 mb-8">
|
|
398
|
-
<h2 className="text-2xl font-semibold mb-4">תכונות:</h2>
|
|
399
|
-
<ul className="space-y-2 text-gray-700">
|
|
400
|
-
<li>✅ מיקום גמיש (שמאל/ימין למטה)</li>
|
|
401
|
-
<li>✅ שליטה מלאה על המרחקים מהקצוות</li>
|
|
402
|
-
<li>✅ 3 גדלים: small, medium, large</li>
|
|
403
|
-
<li>✅ שינוי גודל טקסט (80% - 150%)</li>
|
|
404
|
-
<li>✅ ניגודיות גבוהה</li>
|
|
405
|
-
<li>✅ מצב כהה</li>
|
|
406
|
-
<li>✅ הדגשת קישורים</li>
|
|
407
|
-
<li>✅ סמן עכבר גדול</li>
|
|
408
|
-
<li>✅ Callback לשינויי הגדרות</li>
|
|
409
|
-
</ul>
|
|
410
|
-
</div>
|
|
411
|
-
|
|
412
|
-
<div className="bg-white rounded-xl shadow-lg p-8 mb-8">
|
|
413
|
-
<h2 className="text-2xl font-semibold mb-4">דוגמאות שימוש:</h2>
|
|
414
|
-
|
|
415
|
-
<div className="space-y-4 text-sm bg-gray-50 p-4 rounded-lg font-mono text-left" dir="ltr">
|
|
416
|
-
<div className="bg-white p-3 rounded border">
|
|
417
|
-
<div className="text-gray-500 mb-2">// Bottom Left (default)</div>
|
|
418
|
-
<code className="text-blue-600">
|
|
419
|
-
{`<AccessibilityMenu
|
|
420
|
-
position="bottom-left"
|
|
421
|
-
bottomOffset="1.5rem"
|
|
422
|
-
sideOffset="1.5rem"
|
|
423
|
-
/>`}
|
|
424
|
-
</code>
|
|
425
|
-
</div>
|
|
426
|
-
|
|
427
|
-
<div className="bg-white p-3 rounded border">
|
|
428
|
-
<div className="text-gray-500 mb-2">// Bottom Right with callback</div>
|
|
429
|
-
<code className="text-blue-600">
|
|
430
|
-
{`<AccessibilityMenu
|
|
431
|
-
position="bottom-right"
|
|
432
|
-
size="medium"
|
|
433
|
-
onSettingChange={(settings) => {
|
|
434
|
-
console.log('Settings:', settings);
|
|
435
|
-
}}
|
|
436
|
-
/>`}
|
|
437
|
-
</code>
|
|
438
|
-
</div>
|
|
439
|
-
</div>
|
|
440
|
-
</div>
|
|
441
|
-
|
|
442
|
-
<div className="bg-white rounded-xl shadow-lg p-8">
|
|
443
|
-
<h2 className="text-2xl font-semibold mb-4">טקסט לדוגמה</h2>
|
|
444
|
-
<p className="mb-4">
|
|
445
|
-
זהו טקסט לדוגמה שיושפע מהגדרות הנגישות. נסה לשנות את גודל הטקסט, הניגודיות והמצב הכהה כדי לראות את ההשפעה.
|
|
446
|
-
</p>
|
|
447
|
-
<a href="#" className="text-blue-600 hover:underline">זהו קישור לדוגמה</a>
|
|
448
|
-
<div className="mt-4 h-96 flex items-center justify-center text-gray-400">
|
|
449
|
-
<p>גלול למטה כדי לראות את תפריט הנגישות 👇</p>
|
|
450
|
-
</div>
|
|
451
|
-
</div>
|
|
452
|
-
</div>
|
|
453
|
-
|
|
454
|
-
{/* Demo Menus */}
|
|
455
|
-
<AccessibilityMenu
|
|
456
|
-
position="bottom-left"
|
|
457
|
-
bottomOffset="1.5rem"
|
|
458
|
-
sideOffset="1.5rem"
|
|
459
|
-
size="large"
|
|
460
|
-
onSettingChange={handleSettingChange}
|
|
461
|
-
/>
|
|
462
|
-
|
|
463
|
-
<AccessibilityMenu
|
|
464
|
-
position="bottom-right"
|
|
465
|
-
bottomOffset="1.5rem"
|
|
466
|
-
sideOffset="1.5rem"
|
|
467
|
-
size="medium"
|
|
468
|
-
onSettingChange={handleSettingChange}
|
|
469
|
-
/>
|
|
470
|
-
</div>
|
|
471
|
-
);
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
export default AccessibilityMenu;
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
const AdvantagesList = ({
|
|
2
|
-
points = [],
|
|
3
|
-
title,
|
|
4
|
-
subtitle,
|
|
5
|
-
className = '',
|
|
6
|
-
classNames = {},
|
|
7
|
-
...props
|
|
8
|
-
}) => {
|
|
9
|
-
const {
|
|
10
|
-
title: titleClass = 'main-title',
|
|
11
|
-
subtitle: subtitleClass = 'main-subtitle',
|
|
12
|
-
content: contentClass = 'content-text'
|
|
13
|
-
} = classNames;
|
|
14
|
-
|
|
15
|
-
if (!points || points.length === 0) {
|
|
16
|
-
return (
|
|
17
|
-
<section className={`py-16 px-4 ${className}`} {...props} dir="rtl">
|
|
18
|
-
<div className="max-w-6xl mx-auto text-center">
|
|
19
|
-
{title && <h2 className={titleClass + " mb-4"}>{title}</h2>}
|
|
20
|
-
{subtitle && <h3 className={subtitleClass + " mb-8 whitespace-pre-line"}>{subtitle}</h3>}
|
|
21
|
-
<p className={contentClass}>אין נקודות להצגה</p>
|
|
22
|
-
</div>
|
|
23
|
-
</section>
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<section className={`py-16 px-4 bg-main ${className}`} {...props} dir="rtl">
|
|
29
|
-
<div className="max-w-6xl mx-auto">
|
|
30
|
-
{/* Header */}
|
|
31
|
-
{(title || subtitle) && (
|
|
32
|
-
<div className="text-center mb-12">
|
|
33
|
-
{title && <h2 className={titleClass + " mb-4"}>{title}</h2>}
|
|
34
|
-
{subtitle && <h3 className={subtitleClass}>{subtitle}</h3>}
|
|
35
|
-
</div>
|
|
36
|
-
)}
|
|
37
|
-
|
|
38
|
-
{/* Points Grid */}
|
|
39
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
40
|
-
{points.map((point, index) => (
|
|
41
|
-
<div key={index} className="glass-card p-6 hover:scale-105 transition-transform duration-200">
|
|
42
|
-
{/* Desktop Layout - Horizontal */}
|
|
43
|
-
<div className="hidden lg:flex items-start gap-4">
|
|
44
|
-
<div className="flex-shrink-0 w-12 h-12 rounded-full flex items-center justify-center text-primary">
|
|
45
|
-
<point.icon size={24} />
|
|
46
|
-
</div>
|
|
47
|
-
<div className="flex-1">
|
|
48
|
-
<span className='content-text leading-relaxed font-semibold'>{point.bold}</span>
|
|
49
|
-
<p className="content-text leading-relaxed" style={{ whiteSpace: 'pre-line' }}>{point.text}</p>
|
|
50
|
-
{point.subs && point.subs.length > 0 && (
|
|
51
|
-
<ul className="mt-3 space-y-2 list-disc list-inside">
|
|
52
|
-
{point.subs.map((sub, subIndex) => (
|
|
53
|
-
<li key={subIndex} className="subtitle leading-relaxed text-base">
|
|
54
|
-
{sub}
|
|
55
|
-
</li>
|
|
56
|
-
))}
|
|
57
|
-
</ul>
|
|
58
|
-
)}
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
|
|
62
|
-
{/* Mobile Layout - Vertical */}
|
|
63
|
-
<div className="lg:hidden text-center space-y-2">
|
|
64
|
-
<div className="flex justify-center">
|
|
65
|
-
<div className="w-14 h-10 rounded-full flex items-center justify-center text-primary">
|
|
66
|
-
<point.icon size={26} />
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
<span className='content-text leading-relaxed font-semibold'>{point.bold}</span>
|
|
70
|
-
<p className="content-text leading-relaxed" style={{ whiteSpace: 'pre-line' }}>{point.text}</p>
|
|
71
|
-
{point.subs && point.subs.length > 0 && (
|
|
72
|
-
<ul className="mt-3 space-y-2 list-disc list-inside text-right">
|
|
73
|
-
{point.subs.map((sub, subIndex) => (
|
|
74
|
-
<li key={subIndex} className="subtitle leading-relaxed text-sm">
|
|
75
|
-
{sub}
|
|
76
|
-
</li>
|
|
77
|
-
))}
|
|
78
|
-
</ul>
|
|
79
|
-
)}
|
|
80
|
-
</div>
|
|
81
|
-
</div>
|
|
82
|
-
))}
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
</section>
|
|
86
|
-
);
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export default AdvantagesList;
|