# Hint

> क्षणिक, नॉन-मोडल सूचना — Toast और ToolTip की जगह, जो अपने आप दिखकर अपने आप हट जाती है।

Source: https://crossfly.dev/hi/docs/ui/widgets/hint — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Hint

`Hint` CrossFly की क्षणिक **गैर-मोडल** सूचना है: यह आमतौर पर स्क्रीन के निचले हिस्से के पास दिखाई देती है, एक छोटा संदेश दिखाती है और कुछ समय बाद स्वयं गायब हो जाती है (fade के साथ)। यह बाकी UI के साथ इंटरैक्शन को अवरुद्ध नहीं करती। यह पुराने `Toast` का आधुनिकीकृत विकल्प है — **वही API** — और पुराने `ToolTip` के मामले को भी कवर करती है (दोनों को फ्रेमवर्क से हटा दिया गया)।

`Hint` **`Window` को विस्तारित नहीं करती**: यह एक उपयोगिता क्लास है जिसमें **स्थैतिक** API है जो आंतरिक रूप से एक `ToastWindow` बनाती है।

> 🟢 · **पैकेज:** `dev.crossfly.ui` · **विस्तारित करता है:** — (स्थैतिक उपयोगिता) · **कॉन्फ़िग:** स्थैतिक फ़ील्ड

## कब उपयोग करें
- निष्क्रिय और संक्षिप्त फ़ीडबैक: "Salvo!", "Falha ao conectar", "Copiado"।
- क्षणिक स्थिति जिसके लिए उपयोगकर्ता की कार्रवाई की आवश्यकता नहीं।

## कब उपयोग न करें
- कुछ ऐसा जिसके लिए निर्णय/पुष्टि की आवश्यकता हो → [`Alert`](/docs/ui/widgets/alert) या [`ActionSheet`](/docs/ui/widgets/actionsheet) का उपयोग करें।

## दिखावट
गहरे रंग का गोल कैप्सूल (डिफ़ॉल्ट `0xFF303030`, सफेद पाठ) क्षैतिज रूप से केंद्रित, स्क्रीन की ऊंचाई के ~85% पर स्थित। सौम्य fade के साथ उभरता और गायब होता है।

