Pantrix UI

Date Text Field

Bir gün için metin alanı: gün rakamlarla yazılır ya da kutunun sonundaki bir düğmenin açtığı takvimden seçilir.

import com.pantrixui.components.date.datetextfield.PantrixDateTextField

Örnekler

Doğum günü, yazarak

Bir doğum günü, yazarak: bugünden sonrası alınmaz. Takvim de açılır, ama uzak bir yıla yazmak daha çabuktur. Gün tamamlanınca altta yazılır; yarım bırakıp alandan çıkınca alan düzeni söyleyen hatasını gösterir.

var birthday by remember { mutableStateOf<PantrixDate?>(null) }
val strings = PantrixTheme.strings
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixDateTextField(
        value = birthday,
        onValueChange = { birthday = it },
        label = "Doğum günü",
        maxDate = rememberToday(),
        showClearButton = true,
        tagKey = "birthday"
    )
    PantrixText(
        text = birthday?.let { "Doğum günü: ${strings.date(it.day, it.month, it.year)}" } ?: "Henüz bir gün yok",
        style = PantrixTheme.typography.body
    )
}

Hafta içi bir teslim günü

Önümüzdeki bir ay içinde, hafta içi bir teslim günü. Takvimde hafta sonları soluktur. Yazılan bir cumartesi alınmaz ve alan "Bu gün seçilemez" der; bir ay sonrası sınırı söyler.

var delivery by remember { mutableStateOf<PantrixDate?>(null) }
val today = rememberToday()
PantrixDateTextField(
    value = delivery,
    onValueChange = { delivery = it },
    label = "Teslim günü",
    supportingText = "Yalnız hafta içi teslim edilir",
    minDate = today.plusDays(1),
    maxDate = today.plusMonths(1),
    isDateEnabled = { it.dayOfWeek <= FRIDAY },
    tagKey = "delivery"
)

private const val FRIDAY = 5

Takvim bir sheet'te ya da dialog'da

Takvim bir sheet'te açılır: telefonda parmağa yakın, ekranın genişliğinde. presentation = Dialog onu pencerenin ortasında bir dialog'da açar. Bir gün seçilince sheet kapanır ve gün alana yazılır.

var appointment by remember { mutableStateOf<PantrixDate?>(null) }
var presentation by remember { mutableStateOf(DatePickerPresentation.Sheet) }
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixSegmentButton(
        options = listOf(
            SegmentOption(DatePickerPresentation.Popover, "Popover", tagKey = "popover"),
            SegmentOption(DatePickerPresentation.Sheet, "Sheet", tagKey = "sheet"),
            SegmentOption(DatePickerPresentation.Dialog, "Dialog", tagKey = "dialog")
        ),
        selected = presentation,
        onSelect = { presentation = it },
        fullWidth = false,
        tagKey = "presentation"
    )
    PantrixDateTextField(
        value = appointment,
        onValueChange = { appointment = it },
        label = "Randevu günü",
        minDate = rememberToday(),
        presentation = presentation,
        tagKey = "appointment"
    )
}

Uygulamanın hatası ve devre dışı

Uygulamanın kendi hatası alanınkinden önce gelir: dolu bir gün error ve supportingText ile söylenir. Altındaki alan devre dışıdır: odak almaz, takvimi açılmaz.

var meeting by remember { mutableStateOf<PantrixDate?>(PantrixDate(2026, 11, 2)) }
val taken = meeting == PantrixDate(2026, 11, 2)
PantrixDateTextField(
    value = meeting,
    onValueChange = { meeting = it },
    label = "Toplantı günü",
    supportingText = if (taken) "Bu gün dolu, başka bir gün seçin" else "Ofisin açık olduğu bir gün",
    error = taken,
    tagKey = "meeting"
)
PantrixDateTextField(
    value = PantrixDate(2026, 10, 1),
    onValueChange = {},
    enabled = false,
    label = "Sözleşme başlangıcı",
    tagKey = "contract"
)

Salt okunur: yalnız takvimden

Salt okunur bir alan yazılmaz: gün yalnız takvimden seçilir. Kutuya basmak, Enter ya da Boşluk takvimi açar. Bir gün seçimi zorunlu olan, yazılanın yanlış anlaşılmaması gereken yerler için.

var checkIn by remember { mutableStateOf<PantrixDate?>(null) }
PantrixDateTextField(
    value = checkIn,
    onValueChange = { checkIn = it },
    readOnly = true,
    label = "Giriş günü",
    placeholder = "Takvimden seçin",
    minDate = rememberToday(),
    tagKey = "check_in"
)

