@nibgate/sdk 0.2.20 → 0.2.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nibgate/sdk",
3
- "version": "0.2.20",
3
+ "version": "0.2.21",
4
4
  "description": "Framework-agnostic browser and server package for creator-owned gated content, unlock events, and receipts.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -33,7 +33,6 @@ function inject() {
33
33
  const s = h('style', { id: SID }, `
34
34
  @keyframes nfade { from { opacity:0;transform:translateY(6px) } to { opacity:1;transform:translateY(0) } }
35
35
  @keyframes nscale { from { opacity:0;transform:scale(0.96) } to { opacity:1;transform:scale(1) } }
36
- @keyframes nshimmer { 0% { transform:translateX(-100%) } 100% { transform:translateX(100%) } }
37
36
 
38
37
  .nui { font-family:var(--font-content,'Kumbh Sans','ABC Favorit',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif);color:${theme.fg};line-height:1.5;-webkit-font-smoothing:antialiased;font-size:19px }
39
38
  .nui *,.nui *::before,.nui *::after { box-sizing:border-box }
@@ -75,60 +74,25 @@ export function renderDefaultUnlockUI(container, resource, options = {}) {
75
74
 
76
75
  const card = el('div', { cls: 'nui', style: { animation: 'nfade .2s ease-out' } });
77
76
 
78
- const lockSVG = '<svg width="24" height="24" viewBox="0 0 32 32" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle"><path d="M6 16v8a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-8"/><path d="M10 16v-5a6 6 0 0 1 12 0v5"/><circle cx="16" cy="21" r="2"/></svg>';
77
+ const unlockSVG = '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle;margin-right:6px"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 9.9-1"/></svg>';
79
78
 
80
79
  card.innerHTML = `
81
- <div style="display:flex;flex-direction:column;align-items:center;text-align:center;max-width:580px;margin:0 auto;padding:40px 52px">
82
- <div id="nibgate-lottie" style="width:165px;height:168px;margin-bottom:24px"></div>
83
- <div style="font-size:50px;font-weight:700;letter-spacing:-.03em;color:${theme.fg};margin-bottom:12px">${esc(resource.price)} USDC</div>
84
- <div style="font-size:21px;color:${theme.muted};margin-bottom:48px">Pay to unlock this content</div>
85
- <div data-nibgate-wallet-label class="nui-mono" style="font-size:18px;color:${theme.muted};margin-bottom:40px;min-height:28px">Connect wallet</div>
86
- <div data-nibgate-unlock-wrap style="width:100%;position:relative;border-radius:12px;overflow:hidden;cursor:pointer">
87
- <div data-nibgate-unlock-progress style="position:absolute;inset:0;width:0%;background:linear-gradient(90deg,rgba(255,255,255,0.1),rgba(255,255,255,0.45));border-radius:12px;transition:width .05s linear;z-index:2"></div>
88
- <div data-nibgate-shimmer style="position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.12),transparent);border-radius:12px;transform:translateX(-100%);z-index:3;pointer-events:none"></div>
89
- <button type="button" data-nibgate-unlock disabled class="nui-btn nui-btn-primary" style="width:100%;padding:24px 32px;font-size:24px;position:relative;z-index:4;background:${theme.accent};transition:transform .1s,opacity .15s;display:flex">${lockSVG}Hold to pay ${esc(resource.price)} USDC</button></div>
90
- <div class="nui-stat" style="text-align:center;margin-top:16px" data-nibgate-status></div>
80
+ <div style="display:flex;flex-direction:column;align-items:center;text-align:center;max-width:420px;margin:0 auto;padding:24px 20px">
81
+ <div data-nibgate-wallet-label class="nui-mono" style="font-size:15px;color:${theme.muted};margin-bottom:16px;min-height:24px">Connect wallet</div>
82
+ <div data-nibgate-unlock-wrap style="width:100%;position:relative;border-radius:10px;overflow:hidden;cursor:pointer">
83
+ <div data-nibgate-unlock-progress style="position:absolute;inset:0;width:0%;background:${theme.accent};opacity:0.15;border-radius:10px;transition:width .05s linear;z-index:2"></div>
84
+ <button type="button" data-nibgate-unlock disabled style="width:100%;padding:12px 0;font-size:16px;font-weight:500;line-height:19px;border:0;border-radius:10px;outline:none;cursor:pointer;position:relative;z-index:4;color:${theme.accent};background:rgba(124,154,109,0.08);transition:box-shadow .3s,transform .3s;font-family:inherit">${unlockSVG}Hold to pay</button></div>
85
+ <div class="nui-stat" style="text-align:center;margin-top:12px" data-nibgate-status></div>
91
86
  </div>
92
- <div data-nibgate-premium hidden style="margin-top:32px;border-top:1px solid ${theme.border};padding-top:32px">${options.premiumContentHTML || ''}</div>
87
+ <div data-nibgate-premium hidden style="margin-top:24px;border-top:1px solid ${theme.border};padding-top:24px">${options.premiumContentHTML || ''}</div>
93
88
  `;
94
89
 
95
90
  (typeof container === 'string' ? document.querySelector(container) : container)?.appendChild(card);
96
- // Load Lottie animation
97
- (function loadLottie() {
98
- if (!document.getElementById('nibgate-lottie')) return;
99
-
100
- function startAnim(data) {
101
- var d = document.getElementById('nibgate-lottie');
102
- if (d && window.lottie) {
103
- window.lottie.loadAnimation({ container: d, animationData: data, loop: true, autoplay: true });
104
- }
105
- }
106
-
107
- if (window.lottie) {
108
- if (window._lottieData) {
109
- startAnim(window._lottieData);
110
- } else {
111
- fetch('/nibgate-unlock-key.json?t=1').then(function(r) { if (!r.ok) throw new Error(); return r.json(); }).then(function(d) { window._lottieData = d; startAnim(d); }).catch(function() {});
112
- }
113
- return;
114
- }
115
-
116
- if (window._lottieLoading) return;
117
- window._lottieLoading = true;
118
- var s = document.createElement('script');
119
- s.src = 'https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.12.2/lottie.min.js';
120
- s.onload = function() {
121
- fetch('/nibgate-unlock-key.json?t=1').then(function(r) { if (!r.ok) throw new Error(); return r.json(); }).then(function(d) { window._lottieData = d; startAnim(d); }).catch(function() {});
122
- };
123
- document.head.appendChild(s);
124
- })();
125
-
126
91
 
127
92
  const st = card.querySelector('[data-nibgate-status]');
128
93
  const label = card.querySelector('[data-nibgate-wallet-label]');
129
94
  const wrap = card.querySelector('[data-nibgate-unlock-wrap]');
130
95
  const prog = card.querySelector('[data-nibgate-unlock-progress]');
131
- const shimmer = card.querySelector('[data-nibgate-shimmer]');
132
96
  const btn = card.querySelector('[data-nibgate-unlock]');
133
97
 
134
98
  const HOLD_MS = 1500;
@@ -169,21 +133,20 @@ export function renderDefaultUnlockUI(container, resource, options = {}) {
169
133
  label.textContent = 'Connect wallet';
170
134
  btn.disabled = true;
171
135
  btn.style.cursor = 'default';
172
- btn.innerHTML = lockSVG + 'Hold to pay ' + esc(resource.price) + ' USDC';
136
+ btn.innerHTML = unlockSVG + 'Hold to pay';
173
137
  }
174
138
  }
175
139
 
176
- function setBtnText(t) { btn.innerHTML = lockSVG + t; }
140
+ function setBtnText(t) { btn.innerHTML = unlockSVG + t; }
177
141
 
178
142
  function resetHold() {
179
143
  holdActive = false;
180
144
  holdComplete = false;
181
145
  holdTimer = null;
182
146
  btn.style.transform = 'scale(1)';
147
+ btn.style.boxShadow = '0 4px 12px rgba(0,0,0,0.08)';
183
148
  prog.style.width = '0%';
184
- shimmer.style.animation = 'none';
185
- shimmer.style.transform = 'translateX(-100%)';
186
- if (!btn.disabled) setBtnText('Hold to pay ' + esc(resource.price) + ' USDC');
149
+ if (!btn.disabled) setBtnText('Hold to pay');
187
150
  }
188
151
 
189
152
  function startHold(e) {
@@ -192,23 +155,19 @@ export function renderDefaultUnlockUI(container, resource, options = {}) {
192
155
  holdActive = true;
193
156
  holdComplete = false;
194
157
  btn.style.transform = 'scale(.97)';
158
+ btn.style.boxShadow = '0 2px 6px rgba(0,0,0,0.12)';
195
159
  prog.style.transition = 'none';
196
160
  prog.style.width = '0%';
197
- shimmer.style.animation = 'nshimmer 1s ease-in-out infinite';
198
- shimmer.style.transform = 'none';
199
161
  setBtnText('Hold\u2026');
200
162
  requestAnimationFrame(() => {
201
163
  prog.style.transition = 'width ' + HOLD_MS + 'ms linear';
202
164
  prog.style.width = '100%';
203
165
  });
204
- const t1 = setTimeout(() => { if (holdActive && !holdComplete) setBtnText('Keep holding\u2026'); }, HOLD_MS * 0.4);
205
- const t2 = setTimeout(() => { if (holdActive && !holdComplete) setBtnText('Almost there\u2026'); }, HOLD_MS * 0.75);
206
166
  holdTimer = setTimeout(() => {
207
167
  holdComplete = true;
208
168
  holdActive = false;
209
- clearTimeout(t1); clearTimeout(t2);
210
169
  btn.style.transform = 'scale(1)';
211
- shimmer.style.animation = 'none';
170
+ btn.style.boxShadow = '0 4px 12px rgba(0,0,0,0.08)';
212
171
  prog.style.transition = 'width .05s linear';
213
172
  setBtnText('Processing\u2026');
214
173
  btn.disabled = true;