ywana-core8 0.2.8 → 0.2.10
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/dist/index.css +295 -58
- package/dist/index.js +215 -114
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +215 -114
- package/dist/index.modern.js.map +1 -1
- package/dist/index.umd.js +215 -114
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/desktop/AppManager.js +179 -115
- package/src/desktop/ApplicationMenu.css +295 -55
- package/src/desktop/ApplicationMenu.js +55 -15
- package/src/desktop/Desktop.stories.jsx +148 -584
- package/src/desktop/desktop-windows.css +0 -3
- package/src/desktop/desktop.js +43 -23
- package/src/desktop.backup/desktop.css +0 -6
- package/src/desktop.backup/desktop.js +0 -13
- package/src/desktop.backup/window.css +0 -58
- package/src/desktop.backup/window.js +0 -27
- package/src/examples/ApplicationMenuExample.js +0 -361
@@ -6,14 +6,15 @@
|
|
6
6
|
left: 0;
|
7
7
|
right: 0;
|
8
8
|
bottom: 0; /* Covers entire workspace container */
|
9
|
-
background: rgba(0, 0, 0, 0.
|
10
|
-
backdrop-filter: blur(
|
9
|
+
background: rgba(0, 0, 0, 0.16);
|
10
|
+
backdrop-filter: blur(1px);
|
11
11
|
z-index: 10000; /* Always above all windows */
|
12
12
|
display: flex;
|
13
|
-
align-items:
|
14
|
-
justify-content:
|
13
|
+
align-items: flex-end;
|
14
|
+
justify-content: flex-start;
|
15
15
|
animation: fadeIn 0.2s ease-out;
|
16
16
|
pointer-events: auto; /* Ensure menu is clickable */
|
17
|
+
padding: 0 0 0px 15px; /* Espacio para el taskbar y margen izquierdo */
|
17
18
|
}
|
18
19
|
|
19
20
|
@keyframes fadeIn {
|
@@ -27,12 +28,13 @@
|
|
27
28
|
|
28
29
|
.application-menu {
|
29
30
|
background: #ffffff;
|
30
|
-
border-radius: 12px;
|
31
|
-
box-shadow: 0
|
32
|
-
width:
|
31
|
+
border-radius: 12px 12px 0 0;
|
32
|
+
box-shadow: 0 -10px 30px rgba(0, 0, 0, 0.3);
|
33
|
+
width: 30rem;
|
33
34
|
max-width: 1000px;
|
34
|
-
height:
|
35
|
-
|
35
|
+
height: 55vh;
|
36
|
+
min-height: 30rem;
|
37
|
+
max-height: calc(100% - 80px); /* Espacio para taskbar */
|
36
38
|
display: grid;
|
37
39
|
grid-template-rows: auto auto 1fr;
|
38
40
|
grid-template-areas:
|
@@ -45,11 +47,11 @@
|
|
45
47
|
|
46
48
|
@keyframes slideIn {
|
47
49
|
from {
|
48
|
-
transform:
|
50
|
+
transform: translateY(20px);
|
49
51
|
opacity: 0;
|
50
52
|
}
|
51
53
|
to {
|
52
|
-
transform:
|
54
|
+
transform: translateY(0);
|
53
55
|
opacity: 1;
|
54
56
|
}
|
55
57
|
}
|
@@ -59,10 +61,17 @@
|
|
59
61
|
grid-area: header;
|
60
62
|
display: flex;
|
61
63
|
align-items: center;
|
62
|
-
justify-content:
|
63
|
-
padding:
|
64
|
+
justify-content: flex-end;
|
65
|
+
padding: 8px 16px;
|
64
66
|
border-bottom: 1px solid #e0e0e0;
|
65
67
|
background: #f8f9fa;
|
68
|
+
min-height: 40px;
|
69
|
+
}
|
70
|
+
|
71
|
+
.application-menu__header-controls {
|
72
|
+
display: flex;
|
73
|
+
align-items: center;
|
74
|
+
gap: 6px;
|
66
75
|
}
|
67
76
|
|
68
77
|
.application-menu__header h2 {
|
@@ -72,15 +81,48 @@
|
|
72
81
|
font-weight: 600;
|
73
82
|
}
|
74
83
|
|
84
|
+
.application-menu__view-toggle {
|
85
|
+
background: none;
|
86
|
+
border: 1px solid #ddd;
|
87
|
+
font-size: 14px;
|
88
|
+
cursor: pointer;
|
89
|
+
color: #666;
|
90
|
+
padding: 6px 10px;
|
91
|
+
border-radius: 4px;
|
92
|
+
transition: all 0.2s ease;
|
93
|
+
min-width: 32px;
|
94
|
+
height: 32px;
|
95
|
+
display: flex;
|
96
|
+
align-items: center;
|
97
|
+
justify-content: center;
|
98
|
+
}
|
99
|
+
|
100
|
+
.application-menu__view-toggle:hover {
|
101
|
+
background: #e9ecef;
|
102
|
+
color: #333;
|
103
|
+
border-color: #ccc;
|
104
|
+
}
|
105
|
+
|
106
|
+
.application-menu__view-toggle.active {
|
107
|
+
background: #1976d2;
|
108
|
+
color: white;
|
109
|
+
border-color: #1976d2;
|
110
|
+
}
|
111
|
+
|
75
112
|
.application-menu__close {
|
76
113
|
background: none;
|
77
114
|
border: none;
|
78
|
-
font-size:
|
115
|
+
font-size: 20px;
|
79
116
|
color: #666;
|
80
117
|
cursor: pointer;
|
81
|
-
padding:
|
118
|
+
padding: 6px 8px;
|
82
119
|
border-radius: 4px;
|
83
120
|
transition: all 0.2s ease;
|
121
|
+
min-width: 32px;
|
122
|
+
height: 32px;
|
123
|
+
display: flex;
|
124
|
+
align-items: center;
|
125
|
+
justify-content: center;
|
84
126
|
}
|
85
127
|
|
86
128
|
.application-menu__close:hover {
|
@@ -91,34 +133,123 @@
|
|
91
133
|
/* Search */
|
92
134
|
.application-menu__search {
|
93
135
|
grid-area: search;
|
94
|
-
padding:
|
136
|
+
padding: 12px 20px;
|
95
137
|
border-bottom: 1px solid #e0e0e0;
|
96
138
|
}
|
97
139
|
|
98
140
|
.application-menu__search-input {
|
99
141
|
width: 100%;
|
100
|
-
padding:
|
101
|
-
border:
|
102
|
-
border-radius:
|
103
|
-
font-size:
|
142
|
+
padding: 10px 14px;
|
143
|
+
border: 1px solid #ddd;
|
144
|
+
border-radius: 6px;
|
145
|
+
font-size: 14px;
|
104
146
|
outline: none;
|
105
147
|
transition: border-color 0.2s ease;
|
106
148
|
}
|
107
149
|
|
108
150
|
.application-menu__search-input:focus {
|
109
151
|
border-color: #1976d2;
|
152
|
+
box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.1);
|
153
|
+
}
|
154
|
+
|
155
|
+
/* Condensed Mode */
|
156
|
+
.application-menu--condensed .application-menu__header {
|
157
|
+
padding: 6px 12px;
|
158
|
+
min-height: 32px;
|
159
|
+
}
|
160
|
+
|
161
|
+
.application-menu--condensed .application-menu__search {
|
162
|
+
padding: 8px 16px;
|
163
|
+
}
|
164
|
+
|
165
|
+
.application-menu--condensed .application-menu__search-input {
|
166
|
+
padding: 8px 12px;
|
167
|
+
font-size: 13px;
|
168
|
+
}
|
169
|
+
|
170
|
+
.application-menu--condensed .application-menu__content {
|
171
|
+
padding: 12px 16px;
|
172
|
+
}
|
173
|
+
|
174
|
+
.application-menu--condensed .application-menu__categories {
|
175
|
+
padding: 4px;
|
176
|
+
}
|
177
|
+
|
178
|
+
.application-menu--condensed .application-menu__category {
|
179
|
+
width: 36px;
|
180
|
+
height: 36px;
|
181
|
+
padding: 6px;
|
182
|
+
margin: 1px;
|
183
|
+
}
|
184
|
+
|
185
|
+
.application-menu--condensed .category-icon {
|
186
|
+
font-size: 16px;
|
187
|
+
}
|
188
|
+
|
189
|
+
.application-menu--condensed .application-menu__category-section {
|
190
|
+
margin-bottom: 20px;
|
191
|
+
}
|
192
|
+
|
193
|
+
.application-menu--condensed .category-title {
|
194
|
+
font-size: 14px;
|
195
|
+
margin-bottom: 8px;
|
196
|
+
}
|
197
|
+
|
198
|
+
.application-menu--condensed .application-menu__apps-grid {
|
199
|
+
gap: 8px;
|
200
|
+
grid-template-columns: repeat(auto-fill, minmax(75px, 1fr));
|
201
|
+
}
|
202
|
+
|
203
|
+
.application-menu--condensed .application-menu__app--grid {
|
204
|
+
padding: 8px 6px;
|
205
|
+
}
|
206
|
+
|
207
|
+
.application-menu--condensed .application-menu__app--grid .app-icon {
|
208
|
+
font-size: 28px;
|
209
|
+
margin-bottom: 4px;
|
210
|
+
}
|
211
|
+
|
212
|
+
.application-menu--condensed .application-menu__app--grid .app-name {
|
213
|
+
font-size: 11px;
|
214
|
+
}
|
215
|
+
|
216
|
+
.application-menu--condensed .application-menu__apps-list {
|
217
|
+
gap: 1px;
|
218
|
+
}
|
219
|
+
|
220
|
+
.application-menu--condensed .application-menu__app--list {
|
221
|
+
padding: 6px 12px;
|
222
|
+
gap: 10px;
|
223
|
+
}
|
224
|
+
|
225
|
+
.application-menu--condensed .application-menu__app--list .app-icon {
|
226
|
+
font-size: 22px;
|
227
|
+
min-width: 22px;
|
228
|
+
}
|
229
|
+
|
230
|
+
.application-menu--condensed .application-menu__app--list .app-name {
|
231
|
+
font-size: 12px;
|
232
|
+
margin-bottom: 1px;
|
233
|
+
}
|
234
|
+
|
235
|
+
.application-menu--condensed .application-menu__app--list .app-description {
|
236
|
+
font-size: 10px;
|
110
237
|
}
|
111
238
|
|
112
239
|
/* Main Grid Layout */
|
113
240
|
.application-menu__main {
|
114
241
|
grid-area: main;
|
115
242
|
display: grid;
|
116
|
-
grid-template-columns:
|
243
|
+
grid-template-columns: 60px 1fr;
|
117
244
|
grid-template-areas: "sidebar content";
|
118
245
|
height: 100%;
|
119
246
|
overflow: hidden;
|
120
247
|
}
|
121
248
|
|
249
|
+
.application-menu--condensed .application-menu__main {
|
250
|
+
grid-template-columns: 48px 1fr;
|
251
|
+
}
|
252
|
+
|
122
253
|
/* Sidebar */
|
123
254
|
.application-menu__sidebar {
|
124
255
|
grid-area: sidebar;
|
@@ -132,7 +263,7 @@
|
|
132
263
|
/* Categories */
|
133
264
|
.application-menu__categories {
|
134
265
|
flex: 1;
|
135
|
-
padding:
|
266
|
+
padding: 8px;
|
136
267
|
overflow-y: auto;
|
137
268
|
scrollbar-width: thin;
|
138
269
|
scrollbar-color: #ccc transparent;
|
@@ -158,18 +289,20 @@
|
|
158
289
|
.application-menu__category {
|
159
290
|
display: flex;
|
160
291
|
align-items: center;
|
161
|
-
|
162
|
-
padding:
|
163
|
-
margin: 2px
|
292
|
+
justify-content: center;
|
293
|
+
padding: 8px;
|
294
|
+
margin: 2px;
|
164
295
|
background: transparent;
|
165
296
|
border: none;
|
166
|
-
border-radius:
|
297
|
+
border-radius: 6px;
|
167
298
|
cursor: pointer;
|
168
|
-
font-size:
|
169
|
-
text-align:
|
170
|
-
transition: all 0.
|
171
|
-
color: #
|
172
|
-
width:
|
299
|
+
font-size: 13px;
|
300
|
+
text-align: center;
|
301
|
+
transition: all 0.15s ease;
|
302
|
+
color: #555;
|
303
|
+
width: 44px;
|
304
|
+
height: 44px;
|
305
|
+
position: relative;
|
173
306
|
}
|
174
307
|
|
175
308
|
.application-menu__category:hover {
|
@@ -178,27 +311,25 @@
|
|
178
311
|
}
|
179
312
|
|
180
313
|
.application-menu__category.active {
|
181
|
-
background: #
|
182
|
-
color:
|
314
|
+
background: #e3f2fd;
|
315
|
+
color: #1976d2;
|
316
|
+
font-weight: 500;
|
183
317
|
}
|
184
318
|
|
185
319
|
.category-icon {
|
186
|
-
font-size:
|
187
|
-
min-width:
|
320
|
+
font-size: 20px;
|
321
|
+
min-width: 20px;
|
188
322
|
}
|
189
323
|
|
190
324
|
.category-name {
|
191
|
-
|
192
|
-
white-space: nowrap;
|
193
|
-
overflow: hidden;
|
194
|
-
text-overflow: ellipsis;
|
325
|
+
display: none;
|
195
326
|
}
|
196
327
|
|
197
328
|
/* Content */
|
198
329
|
.application-menu__content {
|
199
330
|
grid-area: content;
|
200
331
|
overflow-y: auto;
|
201
|
-
padding: 24px;
|
332
|
+
padding: 20px 24px;
|
202
333
|
scrollbar-width: thin;
|
203
334
|
scrollbar-color: #ccc transparent;
|
204
335
|
}
|
@@ -223,9 +354,9 @@
|
|
223
354
|
|
224
355
|
.application-menu__search-results h3,
|
225
356
|
.category-title {
|
226
|
-
margin: 0 0
|
357
|
+
margin: 0 0 12px 0;
|
227
358
|
color: #333;
|
228
|
-
font-size:
|
359
|
+
font-size: 15px;
|
229
360
|
font-weight: 600;
|
230
361
|
}
|
231
362
|
|
@@ -240,19 +371,126 @@
|
|
240
371
|
/* Apps Grid */
|
241
372
|
.application-menu__apps-grid {
|
242
373
|
display: grid;
|
243
|
-
grid-template-columns: repeat(auto-fill, minmax(
|
244
|
-
gap:
|
374
|
+
grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
|
375
|
+
gap: 12px;
|
376
|
+
max-width: 100%;
|
377
|
+
}
|
378
|
+
|
379
|
+
.application-menu__app--grid {
|
380
|
+
display: flex;
|
381
|
+
flex-direction: column;
|
382
|
+
align-items: center;
|
383
|
+
padding: 12px 8px;
|
384
|
+
border-radius: 8px;
|
385
|
+
cursor: pointer;
|
386
|
+
transition: all 0.15s ease;
|
387
|
+
text-align: center;
|
388
|
+
background: #ffffff;
|
389
|
+
border: 1px solid transparent;
|
390
|
+
}
|
391
|
+
|
392
|
+
.application-menu__app--grid:hover {
|
393
|
+
background: #f8f9fa;
|
394
|
+
border-color: #e0e0e0;
|
395
|
+
transform: translateY(-1px);
|
396
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
397
|
+
}
|
398
|
+
|
399
|
+
.application-menu__app--grid .app-icon {
|
400
|
+
font-size: 36px;
|
401
|
+
margin-bottom: 6px;
|
402
|
+
line-height: 1;
|
403
|
+
}
|
404
|
+
|
405
|
+
.application-menu__app--grid .app-name {
|
406
|
+
font-size: 12px;
|
407
|
+
font-weight: 500;
|
408
|
+
color: #333;
|
409
|
+
line-height: 1.2;
|
410
|
+
word-break: break-word;
|
411
|
+
max-width: 100%;
|
412
|
+
}
|
413
|
+
|
414
|
+
/* Apps List */
|
415
|
+
.application-menu__apps-list {
|
416
|
+
display: flex;
|
417
|
+
flex-direction: column;
|
418
|
+
gap: 2px;
|
245
419
|
max-width: 100%;
|
246
420
|
}
|
247
421
|
|
422
|
+
.application-menu__app--list {
|
423
|
+
display: flex;
|
424
|
+
align-items: center;
|
425
|
+
padding: 10px 16px;
|
426
|
+
border-radius: 6px;
|
427
|
+
cursor: pointer;
|
428
|
+
transition: all 0.15s ease;
|
429
|
+
background: transparent;
|
430
|
+
border: none;
|
431
|
+
gap: 14px;
|
432
|
+
margin-bottom: 2px;
|
433
|
+
}
|
434
|
+
|
435
|
+
.application-menu__app--list:hover {
|
436
|
+
background: #f0f7ff;
|
437
|
+
color: #1976d2;
|
438
|
+
}
|
439
|
+
|
440
|
+
.application-menu__app--list .app-icon {
|
441
|
+
font-size: 28px;
|
442
|
+
min-width: 28px;
|
443
|
+
line-height: 1;
|
444
|
+
display: flex;
|
445
|
+
align-items: center;
|
446
|
+
justify-content: center;
|
447
|
+
}
|
448
|
+
|
449
|
+
.application-menu__app--list .app-info {
|
450
|
+
flex: 1;
|
451
|
+
text-align: left;
|
452
|
+
min-width: 0;
|
453
|
+
}
|
454
|
+
|
455
|
+
.application-menu__app--list .app-name {
|
456
|
+
font-size: 14px;
|
457
|
+
font-weight: 500;
|
458
|
+
color: #333;
|
459
|
+
line-height: 1.4;
|
460
|
+
margin-bottom: 3px;
|
461
|
+
white-space: nowrap;
|
462
|
+
overflow: hidden;
|
463
|
+
text-overflow: ellipsis;
|
464
|
+
}
|
465
|
+
|
466
|
+
.application-menu__app--list .app-description {
|
467
|
+
font-size: 12px;
|
468
|
+
color: #666;
|
469
|
+
line-height: 1.3;
|
470
|
+
opacity: 0.9;
|
471
|
+
white-space: nowrap;
|
472
|
+
overflow: hidden;
|
473
|
+
text-overflow: ellipsis;
|
474
|
+
}
|
475
|
+
|
476
|
+
.application-menu__app--list:hover .app-name {
|
477
|
+
color: #1976d2;
|
478
|
+
}
|
479
|
+
|
480
|
+
.application-menu__app--list:hover .app-description {
|
481
|
+
color: #1565c0;
|
482
|
+
opacity: 1;
|
483
|
+
}
|
484
|
+
|
485
|
+
/* Legacy support for old class names */
|
248
486
|
.application-menu__app {
|
249
487
|
display: flex;
|
250
488
|
flex-direction: column;
|
251
489
|
align-items: center;
|
252
|
-
padding:
|
253
|
-
border-radius:
|
490
|
+
padding: 12px 8px;
|
491
|
+
border-radius: 8px;
|
254
492
|
cursor: pointer;
|
255
|
-
transition: all 0.
|
493
|
+
transition: all 0.15s ease;
|
256
494
|
text-align: center;
|
257
495
|
background: #ffffff;
|
258
496
|
border: 1px solid transparent;
|
@@ -261,22 +499,23 @@
|
|
261
499
|
.application-menu__app:hover {
|
262
500
|
background: #f8f9fa;
|
263
501
|
border-color: #e0e0e0;
|
264
|
-
transform: translateY(-
|
265
|
-
box-shadow: 0
|
502
|
+
transform: translateY(-1px);
|
503
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
266
504
|
}
|
267
505
|
|
268
506
|
.app-icon {
|
269
|
-
font-size:
|
270
|
-
margin-bottom:
|
507
|
+
font-size: 36px;
|
508
|
+
margin-bottom: 6px;
|
271
509
|
line-height: 1;
|
272
510
|
}
|
273
511
|
|
274
512
|
.app-name {
|
275
|
-
font-size:
|
513
|
+
font-size: 12px;
|
276
514
|
font-weight: 500;
|
277
515
|
color: #333;
|
278
516
|
line-height: 1.2;
|
279
517
|
word-break: break-word;
|
518
|
+
max-width: 100%;
|
280
519
|
}
|
281
520
|
|
282
521
|
/* No Results */
|
@@ -307,16 +546,17 @@
|
|
307
546
|
}
|
308
547
|
|
309
548
|
.application-menu__main {
|
310
|
-
grid-template-columns:
|
549
|
+
grid-template-columns: 50px 1fr;
|
311
550
|
}
|
312
551
|
|
313
552
|
.application-menu__category {
|
314
|
-
padding:
|
553
|
+
padding: 8px;
|
315
554
|
font-size: 13px;
|
555
|
+
height: 40px;
|
316
556
|
}
|
317
557
|
|
318
558
|
.category-icon {
|
319
|
-
font-size:
|
559
|
+
font-size: 18px;
|
320
560
|
}
|
321
561
|
|
322
562
|
.application-menu__apps-grid {
|
@@ -13,6 +13,8 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
13
13
|
const [selectedCategory, setSelectedCategory] = useState('all')
|
14
14
|
const [apps, setApps] = useState([])
|
15
15
|
const [categories, setCategories] = useState([])
|
16
|
+
const [viewMode, setViewMode] = useState('list') // 'grid' or 'list'
|
17
|
+
const [isCondensed, setIsCondensed] = useState(true) // 'normal' or 'condensed'
|
16
18
|
const searchInputRef = useRef(null)
|
17
19
|
const { createWindow } = useWindows()
|
18
20
|
|
@@ -109,17 +111,39 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
109
111
|
|
110
112
|
return (
|
111
113
|
<div className="application-menu-overlay" onClick={onClose}>
|
112
|
-
<div className=
|
114
|
+
<div className={`application-menu ${isCondensed ? 'application-menu--condensed' : ''}`} onClick={(e) => e.stopPropagation()}>
|
113
115
|
{/* Header */}
|
114
116
|
<div className="application-menu__header">
|
115
|
-
<
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
117
|
+
<div className="application-menu__header-controls">
|
118
|
+
<button
|
119
|
+
className={`application-menu__view-toggle ${isCondensed ? 'active' : ''}`}
|
120
|
+
onClick={() => setIsCondensed(!isCondensed)}
|
121
|
+
title={isCondensed ? "Normal view" : "Condensed view"}
|
122
|
+
>
|
123
|
+
⚏
|
124
|
+
</button>
|
125
|
+
<button
|
126
|
+
className={`application-menu__view-toggle ${viewMode === 'grid' ? 'active' : ''}`}
|
127
|
+
onClick={() => setViewMode('grid')}
|
128
|
+
title="Grid view"
|
129
|
+
>
|
130
|
+
⊞
|
131
|
+
</button>
|
132
|
+
<button
|
133
|
+
className={`application-menu__view-toggle ${viewMode === 'list' ? 'active' : ''}`}
|
134
|
+
onClick={() => setViewMode('list')}
|
135
|
+
title="List view"
|
136
|
+
>
|
137
|
+
☰
|
138
|
+
</button>
|
139
|
+
<button
|
140
|
+
className="application-menu__close"
|
141
|
+
onClick={onClose}
|
142
|
+
title="Close menu"
|
143
|
+
>
|
144
|
+
×
|
145
|
+
</button>
|
146
|
+
</div>
|
123
147
|
</div>
|
124
148
|
|
125
149
|
{/* Search */}
|
@@ -142,6 +166,7 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
142
166
|
<button
|
143
167
|
className={`application-menu__category ${selectedCategory === 'all' ? 'active' : ''}`}
|
144
168
|
onClick={() => handleCategorySelect('all')}
|
169
|
+
title="All Apps"
|
145
170
|
>
|
146
171
|
<span className="category-icon">📱</span>
|
147
172
|
<span className="category-name">All Apps</span>
|
@@ -151,6 +176,7 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
151
176
|
key={category.id}
|
152
177
|
className={`application-menu__category ${selectedCategory === category.id ? 'active' : ''}`}
|
153
178
|
onClick={() => handleCategorySelect(category.id)}
|
179
|
+
title={category.name}
|
154
180
|
>
|
155
181
|
<span className="category-icon">{category.icon}</span>
|
156
182
|
<span className="category-name">{category.name}</span>
|
@@ -164,16 +190,23 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
164
190
|
{searchTerm && (
|
165
191
|
<div className="application-menu__search-results">
|
166
192
|
<h3>Search Results ({filteredApps.length})</h3>
|
167
|
-
<div className=
|
193
|
+
<div className={`application-menu__apps-${viewMode}`}>
|
168
194
|
{filteredApps.map(app => (
|
169
195
|
<div
|
170
196
|
key={app.id}
|
171
|
-
className=
|
197
|
+
className={`application-menu__app--${viewMode}`}
|
172
198
|
onClick={() => handleLaunchApp(app)}
|
173
199
|
title={app.description}
|
174
200
|
>
|
175
201
|
<div className="app-icon">{app.icon}</div>
|
176
|
-
|
202
|
+
{viewMode === 'list' ? (
|
203
|
+
<div className="app-info">
|
204
|
+
<div className="app-name">{app.name}</div>
|
205
|
+
<div className="app-description">{app.description}</div>
|
206
|
+
</div>
|
207
|
+
) : (
|
208
|
+
<div className="app-name">{app.name}</div>
|
209
|
+
)}
|
177
210
|
</div>
|
178
211
|
))}
|
179
212
|
</div>
|
@@ -185,16 +218,23 @@ export const ApplicationMenu = ({ isOpen, onClose }) => {
|
|
185
218
|
{Object.entries(groupedApps).map(([categoryName, categoryApps]) => (
|
186
219
|
<div key={categoryName} className="application-menu__category-section">
|
187
220
|
<h3 className="category-title">{categoryName}</h3>
|
188
|
-
<div className=
|
221
|
+
<div className={`application-menu__apps-${viewMode}`}>
|
189
222
|
{categoryApps.map(app => (
|
190
223
|
<div
|
191
224
|
key={app.id}
|
192
|
-
className=
|
225
|
+
className={`application-menu__app--${viewMode}`}
|
193
226
|
onClick={() => handleLaunchApp(app)}
|
194
227
|
title={app.description}
|
195
228
|
>
|
196
229
|
<div className="app-icon">{app.icon}</div>
|
197
|
-
|
230
|
+
{viewMode === 'list' ? (
|
231
|
+
<div className="app-info">
|
232
|
+
<div className="app-name">{app.name}</div>
|
233
|
+
<div className="app-description">{app.description}</div>
|
234
|
+
</div>
|
235
|
+
) : (
|
236
|
+
<div className="app-name">{app.name}</div>
|
237
|
+
)}
|
198
238
|
</div>
|
199
239
|
))}
|
200
240
|
</div>
|