Forma bağlı

Bir formun alanına bağlı: gün boşken "Kaydet" hatayı gösterir ve odağı alana gönderir. Hata alandan çıkınca da görünür; takvime geçmek alandan çıkmak sayılmaz. Gün olmayan rakamlar değeri null bırakır, kural onu yakalar.

val form = rememberFormState()
val scope = rememberCoroutineScope()
val report = LocalExampleEvents.current
val start = form.field<PantrixDate?>("start", initial = null, Rules.required("İşe başlama gününü yazın"))
PantrixDateTextField(
    field = start,
    modifier = Modifier.fillMaxWidth(),
    form = form,
    label = "İşe başlama günü",
    minDate = rememberToday()
)
PantrixButton(
    text = "Kaydet",
    onClick = { scope.launch { form.submit { report("Kaydedildi") } } },
    form = form,
    tagKey = "save_start"
)

Bir durumla, ISO 8601 biçiminde

Bir durumla: state.date alanın günü, state.text yazılan rakamlar. İkisi birlikte boş alanı yarım yazılmış alandan ayırır. ISO 8601 biçimi her dilde aynı okunur. Düğme durumun gününü değiştirir; alan onu kendisi yazar.

val state = rememberDateTextFieldState()
val today = rememberToday()
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixDateTextField(
        state = state,
        label = "Rapor günü",
        format = DateFieldFormat.Iso,
        tagKey = "report_day"
    )
    PantrixText(
        text = when {
            state.date != null -> "Gün: ${state.date}"
            state.text.isEmpty() -> "Alan boş"
            else -> "Yarım: ${state.text}"
        },
        style = PantrixTheme.typography.body
    )
    PantrixButton(
        text = "Bugünü yaz",
        onClick = { state.date = today },
        variant = ButtonVariant.Outline,
        tagKey = "write_today"
    )
}

Kendi biçimin

Alanın biçimi temanın dilinden gelir; format başkasını söyler. Dillerin çoğunun biçimi DateFieldFormat'ta hazırdır (DayMonthYearDots, MonthDayYearSlashes, Iso, …); kendi biçimin parçaların sırası (DateFieldOrder) ve bir ayraçtır: ilki Japoncadaki gibi yıl başta, eğik çizgiyle. Biçimi değiştir: alanın günü aynı kalır, yalnızca yazılışı değişir.

var shipping by remember { mutableStateOf<PantrixDate?>(PantrixDate(2026, 10, 18)) }
var format by remember { mutableStateOf(DateFieldFormat(DateFieldOrder.YearMonthDay, '/')) }
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixSegmentButton(
        options = listOf(
            SegmentOption(DateFieldFormat(DateFieldOrder.YearMonthDay, '/'), "YYYY/AA/GG", tagKey = "year_first"),
            SegmentOption(DateFieldFormat.MonthDayYearSlashes, "AA/GG/YYYY", tagKey = "month_first"),
            SegmentOption(DateFieldFormat(DateFieldOrder.DayMonthYear, '-'), "GG-AA-YYYY", tagKey = "day_first")
        ),
        selected = format,
        onSelect = { format = it },
        fullWidth = false,
        tagKey = "format"
    )
    PantrixDateTextField(
        value = shipping,
        onValueChange = { shipping = it },
        label = "Gönderim günü",
        format = format,
        tagKey = "shipping"
    )
}

Dar pencerede sheet

Varsayılan presentation = DatePickerPresentation.Adaptive: dar bir pencerede takvim alttan bir sheet'te açılır, parmağa yakın ve pencerenin genişliğinde; daha geniş pencerede kutunun altında bir popover'da. Karttaki pencere seçicisinden "Dar"ı seç ve takvimi aç. Takvim açılırken seçilir: açıkken pencere değişse de değişmez.

var day by remember { mutableStateOf<PantrixDate?>(null) }
// Kartın penceresi örnek kadar uzundur: dar bir pencerede açılan sheet'e yer kalsın diye örnek uzun tutulur.
Column(Modifier.fillMaxWidth().height(460.dp)) {
    PantrixDateTextField(
        value = day,
        onValueChange = { day = it },
        modifier = Modifier.fillMaxWidth(),
        label = "Toplantı günü",
        minDate = rememberToday(),
        presentation = DatePickerPresentation.Adaptive,
        tagKey = "adaptive_day"
    )
}

API

value

