@neptune.fintech/web-ui 2.1.0 → 2.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.
Files changed (40) hide show
  1. package/dist/components/cards.d.ts +64 -0
  2. package/dist/components/cards.d.ts.map +1 -0
  3. package/dist/components/cards.js +498 -0
  4. package/dist/components/cards.js.map +1 -0
  5. package/dist/components/corporate.d.ts +84 -0
  6. package/dist/components/corporate.d.ts.map +1 -0
  7. package/dist/components/corporate.js +782 -0
  8. package/dist/components/corporate.js.map +1 -0
  9. package/dist/components/data-viz.d.ts +69 -0
  10. package/dist/components/data-viz.d.ts.map +1 -0
  11. package/dist/components/data-viz.js +526 -0
  12. package/dist/components/data-viz.js.map +1 -0
  13. package/dist/components/feedback-status.d.ts +80 -0
  14. package/dist/components/feedback-status.d.ts.map +1 -0
  15. package/dist/components/feedback-status.js +537 -0
  16. package/dist/components/feedback-status.js.map +1 -0
  17. package/dist/components/money-inputs.d.ts +105 -0
  18. package/dist/components/money-inputs.d.ts.map +1 -0
  19. package/dist/components/money-inputs.js +766 -0
  20. package/dist/components/money-inputs.js.map +1 -0
  21. package/dist/components/money-movement.d.ts +79 -0
  22. package/dist/components/money-movement.d.ts.map +1 -0
  23. package/dist/components/money-movement.js +740 -0
  24. package/dist/components/money-movement.js.map +1 -0
  25. package/dist/components/shell-layout.d.ts +103 -0
  26. package/dist/components/shell-layout.d.ts.map +1 -0
  27. package/dist/components/shell-layout.js +582 -0
  28. package/dist/components/shell-layout.js.map +1 -0
  29. package/dist/components/wallet-pay.d.ts +85 -0
  30. package/dist/components/wallet-pay.d.ts.map +1 -0
  31. package/dist/components/wallet-pay.js +633 -0
  32. package/dist/components/wallet-pay.js.map +1 -0
  33. package/dist/index.d.ts +9 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +9 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/register.d.ts.map +1 -1
  38. package/dist/register.js +65 -0
  39. package/dist/register.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,633 @@
