@akin-travel/partner-sdk 1.0.5
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/README.md +1204 -0
- package/dist/account/components/AccountInfoSection.d.ts +46 -0
- package/dist/account/components/AccountInfoSection.d.ts.map +1 -0
- package/dist/account/components/AccountInfoSection.js +52 -0
- package/dist/account/components/AccountInfoSection.js.map +1 -0
- package/dist/account/components/NotificationPreferencesSection.d.ts +40 -0
- package/dist/account/components/NotificationPreferencesSection.d.ts.map +1 -0
- package/dist/account/components/NotificationPreferencesSection.js +116 -0
- package/dist/account/components/NotificationPreferencesSection.js.map +1 -0
- package/dist/account/components/PasskeySection.d.ts +49 -0
- package/dist/account/components/PasskeySection.d.ts.map +1 -0
- package/dist/account/components/PasskeySection.js +298 -0
- package/dist/account/components/PasskeySection.js.map +1 -0
- package/dist/account/hooks/useAccountForm.d.ts +23 -0
- package/dist/account/hooks/useAccountForm.d.ts.map +1 -0
- package/dist/account/hooks/useAccountForm.js +133 -0
- package/dist/account/hooks/useAccountForm.js.map +1 -0
- package/dist/account/index.d.ts +10 -0
- package/dist/account/index.d.ts.map +1 -0
- package/dist/account/index.js +21 -0
- package/dist/account/index.js.map +1 -0
- package/dist/auth/AkinAuthProvider.d.ts +31 -0
- package/dist/auth/AkinAuthProvider.d.ts.map +1 -0
- package/dist/auth/AkinAuthProvider.js +632 -0
- package/dist/auth/AkinAuthProvider.js.map +1 -0
- package/dist/auth/components/LoginForm.d.ts +63 -0
- package/dist/auth/components/LoginForm.d.ts.map +1 -0
- package/dist/auth/components/LoginForm.js +230 -0
- package/dist/auth/components/LoginForm.js.map +1 -0
- package/dist/auth/components/MagicLinkForm.d.ts +41 -0
- package/dist/auth/components/MagicLinkForm.d.ts.map +1 -0
- package/dist/auth/components/MagicLinkForm.js +88 -0
- package/dist/auth/components/MagicLinkForm.js.map +1 -0
- package/dist/auth/components/RequireAuth.d.ts +62 -0
- package/dist/auth/components/RequireAuth.d.ts.map +1 -0
- package/dist/auth/components/RequireAuth.js +63 -0
- package/dist/auth/components/RequireAuth.js.map +1 -0
- package/dist/auth/components/RequireGuest.d.ts +60 -0
- package/dist/auth/components/RequireGuest.d.ts.map +1 -0
- package/dist/auth/components/RequireGuest.js +64 -0
- package/dist/auth/components/RequireGuest.js.map +1 -0
- package/dist/auth/components/SignupForm.d.ts +45 -0
- package/dist/auth/components/SignupForm.d.ts.map +1 -0
- package/dist/auth/components/SignupForm.js +167 -0
- package/dist/auth/components/SignupForm.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +21 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +136 -0
- package/dist/client.js.map +1 -0
- package/dist/components/PhoneInput.d.ts +62 -0
- package/dist/components/PhoneInput.d.ts.map +1 -0
- package/dist/components/PhoneInput.js +65 -0
- package/dist/components/PhoneInput.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/config.d.ts +111 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +56 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/preferences.d.ts +22 -0
- package/dist/constants/preferences.d.ts.map +1 -0
- package/dist/constants/preferences.js +52 -0
- package/dist/constants/preferences.js.map +1 -0
- package/dist/currency/CurrencyProvider.d.ts +46 -0
- package/dist/currency/CurrencyProvider.d.ts.map +1 -0
- package/dist/currency/CurrencyProvider.js +145 -0
- package/dist/currency/CurrencyProvider.js.map +1 -0
- package/dist/currency/components/CurrencySelector.d.ts +43 -0
- package/dist/currency/components/CurrencySelector.d.ts.map +1 -0
- package/dist/currency/components/CurrencySelector.js +58 -0
- package/dist/currency/components/CurrencySelector.js.map +1 -0
- package/dist/currency/exchangeRates.d.ts +40 -0
- package/dist/currency/exchangeRates.d.ts.map +1 -0
- package/dist/currency/exchangeRates.js +90 -0
- package/dist/currency/exchangeRates.js.map +1 -0
- package/dist/currency/index.d.ts +6 -0
- package/dist/currency/index.d.ts.map +1 -0
- package/dist/currency/index.js +20 -0
- package/dist/currency/index.js.map +1 -0
- package/dist/header/components/CurrencyAccordion.d.ts +45 -0
- package/dist/header/components/CurrencyAccordion.d.ts.map +1 -0
- package/dist/header/components/CurrencyAccordion.js +54 -0
- package/dist/header/components/CurrencyAccordion.js.map +1 -0
- package/dist/header/components/HeaderMenu.d.ts +49 -0
- package/dist/header/components/HeaderMenu.d.ts.map +1 -0
- package/dist/header/components/HeaderMenu.js +95 -0
- package/dist/header/components/HeaderMenu.js.map +1 -0
- package/dist/header/components/LanguageAccordion.d.ts +45 -0
- package/dist/header/components/LanguageAccordion.d.ts.map +1 -0
- package/dist/header/components/LanguageAccordion.js +54 -0
- package/dist/header/components/LanguageAccordion.js.map +1 -0
- package/dist/header/components/UserAvatar.d.ts +26 -0
- package/dist/header/components/UserAvatar.d.ts.map +1 -0
- package/dist/header/components/UserAvatar.js +46 -0
- package/dist/header/components/UserAvatar.js.map +1 -0
- package/dist/header/index.d.ts +10 -0
- package/dist/header/index.d.ts.map +1 -0
- package/dist/header/index.js +13 -0
- package/dist/header/index.js.map +1 -0
- package/dist/i18n/I18nProvider.d.ts +57 -0
- package/dist/i18n/I18nProvider.d.ts.map +1 -0
- package/dist/i18n/I18nProvider.js +205 -0
- package/dist/i18n/I18nProvider.js.map +1 -0
- package/dist/i18n/components/LanguageSelector.d.ts +43 -0
- package/dist/i18n/components/LanguageSelector.d.ts.map +1 -0
- package/dist/i18n/components/LanguageSelector.js +57 -0
- package/dist/i18n/components/LanguageSelector.js.map +1 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translations/en.json +283 -0
- package/dist/i18n/translations/es.json +283 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +191 -0
- package/dist/index.js.map +1 -0
- package/dist/loyalty/AkinLoyaltyProvider.d.ts +18 -0
- package/dist/loyalty/AkinLoyaltyProvider.d.ts.map +1 -0
- package/dist/loyalty/AkinLoyaltyProvider.js +399 -0
- package/dist/loyalty/AkinLoyaltyProvider.js.map +1 -0
- package/dist/loyalty/components/LoyaltyCard.d.ts +48 -0
- package/dist/loyalty/components/LoyaltyCard.d.ts.map +1 -0
- package/dist/loyalty/components/LoyaltyCard.js +140 -0
- package/dist/loyalty/components/LoyaltyCard.js.map +1 -0
- package/dist/loyalty/components/PointsDisplay.d.ts +40 -0
- package/dist/loyalty/components/PointsDisplay.d.ts.map +1 -0
- package/dist/loyalty/components/PointsDisplay.js +32 -0
- package/dist/loyalty/components/PointsDisplay.js.map +1 -0
- package/dist/loyalty/components/PreviousStays.d.ts +59 -0
- package/dist/loyalty/components/PreviousStays.d.ts.map +1 -0
- package/dist/loyalty/components/PreviousStays.js +101 -0
- package/dist/loyalty/components/PreviousStays.js.map +1 -0
- package/dist/loyalty/components/SimpleTierCards.d.ts +51 -0
- package/dist/loyalty/components/SimpleTierCards.d.ts.map +1 -0
- package/dist/loyalty/components/SimpleTierCards.js +96 -0
- package/dist/loyalty/components/SimpleTierCards.js.map +1 -0
- package/dist/loyalty/components/TierCard.d.ts +30 -0
- package/dist/loyalty/components/TierCard.d.ts.map +1 -0
- package/dist/loyalty/components/TierCard.js +41 -0
- package/dist/loyalty/components/TierCard.js.map +1 -0
- package/dist/loyalty/components/TierProgress.d.ts +32 -0
- package/dist/loyalty/components/TierProgress.d.ts.map +1 -0
- package/dist/loyalty/components/TierProgress.js +41 -0
- package/dist/loyalty/components/TierProgress.js.map +1 -0
- package/dist/loyalty/components/TierRequirementsTable.d.ts +54 -0
- package/dist/loyalty/components/TierRequirementsTable.d.ts.map +1 -0
- package/dist/loyalty/components/TierRequirementsTable.js +104 -0
- package/dist/loyalty/components/TierRequirementsTable.js.map +1 -0
- package/dist/loyalty/components/TransactionList.d.ts +44 -0
- package/dist/loyalty/components/TransactionList.d.ts.map +1 -0
- package/dist/loyalty/components/TransactionList.js +112 -0
- package/dist/loyalty/components/TransactionList.js.map +1 -0
- package/dist/loyalty/components/UpcomingStays.d.ts +49 -0
- package/dist/loyalty/components/UpcomingStays.d.ts.map +1 -0
- package/dist/loyalty/components/UpcomingStays.js +60 -0
- package/dist/loyalty/components/UpcomingStays.js.map +1 -0
- package/dist/loyalty/index.d.ts +12 -0
- package/dist/loyalty/index.d.ts.map +1 -0
- package/dist/loyalty/index.js +27 -0
- package/dist/loyalty/index.js.map +1 -0
- package/dist/types/account.d.ts +108 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/auth.d.ts +205 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +3 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/currency.d.ts +102 -0
- package/dist/types/currency.d.ts.map +1 -0
- package/dist/types/currency.js +3 -0
- package/dist/types/currency.js.map +1 -0
- package/dist/types/header.d.ts +105 -0
- package/dist/types/header.d.ts.map +1 -0
- package/dist/types/header.js +3 -0
- package/dist/types/header.js.map +1 -0
- package/dist/types/i18n.d.ts +90 -0
- package/dist/types/i18n.d.ts.map +1 -0
- package/dist/types/i18n.js +3 -0
- package/dist/types/i18n.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/loyalty.d.ts +312 -0
- package/dist/types/loyalty.d.ts.map +1 -0
- package/dist/types/loyalty.js +3 -0
- package/dist/types/loyalty.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/tierLabels.d.ts +27 -0
- package/dist/utils/tierLabels.d.ts.map +1 -0
- package/dist/utils/tierLabels.js +110 -0
- package/dist/utils/tierLabels.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_EXCHANGE_RATES = exports.DEFAULT_CURRENCIES = void 0;
|
|
4
|
+
exports.getCurrencyOption = getCurrencyOption;
|
|
5
|
+
exports.getCurrencySymbol = getCurrencySymbol;
|
|
6
|
+
exports.formatCurrencyAmount = formatCurrencyAmount;
|
|
7
|
+
exports.convertCurrency = convertCurrency;
|
|
8
|
+
/**
|
|
9
|
+
* Default available currencies
|
|
10
|
+
* Partners can override this via config.currency.availableCurrencies
|
|
11
|
+
*/
|
|
12
|
+
exports.DEFAULT_CURRENCIES = [
|
|
13
|
+
{ code: 'USD', name: 'US Dollar', symbol: '$', decimals: 2 },
|
|
14
|
+
{ code: 'EUR', name: 'Euro', symbol: '€', decimals: 2 },
|
|
15
|
+
{ code: 'GBP', name: 'British Pound', symbol: '£', decimals: 2 },
|
|
16
|
+
{ code: 'AUD', name: 'Australian Dollar', symbol: 'A$', decimals: 2 },
|
|
17
|
+
{ code: 'CAD', name: 'Canadian Dollar', symbol: 'C$', decimals: 2 },
|
|
18
|
+
{ code: 'JPY', name: 'Japanese Yen', symbol: '¥', decimals: 0 },
|
|
19
|
+
{ code: 'CNY', name: 'Chinese Yuan', symbol: '¥', decimals: 2 },
|
|
20
|
+
{ code: 'INR', name: 'Indian Rupee', symbol: '₹', decimals: 2 },
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Static fallback exchange rates (relative to USD)
|
|
24
|
+
* These are approximate rates for offline/fallback use
|
|
25
|
+
* Partners should provide live rates via config.currency.exchangeRates
|
|
26
|
+
*
|
|
27
|
+
* Last updated: 2025-01
|
|
28
|
+
*/
|
|
29
|
+
exports.DEFAULT_EXCHANGE_RATES = {
|
|
30
|
+
USD: 1,
|
|
31
|
+
EUR: 0.92,
|
|
32
|
+
GBP: 0.79,
|
|
33
|
+
AUD: 1.52,
|
|
34
|
+
CAD: 1.36,
|
|
35
|
+
JPY: 149.5,
|
|
36
|
+
CNY: 7.24,
|
|
37
|
+
INR: 83.12,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Get currency option by code
|
|
41
|
+
*/
|
|
42
|
+
function getCurrencyOption(code, currencies = exports.DEFAULT_CURRENCIES) {
|
|
43
|
+
return currencies.find((c) => c.code === code);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get currency symbol by code
|
|
47
|
+
*/
|
|
48
|
+
function getCurrencySymbol(code, currencies = exports.DEFAULT_CURRENCIES) {
|
|
49
|
+
const currency = getCurrencyOption(code, currencies);
|
|
50
|
+
return currency?.symbol ?? code;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Format a price in a specific currency using Intl.NumberFormat
|
|
54
|
+
*
|
|
55
|
+
* @param amount The amount to format
|
|
56
|
+
* @param currencyCode The currency code (e.g., 'USD', 'EUR')
|
|
57
|
+
* @param options Optional Intl.NumberFormat options
|
|
58
|
+
*/
|
|
59
|
+
function formatCurrencyAmount(amount, currencyCode, options) {
|
|
60
|
+
try {
|
|
61
|
+
return new Intl.NumberFormat(undefined, {
|
|
62
|
+
style: 'currency',
|
|
63
|
+
currency: currencyCode,
|
|
64
|
+
...options,
|
|
65
|
+
}).format(amount);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Fallback for unsupported currencies
|
|
69
|
+
const symbol = getCurrencySymbol(currencyCode);
|
|
70
|
+
return `${symbol}${amount.toFixed(2)}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert an amount from one currency to another
|
|
75
|
+
*
|
|
76
|
+
* @param amount The amount to convert
|
|
77
|
+
* @param fromCurrency Source currency code
|
|
78
|
+
* @param toCurrency Target currency code
|
|
79
|
+
* @param rates Exchange rates (relative to USD)
|
|
80
|
+
*/
|
|
81
|
+
function convertCurrency(amount, fromCurrency, toCurrency, rates = exports.DEFAULT_EXCHANGE_RATES) {
|
|
82
|
+
if (fromCurrency === toCurrency)
|
|
83
|
+
return amount;
|
|
84
|
+
const fromRate = rates[fromCurrency] ?? 1;
|
|
85
|
+
const toRate = rates[toCurrency] ?? 1;
|
|
86
|
+
// Convert to USD first, then to target currency
|
|
87
|
+
const amountInUSD = amount / fromRate;
|
|
88
|
+
return amountInUSD * toRate;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=exchangeRates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchangeRates.js","sourceRoot":"","sources":["../../src/currency/exchangeRates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CurrencyProvider, useCurrency, useOptionalCurrency } from './CurrencyProvider';
|
|
2
|
+
export { CurrencySelector } from './components/CurrencySelector';
|
|
3
|
+
export { DEFAULT_CURRENCIES, DEFAULT_EXCHANGE_RATES, getCurrencyOption, getCurrencySymbol, formatCurrencyAmount, convertCurrency, } from './exchangeRates';
|
|
4
|
+
export type { CurrencyCode, CurrencyOption, ExchangeRates, CurrencyConfig, CurrencyState, CurrencyActions, CurrencyContextValue, CurrencySelectorRenderProps, } from '../types/currency';
|
|
5
|
+
export type { CurrencySelectorProps } from './components/CurrencySelector';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/currency/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertCurrency = exports.formatCurrencyAmount = exports.getCurrencySymbol = exports.getCurrencyOption = exports.DEFAULT_EXCHANGE_RATES = exports.DEFAULT_CURRENCIES = exports.CurrencySelector = exports.useOptionalCurrency = exports.useCurrency = exports.CurrencyProvider = void 0;
|
|
4
|
+
// Provider and hooks
|
|
5
|
+
var CurrencyProvider_1 = require("./CurrencyProvider");
|
|
6
|
+
Object.defineProperty(exports, "CurrencyProvider", { enumerable: true, get: function () { return CurrencyProvider_1.CurrencyProvider; } });
|
|
7
|
+
Object.defineProperty(exports, "useCurrency", { enumerable: true, get: function () { return CurrencyProvider_1.useCurrency; } });
|
|
8
|
+
Object.defineProperty(exports, "useOptionalCurrency", { enumerable: true, get: function () { return CurrencyProvider_1.useOptionalCurrency; } });
|
|
9
|
+
// Components
|
|
10
|
+
var CurrencySelector_1 = require("./components/CurrencySelector");
|
|
11
|
+
Object.defineProperty(exports, "CurrencySelector", { enumerable: true, get: function () { return CurrencySelector_1.CurrencySelector; } });
|
|
12
|
+
// Utilities
|
|
13
|
+
var exchangeRates_1 = require("./exchangeRates");
|
|
14
|
+
Object.defineProperty(exports, "DEFAULT_CURRENCIES", { enumerable: true, get: function () { return exchangeRates_1.DEFAULT_CURRENCIES; } });
|
|
15
|
+
Object.defineProperty(exports, "DEFAULT_EXCHANGE_RATES", { enumerable: true, get: function () { return exchangeRates_1.DEFAULT_EXCHANGE_RATES; } });
|
|
16
|
+
Object.defineProperty(exports, "getCurrencyOption", { enumerable: true, get: function () { return exchangeRates_1.getCurrencyOption; } });
|
|
17
|
+
Object.defineProperty(exports, "getCurrencySymbol", { enumerable: true, get: function () { return exchangeRates_1.getCurrencySymbol; } });
|
|
18
|
+
Object.defineProperty(exports, "formatCurrencyAmount", { enumerable: true, get: function () { return exchangeRates_1.formatCurrencyAmount; } });
|
|
19
|
+
Object.defineProperty(exports, "convertCurrency", { enumerable: true, get: function () { return exchangeRates_1.convertCurrency; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/currency/index.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,uDAAwF;AAA/E,oHAAA,gBAAgB,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,uHAAA,mBAAmB,OAAA;AAE3D,aAAa;AACb,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAEzB,YAAY;AACZ,iDAOyB;AANvB,mHAAA,kBAAkB,OAAA;AAClB,uHAAA,sBAAsB,OAAA;AACtB,kHAAA,iBAAiB,OAAA;AACjB,kHAAA,iBAAiB,OAAA;AACjB,qHAAA,oBAAoB,OAAA;AACpB,gHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { CurrencyCode } from '../../types/currency';
|
|
3
|
+
import type { CurrencyAccordionRenderProps } from '../../types/header';
|
|
4
|
+
export interface CurrencyAccordionProps {
|
|
5
|
+
/**
|
|
6
|
+
* Render function receiving accordion state
|
|
7
|
+
*/
|
|
8
|
+
children: (props: CurrencyAccordionRenderProps) => ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Default expanded state
|
|
11
|
+
*/
|
|
12
|
+
defaultExpanded?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Callback when currency changes
|
|
15
|
+
*/
|
|
16
|
+
onCurrencyChange?: (currency: CurrencyCode) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Headless currency accordion component for header menus
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <CurrencyAccordion>
|
|
23
|
+
* {({ currentCurrency, availableCurrencies, setCurrency, isExpanded, toggle }) => (
|
|
24
|
+
* <div>
|
|
25
|
+
* <button onClick={toggle}>
|
|
26
|
+
* Currency: {currentCurrency.symbol} {currentCurrency.code}
|
|
27
|
+
* {isExpanded ? '▲' : '▼'}
|
|
28
|
+
* </button>
|
|
29
|
+
* {isExpanded && (
|
|
30
|
+
* <ul>
|
|
31
|
+
* {availableCurrencies.map((curr) => (
|
|
32
|
+
* <li key={curr.code}>
|
|
33
|
+
* <button onClick={() => setCurrency(curr.code)}>
|
|
34
|
+
* {curr.symbol} {curr.name}
|
|
35
|
+
* </button>
|
|
36
|
+
* </li>
|
|
37
|
+
* ))}
|
|
38
|
+
* </ul>
|
|
39
|
+
* )}
|
|
40
|
+
* </div>
|
|
41
|
+
* )}
|
|
42
|
+
* </CurrencyAccordion>
|
|
43
|
+
*/
|
|
44
|
+
export declare function CurrencyAccordion({ children, defaultExpanded, onCurrencyChange, }: CurrencyAccordionProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
//# sourceMappingURL=CurrencyAccordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CurrencyAccordion.d.ts","sourceRoot":"","sources":["../../../src/header/components/CurrencyAccordion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,SAAS,CAAC;IAC7D;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,eAAuB,EACvB,gBAAgB,GACjB,EAAE,sBAAsB,2CAkCxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CurrencyAccordion = CurrencyAccordion;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const currency_1 = require("../../currency");
|
|
8
|
+
/**
|
|
9
|
+
* Headless currency accordion component for header menus
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <CurrencyAccordion>
|
|
13
|
+
* {({ currentCurrency, availableCurrencies, setCurrency, isExpanded, toggle }) => (
|
|
14
|
+
* <div>
|
|
15
|
+
* <button onClick={toggle}>
|
|
16
|
+
* Currency: {currentCurrency.symbol} {currentCurrency.code}
|
|
17
|
+
* {isExpanded ? '▲' : '▼'}
|
|
18
|
+
* </button>
|
|
19
|
+
* {isExpanded && (
|
|
20
|
+
* <ul>
|
|
21
|
+
* {availableCurrencies.map((curr) => (
|
|
22
|
+
* <li key={curr.code}>
|
|
23
|
+
* <button onClick={() => setCurrency(curr.code)}>
|
|
24
|
+
* {curr.symbol} {curr.name}
|
|
25
|
+
* </button>
|
|
26
|
+
* </li>
|
|
27
|
+
* ))}
|
|
28
|
+
* </ul>
|
|
29
|
+
* )}
|
|
30
|
+
* </div>
|
|
31
|
+
* )}
|
|
32
|
+
* </CurrencyAccordion>
|
|
33
|
+
*/
|
|
34
|
+
function CurrencyAccordion({ children, defaultExpanded = false, onCurrencyChange, }) {
|
|
35
|
+
const { currency, currentCurrency, availableCurrencies, setCurrency: setCurrencyContext, } = (0, currency_1.useCurrency)();
|
|
36
|
+
const [isExpanded, setIsExpanded] = (0, react_1.useState)(defaultExpanded);
|
|
37
|
+
const toggle = (0, react_1.useCallback)(() => {
|
|
38
|
+
setIsExpanded((prev) => !prev);
|
|
39
|
+
}, []);
|
|
40
|
+
const setCurrency = (0, react_1.useCallback)((newCurrency) => {
|
|
41
|
+
setCurrencyContext(newCurrency);
|
|
42
|
+
onCurrencyChange?.(newCurrency);
|
|
43
|
+
setIsExpanded(false);
|
|
44
|
+
}, [setCurrencyContext, onCurrencyChange]);
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
|
|
46
|
+
currency,
|
|
47
|
+
currentCurrency,
|
|
48
|
+
availableCurrencies,
|
|
49
|
+
setCurrency,
|
|
50
|
+
isExpanded,
|
|
51
|
+
toggle,
|
|
52
|
+
}) }));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=CurrencyAccordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CurrencyAccordion.js","sourceRoot":"","sources":["../../../src/header/components/CurrencyAccordion.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAgDb,8CAsCC;;AApFD,iCAA8D;AAC9D,6CAA6C;AAmB7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,eAAe,GAAG,KAAK,EACvB,gBAAgB,GACO;IACvB,MAAM,EACJ,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,WAAW,EAAE,kBAAkB,GAChC,GAAG,IAAA,sBAAW,GAAE,CAAC;IAClB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,eAAe,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9B,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,IAAA,mBAAW,EAC7B,CAAC,WAAyB,EAAE,EAAE;QAC5B,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChC,gBAAgB,EAAE,CAAC,WAAW,CAAC,CAAC;QAChC,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CACvC,CAAC;IAEF,OAAO,CACL,2DACG,QAAQ,CAAC;YACR,QAAQ;YACR,eAAe;YACf,mBAAmB;YACnB,WAAW;YACX,UAAU;YACV,MAAM;SACP,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { HeaderMenuRenderProps } from '../../types/header';
|
|
3
|
+
export interface HeaderMenuProps {
|
|
4
|
+
/**
|
|
5
|
+
* Render function receiving menu state and actions
|
|
6
|
+
*/
|
|
7
|
+
children: (props: HeaderMenuRenderProps) => ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Default open state
|
|
10
|
+
*/
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Callback when menu opens
|
|
14
|
+
*/
|
|
15
|
+
onOpen?: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* Callback when menu closes
|
|
18
|
+
*/
|
|
19
|
+
onClose?: () => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Headless header menu component
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* <HeaderMenu>
|
|
26
|
+
* {({ isOpen, toggle, userInfo, isAuthenticated, signOut }) => (
|
|
27
|
+
* <div>
|
|
28
|
+
* <button onClick={toggle}>
|
|
29
|
+
* {isAuthenticated ? userInfo?.initials : 'Menu'}
|
|
30
|
+
* </button>
|
|
31
|
+
* {isOpen && (
|
|
32
|
+
* <nav>
|
|
33
|
+
* {isAuthenticated ? (
|
|
34
|
+
* <>
|
|
35
|
+
* <a href="/rewards">Rewards</a>
|
|
36
|
+
* <a href="/account">Account</a>
|
|
37
|
+
* <button onClick={signOut}>Sign Out</button>
|
|
38
|
+
* </>
|
|
39
|
+
* ) : (
|
|
40
|
+
* <a href="/login">Sign In</a>
|
|
41
|
+
* )}
|
|
42
|
+
* </nav>
|
|
43
|
+
* )}
|
|
44
|
+
* </div>
|
|
45
|
+
* )}
|
|
46
|
+
* </HeaderMenu>
|
|
47
|
+
*/
|
|
48
|
+
export declare function HeaderMenu({ children, defaultOpen, onOpen, onClose, }: HeaderMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
//# sourceMappingURL=HeaderMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderMenu.d.ts","sourceRoot":"","sources":["../../../src/header/components/HeaderMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvE,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,SAAS,CAAC;IACtD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,WAAmB,EACnB,MAAM,EACN,OAAO,GACR,EAAE,eAAe,2CA4DjB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.HeaderMenu = HeaderMenu;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const auth_1 = require("../../auth");
|
|
8
|
+
const loyalty_1 = require("../../loyalty");
|
|
9
|
+
/**
|
|
10
|
+
* Get user initials from name
|
|
11
|
+
*/
|
|
12
|
+
function getInitials(firstName, lastName) {
|
|
13
|
+
const first = firstName?.charAt(0)?.toUpperCase() ?? '';
|
|
14
|
+
const last = lastName?.charAt(0)?.toUpperCase() ?? '';
|
|
15
|
+
return first + last || '?';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Headless header menu component
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <HeaderMenu>
|
|
22
|
+
* {({ isOpen, toggle, userInfo, isAuthenticated, signOut }) => (
|
|
23
|
+
* <div>
|
|
24
|
+
* <button onClick={toggle}>
|
|
25
|
+
* {isAuthenticated ? userInfo?.initials : 'Menu'}
|
|
26
|
+
* </button>
|
|
27
|
+
* {isOpen && (
|
|
28
|
+
* <nav>
|
|
29
|
+
* {isAuthenticated ? (
|
|
30
|
+
* <>
|
|
31
|
+
* <a href="/rewards">Rewards</a>
|
|
32
|
+
* <a href="/account">Account</a>
|
|
33
|
+
* <button onClick={signOut}>Sign Out</button>
|
|
34
|
+
* </>
|
|
35
|
+
* ) : (
|
|
36
|
+
* <a href="/login">Sign In</a>
|
|
37
|
+
* )}
|
|
38
|
+
* </nav>
|
|
39
|
+
* )}
|
|
40
|
+
* </div>
|
|
41
|
+
* )}
|
|
42
|
+
* </HeaderMenu>
|
|
43
|
+
*/
|
|
44
|
+
function HeaderMenu({ children, defaultOpen = false, onOpen, onClose, }) {
|
|
45
|
+
const { member, isAuthenticated, signOut: authSignOut } = (0, auth_1.useAkinAuth)();
|
|
46
|
+
const { tier, points } = (0, loyalty_1.useAkinLoyalty)();
|
|
47
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(defaultOpen);
|
|
48
|
+
const toggle = (0, react_1.useCallback)(() => {
|
|
49
|
+
setIsOpen((prev) => {
|
|
50
|
+
const newState = !prev;
|
|
51
|
+
if (newState) {
|
|
52
|
+
onOpen?.();
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
onClose?.();
|
|
56
|
+
}
|
|
57
|
+
return newState;
|
|
58
|
+
});
|
|
59
|
+
}, [onOpen, onClose]);
|
|
60
|
+
const close = (0, react_1.useCallback)(() => {
|
|
61
|
+
setIsOpen(false);
|
|
62
|
+
onClose?.();
|
|
63
|
+
}, [onClose]);
|
|
64
|
+
const open = (0, react_1.useCallback)(() => {
|
|
65
|
+
setIsOpen(true);
|
|
66
|
+
onOpen?.();
|
|
67
|
+
}, [onOpen]);
|
|
68
|
+
const signOut = (0, react_1.useCallback)(async () => {
|
|
69
|
+
await authSignOut();
|
|
70
|
+
close();
|
|
71
|
+
}, [authSignOut, close]);
|
|
72
|
+
// Build user info
|
|
73
|
+
const userInfo = (0, react_1.useMemo)(() => {
|
|
74
|
+
if (!member)
|
|
75
|
+
return null;
|
|
76
|
+
return {
|
|
77
|
+
displayName: `${member.firstName ?? ''} ${member.lastName ?? ''}`.trim() || 'User',
|
|
78
|
+
initials: getInitials(member.firstName ?? undefined, member.lastName ?? undefined),
|
|
79
|
+
email: member.email,
|
|
80
|
+
tierName: tier ? String(tier) : undefined,
|
|
81
|
+
points: points,
|
|
82
|
+
avatarUrl: undefined, // Member doesn't have avatarUrl currently
|
|
83
|
+
};
|
|
84
|
+
}, [member, tier, points]);
|
|
85
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
|
|
86
|
+
isOpen,
|
|
87
|
+
toggle,
|
|
88
|
+
close,
|
|
89
|
+
open,
|
|
90
|
+
isAuthenticated,
|
|
91
|
+
userInfo,
|
|
92
|
+
signOut,
|
|
93
|
+
}) }));
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=HeaderMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderMenu.js","sourceRoot":"","sources":["../../../src/header/components/HeaderMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { LocaleCode } from '../../types/i18n';
|
|
3
|
+
import type { LanguageAccordionRenderProps } from '../../types/header';
|
|
4
|
+
export interface LanguageAccordionProps {
|
|
5
|
+
/**
|
|
6
|
+
* Render function receiving accordion state
|
|
7
|
+
*/
|
|
8
|
+
children: (props: LanguageAccordionRenderProps) => ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Default expanded state
|
|
11
|
+
*/
|
|
12
|
+
defaultExpanded?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Callback when locale changes
|
|
15
|
+
*/
|
|
16
|
+
onLocaleChange?: (locale: LocaleCode) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Headless language accordion component for header menus
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <LanguageAccordion>
|
|
23
|
+
* {({ currentLanguage, availableLocales, setLocale, isExpanded, toggle }) => (
|
|
24
|
+
* <div>
|
|
25
|
+
* <button onClick={toggle}>
|
|
26
|
+
* Language: {currentLanguage.nativeName}
|
|
27
|
+
* {isExpanded ? '▲' : '▼'}
|
|
28
|
+
* </button>
|
|
29
|
+
* {isExpanded && (
|
|
30
|
+
* <ul>
|
|
31
|
+
* {availableLocales.map((lang) => (
|
|
32
|
+
* <li key={lang.code}>
|
|
33
|
+
* <button onClick={() => setLocale(lang.code)}>
|
|
34
|
+
* {lang.nativeName}
|
|
35
|
+
* </button>
|
|
36
|
+
* </li>
|
|
37
|
+
* ))}
|
|
38
|
+
* </ul>
|
|
39
|
+
* )}
|
|
40
|
+
* </div>
|
|
41
|
+
* )}
|
|
42
|
+
* </LanguageAccordion>
|
|
43
|
+
*/
|
|
44
|
+
export declare function LanguageAccordion({ children, defaultExpanded, onLocaleChange, }: LanguageAccordionProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
//# sourceMappingURL=LanguageAccordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageAccordion.d.ts","sourceRoot":"","sources":["../../../src/header/components/LanguageAccordion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,SAAS,CAAC;IAC7D;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,eAAuB,EACvB,cAAc,GACf,EAAE,sBAAsB,2CA6BxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LanguageAccordion = LanguageAccordion;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const i18n_1 = require("../../i18n");
|
|
8
|
+
/**
|
|
9
|
+
* Headless language accordion component for header menus
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <LanguageAccordion>
|
|
13
|
+
* {({ currentLanguage, availableLocales, setLocale, isExpanded, toggle }) => (
|
|
14
|
+
* <div>
|
|
15
|
+
* <button onClick={toggle}>
|
|
16
|
+
* Language: {currentLanguage.nativeName}
|
|
17
|
+
* {isExpanded ? '▲' : '▼'}
|
|
18
|
+
* </button>
|
|
19
|
+
* {isExpanded && (
|
|
20
|
+
* <ul>
|
|
21
|
+
* {availableLocales.map((lang) => (
|
|
22
|
+
* <li key={lang.code}>
|
|
23
|
+
* <button onClick={() => setLocale(lang.code)}>
|
|
24
|
+
* {lang.nativeName}
|
|
25
|
+
* </button>
|
|
26
|
+
* </li>
|
|
27
|
+
* ))}
|
|
28
|
+
* </ul>
|
|
29
|
+
* )}
|
|
30
|
+
* </div>
|
|
31
|
+
* )}
|
|
32
|
+
* </LanguageAccordion>
|
|
33
|
+
*/
|
|
34
|
+
function LanguageAccordion({ children, defaultExpanded = false, onLocaleChange, }) {
|
|
35
|
+
const { locale, currentLanguage, availableLocales, setLocale: setI18nLocale } = (0, i18n_1.useI18n)();
|
|
36
|
+
const [isExpanded, setIsExpanded] = (0, react_1.useState)(defaultExpanded);
|
|
37
|
+
const toggle = (0, react_1.useCallback)(() => {
|
|
38
|
+
setIsExpanded((prev) => !prev);
|
|
39
|
+
}, []);
|
|
40
|
+
const setLocale = (0, react_1.useCallback)((newLocale) => {
|
|
41
|
+
setI18nLocale(newLocale);
|
|
42
|
+
onLocaleChange?.(newLocale);
|
|
43
|
+
setIsExpanded(false);
|
|
44
|
+
}, [setI18nLocale, onLocaleChange]);
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
|
|
46
|
+
locale,
|
|
47
|
+
currentLanguage,
|
|
48
|
+
availableLocales,
|
|
49
|
+
setLocale,
|
|
50
|
+
isExpanded,
|
|
51
|
+
toggle,
|
|
52
|
+
}) }));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=LanguageAccordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageAccordion.js","sourceRoot":"","sources":["../../../src/header/components/LanguageAccordion.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAgDb,8CAiCC;;AA/ED,iCAA8D;AAC9D,qCAAqC;AAmBrC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,eAAe,GAAG,KAAK,EACvB,cAAc,GACS;IACvB,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAA,cAAO,GAAE,CAAC;IAC1F,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,eAAe,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9B,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,CAAC,SAAqB,EAAE,EAAE;QACxB,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,aAAa,EAAE,cAAc,CAAC,CAChC,CAAC;IAEF,OAAO,CACL,2DACG,QAAQ,CAAC;YACR,MAAM;YACN,eAAe;YACf,gBAAgB;YAChB,SAAS;YACT,UAAU;YACV,MAAM;SACP,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { UserAvatarRenderProps } from '../../types/header';
|
|
3
|
+
export interface UserAvatarProps {
|
|
4
|
+
/**
|
|
5
|
+
* Render function receiving avatar state
|
|
6
|
+
*/
|
|
7
|
+
children: (props: UserAvatarRenderProps) => ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Headless user avatar component
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* <UserAvatar>
|
|
14
|
+
* {({ initials, displayName, isAuthenticated }) => (
|
|
15
|
+
* isAuthenticated ? (
|
|
16
|
+
* <div className="avatar" title={displayName}>
|
|
17
|
+
* {initials}
|
|
18
|
+
* </div>
|
|
19
|
+
* ) : (
|
|
20
|
+
* <span>Guest</span>
|
|
21
|
+
* )
|
|
22
|
+
* )}
|
|
23
|
+
* </UserAvatar>
|
|
24
|
+
*/
|
|
25
|
+
export declare function UserAvatar({ children }: UserAvatarProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=UserAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAvatar.d.ts","sourceRoot":"","sources":["../../../src/header/components/UserAvatar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,SAAS,CAAC;CACvD;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAgBvD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.UserAvatar = UserAvatar;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const auth_1 = require("../../auth");
|
|
8
|
+
/**
|
|
9
|
+
* Get user initials from name
|
|
10
|
+
*/
|
|
11
|
+
function getInitials(firstName, lastName) {
|
|
12
|
+
const first = firstName?.charAt(0)?.toUpperCase() ?? '';
|
|
13
|
+
const last = lastName?.charAt(0)?.toUpperCase() ?? '';
|
|
14
|
+
return first + last || '?';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Headless user avatar component
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* <UserAvatar>
|
|
21
|
+
* {({ initials, displayName, isAuthenticated }) => (
|
|
22
|
+
* isAuthenticated ? (
|
|
23
|
+
* <div className="avatar" title={displayName}>
|
|
24
|
+
* {initials}
|
|
25
|
+
* </div>
|
|
26
|
+
* ) : (
|
|
27
|
+
* <span>Guest</span>
|
|
28
|
+
* )
|
|
29
|
+
* )}
|
|
30
|
+
* </UserAvatar>
|
|
31
|
+
*/
|
|
32
|
+
function UserAvatar({ children }) {
|
|
33
|
+
const { member, isAuthenticated, user } = (0, auth_1.useAkinAuth)();
|
|
34
|
+
const props = (0, react_1.useMemo)(() => {
|
|
35
|
+
const firstName = member?.firstName ?? undefined;
|
|
36
|
+
const lastName = member?.lastName ?? undefined;
|
|
37
|
+
return {
|
|
38
|
+
initials: getInitials(firstName, lastName),
|
|
39
|
+
displayName: `${firstName ?? ''} ${lastName ?? ''}`.trim() || 'User',
|
|
40
|
+
avatarUrl: user?.photoURL,
|
|
41
|
+
isAuthenticated,
|
|
42
|
+
};
|
|
43
|
+
}, [member, user, isAuthenticated]);
|
|
44
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children(props) });
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=UserAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAvatar.js","sourceRoot":"","sources":["../../../src/header/components/UserAvatar.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAsCb,gCAgBC;;AApDD,iCAAgD;AAChD,qCAAyC;AAUzC;;GAEG;AACH,SAAS,WAAW,CAAC,SAAkB,EAAE,QAAiB;IACxD,MAAM,KAAK,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACtD,OAAO,KAAK,GAAG,IAAI,IAAI,GAAG,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,UAAU,CAAC,EAAE,QAAQ,EAAmB;IACtD,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,IAAA,kBAAW,GAAE,CAAC;IAExD,MAAM,KAAK,GAAG,IAAA,eAAO,EAAwB,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,SAAS,CAAC;QAE/C,OAAO;YACL,QAAQ,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC1C,WAAW,EAAE,GAAG,SAAS,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM;YACpE,SAAS,EAAE,IAAI,EAAE,QAAQ;YACzB,eAAe;SAChB,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpC,OAAO,2DAAG,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { HeaderMenu } from './components/HeaderMenu';
|
|
2
|
+
export { UserAvatar } from './components/UserAvatar';
|
|
3
|
+
export { LanguageAccordion } from './components/LanguageAccordion';
|
|
4
|
+
export { CurrencyAccordion } from './components/CurrencyAccordion';
|
|
5
|
+
export type { HeaderUserInfo, MenuItem, HeaderMenuRenderProps, UserAvatarRenderProps, LanguageAccordionRenderProps, CurrencyAccordionRenderProps, } from '../types/header';
|
|
6
|
+
export type { HeaderMenuProps } from './components/HeaderMenu';
|
|
7
|
+
export type { UserAvatarProps } from './components/UserAvatar';
|
|
8
|
+
export type { LanguageAccordionProps } from './components/LanguageAccordion';
|
|
9
|
+
export type { CurrencyAccordionProps } from './components/CurrencyAccordion';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/header/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,YAAY,EACV,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CurrencyAccordion = exports.LanguageAccordion = exports.UserAvatar = exports.HeaderMenu = void 0;
|
|
4
|
+
// Components
|
|
5
|
+
var HeaderMenu_1 = require("./components/HeaderMenu");
|
|
6
|
+
Object.defineProperty(exports, "HeaderMenu", { enumerable: true, get: function () { return HeaderMenu_1.HeaderMenu; } });
|
|
7
|
+
var UserAvatar_1 = require("./components/UserAvatar");
|
|
8
|
+
Object.defineProperty(exports, "UserAvatar", { enumerable: true, get: function () { return UserAvatar_1.UserAvatar; } });
|
|
9
|
+
var LanguageAccordion_1 = require("./components/LanguageAccordion");
|
|
10
|
+
Object.defineProperty(exports, "LanguageAccordion", { enumerable: true, get: function () { return LanguageAccordion_1.LanguageAccordion; } });
|
|
11
|
+
var CurrencyAccordion_1 = require("./components/CurrencyAccordion");
|
|
12
|
+
Object.defineProperty(exports, "CurrencyAccordion", { enumerable: true, get: function () { return CurrencyAccordion_1.CurrencyAccordion; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/header/index.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACb,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA"}
|