Updated on 2026-08-14
This commit is contained in:
parent
fd3d95097f
commit
f6fad0e6d1
24 changed files with 870 additions and 25 deletions
|
|
@ -120,6 +120,7 @@
|
|||
<string name="common_add_token">Token hinzufügen</string>
|
||||
<string name="common_all">Alle</string>
|
||||
<string name="common_allow">Erlauben</string>
|
||||
<string name="common_amount">Betrag</string>
|
||||
<string name="common_analytics">Analysen</string>
|
||||
<string name="common_apply">Anwenden</string>
|
||||
<string name="common_approval">Genehmigung</string>
|
||||
|
|
@ -165,6 +166,7 @@
|
|||
<string name="common_disabled">Deaktiviert</string>
|
||||
<string name="common_disconnect">Trennen</string>
|
||||
<string name="common_done">Erledigt</string>
|
||||
<string name="common_edit">Bearbeiten</string>
|
||||
<string name="common_enable">Aktivieren</string>
|
||||
<string name="common_enabled">Aktiviert</string>
|
||||
<string name="common_error">Fehler</string>
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@
|
|||
<string name="common_add_token">Agregar token</string>
|
||||
<string name="common_all">Todos</string>
|
||||
<string name="common_allow">Autorizar</string>
|
||||
<string name="common_amount">Montante</string>
|
||||
<string name="common_analytics">Analítica</string>
|
||||
<string name="common_apply">Aplicar</string>
|
||||
<string name="common_approval">Aprobación</string>
|
||||
|
|
@ -153,6 +154,7 @@
|
|||
<string name="common_disabled">Desactivado</string>
|
||||
<string name="common_disconnect">Desconectar</string>
|
||||
<string name="common_done">Listo</string>
|
||||
<string name="common_edit">Editar</string>
|
||||
<string name="common_enable">Activar</string>
|
||||
<string name="common_enabled">Activado</string>
|
||||
<string name="common_error">Error</string>
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@
|
|||
<string name="common_add_token">Ajouter un jeton</string>
|
||||
<string name="common_all">Tous</string>
|
||||
<string name="common_allow">Permettre</string>
|
||||
<string name="common_amount">Montant</string>
|
||||
<string name="common_analytics">Analytique</string>
|
||||
<string name="common_apply">Appliquer</string>
|
||||
<string name="common_approval">Approbation</string>
|
||||
|
|
@ -140,6 +141,7 @@
|
|||
<string name="common_disabled">Désactivé</string>
|
||||
<string name="common_disconnect">Se déconnecter</string>
|
||||
<string name="common_done">Exécuté</string>
|
||||
<string name="common_edit">Modifier</string>
|
||||
<string name="common_enable">Activer</string>
|
||||
<string name="common_enabled">Activé</string>
|
||||
<string name="common_error">Erreur</string>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
<string name="alert_unsupported_card">Questa carta non è progettata per funzionare con Tangem</string>
|
||||
<string name="cardano_low_ada">L\'importo inviato e il cambio non può essere inferiore a 1 ADA</string>
|
||||
<string name="common_accept">Accetta</string>
|
||||
<string name="common_amount">Importo</string>
|
||||
<string name="common_balance">Saldo: %s</string>
|
||||
<string name="common_build_tx_error">Impossibile creare la transazione</string>
|
||||
<string name="common_camera_denied_alert_message">Non hai fornito l\'accesso alla tua videocamera, modifica le tue impostazioni sulla privacy</string>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,18 @@
|
|||
<string name="access_code_create_description">ウォレットのロックを解除するには、 %s桁のアクセスコードを設定します。</string>
|
||||
<string name="access_code_create_title">アクセスコードの作成</string>
|
||||
<string name="access_code_navtitle">アクセスコード</string>
|
||||
<string name="account_form_create_button">アカウントを追加</string>
|
||||
<string name="account_form_edit_button">保存</string>
|
||||
<string name="account_form_name">アカウント名</string>
|
||||
<string name="account_form_placeholder_edit_account">アカウント</string>
|
||||
<string name="account_form_placeholder_new_account">新しいアカウント</string>
|
||||
<string name="account_form_title_create">アカウントを追加</string>
|
||||
<string name="account_form_title_edit">アカウントを編集</string>
|
||||
<string name="account_unsaved_dialog_action_first">編集を続ける</string>
|
||||
<string name="account_unsaved_dialog_action_second">破棄</string>
|
||||
<string name="account_unsaved_dialog_message_create">新しいアカウントを破棄してもよろしいですか?</string>
|
||||
<string name="account_unsaved_dialog_message_edit">編集内容を破棄してもよろしいですか?</string>
|
||||
<string name="account_unsaved_dialog_title">保存されていない変更</string>
|
||||
<string name="action_buttons_buy_empty_search_message">トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して買付できるようにします。</string>
|
||||
<string name="action_buttons_sell_empty_search_message">トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して売却できるようにします。</string>
|
||||
<string name="action_buttons_sell_navigation_bar_title">売却</string>
|
||||
|
|
@ -127,6 +139,7 @@
|
|||
<string name="common_add_token">トークンを追加</string>
|
||||
<string name="common_all">すべて</string>
|
||||
<string name="common_allow">許可する</string>
|
||||
<string name="common_amount">金額</string>
|
||||
<string name="common_analytics">アナリティクス</string>
|
||||
<string name="common_apply">適用する</string>
|
||||
<string name="common_approval">承認</string>
|
||||
|
|
@ -170,6 +183,7 @@
|
|||
<string name="common_disabled">無効</string>
|
||||
<string name="common_disconnect">切断</string>
|
||||
<string name="common_done">完了</string>
|
||||
<string name="common_edit">編集</string>
|
||||
<string name="common_enable">有効にする</string>
|
||||
<string name="common_enabled">有効</string>
|
||||
<string name="common_error">エラー</string>
|
||||
|
|
@ -1110,6 +1124,7 @@
|
|||
<string name="swapping_fee_estimation_error_text">手数料見積りエラーです。サポートにフィードバックをお送りください。</string>
|
||||
<string name="swapping_from_title">スワップする</string>
|
||||
<string name="swapping_high_price_impact_description">選択したトークンをこの量を交換すると、価格に大きな影響が生じ、結果が減少します。</string>
|
||||
<string name="swapping_high_price_impact_title">価格への影響が甚大です</string>
|
||||
<string name="swapping_insufficient_funds">残高不足</string>
|
||||
<string name="swapping_permission_header">許可を与える</string>
|
||||
<string name="swapping_swap_action">スワップ</string>
|
||||
|
|
@ -1285,6 +1300,7 @@
|
|||
<string name="wallet_settings_access_code_description">このウォレットを保護するためのシークレットコードです。ログインと署名に使用されます。</string>
|
||||
<string name="wallet_settings_access_code_title">アクセスコードの設定 / 変更</string>
|
||||
<string name="wallet_settings_push_notifications_description">ウォレットの受信取引とTangemの更新について通知を受け取る。</string>
|
||||
<string name="wallet_settings_push_notifications_huawei_warning">現在、Huaweiデバイスではプッシュ通知が機能しない可能性があります。現在、解決策の検討に取り組んでおり、今後のアップデートで修正をリリースする予定です。ご理解のほどよろしくお願いいたします。</string>
|
||||
<string name="wallet_settings_push_notifications_title">取引通知</string>
|
||||
<string name="wallet_settings_title">ウォレット設定</string>
|
||||
<string name="wallet_title">Tangem</string>
|
||||
|
|
@ -1426,15 +1442,19 @@
|
|||
<string name="wc_disconnect_all_alert_title">すべてのdAppを接続解除する</string>
|
||||
<string name="wc_estimated_wallet_changes">ウォレットの変更の予測</string>
|
||||
<string name="wc_estimated_wallet_changes_not_simulated">取引をシミュレーションできませんでした。注意して続行してください。</string>
|
||||
<string name="wc_estimation_is_not_supported">%sでは見積もりはサポートされていません</string>
|
||||
<string name="wc_fee_suggested">%sによる提案</string>
|
||||
<string name="wc_malicious_transaction">悪意のある取引</string>
|
||||
<string name="wc_missing_required_network_description">このウォレットのポートフォリオに%sネットワークを追加します</string>
|
||||
<string name="wc_missing_required_network_title">ウォレットに必要なネットワークはありません</string>
|
||||
<string name="wc_new_connection">新しい接続</string>
|
||||
<string name="wc_no_sessions_desc">ウォレットを別のdAppに接続する</string>
|
||||
<string name="wc_no_sessions_title">セッションなし</string>
|
||||
<string name="wc_no_wallet_changes_detected">ウォレットの変更は検出されませんでした</string>
|
||||
<string name="wc_notification_security_risk_subtitle">このドメインは複数のセキュリティプロバイダーから安全でないとの警告を受けています。あなたの資産を守るため、直ちにアクセスを中止してください。</string>
|
||||
<string name="wc_notification_security_risk_title">既知のセキュリティリスク</string>
|
||||
<string name="wc_request_from">リクエスト元</string>
|
||||
<string name="wc_send_anyway">とにかく送金</string>
|
||||
<string name="wc_signature_type">署名タイプ</string>
|
||||
<string name="wc_transaction_info_to_title">宛先</string>
|
||||
<string name="wc_transaction_request">取引リクエスト</string>
|
||||
|
|
@ -1443,6 +1463,7 @@
|
|||
<string name="wc_uri_already_used_description">各ペアリング試行で、新しくユニークなURIが使用されていることを確認します</string>
|
||||
<string name="wc_uri_already_used_title">URIはすでに使用されています</string>
|
||||
<string name="wc_wallet_connect">ウォレットコネクト</string>
|
||||
<string name="wc_warning_transaction">不審な取引</string>
|
||||
<string name="welcome_interrupted_backup_alert_discard">破棄</string>
|
||||
<string name="welcome_interrupted_backup_alert_message">バックアップが中断されました。再開しますか?</string>
|
||||
<string name="welcome_interrupted_backup_alert_resume">はい、再開します</string>
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@
|
|||
<string name="common_add_token">Добавить токен</string>
|
||||
<string name="common_all">Все</string>
|
||||
<string name="common_allow">Разрешить</string>
|
||||
<string name="common_amount">Сумма</string>
|
||||
<string name="common_analytics">Аналитика</string>
|
||||
<string name="common_apply">Применить</string>
|
||||
<string name="common_approval">Одобрение</string>
|
||||
|
|
@ -140,6 +141,7 @@
|
|||
<string name="common_disabled">Отключено</string>
|
||||
<string name="common_disconnect">Отключить</string>
|
||||
<string name="common_done">Готово</string>
|
||||
<string name="common_edit">Изменить</string>
|
||||
<string name="common_enable">Включить</string>
|
||||
<string name="common_enabled">Включено</string>
|
||||
<string name="common_error">Ошибка</string>
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@
|
|||
<string name="common_add_token">Додати токен</string>
|
||||
<string name="common_all">Усе</string>
|
||||
<string name="common_allow">Дозволити</string>
|
||||
<string name="common_amount">Сума</string>
|
||||
<string name="common_analytics">Аналітика</string>
|
||||
<string name="common_apply">Застосовувати</string>
|
||||
<string name="common_approval">Затвердження</string>
|
||||
|
|
@ -139,6 +140,7 @@
|
|||
<string name="common_disabled">Вимкнуто</string>
|
||||
<string name="common_disconnect">Від\'єднати</string>
|
||||
<string name="common_done">Готово</string>
|
||||
<string name="common_edit">Редагувати</string>
|
||||
<string name="common_enable">Увімкнути</string>
|
||||
<string name="common_enabled">Увімкнено</string>
|
||||
<string name="common_error">Помилка</string>
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
<string name="card_settings_title">卡片設置</string>
|
||||
<string name="cardano_low_ada">發送金額和找零不能少於1個ADA</string>
|
||||
<string name="common_accept">接受</string>
|
||||
<string name="common_amount">數量</string>
|
||||
<string name="common_approve">允許</string>
|
||||
<string name="common_attention">注意</string>
|
||||
<string name="common_balance">餘額: %s</string>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,18 @@
|
|||
<string name="access_code_create_description">Set a %s-digit Access Code to unlock your wallet.</string>
|
||||
<string name="access_code_create_title">Create Access Code</string>
|
||||
<string name="access_code_navtitle">Access code</string>
|
||||
<string name="account_form_create_button">Add account</string>
|
||||
<string name="account_form_edit_button">Save</string>
|
||||
<string name="account_form_name">Account name</string>
|
||||
<string name="account_form_placeholder_edit_account">Account</string>
|
||||
<string name="account_form_placeholder_new_account">New account</string>
|
||||
<string name="account_form_title_create">Add account</string>
|
||||
<string name="account_form_title_edit">Edit account</string>
|
||||
<string name="account_unsaved_dialog_action_first">Keep Editing</string>
|
||||
<string name="account_unsaved_dialog_action_second">Discard</string>
|
||||
<string name="account_unsaved_dialog_message_create">Are you sure you want to discard new account?</string>
|
||||
<string name="account_unsaved_dialog_message_edit">Are you sure you want to discard edits?</string>
|
||||
<string name="account_unsaved_dialog_title">Unsaved Changes</string>
|
||||
<string name="action_buttons_buy_empty_search_message">Can’t find your token? Go to the Market section on the main page and add it to your portfolio for purchase</string>
|
||||
<string name="action_buttons_sell_empty_search_message">Can’t find your token? Go to the Market section on the main page and add it to your portfolio for selling.</string>
|
||||
<string name="action_buttons_sell_navigation_bar_title">Sell</string>
|
||||
|
|
@ -132,6 +143,7 @@
|
|||
<string name="common_add_token">Add token</string>
|
||||
<string name="common_all">All</string>
|
||||
<string name="common_allow">Allow</string>
|
||||
<string name="common_amount">Amount</string>
|
||||
<string name="common_analytics">Analytics</string>
|
||||
<string name="common_apply">Apply</string>
|
||||
<string name="common_approval">Approval</string>
|
||||
|
|
@ -177,6 +189,7 @@
|
|||
<string name="common_disabled">Disabled</string>
|
||||
<string name="common_disconnect">Disconnect</string>
|
||||
<string name="common_done">Done</string>
|
||||
<string name="common_edit">Edit</string>
|
||||
<string name="common_enable">Enable</string>
|
||||
<string name="common_enabled">Enabled</string>
|
||||
<string name="common_error">Error</string>
|
||||
|
|
@ -432,6 +445,8 @@
|
|||
<string name="hw_activation_need_finish">Finish Now</string>
|
||||
<string name="hw_activation_need_title">Finish Wallet Activation</string>
|
||||
<string name="hw_activation_need_warning_description">To complete setup, secure app access with Access Code.</string>
|
||||
<string name="hw_backup_alert_description">If you do, you\'ll need to start over.</string>
|
||||
<string name="hw_backup_alert_title">Are you sure you want to exit the activation process?</string>
|
||||
<string name="hw_backup_google_drive_description">Recover an existing wallet stored in your Google Drive backup</string>
|
||||
<string name="hw_backup_google_drive_title">Google Drive Backup</string>
|
||||
<string name="hw_backup_need_action">Go to backup</string>
|
||||
|
|
@ -1129,6 +1144,7 @@
|
|||
<string name="swapping_fee_estimation_error_text">Fee estimation error. Please send feedback to support.</string>
|
||||
<string name="swapping_from_title">You swap</string>
|
||||
<string name="swapping_high_price_impact_description">Swapping this amount of selected tokens will cause a significant price impact and reduce your outcome.</string>
|
||||
<string name="swapping_high_price_impact_title">High price impact</string>
|
||||
<string name="swapping_insufficient_funds">Insufficient funds</string>
|
||||
<string name="swapping_permission_header">Give Permission</string>
|
||||
<string name="swapping_swap_action">Swap</string>
|
||||
|
|
@ -1495,6 +1511,8 @@
|
|||
<string name="wc_disconnect_all_alert_title">Disconect All dApps</string>
|
||||
<string name="wc_estimated_wallet_changes">Estimated wallet changes</string>
|
||||
<string name="wc_estimated_wallet_changes_not_simulated">The transaction couldn\'t be simulated. Please proceed with caution.</string>
|
||||
<string name="wc_estimation_is_not_supported">Estimation is not supported for %s</string>
|
||||
<string name="wc_fee_suggested">Suggested by %s</string>
|
||||
<string name="wc_malicious_transaction">Malicious transaction</string>
|
||||
<string name="wc_missing_required_network_description">Add the %s network to your portfolio for this wallet</string>
|
||||
<string name="wc_missing_required_network_title">The wallet has no required networks</string>
|
||||
|
|
@ -1505,6 +1523,7 @@
|
|||
<string name="wc_notification_security_risk_subtitle">This domain is flagged as unsafe by multiple security providers. Leave immediately to protect your assets</string>
|
||||
<string name="wc_notification_security_risk_title">Known security risk</string>
|
||||
<string name="wc_request_from">Request from</string>
|
||||
<string name="wc_send_anyway">Send anyway</string>
|
||||
<string name="wc_signature_type">Signature Type</string>
|
||||
<string name="wc_transaction_info_to_title">To</string>
|
||||
<string name="wc_transaction_request">Transaction request</string>
|
||||
|
|
|
|||
|
|
@ -12,12 +12,7 @@ import androidx.compose.ui.Alignment.Companion.TopCenter
|
|||
import androidx.compose.ui.Alignment.Companion.TopStart
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.ParagraphIntrinsics
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.createFontFamilyResolver
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
|
|
@ -77,24 +72,10 @@ fun AmountTextField(
|
|||
) {
|
||||
val decimalFormat = rememberDecimalFormat()
|
||||
BoxWithConstraints(modifier = modifier) {
|
||||
var fontSize = textStyle.fontSize
|
||||
if (isAutoResize) {
|
||||
val calculateIntrinsics = @Composable {
|
||||
val transformedText = visualTransformation.filter(AnnotatedString(value)).text.text
|
||||
ParagraphIntrinsics(
|
||||
text = transformedText,
|
||||
style = textStyle.copy(fontSize = fontSize),
|
||||
density = LocalDensity.current,
|
||||
fontFamilyResolver = createFontFamilyResolver(LocalContext.current),
|
||||
)
|
||||
}
|
||||
var intrinsics = calculateIntrinsics()
|
||||
with(LocalDensity.current) {
|
||||
while (intrinsics.maxIntrinsicWidth > maxWidth.toPx()) {
|
||||
fontSize *= reduceFactor
|
||||
intrinsics = calculateIntrinsics()
|
||||
}
|
||||
}
|
||||
val fontSize = if (isAutoResize) {
|
||||
resizeFont(visualTransformation, value, textStyle, reduceFactor)
|
||||
} else {
|
||||
textStyle.fontSize
|
||||
}
|
||||
val textColor = if (value.isBlank()) TangemTheme.colors.text.disabled else color
|
||||
SimpleTextField(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,204 @@
|
|||
package com.tangem.core.ui.components.fields
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import androidx.annotation.FloatRange
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
import androidx.compose.foundation.layout.BoxWithConstraintsScope
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.ParagraphIntrinsics
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.createFontFamilyResolver
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextDirection
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.core.ui.res.TangemThemePreview
|
||||
|
||||
/**
|
||||
* Simple text field for auto size input.
|
||||
* Can display aligned placeholder.
|
||||
*
|
||||
* @param value initial text
|
||||
* @param onValueChange callback
|
||||
* @param isAutoResize is text font auto resize
|
||||
* @param reduceFactor font resize factor
|
||||
* @param textStyle text and placeholder styles
|
||||
* @param textFieldModifier modifier for [SimpleTextField]
|
||||
* @param boxModifier modifier for [BoxWithConstraints]
|
||||
* @see [SimpleTextField] for other text field params
|
||||
*/
|
||||
@SuppressLint("UnusedBoxWithConstraintsScope")
|
||||
@Composable
|
||||
fun AutoSizeTextField(
|
||||
value: String,
|
||||
onValueChange: (String) -> Unit,
|
||||
|
||||
// region AutoSize
|
||||
isAutoResize: Boolean = true,
|
||||
@FloatRange(from = 0.0, to = 1.0, fromInclusive = false, toInclusive = false)
|
||||
reduceFactor: Double = 0.9,
|
||||
|
||||
// region TextField
|
||||
textFieldModifier: Modifier = Modifier,
|
||||
boxModifier: Modifier = Modifier,
|
||||
placeholder: TextReference? = null,
|
||||
singleLine: Boolean = isAutoResize,
|
||||
centered: Boolean = false,
|
||||
visualTransformation: VisualTransformation = VisualTransformation.None,
|
||||
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
|
||||
keyboardActions: KeyboardActions = KeyboardActions.Default,
|
||||
color: Color = TangemTheme.colors.text.primary1,
|
||||
textStyle: TextStyle = TangemTheme.typography.body2.copy(color = color),
|
||||
placeholderColor: Color = TangemTheme.colors.text.disabled,
|
||||
readOnly: Boolean = false,
|
||||
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
||||
isValuePasted: Boolean = false,
|
||||
onValuePastedTriggerDismiss: () -> Unit = {},
|
||||
decorationBox: (@Composable (innerTextField: @Composable () -> Unit) -> Unit)? = null,
|
||||
) {
|
||||
BoxWithConstraints(modifier = boxModifier) {
|
||||
val fontSize = if (isAutoResize) {
|
||||
resizeFont(visualTransformation, value, textStyle, reduceFactor)
|
||||
} else {
|
||||
textStyle.fontSize
|
||||
}
|
||||
val textColor = if (value.isBlank()) TangemTheme.colors.text.disabled else color
|
||||
SimpleTextField(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
textStyle = textStyle.copy(
|
||||
fontSize = fontSize,
|
||||
textDirection = TextDirection.ContentOrLtr,
|
||||
),
|
||||
isValuePasted = isValuePasted,
|
||||
onValuePastedTriggerDismiss = onValuePastedTriggerDismiss,
|
||||
color = textColor,
|
||||
keyboardOptions = keyboardOptions,
|
||||
keyboardActions = keyboardActions,
|
||||
placeholder = placeholder,
|
||||
placeholderColor = placeholderColor,
|
||||
singleLine = singleLine,
|
||||
interactionSource = interactionSource,
|
||||
readOnly = readOnly,
|
||||
centered = centered,
|
||||
visualTransformation = visualTransformation,
|
||||
decorationBox = decorationBox,
|
||||
modifier = textFieldModifier,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun BoxWithConstraintsScope.resizeFont(
|
||||
visualTransformation: VisualTransformation,
|
||||
value: String,
|
||||
textStyle: TextStyle,
|
||||
reduceFactor: Double,
|
||||
): TextUnit {
|
||||
var result = textStyle.fontSize
|
||||
val calculateIntrinsics = @Composable {
|
||||
val transformedText = visualTransformation.filter(AnnotatedString(value)).text.text
|
||||
ParagraphIntrinsics(
|
||||
text = transformedText,
|
||||
style = textStyle.copy(fontSize = result),
|
||||
density = LocalDensity.current,
|
||||
fontFamilyResolver = createFontFamilyResolver(LocalContext.current),
|
||||
)
|
||||
}
|
||||
var intrinsics = calculateIntrinsics()
|
||||
with(LocalDensity.current) {
|
||||
while (intrinsics.maxIntrinsicWidth > maxWidth.toPx()) {
|
||||
result *= reduceFactor
|
||||
intrinsics = calculateIntrinsics()
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// region preview
|
||||
@Preview(widthDp = 360, showBackground = true)
|
||||
@Composable
|
||||
private fun AmountTextFieldPreview(
|
||||
@PreviewParameter(AutoSizeTextFieldPreviewProvider::class) data: AutoSizeTextFieldPreviewData,
|
||||
) {
|
||||
var text by remember { mutableStateOf(data.value) }
|
||||
TangemThemePreview {
|
||||
AutoSizeTextField(
|
||||
textFieldModifier = Modifier.fillMaxWidth(),
|
||||
value = text,
|
||||
onValueChange = { text = it },
|
||||
centered = data.centered,
|
||||
isAutoResize = data.isAutoResize,
|
||||
placeholder = data.placeholder,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private class AutoSizeTextFieldPreviewProvider : PreviewParameterProvider<AutoSizeTextFieldPreviewData> {
|
||||
override val values = sequenceOf(
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "AutoSizeTextField",
|
||||
placeholder = stringReference("placeholder"),
|
||||
isAutoResize = true,
|
||||
centered = false,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "AutoSizeTextFieldAutoSizeTextFieldAutoSizeTextFieldAutoSizeTextField",
|
||||
placeholder = stringReference("placeholder"),
|
||||
isAutoResize = true,
|
||||
centered = false,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "AutoSizeTextFieldAutoSizeTextFieldAutoSizeTextFieldAutoSizeTextField",
|
||||
placeholder = stringReference("Placeholder"),
|
||||
isAutoResize = true,
|
||||
centered = false,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "",
|
||||
placeholder = stringReference("Placeholder"),
|
||||
isAutoResize = true,
|
||||
centered = false,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "AutoSizeTextField",
|
||||
placeholder = stringReference("Placeholder"),
|
||||
isAutoResize = false,
|
||||
centered = true,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "AutoSizeTextFieldAutoSizeTextFieldAutoSizeTextFieldAutoSizeTextField",
|
||||
placeholder = stringReference("Placeholder"),
|
||||
isAutoResize = false,
|
||||
centered = true,
|
||||
),
|
||||
AutoSizeTextFieldPreviewData(
|
||||
value = "",
|
||||
placeholder = stringReference("Placeholder"),
|
||||
isAutoResize = false,
|
||||
centered = true,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private data class AutoSizeTextFieldPreviewData(
|
||||
val value: String,
|
||||
val placeholder: TextReference,
|
||||
val isAutoResize: Boolean,
|
||||
val centered: Boolean,
|
||||
)
|
||||
// endregion
|
||||
|
|
@ -8,6 +8,7 @@ import androidx.compose.foundation.text.KeyboardActions
|
|||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
|
|
@ -17,6 +18,7 @@ import androidx.compose.ui.text.TextRange
|
|||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.resolveReference
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
|
|
@ -39,6 +41,7 @@ fun SimpleTextField(
|
|||
textStyle: TextStyle = TangemTheme.typography.body2.copy(color = color),
|
||||
placeholderColor: Color = TangemTheme.colors.text.disabled,
|
||||
readOnly: Boolean = false,
|
||||
centered: Boolean = false,
|
||||
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
||||
isValuePasted: Boolean = false,
|
||||
onValuePastedTriggerDismiss: () -> Unit = {},
|
||||
|
|
@ -80,6 +83,8 @@ fun SimpleTextField(
|
|||
onValuePastedTriggerDismiss()
|
||||
}
|
||||
}
|
||||
var textStyle = textStyle.copy(color = color)
|
||||
if (centered) textStyle = textStyle.copy(textAlign = TextAlign.Center)
|
||||
|
||||
BasicTextField(
|
||||
value = textFieldValue,
|
||||
|
|
@ -91,7 +96,7 @@ fun SimpleTextField(
|
|||
|
||||
if (stringChangedSinceLastInvocation) onValueChange(newTextFieldValueState.text)
|
||||
},
|
||||
textStyle = textStyle.copy(color = color),
|
||||
textStyle = textStyle,
|
||||
cursorBrush = SolidColor(TangemTheme.colors.text.primary1),
|
||||
singleLine = singleLine,
|
||||
readOnly = readOnly,
|
||||
|
|
@ -105,6 +110,7 @@ fun SimpleTextField(
|
|||
value = value,
|
||||
textStyle = textStyle,
|
||||
textValue = textValue,
|
||||
centered = centered,
|
||||
color = placeholderColor,
|
||||
)
|
||||
},
|
||||
|
|
@ -118,10 +124,11 @@ private fun SimpleTextPlaceholder(
|
|||
placeholder: TextReference?,
|
||||
value: String,
|
||||
textStyle: TextStyle,
|
||||
centered: Boolean,
|
||||
textValue: @Composable () -> Unit,
|
||||
color: Color = TangemTheme.colors.text.disabled,
|
||||
) {
|
||||
Box {
|
||||
Box(contentAlignment = if (centered) Alignment.Center else Alignment.TopStart) {
|
||||
if (value.isBlank() && placeholder != null) {
|
||||
AnimatedContent(
|
||||
targetState = placeholder,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue