Thread viewer for Bluesky
at 2.0 113 lines 2.2 kB view raw
1<script lang="ts"> 2 type Props = { 3 children: any; 4 id?: string; 5 class?: string; 6 onClose?: () => void; 7 } 8 9 let { children, onClose = undefined, id = undefined, ...props }: Props = $props(); 10 11 function onclick(e: Event) { 12 // close the dialog (if it's closable) on click on the overlay, but not on anything inside 13 if (e.target === e.currentTarget) { 14 onClose?.(); 15 } 16 } 17</script> 18 19<div {id} class="dialog {props.class}" {onclick}> 20 {@render children()} 21</div> 22 23<style> 24 .dialog { 25 position: fixed; 26 top: 0; 27 bottom: 0; 28 left: 0; 29 right: 0; 30 display: flex; 31 align-items: center; 32 justify-content: center; 33 padding-bottom: 5%; 34 z-index: 10; 35 background-color: rgba(240, 240, 240, 0.4); 36 } 37 38 .dialog:global(.expanded) { 39 padding-bottom: 0; 40 } 41 42 .dialog ~ :global(main) { 43 filter: blur(8px); 44 } 45 46 .dialog :global { 47 form { 48 position: relative; 49 border: 2px solid hsl(210, 100%, 85%); 50 background-color: hsl(210, 100%, 98%); 51 border-radius: 10px; 52 padding: 15px 25px; 53 } 54 55 .close { 56 position: absolute; 57 top: 5px; 58 right: 5px; 59 color: hsl(210, 100%, 75%); 60 opacity: 0.6; 61 } 62 63 .close:hover { 64 color: hsl(210, 100%, 65%); 65 opacity: 1.0; 66 } 67 68 p { 69 text-align: center; 70 line-height: 125%; 71 } 72 73 h2 { 74 font-size: 13pt; 75 font-weight: 600; 76 text-align: center; 77 margin-bottom: 25px; 78 padding-right: 10px; 79 } 80 81 input[type="text"], input[type="password"] { 82 width: 200px; 83 font-size: 11pt; 84 border: 1px solid #d6d6d6; 85 border-radius: 4px; 86 padding: 5px 6px; 87 margin: 0px 15px; 88 } 89 90 p.submit { 91 margin-top: 25px; 92 } 93 94 input[type="submit"] { 95 width: 150px; 96 font-size: 11pt; 97 border: 1px solid hsl(210, 90%, 85%); 98 background-color: hsl(210, 100%, 92%); 99 border-radius: 4px; 100 padding: 5px 6px; 101 } 102 103 input[type="submit"]:hover { 104 background-color: hsl(210, 100%, 90%); 105 border: 1px solid hsl(210, 90%, 82%); 106 } 107 108 input[type="submit"]:active { 109 background-color: hsl(210, 100%, 87%); 110 border: 1px solid hsl(210, 90%, 80%); 111 } 112 } 113</style>