| |
|
|
| |
|
|
| <div class="sidenote-container"> |
| <aside class="sidenote"> |
| <slot /> |
| </aside> |
| </div> |
|
|
| <script> |
| document.addEventListener("DOMContentLoaded", () => { |
| const containers = document.querySelectorAll(".sidenote-container"); |
|
|
| containers.forEach((container) => { |
| // Find the previous element (sibling just before) |
| const previousElement = container.previousElementSibling as HTMLElement; |
|
|
| if (previousElement && previousElement.parentNode) { |
| // Create a wrapper div that will contain both the previous element and the sidenote |
| const wrapper = document.createElement("div"); |
| wrapper.className = "sidenote-wrapper"; |
|
|
| // Insert the wrapper before the previous element |
| previousElement.parentNode.insertBefore(wrapper, previousElement); |
|
|
| // Move both the previous element and the sidenote container into the wrapper |
| wrapper.appendChild(previousElement); |
| wrapper.appendChild(container); |
|
|
| // Style the wrapper to create the layout |
| wrapper.style.position = "relative"; |
| wrapper.style.display = "block"; |
|
|
| // Style the sidenote container so it positions correctly |
| const sidenoteContainer = container as HTMLElement; |
| sidenoteContainer.style.position = "absolute"; |
| sidenoteContainer.style.top = "0"; |
| sidenoteContainer.style.right = "-292px"; // 260px width + 32px gap |
| sidenoteContainer.style.width = "260px"; |
|
|
| // Display the container with a fade-in |
| sidenoteContainer.style.display = "block"; |
| sidenoteContainer.style.opacity = "0"; |
|
|
| // Fade-in with transition |
| setTimeout(() => { |
| sidenoteContainer.style.opacity = "1"; |
| }, 10); |
| } |
| }); |
| }); |
| </script> |
|
|
| <style is:global> |
| .sidenote-wrapper { |
| |
| position: relative; |
| display: block; |
| } |
|
|
| .sidenote-container { |
| |
| display: none; |
| margin: 0; |
| |
| transition: opacity 0.3s ease-in-out; |
| } |
|
|
| .sidenote { |
| border-radius: 8px; |
| padding: 0 30px; |
| font-size: 0.9rem; |
| color: var( |
| margin: 0; |
| } |
|
|
| @media ( |
| .sidenote-wrapper { |
| |
| position: static !important; |
| } |
|
|
| .sidenote-container { |
| position: static !important; |
| width: auto !important; |
| right: auto !important; |
| top: auto !important; |
| margin-top: 8px; |
| |
| display: block !important; |
| opacity: 1 !important; |
| } |
|
|
| .sidenote { |
| padding: 0; |
| } |
| } |
| </style> |
|
|