Bir gün için metin alanı: gün rakamlarla yazılır ya da kutunun sonundaki bir düğmenin açtığı takvimden seçilir.

ParametreTürVarsayılanNe olduğu
valuePantrixDate?alanın gösterdiği gün, ya da null.
onValueChange(PantrixDate?) -> Unitkullanıcı her değiştirdiğinde alanın günü söylenir: bir gün, ya da yoksa null.
modifierModifierModifierbütün alanın modifier'ı: etiketi, kutusu ve altındakiler.
enabledBooleantruealanın kullanılıp kullanılamayacağı. Kullanılamayan alan odak almaz ve takvim açmaz.
readOnlyBooleanfalsegünün yalnız takvimden seçilip yazılamayacağı.
labelString?nullalanın ne için olduğu, kutunun üstünde yazılı: alanın ve takviminin ekran okuyucudaki adı.
placeholderString?nullkutu boşken, alanın kendisinin gösterdiği düzenin yerinde gösterilir.
supportingTextString?nullkutunun altındaki yardım. error ile neyin düzeltileceğini söyleyen mesajdır; onsuz, alanın kendi hatası varken onun yerini alır.
errorBooleanfalseçağıranın günü yanlış bulup bulmadığı, dolu bir gün gibi: alan hatalı çizilir ve mesaj supportingText'tir.
leadingIcon(@Composable () -> Unit)?nullmetnin önünde duran. Bir yuva içine konanı boyutlandırmaz.
showClearButtonBooleanfalsealan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir.
minDatePantrixDate?nullalanın aldığı ilk gün, ya da ilki yoksa null. maxDate'ten sonra değil.
maxDatePantrixDate?nullalanın aldığı son gün, ya da sonu yoksa null.
isDateEnabled((PantrixDate) -> Boolean)?nullalanın ikisi arasındaki bir günü alıp almadığı, ya da her gün için null: hafta içi bir gün, henüz dolmamış bir gün.
firstDayOfWeekInt?nulltakvimin haftalarının başladığı gün, ISO 8601'in numaraladığı gibi Pazartesi 1'den Pazar 7'ye, ya da dilinki için null.
todayPantrixDaterememberToday()takvimin bugün diye işaretlediği gün: varsayılan, ekranın saatinin gösterdiği gün (rememberToday), gece yarısı döner.
formatDateFieldFormatDateFieldFormat.of(PantrixTheme.locale)parçaların yazıldığı sıra ve aralarındaki ayraç: varsayılan temanın dilininki ve bölgesininki. of: Bu tonun çizildiği temanın rolü.
presentationDatePickerPresentationDatePickerPresentation.Adaptivetakvimin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog.
styleTextFieldStyle?nullbu çağrının alanın kendi stili: çevreleyen her birinin üstünde ve yoğunluğun altında.
colorsTextFieldColors?nullbu çağrının alanın kendi renkleri, temanın rollerinin yerine.
pickerStyleDatePickerStyle?nullbu çağrının takvimin kendi stili.
pickerColorsDatePickerColors?nullbu çağrının takvimin kendi renkleri.
contentDescriptionString?nulllabel'ı olmayan alan için ekran okuyucunun söylediği.
tagKeyString?nullalanın otomasyon anahtarı: alan DateTextField_<tagKey>, düğmesi DateTextFieldCalendar_<tagKey>, temizleme düğmesi DateTextFieldClear_<tagKey> ve takvimi DatePicker_<tagKey>'tir. Alan takvimin açıldığını ve içinde bir gün seçildiğini bildirir, günü asla.
interactionSourceMutableInteractionSource?nullalanın etkileşimleri, dışarı taşınmış: odağı, üstündeki işaretçi ve basışları.

state

Çağıranın tuttuğu bir state üstünde bir tarih alanı, başka her yönden bir değerin PantrixDateTextField'ı gibi: durumun date'i alanın günüdür, ona yazmak günü alana koyar, text'i yarım yazılmış alanı boş alandan ayırır.

