nostr-components 0.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/LICENSE +21 -0
- package/README.md +334 -0
- package/dist/assets/base-styles-CBypR3FR.js +145 -0
- package/dist/assets/base-styles-CBypR3FR.js.map +1 -0
- package/dist/assets/copy-delegation-C4uvRTVM.js +15 -0
- package/dist/assets/copy-delegation-C4uvRTVM.js.map +1 -0
- package/dist/assets/dialog-component-Dqg0QU9I.js +66 -0
- package/dist/assets/dialog-component-Dqg0QU9I.js.map +1 -0
- package/dist/assets/dialog-likers-BzTesCZa.js +238 -0
- package/dist/assets/dialog-likers-BzTesCZa.js.map +1 -0
- package/dist/assets/icons-Dr_d9MII.js +105 -0
- package/dist/assets/icons-Dr_d9MII.js.map +1 -0
- package/dist/assets/nip05-utils-BNBHUmkr.js +2 -0
- package/dist/assets/nip05-utils-BNBHUmkr.js.map +1 -0
- package/dist/assets/nostr-service-pr_crY62.js +78 -0
- package/dist/assets/nostr-service-pr_crY62.js.map +1 -0
- package/dist/assets/nostr-user-component-Q7GeeFyu.js +2 -0
- package/dist/assets/nostr-user-component-Q7GeeFyu.js.map +1 -0
- package/dist/assets/preload-helper-D7HrI6pR.js +2 -0
- package/dist/assets/preload-helper-D7HrI6pR.js.map +1 -0
- package/dist/assets/pure-jrVhRVpB.js +2 -0
- package/dist/assets/pure-jrVhRVpB.js.map +1 -0
- package/dist/assets/theme-C1r1Zw8r.js +2 -0
- package/dist/assets/theme-C1r1Zw8r.js.map +1 -0
- package/dist/assets/user-resolver-C-E6KdwY.js +2 -0
- package/dist/assets/user-resolver-C-E6KdwY.js.map +1 -0
- package/dist/assets/utils--bxLbhGF.js +2 -0
- package/dist/assets/utils--bxLbhGF.js.map +1 -0
- package/dist/assets/zap-utils-B1sz0Abx.js +2 -0
- package/dist/assets/zap-utils-B1sz0Abx.js.map +1 -0
- package/dist/components/nostr-comment.es.js +924 -0
- package/dist/components/nostr-comment.es.js.map +1 -0
- package/dist/components/nostr-dm.es.js +217 -0
- package/dist/components/nostr-dm.es.js.map +1 -0
- package/dist/components/nostr-follow-button.es.js +103 -0
- package/dist/components/nostr-follow-button.es.js.map +1 -0
- package/dist/components/nostr-like.es.js +296 -0
- package/dist/components/nostr-like.es.js.map +1 -0
- package/dist/components/nostr-live-chat.es.js +523 -0
- package/dist/components/nostr-live-chat.es.js.map +1 -0
- package/dist/components/nostr-post.es.js +441 -0
- package/dist/components/nostr-post.es.js.map +1 -0
- package/dist/components/nostr-profile-badge.es.js +100 -0
- package/dist/components/nostr-profile-badge.es.js.map +1 -0
- package/dist/components/nostr-profile.es.js +287 -0
- package/dist/components/nostr-profile.es.js.map +1 -0
- package/dist/components/nostr-zap.es.js +694 -0
- package/dist/components/nostr-zap.es.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/nostr-comment.d.ts +4 -0
- package/dist/nostr-components.es.js +2 -0
- package/dist/nostr-components.es.js.map +1 -0
- package/dist/nostr-components.umd.js +4200 -0
- package/dist/nostr-components.umd.js.map +1 -0
- package/dist/nostr-dm.d.ts +4 -0
- package/dist/nostr-follow-button.d.ts +4 -0
- package/dist/nostr-like.d.ts +4 -0
- package/dist/nostr-live-chat.d.ts +4 -0
- package/dist/nostr-post.d.ts +4 -0
- package/dist/nostr-profile-badge.d.ts +4 -0
- package/dist/nostr-profile.d.ts +4 -0
- package/dist/nostr-zap.d.ts +4 -0
- package/dist/src/base/base-component/nostr-base-component.d.ts +116 -0
- package/dist/src/base/copy-delegation.d.ts +5 -0
- package/dist/src/base/dialog-component/dialog-component.d.ts +67 -0
- package/dist/src/base/dialog-component/style.d.ts +5 -0
- package/dist/src/base/event-component/nostr-event-component.d.ts +53 -0
- package/dist/src/base/render-options.d.ts +5 -0
- package/dist/src/base/resolvers/event-resolver.d.ts +20 -0
- package/dist/src/base/resolvers/user-resolver.d.ts +19 -0
- package/dist/src/base/text-row/render-name.d.ts +7 -0
- package/dist/src/base/text-row/render-nip05.d.ts +1 -0
- package/dist/src/base/text-row/render-npub.d.ts +1 -0
- package/dist/src/base/text-row/render-text-row.d.ts +9 -0
- package/dist/src/base/user-component/nostr-user-component.d.ts +43 -0
- package/dist/src/common/base-styles.d.ts +44 -0
- package/dist/src/common/constants.d.ts +4 -0
- package/dist/src/common/date-utils.d.ts +9 -0
- package/dist/src/common/icons.d.ts +7 -0
- package/dist/src/common/nip05-utils.d.ts +13 -0
- package/dist/src/common/nostr-service.d.ts +40 -0
- package/dist/src/common/theme.d.ts +4 -0
- package/dist/src/common/types.d.ts +1 -0
- package/dist/src/common/utils.d.ts +34 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/nostr-comment/nostr-comment.d.ts +60 -0
- package/dist/src/nostr-comment/render.d.ts +15 -0
- package/dist/src/nostr-comment/utils.d.ts +81 -0
- package/dist/src/nostr-dm/nostr-dm.d.ts +34 -0
- package/dist/src/nostr-dm/render.d.ts +15 -0
- package/dist/src/nostr-follow-button/nostr-follow-button.d.ts +24 -0
- package/dist/src/nostr-follow-button/render.d.ts +11 -0
- package/dist/src/nostr-follow-button/style.d.ts +1 -0
- package/dist/src/nostr-like/dialog-help-style.d.ts +1 -0
- package/dist/src/nostr-like/dialog-help.d.ts +2 -0
- package/dist/src/nostr-like/dialog-likers-style.d.ts +1 -0
- package/dist/src/nostr-like/dialog-likers.d.ts +24 -0
- package/dist/src/nostr-like/like-utils.d.ts +52 -0
- package/dist/src/nostr-like/nostr-like.d.ts +49 -0
- package/dist/src/nostr-like/render.d.ts +10 -0
- package/dist/src/nostr-like/style.d.ts +1 -0
- package/dist/src/nostr-live-chat/nostr-live-chat.d.ts +65 -0
- package/dist/src/nostr-live-chat/render.d.ts +31 -0
- package/dist/src/nostr-post/nostr-post.d.ts +25 -0
- package/dist/src/nostr-post/parse-text.d.ts +8 -0
- package/dist/src/nostr-post/render-content.d.ts +5 -0
- package/dist/src/nostr-post/render.d.ts +19 -0
- package/dist/src/nostr-post/style.d.ts +1 -0
- package/dist/src/nostr-profile/nostr-profile.d.ts +24 -0
- package/dist/src/nostr-profile/render-stats.d.ts +1 -0
- package/dist/src/nostr-profile/render.d.ts +22 -0
- package/dist/src/nostr-profile/style.d.ts +1 -0
- package/dist/src/nostr-profile-badge/nostr-profile-badge.d.ts +34 -0
- package/dist/src/nostr-profile-badge/render.d.ts +11 -0
- package/dist/src/nostr-profile-badge/style.d.ts +1 -0
- package/dist/src/nostr-zap/dialog-help-style.d.ts +5 -0
- package/dist/src/nostr-zap/dialog-help.d.ts +2 -0
- package/dist/src/nostr-zap/dialog-zap-style.d.ts +6 -0
- package/dist/src/nostr-zap/dialog-zap.d.ts +31 -0
- package/dist/src/nostr-zap/dialog-zappers-style.d.ts +1 -0
- package/dist/src/nostr-zap/dialog-zappers.d.ts +25 -0
- package/dist/src/nostr-zap/nostr-zap.d.ts +45 -0
- package/dist/src/nostr-zap/render.d.ts +9 -0
- package/dist/src/nostr-zap/style.d.ts +1 -0
- package/dist/src/nostr-zap/zap-utils.d.ts +53 -0
- package/dist/themes/dark.css +10 -0
- package/dist/themes/light.css +10 -0
- package/dist/themes.css +52 -0
- package/dist/vite.config.d.ts +2 -0
- package/dist/vite.config.esm.d.ts +2 -0
- package/dist/vite.config.umd.d.ts +2 -0
- package/package.json +95 -0
|
@@ -0,0 +1,694 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/zap-utils-B1sz0Abx.js","assets/nostr-service-pr_crY62.js","assets/utils--bxLbhGF.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
var Yt=Object.defineProperty;var Jt=(e,t,n)=>t in e?Yt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var _=(e,t,n)=>Jt(e,typeof t!="symbol"?t+"":t,n);import{N as Gt}from"../assets/nostr-user-component-Q7GeeFyu.js";import{n as Qt,g as St,h as G,e as X,f as kt,c as At,a as N}from"../assets/base-styles-CBypR3FR.js";import"../assets/dialog-component-Dqg0QU9I.js";import{getProfileMetadata as Wt,getZapEndpoint as Xt,fetchInvoice as te,listenForZapReceipt as ee,getBatchedProfileMetadata as ne,extractProfileMetadataContent as Nt,fetchTotalZapAmount as oe}from"../assets/zap-utils-B1sz0Abx.js";import{_ as re}from"../assets/preload-helper-D7HrI6pR.js";import{i as ae}from"../assets/utils--bxLbhGF.js";import"../assets/user-resolver-C-E6KdwY.js";import"../assets/nostr-service-pr_crY62.js";const ie=(e="light")=>{const t=e==="dark";return`
|
|
3
|
+
/* === ZAP DIALOG CONTENT STYLES === */
|
|
4
|
+
.zap-dialog-content {
|
|
5
|
+
text-align: center;
|
|
6
|
+
color: ${t?"#ffffff":"#000000"};
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.zap-dialog-content p {
|
|
10
|
+
margin: 4px 0;
|
|
11
|
+
word-break: break-word;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* === AMOUNT BUTTONS === */
|
|
15
|
+
.zap-dialog-content .amount-buttons {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-wrap: wrap;
|
|
18
|
+
gap: 8px;
|
|
19
|
+
margin: 16px 0 8px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.zap-dialog-content .amount-buttons button {
|
|
23
|
+
flex: 1 1 30%;
|
|
24
|
+
min-width: 72px;
|
|
25
|
+
padding: 8px 0;
|
|
26
|
+
border: 1px solid ${t?"#3a3a3a":"#e2e8f0"};
|
|
27
|
+
border-radius: 6px;
|
|
28
|
+
background: ${t?"#262626":"#f7fafc"};
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
font-size: 14px;
|
|
31
|
+
color: ${t?"#ffffff":"#000000"};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.zap-dialog-content .amount-buttons button.active {
|
|
35
|
+
background: #7f00ff;
|
|
36
|
+
color: #ffffff;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* === ACTION BUTTONS === */
|
|
40
|
+
.zap-dialog-content .cta-btn {
|
|
41
|
+
width: 100%;
|
|
42
|
+
padding: 12px 0;
|
|
43
|
+
border: none;
|
|
44
|
+
border-radius: 6px;
|
|
45
|
+
font-size: 16px;
|
|
46
|
+
margin-top: 16px;
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
background: #7f00ff;
|
|
49
|
+
color: #ffffff;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.zap-dialog-content .copy-btn {
|
|
53
|
+
margin-top: 12px;
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
font-size: 14px;
|
|
56
|
+
background: none;
|
|
57
|
+
border: none;
|
|
58
|
+
color: #7f00ff;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.zap-dialog-content .update-zap-btn {
|
|
62
|
+
background: #7f00ff;
|
|
63
|
+
color: #ffffff;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* === QR CODE === */
|
|
67
|
+
.zap-dialog-content img.qr {
|
|
68
|
+
margin-top: 16px;
|
|
69
|
+
border: 1px solid ${t?"#3a3a3a":"#e2e8f0"};
|
|
70
|
+
border-radius: 8px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* === INPUT CONTAINERS === */
|
|
74
|
+
.zap-dialog-content .update-zap-container {
|
|
75
|
+
display: flex;
|
|
76
|
+
gap: 8px;
|
|
77
|
+
align-items: center;
|
|
78
|
+
margin-top: 8px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.zap-dialog-content .update-zap-container .custom-amount {
|
|
82
|
+
flex-grow: 1;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.zap-dialog-content .comment-container {
|
|
86
|
+
display: flex;
|
|
87
|
+
gap: 8px;
|
|
88
|
+
align-items: center;
|
|
89
|
+
margin-top: 8px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.zap-dialog-content .comment-container .comment-input {
|
|
93
|
+
flex-grow: 1;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.zap-dialog-content input {
|
|
97
|
+
background: ${t?"#262626":"#ffffff"};
|
|
98
|
+
border: 1px solid ${t?"#3a3a3a":"#e2e8f0"};
|
|
99
|
+
color: ${t?"#ffffff":"#000000"};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* === LOADING OVERLAY === */
|
|
103
|
+
.nostr-base-dialog .loading-overlay {
|
|
104
|
+
position: absolute;
|
|
105
|
+
inset: 0;
|
|
106
|
+
background: ${t?"rgba(0, 0, 0, 0.7)":"rgba(255, 255, 255, 0.7)"};
|
|
107
|
+
display: flex;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
align-items: center;
|
|
110
|
+
border-radius: 10px;
|
|
111
|
+
opacity: 0;
|
|
112
|
+
transition: opacity 0.2s ease;
|
|
113
|
+
pointer-events: none;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.nostr-base-dialog.loading .loading-overlay {
|
|
117
|
+
opacity: 1;
|
|
118
|
+
pointer-events: auto;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.nostr-base-dialog .loading-overlay .loader {
|
|
122
|
+
width: 40px;
|
|
123
|
+
height: 40px;
|
|
124
|
+
border: 4px solid ${t?"#3a3a3a":"#ccc"};
|
|
125
|
+
border-top-color: #7f00ff;
|
|
126
|
+
border-radius: 50%;
|
|
127
|
+
animation: nstrc-spin 1s linear infinite;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* === SUCCESS OVERLAY === */
|
|
131
|
+
.nostr-base-dialog .success-overlay {
|
|
132
|
+
position: absolute;
|
|
133
|
+
inset: 0;
|
|
134
|
+
background: rgba(0, 0, 0, 0.65);
|
|
135
|
+
display: flex;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
align-items: center;
|
|
138
|
+
color: #ffffff;
|
|
139
|
+
font-size: 24px;
|
|
140
|
+
border-radius: 10px;
|
|
141
|
+
opacity: 0;
|
|
142
|
+
transition: opacity 0.3s ease;
|
|
143
|
+
pointer-events: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.nostr-base-dialog.success .success-overlay {
|
|
147
|
+
opacity: 1;
|
|
148
|
+
pointer-events: auto;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* === ANIMATIONS === */
|
|
152
|
+
@keyframes nstrc-spin {
|
|
153
|
+
to {
|
|
154
|
+
transform: rotate(360deg);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
`};var se=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then},xt={},P={};let pt;const ce=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];P.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return t*4+17};P.getSymbolTotalCodewords=function(t){return ce[t]};P.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t};P.setToSJISFunction=function(t){if(typeof t!="function")throw new Error('"toSJISFunc" is not a valid function.');pt=t};P.isKanjiModeEnabled=function(){return typeof pt<"u"};P.toSJIS=function(t){return pt(t)};var tt={};(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+n)}}e.isValid=function(o){return o&&typeof o.bit<"u"&&o.bit>=0&&o.bit<4},e.from=function(o,r){if(e.isValid(o))return o;try{return t(o)}catch{return r}}})(tt);function Tt(){this.buffer=[],this.length=0}Tt.prototype={get:function(e){const t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)===1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(e){const t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}};var le=Tt;function j(e){if(!e||e<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}j.prototype.set=function(e,t,n,o){const r=e*this.size+t;this.data[r]=n,o&&(this.reservedBit[r]=!0)};j.prototype.get=function(e,t){return this.data[e*this.size+t]};j.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n};j.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]};var ue=j,Bt={};(function(e){const t=P.getSymbolSize;e.getRowColCoords=function(o){if(o===1)return[];const r=Math.floor(o/7)+2,a=t(o),s=a===145?26:Math.ceil((a-13)/(2*r-2))*2,i=[a-7];for(let c=1;c<r-1;c++)i[c]=i[c-1]-s;return i.push(6),i.reverse()},e.getPositions=function(o){const r=[],a=e.getRowColCoords(o),s=a.length;for(let i=0;i<s;i++)for(let c=0;c<s;c++)i===0&&c===0||i===0&&c===s-1||i===s-1&&c===0||r.push([a[i],a[c]]);return r}})(Bt);var It={};const de=P.getSymbolSize,Ct=7;It.getPositions=function(t){const n=de(t);return[[0,0],[n-Ct,0],[0,n-Ct]]};var Pt={};(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(r){return r!=null&&r!==""&&!isNaN(r)&&r>=0&&r<=7},e.from=function(r){return e.isValid(r)?parseInt(r,10):void 0},e.getPenaltyN1=function(r){const a=r.size;let s=0,i=0,c=0,l=null,u=null;for(let y=0;y<a;y++){i=c=0,l=u=null;for(let p=0;p<a;p++){let d=r.get(y,p);d===l?i++:(i>=5&&(s+=t.N1+(i-5)),l=d,i=1),d=r.get(p,y),d===u?c++:(c>=5&&(s+=t.N1+(c-5)),u=d,c=1)}i>=5&&(s+=t.N1+(i-5)),c>=5&&(s+=t.N1+(c-5))}return s},e.getPenaltyN2=function(r){const a=r.size;let s=0;for(let i=0;i<a-1;i++)for(let c=0;c<a-1;c++){const l=r.get(i,c)+r.get(i,c+1)+r.get(i+1,c)+r.get(i+1,c+1);(l===4||l===0)&&s++}return s*t.N2},e.getPenaltyN3=function(r){const a=r.size;let s=0,i=0,c=0;for(let l=0;l<a;l++){i=c=0;for(let u=0;u<a;u++)i=i<<1&2047|r.get(l,u),u>=10&&(i===1488||i===93)&&s++,c=c<<1&2047|r.get(u,l),u>=10&&(c===1488||c===93)&&s++}return s*t.N3},e.getPenaltyN4=function(r){let a=0;const s=r.data.length;for(let c=0;c<s;c++)a+=r.data[c];return Math.abs(Math.ceil(a*100/s/5)-10)*t.N4};function n(o,r,a){switch(o){case e.Patterns.PATTERN000:return(r+a)%2===0;case e.Patterns.PATTERN001:return r%2===0;case e.Patterns.PATTERN010:return a%3===0;case e.Patterns.PATTERN011:return(r+a)%3===0;case e.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(a/3))%2===0;case e.Patterns.PATTERN101:return r*a%2+r*a%3===0;case e.Patterns.PATTERN110:return(r*a%2+r*a%3)%2===0;case e.Patterns.PATTERN111:return(r*a%3+(r+a)%2)%2===0;default:throw new Error("bad maskPattern:"+o)}}e.applyMask=function(r,a){const s=a.size;for(let i=0;i<s;i++)for(let c=0;c<s;c++)a.isReserved(c,i)||a.xor(c,i,n(r,c,i))},e.getBestMask=function(r,a){const s=Object.keys(e.Patterns).length;let i=0,c=1/0;for(let l=0;l<s;l++){a(l),e.applyMask(l,r);const u=e.getPenaltyN1(r)+e.getPenaltyN2(r)+e.getPenaltyN3(r)+e.getPenaltyN4(r);e.applyMask(l,r),u<c&&(c=u,i=l)}return i}})(Pt);var et={};const $=tt,Y=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],J=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];et.getBlocksCount=function(t,n){switch(n){case $.L:return Y[(t-1)*4+0];case $.M:return Y[(t-1)*4+1];case $.Q:return Y[(t-1)*4+2];case $.H:return Y[(t-1)*4+3];default:return}};et.getTotalCodewordsCount=function(t,n){switch(n){case $.L:return J[(t-1)*4+0];case $.M:return J[(t-1)*4+1];case $.Q:return J[(t-1)*4+2];case $.H:return J[(t-1)*4+3];default:return}};var Lt={},nt={};const O=new Uint8Array(512),Q=new Uint8Array(256);(function(){let t=1;for(let n=0;n<255;n++)O[n]=t,Q[t]=n,t<<=1,t&256&&(t^=285);for(let n=255;n<512;n++)O[n]=O[n-255]})();nt.log=function(t){if(t<1)throw new Error("log("+t+")");return Q[t]};nt.exp=function(t){return O[t]};nt.mul=function(t,n){return t===0||n===0?0:O[Q[t]+Q[n]]};(function(e){const t=nt;e.mul=function(o,r){const a=new Uint8Array(o.length+r.length-1);for(let s=0;s<o.length;s++)for(let i=0;i<r.length;i++)a[s+i]^=t.mul(o[s],r[i]);return a},e.mod=function(o,r){let a=new Uint8Array(o);for(;a.length-r.length>=0;){const s=a[0];for(let c=0;c<r.length;c++)a[c]^=t.mul(r[c],s);let i=0;for(;i<a.length&&a[i]===0;)i++;a=a.slice(i)}return a},e.generateECPolynomial=function(o){let r=new Uint8Array([1]);for(let a=0;a<o;a++)r=e.mul(r,new Uint8Array([1,t.exp(a)]));return r}})(Lt);const Mt=Lt;function gt(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}gt.prototype.initialize=function(t){this.degree=t,this.genPoly=Mt.generateECPolynomial(this.degree)};gt.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");const n=new Uint8Array(t.length+this.degree);n.set(t);const o=Mt.mod(n,this.genPoly),r=this.degree-o.length;if(r>0){const a=new Uint8Array(this.degree);return a.set(o,r),a}return o};var fe=gt,Rt={},U={},ht={};ht.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40};var L={};const Dt="[0-9]+",pe="[A-Z $%*+\\-./:]+";let V="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";V=V.replace(/u/g,"\\u");const ge="(?:(?![A-Z0-9 $%*+\\-./:]|"+V+`)(?:.|[\r
|
|
158
|
+
]))+`;L.KANJI=new RegExp(V,"g");L.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");L.BYTE=new RegExp(ge,"g");L.NUMERIC=new RegExp(Dt,"g");L.ALPHANUMERIC=new RegExp(pe,"g");const he=new RegExp("^"+V+"$"),me=new RegExp("^"+Dt+"$"),be=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");L.testKanji=function(t){return he.test(t)};L.testNumeric=function(t){return me.test(t)};L.testAlphanumeric=function(t){return be.test(t)};(function(e){const t=ht,n=L;e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(a,s){if(!a.ccBits)throw new Error("Invalid mode: "+a);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?a.ccBits[0]:s<27?a.ccBits[1]:a.ccBits[2]},e.getBestModeForData=function(a){return n.testNumeric(a)?e.NUMERIC:n.testAlphanumeric(a)?e.ALPHANUMERIC:n.testKanji(a)?e.KANJI:e.BYTE},e.toString=function(a){if(a&&a.id)return a.id;throw new Error("Invalid mode")},e.isValid=function(a){return a&&a.bit&&a.ccBits};function o(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+r)}}e.from=function(a,s){if(e.isValid(a))return a;try{return o(a)}catch{return s}}})(U);(function(e){const t=P,n=et,o=tt,r=U,a=ht,s=7973,i=t.getBCHDigit(s);function c(p,d,m){for(let C=1;C<=40;C++)if(d<=e.getCapacity(C,m,p))return C}function l(p,d){return r.getCharCountIndicator(p,d)+4}function u(p,d){let m=0;return p.forEach(function(C){const A=l(C.mode,d);m+=A+C.getBitsLength()}),m}function y(p,d){for(let m=1;m<=40;m++)if(u(p,m)<=e.getCapacity(m,d,r.MIXED))return m}e.from=function(d,m){return a.isValid(d)?parseInt(d,10):m},e.getCapacity=function(d,m,C){if(!a.isValid(d))throw new Error("Invalid QR Code version");typeof C>"u"&&(C=r.BYTE);const A=t.getSymbolTotalCodewords(d),g=n.getTotalCodewordsCount(d,m),v=(A-g)*8;if(C===r.MIXED)return v;const f=v-l(C,d);switch(C){case r.NUMERIC:return Math.floor(f/10*3);case r.ALPHANUMERIC:return Math.floor(f/11*2);case r.KANJI:return Math.floor(f/13);case r.BYTE:default:return Math.floor(f/8)}},e.getBestVersionForData=function(d,m){let C;const A=o.from(m,o.M);if(Array.isArray(d)){if(d.length>1)return y(d,A);if(d.length===0)return 1;C=d[0]}else C=d;return c(C.mode,C.getLength(),A)},e.getEncodedBits=function(d){if(!a.isValid(d)||d<7)throw new Error("Invalid QR Code version");let m=d<<12;for(;t.getBCHDigit(m)-i>=0;)m^=s<<t.getBCHDigit(m)-i;return d<<12|m}})(Rt);var $t={};const lt=P,Ut=1335,ye=21522,Et=lt.getBCHDigit(Ut);$t.getEncodedBits=function(t,n){const o=t.bit<<3|n;let r=o<<10;for(;lt.getBCHDigit(r)-Et>=0;)r^=Ut<<lt.getBCHDigit(r)-Et;return(o<<10|r)^ye};var _t={};const we=U;function Z(e){this.mode=we.NUMERIC,this.data=e.toString()}Z.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)};Z.prototype.getLength=function(){return this.data.length};Z.prototype.getBitsLength=function(){return Z.getBitsLength(this.data.length)};Z.prototype.write=function(t){let n,o,r;for(n=0;n+3<=this.data.length;n+=3)o=this.data.substr(n,3),r=parseInt(o,10),t.put(r,10);const a=this.data.length-n;a>0&&(o=this.data.substr(n),r=parseInt(o,10),t.put(r,a*3+1))};var ve=Z;const Ce=U,rt=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function F(e){this.mode=Ce.ALPHANUMERIC,this.data=e}F.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)};F.prototype.getLength=function(){return this.data.length};F.prototype.getBitsLength=function(){return F.getBitsLength(this.data.length)};F.prototype.write=function(t){let n;for(n=0;n+2<=this.data.length;n+=2){let o=rt.indexOf(this.data[n])*45;o+=rt.indexOf(this.data[n+1]),t.put(o,11)}this.data.length%2&&t.put(rt.indexOf(this.data[n]),6)};var Ee=F;const ze=U;function q(e){this.mode=ze.BYTE,typeof e=="string"?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}q.getBitsLength=function(t){return t*8};q.prototype.getLength=function(){return this.data.length};q.prototype.getBitsLength=function(){return q.getBitsLength(this.data.length)};q.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)};var Se=q;const ke=U,Ae=P;function H(e){this.mode=ke.KANJI,this.data=e}H.getBitsLength=function(t){return t*13};H.prototype.getLength=function(){return this.data.length};H.prototype.getBitsLength=function(){return H.getBitsLength(this.data.length)};H.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=Ae.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw new Error("Invalid SJIS character: "+this.data[t]+`
|
|
159
|
+
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}};var Ne=H,Zt={exports:{}};(function(e){var t={single_source_shortest_paths:function(n,o,r){var a={},s={};s[o]=0;var i=t.PriorityQueue.make();i.push(o,0);for(var c,l,u,y,p,d,m,C,A;!i.empty();){c=i.pop(),l=c.value,y=c.cost,p=n[l]||{};for(u in p)p.hasOwnProperty(u)&&(d=p[u],m=y+d,C=s[u],A=typeof s[u]>"u",(A||C>m)&&(s[u]=m,i.push(u,m),a[u]=l))}if(typeof r<"u"&&typeof s[r]>"u"){var g=["Could not find a path from ",o," to ",r,"."].join("");throw new Error(g)}return a},extract_shortest_path_from_predecessor_list:function(n,o){for(var r=[],a=o;a;)r.push(a),n[a],a=n[a];return r.reverse(),r},find_path:function(n,o,r){var a=t.single_source_shortest_paths(n,o,r);return t.extract_shortest_path_from_predecessor_list(a,r)},PriorityQueue:{make:function(n){var o=t.PriorityQueue,r={},a;n=n||{};for(a in o)o.hasOwnProperty(a)&&(r[a]=o[a]);return r.queue=[],r.sorter=n.sorter||o.default_sorter,r},default_sorter:function(n,o){return n.cost-o.cost},push:function(n,o){var r={value:n,cost:o};this.queue.push(r),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(Zt);var xe=Zt.exports;(function(e){const t=U,n=ve,o=Ee,r=Se,a=Ne,s=L,i=P,c=xe;function l(g){return unescape(encodeURIComponent(g)).length}function u(g,v,f){const h=[];let E;for(;(E=g.exec(f))!==null;)h.push({data:E[0],index:E.index,mode:v,length:E[0].length});return h}function y(g){const v=u(s.NUMERIC,t.NUMERIC,g),f=u(s.ALPHANUMERIC,t.ALPHANUMERIC,g);let h,E;return i.isKanjiModeEnabled()?(h=u(s.BYTE,t.BYTE,g),E=u(s.KANJI,t.KANJI,g)):(h=u(s.BYTE_KANJI,t.BYTE,g),E=[]),v.concat(f,h,E).sort(function(b,S){return b.index-S.index}).map(function(b){return{data:b.data,mode:b.mode,length:b.length}})}function p(g,v){switch(v){case t.NUMERIC:return n.getBitsLength(g);case t.ALPHANUMERIC:return o.getBitsLength(g);case t.KANJI:return a.getBitsLength(g);case t.BYTE:return r.getBitsLength(g)}}function d(g){return g.reduce(function(v,f){const h=v.length-1>=0?v[v.length-1]:null;return h&&h.mode===f.mode?(v[v.length-1].data+=f.data,v):(v.push(f),v)},[])}function m(g){const v=[];for(let f=0;f<g.length;f++){const h=g[f];switch(h.mode){case t.NUMERIC:v.push([h,{data:h.data,mode:t.ALPHANUMERIC,length:h.length},{data:h.data,mode:t.BYTE,length:h.length}]);break;case t.ALPHANUMERIC:v.push([h,{data:h.data,mode:t.BYTE,length:h.length}]);break;case t.KANJI:v.push([h,{data:h.data,mode:t.BYTE,length:l(h.data)}]);break;case t.BYTE:v.push([{data:h.data,mode:t.BYTE,length:l(h.data)}])}}return v}function C(g,v){const f={},h={start:{}};let E=["start"];for(let z=0;z<g.length;z++){const b=g[z],S=[];for(let T=0;T<b.length;T++){const I=b[T],R=""+z+T;S.push(R),f[R]={node:I,lastCount:0},h[R]={};for(let D=0;D<E.length;D++){const B=E[D];f[B]&&f[B].node.mode===I.mode?(h[B][R]=p(f[B].lastCount+I.length,I.mode)-p(f[B].lastCount,I.mode),f[B].lastCount+=I.length):(f[B]&&(f[B].lastCount=I.length),h[B][R]=p(I.length,I.mode)+4+t.getCharCountIndicator(I.mode,v))}}E=S}for(let z=0;z<E.length;z++)h[E[z]].end=0;return{map:h,table:f}}function A(g,v){let f;const h=t.getBestModeForData(g);if(f=t.from(v,h),f!==t.BYTE&&f.bit<h.bit)throw new Error('"'+g+'" cannot be encoded with mode '+t.toString(f)+`.
|
|
160
|
+
Suggested mode is: `+t.toString(h));switch(f===t.KANJI&&!i.isKanjiModeEnabled()&&(f=t.BYTE),f){case t.NUMERIC:return new n(g);case t.ALPHANUMERIC:return new o(g);case t.KANJI:return new a(g);case t.BYTE:return new r(g)}}e.fromArray=function(v){return v.reduce(function(f,h){return typeof h=="string"?f.push(A(h,null)):h.data&&f.push(A(h.data,h.mode)),f},[])},e.fromString=function(v,f){const h=y(v,i.isKanjiModeEnabled()),E=m(h),z=C(E,f),b=c.find_path(z.map,"start","end"),S=[];for(let T=1;T<b.length-1;T++)S.push(z.table[b[T]].node);return e.fromArray(d(S))},e.rawSplit=function(v){return e.fromArray(y(v,i.isKanjiModeEnabled()))}})(_t);const ot=P,at=tt,Te=le,Be=ue,Ie=Bt,Pe=It,ut=Pt,dt=et,Le=fe,W=Rt,Me=$t,Re=U,it=_t;function De(e,t){const n=e.size,o=Pe.getPositions(t);for(let r=0;r<o.length;r++){const a=o[r][0],s=o[r][1];for(let i=-1;i<=7;i++)if(!(a+i<=-1||n<=a+i))for(let c=-1;c<=7;c++)s+c<=-1||n<=s+c||(i>=0&&i<=6&&(c===0||c===6)||c>=0&&c<=6&&(i===0||i===6)||i>=2&&i<=4&&c>=2&&c<=4?e.set(a+i,s+c,!0,!0):e.set(a+i,s+c,!1,!0))}}function $e(e){const t=e.size;for(let n=8;n<t-8;n++){const o=n%2===0;e.set(n,6,o,!0),e.set(6,n,o,!0)}}function Ue(e,t){const n=Ie.getPositions(t);for(let o=0;o<n.length;o++){const r=n[o][0],a=n[o][1];for(let s=-2;s<=2;s++)for(let i=-2;i<=2;i++)s===-2||s===2||i===-2||i===2||s===0&&i===0?e.set(r+s,a+i,!0,!0):e.set(r+s,a+i,!1,!0)}}function _e(e,t){const n=e.size,o=W.getEncodedBits(t);let r,a,s;for(let i=0;i<18;i++)r=Math.floor(i/3),a=i%3+n-8-3,s=(o>>i&1)===1,e.set(r,a,s,!0),e.set(a,r,s,!0)}function st(e,t,n){const o=e.size,r=Me.getEncodedBits(t,n);let a,s;for(a=0;a<15;a++)s=(r>>a&1)===1,a<6?e.set(a,8,s,!0):a<8?e.set(a+1,8,s,!0):e.set(o-15+a,8,s,!0),a<8?e.set(8,o-a-1,s,!0):a<9?e.set(8,15-a-1+1,s,!0):e.set(8,15-a-1,s,!0);e.set(o-8,8,1,!0)}function Ze(e,t){const n=e.size;let o=-1,r=n-1,a=7,s=0;for(let i=n-1;i>0;i-=2)for(i===6&&i--;;){for(let c=0;c<2;c++)if(!e.isReserved(r,i-c)){let l=!1;s<t.length&&(l=(t[s]>>>a&1)===1),e.set(r,i-c,l),a--,a===-1&&(s++,a=7)}if(r+=o,r<0||n<=r){r-=o,o=-o;break}}}function Fe(e,t,n){const o=new Te;n.forEach(function(c){o.put(c.mode.bit,4),o.put(c.getLength(),Re.getCharCountIndicator(c.mode,e)),c.write(o)});const r=ot.getSymbolTotalCodewords(e),a=dt.getTotalCodewordsCount(e,t),s=(r-a)*8;for(o.getLengthInBits()+4<=s&&o.put(0,4);o.getLengthInBits()%8!==0;)o.putBit(0);const i=(s-o.getLengthInBits())/8;for(let c=0;c<i;c++)o.put(c%2?17:236,8);return qe(o,e,t)}function qe(e,t,n){const o=ot.getSymbolTotalCodewords(t),r=dt.getTotalCodewordsCount(t,n),a=o-r,s=dt.getBlocksCount(t,n),i=o%s,c=s-i,l=Math.floor(o/s),u=Math.floor(a/s),y=u+1,p=l-u,d=new Le(p);let m=0;const C=new Array(s),A=new Array(s);let g=0;const v=new Uint8Array(e.buffer);for(let b=0;b<s;b++){const S=b<c?u:y;C[b]=v.slice(m,m+S),A[b]=d.encode(C[b]),m+=S,g=Math.max(g,S)}const f=new Uint8Array(o);let h=0,E,z;for(E=0;E<g;E++)for(z=0;z<s;z++)E<C[z].length&&(f[h++]=C[z][E]);for(E=0;E<p;E++)for(z=0;z<s;z++)f[h++]=A[z][E];return f}function He(e,t,n,o){let r;if(Array.isArray(e))r=it.fromArray(e);else if(typeof e=="string"){let l=t;if(!l){const u=it.rawSplit(e);l=W.getBestVersionForData(u,n)}r=it.fromString(e,l||40)}else throw new Error("Invalid data");const a=W.getBestVersionForData(r,n);if(!a)throw new Error("The amount of data is too big to be stored in a QR Code");if(!t)t=a;else if(t<a)throw new Error(`
|
|
161
|
+
The chosen QR Code version cannot contain this amount of data.
|
|
162
|
+
Minimum version required to store current data is: `+a+`.
|
|
163
|
+
`);const s=Fe(t,n,r),i=ot.getSymbolSize(t),c=new Be(i);return De(c,t),$e(c),Ue(c,t),st(c,n,0),t>=7&&_e(c,t),Ze(c,s),isNaN(o)&&(o=ut.getBestMask(c,st.bind(null,c,n))),ut.applyMask(o,c),st(c,n,o),{modules:c,version:t,errorCorrectionLevel:n,maskPattern:o,segments:r}}xt.create=function(t,n){if(typeof t>"u"||t==="")throw new Error("No input text");let o=at.M,r,a;return typeof n<"u"&&(o=at.from(n.errorCorrectionLevel,at.M),r=W.from(n.version),a=ut.from(n.maskPattern),n.toSJISFunc&&ot.setToSJISFunction(n.toSJISFunc)),He(t,r,o,a)};var Ft={},mt={};(function(e){function t(n){if(typeof n=="number"&&(n=n.toString()),typeof n!="string")throw new Error("Color should be defined as hex string");let o=n.slice().replace("#","").split("");if(o.length<3||o.length===5||o.length>8)throw new Error("Invalid hex color: "+n);(o.length===3||o.length===4)&&(o=Array.prototype.concat.apply([],o.map(function(a){return[a,a]}))),o.length===6&&o.push("F","F");const r=parseInt(o.join(""),16);return{r:r>>24&255,g:r>>16&255,b:r>>8&255,a:r&255,hex:"#"+o.slice(0,6).join("")}}e.getOptions=function(o){o||(o={}),o.color||(o.color={});const r=typeof o.margin>"u"||o.margin===null||o.margin<0?4:o.margin,a=o.width&&o.width>=21?o.width:void 0,s=o.scale||4;return{width:a,scale:a?4:s,margin:r,color:{dark:t(o.color.dark||"#000000ff"),light:t(o.color.light||"#ffffffff")},type:o.type,rendererOpts:o.rendererOpts||{}}},e.getScale=function(o,r){return r.width&&r.width>=o+r.margin*2?r.width/(o+r.margin*2):r.scale},e.getImageWidth=function(o,r){const a=e.getScale(o,r);return Math.floor((o+r.margin*2)*a)},e.qrToImageData=function(o,r,a){const s=r.modules.size,i=r.modules.data,c=e.getScale(s,a),l=Math.floor((s+a.margin*2)*c),u=a.margin*c,y=[a.color.light,a.color.dark];for(let p=0;p<l;p++)for(let d=0;d<l;d++){let m=(p*l+d)*4,C=a.color.light;if(p>=u&&d>=u&&p<l-u&&d<l-u){const A=Math.floor((p-u)/c),g=Math.floor((d-u)/c);C=y[i[A*s+g]?1:0]}o[m++]=C.r,o[m++]=C.g,o[m++]=C.b,o[m]=C.a}}})(mt);(function(e){const t=mt;function n(r,a,s){r.clearRect(0,0,a.width,a.height),a.style||(a.style={}),a.height=s,a.width=s,a.style.height=s+"px",a.style.width=s+"px"}function o(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(a,s,i){let c=i,l=s;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),s||(l=o()),c=t.getOptions(c);const u=t.getImageWidth(a.modules.size,c),y=l.getContext("2d"),p=y.createImageData(u,u);return t.qrToImageData(p.data,a,c),n(y,l,u),y.putImageData(p,0,0),l},e.renderToDataURL=function(a,s,i){let c=i;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),c||(c={});const l=e.render(a,s,c),u=c.type||"image/png",y=c.rendererOpts||{};return l.toDataURL(u,y.quality)}})(Ft);var qt={};const Oe=mt;function zt(e,t){const n=e.a/255,o=t+'="'+e.hex+'"';return n<1?o+" "+t+'-opacity="'+n.toFixed(2).slice(1)+'"':o}function ct(e,t,n){let o=e+t;return typeof n<"u"&&(o+=" "+n),o}function Ve(e,t,n){let o="",r=0,a=!1,s=0;for(let i=0;i<e.length;i++){const c=Math.floor(i%t),l=Math.floor(i/t);!c&&!a&&(a=!0),e[i]?(s++,i>0&&c>0&&e[i-1]||(o+=a?ct("M",c+n,.5+l+n):ct("m",r,0),r=0,a=!1),c+1<t&&e[i+1]||(o+=ct("h",s),s=0)):r++}return o}qt.render=function(t,n,o){const r=Oe.getOptions(n),a=t.modules.size,s=t.modules.data,i=a+r.margin*2,c=r.color.light.a?"<path "+zt(r.color.light,"fill")+' d="M0 0h'+i+"v"+i+'H0z"/>':"",l="<path "+zt(r.color.dark,"stroke")+' d="'+Ve(s,a,r.margin)+'"/>',u='viewBox="0 0 '+i+" "+i+'"',p='<svg xmlns="http://www.w3.org/2000/svg" '+(r.width?'width="'+r.width+'" height="'+r.width+'" ':"")+u+' shape-rendering="crispEdges">'+c+l+`</svg>
|
|
164
|
+
`;return typeof o=="function"&&o(null,p),p};const je=se,ft=xt,Ht=Ft,Ke=qt;function bt(e,t,n,o,r){const a=[].slice.call(arguments,1),s=a.length,i=typeof a[s-1]=="function";if(!i&&!je())throw new Error("Callback required as last argument");if(i){if(s<2)throw new Error("Too few arguments provided");s===2?(r=n,n=t,t=o=void 0):s===3&&(t.getContext&&typeof r>"u"?(r=o,o=void 0):(r=o,o=n,n=t,t=void 0))}else{if(s<1)throw new Error("Too few arguments provided");return s===1?(n=t,t=o=void 0):s===2&&!t.getContext&&(o=n,n=t,t=void 0),new Promise(function(c,l){try{const u=ft.create(n,o);c(e(u,t,o))}catch(u){l(u)}})}try{const c=ft.create(n,o);r(null,e(c,t,o))}catch(c){r(c)}}ft.create;bt.bind(null,Ht.render);var Ye=bt.bind(null,Ht.renderToDataURL);bt.bind(null,function(e,t,n){return Ke.render(e,n)});const Je=(e="light")=>{document.querySelectorAll("style[data-zap-dialog-styles]").forEach(o=>o.remove());const n=document.createElement("style");n.setAttribute("data-zap-dialog-styles","true"),n.textContent=ie(e),document.head.appendChild(n)};async function Ge(e){var wt;const{npub:t,relays:n,cachedDialogComponent:o,buttonColor:r,fixedAmount:a,defaultAmount:s,initialAmount:i,url:c}=e,l=Qt(t);if(customElements.get("dialog-component")||await customElements.whenDefined("dialog-component"),o){const w=document.querySelector(".nostr-base-dialog");if(w){w.classList.remove("success"),w.querySelectorAll(".amount-buttons, .update-zap-container, .comment-container, .cta-btn, .copy-btn").forEach(K=>{K instanceof HTMLElement&&(K.style.display="")});const k=w.querySelector(".update-zap-btn");k&&(k.style.display="");const M=w.querySelector(".success-overlay");return M&&(M.style.opacity="0",M.style.pointerEvents="none"),v(w),o.showModal(),o}}const u=[21,100,1e3];let y;typeof a=="number"&&a>0?y=a:typeof s=="number"&&s>0?y=s:typeof i=="number"&&i>0?y=i:y=u[0];let p="",d="",m=null;async function C(w,x){const k=l,M=await Wt(k),K=await Xt(M),vt=await te({zapEndpoint:K,amount:w*1e3,comment:x,authorId:k,nip19Target:void 0,normalizedRelays:n.split(","),anon:e.anon,url:c});d=vt;const Kt=n.split(",");m&&m(),m=ee({relays:Kt,receiversPubKey:l,invoice:vt,onSuccess:yt})}async function A(w){try{return await Ye(w,{width:240,margin:1,color:{dark:"#000000",light:"#ffffff"}})}catch(x){return console.error("Failed to generate QR code:",x),`data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240" viewBox="0 0 100 100">
|
|
165
|
+
<rect width="100%" height="100%" fill="white"/>
|
|
166
|
+
<text x="50%" y="50%" font-family="monospace" font-size="10" text-anchor="middle" dominant-baseline="middle" fill="black">
|
|
167
|
+
Invoice: ${w.substring(0,10)}...
|
|
168
|
+
</text>
|
|
169
|
+
</svg>`}}function g(w,x){w.querySelectorAll("button").forEach(k=>{k.dataset.val===String(x)?k.classList.add("active"):k.classList.remove("active")})}async function v(w){w.classList.add("loading");try{await C(y,p);const x=w.querySelector("img.qr");A(d).then(M=>{x.src=M});const k=w.querySelector(".cta-btn");k.disabled=!1}finally{w.classList.remove("loading")}}Je(e.theme||"light");const f=document.createElement("dialog-component");f.setAttribute("header","Send a Zap"),e.theme&&f.setAttribute("data-theme",e.theme);const h=u.map(w=>`<button type="button" data-val="${w}">${w} ⚡</button>`).join(""),E=typeof a=="number"&&a>0;f.innerHTML=`
|
|
170
|
+
<div class="zap-dialog-content">
|
|
171
|
+
${E?"":`<div class="amount-buttons">${h}</div>`}
|
|
172
|
+
${E?`<p class="zapping-amount">Zapping ${a} sats</p>`:""}
|
|
173
|
+
${E?"":`<div class="update-zap-container">
|
|
174
|
+
<input type="number" min="1" placeholder="Custom sats" class="custom-amount" style="width:100%;padding:8px;border:1px solid #e2e8f0;border-radius:6px" />
|
|
175
|
+
<button type="button" class="update-zap-btn" style="padding:8px 12px;border:none;border-radius:6px;background:#7f00ff;color:#fff">Update Zap</button>
|
|
176
|
+
</div>`}
|
|
177
|
+
${E?"":`<div class="comment-container">
|
|
178
|
+
<input type="text" placeholder="Comment (optional)" class="comment-input" style="width:100%;padding:8px;border:1px solid #e2e8f0;border-radius:6px" />
|
|
179
|
+
<button type="button" class="add-comment-btn" style="padding:8px 12px;border:none;border-radius:6px;background:#7f00ff;color:#fff">Add</button>
|
|
180
|
+
</div>`}
|
|
181
|
+
<img class="qr" width="240" height="240" alt="QR" style="cursor:pointer" />
|
|
182
|
+
<br />
|
|
183
|
+
<button type="button" class="copy-btn">Copy invoice</button>
|
|
184
|
+
<button type="button" class="cta-btn" disabled>Open in wallet</button>
|
|
185
|
+
<div class="loading-overlay"><div class="loader"></div></div>
|
|
186
|
+
<div class="success-overlay">⚡ Thank you!</div>
|
|
187
|
+
</div>
|
|
188
|
+
`,f.showModal();const z=f.querySelector(".nostr-base-dialog")||((wt=f.shadowRoot)==null?void 0:wt.querySelector(".nostr-base-dialog"))||document.body.querySelector(".nostr-base-dialog");if(!z)throw console.error("[showZapDialog] Failed to find dialog element after showModal()"),new Error("Dialog element not found. The dialog may not have been created properly.");const b=z,S=b.querySelector(".amount-buttons");S&&S.addEventListener("click",async w=>{const x=w.target;if(x.tagName==="BUTTON"){const k=Number(x.dataset.val);if(!isNaN(k)){y=k,g(S,k);const M=b.querySelector(".cta-btn");M.disabled=!0,await v(b)}}});const T=b.querySelector(".custom-amount");T&&T.addEventListener("input",async w=>{const x=Number(w.target.value);if(x>0){y=x,S&&g(S,-1);const k=b.querySelector(".cta-btn");k.disabled=!0}});const I=b.querySelector(".comment-input");I&&I.addEventListener("input",w=>{p=w.target.value.slice(0,200)});const R=async()=>{d&&(await navigator.clipboard.writeText(d),b.querySelector(".copy-btn").textContent="Copied!",setTimeout(()=>{b.querySelector(".copy-btn").textContent="Copy invoice"},1500))};b.querySelector(".copy-btn").onclick=R,b.querySelector("img.qr").onclick=R;const D=b.querySelector(".update-zap-btn");D&&D.addEventListener("click",async()=>{const w=Number(T==null?void 0:T.value);!isNaN(w)&&w>0&&(y=w,D.disabled=!0,await v(b),D.disabled=!1)});const B=b.querySelector(".add-comment-btn");B&&B.addEventListener("click",async()=>{B.disabled=!0,await v(b),B.disabled=!1}),b.querySelector(".cta-btn").onclick=async()=>{if(d){if(window.webln)try{await window.webln.enable(),await window.webln.sendPayment(d),yt();return}catch(w){console.error("Nostr-Components: Zap button: webln payment failed",w),b.close()}window.location.href=`lightning:${d}`}};function yt(){b.classList.add("success");const w=b.querySelector(".success-overlay");w.style.opacity="1",w.style.pointerEvents="none",b.querySelectorAll(".amount-buttons, .update-zap-container, .comment-container, .cta-btn, .copy-btn").forEach(k=>{k instanceof HTMLElement&&(k.style.display="none")})}if(b.addEventListener("close",()=>{m&&m()}),r){const w=r;b.querySelector(".cta-btn").style.background=w,b.querySelector(".cta-btn").style.color=Qe(w)}if(await v(b),S&&u.includes(y))g(S,y);else if(!E){const w=b.querySelector(".custom-amount");w&&(w.value=String(y)),S&&g(S,-1)}return f}function Qe(e){e=e.replace("#",""),e.length===3&&(e=e.split("").map(a=>a+a).join(""));const t=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),o=parseInt(e.slice(4,6),16);return(t*299+n*587+o*114)/1e3>125?"#000":"#fff"}const We=()=>`
|
|
189
|
+
/* Help Dialog Content Styles */
|
|
190
|
+
.help-content {
|
|
191
|
+
padding: var(--nostrc-spacing-md, 12px);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.help-content p {
|
|
195
|
+
margin: 0 0 var(--nostrc-spacing-md, 12px) 0;
|
|
196
|
+
color: var(--nostrc-theme-text-primary, #333333);
|
|
197
|
+
line-height: 1.5;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.help-content p:last-child {
|
|
201
|
+
margin-bottom: 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.help-content ul {
|
|
205
|
+
margin: 0 0 var(--nostrc-spacing-md, 12px) 0;
|
|
206
|
+
padding-left: var(--nostrc-spacing-lg, 16px);
|
|
207
|
+
color: var(--nostrc-theme-text-primary, #333333);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.help-content li {
|
|
211
|
+
margin-bottom: var(--nostrc-spacing-xs, 4px);
|
|
212
|
+
line-height: 1.5;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.help-content li:last-child {
|
|
216
|
+
margin-bottom: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.help-content strong {
|
|
220
|
+
font-weight: 600;
|
|
221
|
+
color: var(--nostrc-theme-text-primary, #333333);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.help-content a:not(.youtube-link) {
|
|
225
|
+
color: var(--nostrc-theme-primary, #0066cc);
|
|
226
|
+
text-decoration: underline;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.help-content a:not(.youtube-link):hover {
|
|
230
|
+
color: var(--nostrc-theme-primary-hover, #0052a3);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.youtube-link {
|
|
234
|
+
display: inline-block;
|
|
235
|
+
background: var(--nostrc-color-primary, #7f00ff);
|
|
236
|
+
color: var(--nostrc-color-text-on-primary, #ffffff);
|
|
237
|
+
padding: var(--nostrc-spacing-sm, 8px) var(--nostrc-spacing-md, 12px);
|
|
238
|
+
border-radius: var(--nostrc-border-radius-md, 6px);
|
|
239
|
+
text-decoration: none;
|
|
240
|
+
font-weight: var(--nostrc-font-weight-medium, 500);
|
|
241
|
+
margin-top: var(--nostrc-spacing-md, 12px);
|
|
242
|
+
transition: background-color 0.2s ease;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.youtube-link:hover {
|
|
246
|
+
background: var(--nostrc-color-primary-hover, #6b00d9);
|
|
247
|
+
}
|
|
248
|
+
`,Xe="https://www.youtube.com/shorts/PDnrh8pkF3g",tn=()=>{if(document.querySelector("style[data-help-dialog-styles]"))return;const e=document.createElement("style");e.setAttribute("data-help-dialog-styles","true"),e.textContent=We(),document.head.appendChild(e)},en=async e=>{tn(),customElements.get("dialog-component")||await customElements.whenDefined("dialog-component");const t=document.createElement("dialog-component");t.setAttribute("header","What is a Zap?"),e&&t.setAttribute("data-theme",e),t.innerHTML=`
|
|
249
|
+
<div class="help-content">
|
|
250
|
+
<p>Send instant tips to support content creators! Zaps are small Bitcoin Lightning payments that go directly to creators—no middleman.</p>
|
|
251
|
+
<ul>
|
|
252
|
+
<li>Send any amount instantly</li>
|
|
253
|
+
<li>Money goes straight to the creator</li>
|
|
254
|
+
<li>Powered by Bitcoin Lightning Network</li>
|
|
255
|
+
</ul>
|
|
256
|
+
<p><strong>How it works:</strong> Click zap, choose amount, scan QR code with a Lightning wallet, done!</p>
|
|
257
|
+
<a href="${Xe}" target="_blank" rel="noopener noreferrer" class="youtube-link">
|
|
258
|
+
Watch Tutorial
|
|
259
|
+
</a>
|
|
260
|
+
</div>
|
|
261
|
+
`,t.showModal()};function nn(e="light"){const t=e==="dark";return St(`
|
|
262
|
+
/* === ZAPPERS DIALOG CONTENT STYLES === */
|
|
263
|
+
.zappers-dialog-content {
|
|
264
|
+
overflow: hidden;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.zappers-list {
|
|
268
|
+
max-height: 60vh;
|
|
269
|
+
overflow-y: auto;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Individual zap entry */
|
|
273
|
+
.zap-entry {
|
|
274
|
+
padding: var(--nostrc-spacing-md, 16px);
|
|
275
|
+
border-bottom: 1px solid ${t?"#333333":"#f3f4f6"};
|
|
276
|
+
transition: background-color 0.2s ease;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.zap-entry:last-child {
|
|
280
|
+
border-bottom: none;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.zap-entry:hover {
|
|
284
|
+
background: ${t?"#2a2a2a":"#f9fafb"};
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.zap-author-info {
|
|
288
|
+
display: flex;
|
|
289
|
+
align-items: center;
|
|
290
|
+
gap: var(--nostrc-spacing-md, 16px);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.zap-author-picture {
|
|
294
|
+
width: 40px;
|
|
295
|
+
height: 40px;
|
|
296
|
+
border-radius: var(--nostrc-border-radius-full, 50%);
|
|
297
|
+
object-fit: cover;
|
|
298
|
+
border: 2px solid ${t?"#374151":"#e5e7eb"};
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.zap-author-picture-default {
|
|
302
|
+
width: 40px;
|
|
303
|
+
height: 40px;
|
|
304
|
+
border-radius: var(--nostrc-border-radius-full, 50%);
|
|
305
|
+
background: ${t?"#374151":"#f3f4f6"};
|
|
306
|
+
display: flex;
|
|
307
|
+
align-items: center;
|
|
308
|
+
justify-content: center;
|
|
309
|
+
font-size: var(--nostrc-font-size-lg, 18px);
|
|
310
|
+
color: ${t?"#9ca3af":"#6b7280"};
|
|
311
|
+
border: 2px solid ${t?"#4b5563":"#d1d5db"};
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.zap-author-details {
|
|
315
|
+
flex: 1;
|
|
316
|
+
min-width: 0;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.zap-author-link {
|
|
320
|
+
display: block;
|
|
321
|
+
font-weight: 500;
|
|
322
|
+
color: ${t?"#ffffff":"#1a1a1a"};
|
|
323
|
+
text-decoration: none;
|
|
324
|
+
font-size: var(--nostrc-font-size-base, 16px);
|
|
325
|
+
margin-bottom: var(--nostrc-spacing-xs, 4px);
|
|
326
|
+
transition: color 0.2s ease;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.zap-author-link:hover {
|
|
330
|
+
color: var(--nostrc-color-primary, #7f00ff);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.zap-comment {
|
|
334
|
+
font-size: var(--nostrc-font-size-sm, 14px);
|
|
335
|
+
color: ${t?"#d1d5db":"#4b5563"};
|
|
336
|
+
margin: var(--nostrc-spacing-xs, 4px) 0;
|
|
337
|
+
line-height: 1.4;
|
|
338
|
+
word-wrap: break-word;
|
|
339
|
+
white-space: pre-wrap;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.zap-amount-date {
|
|
343
|
+
font-size: var(--nostrc-font-size-sm, 14px);
|
|
344
|
+
color: ${t?"#9ca3af":"#6b7280"};
|
|
345
|
+
display: flex;
|
|
346
|
+
align-items: center;
|
|
347
|
+
gap: var(--nostrc-spacing-xs, 4px);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/* Loading skeleton with npub */
|
|
351
|
+
.skeleton-entry {
|
|
352
|
+
display: flex;
|
|
353
|
+
align-items: center;
|
|
354
|
+
gap: var(--nostrc-spacing-md, 16px);
|
|
355
|
+
padding: var(--nostrc-spacing-md, 16px);
|
|
356
|
+
border-bottom: 1px solid ${t?"#333333":"#f3f4f6"};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.skeleton-entry:last-child {
|
|
360
|
+
border-bottom: none;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.skeleton-picture {
|
|
364
|
+
width: 40px;
|
|
365
|
+
height: 40px;
|
|
366
|
+
border-radius: var(--nostrc-border-radius-full, 50%);
|
|
367
|
+
background: linear-gradient(90deg,
|
|
368
|
+
${t?"#374151":"#f0f0f0"} 25%,
|
|
369
|
+
${t?"#4b5563":"#e0e0e0"} 50%,
|
|
370
|
+
${t?"#374151":"#f0f0f0"} 75%
|
|
371
|
+
);
|
|
372
|
+
background-size: 200% 100%;
|
|
373
|
+
animation: skeleton-loading 1.5s infinite;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.skeleton-name {
|
|
377
|
+
font-size: var(--nostrc-font-size-base, 16px);
|
|
378
|
+
font-weight: 500;
|
|
379
|
+
color: ${t?"#9ca3af":"#6b7280"};
|
|
380
|
+
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
|
|
381
|
+
word-break: break-all;
|
|
382
|
+
line-height: 1.2;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
@keyframes skeleton-loading {
|
|
386
|
+
0% {
|
|
387
|
+
background-position: 200% 0;
|
|
388
|
+
}
|
|
389
|
+
100% {
|
|
390
|
+
background-position: -200% 0;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/* Empty state */
|
|
395
|
+
.no-zaps {
|
|
396
|
+
text-align: center;
|
|
397
|
+
padding: var(--nostrc-spacing-xl, 32px);
|
|
398
|
+
color: ${t?"#9ca3af":"#6b7280"};
|
|
399
|
+
font-size: var(--nostrc-font-size-base, 16px);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* Responsive design */
|
|
403
|
+
@media (max-width: 640px) {
|
|
404
|
+
.zap-author-picture,
|
|
405
|
+
.zap-author-picture-default,
|
|
406
|
+
.skeleton-picture {
|
|
407
|
+
width: 36px;
|
|
408
|
+
height: 36px;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.zap-author-link {
|
|
412
|
+
font-size: var(--nostrc-font-size-sm, 14px);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.zap-amount-date {
|
|
416
|
+
font-size: var(--nostrc-font-size-xs, 12px);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* Scrollbar styling */
|
|
421
|
+
.zappers-list::-webkit-scrollbar {
|
|
422
|
+
width: 6px;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.zappers-list::-webkit-scrollbar-track {
|
|
426
|
+
background: ${t?"#2a2a2a":"#f1f5f9"};
|
|
427
|
+
border-radius: 3px;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.zappers-list::-webkit-scrollbar-thumb {
|
|
431
|
+
background: ${t?"#4b5563":"#cbd5e1"};
|
|
432
|
+
border-radius: 3px;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.zappers-list::-webkit-scrollbar-thumb:hover {
|
|
436
|
+
background: ${t?"#6b7280":"#94a3b8"};
|
|
437
|
+
}
|
|
438
|
+
`)}const on=(e="light")=>{document.querySelectorAll("style[data-zappers-dialog-styles]").forEach(o=>o.remove());const n=document.createElement("style");n.setAttribute("data-zappers-dialog-styles","true"),n.textContent=nn(e),document.head.appendChild(n)};function Ot(e,t){const n=X(e.authorName||"Unknown zapper"),r=`https://njump.me/${ae(e.authorNpub||"")?e.authorNpub:""}`,a=At(e.authorPicture||"")&&e.authorPicture||"",s=e.authorPicture?`<img src="${a}" alt="${n}" class="zap-author-picture" />`:'<div class="zap-author-picture-default">👤</div>',i=e.comment?`<div class="zap-comment">${e.comment}</div>`:"";return`
|
|
439
|
+
<div class="zap-entry" data-zap-index="${t}" data-author-pubkey="${e.authorPubkey}">
|
|
440
|
+
<div class="zap-author-info">
|
|
441
|
+
${s}
|
|
442
|
+
<div class="zap-author-details">
|
|
443
|
+
<a href="${r}" target="_blank" rel="noopener noreferrer" class="zap-author-link">
|
|
444
|
+
${n}
|
|
445
|
+
</a>
|
|
446
|
+
${i}
|
|
447
|
+
<div class="zap-amount-date">
|
|
448
|
+
${e.amount.toLocaleString()} ⚡ • ${kt(Math.floor(e.date.getTime()/1e3))}
|
|
449
|
+
</div>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
`}function rn(e,t,n){return`
|
|
454
|
+
<div class="zap-entry skeleton-entry" data-zap-index="${n}" data-author-pubkey="${e.authorPubkey}">
|
|
455
|
+
<div class="zap-author-info">
|
|
456
|
+
<div class="skeleton-picture"></div>
|
|
457
|
+
<div class="zap-author-details">
|
|
458
|
+
<div class="zap-author-link skeleton-name">
|
|
459
|
+
${X(t)}
|
|
460
|
+
</div>
|
|
461
|
+
<div class="zap-amount-date">
|
|
462
|
+
${e.amount.toLocaleString()} ⚡ • ${kt(Math.floor(e.date.getTime()/1e3))}
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
</div>
|
|
466
|
+
</div>
|
|
467
|
+
`}async function an(e){var i;const{zapDetails:t,theme:n="light"}=e;on(n),customElements.get("dialog-component")||await customElements.whenDefined("dialog-component");const o=document.createElement("dialog-component");o.setAttribute("header","Zappers"),e.theme&&o.setAttribute("data-theme",e.theme);const r=await sn(t);o.innerHTML=r,o.showModal();const a=o.querySelector(".nostr-base-dialog")||((i=o.shadowRoot)==null?void 0:i.querySelector(".nostr-base-dialog"))||document.body.querySelector(".nostr-base-dialog");if(!a)throw console.error("[showZappersDialog] Failed to find dialog element after showModal()"),new Error("Dialog element not found. The dialog may not have been created properly.");const s=a;return s&&t.length>0&&cn(s,t),o}async function sn(e){if(e.length===0)return`
|
|
468
|
+
<div class="zappers-dialog-content">
|
|
469
|
+
<div class="zappers-list">
|
|
470
|
+
<div class="no-zaps">No zaps received yet</div>
|
|
471
|
+
</div>
|
|
472
|
+
</div>
|
|
473
|
+
`;const t=e.map(o=>G(o.authorPubkey));return`
|
|
474
|
+
<div class="zappers-dialog-content">
|
|
475
|
+
<div class="zappers-list">
|
|
476
|
+
${e.map((o,r)=>rn(o,t[r],r)).join("")}
|
|
477
|
+
</div>
|
|
478
|
+
</div>
|
|
479
|
+
`}async function cn(e,t){const n=e.querySelector(".zappers-list");if(!n)return;const o=[...new Set(t.map(r=>r.authorPubkey))];console.log("Nostr-Components: Zappers dialog: Fetching profiles for",o.length,"unique authors");try{const r=await ne(o),a=new Map;r.forEach(i=>{a.set(i.id,i.profile)});const s=new Map;o.forEach(i=>{s.set(i,G(i))});for(let i=0;i<t.length;i++){const c=t[i],l=a.get(c.authorPubkey),u=s.get(c.authorPubkey)||c.authorPubkey;let y;if(l){const d=Nt(l);y={...c,authorName:d.display_name||d.name||u,authorPicture:d.picture,authorNpub:u}}else y={...c,authorName:u,authorNpub:u};const p=n.querySelector(`[data-zap-index="${i}"]`);if(p){const d=Ot(y,i);p.outerHTML=d}}console.log("Nostr-Components: Zappers dialog: Progressive enhancement completed for",t.length,"zap entries")}catch(r){console.error("Nostr-Components: Zappers dialog: Error in batched profile enhancement",r),console.log("Nostr-Components: Zappers dialog: Falling back to individual profile fetching"),await ln(e,t)}}async function ln(e,t){const n=e.querySelector(".zappers-list");if(!n)return;const o=new Map,r=t.map(async(a,s)=>{if(o.has(a.authorPubkey)){const i=o.get(a.authorPubkey);return{index:s,enhanced:{...a,authorName:i.authorName,authorPicture:i.authorPicture,authorNpub:i.authorNpub}}}try{const{getProfileMetadata:i}=await re(async()=>{const{getProfileMetadata:p}=await import("../assets/zap-utils-B1sz0Abx.js");return{getProfileMetadata:p}},__vite__mapDeps([0,1,2])),c=await i(a.authorPubkey),l=Nt(c),u=G(a.authorPubkey),y={...a,authorName:l.display_name||l.name||u,authorPicture:l.picture,authorNpub:u};return o.set(a.authorPubkey,y),{index:s,enhanced:y}}catch(i){console.error("Nostr-Components: Zappers dialog: Error fetching profile for",a.authorPubkey,i);const c=G(a.authorPubkey),l={...a,authorName:c,authorNpub:c};return o.set(a.authorPubkey,l),{index:s,enhanced:l}}});for(const a of r)try{const{index:s,enhanced:i}=await a,c=n.querySelector(`[data-zap-index="${s}"]`);if(c){const l=Ot(i,s);c.outerHTML=l}}catch(s){console.error("Nostr-Components: Zappers dialog: Error processing profile enhancement",s)}}function un({isLoading:e,isError:t,isSuccess:n,errorMessage:o,buttonText:r,totalZapAmount:a,isAmountLoading:s,hasZaps:i=!1}){if(t)return fn(o||"");if(e)return dn(s);const c=jt(),l=`<span>${X(r)}</span>`;return Vt(c,l,a,s,i)}function dn(e){return Vt(jt(),'<span class="button-text-skeleton"></span>',null,e)}function fn(e){return pn('<div class="error-icon">⚠</div>',X(e))}function pn(e,t){return`
|
|
480
|
+
<div class="nostr-zap-button-container">
|
|
481
|
+
<div class="nostr-zap-button-left-container">
|
|
482
|
+
${e}
|
|
483
|
+
</div>
|
|
484
|
+
<div class="nostr-zap-button-right-container">
|
|
485
|
+
${t}
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
`}function Vt(e,t,n,o,r=!1){const a=o?'<span class="total-zap-amount skeleton"></span>':n!==null?`<span class="total-zap-amount${r?" clickable":""}">${n.toLocaleString()} ⚡ sats received</span>`:"";return`
|
|
489
|
+
<div class="nostr-zap-button-container">
|
|
490
|
+
<button class="nostr-zap-button">
|
|
491
|
+
${e}
|
|
492
|
+
${t}
|
|
493
|
+
</button>
|
|
494
|
+
${a} <button class="help-icon" title="What is a zap?">?</button>
|
|
495
|
+
</div>
|
|
496
|
+
`}function jt(){return'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13 2L3 14h7v8l10-12h-7z" fill="#FFC800"/></svg>'}function gn(){return St(`
|
|
497
|
+
/* === ZAP BUTTON CONTAINER PATTERN === */
|
|
498
|
+
:host {
|
|
499
|
+
/* Icon sizing (overridable via CSS variables) */
|
|
500
|
+
--nostrc-icon-height: 25px;
|
|
501
|
+
--nostrc-icon-width: 25px;
|
|
502
|
+
|
|
503
|
+
/* Zap button CSS variables (overridable by parent components) */
|
|
504
|
+
--nostrc-zap-btn-padding: var(--nostrc-spacing-sm) var(--nostrc-spacing-md);
|
|
505
|
+
--nostrc-zap-btn-border-radius: var(--nostrc-border-radius-md);
|
|
506
|
+
--nostrc-zap-btn-border: var(--nostrc-border-width) solid var(--nostrc-color-border);
|
|
507
|
+
--nostrc-zap-btn-min-height: 47px;
|
|
508
|
+
--nostrc-zap-btn-width: auto;
|
|
509
|
+
--nostrc-zap-btn-horizontal-alignment: left;
|
|
510
|
+
--nostrc-zap-btn-bg: var(--nostrc-theme-bg, #ffffff);
|
|
511
|
+
--nostrc-zap-btn-color: var(--nostrc-theme-text-primary, #333333);
|
|
512
|
+
--nostrc-zap-btn-font-family: var(--nostrc-font-family-primary);
|
|
513
|
+
--nostrc-zap-btn-font-size: var(--nostrc-font-size-base);
|
|
514
|
+
|
|
515
|
+
/* Hover state variables */
|
|
516
|
+
--nostrc-zap-btn-hover-bg: var(--nostrc-theme-hover-bg, rgba(0, 0, 0, 0.05));
|
|
517
|
+
--nostrc-zap-btn-hover-color: var(--nostrc-theme-text-primary, #333333);
|
|
518
|
+
--nostrc-zap-btn-hover-border: var(--nostrc-border-width) solid var(--nostrc-theme-border, var(--nostrc-color-border));
|
|
519
|
+
|
|
520
|
+
/* Make the host a flex container for button + amount */
|
|
521
|
+
display: inline-flex;
|
|
522
|
+
flex-direction: row;
|
|
523
|
+
align-items: center;
|
|
524
|
+
gap: var(--nostrc-spacing-md);
|
|
525
|
+
font-family: var(--nostrc-zap-btn-font-family);
|
|
526
|
+
font-size: var(--nostrc-zap-btn-font-size);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/* Focus state for accessibility */
|
|
530
|
+
:host(:focus-visible) {
|
|
531
|
+
outline: 2px solid var(--nostrc-color-primary, #007bff);
|
|
532
|
+
outline-offset: 2px;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
:host(.is-error) .nostr-zap-button-container {
|
|
536
|
+
border: var(--nostrc-border-width) solid var(--nostrc-color-error-text);
|
|
537
|
+
border-radius: var(--nostrc-border-radius-md);
|
|
538
|
+
padding: var(--nostrc-spacing-sm);
|
|
539
|
+
color: var(--nostrc-color-error-text);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.nostr-zap-button-container {
|
|
543
|
+
display: flex;
|
|
544
|
+
align-items: center;
|
|
545
|
+
gap: var(--nostrc-spacing-md);
|
|
546
|
+
width: fit-content;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.nostr-zap-button-left-container {
|
|
550
|
+
display: flex;
|
|
551
|
+
align-items: center;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.nostr-zap-button-right-container {
|
|
555
|
+
display: flex;
|
|
556
|
+
align-items: center;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.nostr-zap-button {
|
|
560
|
+
display: flex;
|
|
561
|
+
align-items: center;
|
|
562
|
+
justify-content: var(--nostrc-zap-btn-horizontal-alignment);
|
|
563
|
+
gap: var(--nostrc-spacing-sm);
|
|
564
|
+
background: var(--nostrc-zap-btn-bg);
|
|
565
|
+
color: var(--nostrc-zap-btn-color);
|
|
566
|
+
border: var(--nostrc-zap-btn-border);
|
|
567
|
+
border-radius: var(--nostrc-zap-btn-border-radius);
|
|
568
|
+
padding: var(--nostrc-zap-btn-padding);
|
|
569
|
+
min-height: var(--nostrc-zap-btn-min-height);
|
|
570
|
+
width: var(--nostrc-zap-btn-width);
|
|
571
|
+
cursor: pointer;
|
|
572
|
+
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
|
|
573
|
+
font-family: inherit;
|
|
574
|
+
font-size: inherit;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/* Hover state on the button */
|
|
578
|
+
.nostr-zap-button:hover {
|
|
579
|
+
background: var(--nostrc-zap-btn-hover-bg);
|
|
580
|
+
color: var(--nostrc-zap-btn-hover-color);
|
|
581
|
+
border: var(--nostrc-zap-btn-hover-border);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.nostr-zap-button:disabled {
|
|
585
|
+
pointer-events: none;
|
|
586
|
+
user-select: none;
|
|
587
|
+
opacity: 0.6;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
:host:not([user-status="ready"]) .nostr-zap-button {
|
|
591
|
+
cursor: not-allowed;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/* SVG Icon Styles */
|
|
595
|
+
.nostr-zap-button svg {
|
|
596
|
+
display: inline-block;
|
|
597
|
+
vertical-align: middle;
|
|
598
|
+
width: var(--nostrc-icon-width);
|
|
599
|
+
height: var(--nostrc-icon-height);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/* Total zap amount display */
|
|
603
|
+
.total-zap-amount {
|
|
604
|
+
font-size: var(--nostrc-font-size-sm);
|
|
605
|
+
color: var(--nostrc-theme-text-secondary, #666666);
|
|
606
|
+
white-space: nowrap;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
/* Clickable zap amount */
|
|
610
|
+
.total-zap-amount.clickable {
|
|
611
|
+
cursor: pointer;
|
|
612
|
+
transition: color 0.2s ease;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.total-zap-amount.clickable:hover {
|
|
616
|
+
color: var(--nostrc-color-primary, #7f00ff);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* Help icon */
|
|
620
|
+
.help-icon {
|
|
621
|
+
background: none;
|
|
622
|
+
border: 1px solid var(--nostrc-color-border, #e0e0e0);
|
|
623
|
+
border-radius: var(--nostrc-border-radius-full, 50%);
|
|
624
|
+
width: var(--nostrc-help-icon-size, 16px);
|
|
625
|
+
height: var(--nostrc-help-icon-size, 16px);
|
|
626
|
+
font-size: calc(var(--nostrc-help-icon-size, 16px) * 0.7);
|
|
627
|
+
font-weight: bold;
|
|
628
|
+
color: var(--nostrc-theme-text-secondary, #666666);
|
|
629
|
+
cursor: pointer;
|
|
630
|
+
display: inline-flex;
|
|
631
|
+
align-items: center;
|
|
632
|
+
justify-content: center;
|
|
633
|
+
margin-left: var(--nostrc-spacing-xs, 4px);
|
|
634
|
+
transition: all 0.2s ease;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.help-icon:hover {
|
|
638
|
+
background: var(--nostrc-color-hover-background, rgba(0, 0, 0, 0.05));
|
|
639
|
+
border-color: var(--nostrc-color-primary, #7f00ff);
|
|
640
|
+
color: var(--nostrc-color-primary, #7f00ff);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/* Skeleton loader for zap amount */
|
|
644
|
+
.total-zap-amount.skeleton {
|
|
645
|
+
background: linear-gradient(90deg,
|
|
646
|
+
var(--nostrc-color-skeleton, #f0f0f0) 25%,
|
|
647
|
+
var(--nostrc-color-skeleton-highlight, #e0e0e0) 50%,
|
|
648
|
+
var(--nostrc-color-skeleton, #f0f0f0) 75%
|
|
649
|
+
);
|
|
650
|
+
background-size: 200% 100%;
|
|
651
|
+
animation: skeleton-loading 1.5s infinite;
|
|
652
|
+
border-radius: var(--nostrc-border-radius-sm);
|
|
653
|
+
width: 80px;
|
|
654
|
+
height: 1.2em;
|
|
655
|
+
display: inline-block;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/* Skeleton loader for button text */
|
|
659
|
+
.button-text-skeleton {
|
|
660
|
+
background: linear-gradient(90deg,
|
|
661
|
+
var(--nostrc-color-skeleton, #f0f0f0) 25%,
|
|
662
|
+
var(--nostrc-color-skeleton-highlight, #e0e0e0) 50%,
|
|
663
|
+
var(--nostrc-color-skeleton, #f0f0f0) 75%
|
|
664
|
+
);
|
|
665
|
+
background-size: 200% 100%;
|
|
666
|
+
animation: skeleton-loading 1.5s infinite;
|
|
667
|
+
border-radius: var(--nostrc-border-radius-sm);
|
|
668
|
+
width: 60px;
|
|
669
|
+
height: 1em;
|
|
670
|
+
display: inline-block;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
@keyframes skeleton-loading {
|
|
674
|
+
0% {
|
|
675
|
+
background-position: 200% 0;
|
|
676
|
+
}
|
|
677
|
+
100% {
|
|
678
|
+
background-position: -200% 0;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/* Error message styling */
|
|
683
|
+
.nostr-zap-button-error small {
|
|
684
|
+
color: var(--nostrc-color-error-text);
|
|
685
|
+
font-size: var(--nostrc-font-size-sm);
|
|
686
|
+
line-height: 1em;
|
|
687
|
+
max-width: 250px;
|
|
688
|
+
white-space: pre-line;
|
|
689
|
+
}
|
|
690
|
+
`)}class hn extends Gt{constructor(){super();_(this,"zapActionStatus",this.channel("zapAction"));_(this,"zapListStatus",this.channel("zapList"));_(this,"totalZapAmount",null);_(this,"cachedZapDetails",[]);_(this,"cachedAmountDialog",null);this.zapListStatus.set(N.Loading)}connectedCallback(){var n;(n=super.connectedCallback)==null||n.call(this),this.attachDelegatedListeners(),this.render()}static get observedAttributes(){return[...super.observedAttributes,"text","amount","default-amount","url"]}attributeChangedCallback(n,o,r){o!==r&&(super.attributeChangedCallback(n,o,r),this.render())}disconnectedCallback(){this.cachedAmountDialog&&typeof this.cachedAmountDialog.close=="function"&&this.cachedAmountDialog.close()}onStatusChange(n){this.render()}onUserReady(n,o){this.render(),this.updateZapCount()}validateInputs(){if(!super.validateInputs())return this.zapActionStatus.set(N.Idle),this.zapListStatus.set(N.Idle),!1;const n=this.getAttribute("text"),o=this.getAttribute("amount"),r=this.getAttribute("default-amount"),a=this.getAttribute("url"),s=this.tagName.toLowerCase();let i=null;if(n&&n.length>128)i="Max text length: 128 characters";else if(o){const c=Number(o);isNaN(c)||c<=0?i="Invalid amount":c>21e4&&(i="Amount too high (max 210,000 sats)")}else if(r){const c=Number(r);isNaN(c)||c<=0?i="Invalid default-amount":c>21e4&&(i="Default-amount too high (max 210,000 sats)")}else a&&(At(a)||(i="Invalid URL format"));return i?(this.zapActionStatus.set(N.Error,i),this.zapListStatus.set(N.Error,i),this.userStatus.set(N.Idle),console.error(`Nostr-Components: ${s}: ${i}`),!1):!0}async handleZapClick(){if(this.userStatus.get()===N.Ready){this.zapActionStatus.set(N.Loading),this.render();try{if(!this.user){this.zapActionStatus.set(N.Error,"Could not resolve user to zap."),this.render();return}const n=this.getRelays().join(","),o=this.user.npub;this.cachedAmountDialog=await Ge({npub:o,relays:n,cachedDialogComponent:this.cachedAmountDialog,theme:this.theme==="dark"?"dark":"light",fixedAmount:(()=>{const r=this.getAttribute("amount");if(!r)return;const a=Number(r);if(isNaN(a)||a<=0||a>21e4){console.error("Nostr-Components: Zap button: Max zap amount: 210,000 sats");return}return a})(),defaultAmount:(()=>{const r=this.getAttribute("default-amount");if(!r)return 21;const a=Number(r);return isNaN(a)||a<=0||a>21e4?(console.error("Nostr-Components: Zap button: Max zap amount: 210,000 sats"),21):a})(),url:this.getAttribute("url")||void 0,anon:!1}),this.zapActionStatus.set(N.Ready)}catch(n){this.zapActionStatus.set(N.Error,(n==null?void 0:n.message)||"Unable to zap")}finally{this.render()}}}async handleHelpClick(){try{await en(this.theme==="dark"?"dark":"light")}catch(n){console.error("Error showing help dialog:",n)}}async handleZappersClick(){if(this.cachedZapDetails.length!==0)try{await an({zapDetails:this.cachedZapDetails,theme:this.theme==="dark"?"dark":"light"})}catch(n){console.error("Nostr-Components: Zap button: Error opening zappers dialog",n)}}attachDelegatedListeners(){this.delegateEvent("click",".nostr-zap-button",n=>{var o,r;(o=n.preventDefault)==null||o.call(n),(r=n.stopPropagation)==null||r.call(n),this.handleZapClick()}),this.delegateEvent("click",".help-icon",n=>{var o,r;(o=n.preventDefault)==null||o.call(n),(r=n.stopPropagation)==null||r.call(n),this.handleHelpClick()}),this.delegateEvent("click",".total-zap-amount",n=>{var o,r;(o=n.preventDefault)==null||o.call(n),(r=n.stopPropagation)==null||r.call(n),this.handleZappersClick()})}async updateZapCount(){if(this.user)try{this.zapListStatus.set(N.Loading),this.render(),await this.ensureNostrConnected();const n=await oe({pubkey:this.user.pubkey,relays:this.getRelays(),url:this.getAttribute("url")||void 0});this.totalZapAmount=n.totalAmount,this.cachedZapDetails=n.zapDetails,this.zapListStatus.set(N.Ready)}catch(n){console.error("Nostr-Components: Zap button: Failed to fetch zap count",n),this.totalZapAmount=null,this.zapListStatus.set(N.Error)}finally{this.render()}}renderContent(){const n=this.userStatus.get()==N.Loading,o=this.zapListStatus.get()==N.Loading,r=this.computeOverall()===N.Error,a=this.errorMessage,s=this.getAttribute("text")||"Zap",i={isLoading:n,isAmountLoading:o,isError:r,isSuccess:!1,errorMessage:a,buttonText:s,totalZapAmount:this.totalZapAmount,hasZaps:this.cachedZapDetails.length>0};this.shadowRoot.innerHTML=`
|
|
691
|
+
${gn()}
|
|
692
|
+
${un(i)}
|
|
693
|
+
`}}customElements.define("nostr-zap",hn);
|
|
694
|
+
//# sourceMappingURL=nostr-zap.es.js.map
|