@shadow-corp/nearconnect 1.0.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 (179) hide show
  1. package/README.md +546 -0
  2. package/build/InjectedWallet.d.ts +22 -0
  3. package/build/InjectedWallet.js +58 -0
  4. package/build/InjectedWallet.js.map +1 -0
  5. package/build/NearConnector.d.ts +151 -0
  6. package/build/NearConnector.js +536 -0
  7. package/build/NearConnector.js.map +1 -0
  8. package/build/ParentFrameWallet.d.ts +22 -0
  9. package/build/ParentFrameWallet.js +66 -0
  10. package/build/ParentFrameWallet.js.map +1 -0
  11. package/build/SandboxedWallet/code.d.ts +7 -0
  12. package/build/SandboxedWallet/code.js +324 -0
  13. package/build/SandboxedWallet/code.js.map +1 -0
  14. package/build/SandboxedWallet/executor.d.ts +23 -0
  15. package/build/SandboxedWallet/executor.js +338 -0
  16. package/build/SandboxedWallet/executor.js.map +1 -0
  17. package/build/SandboxedWallet/iframe.d.ts +18 -0
  18. package/build/SandboxedWallet/iframe.js +78 -0
  19. package/build/SandboxedWallet/iframe.js.map +1 -0
  20. package/build/SandboxedWallet/index.d.ts +24 -0
  21. package/build/SandboxedWallet/index.js +54 -0
  22. package/build/SandboxedWallet/index.js.map +1 -0
  23. package/build/actions/index.d.ts +3 -0
  24. package/build/actions/index.js +105 -0
  25. package/build/actions/index.js.map +1 -0
  26. package/build/actions/types.d.ts +76 -0
  27. package/build/actions/types.js +3 -0
  28. package/build/actions/types.js.map +1 -0
  29. package/build/connection/health.d.ts +213 -0
  30. package/build/connection/health.js +391 -0
  31. package/build/connection/health.js.map +1 -0
  32. package/build/connection/index.d.ts +4 -0
  33. package/build/connection/index.js +48 -0
  34. package/build/connection/index.js.map +1 -0
  35. package/build/connection/reconnect.d.ts +261 -0
  36. package/build/connection/reconnect.js +454 -0
  37. package/build/connection/reconnect.js.map +1 -0
  38. package/build/connection/retry.d.ts +187 -0
  39. package/build/connection/retry.js +427 -0
  40. package/build/connection/retry.js.map +1 -0
  41. package/build/connection/state.d.ts +222 -0
  42. package/build/connection/state.js +431 -0
  43. package/build/connection/state.js.map +1 -0
  44. package/build/errors.d.ts +177 -0
  45. package/build/errors.js +546 -0
  46. package/build/errors.js.map +1 -0
  47. package/build/hardware/errors.d.ts +36 -0
  48. package/build/hardware/errors.js +127 -0
  49. package/build/hardware/errors.js.map +1 -0
  50. package/build/hardware/index.d.ts +7 -0
  51. package/build/hardware/index.js +39 -0
  52. package/build/hardware/index.js.map +1 -0
  53. package/build/hardware/near-app.d.ts +95 -0
  54. package/build/hardware/near-app.js +291 -0
  55. package/build/hardware/near-app.js.map +1 -0
  56. package/build/hardware/transport.d.ts +94 -0
  57. package/build/hardware/transport.js +267 -0
  58. package/build/hardware/transport.js.map +1 -0
  59. package/build/hardware/types.d.ts +98 -0
  60. package/build/hardware/types.js +72 -0
  61. package/build/hardware/types.js.map +1 -0
  62. package/build/helpers/analytics.d.ts +191 -0
  63. package/build/helpers/analytics.js +304 -0
  64. package/build/helpers/analytics.js.map +1 -0
  65. package/build/helpers/base58.d.ts +6 -0
  66. package/build/helpers/base58.js +47 -0
  67. package/build/helpers/base58.js.map +1 -0
  68. package/build/helpers/events.d.ts +42 -0
  69. package/build/helpers/events.js +68 -0
  70. package/build/helpers/events.js.map +1 -0
  71. package/build/helpers/html.d.ts +8 -0
  72. package/build/helpers/html.js +30 -0
  73. package/build/helpers/html.js.map +1 -0
  74. package/build/helpers/indexdb.d.ts +14 -0
  75. package/build/helpers/indexdb.js +166 -0
  76. package/build/helpers/indexdb.js.map +1 -0
  77. package/build/helpers/manifest.d.ts +147 -0
  78. package/build/helpers/manifest.js +329 -0
  79. package/build/helpers/manifest.js.map +1 -0
  80. package/build/helpers/queue.d.ts +11 -0
  81. package/build/helpers/queue.js +48 -0
  82. package/build/helpers/queue.js.map +1 -0
  83. package/build/helpers/session.d.ts +119 -0
  84. package/build/helpers/session.js +289 -0
  85. package/build/helpers/session.js.map +1 -0
  86. package/build/helpers/simulation.d.ts +128 -0
  87. package/build/helpers/simulation.js +441 -0
  88. package/build/helpers/simulation.js.map +1 -0
  89. package/build/helpers/storage.d.ts +58 -0
  90. package/build/helpers/storage.js +190 -0
  91. package/build/helpers/storage.js.map +1 -0
  92. package/build/helpers/trust.d.ts +157 -0
  93. package/build/helpers/trust.js +340 -0
  94. package/build/helpers/trust.js.map +1 -0
  95. package/build/helpers/url.d.ts +1 -0
  96. package/build/helpers/url.js +13 -0
  97. package/build/helpers/url.js.map +1 -0
  98. package/build/helpers/uuid.d.ts +1 -0
  99. package/build/helpers/uuid.js +14 -0
  100. package/build/helpers/uuid.js.map +1 -0
  101. package/build/index.d.ts +21 -0
  102. package/build/index.js +167 -0
  103. package/build/index.js.map +1 -0
  104. package/build/popups/IframeWalletPopup.d.ts +16 -0
  105. package/build/popups/IframeWalletPopup.js +38 -0
  106. package/build/popups/IframeWalletPopup.js.map +1 -0
  107. package/build/popups/NearWalletsPopup.d.ts +25 -0
  108. package/build/popups/NearWalletsPopup.js +153 -0
  109. package/build/popups/NearWalletsPopup.js.map +1 -0
  110. package/build/popups/Popup.d.ts +22 -0
  111. package/build/popups/Popup.js +94 -0
  112. package/build/popups/Popup.js.map +1 -0
  113. package/build/popups/styles.d.ts +1 -0
  114. package/build/popups/styles.js +257 -0
  115. package/build/popups/styles.js.map +1 -0
  116. package/build/security/audit-log.d.ts +123 -0
  117. package/build/security/audit-log.js +268 -0
  118. package/build/security/audit-log.js.map +1 -0
  119. package/build/security/csp.d.ts +68 -0
  120. package/build/security/csp.js +328 -0
  121. package/build/security/csp.js.map +1 -0
  122. package/build/security/index.d.ts +10 -0
  123. package/build/security/index.js +42 -0
  124. package/build/security/index.js.map +1 -0
  125. package/build/security/origin-guard.d.ts +90 -0
  126. package/build/security/origin-guard.js +244 -0
  127. package/build/security/origin-guard.js.map +1 -0
  128. package/build/security/rate-limiter.d.ts +84 -0
  129. package/build/security/rate-limiter.js +212 -0
  130. package/build/security/rate-limiter.js.map +1 -0
  131. package/build/security/secure-storage.d.ts +77 -0
  132. package/build/security/secure-storage.js +242 -0
  133. package/build/security/secure-storage.js.map +1 -0
  134. package/build/security/transaction-guard.d.ts +71 -0
  135. package/build/security/transaction-guard.js +239 -0
  136. package/build/security/transaction-guard.js.map +1 -0
  137. package/build/types.d.ts +508 -0
  138. package/build/types.js +3 -0
  139. package/build/types.js.map +1 -0
  140. package/build/ui/AccountSwitcherModal.d.ts +53 -0
  141. package/build/ui/AccountSwitcherModal.js +239 -0
  142. package/build/ui/AccountSwitcherModal.js.map +1 -0
  143. package/build/ui/Modal.d.ts +84 -0
  144. package/build/ui/Modal.js +278 -0
  145. package/build/ui/Modal.js.map +1 -0
  146. package/build/ui/TransactionModal.d.ts +84 -0
  147. package/build/ui/TransactionModal.js +406 -0
  148. package/build/ui/TransactionModal.js.map +1 -0
  149. package/build/ui/WalletSelectorModal.d.ts +97 -0
  150. package/build/ui/WalletSelectorModal.js +481 -0
  151. package/build/ui/WalletSelectorModal.js.map +1 -0
  152. package/build/ui/icons.d.ts +19 -0
  153. package/build/ui/icons.js +65 -0
  154. package/build/ui/icons.js.map +1 -0
  155. package/build/ui/index.d.ts +10 -0
  156. package/build/ui/index.js +31 -0
  157. package/build/ui/index.js.map +1 -0
  158. package/build/ui/styles.d.ts +5 -0
  159. package/build/ui/styles.js +973 -0
  160. package/build/ui/styles.js.map +1 -0
  161. package/build/ui/theme.d.ts +133 -0
  162. package/build/ui/theme.js +204 -0
  163. package/build/ui/theme.js.map +1 -0
  164. package/build/wallets/external/index.d.ts +4 -0
  165. package/build/wallets/external/index.js +9 -0
  166. package/build/wallets/external/index.js.map +1 -0
  167. package/build/wallets/external/manager.d.ts +152 -0
  168. package/build/wallets/external/manager.js +586 -0
  169. package/build/wallets/external/manager.js.map +1 -0
  170. package/build/wallets/privileged/index.d.ts +5 -0
  171. package/build/wallets/privileged/index.js +12 -0
  172. package/build/wallets/privileged/index.js.map +1 -0
  173. package/build/wallets/privileged/ledger.d.ts +132 -0
  174. package/build/wallets/privileged/ledger.js +563 -0
  175. package/build/wallets/privileged/ledger.js.map +1 -0
  176. package/build/wallets/privileged/manager.d.ts +54 -0
  177. package/build/wallets/privileged/manager.js +174 -0
  178. package/build/wallets/privileged/manager.js.map +1 -0
  179. package/package.json +33 -0
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountSwitcherModal = void 0;
4
+ const Modal_1 = require("./Modal");
5
+ const icons_1 = require("./icons");
6
+ /**
7
+ * Account switcher modal for multi-account support
8
+ */
9
+ class AccountSwitcherModal extends Modal_1.Modal {
10
+ switcherOptions;
11
+ state;
12
+ constructor(options) {
13
+ super({
14
+ ...options,
15
+ ariaLabel: "Switch account",
16
+ });
17
+ this.switcherOptions = {
18
+ ...this.options,
19
+ accounts: options.accounts,
20
+ activeAccountId: options.activeAccountId ?? options.accounts[0]?.accountId ?? "",
21
+ onSelect: options.onSelect,
22
+ onDisconnect: options.onDisconnect ?? (() => { }),
23
+ onAddAccount: options.onAddAccount ?? (() => { }),
24
+ showBalances: options.showBalances ?? true,
25
+ showDisconnect: options.showDisconnect ?? true,
26
+ showAddAccount: options.showAddAccount ?? true,
27
+ };
28
+ this.state = {
29
+ accounts: options.accounts.map((acc) => ({
30
+ ...acc,
31
+ isActive: acc.accountId === this.switcherOptions.activeAccountId,
32
+ })),
33
+ confirmDisconnect: null,
34
+ };
35
+ }
36
+ render() {
37
+ return `
38
+ <div class="nc-modal-overlay">
39
+ <div class="nc-modal">
40
+ ${this.renderHeader()}
41
+ ${this.renderBody()}
42
+ ${this.renderFooter()}
43
+ </div>
44
+ </div>
45
+ `;
46
+ }
47
+ renderHeader() {
48
+ return `
49
+ <div class="nc-header">
50
+ <h2 class="nc-header-title">Your Accounts</h2>
51
+ <button class="nc-header-btn nc-header-btn--close" aria-label="Close">${icons_1.icons.close}</button>
52
+ </div>
53
+ `;
54
+ }
55
+ renderBody() {
56
+ const { accounts, confirmDisconnect } = this.state;
57
+ if (accounts.length === 0) {
58
+ return `
59
+ <div class="nc-body">
60
+ <div class="nc-empty">
61
+ <p class="nc-empty-title">No Accounts</p>
62
+ <p class="nc-empty-message">Connect a wallet to get started</p>
63
+ </div>
64
+ </div>
65
+ `;
66
+ }
67
+ return `
68
+ <div class="nc-body">
69
+ <div class="nc-account-list">
70
+ ${accounts.map((acc) => this.renderAccount(acc, confirmDisconnect === acc.accountId)).join("")}
71
+ </div>
72
+ </div>
73
+ `;
74
+ }
75
+ renderAccount(account, showConfirm) {
76
+ const { showBalances, showDisconnect } = this.switcherOptions;
77
+ if (showConfirm) {
78
+ return `
79
+ <div class="nc-account-item nc-account-item--confirm">
80
+ <div class="nc-account-confirm">
81
+ <p class="nc-account-confirm-text">Disconnect this account?</p>
82
+ <div class="nc-account-confirm-actions">
83
+ <button class="nc-btn nc-btn--secondary nc-btn--sm" data-action="cancel-disconnect">
84
+ Cancel
85
+ </button>
86
+ <button class="nc-btn nc-btn--primary nc-btn--sm nc-btn--danger" data-action="confirm-disconnect" data-account-id="${account.accountId}">
87
+ Disconnect
88
+ </button>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ `;
93
+ }
94
+ const shortId = this.truncateAccountId(account.accountId);
95
+ const activeIndicator = account.isActive ? '<span class="nc-account-active">Active</span>' : "";
96
+ return `
97
+ <div class="nc-account-item ${account.isActive ? "nc-account-item--active" : ""}">
98
+ <button
99
+ class="nc-account-select"
100
+ data-account-id="${account.accountId}"
101
+ aria-label="Switch to ${account.accountId}"
102
+ >
103
+ <div class="nc-account-avatar">
104
+ ${account.walletIcon ? `<img src="${account.walletIcon}" alt="" class="nc-account-avatar-img" />` : this.generateAvatar(account.accountId)}
105
+ </div>
106
+ <div class="nc-account-info">
107
+ <span class="nc-account-id" title="${account.accountId}">${shortId}</span>
108
+ ${showBalances && account.balance ? `<span class="nc-account-balance">${account.balance}</span>` : ""}
109
+ ${account.walletName ? `<span class="nc-account-wallet">${account.walletName}</span>` : ""}
110
+ </div>
111
+ ${activeIndicator}
112
+ </button>
113
+ ${showDisconnect && !account.isActive
114
+ ? `
115
+ <button
116
+ class="nc-account-disconnect"
117
+ data-action="disconnect"
118
+ data-account-id="${account.accountId}"
119
+ aria-label="Disconnect ${account.accountId}"
120
+ >
121
+ ${icons_1.icons.close}
122
+ </button>
123
+ `
124
+ : ""}
125
+ </div>
126
+ `;
127
+ }
128
+ truncateAccountId(accountId) {
129
+ if (accountId.length <= 24)
130
+ return accountId;
131
+ // For .near/.testnet accounts, show more
132
+ if (accountId.includes(".")) {
133
+ const parts = accountId.split(".");
134
+ const name = parts[0];
135
+ const suffix = parts.slice(1).join(".");
136
+ if (name.length <= 16)
137
+ return accountId;
138
+ return `${name.slice(0, 8)}...${name.slice(-4)}.${suffix}`;
139
+ }
140
+ // For implicit accounts (64 char hex)
141
+ return `${accountId.slice(0, 8)}...${accountId.slice(-6)}`;
142
+ }
143
+ generateAvatar(accountId) {
144
+ // Simple hash-based color generation
145
+ let hash = 0;
146
+ for (let i = 0; i < accountId.length; i++) {
147
+ hash = accountId.charCodeAt(i) + ((hash << 5) - hash);
148
+ }
149
+ const hue = Math.abs(hash) % 360;
150
+ const saturation = 60 + (Math.abs(hash >> 8) % 20);
151
+ const lightness = 50 + (Math.abs(hash >> 16) % 10);
152
+ const initials = accountId
153
+ .replace(/\.(near|testnet)$/, "")
154
+ .slice(0, 2)
155
+ .toUpperCase();
156
+ return `
157
+ <div class="nc-account-avatar-gen" style="background: hsl(${hue}, ${saturation}%, ${lightness}%);">
158
+ ${initials}
159
+ </div>
160
+ `;
161
+ }
162
+ renderFooter() {
163
+ const { showAddAccount } = this.switcherOptions;
164
+ if (!showAddAccount)
165
+ return "";
166
+ return `
167
+ <div class="nc-footer">
168
+ <button class="nc-footer-link" data-action="add-account">
169
+ + Add Account
170
+ </button>
171
+ </div>
172
+ `;
173
+ }
174
+ setupHandlers() {
175
+ super.setupHandlers();
176
+ // Account selection
177
+ this.root.querySelectorAll(".nc-account-select").forEach((btn) => {
178
+ this.addListener(btn, "click", () => {
179
+ const accountId = btn.getAttribute("data-account-id");
180
+ if (accountId) {
181
+ this.switcherOptions.onSelect(accountId);
182
+ this.close();
183
+ }
184
+ });
185
+ });
186
+ // Disconnect button
187
+ this.root.querySelectorAll("[data-action='disconnect']").forEach((btn) => {
188
+ this.addListener(btn, "click", (e) => {
189
+ e.stopPropagation();
190
+ const accountId = btn.getAttribute("data-account-id");
191
+ if (accountId) {
192
+ this.state.confirmDisconnect = accountId;
193
+ this.update();
194
+ }
195
+ });
196
+ });
197
+ // Cancel disconnect
198
+ const cancelBtn = this.root.querySelector("[data-action='cancel-disconnect']");
199
+ if (cancelBtn) {
200
+ this.addListener(cancelBtn, "click", () => {
201
+ this.state.confirmDisconnect = null;
202
+ this.update();
203
+ });
204
+ }
205
+ // Confirm disconnect
206
+ const confirmBtn = this.root.querySelector("[data-action='confirm-disconnect']");
207
+ if (confirmBtn) {
208
+ this.addListener(confirmBtn, "click", () => {
209
+ const accountId = confirmBtn.getAttribute("data-account-id");
210
+ if (accountId) {
211
+ this.switcherOptions.onDisconnect(accountId);
212
+ this.state.accounts = this.state.accounts.filter((a) => a.accountId !== accountId);
213
+ this.state.confirmDisconnect = null;
214
+ this.update();
215
+ }
216
+ });
217
+ }
218
+ // Add account
219
+ const addBtn = this.root.querySelector("[data-action='add-account']");
220
+ if (addBtn) {
221
+ this.addListener(addBtn, "click", () => {
222
+ this.switcherOptions.onAddAccount();
223
+ this.close();
224
+ });
225
+ }
226
+ }
227
+ /**
228
+ * Update accounts list
229
+ */
230
+ updateAccounts(accounts) {
231
+ this.state.accounts = accounts.map((acc) => ({
232
+ ...acc,
233
+ isActive: acc.accountId === this.switcherOptions.activeAccountId,
234
+ }));
235
+ this.update();
236
+ }
237
+ }
238
+ exports.AccountSwitcherModal = AccountSwitcherModal;
239
+ //# sourceMappingURL=AccountSwitcherModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountSwitcherModal.js","sourceRoot":"","sources":["../../src/ui/AccountSwitcherModal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { Theme } from "./theme";
2
+ import { icons } from "./icons";
3
+ /**
4
+ * Modal configuration options
5
+ */
6
+ export interface ModalOptions {
7
+ theme?: Theme;
8
+ onClose?: () => void;
9
+ trapFocus?: boolean;
10
+ closeOnOverlay?: boolean;
11
+ closeOnEscape?: boolean;
12
+ ariaLabel?: string;
13
+ }
14
+ /**
15
+ * Base Modal class with theming and accessibility support
16
+ */
17
+ export declare class Modal {
18
+ readonly id: string;
19
+ readonly root: HTMLDivElement;
20
+ readonly theme: Theme;
21
+ protected isOpen: boolean;
22
+ protected isDestroyed: boolean;
23
+ protected styleElement: HTMLStyleElement | null;
24
+ protected focusTrap: FocusTrap | null;
25
+ protected previousActiveElement: Element | null;
26
+ protected readonly options: Required<ModalOptions>;
27
+ protected disposables: (() => void)[];
28
+ constructor(options?: ModalOptions);
29
+ /**
30
+ * Inject styles into the document
31
+ */
32
+ protected injectStyles(): void;
33
+ /**
34
+ * Render modal content - override in subclasses
35
+ */
36
+ protected render(): string;
37
+ /**
38
+ * Setup event handlers - override in subclasses
39
+ */
40
+ protected setupHandlers(): void;
41
+ /**
42
+ * Add event listener with cleanup tracking
43
+ */
44
+ protected addListener(target: Element | Document | Window, event: string, handler: EventListener, options?: AddEventListenerOptions): void;
45
+ /**
46
+ * Open the modal
47
+ */
48
+ open(): void;
49
+ /**
50
+ * Close the modal
51
+ */
52
+ close(): void;
53
+ /**
54
+ * Update modal content
55
+ */
56
+ protected update(): void;
57
+ /**
58
+ * Destroy the modal
59
+ */
60
+ destroy(): void;
61
+ /**
62
+ * Announce message to screen readers
63
+ */
64
+ protected announce(message: string): void;
65
+ /**
66
+ * Get icon HTML
67
+ */
68
+ protected icon(name: keyof typeof icons): string;
69
+ }
70
+ /**
71
+ * Simple focus trap implementation
72
+ */
73
+ declare class FocusTrap {
74
+ private container;
75
+ private firstFocusable;
76
+ private lastFocusable;
77
+ private handleKeyDown;
78
+ constructor(container: HTMLElement);
79
+ activate(): void;
80
+ deactivate(): void;
81
+ private updateFocusableElements;
82
+ private onKeyDown;
83
+ }
84
+ export {};
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Modal = void 0;
4
+ const theme_1 = require("./theme");
5
+ const styles_1 = require("./styles");
6
+ const icons_1 = require("./icons");
7
+ /**
8
+ * Unique ID generator for modal instances
9
+ */
10
+ const generateId = () => `nc-${Math.random().toString(36).substring(2, 11)}`;
11
+ /**
12
+ * Base Modal class with theming and accessibility support
13
+ */
14
+ class Modal {
15
+ id;
16
+ root;
17
+ theme;
18
+ isOpen = false;
19
+ isDestroyed = false;
20
+ styleElement = null;
21
+ focusTrap = null;
22
+ previousActiveElement = null;
23
+ options;
24
+ disposables = [];
25
+ constructor(options = {}) {
26
+ this.id = generateId();
27
+ this.root = document.createElement("div");
28
+ // Resolve theme
29
+ const darkTheme = (0, theme_1.createDarkTheme)(options.theme ? { branding: options.theme.branding } : undefined);
30
+ const lightTheme = (0, theme_1.createLightTheme)(options.theme ? { branding: options.theme.branding } : undefined);
31
+ if (options.theme) {
32
+ this.theme = options.theme;
33
+ }
34
+ else {
35
+ this.theme = (0, theme_1.getSystemTheme)(darkTheme, lightTheme);
36
+ }
37
+ this.options = {
38
+ theme: this.theme,
39
+ onClose: options.onClose ?? (() => { }),
40
+ trapFocus: options.trapFocus ?? true,
41
+ closeOnOverlay: options.closeOnOverlay ?? true,
42
+ closeOnEscape: options.closeOnEscape ?? true,
43
+ ariaLabel: options.ariaLabel ?? "Modal dialog",
44
+ };
45
+ }
46
+ /**
47
+ * Inject styles into the document
48
+ */
49
+ injectStyles() {
50
+ if (this.styleElement)
51
+ return;
52
+ this.styleElement = document.createElement("style");
53
+ this.styleElement.id = `${this.id}-styles`;
54
+ this.styleElement.textContent = (0, styles_1.generateStyles)(`.${this.id}`, this.theme);
55
+ document.head.appendChild(this.styleElement);
56
+ }
57
+ /**
58
+ * Render modal content - override in subclasses
59
+ */
60
+ render() {
61
+ return "";
62
+ }
63
+ /**
64
+ * Setup event handlers - override in subclasses
65
+ */
66
+ setupHandlers() {
67
+ // Overlay click
68
+ if (this.options.closeOnOverlay) {
69
+ const overlay = this.root.querySelector(".nc-modal-overlay");
70
+ if (overlay) {
71
+ this.addListener(overlay, "click", (e) => {
72
+ if (e.target === overlay) {
73
+ this.close();
74
+ }
75
+ });
76
+ }
77
+ }
78
+ // Escape key
79
+ if (this.options.closeOnEscape) {
80
+ this.addListener(document, "keydown", (e) => {
81
+ if (e.key === "Escape" && this.isOpen) {
82
+ this.close();
83
+ }
84
+ });
85
+ }
86
+ // Close button
87
+ const closeBtn = this.root.querySelector(".nc-header-btn--close");
88
+ if (closeBtn) {
89
+ this.addListener(closeBtn, "click", () => this.close());
90
+ }
91
+ }
92
+ /**
93
+ * Add event listener with cleanup tracking
94
+ */
95
+ addListener(target, event, handler, options) {
96
+ target.addEventListener(event, handler, options);
97
+ this.disposables.push(() => target.removeEventListener(event, handler, options));
98
+ }
99
+ /**
100
+ * Open the modal
101
+ */
102
+ open() {
103
+ if (this.isOpen || this.isDestroyed)
104
+ return;
105
+ this.isOpen = true;
106
+ this.previousActiveElement = document.activeElement;
107
+ // Inject styles
108
+ this.injectStyles();
109
+ // Create modal structure
110
+ this.root.className = this.id;
111
+ this.root.innerHTML = this.render();
112
+ // Add accessibility attributes
113
+ const modal = this.root.querySelector(".nc-modal");
114
+ if (modal) {
115
+ modal.setAttribute("role", "dialog");
116
+ modal.setAttribute("aria-modal", "true");
117
+ modal.setAttribute("aria-label", this.options.ariaLabel);
118
+ }
119
+ // Append to body
120
+ document.body.appendChild(this.root);
121
+ // Setup handlers
122
+ this.setupHandlers();
123
+ // Setup focus trap
124
+ if (this.options.trapFocus) {
125
+ this.focusTrap = new FocusTrap(this.root);
126
+ this.focusTrap.activate();
127
+ }
128
+ // Prevent body scroll
129
+ document.body.style.overflow = "hidden";
130
+ // Animate in
131
+ requestAnimationFrame(() => {
132
+ this.root.style.display = "block";
133
+ const overlay = this.root.querySelector(".nc-modal-overlay");
134
+ const modal = this.root.querySelector(".nc-modal");
135
+ if (overlay)
136
+ overlay.style.opacity = "0";
137
+ if (modal)
138
+ modal.style.transform = "translateY(20px)";
139
+ requestAnimationFrame(() => {
140
+ if (overlay)
141
+ overlay.style.opacity = "1";
142
+ if (modal)
143
+ modal.style.transform = "translateY(0)";
144
+ });
145
+ });
146
+ // Announce to screen readers
147
+ this.announce("Dialog opened");
148
+ }
149
+ /**
150
+ * Close the modal
151
+ */
152
+ close() {
153
+ if (!this.isOpen || this.isDestroyed)
154
+ return;
155
+ this.isOpen = false;
156
+ // Animate out
157
+ const overlay = this.root.querySelector(".nc-modal-overlay");
158
+ const modal = this.root.querySelector(".nc-modal");
159
+ if (overlay)
160
+ overlay.style.opacity = "0";
161
+ if (modal)
162
+ modal.style.transform = "translateY(20px)";
163
+ setTimeout(() => {
164
+ this.destroy();
165
+ this.options.onClose();
166
+ }, 200);
167
+ // Announce to screen readers
168
+ this.announce("Dialog closed");
169
+ }
170
+ /**
171
+ * Update modal content
172
+ */
173
+ update() {
174
+ if (!this.isOpen)
175
+ return;
176
+ // Cleanup old handlers
177
+ this.disposables.forEach((dispose) => dispose());
178
+ this.disposables = [];
179
+ // Re-render
180
+ this.root.innerHTML = this.render();
181
+ // Re-setup handlers
182
+ this.setupHandlers();
183
+ }
184
+ /**
185
+ * Destroy the modal
186
+ */
187
+ destroy() {
188
+ if (this.isDestroyed)
189
+ return;
190
+ this.isDestroyed = true;
191
+ this.isOpen = false;
192
+ // Cleanup disposables
193
+ this.disposables.forEach((dispose) => dispose());
194
+ this.disposables = [];
195
+ // Deactivate focus trap
196
+ this.focusTrap?.deactivate();
197
+ // Restore focus
198
+ if (this.previousActiveElement instanceof HTMLElement) {
199
+ this.previousActiveElement.focus();
200
+ }
201
+ // Remove elements
202
+ this.root.remove();
203
+ this.styleElement?.remove();
204
+ // Restore body scroll
205
+ document.body.style.overflow = "";
206
+ }
207
+ /**
208
+ * Announce message to screen readers
209
+ */
210
+ announce(message) {
211
+ const announcer = document.createElement("div");
212
+ announcer.setAttribute("aria-live", "polite");
213
+ announcer.setAttribute("aria-atomic", "true");
214
+ announcer.className = "nc-sr-only";
215
+ announcer.textContent = message;
216
+ document.body.appendChild(announcer);
217
+ setTimeout(() => announcer.remove(), 1000);
218
+ }
219
+ /**
220
+ * Get icon HTML
221
+ */
222
+ icon(name) {
223
+ return icons_1.icons[name];
224
+ }
225
+ }
226
+ exports.Modal = Modal;
227
+ /**
228
+ * Simple focus trap implementation
229
+ */
230
+ class FocusTrap {
231
+ container;
232
+ firstFocusable = null;
233
+ lastFocusable = null;
234
+ handleKeyDown;
235
+ constructor(container) {
236
+ this.container = container;
237
+ this.handleKeyDown = this.onKeyDown.bind(this);
238
+ }
239
+ activate() {
240
+ this.updateFocusableElements();
241
+ document.addEventListener("keydown", this.handleKeyDown);
242
+ this.firstFocusable?.focus();
243
+ }
244
+ deactivate() {
245
+ document.removeEventListener("keydown", this.handleKeyDown);
246
+ }
247
+ updateFocusableElements() {
248
+ const focusableSelectors = [
249
+ "button:not([disabled])",
250
+ "input:not([disabled])",
251
+ "select:not([disabled])",
252
+ "textarea:not([disabled])",
253
+ "a[href]",
254
+ "[tabindex]:not([tabindex='-1'])",
255
+ ].join(", ");
256
+ const focusables = Array.from(this.container.querySelectorAll(focusableSelectors));
257
+ this.firstFocusable = focusables[0] ?? null;
258
+ this.lastFocusable = focusables[focusables.length - 1] ?? null;
259
+ }
260
+ onKeyDown(e) {
261
+ if (e.key !== "Tab")
262
+ return;
263
+ this.updateFocusableElements();
264
+ if (e.shiftKey) {
265
+ if (document.activeElement === this.firstFocusable) {
266
+ e.preventDefault();
267
+ this.lastFocusable?.focus();
268
+ }
269
+ }
270
+ else {
271
+ if (document.activeElement === this.lastFocusable) {
272
+ e.preventDefault();
273
+ this.firstFocusable?.focus();
274
+ }
275
+ }
276
+ }
277
+ }
278
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"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"}