ParametreTürVarsayılanNe olduğu
stateDateTextFieldStateyazılan rakamlar ve yaptıkları gün. rememberDateTextFieldState() ile kurulur.
modifierModifierModifierbütün alanın modifier'ı: etiketi, kutusu ve altındakiler.
enabledBooleantruealanın kullanılıp kullanılamayacağı. Kullanılamayan alan odak almaz ve takvim açmaz.
readOnlyBooleanfalsegünün yalnız takvimden seçilip yazılamayacağı.
labelString?nullalanın ne için olduğu, kutunun üstünde yazılı: alanın ve takviminin ekran okuyucudaki adı.
placeholderString?nullkutu boşken, alanın kendisinin gösterdiği düzenin yerinde gösterilir.
supportingTextString?nullkutunun altındaki yardım. error ile mesajdır; onsuz, alanın kendi hatası varken onun yerini alır.
errorBooleanfalseçağıranın günü yanlış bulup bulmadığı: alan hatalı çizilir ve mesaj supportingText'tir.
leadingIcon(@Composable () -> Unit)?nullmetnin önünde duran.
showClearButtonBooleanfalsealan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir.
minDatePantrixDate?nullalanın aldığı ilk gün, ya da ilki yoksa null. maxDate'ten sonra değil.
maxDatePantrixDate?nullalanın aldığı son gün, ya da sonu yoksa null.
isDateEnabled((PantrixDate) -> Boolean)?nullalanın ikisi arasındaki bir günü alıp almadığı, ya da her gün için null.
firstDayOfWeekInt?nulltakvimin haftalarının başladığı gün, Pazartesi 1'den Pazar 7'ye, ya da dilinki için null.
todayPantrixDaterememberToday()takvimin bugün diye işaretlediği gün: varsayılan, ekranın saatinin gösterdiği gün (rememberToday).
formatDateFieldFormatDateFieldFormat.of(PantrixTheme.locale)parçaların yazıldığı sıra ve aralarındaki ayraç: varsayılan temanın yerelininki. of: Bu tonun çizildiği temanın rolü.
presentationDatePickerPresentationDatePickerPresentation.Adaptivetakvimin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog.
styleTextFieldStyle?nullbu çağrının alanın kendi stili.
colorsTextFieldColors?nullbu çağrının alanın kendi renkleri.
pickerStyleDatePickerStyle?nullbu çağrının takvimin kendi stili.
pickerColorsDatePickerColors?nullbu çağrının takvimin kendi renkleri.
contentDescriptionString?nulllabel'ı olmayan alan için ekran okuyucunun söylediği.
tagKeyString?nullalanın otomasyon anahtarı, bir değerin PantrixDateTextField'ının aldığı gibi.
interactionSourceMutableInteractionSource?nullalanın etkileşimleri, dışarı taşınmış.

field

Bir formun alanına bağlı bir tarih alanı: günü, hatası ve adı field'dan gelir.

ParametreTürVarsayılanNe olduğu
fieldFormField<PantrixDate?>tarih alanının gösterdiği ve değiştirdiği, formun alanı.
modifierModifierModifierbütün alanın modifier'ı.
formFormState?nullverilirse klavyenin eylem tuşu formu ona kayıtlı düğme üzerinden gönderir.
enabledBooleantruealanın kullanılıp kullanılamayacağı.
readOnlyBooleanfalsegünün yalnız takvimden seçilip seçilemeyeceği.
labelString?nullalanın ne için olduğu, kutunun üstünde yazılı.
placeholderString?nullkutu boşken, düzenin yerinde gösterilir.
supportingTextString?nullkutunun altındaki yardım, alanın orada gösterecek bir hatası yokken.
leadingIcon(@Composable () -> Unit)?nullmetnin önünde duran.
showClearButtonBooleanfalsealan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir.
minDatePantrixDate?nullalanın aldığı ilk gün, ya da ilki yoksa null. maxDate'ten sonra değil.
maxDatePantrixDate?nullalanın aldığı son gün, ya da sonu yoksa null.
isDateEnabled((PantrixDate) -> Boolean)?nullalanın ikisi arasındaki bir günü alıp almadığı, ya da her gün için null.
firstDayOfWeekInt?nulltakvimin haftalarının başladığı gün, Pazartesi 1'den Pazar 7'ye, ya da dilinki için null.
todayPantrixDaterememberToday()takvimin bugün diye işaretlediği gün: varsayılan, ekranın saatinin gösterdiği gün (rememberToday).
formatDateFieldFormatDateFieldFormat.of(PantrixTheme.locale)parçaların yazıldığı sıra ve aralarındaki ayraç: varsayılan temanın yerelininki. of: Bu tonun çizildiği temanın rolü.
presentationDatePickerPresentationDatePickerPresentation.Adaptivetakvimin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog.
styleTextFieldStyle?nullbu çağrının alanın kendi stili.
colorsTextFieldColors?nullbu çağrının alanın kendi renkleri.
pickerStyleDatePickerStyle?nullbu çağrının takvimin kendi stili.
pickerColorsDatePickerColors?nullbu çağrının takvimin kendi renkleri.
contentDescriptionString?nulllabel'ı olmayan alan için ekran okuyucunun söylediği.
interactionSourceMutableInteractionSource?nullalanın etkileşimleri, dışarı taşınmış.

