@neptune.fintech/web-ui 2.0.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 (73) hide show
  1. package/README.md +24 -2
  2. package/dist/components/actions.d.ts +43 -0
  3. package/dist/components/actions.d.ts.map +1 -0
  4. package/dist/components/actions.js +279 -0
  5. package/dist/components/actions.js.map +1 -0
  6. package/dist/components/button.d.ts +1 -1
  7. package/dist/components/button.d.ts.map +1 -1
  8. package/dist/components/button.js +9 -1
  9. package/dist/components/button.js.map +1 -1
  10. package/dist/components/cards.d.ts +64 -0
  11. package/dist/components/cards.d.ts.map +1 -0
  12. package/dist/components/cards.js +498 -0
  13. package/dist/components/cards.js.map +1 -0
  14. package/dist/components/containers.d.ts +54 -0
  15. package/dist/components/containers.d.ts.map +1 -0
  16. package/dist/components/containers.js +298 -0
  17. package/dist/components/containers.js.map +1 -0
  18. package/dist/components/corporate.d.ts +84 -0
  19. package/dist/components/corporate.d.ts.map +1 -0
  20. package/dist/components/corporate.js +782 -0
  21. package/dist/components/corporate.js.map +1 -0
  22. package/dist/components/data-viz.d.ts +69 -0
  23. package/dist/components/data-viz.d.ts.map +1 -0
  24. package/dist/components/data-viz.js +526 -0
  25. package/dist/components/data-viz.js.map +1 -0
  26. package/dist/components/feedback-status.d.ts +80 -0
  27. package/dist/components/feedback-status.d.ts.map +1 -0
  28. package/dist/components/feedback-status.js +537 -0
  29. package/dist/components/feedback-status.js.map +1 -0
  30. package/dist/components/feedback.d.ts +42 -0
  31. package/dist/components/feedback.d.ts.map +1 -0
  32. package/dist/components/feedback.js +241 -0
  33. package/dist/components/feedback.js.map +1 -0
  34. package/dist/components/inputs.d.ts +8 -1
  35. package/dist/components/inputs.d.ts.map +1 -1
  36. package/dist/components/inputs.js +57 -3
  37. package/dist/components/inputs.js.map +1 -1
  38. package/dist/components/layout.d.ts +68 -0
  39. package/dist/components/layout.d.ts.map +1 -0
  40. package/dist/components/layout.js +359 -0
  41. package/dist/components/layout.js.map +1 -0
  42. package/dist/components/money-inputs.d.ts +105 -0
  43. package/dist/components/money-inputs.d.ts.map +1 -0
  44. package/dist/components/money-inputs.js +766 -0
  45. package/dist/components/money-inputs.js.map +1 -0
  46. package/dist/components/money-movement.d.ts +79 -0
  47. package/dist/components/money-movement.d.ts.map +1 -0
  48. package/dist/components/money-movement.js +740 -0
  49. package/dist/components/money-movement.js.map +1 -0
  50. package/dist/components/nav-rail.d.ts +22 -0
  51. package/dist/components/nav-rail.d.ts.map +1 -0
  52. package/dist/components/nav-rail.js +120 -0
  53. package/dist/components/nav-rail.js.map +1 -0
  54. package/dist/components/selection.d.ts +51 -0
  55. package/dist/components/selection.d.ts.map +1 -0
  56. package/dist/components/selection.js +377 -0
  57. package/dist/components/selection.js.map +1 -0
  58. package/dist/components/shell-layout.d.ts +103 -0
  59. package/dist/components/shell-layout.d.ts.map +1 -0
  60. package/dist/components/shell-layout.js +582 -0
  61. package/dist/components/shell-layout.js.map +1 -0
  62. package/dist/components/wallet-pay.d.ts +85 -0
  63. package/dist/components/wallet-pay.d.ts.map +1 -0
  64. package/dist/components/wallet-pay.js +633 -0
  65. package/dist/components/wallet-pay.js.map +1 -0
  66. package/dist/index.d.ts +15 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +15 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/register.d.ts.map +1 -1
  71. package/dist/register.js +103 -0
  72. package/dist/register.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ // © 2026 Neptune.Fintech (neptune.ly) · Neptune Odyssey Community License v1.0
