@kerkhoff-ict/solora 2.1.9 → 2.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.
- package/dist/index.css +33 -99
- package/dist/index.js +63 -73
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -429,8 +429,8 @@
|
|
|
429
429
|
}
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
/* src/components/dropdown.css */
|
|
433
|
-
.
|
|
432
|
+
/* src/components/dropdown-style.css */
|
|
433
|
+
.sol-container {
|
|
434
434
|
position: relative;
|
|
435
435
|
display: inline-block;
|
|
436
436
|
font-family:
|
|
@@ -438,147 +438,81 @@
|
|
|
438
438
|
BlinkMacSystemFont,
|
|
439
439
|
"Segoe UI",
|
|
440
440
|
Roboto,
|
|
441
|
-
Helvetica,
|
|
442
|
-
Arial,
|
|
443
441
|
sans-serif;
|
|
444
442
|
cursor: pointer;
|
|
445
443
|
user-select: none;
|
|
446
444
|
}
|
|
447
|
-
.
|
|
448
|
-
padding: 0.
|
|
445
|
+
.sol-btn {
|
|
446
|
+
padding: 0.5rem 0.8rem;
|
|
449
447
|
border-radius: 12px;
|
|
450
448
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
451
449
|
background: var(--color-bg, #fefefe);
|
|
452
450
|
color: var(--color-text-dark, #000);
|
|
453
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.
|
|
451
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
454
452
|
transition: all 0.2s ease;
|
|
455
453
|
display: flex;
|
|
456
454
|
align-items: center;
|
|
457
455
|
justify-content: space-between;
|
|
458
|
-
|
|
459
|
-
overflow: hidden;
|
|
460
|
-
text-overflow: ellipsis;
|
|
456
|
+
gap: 10px;
|
|
461
457
|
}
|
|
462
|
-
.
|
|
463
|
-
background:
|
|
458
|
+
.sol-btn:hover {
|
|
459
|
+
background: rgba(0, 0, 0, 0.03);
|
|
464
460
|
}
|
|
465
|
-
.
|
|
461
|
+
.sol-btn::after {
|
|
466
462
|
content: "\25be";
|
|
467
|
-
|
|
468
|
-
font-size: 0.75rem;
|
|
463
|
+
font-size: 0.8rem;
|
|
469
464
|
transition: transform 0.2s ease;
|
|
470
465
|
}
|
|
471
|
-
.
|
|
466
|
+
.sol-container.open .sol-btn::after {
|
|
472
467
|
transform: rotate(180deg);
|
|
473
468
|
}
|
|
474
|
-
.
|
|
469
|
+
.sol-menu {
|
|
475
470
|
position: absolute;
|
|
476
471
|
top: 100%;
|
|
477
472
|
left: 0;
|
|
478
|
-
width: 100%;
|
|
479
|
-
min-width: 10rem;
|
|
480
|
-
border-radius: 12px;
|
|
473
|
+
min-width: 100%;
|
|
481
474
|
margin-top: 0.5rem;
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
background: transparent;
|
|
475
|
+
border-radius: 12px;
|
|
476
|
+
background: rgba(255, 255, 255, 0.7);
|
|
485
477
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
486
478
|
backdrop-filter: blur(12px);
|
|
487
479
|
-webkit-backdrop-filter: blur(12px);
|
|
488
480
|
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
|
|
489
|
-
|
|
490
|
-
scrollbar-width: thin;
|
|
491
|
-
scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
|
|
481
|
+
z-index: 1000;
|
|
492
482
|
opacity: 0;
|
|
493
483
|
transform: translateY(-10px) scale(0.95);
|
|
494
484
|
pointer-events: none;
|
|
495
485
|
transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
496
|
-
|
|
497
|
-
}
|
|
498
|
-
.dropdown-content::-webkit-scrollbar {
|
|
499
|
-
width: 6px;
|
|
500
|
-
}
|
|
501
|
-
.dropdown-content::-webkit-scrollbar-thumb {
|
|
502
|
-
background: rgba(0, 0, 0, 0.2);
|
|
503
|
-
border-radius: 3px;
|
|
504
|
-
}
|
|
505
|
-
.dropdown-content::-webkit-scrollbar-track {
|
|
506
|
-
background: transparent;
|
|
486
|
+
overflow: hidden;
|
|
507
487
|
}
|
|
508
|
-
.
|
|
488
|
+
.sol-container.open .sol-menu {
|
|
509
489
|
opacity: 1;
|
|
510
490
|
transform: translateY(0) scale(1);
|
|
511
491
|
pointer-events: auto;
|
|
512
492
|
}
|
|
513
|
-
.
|
|
514
|
-
padding: 0.
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
cursor: pointer;
|
|
493
|
+
.sol-item {
|
|
494
|
+
padding: 0.6rem 0.8rem;
|
|
495
|
+
transition: background 0.2s;
|
|
496
|
+
color: #000;
|
|
518
497
|
}
|
|
519
|
-
.
|
|
498
|
+
.sol-item:hover {
|
|
520
499
|
background: rgba(0, 0, 0, 0.05);
|
|
521
500
|
}
|
|
522
|
-
.
|
|
523
|
-
|
|
524
|
-
background: rgba(0, 0, 0, 0.1);
|
|
525
|
-
}
|
|
526
|
-
.dropdown-item[aria-disabled=true],
|
|
527
|
-
.dropdown-item.placeholder {
|
|
528
|
-
color: rgba(0, 0, 0, 0.4);
|
|
529
|
-
cursor: default;
|
|
530
|
-
pointer-events: none;
|
|
531
|
-
}
|
|
532
|
-
.dropdown input[type=hidden] {
|
|
533
|
-
display: none;
|
|
534
|
-
}
|
|
535
|
-
.dropdown-divider {
|
|
536
|
-
height: 1px;
|
|
537
|
-
margin: 0.25rem 0;
|
|
538
|
-
background: rgba(0, 0, 0, 0.1);
|
|
539
|
-
}
|
|
540
|
-
.dropdown-label {
|
|
541
|
-
padding: 0.3rem 0.4rem;
|
|
501
|
+
.sol-item.active {
|
|
502
|
+
background: rgba(0, 0, 0, 0.08);
|
|
542
503
|
font-weight: 600;
|
|
543
|
-
color: rgba(0, 0, 0, 0.6);
|
|
544
|
-
cursor: default;
|
|
545
504
|
}
|
|
546
|
-
:root.dark .
|
|
505
|
+
:root.dark .sol-btn {
|
|
547
506
|
background: #1c1c1e;
|
|
548
|
-
color: #
|
|
549
|
-
border:
|
|
550
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
|
|
551
|
-
}
|
|
552
|
-
:root.dark .dropdown-btn:hover {
|
|
553
|
-
background: rgba(255, 255, 255, 0.05);
|
|
554
|
-
}
|
|
555
|
-
:root.dark .dropdown-content {
|
|
556
|
-
background: transparent;
|
|
557
|
-
backdrop-filter: blur(12px);
|
|
558
|
-
-webkit-backdrop-filter: blur(12px);
|
|
559
|
-
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.6);
|
|
560
|
-
}
|
|
561
|
-
:root.dark .dropdown-item {
|
|
562
|
-
color: #f0f0f0;
|
|
563
|
-
}
|
|
564
|
-
:root.dark .dropdown-item:hover {
|
|
565
|
-
background: rgba(255, 255, 255, 0.08);
|
|
566
|
-
}
|
|
567
|
-
:root.dark .dropdown-item.active {
|
|
568
|
-
background: rgba(255, 255, 255, 0.12);
|
|
569
|
-
}
|
|
570
|
-
:root.dark .dropdown-divider {
|
|
571
|
-
background: rgba(255, 255, 255, 0.2);
|
|
572
|
-
}
|
|
573
|
-
:root.dark .dropdown-item[aria-disabled=true],
|
|
574
|
-
:root.dark .dropdown-item.placeholder {
|
|
575
|
-
color: rgba(255, 255, 255, 0.4);
|
|
507
|
+
color: #fff;
|
|
508
|
+
border-color: rgba(255, 255, 255, 0.1);
|
|
576
509
|
}
|
|
577
|
-
:root.dark .
|
|
578
|
-
|
|
510
|
+
:root.dark .sol-menu {
|
|
511
|
+
background: rgba(28, 28, 30, 0.7);
|
|
512
|
+
color: #fff;
|
|
579
513
|
}
|
|
580
|
-
:root.dark .
|
|
581
|
-
|
|
514
|
+
:root.dark .sol-item {
|
|
515
|
+
color: #fff;
|
|
582
516
|
}
|
|
583
517
|
|
|
584
518
|
/* src/components/input.css */
|
package/dist/index.js
CHANGED
|
@@ -1847,77 +1847,6 @@ function initMaximizeButton(block, maximizeBtn) {
|
|
|
1847
1847
|
});
|
|
1848
1848
|
}
|
|
1849
1849
|
|
|
1850
|
-
// src/components/dropdown.js
|
|
1851
|
-
function initDropdowns() {
|
|
1852
|
-
if (typeof window === "undefined") return;
|
|
1853
|
-
document.querySelectorAll(".dropdown").forEach((drop) => {
|
|
1854
|
-
if (drop.dataset.initialized) return;
|
|
1855
|
-
drop.dataset.initialized = "true";
|
|
1856
|
-
const btn = drop.querySelector(".dropdown-btn");
|
|
1857
|
-
const content = drop.querySelector(".dropdown-content");
|
|
1858
|
-
if (!btn || !content) return;
|
|
1859
|
-
let hiddenInput = drop.querySelector('input[type="hidden"]');
|
|
1860
|
-
if (!hiddenInput) {
|
|
1861
|
-
hiddenInput = document.createElement("input");
|
|
1862
|
-
hiddenInput.type = "hidden";
|
|
1863
|
-
hiddenInput.name = drop.dataset.name || "dropdown";
|
|
1864
|
-
drop.appendChild(hiddenInput);
|
|
1865
|
-
}
|
|
1866
|
-
const getItems = () => Array.from(content.querySelectorAll('.dropdown-item:not([aria-disabled="true"])'));
|
|
1867
|
-
const setValue = (item) => {
|
|
1868
|
-
if (item.getAttribute("aria-disabled") === "true") return;
|
|
1869
|
-
btn.innerHTML = item.innerHTML;
|
|
1870
|
-
content.querySelectorAll(".dropdown-item").forEach((i) => i.classList.remove("active"));
|
|
1871
|
-
item.classList.add("active");
|
|
1872
|
-
hiddenInput.value = item.dataset.value ?? item.textContent.trim();
|
|
1873
|
-
drop.dispatchEvent(new CustomEvent("change", { detail: hiddenInput.value }));
|
|
1874
|
-
};
|
|
1875
|
-
const initialItem = content.querySelector(".dropdown-item.active") || content.querySelector('.dropdown-item:not([aria-disabled="true"])');
|
|
1876
|
-
if (initialItem) setValue(initialItem);
|
|
1877
|
-
const toggle = () => drop.classList.toggle("open");
|
|
1878
|
-
const close = () => drop.classList.remove("open");
|
|
1879
|
-
btn.addEventListener("click", (e) => {
|
|
1880
|
-
e.stopPropagation();
|
|
1881
|
-
toggle();
|
|
1882
|
-
});
|
|
1883
|
-
document.addEventListener("click", (e) => {
|
|
1884
|
-
if (!drop.contains(e.target)) close();
|
|
1885
|
-
});
|
|
1886
|
-
btn.addEventListener("keydown", (e) => {
|
|
1887
|
-
if (!["ArrowDown", "ArrowUp", "Enter", "Escape"].includes(e.key)) return;
|
|
1888
|
-
const items = getItems();
|
|
1889
|
-
let currentIndex = items.findIndex((i) => i.classList.contains("active"));
|
|
1890
|
-
e.preventDefault();
|
|
1891
|
-
drop.classList.add("open");
|
|
1892
|
-
if (e.key === "ArrowDown") {
|
|
1893
|
-
currentIndex = (currentIndex + 1) % items.length;
|
|
1894
|
-
} else if (e.key === "ArrowUp") {
|
|
1895
|
-
currentIndex = (currentIndex - 1 + items.length) % items.length;
|
|
1896
|
-
} else if (e.key === "Enter") {
|
|
1897
|
-
if (currentIndex >= 0) setValue(items[currentIndex]);
|
|
1898
|
-
close();
|
|
1899
|
-
return;
|
|
1900
|
-
} else if (e.key === "Escape") {
|
|
1901
|
-
close();
|
|
1902
|
-
return;
|
|
1903
|
-
}
|
|
1904
|
-
items.forEach((i) => i.classList.remove("active"));
|
|
1905
|
-
items[currentIndex].classList.add("active");
|
|
1906
|
-
items[currentIndex].scrollIntoView({ block: "nearest" });
|
|
1907
|
-
});
|
|
1908
|
-
content.addEventListener("click", (e) => {
|
|
1909
|
-
const item = e.target.closest(".dropdown-item");
|
|
1910
|
-
if (item) {
|
|
1911
|
-
setValue(item);
|
|
1912
|
-
close();
|
|
1913
|
-
}
|
|
1914
|
-
});
|
|
1915
|
-
btn.setAttribute("tabindex", "0");
|
|
1916
|
-
btn.setAttribute("role", "combobox");
|
|
1917
|
-
btn.setAttribute("aria-haspopup", "listbox");
|
|
1918
|
-
});
|
|
1919
|
-
}
|
|
1920
|
-
|
|
1921
1850
|
// src/components/contextMenu.js
|
|
1922
1851
|
function initContextMenu() {
|
|
1923
1852
|
let menu = document.querySelector(".sol-context-menu");
|
|
@@ -2268,19 +2197,80 @@ function initThemeToggle(elementSelector = ".sol-theme-toggle") {
|
|
|
2268
2197
|
});
|
|
2269
2198
|
}
|
|
2270
2199
|
|
|
2200
|
+
// src/components/sol-core.js
|
|
2201
|
+
function initSolCore() {
|
|
2202
|
+
const elements = document.querySelectorAll('[class*="sol-dropdown-w-["]');
|
|
2203
|
+
elements.forEach((el) => {
|
|
2204
|
+
const classList = Array.from(el.classList);
|
|
2205
|
+
const widthClass = classList.find((c) => c.startsWith("sol-dropdown-w-["));
|
|
2206
|
+
if (widthClass) {
|
|
2207
|
+
const widthValue = widthClass.match(/\[(.*?)\]/)[1];
|
|
2208
|
+
el.style.width = widthValue;
|
|
2209
|
+
const btn = el.querySelector(".sol-btn");
|
|
2210
|
+
if (btn) btn.style.width = "100%";
|
|
2211
|
+
}
|
|
2212
|
+
});
|
|
2213
|
+
}
|
|
2214
|
+
|
|
2215
|
+
// src/components/sol-select.js
|
|
2216
|
+
function initSolSelect() {
|
|
2217
|
+
document.querySelectorAll(".sol-select").forEach((select) => {
|
|
2218
|
+
const btn = select.querySelector(".sol-btn");
|
|
2219
|
+
const items = select.querySelectorAll(".sol-item");
|
|
2220
|
+
const input = select.querySelector('input[type="hidden"]');
|
|
2221
|
+
btn.addEventListener("click", (e) => {
|
|
2222
|
+
e.stopPropagation();
|
|
2223
|
+
select.classList.toggle("open");
|
|
2224
|
+
});
|
|
2225
|
+
items.forEach((item) => {
|
|
2226
|
+
item.addEventListener("click", () => {
|
|
2227
|
+
const val = item.dataset.value || item.innerText;
|
|
2228
|
+
btn.innerText = item.innerText;
|
|
2229
|
+
if (input) input.value = val;
|
|
2230
|
+
items.forEach((i) => i.classList.remove("active"));
|
|
2231
|
+
item.classList.add("active");
|
|
2232
|
+
select.classList.remove("open");
|
|
2233
|
+
});
|
|
2234
|
+
});
|
|
2235
|
+
});
|
|
2236
|
+
}
|
|
2237
|
+
|
|
2238
|
+
// src/components/sol-dropdown.js
|
|
2239
|
+
function initSolDropdown() {
|
|
2240
|
+
document.querySelectorAll(".sol-dropdown").forEach((dropdown) => {
|
|
2241
|
+
const btn = dropdown.querySelector(".sol-btn");
|
|
2242
|
+
btn.addEventListener("click", (e) => {
|
|
2243
|
+
e.stopPropagation();
|
|
2244
|
+
dropdown.classList.toggle("open");
|
|
2245
|
+
});
|
|
2246
|
+
dropdown.querySelectorAll(".sol-item").forEach((item) => {
|
|
2247
|
+
item.addEventListener("click", () => {
|
|
2248
|
+
dropdown.classList.remove("open");
|
|
2249
|
+
});
|
|
2250
|
+
});
|
|
2251
|
+
});
|
|
2252
|
+
document.addEventListener("click", () => {
|
|
2253
|
+
document.querySelectorAll(".sol-container").forEach((el) => el.classList.remove("open"));
|
|
2254
|
+
});
|
|
2255
|
+
}
|
|
2256
|
+
|
|
2271
2257
|
// src/index.js
|
|
2272
2258
|
if (typeof window !== "undefined") {
|
|
2273
2259
|
document.addEventListener("DOMContentLoaded", () => {
|
|
2260
|
+
initSolCore();
|
|
2274
2261
|
initCodeblocks();
|
|
2275
|
-
initDropdowns();
|
|
2276
2262
|
initContextMenu();
|
|
2277
2263
|
initThemeToggle();
|
|
2264
|
+
initSolSelect();
|
|
2265
|
+
initSolDropdown();
|
|
2278
2266
|
});
|
|
2279
2267
|
}
|
|
2280
2268
|
export {
|
|
2281
2269
|
initCodeblocks,
|
|
2282
2270
|
initContextMenu,
|
|
2283
|
-
|
|
2271
|
+
initSolCore,
|
|
2272
|
+
initSolDropdown,
|
|
2273
|
+
initSolSelect,
|
|
2284
2274
|
initThemeToggle
|
|
2285
2275
|
};
|
|
2286
2276
|
/*! Bundled license information:
|