TextFieldStyle

PantrixTextField'ın kutusu: şekli, en az yüksekliği ve genişliği, metninin çevresindeki boşluk, ikonları ve kenarlığı.

ParametreTürVarsayılanNe olduğu
shapeShapeSpecShapeSpec.UnspecifiedKutunun şekli. Tam yuvarlak bir şekil, ShapeRole.Full, yalnızca alan tek satır tutarken bir haptır: birkaç satırlı bir alan onun yerine ShapeRole.Large alır, çünkü bir kapsülün eğrisi metninin ilk satırına girer.
heightDpDp.UnspecifiedKutunun en az yüksekliği.
minWidthDpDp.UnspecifiedKutunun en az genişliği: boş bir alanın, kullanıcı içine yazdıkça genişlemesini önler.
horizontalPaddingDpDp.Unspecifiedİkon olmayan yerde, kutunun kenarı ile metni arasındaki boşluk.
verticalPaddingDpDp.UnspecifiedMetnin ilk satırının üstündeki ve son satırının altındaki boşluk.
iconPaddingDpDp.UnspecifiedYuvasındaki bir ikonun çevresindeki boşluk.
iconSizeDpDp.UnspecifiedYuvadaki bir ikonun alması gereken boyut. Yuva, içine konanı boyutlandırmaz.
borderWidthDpDp.UnspecifiedKutunun kenarlığının kalınlığı.
focusedBorderWidthDpDp.UnspecifiedAlan odaktayken kenarlığın kalınlığı: odağı gösteren kenarlıktır.
textRoleTypeRole?nullMetnin yazıldığı, yer tutucunun da yazıldığı yazı ölçeği rolü: Android'de ve iOS'ta body, 16sp, Material 3'ün ve iOS'un bir alana yazdığı gibi; masaüstünde ve web'de label, 14sp, işaretçiyle kullanılan bir sayfadaki gibi. Bir select'in kutusu ve bu stille kurulan alanlar da onu alır.

TextFieldColors

Temanın renklerini almayan bir alan için PantrixTextField'ın boyandığı renkler: verilen renk kullanılır, verilmeyen temadaki rolünde kalır. Bir ürün yalnızca değiştirdiği renkleri verir, başkasını vermez:

ParametreTürVarsayılanNe olduğu
containerColorColor.UnspecifiedKutunun dolgusu. Temanın surface rengi.
borderColorColor.UnspecifiedDinlenirken kutunun kenarlığı. Temanın border rengi.
hoveredBorderColorColor.UnspecifiedFare üstündeyken kenarlık. Temanın borderHover rengi: border'dan bir basamak güçlüsü.
focusedBorderColorColor.UnspecifiedAlan odaktayken kenarlık. Temanın primary rengi.
errorColorColor.UnspecifiedMetnin yanlış olduğunu söyleyenler: kenarlık, etiket, kutunun altındaki mesaj, imleç ve sınırını aştığında sayaç. Temanın danger rengi.
textColorColor.UnspecifiedYazılan metin. Temanın textPrimary rengi.
labelColorColor.UnspecifiedKutunun üstündeki etiket. Verilmezse, alanın durduğu yerde herhangi bir metin nasıl çiziliyorsa öyle çizilir, çünkü etiket kutunun dışında, alan neyin üstüne konmuşsa onun üstündedir: temanın kendi zemininde textPrimary ile, bir dolgunun üstünde o dolgunun içerik rengiyle.
placeholderColorColor.UnspecifiedYer tutucu. Temanın textSecondary rengi.
supportingTextColorColor.UnspecifiedKutunun altındaki yardım metni ve sayaç. Temanın textSecondary rengi.
iconColorColor.UnspecifiedYuvadaki bir ikonun, kendi rengini vermedikçe çizildiği renk ve temizleme düğmesinin çarpısı. Temanın textSecondary rengi.
cursorColorColor.Unspecifiedİmleç ve onunla birlikte bir seçimin tutamaçları ile zemini. Temanın primary rengi.
scrollBarColorColor.UnspecifiedBirkaç satırlı bir kutunun metninin ne kadar kaydığını gösteren çubuk. Temanın borderStrong'u: metnin yanında bir işarettir ve kutunun yumuşak kenarı orada görünmezdi.