2
+ // Neptune Odyssey — communication & feedback
3
+ // <npt-progress>, <npt-snackbar>, <npt-tooltip>, <npt-banner>.
4
+ // Custom-property driven only; logical layout → mirrors in RTL.
5
+ import { NptElement, css, html, A11Y } from "./base.js";
6
+ const esc = (v) => (v ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[c]);
7
+ /**
8
+ * <npt-progress variant="linear|circular" value="60" [indeterminate]></npt-progress>
9
+ * Omit value (or set [indeterminate]) for the indeterminate state.
10
+ */
11
+ export class NptProgress extends NptElement {
12
+ attributeChangedCallback() {
13
+ if (this.isConnected)
14
+ this.update();
15
+ }
16
+ styles() {
17
+ return css `
18
+ ${A11Y}
19
+ :host {
20
+ display: block;
21
+ }
22
+ .track {
23
+ block-size: 4px;
24
+ inline-size: 100%;
25
+ border-radius: var(--npt-corner-full, 999px);
26
+ background: var(--md-sys-color-surface-container-highest);
27
+ overflow: hidden;
28
+ }
29
+ .bar {
30
+ block-size: 100%;
31
+ background: var(--md-sys-color-primary);
32
+ border-radius: var(--npt-corner-full, 999px);
33
+ transition: inline-size var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
34
+ }
35
+ :host([indeterminate]) .bar,
36
+ :host(:not([value])) .bar {
37
+ inline-size: 40%;
38
+ animation: slide 1.4s var(--npt-ease-standard, ease) infinite;
39
+ }
40
+ @keyframes slide {
41
+ 0% { transform: translateX(-120%); }
42
+ 100% { transform: translateX(320%); }
43
+ }
44
+ .ring {
45
+ inline-size: 48px;
46
+ block-size: 48px;
47
+ transform: rotate(-90deg);
48
+ }
49
+ .ring circle {
50
+ fill: none;
51
+ stroke-width: 4;
52
+ }
53
+ .ring .bg {
54
+ stroke: var(--md-sys-color-surface-container-highest);
55
+ }
56
+ .ring .fg {
57
+ stroke: var(--md-sys-color-primary);
58
+ stroke-linecap: round;
59
+ transition: stroke-dashoffset var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
60
+ }
61
+ :host([indeterminate]) .ring {
62
+ animation: spin 1.2s linear infinite;
63
+ }
64
+ @keyframes spin {
65
+ to { transform: rotate(270deg); }
66
+ }
67
+ `;
68
+ }
69
+ render() {
70
+ const variant = this.getAttribute("variant") || "linear";
71
+ const indeterminate = this.hasAttribute("indeterminate") || !this.hasAttribute("value");
72
+ const value = Math.max(0, Math.min(100, Number(this.getAttribute("value") ?? 0)));
73
+ const label = esc(this.getAttribute("label")) || "progress";
74
+ const aria = indeterminate
75
+ ? html `role="progressbar" aria-label="${label}"`
76
+ : html `role="progressbar" aria-label="${label}" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="100"`;
77
+ if (variant === "circular") {
78
+ const r = 20;
79
+ const circ = 2 * Math.PI * r;
80
+ const offset = indeterminate ? circ * 0.7 : circ * (1 - value / 100);
81
+ return html `<svg class="ring" part="ring" viewBox="0 0 48 48" ${aria}>
82
+ <circle class="bg" cx="24" cy="24" r="${r}"></circle>
83
+ <circle class="fg" cx="24" cy="24" r="${r}"
84
+ stroke-dasharray="${circ}" stroke-dashoffset="${offset}"></circle>
85
+ </svg>`;
86
+ }
87
+ const width = indeterminate ? "40%" : `${value}%`;
88
+ return html `<div class="track" part="track" ${aria}>
89
+ <div class="bar" style="inline-size:${width}"></div>
90
+ </div>`;
91
+ }
92
+ }
93
+ NptProgress.observedAttributes = ["variant", "value", "indeterminate", "label"];
94
+ /**
95
+ * <npt-snackbar message="Saved" [open]>…optional action slot…</npt-snackbar>
96
+ * Inverse-surface toast. Provide an action via the default slot.
97
+ */
98
+ export class NptSnackbar extends NptElement {
99
+ attributeChangedCallback() {
100
+ if (this.isConnected)
101
+ this.update();
102
+ }
103
+ styles() {
104
+ return css `
105
+ ${A11Y}
106
+ :host {
107
+ display: none;
108
+ }
109
+ :host([open]) {
110
+ display: block;
111
+ }
112
+ .bar {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: var(--npt-space-4, 16px);
116
+ min-height: 48px;
117
+ padding-inline: var(--npt-space-4, 16px);
118
+ padding-block: var(--npt-space-3, 12px);
119
+ border-radius: var(--npt-corner-xs, 8px);
120
+ background: var(--md-sys-color-inverse-surface);
121
+ color: var(--md-sys-color-inverse-on-surface);
122
+ box-shadow: var(--npt-elevation-3, 0 8px 20px rgba(0, 0, 0, 0.2));
123
+ font-family: var(--npt-font-text);
124
+ font-size: var(--npt-text-body, 14px);
125
+ }
126
+ .msg {
127
+ flex: 1 1 auto;
128
+ }
129
+ ::slotted(*) {
130
+ color: var(--md-sys-color-inverse-primary);
131
+ }
132
+ `;
133
+ }
134
+ render() {
135
+ const message = esc(this.getAttribute("message"));
136
+ return html `<div class="bar" part="bar" role="status" aria-live="polite">
137
+ <span class="msg">${message}</span>
138
+ <slot></slot>
139
+ </div>`;
140
+ }
141
+ }
142
+ NptSnackbar.observedAttributes = ["message", "open"];
143
+ /**
144
+ * <npt-tooltip label="Copy"><npt-icon-button>⧉</npt-icon-button></npt-tooltip>
145
+ * Wraps a trigger; reveals the label on hover/focus.
146
+ */
147
+ export class NptTooltip extends NptElement {
148
+ attributeChangedCallback() {
149
+ if (this.isConnected)
150
+ this.update();
151
+ }
152
+ styles() {
153
+ return css `
154
+ ${A11Y}
155
+ :host {
156
+ display: inline-flex;
157
+ position: relative;
158
+ }
159
+ .tip {
160
+ position: absolute;
161
+ inset-block-end: calc(100% + var(--npt-space-2, 8px));
162
+ inset-inline-start: 50%;
163
+ transform: translateX(-50%);
164
+ white-space: nowrap;
165
+ padding-inline: var(--npt-space-3, 12px);
166
+ padding-block: var(--npt-space-1, 4px);
167
+ border-radius: var(--npt-corner-xs, 8px);
168
+ background: var(--md-sys-color-inverse-surface);
169
+ color: var(--md-sys-color-inverse-on-surface);
170
+ font-family: var(--npt-font-text);
171
+ font-size: var(--npt-text-caption, 12px);
172
+ opacity: 0;
173
+ pointer-events: none;
174
+ transition: opacity var(--npt-dur-fast, 200ms) var(--npt-ease-standard, ease);
175
+ z-index: var(--npt-z-toast, 80);
176
+ }
177
+ :host(:hover) .tip,
178
+ :host(:focus-within) .tip {
179
+ opacity: 1;
180
+ }
181
+ `;
182
+ }
183
+ render() {
184
+ const label = esc(this.getAttribute("label"));
185
+ return html `<slot></slot>
186
+ <span class="tip" part="tip" role="tooltip">${label}</span>`;
187
+ }
188
+ }
189
+ NptTooltip.observedAttributes = ["label"];
190
+ /**
191
+ * <npt-banner text="Update available">…actions slot…</npt-banner>
192
+ * Surface-level inline message with an actions slot.
193
+ */
194
+ export class NptBanner extends NptElement {
195
+ attributeChangedCallback() {
196
+ if (this.isConnected)
197
+ this.update();
198
+ }
199
+ styles() {
200
+ return css `
201
+ ${A11Y}
202
+ :host {
203
+ display: block;
204
+ }
205
+ .banner {
206
+ display: flex;
207
+ align-items: center;
208
+ flex-wrap: wrap;
209
+ gap: var(--npt-space-4, 16px);
210
+ padding-inline: var(--npt-space-4, 16px);
211
+ padding-block: var(--npt-space-3, 12px);
212
+ background: var(--md-sys-color-surface-container);
213
+ color: var(--md-sys-color-on-surface);
214
+ border-bottom: 1px solid var(--md-sys-color-outline-variant);
215
+ font-family: var(--npt-font-text);
216
+ font-size: var(--npt-text-body, 14px);
217
+ }
218
+ .leading {
219
+ display: inline-flex;
220
+ }
221
+ .text {
222
+ flex: 1 1 200px;
223
+ }
224
+ .actions {
225
+ display: inline-flex;
226
+ gap: var(--npt-space-2, 8px);
227
+ margin-inline-start: auto;
228
+ }
229
+ `;
230
+ }
231
+ render() {
232
+ const text = esc(this.getAttribute("text"));
233
+ return html `<div class="banner" part="banner" role="status">
234
+ <span class="leading"><slot name="leading"></slot></span>
235
+ <span class="text">${text}</span>
236
+ <span class="actions"><slot></slot></span>
237
+ </div>`;
238
+ }
239
+ }
240
+ NptBanner.observedAttributes = ["text"];
241
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/components/feedback.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,17 @@ export declare class NptTextField extends NptElement {
10
10
  protected styles(): string;
11
11
  protected render(): string;
12
12
  }
