@neptune.fintech/web-ui 2.1.0 → 2.3.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/dist/components/cards.d.ts +64 -0
- package/dist/components/cards.d.ts.map +1 -0
- package/dist/components/cards.js +508 -0
- package/dist/components/cards.js.map +1 -0
- package/dist/components/corporate.d.ts +84 -0
- package/dist/components/corporate.d.ts.map +1 -0
- package/dist/components/corporate.js +782 -0
- package/dist/components/corporate.js.map +1 -0
- package/dist/components/data-viz.d.ts +69 -0
- package/dist/components/data-viz.d.ts.map +1 -0
- package/dist/components/data-viz.js +526 -0
- package/dist/components/data-viz.js.map +1 -0
- package/dist/components/feedback-status.d.ts +80 -0
- package/dist/components/feedback-status.d.ts.map +1 -0
- package/dist/components/feedback-status.js +537 -0
- package/dist/components/feedback-status.js.map +1 -0
- package/dist/components/money-inputs.d.ts +105 -0
- package/dist/components/money-inputs.d.ts.map +1 -0
- package/dist/components/money-inputs.js +766 -0
- package/dist/components/money-inputs.js.map +1 -0
- package/dist/components/money-movement.d.ts +79 -0
- package/dist/components/money-movement.d.ts.map +1 -0
- package/dist/components/money-movement.js +740 -0
- package/dist/components/money-movement.js.map +1 -0
- package/dist/components/premium.d.ts +38 -0
- package/dist/components/premium.d.ts.map +1 -0
- package/dist/components/premium.js +275 -0
- package/dist/components/premium.js.map +1 -0
- package/dist/components/shell-layout.d.ts +103 -0
- package/dist/components/shell-layout.d.ts.map +1 -0
- package/dist/components/shell-layout.js +582 -0
- package/dist/components/shell-layout.js.map +1 -0
- package/dist/components/wallet-pay.d.ts +85 -0
- package/dist/components/wallet-pay.d.ts.map +1 -0
- package/dist/components/wallet-pay.js +633 -0
- package/dist/components/wallet-pay.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +70 -0
- package/dist/register.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { NptElement } from "./base.js";
|
|
2
|
+
/**
|
|
3
|
+
* <npt-card-art holder="A. KELLER" last4="4821" expiry="08/29" scheme="VISA"
|
|
4
|
+
* variant="virtual|physical|frozen"><span slot="brand">◈</span></npt-card-art>
|
|
5
|
+
* Payment-card visual on the brand gradient. `scheme` is a plain label; provide a
|
|
6
|
+
* brand mark via the `brand` slot (top-trailing). [frozen] dims and shows a frozen
|
|
7
|
+
* affordance. Card number digits use tabular figures.
|
|
8
|
+
*/
|
|
9
|
+
export declare class NptCardArt extends NptElement {
|
|
10
|
+
static observedAttributes: string[];
|
|
11
|
+
attributeChangedCallback(): void;
|
|
12
|
+
protected styles(): string;
|
|
13
|
+
protected render(): string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* <npt-card-row label="Salary card" last4="4821" scheme="VISA" [interactive]>
|
|
17
|
+
* <span slot="brand">◈</span></npt-card-row>
|
|
18
|
+
* Saved-card list item. Leading `brand` slot, trailing chevron. [interactive] makes
|
|
19
|
+
* the whole row a button (role/tabindex/hover) that emits a bubbling `select` event.
|
|
20
|
+
*/
|
|
21
|
+
export declare class NptCardRow extends NptElement {
|
|
22
|
+
static observedAttributes: string[];
|
|
23
|
+
attributeChangedCallback(): void;
|
|
24
|
+
connectedCallback(): void;
|
|
25
|
+
disconnectedCallback(): void;
|
|
26
|
+
private activate;
|
|
27
|
+
private onClick;
|
|
28
|
+
private onKey;
|
|
29
|
+
protected styles(): string;
|
|
30
|
+
protected render(): string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* <npt-add-card>Add a new card</npt-add-card>
|
|
34
|
+
* Dashed call-to-action tile with a leading +. Behaves as a button (role/tabindex)
|
|
35
|
+
* and emits a bubbling `add` event on click / Enter / Space.
|
|
36
|
+
*/
|
|
37
|
+
export declare class NptAddCard extends NptElement {
|
|
38
|
+
static observedAttributes: string[];
|
|
39
|
+
attributeChangedCallback(): void;
|
|
40
|
+
connectedCallback(): void;
|
|
41
|
+
disconnectedCallback(): void;
|
|
42
|
+
private activate;
|
|
43
|
+
private onClick;
|
|
44
|
+
private onKey;
|
|
45
|
+
protected styles(): string;
|
|
46
|
+
protected render(): string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* <npt-card-controls [frozen]></npt-card-controls>
|
|
50
|
+
* Row of toggle actions (Freeze, Limits, Details, PIN). Each press dispatches a
|
|
51
|
+
* bubbling `control` event whose detail is { action }. [frozen] flips the first
|
|
52
|
+
* action's label/affordance to Unfreeze.
|
|
53
|
+
*/
|
|
54
|
+
export declare class NptCardControls extends NptElement {
|
|
55
|
+
static observedAttributes: string[];
|
|
56
|
+
private static readonly ACTIONS;
|
|
57
|
+
attributeChangedCallback(): void;
|
|
58
|
+
connectedCallback(): void;
|
|
59
|
+
disconnectedCallback(): void;
|
|
60
|
+
private onClick;
|
|
61
|
+
protected styles(): string;
|
|
62
|
+
protected render(): string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/components/cards.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAA2B,MAAM,WAAW,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,kBAAkB,WAAkE;IAE3F,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IA4H1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAyB3B;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,kBAAkB,WAA+C;IAExE,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAMlC,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAMX;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IA4E1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAmB3B;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,kBAAkB,WAAgB;IAEzC,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAMlC,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAKX;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IAsD1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAc3B;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,MAAM,CAAC,kBAAkB,WAAc;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAK7B;IAEF,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAKlC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,OAAO,CAMb;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IA8C1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAmB3B"}
|
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
// © 2026 Neptune.Fintech (neptune.ly) · Neptune Odyssey Community License v1.0
|
|
2
|
+
// Neptune Odyssey — payment-card components
|
|
3
|
+
// <npt-card-art>, <npt-card-row>, <npt-add-card>, <npt-card-controls>.
|
|
4
|
+
// Custom-property driven only; logical layout → mirrors in RTL. Money tabular.
|
|
5
|
+
import { NptElement, css, html, A11Y, define } from "./base.js";
|
|
6
|
+
const esc = (v) => (v ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]);
|
|
7
|
+
/**
|
|
8
|
+
* <npt-card-art holder="A. KELLER" last4="4821" expiry="08/29" scheme="VISA"
|
|
9
|
+
* variant="virtual|physical|frozen"><span slot="brand">◈</span></npt-card-art>
|
|
10
|
+
* Payment-card visual on the brand gradient. `scheme` is a plain label; provide a
|
|
11
|
+
* brand mark via the `brand` slot (top-trailing). [frozen] dims and shows a frozen
|
|
12
|
+
* affordance. Card number digits use tabular figures.
|
|
13
|
+
*/
|
|
14
|
+
export class NptCardArt extends NptElement {
|
|
15
|
+
attributeChangedCallback() {
|
|
16
|
+
if (this.isConnected)
|
|
17
|
+
this.update();
|
|
18
|
+
}
|
|
19
|
+
styles() {
|
|
20
|
+
return css `
|
|
21
|
+
${A11Y}
|
|
22
|
+
:host {
|
|
23
|
+
display: block;
|
|
24
|
+
}
|
|
25
|
+
.card {
|
|
26
|
+
position: relative;
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
aspect-ratio: 1.586;
|
|
29
|
+
inline-size: 100%;
|
|
30
|
+
padding: var(--npt-space-6, 24px);
|
|
31
|
+
border-radius: var(--npt-corner-lg, 24px);
|
|
32
|
+
background: linear-gradient(135deg, var(--md-sys-color-primary), var(--md-sys-color-tertiary));
|
|
33
|
+
color: var(--md-sys-color-on-primary);
|
|
34
|
+
box-shadow: var(--npt-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.18));
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-direction: column;
|
|
37
|
+
justify-content: space-between;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
outline: 0 solid transparent;
|
|
40
|
+
outline-offset: 3px;
|
|
41
|
+
transition:
|
|
42
|
+
filter var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease),
|
|
43
|
+
outline-color var(--npt-dur-2, 220ms) var(--npt-ease-emphasized, ease),
|
|
44
|
+
outline-width var(--npt-dur-2, 220ms) var(--npt-ease-emphasized, ease);
|
|
45
|
+
}
|
|
46
|
+
/* Selected state — an accent ring lifts the chosen card out of a stack. */
|
|
47
|
+
:host([selected]) .card {
|
|
48
|
+
outline: 3px solid var(--md-sys-color-primary);
|
|
49
|
+
box-shadow: var(--npt-glow-primary, 0 8px 22px rgba(0, 0, 0, 0.28));
|
|
50
|
+
}
|
|
51
|
+
:host([variant="virtual"]) .card {
|
|
52
|
+
background: linear-gradient(
|
|
53
|
+
135deg,
|
|
54
|
+
var(--md-sys-color-tertiary),
|
|
55
|
+
var(--md-sys-color-primary)
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
.top {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: flex-start;
|
|
61
|
+
justify-content: space-between;
|
|
62
|
+
gap: var(--npt-space-4, 16px);
|
|
63
|
+
}
|
|
64
|
+
.scheme {
|
|
65
|
+
font-family: var(--npt-font-display);
|
|
66
|
+
font-size: var(--npt-text-label, 14px);
|
|
67
|
+
font-weight: 700;
|
|
68
|
+
letter-spacing: 0.08em;
|
|
69
|
+
text-transform: uppercase;
|
|
70
|
+
opacity: 0.92;
|
|
71
|
+
}
|
|
72
|
+
.brand {
|
|
73
|
+
display: inline-flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
font-size: var(--npt-text-title, 18px);
|
|
76
|
+
line-height: 1;
|
|
77
|
+
}
|
|
78
|
+
.number {
|
|
79
|
+
font-family: var(--npt-font-num);
|
|
80
|
+
font-feature-settings: "tnum" 1;
|
|
81
|
+
font-variant-numeric: tabular-nums;
|
|
82
|
+
font-size: var(--npt-text-title, 18px);
|
|
83
|
+
letter-spacing: 0.18em;
|
|
84
|
+
margin: 0;
|
|
85
|
+
}
|
|
86
|
+
.dots {
|
|
87
|
+
opacity: 0.7;
|
|
88
|
+
margin-inline-end: var(--npt-space-2, 8px);
|
|
89
|
+
}
|
|
90
|
+
.bottom {
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: flex-end;
|
|
93
|
+
justify-content: space-between;
|
|
94
|
+
gap: var(--npt-space-4, 16px);
|
|
95
|
+
}
|
|
96
|
+
.holder {
|
|
97
|
+
font-family: var(--npt-font-text);
|
|
98
|
+
font-size: var(--npt-text-label, 14px);
|
|
99
|
+
text-transform: uppercase;
|
|
100
|
+
letter-spacing: 0.04em;
|
|
101
|
+
margin: 0;
|
|
102
|
+
min-inline-size: 0;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
text-overflow: ellipsis;
|
|
105
|
+
white-space: nowrap;
|
|
106
|
+
}
|
|
107
|
+
.meta {
|
|
108
|
+
font-family: var(--npt-font-text);
|
|
109
|
+
font-size: var(--npt-text-caption, 12px);
|
|
110
|
+
opacity: 0.85;
|
|
111
|
+
margin: 0 0 var(--npt-space-1, 4px);
|
|
112
|
+
}
|
|
113
|
+
.expiry {
|
|
114
|
+
font-family: var(--npt-font-num);
|
|
115
|
+
font-variant-numeric: tabular-nums;
|
|
116
|
+
font-size: var(--npt-text-label, 14px);
|
|
117
|
+
text-align: end;
|
|
118
|
+
margin: 0;
|
|
119
|
+
}
|
|
120
|
+
.frost {
|
|
121
|
+
position: absolute;
|
|
122
|
+
inset: 0;
|
|
123
|
+
display: none;
|
|
124
|
+
align-items: center;
|
|
125
|
+
justify-content: center;
|
|
126
|
+
gap: var(--npt-space-2, 8px);
|
|
127
|
+
background: var(--md-sys-color-scrim);
|
|
128
|
+
opacity: 0.42;
|
|
129
|
+
font-family: var(--npt-font-text);
|
|
130
|
+
font-size: var(--npt-text-label, 14px);
|
|
131
|
+
color: var(--md-sys-color-on-primary);
|
|
132
|
+
pointer-events: none;
|
|
133
|
+
}
|
|
134
|
+
:host([variant="frozen"]) .card {
|
|
135
|
+
filter: grayscale(0.65) brightness(0.9);
|
|
136
|
+
}
|
|
137
|
+
:host([variant="frozen"]) .frost {
|
|
138
|
+
display: flex;
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
}
|
|
142
|
+
render() {
|
|
143
|
+
const holder = esc(this.getAttribute("holder"));
|
|
144
|
+
const last4 = esc(this.getAttribute("last4"));
|
|
145
|
+
const expiry = esc(this.getAttribute("expiry"));
|
|
146
|
+
const scheme = esc(this.getAttribute("scheme"));
|
|
147
|
+
const frozen = this.getAttribute("variant") === "frozen";
|
|
148
|
+
const label = `${scheme} card ending ${last4}${frozen ? ", frozen" : ""}`;
|
|
149
|
+
return html `<div class="card" part="card" role="group" aria-label="${label}">
|
|
150
|
+
<div class="top">
|
|
151
|
+
<span class="scheme">${scheme}</span>
|
|
152
|
+
<span class="brand"><slot name="brand"></slot></span>
|
|
153
|
+
</div>
|
|
154
|
+
<p class="number">
|
|
155
|
+
<span class="dots" aria-hidden="true">•••• •••• ••••</span>${last4}
|
|
156
|
+
</p>
|
|
157
|
+
<div class="bottom">
|
|
158
|
+
<p class="holder">${holder}</p>
|
|
159
|
+
<div>
|
|
160
|
+
<p class="meta">Expires</p>
|
|
161
|
+
<p class="expiry">${expiry}</p>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="frost" aria-hidden="true"><span aria-hidden="true">❄</span> Frozen</div>
|
|
165
|
+
</div>`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
NptCardArt.observedAttributes = ["holder", "last4", "expiry", "scheme", "variant", "selected"];
|
|
169
|
+
/**
|
|
170
|
+
* <npt-card-row label="Salary card" last4="4821" scheme="VISA" [interactive]>
|
|
171
|
+
* <span slot="brand">◈</span></npt-card-row>
|
|
172
|
+
* Saved-card list item. Leading `brand` slot, trailing chevron. [interactive] makes
|
|
173
|
+
* the whole row a button (role/tabindex/hover) that emits a bubbling `select` event.
|
|
174
|
+
*/
|
|
175
|
+
export class NptCardRow extends NptElement {
|
|
176
|
+
constructor() {
|
|
177
|
+
super(...arguments);
|
|
178
|
+
this.onClick = () => this.activate();
|
|
179
|
+
this.onKey = (e) => {
|
|
180
|
+
if (!this.hasAttribute("interactive"))
|
|
181
|
+
return;
|
|
182
|
+
if (e.key === " " || e.key === "Enter") {
|
|
183
|
+
e.preventDefault();
|
|
184
|
+
this.activate();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
attributeChangedCallback() {
|
|
189
|
+
if (this.isConnected)
|
|
190
|
+
this.update();
|
|
191
|
+
}
|
|
192
|
+
connectedCallback() {
|
|
193
|
+
super.connectedCallback();
|
|
194
|
+
this.addEventListener("click", this.onClick);
|
|
195
|
+
this.addEventListener("keydown", this.onKey);
|
|
196
|
+
}
|
|
197
|
+
disconnectedCallback() {
|
|
198
|
+
this.removeEventListener("click", this.onClick);
|
|
199
|
+
this.removeEventListener("keydown", this.onKey);
|
|
200
|
+
}
|
|
201
|
+
activate() {
|
|
202
|
+
if (!this.hasAttribute("interactive"))
|
|
203
|
+
return;
|
|
204
|
+
this.dispatchEvent(new CustomEvent("select", { bubbles: true }));
|
|
205
|
+
}
|
|
206
|
+
styles() {
|
|
207
|
+
return css `
|
|
208
|
+
${A11Y}
|
|
209
|
+
:host {
|
|
210
|
+
display: block;
|
|
211
|
+
}
|
|
212
|
+
.row {
|
|
213
|
+
display: flex;
|
|
214
|
+
align-items: center;
|
|
215
|
+
gap: var(--npt-space-4, 16px);
|
|
216
|
+
min-height: 56px;
|
|
217
|
+
padding-block: var(--npt-space-3, 12px);
|
|
218
|
+
padding-inline: var(--npt-space-2, 8px);
|
|
219
|
+
border-bottom: 1px solid var(--md-sys-color-outline-variant);
|
|
220
|
+
border-radius: var(--npt-corner-sm, 12px);
|
|
221
|
+
color: var(--md-sys-color-on-surface);
|
|
222
|
+
transition: background-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
|
|
223
|
+
}
|
|
224
|
+
:host([interactive]) {
|
|
225
|
+
cursor: pointer;
|
|
226
|
+
}
|
|
227
|
+
:host([interactive]) .row:hover {
|
|
228
|
+
background: var(--md-sys-color-surface-container);
|
|
229
|
+
}
|
|
230
|
+
.brand {
|
|
231
|
+
inline-size: 40px;
|
|
232
|
+
block-size: 40px;
|
|
233
|
+
flex: 0 0 auto;
|
|
234
|
+
border-radius: var(--npt-corner-xs, 8px);
|
|
235
|
+
background: var(--md-sys-color-secondary-container);
|
|
236
|
+
color: var(--md-sys-color-on-secondary-container);
|
|
237
|
+
display: grid;
|
|
238
|
+
place-items: center;
|
|
239
|
+
font-family: var(--npt-font-display);
|
|
240
|
+
font-weight: 700;
|
|
241
|
+
}
|
|
242
|
+
.body {
|
|
243
|
+
flex: 1 1 auto;
|
|
244
|
+
min-inline-size: 0;
|
|
245
|
+
}
|
|
246
|
+
.label {
|
|
247
|
+
font-family: var(--npt-font-text);
|
|
248
|
+
font-size: var(--npt-text-body-lg, 16px);
|
|
249
|
+
margin: 0;
|
|
250
|
+
white-space: nowrap;
|
|
251
|
+
overflow: hidden;
|
|
252
|
+
text-overflow: ellipsis;
|
|
253
|
+
}
|
|
254
|
+
.sub {
|
|
255
|
+
font-family: var(--npt-font-num);
|
|
256
|
+
font-variant-numeric: tabular-nums;
|
|
257
|
+
font-size: var(--npt-text-body, 14px);
|
|
258
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
259
|
+
margin: 2px 0 0;
|
|
260
|
+
display: flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
gap: var(--npt-space-2, 8px);
|
|
263
|
+
}
|
|
264
|
+
.scheme {
|
|
265
|
+
text-transform: uppercase;
|
|
266
|
+
letter-spacing: 0.04em;
|
|
267
|
+
font-family: var(--npt-font-text);
|
|
268
|
+
}
|
|
269
|
+
.chevron {
|
|
270
|
+
flex: 0 0 auto;
|
|
271
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
272
|
+
font-size: var(--npt-text-title, 18px);
|
|
273
|
+
line-height: 1;
|
|
274
|
+
display: none;
|
|
275
|
+
}
|
|
276
|
+
:host([interactive]) .chevron {
|
|
277
|
+
display: inline;
|
|
278
|
+
}
|
|
279
|
+
`;
|
|
280
|
+
}
|
|
281
|
+
render() {
|
|
282
|
+
const label = esc(this.getAttribute("label"));
|
|
283
|
+
const last4 = esc(this.getAttribute("last4"));
|
|
284
|
+
const scheme = esc(this.getAttribute("scheme"));
|
|
285
|
+
const initial = scheme.trim().charAt(0).toUpperCase() || label.trim().charAt(0).toUpperCase() || "•";
|
|
286
|
+
const interactive = this.hasAttribute("interactive");
|
|
287
|
+
const rowAttrs = interactive ? html `role="button" tabindex="0"` : html `role="group"`;
|
|
288
|
+
return html `<div class="row" part="row" ${rowAttrs} aria-label="${label} ${scheme} ending ${last4}">
|
|
289
|
+
<span class="brand" aria-hidden="true"><slot name="brand">${initial}</slot></span>
|
|
290
|
+
<div class="body">
|
|
291
|
+
<p class="label">${label}</p>
|
|
292
|
+
<p class="sub">
|
|
293
|
+
${scheme ? html `<span class="scheme">${scheme}</span>` : ""}
|
|
294
|
+
<span>•••• ${last4}</span>
|
|
295
|
+
</p>
|
|
296
|
+
</div>
|
|
297
|
+
<span class="chevron" aria-hidden="true">›</span>
|
|
298
|
+
</div>`;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
NptCardRow.observedAttributes = ["label", "last4", "scheme", "interactive"];
|
|
302
|
+
/**
|
|
303
|
+
* <npt-add-card>Add a new card</npt-add-card>
|
|
304
|
+
* Dashed call-to-action tile with a leading +. Behaves as a button (role/tabindex)
|
|
305
|
+
* and emits a bubbling `add` event on click / Enter / Space.
|
|
306
|
+
*/
|
|
307
|
+
export class NptAddCard extends NptElement {
|
|
308
|
+
constructor() {
|
|
309
|
+
super(...arguments);
|
|
310
|
+
this.onClick = () => this.activate();
|
|
311
|
+
this.onKey = (e) => {
|
|
312
|
+
if (e.key === " " || e.key === "Enter") {
|
|
313
|
+
e.preventDefault();
|
|
314
|
+
this.activate();
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
attributeChangedCallback() {
|
|
319
|
+
if (this.isConnected)
|
|
320
|
+
this.update();
|
|
321
|
+
}
|
|
322
|
+
connectedCallback() {
|
|
323
|
+
super.connectedCallback();
|
|
324
|
+
this.addEventListener("click", this.onClick);
|
|
325
|
+
this.addEventListener("keydown", this.onKey);
|
|
326
|
+
}
|
|
327
|
+
disconnectedCallback() {
|
|
328
|
+
this.removeEventListener("click", this.onClick);
|
|
329
|
+
this.removeEventListener("keydown", this.onKey);
|
|
330
|
+
}
|
|
331
|
+
activate() {
|
|
332
|
+
if (this.hasAttribute("disabled"))
|
|
333
|
+
return;
|
|
334
|
+
this.dispatchEvent(new CustomEvent("add", { bubbles: true }));
|
|
335
|
+
}
|
|
336
|
+
styles() {
|
|
337
|
+
return css `
|
|
338
|
+
${A11Y}
|
|
339
|
+
:host {
|
|
340
|
+
display: block;
|
|
341
|
+
cursor: pointer;
|
|
342
|
+
}
|
|
343
|
+
:host([disabled]) {
|
|
344
|
+
cursor: not-allowed;
|
|
345
|
+
opacity: 0.38;
|
|
346
|
+
}
|
|
347
|
+
.tile {
|
|
348
|
+
box-sizing: border-box;
|
|
349
|
+
inline-size: 100%;
|
|
350
|
+
min-height: 88px;
|
|
351
|
+
display: flex;
|
|
352
|
+
align-items: center;
|
|
353
|
+
gap: var(--npt-space-4, 16px);
|
|
354
|
+
padding-inline: var(--npt-space-5, 20px);
|
|
355
|
+
padding-block: var(--npt-space-4, 16px);
|
|
356
|
+
border: 2px dashed var(--md-sys-color-outline);
|
|
357
|
+
border-radius: var(--npt-corner-lg, 24px);
|
|
358
|
+
background: transparent;
|
|
359
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
360
|
+
transition: border-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease),
|
|
361
|
+
background-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease),
|
|
362
|
+
color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
|
|
363
|
+
}
|
|
364
|
+
:host(:not([disabled])) .tile:hover {
|
|
365
|
+
border-color: var(--md-sys-color-primary);
|
|
366
|
+
background: var(--md-sys-color-primary-container);
|
|
367
|
+
color: var(--md-sys-color-on-primary-container);
|
|
368
|
+
}
|
|
369
|
+
.plus {
|
|
370
|
+
inline-size: 44px;
|
|
371
|
+
block-size: 44px;
|
|
372
|
+
flex: 0 0 auto;
|
|
373
|
+
border-radius: var(--npt-corner-full, 999px);
|
|
374
|
+
background: var(--md-sys-color-secondary-container);
|
|
375
|
+
color: var(--md-sys-color-on-secondary-container);
|
|
376
|
+
display: grid;
|
|
377
|
+
place-items: center;
|
|
378
|
+
font-family: var(--npt-font-display);
|
|
379
|
+
font-size: var(--npt-text-title, 18px);
|
|
380
|
+
font-weight: 700;
|
|
381
|
+
line-height: 1;
|
|
382
|
+
}
|
|
383
|
+
.label {
|
|
384
|
+
font-family: var(--npt-font-text);
|
|
385
|
+
font-size: var(--npt-text-body-lg, 16px);
|
|
386
|
+
}
|
|
387
|
+
`;
|
|
388
|
+
}
|
|
389
|
+
render() {
|
|
390
|
+
const disabled = this.hasAttribute("disabled");
|
|
391
|
+
const tabindex = disabled ? "-1" : "0";
|
|
392
|
+
return html `<div
|
|
393
|
+
class="tile"
|
|
394
|
+
part="tile"
|
|
395
|
+
role="button"
|
|
396
|
+
tabindex="${tabindex}"
|
|
397
|
+
aria-disabled="${disabled}"
|
|
398
|
+
>
|
|
399
|
+
<span class="plus" aria-hidden="true">+</span>
|
|
400
|
+
<span class="label"><slot>Add card</slot></span>
|
|
401
|
+
</div>`;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
NptAddCard.observedAttributes = ["disabled"];
|
|
405
|
+
/**
|
|
406
|
+
* <npt-card-controls [frozen]></npt-card-controls>
|
|
407
|
+
* Row of toggle actions (Freeze, Limits, Details, PIN). Each press dispatches a
|
|
408
|
+
* bubbling `control` event whose detail is { action }. [frozen] flips the first
|
|
409
|
+
* action's label/affordance to Unfreeze.
|
|
410
|
+
*/
|
|
411
|
+
export class NptCardControls extends NptElement {
|
|
412
|
+
constructor() {
|
|
413
|
+
super(...arguments);
|
|
414
|
+
this.onClick = (e) => {
|
|
415
|
+
const btn = e.target?.closest("[data-action]");
|
|
416
|
+
if (!btn)
|
|
417
|
+
return;
|
|
418
|
+
const action = btn.dataset["action"];
|
|
419
|
+
if (!action)
|
|
420
|
+
return;
|
|
421
|
+
this.dispatchEvent(new CustomEvent("control", { bubbles: true, detail: { action } }));
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
attributeChangedCallback() {
|
|
425
|
+
if (this.isConnected)
|
|
426
|
+
this.update();
|
|
427
|
+
}
|
|
428
|
+
connectedCallback() {
|
|
429
|
+
super.connectedCallback();
|
|
430
|
+
this.root.addEventListener("click", this.onClick);
|
|
431
|
+
}
|
|
432
|
+
disconnectedCallback() {
|
|
433
|
+
this.root.removeEventListener("click", this.onClick);
|
|
434
|
+
}
|
|
435
|
+
styles() {
|
|
436
|
+
return css `
|
|
437
|
+
${A11Y}
|
|
438
|
+
:host {
|
|
439
|
+
display: block;
|
|
440
|
+
}
|
|
441
|
+
.bar {
|
|
442
|
+
display: flex;
|
|
443
|
+
gap: var(--npt-space-2, 8px);
|
|
444
|
+
}
|
|
445
|
+
button {
|
|
446
|
+
flex: 1 1 0;
|
|
447
|
+
min-inline-size: 0;
|
|
448
|
+
min-height: 64px;
|
|
449
|
+
display: flex;
|
|
450
|
+
flex-direction: column;
|
|
451
|
+
align-items: center;
|
|
452
|
+
justify-content: center;
|
|
453
|
+
gap: var(--npt-space-1, 4px);
|
|
454
|
+
padding-block: var(--npt-space-3, 12px);
|
|
455
|
+
padding-inline: var(--npt-space-2, 8px);
|
|
456
|
+
border: 1px solid var(--md-sys-color-outline-variant);
|
|
457
|
+
border-radius: var(--npt-corner-md, 16px);
|
|
458
|
+
background: var(--md-sys-color-surface-container-low);
|
|
459
|
+
color: var(--md-sys-color-on-surface);
|
|
460
|
+
font-family: var(--npt-font-text);
|
|
461
|
+
font-size: var(--npt-text-label, 14px);
|
|
462
|
+
cursor: pointer;
|
|
463
|
+
transition: background-color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease),
|
|
464
|
+
color var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
|
|
465
|
+
}
|
|
466
|
+
button:hover {
|
|
467
|
+
background: var(--md-sys-color-surface-container-high);
|
|
468
|
+
}
|
|
469
|
+
.glyph {
|
|
470
|
+
font-size: var(--npt-text-title, 18px);
|
|
471
|
+
line-height: 1;
|
|
472
|
+
}
|
|
473
|
+
button[data-action="freeze"][aria-pressed="true"] {
|
|
474
|
+
background: var(--md-sys-color-primary-container);
|
|
475
|
+
color: var(--md-sys-color-on-primary-container);
|
|
476
|
+
border-color: transparent;
|
|
477
|
+
}
|
|
478
|
+
`;
|
|
479
|
+
}
|
|
480
|
+
render() {
|
|
481
|
+
const frozen = this.hasAttribute("frozen");
|
|
482
|
+
const buttons = NptCardControls.ACTIONS.map((a) => {
|
|
483
|
+
const isFreeze = a.action === "freeze";
|
|
484
|
+
const label = isFreeze && frozen ? "Unfreeze" : a.label;
|
|
485
|
+
const pressed = isFreeze ? html `aria-pressed="${frozen}"` : "";
|
|
486
|
+
return html `<button
|
|
487
|
+
type="button"
|
|
488
|
+
part="control"
|
|
489
|
+
data-action="${esc(a.action)}"
|
|
490
|
+
aria-label="${esc(label)}"
|
|
491
|
+
${pressed}
|
|
492
|
+
>
|
|
493
|
+
<span class="glyph" aria-hidden="true">${a.glyph}</span>
|
|
494
|
+
<span>${esc(label)}</span>
|
|
495
|
+
</button>`;
|
|
496
|
+
}).join("");
|
|
497
|
+
return html `<div class="bar" part="bar" role="group" aria-label="Card controls">${buttons}</div>`;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
NptCardControls.observedAttributes = ["frozen"];
|
|
501
|
+
NptCardControls.ACTIONS = [
|
|
502
|
+
{ action: "freeze", label: "Freeze", glyph: "❄" },
|
|
503
|
+
{ action: "limits", label: "Limits", glyph: "⚖" },
|
|
504
|
+
{ action: "details", label: "Details", glyph: "≣" },
|
|
505
|
+
{ action: "pin", label: "PIN", glyph: "⊞" },
|
|
506
|
+
];
|
|
507
|
+
void define;
|
|
508
|
+
//# sourceMappingURL=cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../../src/components/cards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { NptElement } from "./base.js";
|
|
2
|
+
/**
|
|
3
|
+
* <npt-approval-item title="Vendor payment — ACME" amount="48,200.00" currency="LYD"
|
|
4
|
+
* maker="Mona Khaled" status="pending|approved|rejected"></npt-approval-item>
|
|
5
|
+
* A maker-checker queue item. Approve/Reject buttons emit `approve` / `reject`.
|
|
6
|
+
* Buttons hide once the item is no longer `pending`; the status chip reflects state.
|
|
7
|
+
*/
|
|
8
|
+
export declare class NptApprovalItem extends NptElement {
|
|
9
|
+
static observedAttributes: string[];
|
|
10
|
+
attributeChangedCallback(): void;
|
|
11
|
+
connectedCallback(): void;
|
|
12
|
+
disconnectedCallback(): void;
|
|
13
|
+
private onClick;
|
|
14
|
+
protected styles(): string;
|
|
15
|
+
protected render(): string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* <npt-batch-card filename="payroll-jun.csv" totalAmount="1,204,800.00" currency="LYD"
|
|
19
|
+
* payeeCount="312" requiredApprovals="2" validated="308" warnings="3" errors="1">
|
|
20
|
+
* <npt-button slot="action">Submit batch</npt-button>
|
|
21
|
+
* </npt-batch-card>
|
|
22
|
+
* A bulk-payment batch summary with a validated/warnings/errors counts row and an
|
|
23
|
+
* action slot for the primary CTA.
|
|
24
|
+
*/
|
|
25
|
+
export declare class NptBatchCard extends NptElement {
|
|
26
|
+
static observedAttributes: string[];
|
|
27
|
+
attributeChangedCallback(): void;
|
|
28
|
+
protected styles(): string;
|
|
29
|
+
protected render(): string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* <npt-audit-row actor="Mona Khaled" action="approved payment" target="#PAY-3192"
|
|
33
|
+
* time="2026-06-27 14:02"></npt-audit-row>
|
|
34
|
+
* A compact audit-log line with a leading status dot.
|
|
35
|
+
*/
|
|
36
|
+
export declare class NptAuditRow extends NptElement {
|
|
37
|
+
static observedAttributes: string[];
|
|
38
|
+
attributeChangedCallback(): void;
|
|
39
|
+
protected styles(): string;
|
|
40
|
+
protected render(): string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* <npt-user-row name="Mona Khaled" email="mona@bank.ly" role="Checker"
|
|
44
|
+
* initials="MK" src="" [suspended]>
|
|
45
|
+
* <npt-icon-button slot="actions">⋯</npt-icon-button>
|
|
46
|
+
* </npt-user-row>
|
|
47
|
+
* A user-admin list row: avatar/initials, name + email, role chip, status, and a
|
|
48
|
+
* trailing actions slot. `suspended` dims the row and shows a Suspended chip.
|
|
49
|
+
*/
|
|
50
|
+
export declare class NptUserRow extends NptElement {
|
|
51
|
+
static observedAttributes: string[];
|
|
52
|
+
attributeChangedCallback(): void;
|
|
53
|
+
protected styles(): string;
|
|
54
|
+
protected render(): string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* <npt-permission-toggle label="Approve payments"
|
|
58
|
+
* description="Allow this role to release outgoing transfers" [checked] [disabled]>
|
|
59
|
+
* </npt-permission-toggle>
|
|
60
|
+
* Label + description + a switch-like toggle. Emits `change` when toggled.
|
|
61
|
+
*/
|
|
62
|
+
export declare class NptPermissionToggle extends NptElement {
|
|
63
|
+
static observedAttributes: string[];
|
|
64
|
+
attributeChangedCallback(): void;
|
|
65
|
+
connectedCallback(): void;
|
|
66
|
+
disconnectedCallback(): void;
|
|
67
|
+
private toggle;
|
|
68
|
+
private onClick;
|
|
69
|
+
private onKey;
|
|
70
|
+
protected styles(): string;
|
|
71
|
+
protected render(): string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* <npt-workflow-status steps="Submitted,Checked,Approved" active="1"></npt-workflow-status>
|
|
75
|
+
* A compact multi-step status indicator. `active` is the zero-based index of the
|
|
76
|
+
* current step; earlier steps render as complete, later steps as upcoming.
|
|
77
|
+
*/
|
|
78
|
+
export declare class NptWorkflowStatus extends NptElement {
|
|
79
|
+
static observedAttributes: string[];
|
|
80
|
+
attributeChangedCallback(): void;
|
|
81
|
+
protected styles(): string;
|
|
82
|
+
protected render(): string;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=corporate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corporate.d.ts","sourceRoot":"","sources":["../../src/components/corporate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAKxD;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,MAAM,CAAC,kBAAkB,WAAsD;IAE/E,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAKlC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,OAAO,CAOb;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IA+G1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAsB3B;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,kBAAkB,WASvB;IAEF,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAyH1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAqC3B;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,kBAAkB,WAAyC;IAElE,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAgD1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAc3B;AAED;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,kBAAkB,WAA6D;IAEtF,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IA0F1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAyB3B;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,MAAM,CAAC,kBAAkB,WAAmD;IAE5E,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAMlC,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAKX;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IAwE1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAmB3B;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,MAAM,CAAC,kBAAkB,WAAuB;IAEhD,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IA8D1B,SAAS,CAAC,MAAM,IAAI,MAAM;CA6B3B"}
|