mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
Refine modal primitives for auth and zap flows
This commit is contained in:
1 parent
bd95638ffb
commit
a4e75392af
10 files changed
+144
-70
No files matched your search
@@ -99,7 +99,8 @@
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
id="acceptDisclaimer"
|
||||
class="w-full rounded-md bg-info px-4 py-2 text-text transition-colors duration-200 hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info focus:ring-offset-2 focus:ring-offset-surface"
|
||||
class="btn w-full"
|
||||
type="button"
|
||||
>
|
||||
I Understand
|
||||
</button>
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
<!-- Application Form button -->
|
||||
<button
|
||||
id="openApplicationModal"
|
||||
class="w-full rounded-md bg-info px-4 py-2 text-text hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info focus:ring-offset-2"
|
||||
class="btn w-full"
|
||||
type="button"
|
||||
>
|
||||
Application Form
|
||||
</button>
|
||||
@@ -42,14 +43,16 @@
|
||||
<!-- Existing login buttons -->
|
||||
<button
|
||||
id="loginNIP07"
|
||||
class="w-full rounded-md bg-info px-4 py-2 text-text hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info focus:ring-offset-2"
|
||||
class="btn w-full"
|
||||
type="button"
|
||||
>
|
||||
Login with Extension (NIP-07)
|
||||
</button>
|
||||
<button
|
||||
id="loginNSEC"
|
||||
class="w-full cursor-not-allowed rounded-md bg-border/40 px-4 py-2 text-muted"
|
||||
class="btn-ghost w-full"
|
||||
disabled
|
||||
type="button"
|
||||
>
|
||||
Login with NSEC (Coming Soon)
|
||||
</button>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="upload-mode-toggle flex-1 rounded-full px-4 py-2 font-medium text-muted-strong transition-colors hover:bg-panel/70 focus:outline-none focus-visible:ring-2 focus-visible:ring-info focus-visible:ring-offset-2 focus-visible:ring-offset-surface"
|
||||
class="upload-mode-toggle btn-ghost flex-1"
|
||||
data-upload-mode="custom"
|
||||
aria-pressed="true"
|
||||
>
|
||||
@@ -58,7 +58,7 @@
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="upload-mode-toggle flex-1 rounded-full px-4 py-2 font-medium text-muted-strong transition-colors hover:bg-panel/70 focus:outline-none focus-visible:ring-2 focus-visible:ring-info focus-visible:ring-offset-2 focus-visible:ring-offset-surface"
|
||||
class="upload-mode-toggle btn-ghost flex-1"
|
||||
data-upload-mode="cloudflare"
|
||||
aria-pressed="false"
|
||||
>
|
||||
@@ -263,13 +263,13 @@
|
||||
<input
|
||||
id="uploadWs"
|
||||
type="url"
|
||||
class="w-full rounded p-2"
|
||||
class="input text-xs"
|
||||
placeholder="Web seed (ws=) e.g., https://cdn.example.com/video.mp4"
|
||||
/>
|
||||
<input
|
||||
id="uploadXs"
|
||||
type="url"
|
||||
class="w-full rounded p-2"
|
||||
class="input text-xs"
|
||||
placeholder=".torrent URL (xs=) e.g., https://cdn.example.com/video.torrent"
|
||||
/>
|
||||
</div>
|
||||
@@ -345,7 +345,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="imeta"
|
||||
aria-describedby="nip71ImetaHelp"
|
||||
>
|
||||
@@ -437,7 +437,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="image"
|
||||
>
|
||||
Add image URL
|
||||
@@ -460,7 +460,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove image URL"
|
||||
>
|
||||
@@ -479,7 +479,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="fallback"
|
||||
>
|
||||
Add fallback
|
||||
@@ -502,7 +502,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove fallback URL"
|
||||
>
|
||||
@@ -521,7 +521,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="service"
|
||||
>
|
||||
Add service hint
|
||||
@@ -544,7 +544,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove service hint"
|
||||
>
|
||||
@@ -556,7 +556,7 @@
|
||||
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-critical/60 px-3 py-1 text-xs font-semibold text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-3 py-1 text-xs" data-variant="critical"
|
||||
data-nip71-remove="imeta"
|
||||
>
|
||||
Remove variant
|
||||
@@ -579,7 +579,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="text-track"
|
||||
aria-describedby="nip71TextTracksHelp"
|
||||
>
|
||||
@@ -649,7 +649,7 @@
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-critical/60 px-3 py-1 text-xs font-semibold text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-3 py-1 text-xs" data-variant="critical"
|
||||
data-nip71-remove="text-track"
|
||||
>
|
||||
Remove track
|
||||
@@ -672,7 +672,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="segment"
|
||||
aria-describedby="nip71SegmentsHelp"
|
||||
>
|
||||
@@ -751,7 +751,7 @@
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-critical/60 px-3 py-1 text-xs font-semibold text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-3 py-1 text-xs" data-variant="critical"
|
||||
data-nip71-remove="segment"
|
||||
>
|
||||
Remove segment
|
||||
@@ -774,7 +774,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="t"
|
||||
>
|
||||
Add hashtag
|
||||
@@ -799,7 +799,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-critical/60 px-2 py-1 text-[11px] text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-2 py-1 text-[11px]" data-variant="critical"
|
||||
data-nip71-remove="t"
|
||||
aria-label="Remove hashtag"
|
||||
>
|
||||
@@ -823,7 +823,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="p"
|
||||
>
|
||||
Add participant
|
||||
@@ -875,7 +875,7 @@
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-critical/60 px-3 py-1 text-xs font-semibold text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-3 py-1 text-xs" data-variant="critical"
|
||||
data-nip71-remove="p"
|
||||
>
|
||||
Remove participant
|
||||
@@ -898,7 +898,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="r"
|
||||
>
|
||||
Add reference
|
||||
@@ -923,7 +923,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-critical/60 px-2 py-1 text-[11px] text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-2 py-1 text-[11px]" data-variant="critical"
|
||||
data-nip71-remove="r"
|
||||
aria-label="Remove reference"
|
||||
>
|
||||
@@ -1029,7 +1029,7 @@
|
||||
<input
|
||||
type="checkbox"
|
||||
id="uploadIsPrivate"
|
||||
class="form-checkbox h-5 w-5 text-info"
|
||||
class="checkbox"
|
||||
/>
|
||||
<span class="text-sm font-medium text-text"
|
||||
>Private Listing (Hide from shared grids)</span
|
||||
@@ -1038,7 +1038,7 @@
|
||||
-->
|
||||
<button
|
||||
type="submit"
|
||||
class="rounded-md bg-info px-4 py-2 text-text hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info focus:ring-offset-2"
|
||||
class="btn"
|
||||
>
|
||||
Publish
|
||||
</button>
|
||||
@@ -1118,7 +1118,7 @@
|
||||
<button
|
||||
type="button"
|
||||
id="cloudflareAdvancedToggle"
|
||||
class="flex items-center gap-2 text-sm font-medium text-muted-strong transition-colors hover:text-text focus:outline-none focus:ring-2 focus:ring-info focus:ring-offset-2 focus:ring-offset-surface"
|
||||
class="btn-ghost justify-start gap-2 text-sm text-muted-strong"
|
||||
aria-expanded="false"
|
||||
aria-controls="cloudflareAdvancedFields"
|
||||
>
|
||||
@@ -1212,14 +1212,14 @@
|
||||
<div class="flex flex-wrap items-center gap-3">
|
||||
<button
|
||||
type="submit"
|
||||
class="rounded-md bg-info px-4 py-2 text-sm font-semibold text-text transition hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info"
|
||||
class="btn text-sm"
|
||||
>
|
||||
Save settings
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
id="cloudflareClearSettings"
|
||||
class="rounded-md border border-border px-4 py-2 text-sm font-semibold text-text transition hover:border-border hover:text-text focus:outline-none focus:ring-2 focus:ring-info"
|
||||
class="btn-ghost text-sm"
|
||||
>
|
||||
Clear
|
||||
</button>
|
||||
@@ -1499,7 +1499,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="imeta"
|
||||
aria-describedby="cloudflareNip71ImetaHelp"
|
||||
>
|
||||
@@ -1602,7 +1602,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="image"
|
||||
>
|
||||
Add image URL
|
||||
@@ -1625,7 +1625,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove image URL"
|
||||
>
|
||||
@@ -1644,7 +1644,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="fallback"
|
||||
>
|
||||
Add fallback
|
||||
@@ -1667,7 +1667,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove fallback URL"
|
||||
>
|
||||
@@ -1686,7 +1686,7 @@
|
||||
</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px]"
|
||||
data-nip71-nested-add="service"
|
||||
>
|
||||
Add service hint
|
||||
@@ -1709,7 +1709,7 @@
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border border-border/60 px-2 py-1 text-[11px] text-muted-strong hover:border-border hover:text-text"
|
||||
class="btn-ghost px-2 py-1 text-[11px] text-muted-strong"
|
||||
data-nip71-remove="nested"
|
||||
aria-label="Remove service hint"
|
||||
>
|
||||
@@ -1721,7 +1721,7 @@
|
||||
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-critical/60 px-3 py-1 text-xs font-semibold text-critical hover:border-critical hover:text-critical-strong"
|
||||
class="btn-ghost px-3 py-1 text-xs" data-variant="critical"
|
||||
data-nip71-remove="imeta"
|
||||
>
|
||||
Remove variant
|
||||
@@ -1744,7 +1744,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="text-track"
|
||||
aria-describedby="cloudflareNip71TextTracksHelp"
|
||||
>
|
||||
@@ -1779,7 +1779,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="segment"
|
||||
aria-describedby="cloudflareNip71SegmentsHelp"
|
||||
>
|
||||
@@ -1814,7 +1814,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="t"
|
||||
aria-describedby="cloudflareNip71HashtagsHelp"
|
||||
>
|
||||
@@ -1849,7 +1849,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="p"
|
||||
aria-describedby="cloudflareNip71ParticipantsHelp"
|
||||
>
|
||||
@@ -1884,7 +1884,7 @@
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-md border border-border/60 px-3 py-1 text-xs font-semibold text-text hover:border-border hover:text-text"
|
||||
class="btn-ghost px-3 py-1 text-xs"
|
||||
data-nip71-add="r"
|
||||
aria-describedby="cloudflareNip71ReferencesHelp"
|
||||
>
|
||||
@@ -2043,7 +2043,7 @@
|
||||
<button
|
||||
type="submit"
|
||||
id="cloudflareUploadButton"
|
||||
class="w-full rounded-md bg-info px-4 py-2 text-sm font-semibold text-text transition hover:bg-info-strong focus:outline-none focus:ring-2 focus:ring-info disabled:cursor-not-allowed disabled:bg-blue-900"
|
||||
class="btn w-full text-sm"
|
||||
>
|
||||
Upload to R2 & publish
|
||||
</button>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
:root{--color-page:#fff;--color-page-alt:#f9fafb;--color-surface:#0f172a;--color-surface-alt:#111827;--color-bg:var(--color-surface);--color-card:#1e293b;--color-card-private:#3b1d74;--color-card-critical:#3f0b13;--color-panel:#1f2937;--color-panel-hover:#334155;--color-border:#374151;--color-border-subtle:#d1d5db;--color-primary:#fe0032;--color-secondary:#ff93a5;--color-info:#60a5fa;--color-info-strong:#2563eb;--color-info-pressed:#1d4ed8;--color-muted-strong:#6b7280;--color-text:#f8fafc;--color-text-strong:#0f172a;--color-text-muted:var(--color-muted);--color-muted:#94a3b8;--color-muted-alt:#9ca3af;--color-subtle-text:#e2e8f0;--color-subtle:#e5e7eb;--color-critical:#7f1d1d;--color-critical-strong:#991b1b;--color-warning:#facc15;--color-warning-strong:#d97706;--color-warning-surface:rgba(146,64,14,.24);--color-neutral-700:#3f3f46;--color-neutral-600:#52525b;--color-white:#fff;--color-black:#000;--color-overlay:#1a2234;--color-overlay-black:rgba(0,0,0,.9);--color-overlay-muted:rgba(15,23,42,.55);--color-overlay-strong:rgba(15,23,42,.75);--color-overlay-darker:rgba(15,23,42,.88);--color-overlay-panel:rgba(31,41,55,.9);--color-overlay-panel-soft:rgba(31,41,55,.75);--color-overlay-panel-tint:rgba(31,41,55,.5);--color-overlay-panel-glass:rgba(30,41,59,.85);--color-overlay-veil:rgba(11,17,32,.96);--color-overlay-banner:rgba(51,65,85,.95);--color-overlay-panel-gradient-start:rgba(30,41,59,.92);--color-overlay-panel-gradient-end:rgba(15,23,42,.92);--color-surface-tint-subtle:rgba(148,163,184,.08);--color-border-translucent:rgba(148,163,184,.18);--color-border-translucent-strong:rgba(148,163,184,.25);--color-border-translucent-bright:rgba(148,163,184,.32);--color-border-translucent-stronger:rgba(148,163,184,.35);--color-border-translucent-strongest:rgba(148,163,184,.4);--color-border-translucent-glow:rgba(148,163,184,.55);--color-border-translucent-medium:rgba(148,163,184,.2);--color-border-neutral-soft:rgba(229,231,235,.35);--color-border-info-soft:rgba(96,165,250,.35);--color-border-sidebar-strong:rgba(55,65,81,.9);--color-ring-private:rgba(168,85,247,.55);--color-ring-private-hover:rgba(192,132,252,.65);--color-ring-critical:rgba(239,68,68,.4);--color-ring-critical-soft:rgba(239,68,68,.35);--color-ring-critical-hover:rgba(239,68,68,.45);--color-ring-critical-strong:rgba(239,68,68,.55);--color-ring-alert:rgba(220,38,38,.6);--color-gradient-visibility-start:rgba(129,140,248,.4);--color-gradient-visibility-end:rgba(192,132,252,.32);--color-white-soft:hsla(0,0%,100%,.1);--color-white-softer:hsla(0,0%,100%,.3);--color-white-softest:hsla(0,0%,100%,.4);--color-shadow-floating:rgba(8,11,30,.55);--color-shadow-elevated:rgba(8,11,30,.45);--color-shadow-panel:rgba(15,23,42,.35);--color-shadow-notification:rgba(15,23,42,.3);--color-shadow-sidebar:rgba(0,0,0,.45);--color-divider-strong:rgba(15,23,42,.35);--color-text-frosted-strong:rgba(226,232,240,.94);--color-text-frosted:rgba(226,232,240,.9);--color-text-frosted-soft:rgba(226,232,240,.82);--space-2xs:0.25rem;--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--radius-sm:0.25rem;--radius-md:0.5rem;--radius-lg:0.75rem;--radius-xl:1rem;--radius-full:9999px;--shadow-sm:0 0.0625rem 0.125rem 0 rgb(0 0 0/5%);--shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.1);--shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.1);--shadow-modal:0 1.25rem 2.5rem -0.375rem rgba(15,23,42,.55);--font-family-sans:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;--font-family-mono:"Fira Code","SFMono-Regular",ui-monospace,monospace;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.5rem;--font-size-2xl:2rem;--line-height-tight:1.1;--line-height-snug:1.25;--line-height-base:1.5;--line-height-relaxed:1.75;--motion-duration-fast:120ms;--motion-duration-base:160ms;--motion-duration-slow:280ms;--motion-ease-out:cubic-bezier(0.16,1,0.3,1);--motion-ease-in-out:cubic-bezier(0.4,0,0.2,1);--modal-motion-duration:var(--motion-duration-base)}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tLine truncated
|
||||
|
||||
/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-family-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-family-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.focus-ring{outline:2px solid transparent;outline-offset:2px}.focus-ring:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:var(--color-info);--tw-ring-opacity:0.7;--tw-ring-offset-width:2px;--tw-ring-offset-color:var(--color-surface);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;transition-duration:var(--motion-duration-fast);transition-timing-function:cubic-bezier(0,0,.2,1)}.btn{outline:2px solid transparent;outline-offset:2px}.btn:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:var(--color-info);--tw-ring-opacity:0.7;--tw-ring-offset-width:2px;--tw-ring-offset-color:var(--color-surface);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;transition-duration:var(--motion-duration-fast);transition-timing-function:cubic-bezier(0,0,.2,1)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--radius-lg);border-width:1px;border-color:transparent;background-color:var(--color-primary);padding:.5rem 1rem;font-size:var(--font-size-sm);line-height:var(--line-height-snug);font-weight:600;text-transform:uppercase;letter-spacing:.025em;color:var(--color-white);--tw-shadow:var(--shadow-md);--tw-shadow-colored:var(--shadow-md);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-duration:var(--motion-duration-base);transition-timing-funLine truncated
|
||||
/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-family-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-family-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.focus-ring{outline:2px solid transparent;outline-offset:2px}.focus-ring:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:var(--color-info);--tw-ring-opacity:0.7;--tw-ring-offset-width:2px;--tw-ring-offset-color:var(--color-surface);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;transition-duration:var(--motion-duration-fast);transition-timing-function:cubic-bezier(0,0,.2,1)}.btn{outline:2px solid transparent;outline-offset:2px}.btn:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:var(--color-info);--tw-ring-opacity:0.7;--tw-ring-offset-width:2px;--tw-ring-offset-color:var(--color-surface);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;transition-duration:var(--motion-duration-fast);transition-timing-function:cubic-bezier(0,0,.2,1)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--radius-lg);border-width:1px;border-color:transparent;background-color:var(--color-primary);padding:.5rem 1rem;font-size:var(--font-size-sm);line-height:var(--line-height-snug);font-weight:600;text-transform:uppercase;letter-spacing:.025em;color:var(--color-white);--tw-shadow:var(--shadow-md);--tw-shadow-colored:var(--shadow-md);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-duration:var(--motion-duration-base);transition-timing-funLine truncated
|
||||
@@ -53,6 +53,27 @@
|
||||
@apply pointer-events-none opacity-50 shadow-none;
|
||||
}
|
||||
|
||||
.btn-ghost[data-variant="critical"] {
|
||||
@apply border border-critical border-opacity-60 text-critical;
|
||||
}
|
||||
|
||||
.btn-ghost[data-variant="critical"]:hover,
|
||||
.btn-ghost[data-variant="critical"]:focus-visible {
|
||||
@apply bg-critical bg-opacity-20 text-critical-strong;
|
||||
}
|
||||
|
||||
.btn-ghost[data-state="active"],
|
||||
.btn-ghost[aria-pressed="true"] {
|
||||
@apply border-transparent bg-primary text-white shadow-md;
|
||||
}
|
||||
|
||||
.btn-ghost[data-state="active"]:hover,
|
||||
.btn-ghost[data-state="active"]:focus-visible,
|
||||
.btn-ghost[aria-pressed="true"]:hover,
|
||||
.btn-ghost[aria-pressed="true"]:focus-visible {
|
||||
@apply bg-info-strong;
|
||||
}
|
||||
|
||||
.badge {
|
||||
@apply inline-flex items-center gap-1 rounded-full bg-panel px-3 py-1 text-xs font-semibold uppercase tracking-wide text-muted-strong;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,18 @@ Both buttons:
|
||||
|
||||
Mix in Tailwind utilities for icon spacing (`gap-3`), sizing (`px-lg`, `py-sm`), or layout (`w-full`). Avoid overriding colors unless introducing a new semantic variant.
|
||||
|
||||
#### Variants & Toggle States
|
||||
|
||||
- Apply `data-variant="critical"` to `.btn-ghost` when rendering destructive affordances (for example, "Remove variant" pills inside repeater rows). The primitive swaps the border and text colors to the critical palette and deepens the fill on hover/focus.
|
||||
- Toggle groups can rely on `[aria-pressed="true"]` or `data-state="active"` without extra utilities. When a `.btn-ghost` reports an active state it automatically promotes to the filled primary style.
|
||||
|
||||
```html
|
||||
<div class="inline-flex items-center rounded-full bg-panel/80 p-1" role="group">
|
||||
<button class="btn-ghost flex-1" type="button" aria-pressed="true">Custom</button>
|
||||
<button class="btn-ghost flex-1" type="button" aria-pressed="false">Cloudflare</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Badges
|
||||
|
||||
`.badge` renders an inline pill (`bg-panel`, uppercase text). Opt into semantic variants with `data-variant="info"`, `data-variant="critical"`, or `data-variant="neutral"`. Layer on utilities for icon alignment or truncation.
|
||||
@@ -62,6 +74,26 @@ Specialisations reuse `.form-control`:
|
||||
|
||||
All three share hover, focus-visible, disabled, and invalid treatments. Layer on utilities (`h-12`, `text-lg`, icon padding) as needed without re-declaring tokens.
|
||||
|
||||
```html
|
||||
<form class="bv-stack bv-stack--tight" aria-labelledby="zapAmountLabel">
|
||||
<label
|
||||
id="zapAmountLabel"
|
||||
class="text-xs font-semibold uppercase tracking-wide text-muted-strong"
|
||||
>
|
||||
Zap amount (sats)
|
||||
</label>
|
||||
<input
|
||||
id="zapAmountInput"
|
||||
type="number"
|
||||
min="1"
|
||||
step="1"
|
||||
class="input"
|
||||
placeholder="Enter sats"
|
||||
/>
|
||||
<button class="btn" type="submit">Send</button>
|
||||
</form>
|
||||
```
|
||||
|
||||
For toggles:
|
||||
|
||||
- `.checkbox` resets native appearance, applies the token border/background, and swaps to the info palette when checked. The checkmark is rendered via `::after`, and disabled states lower contrast while keeping the focus ring behaviour.
|
||||
@@ -75,6 +107,17 @@ For toggles:
|
||||
|
||||
Compose them together when mounting new modal portals. If you need a drawer or sheet, start from these primitives and adjust spacing/positioning via utilities.
|
||||
|
||||
#### Modal Actions
|
||||
|
||||
Action rows in login, disclaimer, and upload flows now pair `.btn-ghost` and `.btn` directly. Layer layout utilities such as `w-full` or `gap-3` without re-adding custom focus rings.
|
||||
|
||||
```html
|
||||
<footer class="modal-footer flex gap-3">
|
||||
<button class="btn-ghost flex-1" type="button">Cancel</button>
|
||||
<button class="btn flex-1" type="submit">Publish</button>
|
||||
</footer>
|
||||
```
|
||||
|
||||
Static modal partials (login, application, feedback, etc.) should call the helpers exported from `js/ui/components/staticModalAccessibility.js`—`prepareStaticModal`, `openStaticModal`, and `closeStaticModal`—to attach focus trapping, Escape/backdrop dismissal, and the shared `data-open`/`html.modal-open` toggles without duplicating controller logic.
|
||||
|
||||
### Popovers
|
||||
|
||||
@@ -1658,7 +1658,7 @@ class Application {
|
||||
if (!(button instanceof HTMLElement)) {
|
||||
return;
|
||||
}
|
||||
if (button.dataset.loading === "true") {
|
||||
if (button.dataset.state === "loading") {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1671,7 +1671,11 @@ class Application {
|
||||
|
||||
const setLoadingState = (isLoading) => {
|
||||
button.disabled = isLoading ? true : originalDisabled;
|
||||
button.dataset.loading = isLoading ? "true" : "false";
|
||||
if (isLoading) {
|
||||
button.dataset.state = "loading";
|
||||
} else {
|
||||
delete button.dataset.state;
|
||||
}
|
||||
button.setAttribute("aria-busy", isLoading ? "true" : "false");
|
||||
if (isLoading) {
|
||||
button.setAttribute("aria-disabled", "true");
|
||||
@@ -1934,19 +1938,19 @@ class Application {
|
||||
const setLoadingState = (isLoading) => {
|
||||
if (isLoading) {
|
||||
nip07Button.disabled = true;
|
||||
nip07Button.dataset.loading = "true";
|
||||
nip07Button.dataset.state = "loading";
|
||||
nip07Button.setAttribute("aria-busy", "true");
|
||||
nip07Button.textContent = "Connecting to NIP-07 extension...";
|
||||
|
||||
clearSlowExtensionTimer();
|
||||
slowExtensionTimer = window.setTimeout(() => {
|
||||
if (nip07Button.dataset.loading === "true") {
|
||||
if (nip07Button.dataset.state === "loading") {
|
||||
nip07Button.textContent = "Waiting for the extension prompt…";
|
||||
}
|
||||
}, slowExtensionDelayMs);
|
||||
} else {
|
||||
nip07Button.disabled = false;
|
||||
nip07Button.dataset.loading = "false";
|
||||
delete nip07Button.dataset.state;
|
||||
nip07Button.setAttribute("aria-busy", "false");
|
||||
clearSlowExtensionTimer();
|
||||
nip07Button.textContent = originalLabel;
|
||||
@@ -1954,7 +1958,7 @@ class Application {
|
||||
};
|
||||
|
||||
nip07Button.addEventListener("click", async () => {
|
||||
if (nip07Button.dataset.loading === "true") {
|
||||
if (nip07Button.dataset.state === "loading") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,9 +181,10 @@ function setChannelZapVisibility(visible) {
|
||||
if (shouldShow) {
|
||||
sendButton.removeAttribute("tabindex");
|
||||
sendButton.removeAttribute("aria-busy");
|
||||
sendButton.classList.remove("opacity-50", "pointer-events-none");
|
||||
delete sendButton.dataset.state;
|
||||
} else {
|
||||
sendButton.setAttribute("tabindex", "-1");
|
||||
delete sendButton.dataset.state;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1070,7 +1071,7 @@ async function handleZapSend(event) {
|
||||
}
|
||||
sendButton.disabled = true;
|
||||
sendButton.setAttribute("aria-busy", "true");
|
||||
sendButton.classList.add("opacity-50", "pointer-events-none");
|
||||
sendButton.dataset.state = "loading";
|
||||
amountInput.disabled = true;
|
||||
|
||||
let attemptedAmount = null;
|
||||
@@ -1160,7 +1161,7 @@ async function handleZapSend(event) {
|
||||
}
|
||||
sendButton.disabled = false;
|
||||
sendButton.removeAttribute("aria-busy");
|
||||
sendButton.classList.remove("opacity-50", "pointer-events-none");
|
||||
delete sendButton.dataset.state;
|
||||
amountInput.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -531,10 +531,11 @@ export class UploadModal {
|
||||
return;
|
||||
}
|
||||
const isActive = button.dataset.uploadMode === normalized;
|
||||
button.classList.toggle("bg-blue-500", isActive);
|
||||
button.classList.toggle("text-white", isActive);
|
||||
button.classList.toggle("shadow", isActive);
|
||||
button.classList.toggle("text-gray-300", !isActive);
|
||||
if (isActive) {
|
||||
button.dataset.state = "active";
|
||||
} else {
|
||||
delete button.dataset.state;
|
||||
}
|
||||
button.setAttribute("aria-pressed", isActive ? "true" : "false");
|
||||
});
|
||||
}
|
||||
|
||||
+11
-11
@@ -53,18 +53,18 @@
|
||||
aria-label="Channel zap dialog"
|
||||
>
|
||||
<div
|
||||
class="zap-popover__content w-72 max-w-[calc(100vw-2rem)] rounded-lg p-4 shadow-lg"
|
||||
class="zap-popover__content card w-72 max-w-[calc(100vw-2rem)] p-4"
|
||||
>
|
||||
<div class="mb-3 flex items-center justify-between gap-4">
|
||||
<h3
|
||||
class="text-xs font-semibold uppercase tracking-wide text-gray-300"
|
||||
class="text-xs font-semibold uppercase tracking-wide text-muted-strong"
|
||||
>
|
||||
Send a zap
|
||||
</h3>
|
||||
<button
|
||||
type="button"
|
||||
id="zapCloseBtn"
|
||||
class="text-gray-400 transition-colors hover:text-gray-200"
|
||||
class="btn-ghost px-2 py-1 text-xs"
|
||||
aria-label="Close zap dialog"
|
||||
>
|
||||
✕
|
||||
@@ -72,14 +72,14 @@
|
||||
</div>
|
||||
<p
|
||||
id="zapWalletPrompt"
|
||||
class="mb-3 hidden text-sm text-gray-200"
|
||||
class="mb-3 hidden text-sm text-muted"
|
||||
aria-hidden="true"
|
||||
>
|
||||
Connect a wallet in
|
||||
<button
|
||||
type="button"
|
||||
id="zapWalletLink"
|
||||
class="font-semibold text-blue-300 underline decoration-dotted transition-colors hover:text-blue-200"
|
||||
class="btn-ghost px-2 py-1 text-xs"
|
||||
>
|
||||
Wallet Connect settings
|
||||
</button>
|
||||
@@ -90,7 +90,7 @@
|
||||
<label
|
||||
for="zapAmountInput"
|
||||
id="zapAmountLabel"
|
||||
class="mb-2 block text-xs font-semibold uppercase tracking-wide text-gray-300"
|
||||
class="mb-2 block text-xs font-semibold uppercase tracking-wide text-muted-strong"
|
||||
>
|
||||
Zap amount (sats)
|
||||
</label>
|
||||
@@ -100,30 +100,30 @@
|
||||
min="1"
|
||||
step="1"
|
||||
inputmode="numeric"
|
||||
class="w-full rounded border border-gray-600 bg-gray-800 px-3 py-2 text-sm text-gray-100 focus:border-blue-400 focus:outline-none focus:ring-1 focus:ring-blue-400"
|
||||
class="input"
|
||||
placeholder="Enter sats"
|
||||
aria-labelledby="zapAmountLabel"
|
||||
/>
|
||||
</div>
|
||||
<p
|
||||
id="zapSplitSummary"
|
||||
class="text-sm text-gray-300"
|
||||
class="text-sm text-muted"
|
||||
aria-live="polite"
|
||||
>
|
||||
Enter an amount to view the split.
|
||||
</p>
|
||||
<p
|
||||
id="zapStatus"
|
||||
class="text-xs text-gray-400"
|
||||
class="text-xs text-muted"
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
></p>
|
||||
<ul id="zapReceipts" class="space-y-2 text-xs text-gray-300"></ul>
|
||||
<ul id="zapReceipts" class="space-y-2 text-xs text-muted"></ul>
|
||||
<div class="flex items-center justify-end gap-2">
|
||||
<button
|
||||
type="submit"
|
||||
id="zapSendBtn"
|
||||
class="rounded bg-blue-500 px-4 py-2 text-sm font-semibold text-white transition-colors hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-offset-2 focus:ring-offset-gray-900"
|
||||
class="btn"
|
||||
aria-label="Send a zap"
|
||||
>
|
||||
Send
|
||||
|
||||
Reference in new issue
Block a user