## पूर्ण उदाहरण (कॉपी, पेस्ट और रन करें)
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label titulo = new Label("Toque para ver um Hint");
      add(LAY_AUTO, titulo);

      // Hint स्थिर है: एक Button onAction में क्षणिक सूचना ट्रिगर करता है
      Button salvar = new Button("Salvar")
         .onAction(c -> Hint.show("Salvo com sucesso!", 2000));
      add(LAY_AUTO, salvar);

      Button falhar = new Button("Simular erro")
         .onAction(c -> Hint.show("Falha ao conectar", 2500));
      add(LAY_AUTO, falhar);
   }
}
```

> नीचे दिए गए अंश **केवल मुख्य भाग** दिखाते हैं (जो `onShow()` के अंदर जाता है)। रन करने के लिए, इन्हें ऊपर दिए `MainWindow` ढांचे में रखें।

## बुनियादी उपयोग
```java
// संदेश 2 सेकंड तक दिखता है, फिर अपने आप गायब हो जाता है
Hint.show("Salvo com sucesso!", 2000);
```

## प्रदर्शन API (स्थैतिक)
| ओवरलोड | विवरण |
|---|---|
| `Hint.show(String message, int delay)` | डिफ़ॉल्ट स्थिति/padding। |
| `Hint.show(String message, int delay, Window parentWindow)` | पैरेंट विंडो परिभाषित करता है। |
| `Hint.show(String message, int delay, Window parentWindow, Relative at, Gap innerGap)` | पूर्ण रूप: ऊर्ध्वाधर स्थिति (`at`) और आंतरिक padding (`innerGap`)। |

पहले दो अनुपस्थित फ़ील्ड में `null` के साथ तीसरे को सौंपते हैं।

| पैरामीटर | प्रकार | अर्थ |
|---|---|---|
| `message` | `String` | पाठ। **`null` छुपाता है** वर्तमान hint को। |
| `delay` | `int` | दृश्यमान मिलीसेकंड। `INFINITE`/`INFINITE_NOANIM` स्क्रीन पर बनाए रखते हैं। |
| `parentWindow` | `Window` | वैकल्पिक पैरेंट; डिफ़ॉल्ट = शीर्ष विंडो। |
| `at` | `Relative` | `START`(ऊपर) / `CENTER` / `END`(नीचे) या सापेक्ष मान। `null` `position` का उपयोग करता है। |
| `innerGap` | `Gap` | आंतरिक padding। `null` स्थैतिक `ingap` का उपयोग करता है। |

## वैश्विक कॉन्फ़िगरेशन (स्थैतिक फ़ील्ड)
पूरी दिखावट साझा स्थैतिक द्वारा नियंत्रित होती है — **इन्हें बदलना बाद के सभी hints को प्रभावित करता है**।

| फ़ील्ड | प्रकार | डिफ़ॉल्ट | क्या करता है |
|---|---|---|---|
| `Hint.backColor` | `int` | `0xFF303030` | पृष्ठभूमि रंग। |
| `Hint.foreColor` | `int` | `WHITE` | पाठ का रंग। |
| `Hint.position` | `Relative` | `Relative.ofScreen(0.85f)` | डिफ़ॉल्ट ऊर्ध्वाधर स्थिति। |
| `Hint.ingap` | `Gap` | `Gap.ofFont(0.7f, 0.35f, 0.7f, 0.35f)` | डिफ़ॉल्ट आंतरिक padding। |
| `Hint.font` | `Font` | `Font.get().bold()` | पाठ का फ़ॉन्ट। |
| `Hint.fade` | `int` | `200` | एनिमेटेड मोड में alpha का लक्ष्य। |
| `Hint.INFINITE` | `int` | `Integer.MAX_VALUE` | एनिमेशन **के साथ** अनंत अवधि। |
| `Hint.INFINITE_NOANIM` | `int` | `Integer.MIN_VALUE` | एनिमेशन **के बिना** अनंत अवधि। |

## अवस्थाएं
- जब `delay` परिमित हो तो समय के अनुसार स्वतः-बंद।
- `INFINITE`/`INFINITE_NOANIM` के साथ स्थायी — इसे `Hint.show(null, 0)` से मैन्युअल रूप से बंद करना पड़ता है।
- Hints **एक-दूसरे पर नहीं जुड़ते**: एक नया वर्तमान को बदल देता है।

### शीर्ष पर त्रुटि, लाल रंग में, स्थैतिक को पुनर्स्थापित करते हुए
```java
Hint.backColor = 0xFFB00020;
Hint.show("Falha ao salvar", 2500, null, Relative.START, null);
Hint.backColor = 0xFF303030; // अगले hints के लिए default को पुनर्स्थापित करता है
```

### स्थायी Hint और मैन्युअल हटाना
```java
Hint.show("Conectando...", Hint.INFINITE);
// ... जब समाप्त हो:
Hint.show(null, 0); // message == null वर्तमान hint को छिपा देता है
```

### Gap के माध्यम से कस्टम padding
```java
Hint.show("Detalhes copiados", 1800, null, Relative.CENTER, Gap.ofFont(1f, 0.5f, 1f, 0.5f));
```

## सर्वोत्तम प्रथाएं
- निष्क्रिय और संक्षिप्त फ़ीडबैक के लिए उपयोग करें; निर्णयों के लिए कभी नहीं।
- बिंदुवत समायोजन के लिए, स्थैतिक को म्यूटेट करने के बजाय कॉल में `at`/`innerGap` पास करना प्राथमिकता दें।
- किसी स्थैतिक को वैश्विक रूप से म्यूटेट करते समय (जैसे `backColor`), स्थिति को लीक न करने के लिए बाद में **पुनर्स्थापित** करें।

## सामान्य गलतियां
- **`INFINITE` बिना बंद किए** — स्क्रीन पर हमेशा बना रहता है; `Hint.show(null, ...)` से बंद करें।
- **शीर्ष पर कोई विंडो नहीं** (खाली स्टैक) — hint बस दिखाई नहीं देता।
- **hints के जमा होने की अपेक्षा करना** — नहीं; नया पिछले को बदल देता है।

## माइग्रेशन (Toast/ToolTip हटाए गए)
`Toast.show(...)` 1:1 `Hint.show(...)` में माइग्रेट होता है (वही सिग्नेचर और स्थैतिक)। `ToolTip` का कोई सीधा विकल्प नहीं है (अब press-and-hold नहीं है) — यदि आपको क्षणिक संकेत चाहिए तो `at`/`position` के साथ स्थित `Hint` का उपयोग करें।

## यह भी देखें
- क्षेत्र गाइड: [`ui/`](/docs/ui) · रेसिपीज़: [`cookbook/`](/docs/cookbook)
- संबंधित कॉम्पोनेंट: [`Alert`](/docs/ui/widgets/alert) · [`ActionSheet`](/docs/ui/widgets/actionsheet)