1
+ // © 2026 Neptune.Fintech (neptune.ly) · Neptune Odyssey Community License v1.0
2
+ // Neptune Odyssey — wallet & pay surfaces
3
+ // <npt-quick-actions>/<npt-quick-action>, <npt-merchant-row>, <npt-voucher-card>,
4
+ // <npt-qr-pay>, <npt-topup-row>, <npt-tier-badge>.
5
+ // Custom-property driven only; money uses tabular figures; logical layout → mirrors in RTL.
6
+ import { NptElement, css, html, A11Y } from "./base.js";
7
+ const esc = (v) => (v ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[c]);
8
+ /**
9
+ * <npt-quick-actions> with <npt-quick-action> children.
10
+ * A responsive grid of action tiles. Clicking a child emits a bubbling `select`
11
+ * event from the grid carrying the chosen tile's label.
12
+ */
13
+ export class NptQuickActions extends NptElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.onClick = (e) => this.activate(e.target);
17
+ this.onKey = (e) => {
18
+ if (e.key !== " " && e.key !== "Enter")
19
+ return;
20
+ if (!e.target?.closest("npt-quick-action"))
21
+ return;
22
+ e.preventDefault();
23
+ this.activate(e.target);
24
+ };
25
+ }
26
+ connectedCallback() {
27
+ super.connectedCallback();
28
+ this.addEventListener("click", this.onClick);
29
+ this.addEventListener("keydown", this.onKey);
30
+ }
31
+ disconnectedCallback() {
32
+ this.removeEventListener("click", this.onClick);
33
+ this.removeEventListener("keydown", this.onKey);
34
+ }
35
+ activate(target) {
36
+ const tile = target?.closest("npt-quick-action");
37
+ if (!tile || tile.hasAttribute("disabled"))
38
+ return;
39
+ const label = tile.getAttribute("label") ?? "";
40
+ this.dispatchEvent(new CustomEvent("select", { detail: { label }, bubbles: true }));
41
+ }
42
+ styles() {
43
+ return css `
44
+ ${A11Y}
45
+ :host {
46
+ display: block;
47
+ }
48
+ .grid {
49
+ display: grid;
50
+ grid-template-columns: repeat(var(--npt-quick-actions-cols, 4), minmax(0, 1fr));
51
+ gap: var(--npt-space-3, 12px);
52
+ }
53
+ `;
54
+ }
55
+ render() {
56
+ return html `<div class="grid" part="grid" role="group"><slot></slot></div>`;
57
+ }
58
+ }
59
+ /**
60
+ * <npt-quick-action label="Send"><svg slot="icon">…</svg></npt-quick-action>
61
+ * A single tile inside <npt-quick-actions>. Provide the glyph via the `icon` slot.
62
+ */
63
+ export class NptQuickAction extends NptElement {
64
+ attributeChangedCallback() {
65
+ if (this.isConnected)
66
+ this.update();
67
+ }
68
+ styles() {
69
+ return css `
70
+ ${A11Y}
71
+ :host {
72
+ display: block;
73
+ }
74
+ .tile {
75
+ inline-size: 100%;
76
+ min-block-size: 88px;
77
+ display: flex;
78
+ flex-direction: column;
79
+ align-items: center;
80
+ justify-content: center;
81
+ gap: var(--npt-space-2, 8px);
82
+ padding-block: var(--npt-space-3, 12px);
83
+ padding-inline: var(--npt-space-2, 8px);
84
+ border: none;
85
+ border-radius: var(--npt-corner-md, 16px);
86
+ background: var(--md-sys-color-surface-container);
87
+ color: var(--md-sys-color-on-surface);
88
+ cursor: pointer;
89
+ font-family: var(--npt-font-text);
90
+ box-sizing: border-box;
91
+ transition: background-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease),
92
+ transform var(--npt-dur-fast, 200ms) var(--npt-ease-spring, ease);
93
+ }
94
+ .tile:hover {
95
+ background: var(--md-sys-color-surface-container-high);
96
+ }
97
+ .tile:active {
98
+ transform: scale(0.97);
99
+ }
100
+ :host([disabled]) .tile {
101
+ cursor: not-allowed;
102
+ opacity: 0.38;
103
+ }
104
+ .glyph {
105
+ inline-size: 44px;
106
+ block-size: 44px;
107
+ border-radius: var(--npt-corner-full, 999px);
108
+ display: grid;
109
+ place-items: center;
110
+ background: var(--md-sys-color-primary-container);
111
+ color: var(--md-sys-color-on-primary-container);
112
+ }
113
+ .label {
114
+ font-size: var(--npt-text-label, 14px);
115
+ line-height: var(--npt-leading-label, 20px);
116
+ text-align: center;
117
+ color: var(--md-sys-color-on-surface);
118
+ }
119
+ ::slotted([slot="icon"]) {
120
+ inline-size: 24px;
121
+ block-size: 24px;
122
+ display: block;
123
+ }
124
+ `;
125
+ }
126
+ render() {
127
+ const label = esc(this.getAttribute("label"));
128
+ const disabled = this.hasAttribute("disabled") ? "disabled" : "";
129
+ return html `<button class="tile" part="tile" type="button" aria-label="${label}" ${disabled}>
130
+ <span class="glyph" aria-hidden="true"><slot name="icon"></slot></span>
131
+ <span class="label">${label}</span>
132
+ </button>`;
133
+ }
134
+ }
135
+ NptQuickAction.observedAttributes = ["label", "disabled"];
136
+ /**
137
+ * <npt-merchant-row name="Acme" category="Groceries" amount="-42.00" currency="LYD"
138
+ * time="14:32" [pending]>
139
+ * <img slot="logo" src="…" alt="" />
140
+ * </npt-merchant-row>
141
+ * Provide a logo via the `logo` slot; falls back to the name's initials.
142
+ */
143
+ export class NptMerchantRow extends NptElement {
144
+ attributeChangedCallback() {
145
+ if (this.isConnected)
146
+ this.update();
147
+ }
148
+ styles() {
149
+ return css `
150
+ ${A11Y}
151
+ :host {
152
+ display: block;
153
+ }
154
+ .row {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: var(--npt-space-4, 16px);
158
+ min-height: 56px;
159
+ padding-block: var(--npt-space-3, 12px);
160
+ padding-inline: var(--npt-space-2, 8px);
161
+ border-bottom: 1px solid var(--md-sys-color-outline-variant);
162
+ }
163
+ .logo {
164
+ inline-size: 44px;
165
+ block-size: 44px;
166
+ flex: 0 0 auto;
167
+ border-radius: var(--npt-corner-full, 999px);
168
+ overflow: hidden;
169
+ display: grid;
170
+ place-items: center;
171
+ background: var(--md-sys-color-secondary-container);
172
+ color: var(--md-sys-color-on-secondary-container);
173
+ font-family: var(--npt-font-display);
174
+ font-weight: 700;
175
+ font-size: var(--npt-text-label, 14px);
176
+ }
177
+ ::slotted([slot="logo"]) {
178
+ inline-size: 100%;
179
+ block-size: 100%;
180
+ object-fit: cover;
181
+ }
182
+ .body {
183
+ flex: 1 1 auto;
184
+ min-inline-size: 0;
185
+ }
186
+ .name {
187
+ font-family: var(--npt-font-text);
188
+ font-size: var(--npt-text-body-lg, 16px);
189
+ color: var(--md-sys-color-on-surface);
190
+ margin: 0;
191
+ white-space: nowrap;
192
+ overflow: hidden;
193
+ text-overflow: ellipsis;
194
+ }
195
+ .category {
196
+ font-family: var(--npt-font-text);
197
+ font-size: var(--npt-text-body, 14px);
198
+ color: var(--md-sys-color-on-surface-variant);
199
+ margin: 2px 0 0;
200
+ display: flex;
201
+ align-items: center;
202
+ gap: var(--npt-space-2, 8px);
203
+ }
204
+ .pending {
205
+ display: inline-flex;
206
+ align-items: center;
207
+ padding-inline: var(--npt-space-2, 8px);
208
+ padding-block: 1px;
209
+ border-radius: var(--npt-corner-full, 999px);
210
+ background: var(--md-sys-color-tertiary-container);
211
+ color: var(--md-sys-color-on-tertiary-container);
212
+ font-size: var(--npt-text-caption, 12px);
213
+ font-weight: 600;
214
+ }
215
+ .trailing {
216
+ text-align: end;
217
+ flex: 0 0 auto;
218
+ }
219
+ .amount {
220
+ font-family: var(--npt-font-num);
221
+ font-feature-settings: "tnum" 1;
222
+ font-variant-numeric: tabular-nums;
223
+ font-size: var(--npt-text-body-lg, 16px);
224
+ font-weight: 600;
225
+ color: var(--md-sys-color-on-surface);
226
+ white-space: nowrap;
227
+ margin: 0;
228
+ }
229
+ :host([pending]) .amount {
230
+ color: var(--md-sys-color-on-surface-variant);
231
+ }
232
+ .time {
233
+ font-family: var(--npt-font-num);
234
+ font-variant-numeric: tabular-nums;
235
+ font-size: var(--npt-text-caption, 12px);
236
+ color: var(--md-sys-color-on-surface-variant);
237
+ margin: 2px 0 0;
238
+ }
239
+ `;
240
+ }
241
+ render() {
242
+ const name = esc(this.getAttribute("name"));
243
+ const category = esc(this.getAttribute("category"));
244
+ const amount = esc(this.getAttribute("amount"));
245
+ const currency = esc(this.getAttribute("currency"));
246
+ const time = esc(this.getAttribute("time"));
247
+ const pending = this.hasAttribute("pending");
248
+ const initial = name.trim().charAt(0).toUpperCase() || "•";
249
+ return html `<div class="row" part="row" role="group" aria-label="${name} ${amount} ${currency}">
250
+ <span class="logo" part="logo">
251
+ <slot name="logo"><span aria-hidden="true">${initial}</span></slot>
252
+ </span>
253
+ <div class="body">
254
+ <p class="name">${name}</p>
255
+ <p class="category">
256
+ ${category ? html `<span>${category}</span>` : ""}
257
+ ${pending ? html `<span class="pending">pending</span>` : ""}
258
+ </p>
259
+ </div>
260
+ <div class="trailing">
261
+ <p class="amount">${amount} ${currency}</p>
262
+ ${time ? html `<p class="time">${time}</p>` : ""}
263
+ </div>
264
+ </div>`;
265
+ }
266
+ }
267
+ NptMerchantRow.observedAttributes = ["name", "category", "amount", "currency", "time", "pending"];
268
+ /**
269
+ * <npt-voucher-card title="20% off" value="−20%" code="NEPTUNE20" expiry="Exp 31 Dec">
270
+ * …optional default-slot detail…
271
+ * </npt-voucher-card>
272
+ * A coupon visual with punched dashed-notch edges (radial-gradient masks).
273
+ */
274
+ export class NptVoucherCard extends NptElement {
275
+ attributeChangedCallback() {
276
+ if (this.isConnected)
277
+ this.update();
278
+ }
279
+ styles() {
280
+ return css `
281
+ ${A11Y}
282
+ :host {
283
+ display: block;
284
+ }
285
+ .voucher {
286
+ position: relative;
287
+ display: flex;
288
+ align-items: stretch;
289
+ gap: var(--npt-space-4, 16px);
290
+ padding: var(--npt-space-5, 20px);
291
+ border-radius: var(--npt-corner-lg, 24px);
292
+ background: var(--md-sys-color-primary-container);
293
+ color: var(--md-sys-color-on-primary-container);
294
+ box-shadow: var(--npt-elevation-1, 0 1px 3px rgba(0, 0, 0, 0.2));
295
+ box-sizing: border-box;
296
+ overflow: hidden;
297
+ /* Punch a notch out of each inline edge with a radial-gradient mask.
298
+ Mask colour is alpha-only — currentColor supplies the opaque stop. */
299
+ --_notch: 16px;
300
+ -webkit-mask:
301
+ radial-gradient(var(--_notch) at left 50%, transparent 98%, currentColor) left / 51% 100% no-repeat,
302
+ radial-gradient(var(--_notch) at right 50%, transparent 98%, currentColor) right / 51% 100% no-repeat;
303
+ -webkit-mask-composite: source-over;
304
+ mask:
305
+ radial-gradient(var(--_notch) at left 50%, transparent 98%, currentColor) left / 51% 100% no-repeat,
306
+ radial-gradient(var(--_notch) at right 50%, transparent 98%, currentColor) right / 51% 100% no-repeat;
307
+ mask-composite: add;
308
+ }
309
+ .value {
310
+ flex: 0 0 auto;
311
+ align-self: center;
312
+ font-family: var(--npt-font-num);
313
+ font-feature-settings: "tnum" 1;
314
+ font-variant-numeric: tabular-nums;
315
+ font-size: var(--npt-text-headline, 28px);
316
+ font-weight: 700;
317
+ letter-spacing: -0.01em;
318
+ padding-inline-end: var(--npt-space-4, 16px);
319
+ /* dashed tear line between the value stub and the body */
320
+ border-inline-end: 2px dashed var(--md-sys-color-outline);
321
+ }
322
+ .body {
323
+ flex: 1 1 auto;
324
+ min-inline-size: 0;
325
+ display: flex;
326
+ flex-direction: column;
327
+ gap: var(--npt-space-1, 4px);
328
+ justify-content: center;
329
+ }
330
+ .title {
331
+ font-family: var(--npt-font-display);
332
+ font-size: var(--npt-text-title, 18px);
333
+ font-weight: 600;
334
+ margin: 0;
335
+ }
336
+ .detail {
337
+ font-family: var(--npt-font-text);
338
+ font-size: var(--npt-text-body, 14px);
339
+ opacity: 0.86;
340
+ }
341
+ .meta {
342
+ display: flex;
343
+ align-items: center;
344
+ flex-wrap: wrap;
345
+ gap: var(--npt-space-3, 12px);
346
+ margin-block-start: var(--npt-space-1, 4px);
347
+ }
348
+ .code {
349
+ display: inline-flex;
350
+ align-items: center;
351
+ padding-inline: var(--npt-space-3, 12px);
352
+ padding-block: var(--npt-space-1, 4px);
353
+ border-radius: var(--npt-corner-xs, 8px);
354
+ background: var(--md-sys-color-surface);
355
+ color: var(--md-sys-color-on-surface);
356
+ font-family: var(--npt-font-num);
357
+ font-variant-numeric: tabular-nums;
358
+ font-size: var(--npt-text-label, 14px);
359
+ font-weight: 600;
360
+ letter-spacing: 0.08em;
361
+ }
362
+ .expiry {
363
+ font-family: var(--npt-font-text);
364
+ font-size: var(--npt-text-caption, 12px);
365
+ opacity: 0.78;
366
+ }
367
+ `;
368
+ }
369
+ render() {
370
+ const title = esc(this.getAttribute("title"));
371
+ const value = esc(this.getAttribute("value"));
372
+ const code = esc(this.getAttribute("code"));
373
+ const expiry = esc(this.getAttribute("expiry"));
374
+ return html `<div class="voucher" part="voucher" role="group" aria-label="${title} ${value}">
375
+ ${value ? html `<div class="value" part="value">${value}</div>` : ""}
376
+ <div class="body">
377
+ ${title ? html `<p class="title">${title}</p>` : ""}
378
+ <div class="detail"><slot></slot></div>
379
+ <div class="meta">
380
+ ${code ? html `<span class="code" part="code">${code}</span>` : ""}
381
+ ${expiry ? html `<span class="expiry">${expiry}</span>` : ""}
382
+ </div>
383
+ </div>
384
+ </div>`;
385
+ }
386
+ }
387
+ NptVoucherCard.observedAttributes = ["title", "value", "code", "expiry"];
388
+ /**
389
+ * <npt-qr-pay amount="42.00" currency="LYD" merchant="Acme Store">
390
+ * <img slot="qr" src="…" alt="QR code" />
391
+ * <npt-button slot="action">Pay</npt-button>
392
+ * </npt-qr-pay>
393
+ * Payment panel: a bordered QR area (`qr` slot), the amount + merchant, and a
394
+ * primary action slot.
395
+ */
396
+ export class NptQrPay extends NptElement {
397
+ attributeChangedCallback() {
398
+ if (this.isConnected)
399
+ this.update();
400
+ }
401
+ styles() {
402
+ return css `
403
+ ${A11Y}
404
+ :host {
405
+ display: block;
406
+ }
407
+ .panel {
408
+ display: flex;
409
+ flex-direction: column;
410
+ align-items: center;
411
+ gap: var(--npt-space-5, 20px);
412
+ padding: var(--npt-space-6, 24px);
413
+ border-radius: var(--npt-corner-xl, 32px);
414
+ background: var(--md-sys-color-surface-container-low);
415
+ color: var(--md-sys-color-on-surface);
416
+ box-sizing: border-box;
417
+ }
418
+ .qr {
419
+ inline-size: 200px;
420
+ block-size: 200px;
421
+ max-inline-size: 100%;
422
+ aspect-ratio: 1;
423
+ display: grid;
424
+ place-items: center;
425
+ border-radius: var(--npt-corner-md, 16px);
426
+ border: 2px solid var(--md-sys-color-outline-variant);
427
+ background: var(--md-sys-color-surface);
428
+ color: var(--md-sys-color-on-surface-variant);
429
+ overflow: hidden;
430
+ }
431
+ ::slotted([slot="qr"]) {
432
+ inline-size: 100%;
433
+ block-size: 100%;
434
+ object-fit: contain;
435
+ }
436
+ .merchant {
437
+ font-family: var(--npt-font-text);
438
+ font-size: var(--npt-text-body, 14px);
439
+ color: var(--md-sys-color-on-surface-variant);
440
+ margin: 0;
441
+ text-align: center;
442
+ }
443
+ .amount {
444
+ font-family: var(--npt-font-num);
445
+ font-feature-settings: "tnum" 1;
446
+ font-variant-numeric: tabular-nums;
447
+ font-size: var(--npt-text-display-sm, 36px);
448
+ font-weight: 700;
449
+ letter-spacing: -0.02em;
450
+ margin: 0;
451
+ display: flex;
452
+ align-items: baseline;
453
+ gap: var(--npt-space-2, 8px);
454
+ }
455
+ .currency {
456
+ font-size: var(--npt-text-title, 18px);
457
+ opacity: 0.85;
458
+ }
459
+ .action {
460
+ inline-size: 100%;
461
+ display: flex;
462
+ justify-content: center;
463
+ }
464
+ ::slotted([slot="action"]) {
465
+ inline-size: 100%;
466
+ }
467
+ `;
468
+ }
469
+ render() {
470
+ const amount = esc(this.getAttribute("amount"));
471
+ const currency = esc(this.getAttribute("currency"));
472
+ const merchant = esc(this.getAttribute("merchant"));
473
+ return html `<div class="panel" part="panel" role="group" aria-label="Pay ${amount} ${currency} ${merchant}">
474
+ <div class="qr" part="qr">
475
+ <slot name="qr"><span aria-hidden="true">QR</span></slot>
476
+ </div>
477
+ ${merchant ? html `<p class="merchant">${merchant}</p>` : ""}
478
+ <p class="amount"><span class="currency">${currency}</span>${amount}</p>
479
+ <div class="action"><slot name="action"></slot></div>
480
+ </div>`;
481
+ }
482
+ }
483
+ NptQrPay.observedAttributes = ["amount", "currency", "merchant"];
484
+ /**
485
+ * <npt-topup-row provider="Vodafone Cash"><svg slot="icon">…</svg></npt-topup-row>
486
+ * A selectable top-up option: icon slot + provider label + trailing chevron.
487
+ */
488
+ export class NptTopupRow extends NptElement {
489
+ attributeChangedCallback() {
490
+ if (this.isConnected)
491
+ this.update();
492
+ }
493
+ styles() {
494
+ return css `
495
+ ${A11Y}
496
+ :host {
497
+ display: block;
498
+ }
499
+ .row {
500
+ inline-size: 100%;
501
+ display: flex;
502
+ align-items: center;
503
+ gap: var(--npt-space-4, 16px);
504
+ min-height: 56px;
505
+ padding-block: var(--npt-space-3, 12px);
506
+ padding-inline: var(--npt-space-4, 16px);
507
+ border: none;
508
+ border-radius: var(--npt-corner-md, 16px);
509
+ background: var(--md-sys-color-surface-container-low);
510
+ color: var(--md-sys-color-on-surface);
511
+ text-align: start;
512
+ cursor: pointer;
513
+ font-family: var(--npt-font-text);
514
+ box-sizing: border-box;
515
+ transition: background-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
516
+ }
517
+ .row:hover {
518
+ background: var(--md-sys-color-surface-container-high);
519
+ }
520
+ :host([disabled]) .row {
521
+ cursor: not-allowed;
522
+ opacity: 0.38;
523
+ }
524
+ .icon {
525
+ inline-size: 40px;
526
+ block-size: 40px;
527
+ flex: 0 0 auto;
528
+ border-radius: var(--npt-corner-sm, 12px);
529
+ display: grid;
530
+ place-items: center;
531
+ background: var(--md-sys-color-secondary-container);
532
+ color: var(--md-sys-color-on-secondary-container);
533
+ }
534
+ ::slotted([slot="icon"]) {
535
+ inline-size: 24px;
536
+ block-size: 24px;
537
+ display: block;
538
+ }
539
+ .provider {
540
+ flex: 1 1 auto;
541
+ min-inline-size: 0;
542
+ font-size: var(--npt-text-body-lg, 16px);
543
+ white-space: nowrap;
544
+ overflow: hidden;
545
+ text-overflow: ellipsis;
546
+ }
547
+ .chevron {
548
+ flex: 0 0 auto;
549
+ color: var(--md-sys-color-on-surface-variant);
550
+ /* point toward the inline-end; flips automatically in RTL */
551
+ transform: scaleX(1);
552
+ }
553
+ :host(:dir(rtl)) .chevron {
554
+ transform: scaleX(-1);
555
+ }
556
+ `;
557
+ }
558
+ render() {
559
+ const provider = esc(this.getAttribute("provider"));
560
+ const disabled = this.hasAttribute("disabled") ? "disabled" : "";
561
+ return html `<button class="row" part="row" type="button" aria-label="${provider}" ${disabled}>
562
+ <span class="icon" aria-hidden="true"><slot name="icon"></slot></span>
563
+ <span class="provider">${provider}</span>
564
+ <span class="chevron" aria-hidden="true">›</span>
565
+ </button>`;
566
+ }
567
+ }
568
+ NptTopupRow.observedAttributes = ["provider", "disabled"];
569
+ /**
570
+ * <npt-tier-badge tier="Gold" tone="gold|silver|primary|neutral"></npt-tier-badge>
571
+ * A small premium membership pill.
572
+ */
573
+ export class NptTierBadge extends NptElement {
574
+ attributeChangedCallback() {
575
+ if (this.isConnected)
576
+ this.update();
577
+ }
578
+ styles() {
579
+ return css `
580
+ :host {
581
+ display: inline-flex;
582
+ }
583
+ .badge {
584
+ display: inline-flex;
585
+ align-items: center;
586
+ gap: var(--npt-space-1, 4px);
587
+ min-height: 24px;
588
+ padding-inline: var(--npt-space-3, 12px);
589
+ padding-block: 2px;
590
+ border-radius: var(--npt-corner-full, 999px);
591
+ font-family: var(--npt-font-display);
592
+ font-size: var(--npt-text-label, 14px);
593
+ line-height: var(--npt-leading-label, 20px);
594
+ font-weight: 700;
595
+ letter-spacing: 0.02em;
596
+ /* default / neutral tone */
597
+ background: var(--md-sys-color-surface-container-highest);
598
+ color: var(--md-sys-color-on-surface);
599
+ border: 1px solid var(--md-sys-color-outline-variant);
600
+ box-sizing: border-box;
601
+ }
602
+ :host([tone="primary"]) .badge {
603
+ background: var(--md-sys-color-primary-container);
604
+ color: var(--md-sys-color-on-primary-container);
605
+ border-color: transparent;
606
+ }
607
+ :host([tone="gold"]) .badge {
608
+ background: var(--md-sys-color-tertiary-container);
609
+ color: var(--md-sys-color-on-tertiary-container);
610
+ border-color: transparent;
611
+ }
612
+ :host([tone="silver"]) .badge {
613
+ background: var(--md-sys-color-secondary-container);
614
+ color: var(--md-sys-color-on-secondary-container);
615
+ border-color: transparent;
616
+ }
617
+ .dot {
618
+ inline-size: 6px;
619
+ block-size: 6px;
620
+ border-radius: var(--npt-corner-full, 999px);
621
+ background: currentColor;
622
+ }
623
+ `;
624
+ }
625
+ render() {
626
+ const tier = esc(this.getAttribute("tier"));
627
+ return html `<span class="badge" part="badge" role="status" aria-label="${tier} tier">
628
+ <span class="dot" aria-hidden="true"></span>${tier}
629
+ </span>`;
630
+ }
631
+ }
632
+ NptTierBadge.observedAttributes = ["tier", "tone"];
633
+ //# sourceMappingURL=wallet-pay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-pay.js","sourceRoot":"","sources":["../../src/components/wallet-pay.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,8 +11,16 @@ export { NptProgress, NptSnackbar, NptTooltip, NptBanner } from "./components/fe
11
11
  export { NptDialog, NptBottomSheet, NptMenu, NptMenuItem } from "./components/containers.js";