13
- /** <npt-chip [selected]>Label</npt-chip> */
13
+ /**
14
+ * <npt-chip variant="assist|filter|input|suggestion" [selected]>Label</npt-chip>
15
+ * `filter` shows a leading ✓ when [selected]; `input` shows a removable ✕ that
16
+ * dispatches a `remove` event. Defaults to the assist/filter treatment.
17
+ */
14
18
  export declare class NptChip extends NptElement {
15
19
  static observedAttributes: string[];
16
20
  attributeChangedCallback(): void;
21
+ connectedCallback(): void;
22
+ disconnectedCallback(): void;
23
+ private onClick;
17
24
  protected styles(): string;
18
25
  protected render(): string;
19
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/components/inputs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAKxD;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,kBAAkB,WAAsD;IAE/E,wBAAwB,IAAI,IAAI;IAIhC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,CAAC,MAAM,IAAI,MAAM;IAgD1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAkB3B;AAED,4CAA4C;AAC5C,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,kBAAkB,WAAgB;IAEzC,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IA2B1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAI3B;AAED,oEAAoE;AACpE,qBAAa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,kBAAkB,WAAY;IAErC,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAmC1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B"}
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/components/inputs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAKxD;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,kBAAkB,WAAsD;IAE/E,wBAAwB,IAAI,IAAI;IAIhC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,CAAC,MAAM,IAAI,MAAM;IAgD1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAkB3B;AAED;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,kBAAkB,WAAuC;IAEhE,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAKlC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,OAAO,CAKb;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IAqD1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAY3B;AAED,oEAAoE;AACpE,qBAAa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,kBAAkB,WAAY;IAErC,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAmC1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B"}
@@ -81,12 +81,32 @@ export class NptTextField extends NptElement {
81
81
  }
82
82
  }
