@hsuite/native-connect-angular 1.0.0 → 2.1.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/coverage/coverage-summary.json +49 -49
- package/coverage/index.html +122 -122
- package/coverage/lcov-report/index.html +122 -122
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/index.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lcov-report/lib/models/index.html +1 -1
- package/coverage/lcov-report/lib/models/provider-types.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/index.html +18 -18
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +20 -20
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lcov-report/lib/services/index.html +31 -31
- package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +43 -43
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -7
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +7 -10
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +4 -7
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/index.html +1 -1
- package/coverage/lcov-report/lib/utils/index.html +1 -1
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +1 -1
- package/coverage/lcov.info +14420 -14977
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
- package/coverage/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lib/directives/index.html +1 -1
- package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lib/index.html +1 -1
- package/coverage/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lib/models/index.html +1 -1
- package/coverage/lib/models/provider-types.ts.html +1 -1
- package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
- package/coverage/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lib/providers/index.html +18 -18
- package/coverage/lib/providers/p2p-native/index.html +20 -20
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
- package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lib/services/index.html +31 -31
- package/coverage/lib/services/logger.service.ts.html +4 -4
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lib/services/transaction-builders/index.html +43 -43
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lib/services/transaction.service.ts.html +4 -7
- package/coverage/lib/services/unified-wallet.service.ts.html +7 -10
- package/coverage/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lib/services/wallet-providers.service.ts.html +4 -7
- package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lib/transports/index.html +1 -1
- package/coverage/lib/utils/index.html +1 -1
- package/coverage/lib/utils/ledger-icons.util.ts.html +1 -1
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +85 -20
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +33 -3
- package/package.json +4 -4
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +84 -19
- package/src/lib/services/transaction.service.ts +0 -1
- package/src/lib/services/unified-wallet.service.ts +0 -1
- package/src/lib/services/wallet-providers.service.ts +0 -1
|
@@ -808,7 +808,7 @@
|
|
|
808
808
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
809
809
|
Code coverage generated by
|
|
810
810
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
811
|
-
at 2026-06-
|
|
811
|
+
at 2026-06-10T09:00:36.812Z
|
|
812
812
|
</div>
|
|
813
813
|
<script src="../../prettify.js"></script>
|
|
814
814
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-06-
|
|
104
|
+
at 2026-06-10T09:00:36.812Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-06-
|
|
104
|
+
at 2026-06-10T09:00:36.812Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
305
305
|
Code coverage generated by
|
|
306
306
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
307
|
-
at 2026-06-
|
|
307
|
+
at 2026-06-10T09:00:36.812Z
|
|
308
308
|
</div>
|
|
309
309
|
<script src="../../prettify.js"></script>
|
|
310
310
|
<script>
|
|
@@ -9314,6 +9314,15 @@ class WalletConnectionModalComponent {
|
|
|
9314
9314
|
* WalletConnect project ID (required for WalletConnect)
|
|
9315
9315
|
*/
|
|
9316
9316
|
projectId;
|
|
9317
|
+
/**
|
|
9318
|
+
* Pins the connection network and hides the network-selection step.
|
|
9319
|
+
*
|
|
9320
|
+
* When set to `'mainnet'` or `'testnet'`, the host dApp decides the network
|
|
9321
|
+
* and the user is never shown the network picker — the modal opens directly
|
|
9322
|
+
* on protocol selection. When omitted (default), the user chooses the network
|
|
9323
|
+
* as the first step.
|
|
9324
|
+
*/
|
|
9325
|
+
network;
|
|
9317
9326
|
/**
|
|
9318
9327
|
* App name for WalletConnect metadata
|
|
9319
9328
|
*/
|
|
@@ -9499,21 +9508,30 @@ class WalletConnectionModalComponent {
|
|
|
9499
9508
|
stepConfig = computed(() => {
|
|
9500
9509
|
const protocol = this.selectedProtocol();
|
|
9501
9510
|
const method = this.selectedConnectionMethod();
|
|
9511
|
+
let base;
|
|
9502
9512
|
// Initial state: show 3 placeholder steps until protocol is selected
|
|
9503
9513
|
if (!protocol) {
|
|
9504
|
-
|
|
9514
|
+
base = { total: 3, labels: ['Network', 'Protocol', '...'] };
|
|
9505
9515
|
}
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9512
|
-
|
|
9513
|
-
|
|
9516
|
+
else if (protocol === 'hsuite-native') {
|
|
9517
|
+
// HSuite Native path
|
|
9518
|
+
base =
|
|
9519
|
+
method === 'mobile-qr'
|
|
9520
|
+
? // Mobile QR needs 4 steps
|
|
9521
|
+
{ total: 4, labels: ['Network', 'Protocol', 'Method', 'Pair'] }
|
|
9522
|
+
: // Desktop connects immediately after method selection (3 steps)
|
|
9523
|
+
{ total: 3, labels: ['Network', 'Protocol', 'Method'] };
|
|
9524
|
+
}
|
|
9525
|
+
else {
|
|
9526
|
+
// WalletConnect path: 4 steps
|
|
9527
|
+
base = { total: 4, labels: ['Network', 'Protocol', 'Ledger', 'Connect'] };
|
|
9514
9528
|
}
|
|
9515
|
-
//
|
|
9516
|
-
|
|
9529
|
+
// When the network is pinned by the host dApp the network step is never
|
|
9530
|
+
// shown — drop it from the indicator so the numbering stays accurate.
|
|
9531
|
+
if (this.network) {
|
|
9532
|
+
return { total: base.total - 1, labels: base.labels.slice(1) };
|
|
9533
|
+
}
|
|
9534
|
+
return base;
|
|
9517
9535
|
}, ...(ngDevMode ? [{ debugName: "stepConfig" }] : []));
|
|
9518
9536
|
/**
|
|
9519
9537
|
* Maps the internal ConnectionStep enum to display position (1-based).
|
|
@@ -9523,20 +9541,23 @@ class WalletConnectionModalComponent {
|
|
|
9523
9541
|
const step = this.currentStep();
|
|
9524
9542
|
// Protocol could be used for protocol-specific step mapping in the future
|
|
9525
9543
|
const _protocol = this.selectedProtocol();
|
|
9544
|
+
// When the network is pinned the network step is removed, so every
|
|
9545
|
+
// subsequent step shifts down one position in the indicator.
|
|
9546
|
+
const networkOffset = this.network ? 1 : 0;
|
|
9526
9547
|
// Map internal step to display position based on protocol path
|
|
9527
9548
|
switch (step) {
|
|
9528
9549
|
case ConnectionStep.NetworkSelection:
|
|
9529
9550
|
return 1;
|
|
9530
9551
|
case ConnectionStep.ProtocolSelection:
|
|
9531
|
-
return 2;
|
|
9552
|
+
return 2 - networkOffset;
|
|
9532
9553
|
case ConnectionStep.ConnectionMethodSelection:
|
|
9533
|
-
return 3;
|
|
9554
|
+
return 3 - networkOffset;
|
|
9534
9555
|
case ConnectionStep.LedgerSelection:
|
|
9535
9556
|
// WalletConnect ledger selection is step 3
|
|
9536
|
-
return 3;
|
|
9557
|
+
return 3 - networkOffset;
|
|
9537
9558
|
case ConnectionStep.QrPairing:
|
|
9538
9559
|
// QR pairing is step 4 for both paths that use it
|
|
9539
|
-
return 4;
|
|
9560
|
+
return 4 - networkOffset;
|
|
9540
9561
|
case ConnectionStep.ConnectionProgress:
|
|
9541
9562
|
// Connection progress is always the last step
|
|
9542
9563
|
return this.stepConfig().total;
|
|
@@ -9544,6 +9565,22 @@ class WalletConnectionModalComponent {
|
|
|
9544
9565
|
return 1;
|
|
9545
9566
|
}
|
|
9546
9567
|
}, ...(ngDevMode ? [{ debugName: "displayStep" }] : []));
|
|
9568
|
+
/**
|
|
9569
|
+
* Whether a back affordance should be offered for the current step.
|
|
9570
|
+
* The first reachable step has no back target — that is protocol selection
|
|
9571
|
+
* when the network is pinned, otherwise network selection. The connection
|
|
9572
|
+
* progress step manages its own retry navigation instead.
|
|
9573
|
+
*/
|
|
9574
|
+
canGoBack = computed(() => {
|
|
9575
|
+
const step = this.currentStep();
|
|
9576
|
+
if (step === ConnectionStep.ConnectionProgress) {
|
|
9577
|
+
return false;
|
|
9578
|
+
}
|
|
9579
|
+
const firstStep = this.network
|
|
9580
|
+
? ConnectionStep.ProtocolSelection
|
|
9581
|
+
: ConnectionStep.NetworkSelection;
|
|
9582
|
+
return step > firstStep;
|
|
9583
|
+
}, ...(ngDevMode ? [{ debugName: "canGoBack" }] : []));
|
|
9547
9584
|
/**
|
|
9548
9585
|
*
|
|
9549
9586
|
* @param modalController
|
|
@@ -9557,6 +9594,19 @@ class WalletConnectionModalComponent {
|
|
|
9557
9594
|
this.onMobileConnected();
|
|
9558
9595
|
});
|
|
9559
9596
|
}
|
|
9597
|
+
/**
|
|
9598
|
+
* Apply the pinned network (if any) before the first render.
|
|
9599
|
+
*
|
|
9600
|
+
* When the host dApp provides a {@link network}, lock the selection to it and
|
|
9601
|
+
* skip straight to protocol selection so the user never sees — and cannot
|
|
9602
|
+
* change — the network. With no input, the modal opens on network selection.
|
|
9603
|
+
*/
|
|
9604
|
+
ngOnInit() {
|
|
9605
|
+
if (this.network) {
|
|
9606
|
+
this.selectedNetwork.set(this.network);
|
|
9607
|
+
this.currentStep.set(ConnectionStep.ProtocolSelection);
|
|
9608
|
+
}
|
|
9609
|
+
}
|
|
9560
9610
|
/**
|
|
9561
9611
|
* Select a network option (internal, use selectNetworkAndProceed for UI)
|
|
9562
9612
|
* @param networkId
|
|
@@ -9672,7 +9722,11 @@ class WalletConnectionModalComponent {
|
|
|
9672
9722
|
back() {
|
|
9673
9723
|
const currentStep = this.currentStep();
|
|
9674
9724
|
if (currentStep === ConnectionStep.ProtocolSelection) {
|
|
9675
|
-
|
|
9725
|
+
// When the network is pinned, protocol selection is the first reachable
|
|
9726
|
+
// step — there is no network step to return to.
|
|
9727
|
+
if (!this.network) {
|
|
9728
|
+
this.currentStep.set(ConnectionStep.NetworkSelection);
|
|
9729
|
+
}
|
|
9676
9730
|
}
|
|
9677
9731
|
else if (currentStep === ConnectionStep.ConnectionMethodSelection) {
|
|
9678
9732
|
this.currentStep.set(ConnectionStep.ProtocolSelection);
|
|
@@ -9869,13 +9923,15 @@ class WalletConnectionModalComponent {
|
|
|
9869
9923
|
.__HSUITE_WALLET_EXTENSION__ === true);
|
|
9870
9924
|
}
|
|
9871
9925
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectionModalComponent, deps: [{ token: i1$1.ModalController }, { token: UnifiedWalletService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9872
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectionModalComponent, isStandalone: true, selector: "hsuite-wallet-connection-modal", inputs: { projectId: "projectId", appName: "appName", appDescription: "appDescription", walletUrl: "walletUrl" }, outputs: { connected: "connected" }, ngImport: i0, template: "<ion-content>\n <div class=\"modal-inner-content wallet-connection-modal\">\n <div class=\"header\">\n <div class=\"title\">\n <ion-button\n *ngIf=\"currentStep() > 1 && currentStep() !== ConnectionStep.ConnectionProgress\"\n (click)=\"back()\"\n fill=\"clear\"\n class=\"back-btn\"\n >\n <ion-icon slot=\"icon-only\" name=\"arrow-back-outline\"></ion-icon>\n </ion-button>\n <p>{{ stepTitle() }}</p>\n </div>\n <ion-button class=\"close-modal\" (click)=\"dismiss()\" fill=\"clear\" [disabled]=\"isConnecting()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Dynamic Step Progress Indicator -->\n <div class=\"dao-header\">\n <div class=\"step-progress\">\n <!-- Dynamic steps based on selected protocol path -->\n <ng-container *ngFor=\"let label of stepConfig().labels; let i = index\">\n <div class=\"step-indicator\">\n <div\n class=\"step-circle\"\n [class.active]=\"displayStep() === i + 1\"\n [class.completed]=\"displayStep() > i + 1\"\n [attr.title]=\"label\"\n >\n <ion-icon *ngIf=\"displayStep() > i + 1\" name=\"checkmark\"></ion-icon>\n <span *ngIf=\"displayStep() <= i + 1\">{{ i + 1 }}</span>\n </div>\n <!-- Step line between circles (not after the last one) -->\n <div\n class=\"step-line\"\n *ngIf=\"i < stepConfig().labels.length - 1\"\n [class.active]=\"displayStep() > i + 1\"\n ></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"form\">\n <!-- Step 1: Network Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.NetworkSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Network</h3>\n <p>Select the network you want to connect to.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let network of networkOptions\"\n (click)=\"selectNetworkAndProceed(network.id)\"\n [class.selected]=\"selectedNetwork() === network.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"network.icon\"></ion-icon>\n </div>\n <h3>{{ network.name }}</h3>\n <p>{{ network.description }}</p>\n <ion-badge *ngIf=\"network.recommended\" color=\"success\">Recommended</ion-badge>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 2: Protocol Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ProtocolSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Connection Protocol</h3>\n <p>Choose how you want to connect your wallet.</p>\n </div>\n\n <div class=\"options-list direct-select\">\n <ion-card\n *ngFor=\"let protocol of protocolOptions()\"\n (click)=\"selectProtocolAndProceed(protocol.id)\"\n [class.selected]=\"selectedProtocol() === protocol.id\"\n button\n >\n <ion-card-content>\n <div class=\"protocol-header\">\n <div class=\"option-icon\">\n <ion-icon [name]=\"protocol.icon\"></ion-icon>\n </div>\n <div class=\"protocol-info\">\n <h3>{{ protocol.name }}</h3>\n <p>{{ protocol.description }}</p>\n </div>\n </div>\n\n <ul class=\"feature-list\">\n <li *ngFor=\"let feature of protocol.features\">\n <ion-icon name=\"checkmark-circle\" color=\"success\"></ion-icon>\n <span>{{ feature }}</span>\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 3: Connection Method Selection (HSuite Native only) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionMethodSelection\" class=\"step-content\">\n <hsuite-connection-method-step\n [methods]=\"connectionMethodOptions()\"\n [isMobile]=\"isMobile()\"\n [selectedMethod]=\"selectedConnectionMethod()\"\n (methodSelected)=\"onConnectionMethodSelected($event)\"\n ></hsuite-connection-method-step>\n </div>\n\n <!-- Step 3 (WalletConnect path): Ledger Selection (Direct Selection - click initiates connection) -->\n <div *ngIf=\"currentStep() === ConnectionStep.LedgerSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Blockchain</h3>\n <p>Select the blockchain ledger to connect with.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let ledger of ledgerOptions\"\n (click)=\"selectLedgerAndConnect(ledger.id)\"\n [class.selected]=\"selectedLedger() === ledger.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"ledger.icon\"></ion-icon>\n </div>\n <h3>{{ ledger.name }}</h3>\n <p>{{ ledger.description }}</p>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 5: QR Pairing (Mobile P2P - Nostr-first, single QR) -->\n <div *ngIf=\"currentStep() === ConnectionStep.QrPairing\" class=\"step-content\">\n <hsuite-qr-pairing-step\n [offerData]=\"pairingOffer()\"\n [appName]=\"appName\"\n [isLoading]=\"isGeneratingOffer()\"\n [isWaitingForWallet]=\"isWaitingForWallet()\"\n [isWaitingForApproval]=\"isWaitingForApproval()\"\n [errorMessage]=\"connectionError()\"\n (expired)=\"onQrExpired()\"\n (refreshRequested)=\"onQrRefresh()\"\n (cancelled)=\"back()\"\n ></hsuite-qr-pairing-step>\n </div>\n\n <!-- Step 6: Connection Progress -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionProgress\" class=\"step-content\">\n <div class=\"membership-section connection-progress\">\n <div *ngIf=\"isConnecting()\" class=\"status-info\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <h3>Connecting...</h3>\n <p *ngIf=\"selectedProtocol() === 'walletconnect'\">\n Please approve the connection in your wallet app or scan the QR code.\n </p>\n <p *ngIf=\"selectedProtocol() === 'hsuite-native'\">Opening HSuite Wallet...</p>\n </div>\n\n <div *ngIf=\"connectionError()\" class=\"membership-section\">\n <div class=\"error-section\">\n <ion-item lines=\"none\">\n <ion-icon slot=\"start\" name=\"alert-circle-outline\" color=\"danger\"></ion-icon>\n <ion-label>\n <h3>Connection Failed</h3>\n <p>{{ connectionError() }}</p>\n </ion-label>\n </ion-item>\n </div>\n <ion-button expand=\"block\" fill=\"outline\" (click)=\"back()\" class=\"ion-margin-top\">\n Try Again\n </ion-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer removed: All steps now use direct selection (click to proceed) -->\n </div>\n</ion-content>\n", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}ion-content{--background: transparent;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;height:100vh;width:100%;display:flex!important;align-items:center!important;justify-content:center!important}ion-content::part(scroll){display:flex;align-items:center;justify-content:center;min-height:100%;width:100%}.modal-inner-content{width:90%;max-width:600px;max-height:80vh;background:var(--glass-background, rgba(var(--ion-color-dark-rgb), .95));border-radius:var(--border-radius-xl, 16px);padding:0;display:flex;flex-direction:column;box-shadow:var(--shadow-2xl);border:1px solid var(--border-flat, rgba(var(--ion-color-light-rgb), .1));overflow:hidden;animation:modalFadeIn .3s ease}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg, 16px) var(--space-xl, 20px);background:transparent;flex-shrink:0}.header .title{display:flex;align-items:center;gap:var(--space-sm, 8px);flex:1}.header .title p{margin:0;font-size:var(--font-size-2xl, 24px);font-weight:var(--font-weight-bold, 700);color:var(--ion-text-color);line-height:1.2}.header .back-btn{--padding-start: 8px;--padding-end: 8px;margin:0}.header .back-btn ion-icon{font-size:22px;color:var(--ion-color-primary)}.header .close-modal{--padding-start: 8px;--padding-end: 8px;margin:0;cursor:pointer}.header .close-modal ion-icon{font-size:24px;color:var(--ion-text-color)}.header .close-modal:hover:not(:disabled){transform:scale(1.05)}.header .close-modal:active:not(:disabled){transform:scale(.95)}.form{flex:1;overflow-y:auto;padding:0 var(--space-xl, 20px) var(--space-xl, 20px) var(--space-xl, 20px);background:transparent}.form::-webkit-scrollbar{width:8px}.form::-webkit-scrollbar-track{background:var(--surface-flat, rgba(var(--ion-color-light-rgb), .05));border-radius:4px}.form::-webkit-scrollbar-thumb{background:rgba(var(--ion-color-light-rgb),.2);border-radius:4px}.form::-webkit-scrollbar-thumb:hover{background:rgba(var(--ion-color-light-rgb),.3)}@media(min-width:768px){.modal-inner-content{width:80%;max-width:700px;border-radius:20px}.header{padding:20px 24px}.dao-header{margin:0 24px 24px}.form{padding:0 24px 24px}}@media(max-width:480px){.modal-inner-content{width:95%;max-height:85vh}.header{padding:14px 16px}.dao-header{margin:0 16px 20px}.form{padding:0 16px 16px}}.dao-header{margin:0 var(--space-xl, 20px) var(--token-space-6, 24px) var(--space-xl, 20px);padding:var(--token-space-4, 16px);background:var(--token-surface-2, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);box-shadow:var(--token-elevation-1, var(--shadow-sm));flex-shrink:0;animation:fadeIn var(--token-transition-slow, .3s) ease}.dao-header .step-progress{display:flex;align-items:center;justify-content:center}.dao-header .step-progress .step-indicator{display:flex;align-items:center}.dao-header .step-progress .step-indicator .step-circle{width:36px;height:36px;border-radius:var(--token-radius-full, 50%);display:flex;align-items:center;justify-content:center;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .1));color:var(--ion-text-color);font-weight:var(--token-font-weight-semibold, 600);font-size:var(--token-font-size-2, 14px);border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));transition:all var(--token-transition-slow, .3s) var(--token-ease-in-out, cubic-bezier(.4, 0, .2, 1))}.dao-header .step-progress .step-indicator .step-circle.active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-color:var(--ion-color-primary);transform:scale(1.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.2)}.dao-header .step-progress .step-indicator .step-circle.completed{background:var(--ion-color-success);color:var(--ion-color-success-contrast);border-color:var(--ion-color-success);transform:scale(1.05)}.dao-header .step-progress .step-indicator .step-circle:hover:not(.active):not(.completed){transform:scale(1.05);background:rgba(var(--ion-color-light-rgb),.15)}.dao-header .step-progress .step-indicator .step-circle ion-icon{font-size:20px}.dao-header .step-progress .step-indicator .step-line{width:40px;height:var(--token-border-width-2, 2px);background:var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));margin:0 var(--token-space-2, 8px);transition:all var(--token-transition-slow, .3s) ease}.dao-header .step-progress .step-indicator .step-line.active{background:var(--ion-color-success);box-shadow:0 0 8px rgba(var(--ion-color-success-rgb),.5)}.membership-section{margin-bottom:var(--token-space-6, 24px);animation:fadeIn var(--token-transition-slow, .3s) ease}.membership-section .explanation{margin-bottom:var(--token-space-4, 16px)}.membership-section .explanation h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-text-color);line-height:var(--token-line-height-tight, 1.3);margin:0 0 var(--token-space-2, 8px) 0}.membership-section .explanation p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);line-height:var(--token-line-height-normal, 1.4);margin:0}.membership-section .options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--token-space-3, 12px)}.membership-section .options-grid ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-grid ion-card:hover{transform:translateY(-2px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-grid ion-card:active{transform:translateY(0)}.membership-section .options-grid ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-grid ion-card ion-card-content{text-align:center;padding:var(--token-space-5, 20px)}.membership-section .options-grid ion-card ion-card-content .option-icon{margin-bottom:var(--token-space-3, 12px)}.membership-section .options-grid ion-card ion-card-content .option-icon ion-icon{font-size:40px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-grid ion-card ion-card-content h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 6px) 0;color:var(--ion-text-color)}.membership-section .options-grid ion-card ion-card-content p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0 0 var(--token-space-2, 8px) 0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-grid ion-card:hover .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section .options-list{display:flex;flex-direction:column;gap:var(--token-space-3, 12px)}.membership-section .options-list ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-list ion-card:hover{transform:translate(4px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-list ion-card:active{transform:translate(2px)}.membership-section .options-list ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-list ion-card ion-card-content{padding:var(--token-space-4, 16px)}.membership-section .options-list ion-card ion-card-content .protocol-header{display:flex;align-items:center;gap:var(--token-space-3, 12px);margin-bottom:var(--token-space-3, 12px)}.membership-section .options-list ion-card ion-card-content .protocol-header .option-icon ion-icon{font-size:36px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info{flex:1;min-width:0}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-1, 4px) 0;color:var(--ion-text-color)}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-list ion-card ion-card-content .feature-list{list-style:none;padding:0;margin:0}.membership-section .options-list ion-card ion-card-content .feature-list li{display:flex;align-items:center;gap:var(--token-space-2, 8px);padding:var(--token-space-1, 4px) 0;font-size:var(--token-font-size-1, 13px);color:var(--ion-text-color);line-height:var(--token-line-height-normal, 1.4)}.membership-section .options-list ion-card ion-card-content .feature-list li ion-icon{font-size:var(--token-space-4, 16px);flex-shrink:0;color:var(--ion-color-success)}.membership-section .options-list ion-card:hover .protocol-header .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section.connection-progress{display:flex;justify-content:center;align-items:center;min-height:200px}.membership-section.connection-progress .status-info{text-align:center;padding:var(--token-space-6, 24px)}.membership-section.connection-progress .status-info ion-spinner{font-size:48px;margin-bottom:var(--token-space-4, 16px);color:var(--ion-color-primary)}.membership-section.connection-progress .status-info h3{font-size:var(--token-font-size-4, 18px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 8px) 0;color:var(--ion-text-color)}.membership-section.connection-progress .status-info p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);margin:0;max-width:300px;line-height:var(--token-line-height-normal, 1.4)}.membership-section .error-section{padding:var(--token-space-3, 12px);background:rgba(var(--ion-color-danger-rgb),.1);border:1px solid rgba(var(--ion-color-danger-rgb),.2);border-radius:var(--token-radius-2, 8px)}.membership-section .error-section ion-item{--background: transparent;--padding-start: 0;--inner-padding-end: 0}.membership-section .error-section ion-item ion-icon{font-size:var(--token-space-6, 24px)}.membership-section .error-section ion-item ion-label h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-color-danger);margin:0 0 var(--token-space-1, 4px) 0}.membership-section .error-section ion-item ion-label p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.step-content{animation:stepFadeIn var(--token-transition-normal, .25s) var(--token-ease-out, cubic-bezier(0, 0, .2, 1))}.direct-select ion-card{position:relative;overflow:hidden}.direct-select ion-card:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%) translate(0);width:0;height:0;border-left:6px solid var(--ion-color-primary);border-top:5px solid transparent;border-bottom:5px solid transparent;opacity:0;transition:all var(--token-transition-fast, .15s) ease}.direct-select ion-card:hover:after{opacity:.6;transform:translateY(-50%) translate(4px)}.direct-select ion-card:hover{border-color:rgba(var(--ion-color-primary-rgb),.4)}.direct-select ion-card:hover .option-icon ion-icon{color:var(--ion-color-primary)}.direct-select ion-card:active{transform:scale(.98);background:rgba(var(--ion-color-primary-rgb),.15)!important}.direct-select.options-grid ion-card:after{right:8px;top:16px;transform:translateY(0) translate(0)}.direct-select.options-grid ion-card:hover:after{transform:translateY(0) translate(4px)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--ion-color-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),0)}}.step-progress .step-indicator .step-circle.active{animation:stepPulse 1.5s ease-out infinite}@media(max-width:768px){.membership-section .options-grid{grid-template-columns:1fr}.dao-header .step-progress .step-indicator .step-circle{width:28px;height:28px;font-size:12px}.dao-header .step-progress .step-indicator .step-line{width:24px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes fadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%,to{box-shadow:none}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1$1.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: i1$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1$1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1$1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1$1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1$1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: ConnectionMethodStepComponent, selector: "hsuite-connection-method-step", inputs: ["methods", "isMobile", "selectedMethod"], outputs: ["methodSelected"] }, { kind: "component", type: QrPairingStepComponent, selector: "hsuite-qr-pairing-step", inputs: ["offerData", "appName", "isLoading", "isWaitingForWallet", "isWaitingForApproval", "errorMessage", "expirySeconds"], outputs: ["expired", "connected", "cancelled", "refreshRequested"] }] });
|
|
9926
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectionModalComponent, isStandalone: true, selector: "hsuite-wallet-connection-modal", inputs: { projectId: "projectId", network: "network", appName: "appName", appDescription: "appDescription", walletUrl: "walletUrl" }, outputs: { connected: "connected" }, ngImport: i0, template: "<ion-content>\n <div class=\"modal-inner-content wallet-connection-modal\">\n <div class=\"header\">\n <div class=\"title\">\n <ion-button *ngIf=\"canGoBack()\" (click)=\"back()\" fill=\"clear\" class=\"back-btn\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back-outline\"></ion-icon>\n </ion-button>\n <p>{{ stepTitle() }}</p>\n </div>\n <ion-button class=\"close-modal\" (click)=\"dismiss()\" fill=\"clear\" [disabled]=\"isConnecting()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Dynamic Step Progress Indicator -->\n <div class=\"dao-header\">\n <div class=\"step-progress\">\n <!-- Dynamic steps based on selected protocol path -->\n <ng-container *ngFor=\"let label of stepConfig().labels; let i = index\">\n <div class=\"step-indicator\">\n <div\n class=\"step-circle\"\n [class.active]=\"displayStep() === i + 1\"\n [class.completed]=\"displayStep() > i + 1\"\n [attr.title]=\"label\"\n >\n <ion-icon *ngIf=\"displayStep() > i + 1\" name=\"checkmark\"></ion-icon>\n <span *ngIf=\"displayStep() <= i + 1\">{{ i + 1 }}</span>\n </div>\n <!-- Step line between circles (not after the last one) -->\n <div\n class=\"step-line\"\n *ngIf=\"i < stepConfig().labels.length - 1\"\n [class.active]=\"displayStep() > i + 1\"\n ></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"form\">\n <!-- Step 1: Network Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.NetworkSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Network</h3>\n <p>Select the network you want to connect to.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let network of networkOptions\"\n (click)=\"selectNetworkAndProceed(network.id)\"\n [class.selected]=\"selectedNetwork() === network.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"network.icon\"></ion-icon>\n </div>\n <h3>{{ network.name }}</h3>\n <p>{{ network.description }}</p>\n <ion-badge *ngIf=\"network.recommended\" color=\"success\">Recommended</ion-badge>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 2: Protocol Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ProtocolSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Connection Protocol</h3>\n <p>Choose how you want to connect your wallet.</p>\n </div>\n\n <div class=\"options-list direct-select\">\n <ion-card\n *ngFor=\"let protocol of protocolOptions()\"\n (click)=\"selectProtocolAndProceed(protocol.id)\"\n [class.selected]=\"selectedProtocol() === protocol.id\"\n button\n >\n <ion-card-content>\n <div class=\"protocol-header\">\n <div class=\"option-icon\">\n <ion-icon [name]=\"protocol.icon\"></ion-icon>\n </div>\n <div class=\"protocol-info\">\n <h3>{{ protocol.name }}</h3>\n <p>{{ protocol.description }}</p>\n </div>\n </div>\n\n <ul class=\"feature-list\">\n <li *ngFor=\"let feature of protocol.features\">\n <ion-icon name=\"checkmark-circle\" color=\"success\"></ion-icon>\n <span>{{ feature }}</span>\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 3: Connection Method Selection (HSuite Native only) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionMethodSelection\" class=\"step-content\">\n <hsuite-connection-method-step\n [methods]=\"connectionMethodOptions()\"\n [isMobile]=\"isMobile()\"\n [selectedMethod]=\"selectedConnectionMethod()\"\n (methodSelected)=\"onConnectionMethodSelected($event)\"\n ></hsuite-connection-method-step>\n </div>\n\n <!-- Step 3 (WalletConnect path): Ledger Selection (Direct Selection - click initiates connection) -->\n <div *ngIf=\"currentStep() === ConnectionStep.LedgerSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Blockchain</h3>\n <p>Select the blockchain ledger to connect with.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let ledger of ledgerOptions\"\n (click)=\"selectLedgerAndConnect(ledger.id)\"\n [class.selected]=\"selectedLedger() === ledger.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"ledger.icon\"></ion-icon>\n </div>\n <h3>{{ ledger.name }}</h3>\n <p>{{ ledger.description }}</p>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 5: QR Pairing (Mobile P2P - Nostr-first, single QR) -->\n <div *ngIf=\"currentStep() === ConnectionStep.QrPairing\" class=\"step-content\">\n <hsuite-qr-pairing-step\n [offerData]=\"pairingOffer()\"\n [appName]=\"appName\"\n [isLoading]=\"isGeneratingOffer()\"\n [isWaitingForWallet]=\"isWaitingForWallet()\"\n [isWaitingForApproval]=\"isWaitingForApproval()\"\n [errorMessage]=\"connectionError()\"\n (expired)=\"onQrExpired()\"\n (refreshRequested)=\"onQrRefresh()\"\n (cancelled)=\"back()\"\n ></hsuite-qr-pairing-step>\n </div>\n\n <!-- Step 6: Connection Progress -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionProgress\" class=\"step-content\">\n <div class=\"membership-section connection-progress\">\n <div *ngIf=\"isConnecting()\" class=\"status-info\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <h3>Connecting...</h3>\n <p *ngIf=\"selectedProtocol() === 'walletconnect'\">\n Please approve the connection in your wallet app or scan the QR code.\n </p>\n <p *ngIf=\"selectedProtocol() === 'hsuite-native'\">Opening HSuite Wallet...</p>\n </div>\n\n <div *ngIf=\"connectionError()\" class=\"membership-section\">\n <div class=\"error-section\">\n <ion-item lines=\"none\">\n <ion-icon slot=\"start\" name=\"alert-circle-outline\" color=\"danger\"></ion-icon>\n <ion-label>\n <h3>Connection Failed</h3>\n <p>{{ connectionError() }}</p>\n </ion-label>\n </ion-item>\n </div>\n <ion-button expand=\"block\" fill=\"outline\" (click)=\"back()\" class=\"ion-margin-top\">\n Try Again\n </ion-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer removed: All steps now use direct selection (click to proceed) -->\n </div>\n</ion-content>\n", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}ion-content{--background: transparent;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;height:100vh;width:100%;display:flex!important;align-items:center!important;justify-content:center!important}ion-content::part(scroll){display:flex;align-items:center;justify-content:center;min-height:100%;width:100%}.modal-inner-content{width:90%;max-width:600px;max-height:80vh;background:var(--glass-background, rgba(var(--ion-color-dark-rgb), .95));border-radius:var(--border-radius-xl, 16px);padding:0;display:flex;flex-direction:column;box-shadow:var(--shadow-2xl);border:1px solid var(--border-flat, rgba(var(--ion-color-light-rgb), .1));overflow:hidden;animation:modalFadeIn .3s ease}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg, 16px) var(--space-xl, 20px);background:transparent;flex-shrink:0}.header .title{display:flex;align-items:center;gap:var(--space-sm, 8px);flex:1}.header .title p{margin:0;font-size:var(--font-size-2xl, 24px);font-weight:var(--font-weight-bold, 700);color:var(--ion-text-color);line-height:1.2}.header .back-btn{--padding-start: 8px;--padding-end: 8px;margin:0}.header .back-btn ion-icon{font-size:22px;color:var(--ion-color-primary)}.header .close-modal{--padding-start: 8px;--padding-end: 8px;margin:0;cursor:pointer}.header .close-modal ion-icon{font-size:24px;color:var(--ion-text-color)}.header .close-modal:hover:not(:disabled){transform:scale(1.05)}.header .close-modal:active:not(:disabled){transform:scale(.95)}.form{flex:1;overflow-y:auto;padding:0 var(--space-xl, 20px) var(--space-xl, 20px) var(--space-xl, 20px);background:transparent}.form::-webkit-scrollbar{width:8px}.form::-webkit-scrollbar-track{background:var(--surface-flat, rgba(var(--ion-color-light-rgb), .05));border-radius:4px}.form::-webkit-scrollbar-thumb{background:rgba(var(--ion-color-light-rgb),.2);border-radius:4px}.form::-webkit-scrollbar-thumb:hover{background:rgba(var(--ion-color-light-rgb),.3)}@media(min-width:768px){.modal-inner-content{width:80%;max-width:700px;border-radius:20px}.header{padding:20px 24px}.dao-header{margin:0 24px 24px}.form{padding:0 24px 24px}}@media(max-width:480px){.modal-inner-content{width:95%;max-height:85vh}.header{padding:14px 16px}.dao-header{margin:0 16px 20px}.form{padding:0 16px 16px}}.dao-header{margin:0 var(--space-xl, 20px) var(--token-space-6, 24px) var(--space-xl, 20px);padding:var(--token-space-4, 16px);background:var(--token-surface-2, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);box-shadow:var(--token-elevation-1, var(--shadow-sm));flex-shrink:0;animation:fadeIn var(--token-transition-slow, .3s) ease}.dao-header .step-progress{display:flex;align-items:center;justify-content:center}.dao-header .step-progress .step-indicator{display:flex;align-items:center}.dao-header .step-progress .step-indicator .step-circle{width:36px;height:36px;border-radius:var(--token-radius-full, 50%);display:flex;align-items:center;justify-content:center;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .1));color:var(--ion-text-color);font-weight:var(--token-font-weight-semibold, 600);font-size:var(--token-font-size-2, 14px);border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));transition:all var(--token-transition-slow, .3s) var(--token-ease-in-out, cubic-bezier(.4, 0, .2, 1))}.dao-header .step-progress .step-indicator .step-circle.active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-color:var(--ion-color-primary);transform:scale(1.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.2)}.dao-header .step-progress .step-indicator .step-circle.completed{background:var(--ion-color-success);color:var(--ion-color-success-contrast);border-color:var(--ion-color-success);transform:scale(1.05)}.dao-header .step-progress .step-indicator .step-circle:hover:not(.active):not(.completed){transform:scale(1.05);background:rgba(var(--ion-color-light-rgb),.15)}.dao-header .step-progress .step-indicator .step-circle ion-icon{font-size:20px}.dao-header .step-progress .step-indicator .step-line{width:40px;height:var(--token-border-width-2, 2px);background:var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));margin:0 var(--token-space-2, 8px);transition:all var(--token-transition-slow, .3s) ease}.dao-header .step-progress .step-indicator .step-line.active{background:var(--ion-color-success);box-shadow:0 0 8px rgba(var(--ion-color-success-rgb),.5)}.membership-section{margin-bottom:var(--token-space-6, 24px);animation:fadeIn var(--token-transition-slow, .3s) ease}.membership-section .explanation{margin-bottom:var(--token-space-4, 16px)}.membership-section .explanation h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-text-color);line-height:var(--token-line-height-tight, 1.3);margin:0 0 var(--token-space-2, 8px) 0}.membership-section .explanation p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);line-height:var(--token-line-height-normal, 1.4);margin:0}.membership-section .options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--token-space-3, 12px)}.membership-section .options-grid ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-grid ion-card:hover{transform:translateY(-2px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-grid ion-card:active{transform:translateY(0)}.membership-section .options-grid ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-grid ion-card ion-card-content{text-align:center;padding:var(--token-space-5, 20px)}.membership-section .options-grid ion-card ion-card-content .option-icon{margin-bottom:var(--token-space-3, 12px)}.membership-section .options-grid ion-card ion-card-content .option-icon ion-icon{font-size:40px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-grid ion-card ion-card-content h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 6px) 0;color:var(--ion-text-color)}.membership-section .options-grid ion-card ion-card-content p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0 0 var(--token-space-2, 8px) 0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-grid ion-card:hover .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section .options-list{display:flex;flex-direction:column;gap:var(--token-space-3, 12px)}.membership-section .options-list ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-list ion-card:hover{transform:translate(4px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-list ion-card:active{transform:translate(2px)}.membership-section .options-list ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-list ion-card ion-card-content{padding:var(--token-space-4, 16px)}.membership-section .options-list ion-card ion-card-content .protocol-header{display:flex;align-items:center;gap:var(--token-space-3, 12px);margin-bottom:var(--token-space-3, 12px)}.membership-section .options-list ion-card ion-card-content .protocol-header .option-icon ion-icon{font-size:36px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info{flex:1;min-width:0}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-1, 4px) 0;color:var(--ion-text-color)}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-list ion-card ion-card-content .feature-list{list-style:none;padding:0;margin:0}.membership-section .options-list ion-card ion-card-content .feature-list li{display:flex;align-items:center;gap:var(--token-space-2, 8px);padding:var(--token-space-1, 4px) 0;font-size:var(--token-font-size-1, 13px);color:var(--ion-text-color);line-height:var(--token-line-height-normal, 1.4)}.membership-section .options-list ion-card ion-card-content .feature-list li ion-icon{font-size:var(--token-space-4, 16px);flex-shrink:0;color:var(--ion-color-success)}.membership-section .options-list ion-card:hover .protocol-header .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section.connection-progress{display:flex;justify-content:center;align-items:center;min-height:200px}.membership-section.connection-progress .status-info{text-align:center;padding:var(--token-space-6, 24px)}.membership-section.connection-progress .status-info ion-spinner{font-size:48px;margin-bottom:var(--token-space-4, 16px);color:var(--ion-color-primary)}.membership-section.connection-progress .status-info h3{font-size:var(--token-font-size-4, 18px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 8px) 0;color:var(--ion-text-color)}.membership-section.connection-progress .status-info p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);margin:0;max-width:300px;line-height:var(--token-line-height-normal, 1.4)}.membership-section .error-section{padding:var(--token-space-3, 12px);background:rgba(var(--ion-color-danger-rgb),.1);border:1px solid rgba(var(--ion-color-danger-rgb),.2);border-radius:var(--token-radius-2, 8px)}.membership-section .error-section ion-item{--background: transparent;--padding-start: 0;--inner-padding-end: 0}.membership-section .error-section ion-item ion-icon{font-size:var(--token-space-6, 24px)}.membership-section .error-section ion-item ion-label h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-color-danger);margin:0 0 var(--token-space-1, 4px) 0}.membership-section .error-section ion-item ion-label p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.step-content{animation:stepFadeIn var(--token-transition-normal, .25s) var(--token-ease-out, cubic-bezier(0, 0, .2, 1))}.direct-select ion-card{position:relative;overflow:hidden}.direct-select ion-card:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%) translate(0);width:0;height:0;border-left:6px solid var(--ion-color-primary);border-top:5px solid transparent;border-bottom:5px solid transparent;opacity:0;transition:all var(--token-transition-fast, .15s) ease}.direct-select ion-card:hover:after{opacity:.6;transform:translateY(-50%) translate(4px)}.direct-select ion-card:hover{border-color:rgba(var(--ion-color-primary-rgb),.4)}.direct-select ion-card:hover .option-icon ion-icon{color:var(--ion-color-primary)}.direct-select ion-card:active{transform:scale(.98);background:rgba(var(--ion-color-primary-rgb),.15)!important}.direct-select.options-grid ion-card:after{right:8px;top:16px;transform:translateY(0) translate(0)}.direct-select.options-grid ion-card:hover:after{transform:translateY(0) translate(4px)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--ion-color-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),0)}}.step-progress .step-indicator .step-circle.active{animation:stepPulse 1.5s ease-out infinite}@media(max-width:768px){.membership-section .options-grid{grid-template-columns:1fr}.dao-header .step-progress .step-indicator .step-circle{width:28px;height:28px;font-size:12px}.dao-header .step-progress .step-indicator .step-line{width:24px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes fadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%,to{box-shadow:none}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1$1.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: i1$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1$1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1$1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1$1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1$1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: ConnectionMethodStepComponent, selector: "hsuite-connection-method-step", inputs: ["methods", "isMobile", "selectedMethod"], outputs: ["methodSelected"] }, { kind: "component", type: QrPairingStepComponent, selector: "hsuite-qr-pairing-step", inputs: ["offerData", "appName", "isLoading", "isWaitingForWallet", "isWaitingForApproval", "errorMessage", "expirySeconds"], outputs: ["expired", "connected", "cancelled", "refreshRequested"] }] });
|
|
9873
9927
|
}
|
|
9874
9928
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectionModalComponent, decorators: [{
|
|
9875
9929
|
type: Component,
|
|
9876
|
-
args: [{ selector: 'hsuite-wallet-connection-modal', standalone: true, imports: [CommonModule, IonicModule, ConnectionMethodStepComponent, QrPairingStepComponent], template: "<ion-content>\n <div class=\"modal-inner-content wallet-connection-modal\">\n <div class=\"header\">\n <div class=\"title\">\n <ion-button\n *ngIf=\"currentStep() > 1 && currentStep() !== ConnectionStep.ConnectionProgress\"\n (click)=\"back()\"\n fill=\"clear\"\n class=\"back-btn\"\n >\n <ion-icon slot=\"icon-only\" name=\"arrow-back-outline\"></ion-icon>\n </ion-button>\n <p>{{ stepTitle() }}</p>\n </div>\n <ion-button class=\"close-modal\" (click)=\"dismiss()\" fill=\"clear\" [disabled]=\"isConnecting()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Dynamic Step Progress Indicator -->\n <div class=\"dao-header\">\n <div class=\"step-progress\">\n <!-- Dynamic steps based on selected protocol path -->\n <ng-container *ngFor=\"let label of stepConfig().labels; let i = index\">\n <div class=\"step-indicator\">\n <div\n class=\"step-circle\"\n [class.active]=\"displayStep() === i + 1\"\n [class.completed]=\"displayStep() > i + 1\"\n [attr.title]=\"label\"\n >\n <ion-icon *ngIf=\"displayStep() > i + 1\" name=\"checkmark\"></ion-icon>\n <span *ngIf=\"displayStep() <= i + 1\">{{ i + 1 }}</span>\n </div>\n <!-- Step line between circles (not after the last one) -->\n <div\n class=\"step-line\"\n *ngIf=\"i < stepConfig().labels.length - 1\"\n [class.active]=\"displayStep() > i + 1\"\n ></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"form\">\n <!-- Step 1: Network Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.NetworkSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Network</h3>\n <p>Select the network you want to connect to.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let network of networkOptions\"\n (click)=\"selectNetworkAndProceed(network.id)\"\n [class.selected]=\"selectedNetwork() === network.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"network.icon\"></ion-icon>\n </div>\n <h3>{{ network.name }}</h3>\n <p>{{ network.description }}</p>\n <ion-badge *ngIf=\"network.recommended\" color=\"success\">Recommended</ion-badge>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 2: Protocol Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ProtocolSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Connection Protocol</h3>\n <p>Choose how you want to connect your wallet.</p>\n </div>\n\n <div class=\"options-list direct-select\">\n <ion-card\n *ngFor=\"let protocol of protocolOptions()\"\n (click)=\"selectProtocolAndProceed(protocol.id)\"\n [class.selected]=\"selectedProtocol() === protocol.id\"\n button\n >\n <ion-card-content>\n <div class=\"protocol-header\">\n <div class=\"option-icon\">\n <ion-icon [name]=\"protocol.icon\"></ion-icon>\n </div>\n <div class=\"protocol-info\">\n <h3>{{ protocol.name }}</h3>\n <p>{{ protocol.description }}</p>\n </div>\n </div>\n\n <ul class=\"feature-list\">\n <li *ngFor=\"let feature of protocol.features\">\n <ion-icon name=\"checkmark-circle\" color=\"success\"></ion-icon>\n <span>{{ feature }}</span>\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 3: Connection Method Selection (HSuite Native only) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionMethodSelection\" class=\"step-content\">\n <hsuite-connection-method-step\n [methods]=\"connectionMethodOptions()\"\n [isMobile]=\"isMobile()\"\n [selectedMethod]=\"selectedConnectionMethod()\"\n (methodSelected)=\"onConnectionMethodSelected($event)\"\n ></hsuite-connection-method-step>\n </div>\n\n <!-- Step 3 (WalletConnect path): Ledger Selection (Direct Selection - click initiates connection) -->\n <div *ngIf=\"currentStep() === ConnectionStep.LedgerSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Blockchain</h3>\n <p>Select the blockchain ledger to connect with.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let ledger of ledgerOptions\"\n (click)=\"selectLedgerAndConnect(ledger.id)\"\n [class.selected]=\"selectedLedger() === ledger.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"ledger.icon\"></ion-icon>\n </div>\n <h3>{{ ledger.name }}</h3>\n <p>{{ ledger.description }}</p>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 5: QR Pairing (Mobile P2P - Nostr-first, single QR) -->\n <div *ngIf=\"currentStep() === ConnectionStep.QrPairing\" class=\"step-content\">\n <hsuite-qr-pairing-step\n [offerData]=\"pairingOffer()\"\n [appName]=\"appName\"\n [isLoading]=\"isGeneratingOffer()\"\n [isWaitingForWallet]=\"isWaitingForWallet()\"\n [isWaitingForApproval]=\"isWaitingForApproval()\"\n [errorMessage]=\"connectionError()\"\n (expired)=\"onQrExpired()\"\n (refreshRequested)=\"onQrRefresh()\"\n (cancelled)=\"back()\"\n ></hsuite-qr-pairing-step>\n </div>\n\n <!-- Step 6: Connection Progress -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionProgress\" class=\"step-content\">\n <div class=\"membership-section connection-progress\">\n <div *ngIf=\"isConnecting()\" class=\"status-info\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <h3>Connecting...</h3>\n <p *ngIf=\"selectedProtocol() === 'walletconnect'\">\n Please approve the connection in your wallet app or scan the QR code.\n </p>\n <p *ngIf=\"selectedProtocol() === 'hsuite-native'\">Opening HSuite Wallet...</p>\n </div>\n\n <div *ngIf=\"connectionError()\" class=\"membership-section\">\n <div class=\"error-section\">\n <ion-item lines=\"none\">\n <ion-icon slot=\"start\" name=\"alert-circle-outline\" color=\"danger\"></ion-icon>\n <ion-label>\n <h3>Connection Failed</h3>\n <p>{{ connectionError() }}</p>\n </ion-label>\n </ion-item>\n </div>\n <ion-button expand=\"block\" fill=\"outline\" (click)=\"back()\" class=\"ion-margin-top\">\n Try Again\n </ion-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer removed: All steps now use direct selection (click to proceed) -->\n </div>\n</ion-content>\n", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}ion-content{--background: transparent;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;height:100vh;width:100%;display:flex!important;align-items:center!important;justify-content:center!important}ion-content::part(scroll){display:flex;align-items:center;justify-content:center;min-height:100%;width:100%}.modal-inner-content{width:90%;max-width:600px;max-height:80vh;background:var(--glass-background, rgba(var(--ion-color-dark-rgb), .95));border-radius:var(--border-radius-xl, 16px);padding:0;display:flex;flex-direction:column;box-shadow:var(--shadow-2xl);border:1px solid var(--border-flat, rgba(var(--ion-color-light-rgb), .1));overflow:hidden;animation:modalFadeIn .3s ease}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg, 16px) var(--space-xl, 20px);background:transparent;flex-shrink:0}.header .title{display:flex;align-items:center;gap:var(--space-sm, 8px);flex:1}.header .title p{margin:0;font-size:var(--font-size-2xl, 24px);font-weight:var(--font-weight-bold, 700);color:var(--ion-text-color);line-height:1.2}.header .back-btn{--padding-start: 8px;--padding-end: 8px;margin:0}.header .back-btn ion-icon{font-size:22px;color:var(--ion-color-primary)}.header .close-modal{--padding-start: 8px;--padding-end: 8px;margin:0;cursor:pointer}.header .close-modal ion-icon{font-size:24px;color:var(--ion-text-color)}.header .close-modal:hover:not(:disabled){transform:scale(1.05)}.header .close-modal:active:not(:disabled){transform:scale(.95)}.form{flex:1;overflow-y:auto;padding:0 var(--space-xl, 20px) var(--space-xl, 20px) var(--space-xl, 20px);background:transparent}.form::-webkit-scrollbar{width:8px}.form::-webkit-scrollbar-track{background:var(--surface-flat, rgba(var(--ion-color-light-rgb), .05));border-radius:4px}.form::-webkit-scrollbar-thumb{background:rgba(var(--ion-color-light-rgb),.2);border-radius:4px}.form::-webkit-scrollbar-thumb:hover{background:rgba(var(--ion-color-light-rgb),.3)}@media(min-width:768px){.modal-inner-content{width:80%;max-width:700px;border-radius:20px}.header{padding:20px 24px}.dao-header{margin:0 24px 24px}.form{padding:0 24px 24px}}@media(max-width:480px){.modal-inner-content{width:95%;max-height:85vh}.header{padding:14px 16px}.dao-header{margin:0 16px 20px}.form{padding:0 16px 16px}}.dao-header{margin:0 var(--space-xl, 20px) var(--token-space-6, 24px) var(--space-xl, 20px);padding:var(--token-space-4, 16px);background:var(--token-surface-2, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);box-shadow:var(--token-elevation-1, var(--shadow-sm));flex-shrink:0;animation:fadeIn var(--token-transition-slow, .3s) ease}.dao-header .step-progress{display:flex;align-items:center;justify-content:center}.dao-header .step-progress .step-indicator{display:flex;align-items:center}.dao-header .step-progress .step-indicator .step-circle{width:36px;height:36px;border-radius:var(--token-radius-full, 50%);display:flex;align-items:center;justify-content:center;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .1));color:var(--ion-text-color);font-weight:var(--token-font-weight-semibold, 600);font-size:var(--token-font-size-2, 14px);border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));transition:all var(--token-transition-slow, .3s) var(--token-ease-in-out, cubic-bezier(.4, 0, .2, 1))}.dao-header .step-progress .step-indicator .step-circle.active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-color:var(--ion-color-primary);transform:scale(1.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.2)}.dao-header .step-progress .step-indicator .step-circle.completed{background:var(--ion-color-success);color:var(--ion-color-success-contrast);border-color:var(--ion-color-success);transform:scale(1.05)}.dao-header .step-progress .step-indicator .step-circle:hover:not(.active):not(.completed){transform:scale(1.05);background:rgba(var(--ion-color-light-rgb),.15)}.dao-header .step-progress .step-indicator .step-circle ion-icon{font-size:20px}.dao-header .step-progress .step-indicator .step-line{width:40px;height:var(--token-border-width-2, 2px);background:var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));margin:0 var(--token-space-2, 8px);transition:all var(--token-transition-slow, .3s) ease}.dao-header .step-progress .step-indicator .step-line.active{background:var(--ion-color-success);box-shadow:0 0 8px rgba(var(--ion-color-success-rgb),.5)}.membership-section{margin-bottom:var(--token-space-6, 24px);animation:fadeIn var(--token-transition-slow, .3s) ease}.membership-section .explanation{margin-bottom:var(--token-space-4, 16px)}.membership-section .explanation h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-text-color);line-height:var(--token-line-height-tight, 1.3);margin:0 0 var(--token-space-2, 8px) 0}.membership-section .explanation p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);line-height:var(--token-line-height-normal, 1.4);margin:0}.membership-section .options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--token-space-3, 12px)}.membership-section .options-grid ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-grid ion-card:hover{transform:translateY(-2px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-grid ion-card:active{transform:translateY(0)}.membership-section .options-grid ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-grid ion-card ion-card-content{text-align:center;padding:var(--token-space-5, 20px)}.membership-section .options-grid ion-card ion-card-content .option-icon{margin-bottom:var(--token-space-3, 12px)}.membership-section .options-grid ion-card ion-card-content .option-icon ion-icon{font-size:40px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-grid ion-card ion-card-content h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 6px) 0;color:var(--ion-text-color)}.membership-section .options-grid ion-card ion-card-content p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0 0 var(--token-space-2, 8px) 0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-grid ion-card:hover .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section .options-list{display:flex;flex-direction:column;gap:var(--token-space-3, 12px)}.membership-section .options-list ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-list ion-card:hover{transform:translate(4px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-list ion-card:active{transform:translate(2px)}.membership-section .options-list ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-list ion-card ion-card-content{padding:var(--token-space-4, 16px)}.membership-section .options-list ion-card ion-card-content .protocol-header{display:flex;align-items:center;gap:var(--token-space-3, 12px);margin-bottom:var(--token-space-3, 12px)}.membership-section .options-list ion-card ion-card-content .protocol-header .option-icon ion-icon{font-size:36px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info{flex:1;min-width:0}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-1, 4px) 0;color:var(--ion-text-color)}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-list ion-card ion-card-content .feature-list{list-style:none;padding:0;margin:0}.membership-section .options-list ion-card ion-card-content .feature-list li{display:flex;align-items:center;gap:var(--token-space-2, 8px);padding:var(--token-space-1, 4px) 0;font-size:var(--token-font-size-1, 13px);color:var(--ion-text-color);line-height:var(--token-line-height-normal, 1.4)}.membership-section .options-list ion-card ion-card-content .feature-list li ion-icon{font-size:var(--token-space-4, 16px);flex-shrink:0;color:var(--ion-color-success)}.membership-section .options-list ion-card:hover .protocol-header .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section.connection-progress{display:flex;justify-content:center;align-items:center;min-height:200px}.membership-section.connection-progress .status-info{text-align:center;padding:var(--token-space-6, 24px)}.membership-section.connection-progress .status-info ion-spinner{font-size:48px;margin-bottom:var(--token-space-4, 16px);color:var(--ion-color-primary)}.membership-section.connection-progress .status-info h3{font-size:var(--token-font-size-4, 18px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 8px) 0;color:var(--ion-text-color)}.membership-section.connection-progress .status-info p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);margin:0;max-width:300px;line-height:var(--token-line-height-normal, 1.4)}.membership-section .error-section{padding:var(--token-space-3, 12px);background:rgba(var(--ion-color-danger-rgb),.1);border:1px solid rgba(var(--ion-color-danger-rgb),.2);border-radius:var(--token-radius-2, 8px)}.membership-section .error-section ion-item{--background: transparent;--padding-start: 0;--inner-padding-end: 0}.membership-section .error-section ion-item ion-icon{font-size:var(--token-space-6, 24px)}.membership-section .error-section ion-item ion-label h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-color-danger);margin:0 0 var(--token-space-1, 4px) 0}.membership-section .error-section ion-item ion-label p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.step-content{animation:stepFadeIn var(--token-transition-normal, .25s) var(--token-ease-out, cubic-bezier(0, 0, .2, 1))}.direct-select ion-card{position:relative;overflow:hidden}.direct-select ion-card:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%) translate(0);width:0;height:0;border-left:6px solid var(--ion-color-primary);border-top:5px solid transparent;border-bottom:5px solid transparent;opacity:0;transition:all var(--token-transition-fast, .15s) ease}.direct-select ion-card:hover:after{opacity:.6;transform:translateY(-50%) translate(4px)}.direct-select ion-card:hover{border-color:rgba(var(--ion-color-primary-rgb),.4)}.direct-select ion-card:hover .option-icon ion-icon{color:var(--ion-color-primary)}.direct-select ion-card:active{transform:scale(.98);background:rgba(var(--ion-color-primary-rgb),.15)!important}.direct-select.options-grid ion-card:after{right:8px;top:16px;transform:translateY(0) translate(0)}.direct-select.options-grid ion-card:hover:after{transform:translateY(0) translate(4px)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--ion-color-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),0)}}.step-progress .step-indicator .step-circle.active{animation:stepPulse 1.5s ease-out infinite}@media(max-width:768px){.membership-section .options-grid{grid-template-columns:1fr}.dao-header .step-progress .step-indicator .step-circle{width:28px;height:28px;font-size:12px}.dao-header .step-progress .step-indicator .step-line{width:24px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes fadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%,to{box-shadow:none}}}\n"] }]
|
|
9930
|
+
args: [{ selector: 'hsuite-wallet-connection-modal', standalone: true, imports: [CommonModule, IonicModule, ConnectionMethodStepComponent, QrPairingStepComponent], template: "<ion-content>\n <div class=\"modal-inner-content wallet-connection-modal\">\n <div class=\"header\">\n <div class=\"title\">\n <ion-button *ngIf=\"canGoBack()\" (click)=\"back()\" fill=\"clear\" class=\"back-btn\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back-outline\"></ion-icon>\n </ion-button>\n <p>{{ stepTitle() }}</p>\n </div>\n <ion-button class=\"close-modal\" (click)=\"dismiss()\" fill=\"clear\" [disabled]=\"isConnecting()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Dynamic Step Progress Indicator -->\n <div class=\"dao-header\">\n <div class=\"step-progress\">\n <!-- Dynamic steps based on selected protocol path -->\n <ng-container *ngFor=\"let label of stepConfig().labels; let i = index\">\n <div class=\"step-indicator\">\n <div\n class=\"step-circle\"\n [class.active]=\"displayStep() === i + 1\"\n [class.completed]=\"displayStep() > i + 1\"\n [attr.title]=\"label\"\n >\n <ion-icon *ngIf=\"displayStep() > i + 1\" name=\"checkmark\"></ion-icon>\n <span *ngIf=\"displayStep() <= i + 1\">{{ i + 1 }}</span>\n </div>\n <!-- Step line between circles (not after the last one) -->\n <div\n class=\"step-line\"\n *ngIf=\"i < stepConfig().labels.length - 1\"\n [class.active]=\"displayStep() > i + 1\"\n ></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"form\">\n <!-- Step 1: Network Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.NetworkSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Network</h3>\n <p>Select the network you want to connect to.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let network of networkOptions\"\n (click)=\"selectNetworkAndProceed(network.id)\"\n [class.selected]=\"selectedNetwork() === network.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"network.icon\"></ion-icon>\n </div>\n <h3>{{ network.name }}</h3>\n <p>{{ network.description }}</p>\n <ion-badge *ngIf=\"network.recommended\" color=\"success\">Recommended</ion-badge>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 2: Protocol Selection (Direct Selection - click advances to next step) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ProtocolSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Connection Protocol</h3>\n <p>Choose how you want to connect your wallet.</p>\n </div>\n\n <div class=\"options-list direct-select\">\n <ion-card\n *ngFor=\"let protocol of protocolOptions()\"\n (click)=\"selectProtocolAndProceed(protocol.id)\"\n [class.selected]=\"selectedProtocol() === protocol.id\"\n button\n >\n <ion-card-content>\n <div class=\"protocol-header\">\n <div class=\"option-icon\">\n <ion-icon [name]=\"protocol.icon\"></ion-icon>\n </div>\n <div class=\"protocol-info\">\n <h3>{{ protocol.name }}</h3>\n <p>{{ protocol.description }}</p>\n </div>\n </div>\n\n <ul class=\"feature-list\">\n <li *ngFor=\"let feature of protocol.features\">\n <ion-icon name=\"checkmark-circle\" color=\"success\"></ion-icon>\n <span>{{ feature }}</span>\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 3: Connection Method Selection (HSuite Native only) -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionMethodSelection\" class=\"step-content\">\n <hsuite-connection-method-step\n [methods]=\"connectionMethodOptions()\"\n [isMobile]=\"isMobile()\"\n [selectedMethod]=\"selectedConnectionMethod()\"\n (methodSelected)=\"onConnectionMethodSelected($event)\"\n ></hsuite-connection-method-step>\n </div>\n\n <!-- Step 3 (WalletConnect path): Ledger Selection (Direct Selection - click initiates connection) -->\n <div *ngIf=\"currentStep() === ConnectionStep.LedgerSelection\" class=\"step-content\">\n <div class=\"membership-section\">\n <div class=\"explanation\">\n <h3>Choose Blockchain</h3>\n <p>Select the blockchain ledger to connect with.</p>\n </div>\n\n <div class=\"options-grid direct-select\">\n <ion-card\n *ngFor=\"let ledger of ledgerOptions\"\n (click)=\"selectLedgerAndConnect(ledger.id)\"\n [class.selected]=\"selectedLedger() === ledger.id\"\n button\n >\n <ion-card-content>\n <div class=\"option-icon\">\n <ion-icon [name]=\"ledger.icon\"></ion-icon>\n </div>\n <h3>{{ ledger.name }}</h3>\n <p>{{ ledger.description }}</p>\n </ion-card-content>\n </ion-card>\n </div>\n </div>\n </div>\n\n <!-- Step 5: QR Pairing (Mobile P2P - Nostr-first, single QR) -->\n <div *ngIf=\"currentStep() === ConnectionStep.QrPairing\" class=\"step-content\">\n <hsuite-qr-pairing-step\n [offerData]=\"pairingOffer()\"\n [appName]=\"appName\"\n [isLoading]=\"isGeneratingOffer()\"\n [isWaitingForWallet]=\"isWaitingForWallet()\"\n [isWaitingForApproval]=\"isWaitingForApproval()\"\n [errorMessage]=\"connectionError()\"\n (expired)=\"onQrExpired()\"\n (refreshRequested)=\"onQrRefresh()\"\n (cancelled)=\"back()\"\n ></hsuite-qr-pairing-step>\n </div>\n\n <!-- Step 6: Connection Progress -->\n <div *ngIf=\"currentStep() === ConnectionStep.ConnectionProgress\" class=\"step-content\">\n <div class=\"membership-section connection-progress\">\n <div *ngIf=\"isConnecting()\" class=\"status-info\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <h3>Connecting...</h3>\n <p *ngIf=\"selectedProtocol() === 'walletconnect'\">\n Please approve the connection in your wallet app or scan the QR code.\n </p>\n <p *ngIf=\"selectedProtocol() === 'hsuite-native'\">Opening HSuite Wallet...</p>\n </div>\n\n <div *ngIf=\"connectionError()\" class=\"membership-section\">\n <div class=\"error-section\">\n <ion-item lines=\"none\">\n <ion-icon slot=\"start\" name=\"alert-circle-outline\" color=\"danger\"></ion-icon>\n <ion-label>\n <h3>Connection Failed</h3>\n <p>{{ connectionError() }}</p>\n </ion-label>\n </ion-item>\n </div>\n <ion-button expand=\"block\" fill=\"outline\" (click)=\"back()\" class=\"ion-margin-top\">\n Try Again\n </ion-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer removed: All steps now use direct selection (click to proceed) -->\n </div>\n</ion-content>\n", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}ion-content{--background: transparent;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0;height:100vh;width:100%;display:flex!important;align-items:center!important;justify-content:center!important}ion-content::part(scroll){display:flex;align-items:center;justify-content:center;min-height:100%;width:100%}.modal-inner-content{width:90%;max-width:600px;max-height:80vh;background:var(--glass-background, rgba(var(--ion-color-dark-rgb), .95));border-radius:var(--border-radius-xl, 16px);padding:0;display:flex;flex-direction:column;box-shadow:var(--shadow-2xl);border:1px solid var(--border-flat, rgba(var(--ion-color-light-rgb), .1));overflow:hidden;animation:modalFadeIn .3s ease}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg, 16px) var(--space-xl, 20px);background:transparent;flex-shrink:0}.header .title{display:flex;align-items:center;gap:var(--space-sm, 8px);flex:1}.header .title p{margin:0;font-size:var(--font-size-2xl, 24px);font-weight:var(--font-weight-bold, 700);color:var(--ion-text-color);line-height:1.2}.header .back-btn{--padding-start: 8px;--padding-end: 8px;margin:0}.header .back-btn ion-icon{font-size:22px;color:var(--ion-color-primary)}.header .close-modal{--padding-start: 8px;--padding-end: 8px;margin:0;cursor:pointer}.header .close-modal ion-icon{font-size:24px;color:var(--ion-text-color)}.header .close-modal:hover:not(:disabled){transform:scale(1.05)}.header .close-modal:active:not(:disabled){transform:scale(.95)}.form{flex:1;overflow-y:auto;padding:0 var(--space-xl, 20px) var(--space-xl, 20px) var(--space-xl, 20px);background:transparent}.form::-webkit-scrollbar{width:8px}.form::-webkit-scrollbar-track{background:var(--surface-flat, rgba(var(--ion-color-light-rgb), .05));border-radius:4px}.form::-webkit-scrollbar-thumb{background:rgba(var(--ion-color-light-rgb),.2);border-radius:4px}.form::-webkit-scrollbar-thumb:hover{background:rgba(var(--ion-color-light-rgb),.3)}@media(min-width:768px){.modal-inner-content{width:80%;max-width:700px;border-radius:20px}.header{padding:20px 24px}.dao-header{margin:0 24px 24px}.form{padding:0 24px 24px}}@media(max-width:480px){.modal-inner-content{width:95%;max-height:85vh}.header{padding:14px 16px}.dao-header{margin:0 16px 20px}.form{padding:0 16px 16px}}.dao-header{margin:0 var(--space-xl, 20px) var(--token-space-6, 24px) var(--space-xl, 20px);padding:var(--token-space-4, 16px);background:var(--token-surface-2, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);box-shadow:var(--token-elevation-1, var(--shadow-sm));flex-shrink:0;animation:fadeIn var(--token-transition-slow, .3s) ease}.dao-header .step-progress{display:flex;align-items:center;justify-content:center}.dao-header .step-progress .step-indicator{display:flex;align-items:center}.dao-header .step-progress .step-indicator .step-circle{width:36px;height:36px;border-radius:var(--token-radius-full, 50%);display:flex;align-items:center;justify-content:center;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .1));color:var(--ion-text-color);font-weight:var(--token-font-weight-semibold, 600);font-size:var(--token-font-size-2, 14px);border:var(--token-border-width-1, 1px) solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));transition:all var(--token-transition-slow, .3s) var(--token-ease-in-out, cubic-bezier(.4, 0, .2, 1))}.dao-header .step-progress .step-indicator .step-circle.active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-color:var(--ion-color-primary);transform:scale(1.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.2)}.dao-header .step-progress .step-indicator .step-circle.completed{background:var(--ion-color-success);color:var(--ion-color-success-contrast);border-color:var(--ion-color-success);transform:scale(1.05)}.dao-header .step-progress .step-indicator .step-circle:hover:not(.active):not(.completed){transform:scale(1.05);background:rgba(var(--ion-color-light-rgb),.15)}.dao-header .step-progress .step-indicator .step-circle ion-icon{font-size:20px}.dao-header .step-progress .step-indicator .step-line{width:40px;height:var(--token-border-width-2, 2px);background:var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .2)));margin:0 var(--token-space-2, 8px);transition:all var(--token-transition-slow, .3s) ease}.dao-header .step-progress .step-indicator .step-line.active{background:var(--ion-color-success);box-shadow:0 0 8px rgba(var(--ion-color-success-rgb),.5)}.membership-section{margin-bottom:var(--token-space-6, 24px);animation:fadeIn var(--token-transition-slow, .3s) ease}.membership-section .explanation{margin-bottom:var(--token-space-4, 16px)}.membership-section .explanation h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-text-color);line-height:var(--token-line-height-tight, 1.3);margin:0 0 var(--token-space-2, 8px) 0}.membership-section .explanation p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);line-height:var(--token-line-height-normal, 1.4);margin:0}.membership-section .options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--token-space-3, 12px)}.membership-section .options-grid ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-grid ion-card:hover{transform:translateY(-2px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-grid ion-card:active{transform:translateY(0)}.membership-section .options-grid ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-grid ion-card ion-card-content{text-align:center;padding:var(--token-space-5, 20px)}.membership-section .options-grid ion-card ion-card-content .option-icon{margin-bottom:var(--token-space-3, 12px)}.membership-section .options-grid ion-card ion-card-content .option-icon ion-icon{font-size:40px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-grid ion-card ion-card-content h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 6px) 0;color:var(--ion-text-color)}.membership-section .options-grid ion-card ion-card-content p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0 0 var(--token-space-2, 8px) 0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-grid ion-card:hover .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section .options-list{display:flex;flex-direction:column;gap:var(--token-space-3, 12px)}.membership-section .options-list ion-card{margin:0;background:var(--token-surface-3, rgba(var(--ion-color-light-rgb), .05));border:1px solid var(--border-flat, var(--token-border-subtle, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--token-radius-3, 12px);transition:all var(--token-transition-normal, .2s) ease;cursor:pointer;box-shadow:var(--token-elevation-1, var(--shadow-sm))}.membership-section .options-list ion-card:hover{transform:translate(4px);background:var(--token-surface-hover, rgba(var(--ion-color-light-rgb), .08));border-color:var(--border-flat, rgba(var(--ion-color-light-rgb), .2));box-shadow:var(--token-elevation-2, var(--shadow-md))}.membership-section .options-list ion-card:active{transform:translate(2px)}.membership-section .options-list ion-card.selected{border:2px solid var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.1);box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.1)}.membership-section .options-list ion-card ion-card-content{padding:var(--token-space-4, 16px)}.membership-section .options-list ion-card ion-card-content .protocol-header{display:flex;align-items:center;gap:var(--token-space-3, 12px);margin-bottom:var(--token-space-3, 12px)}.membership-section .options-list ion-card ion-card-content .protocol-header .option-icon ion-icon{font-size:36px;color:var(--ion-color-primary);transition:transform var(--token-transition-fast, .15s) ease}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info{flex:1;min-width:0}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-1, 4px) 0;color:var(--ion-text-color)}.membership-section .options-list ion-card ion-card-content .protocol-header .protocol-info p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.membership-section .options-list ion-card ion-card-content .feature-list{list-style:none;padding:0;margin:0}.membership-section .options-list ion-card ion-card-content .feature-list li{display:flex;align-items:center;gap:var(--token-space-2, 8px);padding:var(--token-space-1, 4px) 0;font-size:var(--token-font-size-1, 13px);color:var(--ion-text-color);line-height:var(--token-line-height-normal, 1.4)}.membership-section .options-list ion-card ion-card-content .feature-list li ion-icon{font-size:var(--token-space-4, 16px);flex-shrink:0;color:var(--ion-color-success)}.membership-section .options-list ion-card:hover .protocol-header .option-icon ion-icon{transform:scale(1.1) rotate(5deg)}.membership-section.connection-progress{display:flex;justify-content:center;align-items:center;min-height:200px}.membership-section.connection-progress .status-info{text-align:center;padding:var(--token-space-6, 24px)}.membership-section.connection-progress .status-info ion-spinner{font-size:48px;margin-bottom:var(--token-space-4, 16px);color:var(--ion-color-primary)}.membership-section.connection-progress .status-info h3{font-size:var(--token-font-size-4, 18px);font-weight:var(--token-font-weight-medium, 500);margin:0 0 var(--token-space-2, 8px) 0;color:var(--ion-text-color)}.membership-section.connection-progress .status-info p{font-size:var(--token-font-size-2, 14px);color:var(--ion-color-medium);margin:0;max-width:300px;line-height:var(--token-line-height-normal, 1.4)}.membership-section .error-section{padding:var(--token-space-3, 12px);background:rgba(var(--ion-color-danger-rgb),.1);border:1px solid rgba(var(--ion-color-danger-rgb),.2);border-radius:var(--token-radius-2, 8px)}.membership-section .error-section ion-item{--background: transparent;--padding-start: 0;--inner-padding-end: 0}.membership-section .error-section ion-item ion-icon{font-size:var(--token-space-6, 24px)}.membership-section .error-section ion-item ion-label h3{font-size:var(--token-font-size-3, 16px);font-weight:var(--token-font-weight-medium, 500);color:var(--ion-color-danger);margin:0 0 var(--token-space-1, 4px) 0}.membership-section .error-section ion-item ion-label p{font-size:var(--token-font-size-1, 13px);color:var(--ion-color-medium);margin:0;line-height:var(--token-line-height-tight, 1.3)}.step-content{animation:stepFadeIn var(--token-transition-normal, .25s) var(--token-ease-out, cubic-bezier(0, 0, .2, 1))}.direct-select ion-card{position:relative;overflow:hidden}.direct-select ion-card:after{content:\"\";position:absolute;right:12px;top:50%;transform:translateY(-50%) translate(0);width:0;height:0;border-left:6px solid var(--ion-color-primary);border-top:5px solid transparent;border-bottom:5px solid transparent;opacity:0;transition:all var(--token-transition-fast, .15s) ease}.direct-select ion-card:hover:after{opacity:.6;transform:translateY(-50%) translate(4px)}.direct-select ion-card:hover{border-color:rgba(var(--ion-color-primary-rgb),.4)}.direct-select ion-card:hover .option-icon ion-icon{color:var(--ion-color-primary)}.direct-select ion-card:active{transform:scale(.98);background:rgba(var(--ion-color-primary-rgb),.15)!important}.direct-select.options-grid ion-card:after{right:8px;top:16px;transform:translateY(0) translate(0)}.direct-select.options-grid ion-card:hover:after{transform:translateY(0) translate(4px)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),.4)}70%{box-shadow:0 0 0 8px rgba(var(--ion-color-primary-rgb),0)}to{box-shadow:0 0 rgba(var(--ion-color-primary-rgb),0)}}.step-progress .step-indicator .step-circle.active{animation:stepPulse 1.5s ease-out infinite}@media(max-width:768px){.membership-section .options-grid{grid-template-columns:1fr}.dao-header .step-progress .step-indicator .step-circle{width:28px;height:28px;font-size:12px}.dao-header .step-progress .step-indicator .step-line{width:24px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes fadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepFadeIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes stepPulse{0%,to{box-shadow:none}}}\n"] }]
|
|
9877
9931
|
}], ctorParameters: () => [{ type: i1$1.ModalController }, { type: UnifiedWalletService }], propDecorators: { projectId: [{
|
|
9878
9932
|
type: Input
|
|
9933
|
+
}], network: [{
|
|
9934
|
+
type: Input
|
|
9879
9935
|
}], appName: [{
|
|
9880
9936
|
type: Input
|
|
9881
9937
|
}], appDescription: [{
|
|
@@ -9932,6 +9988,12 @@ class WalletConnectButtonComponent {
|
|
|
9932
9988
|
* Wallet URL for targeting the wallet window
|
|
9933
9989
|
*/
|
|
9934
9990
|
walletUrl = DEFAULT_WALLET_URL;
|
|
9991
|
+
/**
|
|
9992
|
+
* Pins the connection network and hides the network-selection step in the
|
|
9993
|
+
* modal. When set to `'mainnet'` or `'testnet'`, the dApp decides the network
|
|
9994
|
+
* and the user never sees the picker. When omitted, the user chooses.
|
|
9995
|
+
*/
|
|
9996
|
+
network;
|
|
9935
9997
|
/**
|
|
9936
9998
|
* Whether to show session information when connected
|
|
9937
9999
|
* @default true
|
|
@@ -10012,6 +10074,7 @@ class WalletConnectButtonComponent {
|
|
|
10012
10074
|
appName: this.appName,
|
|
10013
10075
|
appDescription: this.appDescription,
|
|
10014
10076
|
walletUrl: this.walletUrl,
|
|
10077
|
+
network: this.network,
|
|
10015
10078
|
},
|
|
10016
10079
|
});
|
|
10017
10080
|
await modal.present();
|
|
@@ -10083,7 +10146,7 @@ class WalletConnectButtonComponent {
|
|
|
10083
10146
|
return this.wallet.allAccounts();
|
|
10084
10147
|
}
|
|
10085
10148
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10086
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectButtonComponent, isStandalone: true, selector: "wallet-connect-button", inputs: { walletConnectProjectId: "walletConnectProjectId", appName: "appName", appDescription: "appDescription", walletUrl: "walletUrl", showSessionInfo: "showSessionInfo", buttonColor: "buttonColor", size: "size", connectText: "connectText", connectedText: "connectedText", multiSessionMode: "multiSessionMode" }, outputs: { connected: "connected", disconnected: "disconnected", error: "error" }, providers: [ModalController], ngImport: i0, template: "<div class=\"wallet-connect-container\" [class]=\"'size-' + size\">\n <!-- Connect Button (Multi-Session Support) -->\n <ion-button\n [color]=\"buttonColor\"\n [size]=\"size\"\n [disabled]=\"isConnecting\"\n (click)=\"connect()\"\n class=\"wallet-button\">\n <ion-spinner *ngIf=\"isConnecting\" slot=\"start\" name=\"crescent\"></ion-spinner>\n <ion-icon *ngIf=\"!isConnecting\" [name]=\"getIconName()\" slot=\"start\"></ion-icon>\n {{ getButtonText() }}\n </ion-button>\n</div>\n\n", styles: [".wallet-connect-container{display:inline-block;width:100%}.wallet-button{--border-radius: var(--wallet-button-radius, var(--border-radius-lg, 12px));--padding-top: var(--wallet-button-padding-vertical, var(--space-md, 14px));--padding-bottom: var(--wallet-button-padding-vertical, var(--space-md, 14px));--padding-start: var(--wallet-button-padding-horizontal, var(--space-lg, 24px));--padding-end: var(--wallet-button-padding-horizontal, var(--space-lg, 24px));width:100%;font-weight:var(--wallet-button-font-weight, var(--font-weight-semibold, 600));font-size:var(--wallet-button-font-size, var(--font-size-md, 16px));text-transform:none;letter-spacing:var(--letter-spacing-wide, .5px);transition:var(--wallet-transition-normal, var(--transition-all, .2s ease));box-shadow:var(--wallet-button-shadow, var(--shadow-md))}.wallet-button:hover:not([disabled]){transform:translateY(-2px);box-shadow:var(--shadow-lg)}.wallet-button:active:not([disabled]){transform:translateY(0)}.wallet-button ion-icon{font-size:1.25em;transition:transform var(--wallet-transition-fast, var(--transition-fade, .15s)) ease}.wallet-button:hover:not([disabled]) ion-icon{transform:scale(var(--button-hover-scale, 1.1))}.session-display{background:var(--wallet-session-bg, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--border-width-thin, 1px) solid var(--wallet-session-border, var(--border-flat, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--wallet-session-radius, var(--border-radius-lg, 12px));padding:var(--wallet-session-padding, var(--space-lg, 16px));display:flex;flex-direction:column;gap:var(--wallet-session-gap, var(--space-md, 12px));box-shadow:var(--wallet-session-shadow, var(--shadow-md));animation:slideIn var(--wallet-transition-slow, var(--duration-slow, .3s)) ease-out}.session-header{display:flex;align-items:center;justify-content:space-between;gap:var(--wallet-spacing-lg, var(--space-lg, 16px))}.session-info{display:flex;align-items:center;gap:var(--wallet-spacing-md, var(--space-md, 8px));flex:1;min-width:0}.session-icon{font-size:var(--wallet-session-icon-size, var(--font-size-2xl, 28px));color:var(--ion-color-primary);flex-shrink:0;transition:transform var(--wallet-transition-fast, var(--duration-fast, .15s)) ease}.session-display:hover .session-icon{transform:scale(1.05)}.session-details{display:flex;flex-direction:column;gap:var(--wallet-spacing-xs, var(--space-xs, 4px));min-width:0;flex:1}.session-details strong{font-size:var(--wallet-font-size-base, var(--font-size-sm, 14px));font-weight:var(--wallet-font-weight-semibold, var(--font-weight-semibold, 600));color:var(--wallet-session-text-primary, var(--ion-text-color));line-height:var(--wallet-line-height-normal, var(--line-height-normal, 1.4));display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-badges{display:flex;gap:var(--wallet-spacing-xs, var(--space-xs, 4px));flex-wrap:wrap}.network-badge{font-size:var(--wallet-badge-font-size, var(--font-size-xs, 10px));font-weight:var(--wallet-badge-font-weight, var(--font-weight-semibold, 600));padding:var(--wallet-badge-padding, var(--space-xs, 3px) var(--space-sm, 8px));border-radius:var(--wallet-badge-radius, var(--border-radius-sm, 6px));line-height:var(--line-height-tight, 1.2);transition:transform var(--wallet-transition-fast, var(--duration-fast, .15s)) ease}.session-display:hover .network-badge{transform:scale(1.05)}.disconnect-button{--border-radius: var(--wallet-spacing-sm, var(--border-radius-md, 8px));--padding-start: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-end: var(--wallet-spacing-sm, var(--space-sm, 8px));flex-shrink:0;transition:all var(--wallet-transition-fast, var(--transition-all, .15s ease))}.disconnect-button:hover:not([disabled]){transform:scale(1.05)}.disconnect-button:active:not([disabled]){transform:scale(var(--button-press-scale, .95))}.account-list{display:flex;flex-direction:column;gap:var(--wallet-spacing-sm, var(--space-sm, 4px));padding-top:var(--wallet-spacing-md, var(--space-md, 8px));border-top:var(--border-width-thin, 1px) solid var(--wallet-session-border, var(--border-flat, rgba(var(--ion-color-light-rgb), .1)))}.account-item{display:flex;align-items:center;justify-content:space-between;padding:var(--wallet-account-padding, var(--space-sm, 8px) var(--space-md, 12px));background:var(--wallet-account-bg, var(--surface-flat, rgba(var(--ion-color-primary-rgb), .05)));border-radius:var(--wallet-account-radius, var(--border-radius-md, 8px));transition:all var(--wallet-transition-normal, var(--transition-all, .2s ease))}.account-item:hover{background:var(--wallet-account-bg-hover, var(--surface-flat-hover, rgba(var(--ion-color-primary-rgb), .1)));transform:translate(2px)}.account-item .account-address{font-family:var(--wallet-account-font-family, var(--font-family-mono, monospace));font-size:var(--wallet-account-font-size, var(--font-size-sm, 14px));color:var(--wallet-session-text-primary, var(--ion-text-color));line-height:var(--wallet-line-height-normal, var(--line-height-normal, 1.4));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.size-small{--wallet-session-padding: var(--wallet-spacing-md, var(--space-md, 12px))}.size-small .wallet-button{--padding-top: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-bottom: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-start: var(--wallet-spacing-lg, var(--space-lg, 16px));--padding-end: var(--wallet-spacing-lg, var(--space-lg, 16px));font-size:var(--wallet-font-size-sm, var(--font-size-sm, 13px))}.size-small .session-icon{font-size:var(--font-size-xl, 24px)}.size-small .session-details strong{font-size:var(--wallet-font-size-sm, var(--font-size-sm, 13px))}.size-large{--wallet-session-padding: var(--wallet-spacing-xl, var(--space-xl, 20px))}.size-large .wallet-button{--padding-top: var(--wallet-spacing-lg, var(--space-lg, 18px));--padding-bottom: var(--wallet-spacing-lg, var(--space-lg, 18px));--padding-start: var(--wallet-spacing-2xl, var(--space-2xl, 32px));--padding-end: var(--wallet-spacing-2xl, var(--space-2xl, 32px));font-size:var(--wallet-font-size-lg, var(--font-size-lg, 18px))}.size-large .session-icon{font-size:var(--font-size-3xl, 32px)}.size-large .session-details strong{font-size:var(--wallet-font-size-lg, var(--font-size-lg, 18px))}@media(max-width:576px){.session-header{flex-wrap:wrap}.disconnect-button{width:100%}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.wallet-button[disabled]{animation:pulse 1.5s ease-in-out infinite}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes slideIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] });
|
|
10149
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectButtonComponent, isStandalone: true, selector: "wallet-connect-button", inputs: { walletConnectProjectId: "walletConnectProjectId", appName: "appName", appDescription: "appDescription", walletUrl: "walletUrl", network: "network", showSessionInfo: "showSessionInfo", buttonColor: "buttonColor", size: "size", connectText: "connectText", connectedText: "connectedText", multiSessionMode: "multiSessionMode" }, outputs: { connected: "connected", disconnected: "disconnected", error: "error" }, providers: [ModalController], ngImport: i0, template: "<div class=\"wallet-connect-container\" [class]=\"'size-' + size\">\n <!-- Connect Button (Multi-Session Support) -->\n <ion-button\n [color]=\"buttonColor\"\n [size]=\"size\"\n [disabled]=\"isConnecting\"\n (click)=\"connect()\"\n class=\"wallet-button\">\n <ion-spinner *ngIf=\"isConnecting\" slot=\"start\" name=\"crescent\"></ion-spinner>\n <ion-icon *ngIf=\"!isConnecting\" [name]=\"getIconName()\" slot=\"start\"></ion-icon>\n {{ getButtonText() }}\n </ion-button>\n</div>\n\n", styles: [".wallet-connect-container{display:inline-block;width:100%}.wallet-button{--border-radius: var(--wallet-button-radius, var(--border-radius-lg, 12px));--padding-top: var(--wallet-button-padding-vertical, var(--space-md, 14px));--padding-bottom: var(--wallet-button-padding-vertical, var(--space-md, 14px));--padding-start: var(--wallet-button-padding-horizontal, var(--space-lg, 24px));--padding-end: var(--wallet-button-padding-horizontal, var(--space-lg, 24px));width:100%;font-weight:var(--wallet-button-font-weight, var(--font-weight-semibold, 600));font-size:var(--wallet-button-font-size, var(--font-size-md, 16px));text-transform:none;letter-spacing:var(--letter-spacing-wide, .5px);transition:var(--wallet-transition-normal, var(--transition-all, .2s ease));box-shadow:var(--wallet-button-shadow, var(--shadow-md))}.wallet-button:hover:not([disabled]){transform:translateY(-2px);box-shadow:var(--shadow-lg)}.wallet-button:active:not([disabled]){transform:translateY(0)}.wallet-button ion-icon{font-size:1.25em;transition:transform var(--wallet-transition-fast, var(--transition-fade, .15s)) ease}.wallet-button:hover:not([disabled]) ion-icon{transform:scale(var(--button-hover-scale, 1.1))}.session-display{background:var(--wallet-session-bg, var(--surface-flat, rgba(var(--ion-color-light-rgb), .05)));border:var(--border-width-thin, 1px) solid var(--wallet-session-border, var(--border-flat, rgba(var(--ion-color-light-rgb), .1)));border-radius:var(--wallet-session-radius, var(--border-radius-lg, 12px));padding:var(--wallet-session-padding, var(--space-lg, 16px));display:flex;flex-direction:column;gap:var(--wallet-session-gap, var(--space-md, 12px));box-shadow:var(--wallet-session-shadow, var(--shadow-md));animation:slideIn var(--wallet-transition-slow, var(--duration-slow, .3s)) ease-out}.session-header{display:flex;align-items:center;justify-content:space-between;gap:var(--wallet-spacing-lg, var(--space-lg, 16px))}.session-info{display:flex;align-items:center;gap:var(--wallet-spacing-md, var(--space-md, 8px));flex:1;min-width:0}.session-icon{font-size:var(--wallet-session-icon-size, var(--font-size-2xl, 28px));color:var(--ion-color-primary);flex-shrink:0;transition:transform var(--wallet-transition-fast, var(--duration-fast, .15s)) ease}.session-display:hover .session-icon{transform:scale(1.05)}.session-details{display:flex;flex-direction:column;gap:var(--wallet-spacing-xs, var(--space-xs, 4px));min-width:0;flex:1}.session-details strong{font-size:var(--wallet-font-size-base, var(--font-size-sm, 14px));font-weight:var(--wallet-font-weight-semibold, var(--font-weight-semibold, 600));color:var(--wallet-session-text-primary, var(--ion-text-color));line-height:var(--wallet-line-height-normal, var(--line-height-normal, 1.4));display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-badges{display:flex;gap:var(--wallet-spacing-xs, var(--space-xs, 4px));flex-wrap:wrap}.network-badge{font-size:var(--wallet-badge-font-size, var(--font-size-xs, 10px));font-weight:var(--wallet-badge-font-weight, var(--font-weight-semibold, 600));padding:var(--wallet-badge-padding, var(--space-xs, 3px) var(--space-sm, 8px));border-radius:var(--wallet-badge-radius, var(--border-radius-sm, 6px));line-height:var(--line-height-tight, 1.2);transition:transform var(--wallet-transition-fast, var(--duration-fast, .15s)) ease}.session-display:hover .network-badge{transform:scale(1.05)}.disconnect-button{--border-radius: var(--wallet-spacing-sm, var(--border-radius-md, 8px));--padding-start: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-end: var(--wallet-spacing-sm, var(--space-sm, 8px));flex-shrink:0;transition:all var(--wallet-transition-fast, var(--transition-all, .15s ease))}.disconnect-button:hover:not([disabled]){transform:scale(1.05)}.disconnect-button:active:not([disabled]){transform:scale(var(--button-press-scale, .95))}.account-list{display:flex;flex-direction:column;gap:var(--wallet-spacing-sm, var(--space-sm, 4px));padding-top:var(--wallet-spacing-md, var(--space-md, 8px));border-top:var(--border-width-thin, 1px) solid var(--wallet-session-border, var(--border-flat, rgba(var(--ion-color-light-rgb), .1)))}.account-item{display:flex;align-items:center;justify-content:space-between;padding:var(--wallet-account-padding, var(--space-sm, 8px) var(--space-md, 12px));background:var(--wallet-account-bg, var(--surface-flat, rgba(var(--ion-color-primary-rgb), .05)));border-radius:var(--wallet-account-radius, var(--border-radius-md, 8px));transition:all var(--wallet-transition-normal, var(--transition-all, .2s ease))}.account-item:hover{background:var(--wallet-account-bg-hover, var(--surface-flat-hover, rgba(var(--ion-color-primary-rgb), .1)));transform:translate(2px)}.account-item .account-address{font-family:var(--wallet-account-font-family, var(--font-family-mono, monospace));font-size:var(--wallet-account-font-size, var(--font-size-sm, 14px));color:var(--wallet-session-text-primary, var(--ion-text-color));line-height:var(--wallet-line-height-normal, var(--line-height-normal, 1.4));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.size-small{--wallet-session-padding: var(--wallet-spacing-md, var(--space-md, 12px))}.size-small .wallet-button{--padding-top: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-bottom: var(--wallet-spacing-sm, var(--space-sm, 8px));--padding-start: var(--wallet-spacing-lg, var(--space-lg, 16px));--padding-end: var(--wallet-spacing-lg, var(--space-lg, 16px));font-size:var(--wallet-font-size-sm, var(--font-size-sm, 13px))}.size-small .session-icon{font-size:var(--font-size-xl, 24px)}.size-small .session-details strong{font-size:var(--wallet-font-size-sm, var(--font-size-sm, 13px))}.size-large{--wallet-session-padding: var(--wallet-spacing-xl, var(--space-xl, 20px))}.size-large .wallet-button{--padding-top: var(--wallet-spacing-lg, var(--space-lg, 18px));--padding-bottom: var(--wallet-spacing-lg, var(--space-lg, 18px));--padding-start: var(--wallet-spacing-2xl, var(--space-2xl, 32px));--padding-end: var(--wallet-spacing-2xl, var(--space-2xl, 32px));font-size:var(--wallet-font-size-lg, var(--font-size-lg, 18px))}.size-large .session-icon{font-size:var(--font-size-3xl, 32px)}.size-large .session-details strong{font-size:var(--wallet-font-size-lg, var(--font-size-lg, 18px))}@media(max-width:576px){.session-header{flex-wrap:wrap}.disconnect-button{width:100%}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.wallet-button[disabled]{animation:pulse 1.5s ease-in-out infinite}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}@keyframes slideIn{0%,to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] });
|
|
10087
10150
|
}
|
|
10088
10151
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectButtonComponent, decorators: [{
|
|
10089
10152
|
type: Component,
|
|
@@ -10096,6 +10159,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
10096
10159
|
type: Input
|
|
10097
10160
|
}], walletUrl: [{
|
|
10098
10161
|
type: Input
|
|
10162
|
+
}], network: [{
|
|
10163
|
+
type: Input
|
|
10099
10164
|
}], showSessionInfo: [{
|
|
10100
10165
|
type: Input
|
|
10101
10166
|
}], buttonColor: [{
|
|
@@ -10183,7 +10248,7 @@ class WalletConnectPromptComponent {
|
|
|
10183
10248
|
addIcons({ walletOutline });
|
|
10184
10249
|
}
|
|
10185
10250
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectPromptComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10186
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectPromptComponent, isStandalone: true, selector: "wallet-connect-prompt", inputs: { title: "title", subtitle: "subtitle", message: "message", showIcon: "showIcon", buttonText: "buttonText", buttonSize: "buttonSize", buttonColor: "buttonColor", cardColor: "cardColor", walletConnectProjectId: "walletConnectProjectId" }, ngImport: i0, template: "<ion-card class=\"wallet-connect-prompt\" [color]=\"cardColor\">\n <ion-card-header>\n <div class=\"prompt-header\">\n <ion-icon *ngIf=\"showIcon\" name=\"wallet-outline\" class=\"prompt-icon\"></ion-icon>\n <div>\n <ion-card-title>{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"subtitle\">{{ subtitle }}</ion-card-subtitle>\n </div>\n </div>\n </ion-card-header>\n \n <ion-card-content>\n <p class=\"prompt-message\">{{ message }}</p>\n \n <wallet-connect-button\n [walletConnectProjectId]=\"walletConnectProjectId\"\n [connectText]=\"buttonText\"\n [size]=\"buttonSize\"\n [buttonColor]=\"buttonColor\"\n class=\"prompt-button\"\n />\n </ion-card-content>\n</ion-card>\n\n", styles: [".wallet-connect-prompt{max-width:600px;margin:var(--space-lg, 24px) auto;text-align:center}.prompt-header{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm, 12px)}.prompt-icon{font-size:48px;color:var(--ion-color-primary)}.prompt-message{margin:var(--space-md, 16px) 0;color:var(--ion-color-medium);font-size:14px;line-height:1.6}.prompt-button{margin-top:var(--space-md, 16px)}.prompt-button ::ng-deep ion-button{margin:0 auto;display:block}@media(max-width:576px){.wallet-connect-prompt{margin:var(--space-md, 16px)}.prompt-icon{font-size:36px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: WalletConnectButtonComponent, selector: "wallet-connect-button", inputs: ["walletConnectProjectId", "appName", "appDescription", "walletUrl", "showSessionInfo", "buttonColor", "size", "connectText", "connectedText", "multiSessionMode"], outputs: ["connected", "disconnected", "error"] }] });
|
|
10251
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WalletConnectPromptComponent, isStandalone: true, selector: "wallet-connect-prompt", inputs: { title: "title", subtitle: "subtitle", message: "message", showIcon: "showIcon", buttonText: "buttonText", buttonSize: "buttonSize", buttonColor: "buttonColor", cardColor: "cardColor", walletConnectProjectId: "walletConnectProjectId" }, ngImport: i0, template: "<ion-card class=\"wallet-connect-prompt\" [color]=\"cardColor\">\n <ion-card-header>\n <div class=\"prompt-header\">\n <ion-icon *ngIf=\"showIcon\" name=\"wallet-outline\" class=\"prompt-icon\"></ion-icon>\n <div>\n <ion-card-title>{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"subtitle\">{{ subtitle }}</ion-card-subtitle>\n </div>\n </div>\n </ion-card-header>\n \n <ion-card-content>\n <p class=\"prompt-message\">{{ message }}</p>\n \n <wallet-connect-button\n [walletConnectProjectId]=\"walletConnectProjectId\"\n [connectText]=\"buttonText\"\n [size]=\"buttonSize\"\n [buttonColor]=\"buttonColor\"\n class=\"prompt-button\"\n />\n </ion-card-content>\n</ion-card>\n\n", styles: [".wallet-connect-prompt{max-width:600px;margin:var(--space-lg, 24px) auto;text-align:center}.prompt-header{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm, 12px)}.prompt-icon{font-size:48px;color:var(--ion-color-primary)}.prompt-message{margin:var(--space-md, 16px) 0;color:var(--ion-color-medium);font-size:14px;line-height:1.6}.prompt-button{margin-top:var(--space-md, 16px)}.prompt-button ::ng-deep ion-button{margin:0 auto;display:block}@media(max-width:576px){.wallet-connect-prompt{margin:var(--space-md, 16px)}.prompt-icon{font-size:36px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: WalletConnectButtonComponent, selector: "wallet-connect-button", inputs: ["walletConnectProjectId", "appName", "appDescription", "walletUrl", "network", "showSessionInfo", "buttonColor", "size", "connectText", "connectedText", "multiSessionMode"], outputs: ["connected", "disconnected", "error"] }] });
|
|
10187
10252
|
}
|
|
10188
10253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WalletConnectPromptComponent, decorators: [{
|
|
10189
10254
|
type: Component,
|