@kerkhoff-ict/solora 0.1.0 → 2.0.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 (3) hide show
  1. package/dist/index.css +595 -20
  2. package/dist/index.js +1970 -0
  3. package/package.json +11 -3
package/dist/index.css CHANGED
@@ -1,31 +1,606 @@
1
- .btn-primary {
2
- background: #0071e3;
3
- color: #fff;
1
+ /* ======================
2
+ Root kleurvariabelen (fallbacks)
3
+ ====================== */
4
+ :root {
5
+ --color-primary: #0071e3;
6
+ --color-secondary: #f5f5f5;
7
+ --color-success: #28a745;
8
+ --color-warning: #ffc107;
9
+ --color-danger: #dc3545;
10
+ --color-text-light: #ffffff;
11
+ --color-text-dark: #000000;
12
+ }
13
+ /* ======================
14
+ Basis button styles
15
+ ====================== */
16
+ .btn {
4
17
  font-weight: 600;
5
- border-radius: 9999px;
6
- padding: 0.5rem 1.5rem;
7
18
  border: none;
8
- font-size: 1rem;
9
- box-shadow: 0 2px 8px 0 rgba(0,0,0,0.10);
10
- transition: background 0.2s;
19
+ border-radius: 9999px;
20
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
21
+ border-radius: 9999px;
11
22
  cursor: pointer;
23
+ transition: background 0.2s, filter 0.2s;
24
+ }
25
+ .btn-sm { padding: 0.1875rem 1rem; font-size: 0.9375rem; }
26
+ .btn-md { padding: 0.5rem 1.2rem; font-size: 1rem; }
27
+ .btn-lg { padding: 0.8125rem 1.5625rem; font-size: 1.0625rem; }
28
+ .btn-xl { padding: 0.9375rem 1.875rem; font-size: 1.3125rem; }
29
+ .btn.disabled {
30
+ opacity: 0.5;
31
+ cursor: not-allowed;
32
+ pointer-events: none;
12
33
  }
13
- .btn-primary:hover {
14
- background: #005bb5;
34
+ /* ======================
35
+ Predefined color buttons met fallback
36
+ ====================== */
37
+ .btn-primary {
38
+ background: var(--color-primary, #0071e3);
39
+ color: var(--color-text-light, #fff);
15
40
  }
41
+ .btn-primary:hover { filter: brightness(0.85); }
42
+ .btn-secondary {
43
+ background: var(--color-secondary, #f5f5f5);
44
+ color: var(--color-text-dark, #000);
45
+ border: 2px solid rgba(0,0,0,0.1);
46
+ }
47
+ .btn-secondary.active,
48
+ .btn-secondary:hover { filter: brightness(0.9); }
49
+ .btn-success {
50
+ background: var(--color-success, #28a745);
51
+ color: var(--color-text-light, #fff);
52
+ }
53
+ .btn-success:hover { filter: brightness(0.85); }
54
+ .btn-warning {
55
+ background: var(--color-warning, #ffc107);
56
+ color: var(--color-text-dark, #000);
57
+ }
58
+ .btn-warning:hover { filter: brightness(0.85); }
59
+ .btn-danger {
60
+ background: var(--color-danger, #dc3545);
61
+ color: var(--color-text-light, #fff);
62
+ }
63
+ .btn-danger:hover { filter: brightness(0.85); }
64
+ /* ======================
65
+ Glass button (special)
66
+ ====================== */
16
67
  .btn-glass {
17
- background: rgba(255, 255, 255, 0.2);
18
- color: #fff;
19
- font-weight: 600;
20
- padding: 0.5rem 1.5rem;
21
- border-radius: 1rem;
68
+ position: relative;
69
+ background: rgba(255,255,255,0.2);
70
+ color: var(--color-text-dark, #000);
22
71
  border: 1px solid rgba(255,255,255,0.3);
72
+ box-shadow: 0 8px 32px rgba(0,0,0,0.12), inset 0 0 0 1px rgba(255,255,255,0.1);
73
+ backdrop-filter: blur(12px);
74
+ -webkit-backdrop-filter: blur(12px);
75
+ overflow: hidden;
76
+ transition: all 0.3s ease;
77
+ }
78
+ .btn-glass::before {
79
+ content:"";
80
+ position:absolute;
81
+ top:4px; left:4px; right:4px; bottom:0;
82
+ background: rgba(0,0,0,0.084);
83
+ filter: blur(16px);
84
+ z-index:-1;
85
+ border-radius: inherit;
86
+ pointer-events: none;
87
+ }
88
+ .btn-glass:hover {
89
+ background: rgba(255,255,255,0.35);
90
+ box-shadow: 0 12px 28px rgba(0,0,0,0.18), inset 0 0 0 1px rgba(255,255,255,0.15);
91
+ }
92
+ .btn-glass:active {
93
+ background: rgba(255,255,255,0.25);
94
+ box-shadow: 0 4px 10px rgba(0,0,0,0.1), inset 0 0 0 1px rgba(255,255,255,0.2);
95
+ transform: translateY(1px);
96
+ }
97
+ /* ======================
98
+ Custom color button helper
99
+ Usage: .btn-[#ff6600] of .btn-[rgba(255,0,0,0.5)]
100
+ ====================== */
101
+ [class*="btn-["] {
102
+ color: var(--color-text-light, #fff);
103
+ transition: all 0.2s ease;
104
+ }
105
+ [class*="btn-["]:hover {
106
+ filter: brightness(0.85);
107
+ }
108
+ /* ======================
109
+ Dark mode support
110
+ ====================== */
111
+ @media (prefers-color-scheme: dark) {
112
+ .btn-primary { background: #0558be; color: var(--color-text-light, #fff); box-shadow: 0 2px 8px rgba(0,0,0,0.5); }
113
+ .btn-primary:hover { background: #2b76d2; }
114
+
115
+ .btn-secondary { background: #1c1c1e; color: #f0f0f0; border: 2px solid rgba(255,255,255,0.2); box-shadow: 0 2px 8px rgba(0,0,0,0.5); }
116
+ .btn-secondary.active,
117
+ .btn-secondary:hover { background-color: #2a2a2c; }
118
+
119
+ .btn-success { background: #1c3e23; }
120
+ .btn-success:hover { filter: brightness(1.2); }
121
+
122
+ .btn-warning { background: #664d03; }
123
+ .btn-warning:hover { filter: brightness(1.2); }
124
+
125
+ .btn-danger { background: #7a1f1f; }
126
+ .btn-danger:hover { filter: brightness(1.2); }
127
+
128
+ .btn-glass { background: rgba(255,255,255,0.05); color: #fff; border: 1px solid rgba(255,255,255,0.2); box-shadow: 0 8px 32px rgba(0,0,0,0.6), inset 0 0 0 1px rgba(255,255,255,0.05); }
129
+ .btn-glass::before { background: rgba(255,255,255,0.04); }
130
+ .btn-glass:hover { background: rgba(255,255,255,0.1); box-shadow: 0 12px 28px rgba(0,0,0,0.7), inset 0 0 0 1px rgba(255,255,255,0.08); }
131
+ .btn-glass:active { background: rgba(255,255,255,0.07); box-shadow: 0 4px 10px rgba(0,0,0,0.4), inset 0 0 0 1px rgba(255,255,255,0.1); }
132
+ }
133
+ .codeblock {
134
+ position: relative;
135
+ border-radius: 12px;
136
+ overflow: hidden;
137
+ font-family: "SF Mono", "Menlo", monospace;
138
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
139
+ background: #fefefe55;
23
140
  backdrop-filter: blur(8px);
24
- box-shadow: 0 4px 16px 0 rgba(0,0,0,0.10);
25
- transition: background 0.2s, box-shadow 0.2s;
141
+ }
142
+ .pre-content {
143
+ margin: 0;
144
+ backdrop-filter: blur(12px);
145
+ color: #000000;
146
+ padding-left: 16px;
147
+ width: 100%;
148
+ height: 100%;
149
+ overflow-x: auto;
150
+ font-size: 0.9rem;
151
+ line-height: 1.5;
152
+ /* white-space: pre-wrap; */
153
+ word-break: break-word;
154
+ display: block;
155
+ background: transparent;
156
+ color: inherit;
157
+ position: relative;
158
+ transition:
159
+ max-height 0.3s ease,
160
+ opacity 0.3s ease;
161
+ opacity: 1;
162
+ }
163
+ .pre-content.collapsed {
164
+ max-height: 0;
165
+ opacity: 0;
166
+ }
167
+ /* .codeblock.fullscreen {
168
+ position: fixed;
169
+ top: 0;
170
+ left: 0;
171
+ width: 100%;
172
+ height: 100%;
173
+ border-radius: 0;
174
+ z-index: 9999;
175
+ } */
176
+ .pre-copy-btn {
177
+ justify-self: end;
178
+ transition:
179
+ background 0.2s ease,
180
+ color 0.2s ease;
181
+ }
182
+ .pre-copy-btn.btn-in-pre {
183
+ position: absolute;
184
+ top: 8px;
185
+ right: 8px;
186
+ /* padding: 4px 10px; */
187
+ /* font-size: 0.8rem; */
188
+ /* border-radius: 6px; */
189
+ /* background: rgba(255, 255, 255, 0.15); */
190
+ /* color: #000; */
191
+ /* border: 1px solid rgba(255, 255, 255, 0.3); */
192
+ /* backdrop-filter: blur(8px); */
193
+ /* transition: background 0.2s, transform 0.1s; */
194
+ z-index: 5;
195
+ }
196
+ /* .pre-copy-btn.btn-in-pre:hover {
197
+ background: rgba(255, 255, 255, 0.25);
198
+ transform: scale(1.05);
199
+ } */
200
+ .pre-top {
201
+ background: rgb(74, 74, 74);
202
+ display: flex;
203
+ width: 100%;
204
+ flex-direction: row;
205
+ justify-content: space-between;
206
+ align-items: center;
207
+ padding: 9px;
208
+ padding-left: 20px;
209
+ }
210
+ .pre-top-btns {
211
+ display: flex;
212
+ gap: 8px;
213
+ z-index: 10;
214
+ cursor: pointer !important;
215
+ }
216
+ .pre-top-btns span {
217
+ width: 15px;
218
+ height: 15px;
219
+ border-radius: 50%;
220
+ display: inline-block;
221
+ }
222
+ .pre-btn-red {
223
+ background: #ff5f57;
224
+ position: relative;
225
+ }
226
+ .pre-btn-orange {
227
+ background: #ffbd2e;
228
+ position: relative;
229
+ }
230
+ .pre-btn-green {
231
+ background: #28c940;
232
+ position: relative;
233
+ }
234
+ /* Iconen toevoegen */
235
+ .pre-btn-red::before {
236
+ content: '×';
237
+ position: absolute;
238
+ top: 50%;
239
+ left: 50%;
240
+ transform: translate(-50%, -50%);
241
+ font-size: 13px;
242
+ color: black;
243
+ font-weight: bold;
244
+ opacity: 0;
245
+ pointer-events: none;
246
+ }
247
+ .pre-btn-orange::before {
248
+ content: '–';
249
+ position: absolute;
250
+ top: 50%;
251
+ left: 50%;
252
+ transform: translate(-50%, -50%);
253
+ font-size: 13px;
254
+ color: black;
255
+ font-weight: bold;
256
+ opacity: 0;
257
+ pointer-events: none;
258
+ }
259
+ .pre-btn-green::before {
260
+ content: "⛶";
261
+ position: absolute;
262
+ top: 50%;
263
+ left: 50%;
264
+ transform: translate(-50%, -50%);
265
+ font-size: 10px;
266
+ color: black;
267
+ font-weight: bold;
268
+ opacity: 0;
269
+ pointer-events: none;
270
+ }
271
+ .pre-top-btns span:hover::before { opacity: 1; }
272
+ .pre-btn-red:hover {
273
+ filter: brightness(1.2);
274
+ }
275
+ .pre-btn-orange:hover {
276
+ filter: brightness(1.2);
277
+ }
278
+ .pre-btn-green:hover {
279
+ filter: brightness(1.2);
280
+ }
281
+ .codeblock .token.comment,
282
+ .codeblock .token.prolog,
283
+ .codeblock .token.doctype,
284
+ .codeblock .token.cdata {
285
+ color: #7f8c8d;
286
+ font-style: italic;
287
+ }
288
+ .codeblock .token.punctuation {
289
+ color: #2c3e50;
290
+ }
291
+ .codeblock .token.operator,
292
+ .codeblock .token.boolean,
293
+ .codeblock .token.symbol,
294
+ .codeblock .token.entity {
295
+ color: #2c3e50;
296
+ }
297
+ .codeblock .token.number {
298
+ color: #d35400;
299
+ }
300
+ .codeblock .token.property,
301
+ .codeblock .token.tag,
302
+ .codeblock .token.constant,
303
+ .codeblock .token.class-name,
304
+ .codeblock .token.function {
305
+ color: #2980b9;
306
+ font-weight: 500;
307
+ }
308
+ .codeblock .token.selector,
309
+ .codeblock .token.attr-name,
310
+ .codeblock .token.string,
311
+ .codeblock .token.char,
312
+ .codeblock .token.builtin,
313
+ .codeblock .token.inserted {
314
+ color: #27ae60;
315
+ }
316
+ .codeblock .token.keyword,
317
+ .codeblock .token.atrule,
318
+ .codeblock .token.attr-value,
319
+ .codeblock .token.deleted,
320
+ .codeblock .token.regex,
321
+ .codeblock .token.important {
322
+ color: #e67e22;
323
+ font-weight: 500;
324
+ }
325
+ .codeblock .token.entity {
326
+ cursor: help;
327
+ }
328
+ .codeblock .token.important,
329
+ .codeblock .token.bold {
330
+ font-weight: bold;
331
+ }
332
+ .codeblock .token.italic {
333
+ font-style: italic;
334
+ }
335
+ /* Optional: highlight background for selected text */
336
+ .codeblock ::selection {
337
+ background: rgba(46, 204, 113, 0.2);
338
+ }
339
+ .codeblock pre::-webkit-scrollbar {
340
+ height: 6px;
341
+ width: 6px;
342
+ }
343
+ .codeblock pre::-webkit-scrollbar-thumb {
344
+ background: rgba(255, 255, 255, 0.2);
345
+ border-radius: 3px;
346
+ }
347
+ .codeblock pre::-webkit-scrollbar-track {
348
+ background: transparent;
349
+ }
350
+ /* --- Dark mode via media query --- */
351
+ @media (prefers-color-scheme: dark) {
352
+
353
+ .codeblock {
354
+ background: #1e1e2f88; /* donkere blur achtergrond */
355
+ box-shadow: 0 4px 12px rgba(0,0,0,0.5);
356
+ }
357
+
358
+ .pre-content {
359
+ color: #f0f0f0;
360
+ }
361
+
362
+ .pre-top {
363
+ background: #2c2c3e;
364
+ }
365
+
366
+ /* Prism tokens dark */
367
+ .codeblock .token.comment,
368
+ .codeblock .token.prolog,
369
+ .codeblock .token.doctype,
370
+ .codeblock .token.cdata {
371
+ color: #95a5a6;
372
+ font-style: italic;
373
+ }
374
+
375
+ .codeblock .token.punctuation {
376
+ color: #ecf0f1;
377
+ }
378
+
379
+ .codeblock .token.operator,
380
+ .codeblock .token.boolean,
381
+ .codeblock .token.symbol,
382
+ .codeblock .token.entity {
383
+ color: #ecf0f1;
384
+ }
385
+
386
+ .codeblock .token.number {
387
+ color: #e67e22;
388
+ }
389
+
390
+ .codeblock .token.property,
391
+ .codeblock .token.tag,
392
+ .codeblock .token.constant,
393
+ .codeblock .token.class-name,
394
+ .codeblock .token.function {
395
+ color: #3498db;
396
+ font-weight: 500;
397
+ }
398
+
399
+ .codeblock .token.selector,
400
+ .codeblock .token.attr-name,
401
+ .codeblock .token.string,
402
+ .codeblock .token.char,
403
+ .codeblock .token.builtin,
404
+ .codeblock .token.inserted {
405
+ color: #2ecc71;
406
+ }
407
+
408
+ .codeblock .token.keyword,
409
+ .codeblock .token.atrule,
410
+ .codeblock .token.attr-value,
411
+ .codeblock .token.deleted,
412
+ .codeblock .token.regex,
413
+ .codeblock .token.important {
414
+ color: #f39c12;
415
+ font-weight: 500;
416
+ }
417
+
418
+ }
419
+ /* ======================
420
+ Basis dropdown container
421
+ ====================== */
422
+ .dropdown {
423
+ position: relative;
424
+ display: inline-block;
425
+ font-family:
426
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
427
+ sans-serif;
26
428
  cursor: pointer;
429
+ user-select: none;
27
430
  }
28
- .btn-glass:hover {
29
- background: rgba(255,255,255,0.3);
30
- box-shadow: 0 6px 24px 0 rgba(0,0,0,0.15);
431
+ /* ======================
432
+ Dropdown button
433
+ ====================== */
434
+ .dropdown-btn {
435
+ padding: 0.3rem 0.4rem;
436
+ border-radius: 12px;
437
+ border: 1px solid rgba(0, 0, 0, 0.1);
438
+ background: var(--color-bg, #fefefe);
439
+ color: var(--color-text-dark, #000);
440
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
441
+ transition: all 0.2s ease;
442
+ display: flex;
443
+ align-items: center;
444
+ justify-content: space-between;
445
+ white-space: nowrap;
446
+ overflow: hidden;
447
+ text-overflow: ellipsis;
448
+ }
449
+ .dropdown-btn:hover {
450
+ background: var(--color-bg-hover, rgba(0, 0, 0, 0.05));
451
+ }
452
+ .dropdown-btn:after {
453
+ content: "▾";
454
+ margin-left: 0.5rem;
455
+ font-size: 0.75rem;
456
+ transition: transform 0.2s ease;
457
+ }
458
+ .dropdown.open .dropdown-btn:after {
459
+ transform: rotate(180deg);
460
+ }
461
+ .dropdown-btn:focus {
462
+ outline: 2px solid var(--color-primary, #0071e3);
463
+ outline-offset: 2px;
464
+ }
465
+ /* ======================
466
+ Dropdown content
467
+ ====================== */
468
+ .dropdown-content {
469
+ position: absolute;
470
+ top: 100%;
471
+ left: 0;
472
+ width: 100%;
473
+ min-width: 10rem;
474
+ border-radius: 12px;
475
+ margin-top: 0.5rem;
476
+ background: rgba(255, 255, 255, 0.8);
477
+ backdrop-filter: blur(12px);
478
+ -webkit-backdrop-filter: blur(12px);
479
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15);
480
+ max-height: 15rem;
481
+ overflow-y: auto;
482
+ scrollbar-width: thin;
483
+ scrollbar-color: rgba(0,0,0,0.2) transparent;
484
+ opacity: 0;
485
+ transform: translateY(-10px) scale(0.95);
486
+ pointer-events: none;
487
+ transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
488
+ z-index: 1000;
489
+ }
490
+ .dropdown-content::-webkit-scrollbar {
491
+ width: 6px;
492
+ }
493
+ .dropdown-content::-webkit-scrollbar-thumb {
494
+ background: rgba(0,0,0,0.2);
495
+ border-radius: 3px;
496
+ }
497
+ .dropdown-content::-webkit-scrollbar-track {
498
+ background: transparent;
499
+ }
500
+ /* Show dropdown */
501
+ .dropdown.open .dropdown-content {
502
+ opacity: 1;
503
+ transform: translateY(0) scale(1);
504
+ pointer-events: auto;
505
+ }
506
+ /* ======================
507
+ Dropdown items
508
+ ====================== */
509
+ .dropdown-item {
510
+ padding: 0.3rem 0.4rem;
511
+ color: var(--color-text-dark, #000);
512
+ transition: background 0.2s, color 0.2s;
513
+ cursor: pointer;
514
+ }
515
+ .dropdown-item:hover {
516
+ background: rgba(0, 0, 0, 0.05);
517
+ }
518
+ .dropdown-item.active {
519
+ font-weight: 600;
520
+ background: rgba(0, 0, 0, 0.1);
521
+ }
522
+ .dropdown-item:focus {
523
+ outline: 2px solid var(--color-primary, #0071e3);
524
+ outline-offset: 2px;
525
+ }
526
+ /* Placeholder or disabled items */
527
+ .dropdown-item[aria-disabled="true"],
528
+ .dropdown-item.placeholder {
529
+ color: rgba(0, 0, 0, 0.4);
530
+ cursor: default;
531
+ pointer-events: none;
532
+ }
533
+ /* ======================
534
+ Hidden input styling
535
+ ====================== */
536
+ .dropdown input[type="hidden"] {
537
+ display: none;
538
+ }
539
+ /* ======================
540
+ Dividers
541
+ ====================== */
542
+ .dropdown-divider {
543
+ height: 1px;
544
+ margin: 0.25rem 0;
545
+ background: rgba(0, 0, 0, 0.1);
546
+ }
547
+ /* ======================
548
+ Option group labels
549
+ ====================== */
550
+ .dropdown-label {
551
+ padding: 0.3rem 0.4rem;
552
+ font-weight: 600;
553
+ color: rgba(0, 0, 0, 0.6);
554
+ cursor: default;
555
+ }
556
+ /* ======================
557
+ Dark mode support
558
+ ====================== */
559
+ @media (prefers-color-scheme: dark) {
560
+ .dropdown-btn {
561
+ background: #1c1c1e;
562
+ color: #f0f0f0;
563
+ border: 1px solid rgba(255, 255, 255, 0.2);
564
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
565
+ }
566
+
567
+ .dropdown-btn:hover {
568
+ background: rgba(255, 255, 255, 0.05);
569
+ }
570
+
571
+ .dropdown-content {
572
+ background: rgba(28, 28, 30, 0.8);
573
+ backdrop-filter: blur(12px);
574
+ -webkit-backdrop-filter: blur(12px);
575
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.6);
576
+ }
577
+
578
+ .dropdown-item {
579
+ color: #f0f0f0;
580
+ }
581
+
582
+ .dropdown-item:hover {
583
+ background: rgba(255, 255, 255, 0.08);
584
+ }
585
+
586
+ .dropdown-item.active {
587
+ background: rgba(255, 255, 255, 0.12);
588
+ }
589
+
590
+ .dropdown-divider {
591
+ background: rgba(255, 255, 255, 0.2);
592
+ }
593
+
594
+ .dropdown-item[aria-disabled="true"],
595
+ .dropdown-item.placeholder {
596
+ color: rgba(255, 255, 255, 0.4);
597
+ }
598
+
599
+ .dropdown-label {
600
+ color: rgba(255, 255, 255, 0.6);
601
+ }
602
+
603
+ .dropdown-content::-webkit-scrollbar-thumb {
604
+ background: rgba(255,255,255,0.2);
605
+ }
31
606
  }