83
83
  NptTextField.observedAttributes = ["label", "value", "placeholder", "error", "type"];
84
- /** <npt-chip [selected]>Label</npt-chip> */
84
+ /**
85
+ * <npt-chip variant="assist|filter|input|suggestion" [selected]>Label</npt-chip>
86
+ * `filter` shows a leading ✓ when [selected]; `input` shows a removable ✕ that
87
+ * dispatches a `remove` event. Defaults to the assist/filter treatment.
88
+ */
85
89
  export class NptChip extends NptElement {
90
+ constructor() {
91
+ super(...arguments);
92
+ this.onClick = (e) => {
93
+ if (e.target?.closest(".remove")) {
94
+ e.stopPropagation();
95
+ this.dispatchEvent(new CustomEvent("remove", { bubbles: true }));
96
+ }
97
+ };
98
+ }
86
99
  attributeChangedCallback() {
87
100
  if (this.isConnected)
88
101
  this.update();
89
102
  }
103
+ connectedCallback() {
104
+ super.connectedCallback();
105
+ this.root.addEventListener("click", this.onClick);
106
+ }
107
+ disconnectedCallback() {
108
+ this.root.removeEventListener("click", this.onClick);
109
+ }
90
110
  styles() {
91
111
  return css `
92
112
  ${A11Y}
@@ -99,6 +119,7 @@ export class NptChip extends NptElement {
99
119
  min-height: 32px;
100
120
  display: inline-flex;
101
121
  align-items: center;
122
+ gap: var(--npt-space-2, 8px);
102
123
  padding-inline: var(--npt-space-4, 16px);
103
124
  border-radius: var(--npt-corner-sm, 12px);
104
125
  border: 1px solid var(--md-sys-color-outline);
@@ -106,19 +127,52 @@ export class NptChip extends NptElement {
106
127
  color: var(--md-sys-color-on-surface-variant);
107
128
  cursor: pointer;
108
129
  }
130
+ :host([disabled]) .chip {
131
+ cursor: not-allowed;
132
+ opacity: 0.38;
133
+ }
109
134
  :host([selected]) .chip {
110
135
  background: var(--md-sys-color-secondary-container);
111
136
  color: var(--md-sys-color-on-secondary-container);
112
137
  border-color: transparent;
113
138
  }
139
+ .check {
140
+ display: none;
141
+ font-size: var(--npt-text-body, 14px);
142
+ }
143
+ :host([variant="filter"][selected]) .check {
144
+ display: inline;
145
+ }
146
+ .remove {
147
+ display: none;
148
+ border: none;
149
+ background: transparent;
150
+ color: inherit;
151
+ cursor: pointer;
152
+ font-size: var(--npt-text-body-lg, 16px);
153
+ line-height: 1;
154
+ padding: 0;
155
+ margin-inline-end: calc(-1 * var(--npt-space-1, 4px));
156
+ }
157
+ :host([variant="input"]) .remove {
158
+ display: inline-flex;
159
+ }
114
160
  `;
115
161
  }
116
162
  render() {
117
163
  const selected = this.hasAttribute("selected");
118
- return html `<button class="chip" part="chip" role="option" aria-selected="${selected}"><slot></slot></button>`;
164
+ const variant = this.getAttribute("variant") || "filter";
165
+ const disabled = this.hasAttribute("disabled") ? "disabled" : "";
166
+ const role = variant === "filter" ? "option" : "button";
167
+ const ariaSel = variant === "filter" ? html `aria-selected="${selected}"` : "";
168
+ return html `<button class="chip" part="chip" role="${role}" ${ariaSel} ${disabled}>
169
+ <span class="check" aria-hidden="true">✓</span>
170
+ <slot></slot>
171
+ <span class="remove" role="button" aria-label="Remove" tabindex="0">✕</span>
172
+ </button>`;
119
173
  }
120
174
  }