12
12
  export { NptList, NptListItem, NptDivider, NptTabs, NptTab, NptAccordion, NptAccordionItem, NptAvatar, } from "./components/layout.js";
13
13
  export { NptNavRail, NptTopAppBar } from "./components/nav-rail.js";
14
+ export { NptAmountInput, NptCurrencyField, NptIbanField, NptOtpInput, NptPinInput, NptAmountKeypad, } from "./components/money-inputs.js";
15
+ export { NptCardArt, NptCardRow, NptAddCard, NptCardControls } from "./components/cards.js";
16
+ export { NptStep, NptStepper, NptTransferReview, NptSuccess, NptReceipt, NptBeneficiaryTile, NptMethodRow, } from "./components/money-movement.js";
17
+ export { NptDataTable, NptStatCard, NptSparkline, NptDonut, NptLimitMeter, NptTrend, } from "./components/data-viz.js";
18
+ export { NptSkeleton, NptEmptyState, NptAlert, NptStatusChip, NptToast, NptToastHost, } from "./components/feedback-status.js";
19
+ export { NptApprovalItem, NptBatchCard, NptAuditRow, NptUserRow, NptPermissionToggle, NptWorkflowStatus, } from "./components/corporate.js";
20
+ export { NptAppShell, NptPageHeader, NptSection, NptSideNav, NptSideNavItem, NptSearchField, NptToolbar, } from "./components/shell-layout.js";
21
+ export { NptQuickActions, NptQuickAction, NptMerchantRow, NptVoucherCard, NptQrPay, NptTopupRow, NptTierBadge, } from "./components/wallet-pay.js";
14
22
  export { registerAll } from "./register.js";
15
23
  export type { Brand, Mode, Direction, NeptuneTheme, ThemeInput, BrandprintConfig, } from "@neptune.fintech/tokens";
16
24
  export { buildTheme, encode, decode, brandprintFor } from "@neptune.fintech/tokens";
17
- export declare const WEB_UI_VERSION = "2.1.0";
25
+ export declare const WEB_UI_VERSION = "2.2.0";
18
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,YAAY,EACV,KAAK,EACL,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEpF,eAAO,MAAM,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EACL,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,YAAY,GACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,YAAY,EACV,KAAK,EACL,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEpF,eAAO,MAAM,cAAc,UAAU,CAAC"}