121
- NptChip.observedAttributes = ["selected"];
175
+ NptChip.observedAttributes = ["selected", "variant", "disabled"];
122
176
  /** <npt-badge tone="primary|success|error|neutral">3</npt-badge> */
123
177
  export class NptBadge extends NptElement {
124
178
  attributeChangedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/components/inputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/components/inputs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { NptElement } from "./base.js";
2
+ /** <npt-list> with <npt-list-item> children. */
3
+ export declare class NptList extends NptElement {
4
+ protected styles(): string;
5
+ protected render(): string;
6
+ }
7
+ /**
8
+ * <npt-list-item [interactive] headline="Title" supporting="Sub">
9
+ * <span slot="leading">●</span><span slot="trailing">→</span>
10
+ * </npt-list-item>
11
+ */
12
+ export declare class NptListItem extends NptElement {
13
+ static observedAttributes: string[];
14
+ attributeChangedCallback(): void;
15
+ protected styles(): string;
16
+ protected render(): string;
17
+ }
18
+ /** <npt-divider [inset]></npt-divider> */
19
+ export declare class NptDivider extends NptElement {
20
+ static observedAttributes: string[];
21
+ attributeChangedCallback(): void;
22
+ protected styles(): string;
23
+ protected render(): string;
24
+ }
25
+ /**
26
+ * <npt-tabs> with <npt-tab> children.
27
+ * Click selects a tab (sets [active]); a sliding indicator follows.
28
+ */
29
+ export declare class NptTabs extends NptElement {
30
+ connectedCallback(): void;
31
+ disconnectedCallback(): void;
32
+ private onClick;
33
+ protected styles(): string;
34
+ protected render(): string;
35
+ }
36
+ /** <npt-tab [active]>Overview</npt-tab> */
37
+ export declare class NptTab extends NptElement {
38
+ static observedAttributes: string[];
39
+ attributeChangedCallback(): void;
40
+ protected styles(): string;
41
+ protected render(): string;
42
+ }
43
+ /** <npt-accordion> with <npt-accordion-item> children. */
44
+ export declare class NptAccordion extends NptElement {
45
+ protected styles(): string;
46
+ protected render(): string;
47
+ }
48
+ /**
49
+ * <npt-accordion-item [open] summary="Section">…detail…</npt-accordion-item>
50
+ * Native <details>/<summary> semantics under the hood.
51
+ */
52
+ export declare class NptAccordionItem extends NptElement {
53
+ static observedAttributes: string[];
54
+ attributeChangedCallback(): void;
55
+ connectedCallback(): void;
56
+ disconnectedCallback(): void;
57
+ private onToggle;
58
+ protected styles(): string;
59
+ protected render(): string;
60
+ }
61
+ /** <npt-avatar src="" initials="MK" size="sm|md|lg" label="Mona"></npt-avatar> */
62
+ export declare class NptAvatar extends NptElement {
63
+ static observedAttributes: string[];
64
+ attributeChangedCallback(): void;
65
+ protected styles(): string;
66
+ protected render(): string;
67
+ }
68
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/components/layout.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AAKxD,gDAAgD;AAChD,qBAAa,OAAQ,SAAQ,UAAU;IACrC,SAAS,CAAC,MAAM,IAAI,MAAM;IAa1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,kBAAkB,WAA6C;IAEtE,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IA6C1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAgB3B;AAED,0CAA0C;AAC1C,qBAAa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,kBAAkB,WAAa;IAEtC,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAkB1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B;AAED;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IAC5B,iBAAiB,IAAI,IAAI;IAKlC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,OAAO,CAKb;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IAc1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B;AAED,2CAA2C;AAC3C,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,kBAAkB,WAAc;IAEvC,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAyC1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAM3B;AAED,0DAA0D;AAC1D,qBAAa,YAAa,SAAQ,UAAU;IAC1C,SAAS,CAAC,MAAM,IAAI,MAAM;IAQ1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAG3B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,MAAM,CAAC,kBAAkB,WAAuB;IAEhD,wBAAwB,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAKlC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,QAAQ,CAGd;IAEF,SAAS,CAAC,MAAM,IAAI,MAAM;IA0C1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAQ3B;AAED,kFAAkF;AAClF,qBAAa,SAAU,SAAQ,UAAU;IACvC,MAAM,CAAC,kBAAkB,WAAwC;IAEjE,wBAAwB,IAAI,IAAI;IAIhC,SAAS,CAAC,MAAM,IAAI,MAAM;IAoC1B,SAAS,CAAC,MAAM,IAAI,MAAM;CAS3B"}