सीधे मुख्य कॉन्टेंट पर जाएँ
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
शुरुआत करेंWebReactSwiftUIJetpack ComposeFlutterReact Nativeप्रीसेटआपका अपना डिज़ाइन सिस्टमAI एजेंट के साथ Tanrei का इस्तेमालब्रांडडिज़ाइन टोकनडिज़ाइन सिस्टम और कस्टमाइज़ेशनTheme Studioरंगटाइपोग्राफ़ीआइकनशेपएलिवेशनमोशनइंटरैक्शन स्टेटव्यवहारलेआउटसुलभताशब्दकलर टोकनटाइप स्केल टोकनशेप टोकनएलिवेशन टोकनमोशन टोकनस्टेट टोकनस्पेस और माप के टोकनकंपोनेंटबटनमुख्य ऐक्शन बटनसेगमेंटेड बटनबटन ग्रुपमेन्यू वाला बटनटूलबारकॉपी बटनचेकबॉक्सरेडियो बटनस्विचचिपमेन्यूस्लाइडरस्लाइडर फ़ील्डकैलेंडरDateTimePickerफ़ील्ड ग्रुपरेडियो ग्रुपचेकबॉक्स ग्रुपसिलेक्टसिलेक्ट फ़ील्डमेन्यू बारफ़ाइल अपलोडफ़ाइल पिकर उन्नतड्रॉप ज़ोनटेक्स्ट इनपुट उन्नतटेक्स्ट फ़ील्डचिप फ़ील्डफ़ील्डकॉम्बोबॉक्स उन्नतकॉम्बोबॉक्स फ़ील्डनंबर इनपुट उन्नतनंबर फ़ील्डकलर इनपुट उन्नतकलर फ़ील्डवन-टाइम कोड इनपुट उन्नतवन-टाइम कोड फ़ील्डएम्बेडेड टेक्स्ट इनपुट उन्नतचैट कंपोज़रकार्डडिवाइडरमोडल लेयर उन्नतडायलॉगलिस्टलिस्ट पंक्तिबॉटम शीटसाइड शीटकैरसेलकोड ब्लॉकटेबलपॉपओवरचरणअकॉर्डियनडिस्क्रिप्शन लिस्टफ़िगरऐप शेलपेज हेडरट्री व्यूटाइमलाइनइमेज प्रीव्यूसाइज़ हैंडलसाइज़ बदलने वाला फ़्रेमस्क्रॉल एरियाबैजप्रोग्रेस इंडिकेटरमीटरनंबर टिकरलोडिंग इंडिकेटरस्नैकबारटूलटिपकीबोर्ड शॉर्टकटटैगइनलाइन कोडकॉलआउटअवतारख़ाली स्टेटटैग ग्रुपस्केलेटनफ़ाइल आइटमस्वॉचमार्की टेक्स्टटैबटैब व्यूऐप बारनेविगेशन बारनेविगेशन ड्रॉअरखोजलिंकपेजिनेशनपिछला और अगला लिंकस्टेपरब्रेडक्रंबविषय सूचीलिंक कार्डFAB मेन्यूस्थितिTanrei कैसे बनता हैयोगदानलाइसेंस और श्रेय
होमकंपोनेंटटूलबार

टूलबार

आपस में जुड़े कंट्रोल के एक सेट को एक Tab स्टॉप के रूप में रखता है, जहाँ उसके कॉन्टेंट को ज़रूरत हो वहीं इनलाइन, निचले किनारे पर डॉक किया हुआ, या कॉन्टेंट के ऊपर तैरता हुआ। ऐरो कुंजियाँ फ़ोकस को इसके कंट्रोल के बीच ले जाती हैं, और जो समाता नहीं वह ओवरफ़्लो मेन्यू में चला जाता है।

content_copyMarkdown में देखें
श्रेणी
ऐक्शन
टोकन
comp.toolbar
स्तर
आधार

अवलोकन

Web
tanrei-toolbar
schedule
SwiftUI
TanreiToolbar
schedule
Jetpack Compose
TanreiToolbar
schedule
Flutter
TanreiToolbar
schedule
React Native
Toolbar
schedule

इससे जनरेट किया गया: docs/status/status.json, specs/toolbar.spec.json

इनलाइन, डॉक किया हुआ और तैरता हुआ

format_boldformat_italicformat_underlinedlinkimagearchivedeletemark_email_unreaddrive_file_moveeditink_highlighterink_erasercheck

इस्तेमाल

टूलबार आपस में जुड़े कंट्रोल का एक सेट रखता है: क्रियाएँ, टॉगल, मेन्यू खोलने वाला बटन, मेन्यू वाला बटन। इसके आइटम आपके अपने Tanrei Button और मेन्यू वाले बटन हैं, हर एक अपने लेबल, click और स्टेट के साथ। टूलबार इन्हें पढ़ने के क्रम में रखता है, ग्रुप को अलग करता है, कीबोर्ड फ़ोकस को इनके बीच चलाता है और जो नहीं समाता उसे ओवरफ़्लो मेन्यू में छिपा देता है। वह इनकी स्टाइल कभी नहीं बदलता, इसलिए टूलबार में सिर्फ़ आइकन वाला Button वैसा ही दिखता और वैसा ही व्यवहार करता है जैसा कहीं और।

इसमें छह प्रकार के आइटम होते हैं:

  • action: सिर्फ़ आइकन वाला Button। “बोल्ड” जैसा टॉगल भी यही है, जिस पर toggle सेट है।
  • button: लेबल वाला Button, जो टॉगल भी हो सकता है, जैसे कोई फ़िल्टर जो चालू या बंद है।
  • menu-button: ऐसा Button जिस पर Tanrei का Menu ऐंकर किया गया है, जैसे “क्रमबद्ध करें” या “डालें”। मेन्यू आपका है और अपने Button के बग़ल में रहता है। टूलबार उसे लेआउट नहीं करता।
  • button-with-menu: एक मुख्य क्रिया, साथ में उससे जुड़ी क्रियाओं का मेन्यू। हर हिस्सा ऐरो कुंजियों का अपना अलग स्टॉप है।
  • group: आपस में जुड़े आइटम की एक कड़ी, जैसे “बोल्ड”, “इटैलिक” और “अंडरलाइन”। यह अपना कुछ नहीं बनाता। जब ग्रुप बनाना व्यक्ति के लिए कुछ मायने रखता हो, जैसे “टेक्स्ट की स्टाइल”, तो इसे label दें।
  • separator: ऐसे दो आइटम के बीच की रेखा जो किसी ग्रुप में नहीं हैं। वेब पर यह एक डिवाइडर है, जिसे टूलबार वैसे ही बनाता है जैसे दो ग्रुप के बीच की रेखा।

इनलाइन (डिफ़ॉल्ट)। इनलाइन टूलबार वहीं रहता है जहाँ आपका लेआउट उसे रखता है, उसी कॉन्टेंट में जिस पर वह काम करता है: टेबल के ऊपर, एडिटर के सबसे ऊपर, लिस्ट के बग़ल में फ़िल्टर की पंक्ति के रूप में। वह उतना ही लंबा होता है जितना उसके आइटम को चाहिए, और लेआउट जितनी इजाज़त दे उससे कभी ज़्यादा नहीं। डिफ़ॉल्ट सिस्टम में उसकी अपनी कोई सरफ़ेस, शैडो या किनारा नहीं होता, और उसके सिरे आस-पास के कॉन्टेंट की सीध में रहते हैं।

डॉक किया हुआ। डॉक किया हुआ टूलबार स्क्रीन के निचले किनारे पर पूरी चौड़ाई में फैला रहता है। उसका रंग होम इंडिकेटर या जेस्चर बार के नीचे तक पहुँचता है, और उसके आइटम उस बार के ऊपर और किनारों के इनसेट के भीतर रहते हैं। वेब env(safe-area-inset-bottom) पढ़ता है, SwiftUI बार को .safeAreaInset(edge: .bottom) से रखता है, Compose windowInsets लेता है (डिफ़ॉल्ट रूप से नेविगेशन बार के), और Flutter MediaQuery की नीचे की पैडिंग पढ़ता है। React Native अपने इनसेट टूलबार की insets प्रॉपर्टी से या TanreiProvider से लेता है, क्योंकि Tanrei सेफ़ एरिया की कोई डिपेंडेंसी नहीं लेता।

तैरता हुआ। तैरता हुआ टूलबार अपनी जगह ख़ुद तय नहीं करता, जैसे मुख्य ऐक्शन बटन भी नहीं करता। उसे आपका लेआउट रखता है, आम तौर पर कॉन्टेंट के निचले सिरे के ऊपर बीच में, या जब वह खड़ा हो तो कॉन्टेंट के अंतिम किनारे के बग़ल में।

Web और React के उदाहरण मौजूदा स्पेक दिखाते हैं। SwiftUI, Compose, Flutter और React Native पीछे हैं। वे अभी टूलबार और बटन का पिछला संशोधन देते हैं, जिसमें टूलबार तब तक डॉक किया हुआ रहता है जब तक आप कुछ और न कहें, उसमें सिर्फ़ Button रहते हैं, जो नहीं समाता वह स्क्रॉल होता है, और सिर्फ़ आइकन वाली क्रिया एक अलग आइकन बटन है। जब तक वे बराबरी पर नहीं आते, उनके उदाहरण वही संशोधन दिखाते हैं।

<tanrei-toolbar label="फ़ॉर्मैटिंग" overflow-label="फ़ॉर्मैटिंग के और विकल्प">
  <tanrei-toolbar-group label="टेक्स्ट की स्टाइल">
    <tanrei-button variant="text" toggle selected label="बोल्ड"><span slot="icon">format_bold</span></tanrei-button>
    <tanrei-button variant="text" toggle label="इटैलिक"><span slot="icon">format_italic</span></tanrei-button>
  </tanrei-toolbar-group>
  <tanrei-toolbar-group>
    <tanrei-button variant="text" label="लिंक डालें"><span slot="icon">link</span></tanrei-button>
    <tanrei-button variant="text" id="insert" label="डालें"><span slot="icon">add</span></tanrei-button>
    <tanrei-menu anchor="insert">
      <tanrei-menu-item label="टेबल"></tanrei-menu-item>
      <tanrei-menu-item label="आड़ी रेखा"></tanrei-menu-item>
    </tanrei-menu>
  </tanrei-toolbar-group>
  <tanrei-divider></tanrei-divider>
  <tanrei-button variant="filled" toolbar-overflow="never">प्रकाशित करें</tanrei-button>
</tanrei-toolbar>

<!-- स्क्रीन के निचले किनारे पर डॉक किया हुआ। -->
<tanrei-toolbar variant="docked" label="संदेश की क्रियाएँ">
  <tanrei-button variant="text" label="आर्काइव करें"><span slot="icon">archive</span></tanrei-button>
  <tanrei-button variant="text" label="हटाएँ"><span slot="icon">delete</span></tanrei-button>
  <tanrei-button variant="filled">जवाब दें</tanrei-button>
</tanrei-toolbar>

<script type="module">
  import '@tanrei/web/components/toolbar';
  import '@tanrei/web/components/button';
  import '@tanrei/web/components/divider';
  import '@tanrei/web/components/menu';
  // आइटम आपके हैं: टूलबार अपना कोई इवेंट नहीं जोड़ता।
  document.querySelector('[label="लिंक डालें"]').addEventListener('click', insertLink);
  const insert = document.querySelector('tanrei-menu[anchor="insert"]');
  document.querySelector('#insert').addEventListener('click', () => (insert.open = !insert.open));
  insert.addEventListener('close', () => (insert.open = false));
</script>
import { Button, Divider, Toolbar, ToolbarGroup } from '@tanrei/react';

<Toolbar label="फ़ॉर्मैटिंग" overflowLabel="फ़ॉर्मैटिंग के और विकल्प">
  <ToolbarGroup label="टेक्स्ट की स्टाइल">
    <Button variant="text" toggle selected={bold} label="बोल्ड" onChange={(e) => setBold(e.detail.selected)}><span slot="icon">format_bold</span></Button>
    <Button variant="text" toggle selected={italic} label="इटैलिक" onChange={(e) => setItalic(e.detail.selected)}><span slot="icon">format_italic</span></Button>
  </ToolbarGroup>
  <ToolbarGroup>
    <Button variant="text" label="लिंक डालें" onClick={insertLink}><span slot="icon">link</span></Button>
  </ToolbarGroup>
  <Divider />
  <Button variant="filled" toolbar-overflow="never" onClick={publish}>प्रकाशित करें</Button>
</Toolbar>

<Toolbar variant="docked" label="संदेश की क्रियाएँ">
  <Button variant="text" label="आर्काइव करें" onClick={archive}><span slot="icon">archive</span></Button>
  <Button variant="filled" onClick={reply}>जवाब दें</Button>
</Toolbar>
import Tanrei

// डॉक किया हुआ टूलबार नीचे के सेफ़ एरिया इनसेट में रहता है; उसका बैकग्राउंड उसके नीचे तक पहुँचता है।
MessageView()
    .safeAreaInset(edge: .bottom, spacing: 0) {
        TanreiToolbar("संदेश की क्रियाएँ") {
            TanreiIconButton("आर्काइव करें", action: archive) { Image(systemName: "archivebox") }
            TanreiIconButton("हटाएँ", action: delete) { Image(systemName: "trash") }
            TanreiButton("जवाब दें", action: reply)
        }
    }

TanreiToolbar("फ़ॉर्मैटिंग", variant: .floating) {
    TanreiIconButton("बोल्ड", isSelected: $bold) { Image(systemName: "bold") }
    TanreiIconButton("लिंक डालें", action: insertLink) { Image(systemName: "link") }
}
import androidx.compose.foundation.gestures.Orientation
import io.github.chnotchy.tanrei.components.TanreiButton
import io.github.chnotchy.tanrei.components.TanreiIconButton
import io.github.chnotchy.tanrei.components.TanreiToolbar
import io.github.chnotchy.tanrei.primitives.TanreiText
import io.github.chnotchy.tanrei.tokens.TanreiToolbarVariant

// डॉक किया हुआ टूलबार अपने आइटम को WindowInsets.navigationBars जितनी पैडिंग देता है, जब तक आप windowInsets न दें।
TanreiToolbar(contentDescription = "संदेश की क्रियाएँ") {
    TanreiIconButton(onClick = ::archive, contentDescription = "आर्काइव करें") { TanreiText("archive") }
    TanreiIconButton(onClick = ::delete, contentDescription = "हटाएँ") { TanreiText("delete") }
    TanreiButton(text = "जवाब दें", onClick = ::reply)
}

TanreiToolbar(contentDescription = "फ़ॉर्मैटिंग", variant = TanreiToolbarVariant.Floating) {
    TanreiIconButton(onClick = {}, contentDescription = "बोल्ड", checked = bold, onCheckedChange = { bold = it }) {
        TanreiText("format_bold")
    }
    TanreiIconButton(onClick = ::insertLink, contentDescription = "लिंक डालें") { TanreiText("link") }
}

// खड़ा रूप तैरते हुए टूलबार के लिए है; इसे आपका लेआउट रखता है।
TanreiToolbar(
    contentDescription = "नक़्शे के कंट्रोल",
    variant = TanreiToolbarVariant.Floating,
    orientation = Orientation.Vertical,
) {
    TanreiIconButton(onClick = ::zoomIn, contentDescription = "ज़ूम इन करें") { TanreiText("add") }
    TanreiIconButton(onClick = ::zoomOut, contentDescription = "ज़ूम आउट करें") { TanreiText("remove") }
}
import 'package:tanrei/tanrei.dart';

TanreiToolbar(
  semanticLabel: 'संदेश की क्रियाएँ',
  children: <Widget>[
    TanreiIconButton(onPressed: archive, semanticLabel: 'आर्काइव करें', icon: const Icon(AppSymbols.archive)),
    TanreiIconButton(onPressed: delete, semanticLabel: 'हटाएँ', icon: const Icon(AppSymbols.delete)),
    TanreiButton(onPressed: reply, child: const Text('जवाब दें')),
  ],
);

TanreiToolbar(
  semanticLabel: 'नक़्शे के कंट्रोल',
  variant: TanreiToolbarVariant.floating,
  orientation: Axis.vertical,
  children: <Widget>[
    TanreiIconButton(onPressed: zoomIn, semanticLabel: 'ज़ूम इन करें', icon: const Icon(AppSymbols.add)),
    TanreiIconButton(onPressed: zoomOut, semanticLabel: 'ज़ूम आउट करें', icon: const Icon(AppSymbols.remove)),
  ],
);
import { Button, IconButton, Toolbar } from '@tanrei/react-native';

// नीचे और किनारों के इनसेट TanreiProvider के insets से आते हैं; टूलबार की अपनी insets प्रॉपर्टी उन ओर के इनसेट बदल देती है जिनका वह नाम लेती है।
<Toolbar accessibilityLabel="संदेश की क्रियाएँ">
  <IconButton accessibilityLabel="आर्काइव करें" onPress={archive}>archive</IconButton>
  <IconButton accessibilityLabel="हटाएँ" onPress={remove}>delete</IconButton>
  <Button variant="filled" onPress={reply}>जवाब दें</Button>
</Toolbar>

<Toolbar variant="floating" accessibilityLabel="फ़ॉर्मैटिंग">
  <IconButton accessibilityLabel="बोल्ड" toggle selected={bold} onSelectedChange={setBold}>format_bold</IconButton>
  <IconButton accessibilityLabel="लिंक डालें" onPress={insertLink}>link</IconButton>
</Toolbar>

स्पेक

ग्रुप और एक सेपरेटर, मेन्यू बटन, मेन्यू वाला बटन, लेबल वाले टॉगल, ओवरफ़्लो मेन्यू

undoredosortखुलेमुझे सौंपे गएअटैचमेंट वालेarchivedeletemark_email_unreaddrive_file_movelabelflagsnoozeprintattach_fileimagelinkभेजेंaddremovemy_locationlayers

संरचना

भाग विवरण
1 container The surface that holds the items: none of its own in the default system where the toolbar stands inline in the content; a bar across the bottom edge of the screen whose color reaches under the bottom system inset (docked); or a rounded, raised surface over the content (floating).
2 items The controls, in reading order: the product's own Tanrei Buttons, icon-only and labelled, toggles among them, Buttons that open a Menu, and Buttons with menu, alone or in groups. The toolbar lays them out and moves keyboard focus among them; it does not restyle them.
3 separator · वैकल्पिक A line across the toolbar between two groups, or where a separator item stands, or the empty space that takes its place, as the design system's separation says.
4 overflow-button · वैकल्पिक The icon-only Button at the end that opens a Menu of the items that do not fit, drawn only while some do not.
5 outline The docked toolbar's top edge, or the edge around a floating or an inline toolbar's whole shape (none in the default system for the last two).

प्रॉपर्टी

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
variant inline | docked | floating "inline" Inline stands in place where the layout puts it, as long as its items need and no longer than the layout allows, with no surface, shadow or edge of its own in the default system (an editor's formatting bar, a table's actions, a row of filters); docked is a full-width bar along the bottom edge of the screen, flush with it; floating is a rounded, raised surface over the content, as long as its items. One product places a toolbar inside its content on one screen, docks it on another and floats it on a third. A design system may add values.
orientation horizontal | vertical "horizontal" The direction the items run. Vertical is for an inline or a floating toolbar beside the content (a floating one on a large screen); a docked toolbar is always horizontal.
label string "" Names the toolbar for assistive technology ("Formatting", "Message actions"). Never drawn. Required.
overflow menu | scroll "menu" What happens when the items do not fit along the toolbar's axis: menu hides items from the end into an overflow menu at the end of the toolbar (TBR-18); scroll keeps every item and scrolls them (TBR-8).
overflowLabel string "" The overflow button's accessible name ("More actions"), in the product's language. Never drawn. Empty takes the product's words. Needed whenever the toolbar may be narrower than its items.
separation auto | divider | gap "auto" How two groups, or a separator item, set items apart: divider draws a line across the toolbar with space on each side, gap leaves empty space and no line. Auto takes comp.toolbar.separation, the design system's answer (divider in the default system).

स्लॉट

स्लॉट विवरण
default Holds the items, in reading order: Tanrei Buttons, icon-only and labelled, Buttons with a Tanrei Menu anchored to them (the Menu beside its Button), Buttons with menu, groups of them and separators.

आइटम

वे आइटम के प्रकार जिन्हें कंपोनेंट दोहराता है। फ़िक्स्चर अपने आइटम क्रम से सूचीबद्ध करता है; हर प्लैटफ़ॉर्म हर प्रकार को अपने तरीक़े से नाम देता है।

action

An icon action: a Button of the text variant and the medium size with an icon and no label, unless the product sets otherwise, laid out by the toolbar and not restyled; a toggle (bold, mute) is one with toggle set.

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
label string "" Its accessible name ("Bold"), as the Button's label. Required.
variant filled | tonal | elevated | outlined | text "text" As the Button's variant: text for most actions, filled for the one the toolbar leads to (Done, Send).
toggle boolean false As the Button's toggle: the action switches something on and off.
selected boolean false As the Button's selected: whether a toggle is on.
disabled boolean false As the Button's disabled.
overflow auto | never "auto" Whether the toolbar may hide this item into its overflow menu when space runs out: never keeps it (Send, Done). Read by the toolbar to place the item.
स्लॉट विवरण
icon Its glyph, as the Button's icon slot. A fixture item's content is this glyph.
इवेंट विवरण
click The action was activated, as the Button's click.
change A toggle was switched, as the Button's change.
स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-button TanreiButton TanreiButton TanreiButton Button
label · प्रॉपर्टी label label contentDescription semanticLabel accessibilityLabel
variant · प्रॉपर्टी variant variant variant variant variant
toggle · प्रॉपर्टी toggle isSelected onCheckedChange isSelected toggle
selected · प्रॉपर्टी selected isSelected checked isSelected selected
disabled · प्रॉपर्टी disabled disabled enabled onPressed disabled
overflow · प्रॉपर्टी toolbar-overflow toolbarOverflow Modifier.toolbarOverflow TanreiToolbarItem.overflow toolbarOverflow
click · इवेंट click action onClick onPressed onPress
change · इवेंट change isSelected onCheckedChange onPressed onSelectedChange
टिप्पणियाँ An icon-only <tanrei-button> child; the glyph is its content. An icon-only TanreiButton in the toolbar's view builder; a toggle is its isSelected: initializer. An icon-only TanreiButton called in the toolbar's content lambda. An icon-only TanreiButton in the toolbar's children. An icon-only Button element among the toolbar's children.

button

A labelled action: the button component, medium unless the product sets otherwise, laid out by the toolbar and not restyled.

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
variant filled | tonal | elevated | outlined | text "filled" As the button's variant.
toggle boolean false As the button's toggle: a labelled toggle (a filter that is on or off).
selected boolean false As the button's selected: whether a toggle is on.
disabled boolean false As the button's disabled.
overflow auto | never "auto" Whether the toolbar may hide this item into its overflow menu when space runs out: never keeps it (Send, Done). Read by the toolbar to place the item.
स्लॉट विवरण
default Its label, as the button's default slot. A fixture item's content is this label.
इवेंट विवरण
click The button was activated, as the button's click.
change A toggle was switched, as the button's change.
स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-button TanreiButton TanreiButton TanreiButton Button
variant · प्रॉपर्टी variant variant variant variant variant
toggle · प्रॉपर्टी toggle isSelected onCheckedChange isSelected toggle
selected · प्रॉपर्टी selected isSelected checked isSelected selected
disabled · प्रॉपर्टी disabled disabled enabled onPressed disabled
overflow · प्रॉपर्टी toolbar-overflow toolbarOverflow Modifier.toolbarOverflow TanreiToolbarItem.overflow toolbarOverflow
click · इवेंट click action onClick onPressed onPress
change · इवेंट change isSelected onCheckedChange onPressed onSelectedChange
टिप्पणियाँ A <tanrei-button> child; the label is its content. A TanreiButton in the toolbar's view builder. A TanreiButton called in the toolbar's content lambda. A TanreiButton in the toolbar's children. A Button element among the toolbar's children.

menu-button

A Button that opens a Tanrei Menu anchored to it (Sort, Insert): icon-only unless the product sets otherwise, laid out by the toolbar as any other item and not restyled. The Menu is the product's, beside it in the toolbar; it is neither laid out nor an item.

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
label string "" Its accessible name ("Sort"), as the Button's label. Required.
variant filled | tonal | elevated | outlined | text "text" As the Button's variant.
disabled boolean false As the Button's disabled.
overflow auto | never "auto" Whether the toolbar may hide this item into its overflow menu when space runs out: never keeps it (Send, Done). Read by the toolbar to place the item.
स्लॉट विवरण
icon Its glyph, as the Button's icon slot. A fixture item's content is this glyph.
इवेंट विवरण
click The button was activated, as the Button's click: the product opens its Menu.
स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-button TanreiButton TanreiButton TanreiButton Button
label · प्रॉपर्टी label label contentDescription semanticLabel accessibilityLabel
variant · प्रॉपर्टी variant variant variant variant variant
disabled · प्रॉपर्टी disabled disabled enabled onPressed disabled
overflow · प्रॉपर्टी toolbar-overflow toolbarOverflow Modifier.toolbarOverflow TanreiToolbarItem.overflow toolbarOverflow
click · इवेंट click action onClick onPressed onPress
टिप्पणियाँ A <tanrei-button id> child with a <tanrei-menu anchor="<its id>"> beside it, in the toolbar or in the same group. A TanreiButton with .tanreiMenu { … } attached, in the toolbar's view builder. A TanreiButton with a TanreiMenu anchored to it, called in the toolbar's content lambda. A TanreiButton that opens a TanreiMenu anchored to it, in the toolbar's children. A Button with a Menu anchored to it, among the toolbar's children.

button-with-menu

A Button with menu: a main action and a menu of related ones, each half a stop of the toolbar's arrow keys (TBR-25), laid out by the toolbar and not restyled.

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
label string "" The leading half's label ("Save"), as the Button with menu's label.
menuLabel string "" The trailing half's accessible name ("More save options"), as the Button with menu's menuLabel.
variant filled | tonal | elevated | outlined "filled" As the Button with menu's variant.
disabled boolean false As the Button with menu's disabled.
overflow auto | never "auto" Whether the toolbar may hide this item into its overflow menu when space runs out: never keeps it (Send, Done). Read by the toolbar to place the item.
इवेंट विवरण
click The main action was activated, as the Button with menu's click.
toggle The trailing half asks to open or close the menu, as the Button with menu's toggle.
स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-button-with-menu TanreiButtonWithMenu TanreiButtonWithMenu TanreiButtonWithMenu ButtonWithMenu
label · प्रॉपर्टी label title text label label
menuLabel · प्रॉपर्टी menuLabel menuLabel menuContentDescription menuSemanticLabel menuAccessibilityLabel
variant · प्रॉपर्टी variant variant variant variant variant
disabled · प्रॉपर्टी disabled disabled enabled onPressed disabled
overflow · प्रॉपर्टी toolbar-overflow toolbarOverflow Modifier.toolbarOverflow TanreiToolbarItem.overflow toolbarOverflow
click · इवेंट click action onClick onPressed onPress
toggle · इवेंट toggle isMenuPresented onMenuExpandedChange menuController onToggle
टिप्पणियाँ A <tanrei-button-with-menu> child, its menu items in slot="menu" as anywhere. A TanreiButtonWithMenu in the toolbar's view builder. A TanreiButtonWithMenu called in the toolbar's content lambda. A TanreiButtonWithMenu in the toolbar's children. A ButtonWithMenu among the toolbar's children.

group · ग्रुप — इसमें आइटम होते हैं

A run of related items (Bold, Italic, Underline), optionally named; the toolbar sets it apart from what is next to it as separation says. It draws nothing of its own.

प्रॉपर्टी टाइप डिफ़ॉल्ट विवरण
label string "" Names the group for assistive technology ("Text style"); never drawn. Empty leaves the group unexposed: its items are the toolbar's.
स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-toolbar-group TanreiToolbarGroup TanreiToolbarGroup TanreiToolbarGroup ToolbarGroup
label · प्रॉपर्टी label label contentDescription semanticLabel accessibilityLabel
टिप्पणियाँ A <tanrei-toolbar-group> child holding items: display: contents, with role="group" and aria-label while its label is not empty. TanreiToolbarGroup(_ label:) { items } in the toolbar's view builder: an accessibility container named by its label, or none without one. TanreiToolbarGroup(contentDescription) { … } in the toolbar's content lambda: a traversal group named by its description, or none without one. TanreiToolbarGroup(semanticLabel:, children:) in the toolbar's children: a semantics container named by its label, or none without one. <ToolbarGroup accessibilityLabel>{items}</ToolbarGroup> among the toolbar's children: a view with role group while it has a label.

separator

A line across the toolbar between two items outside the groups: the toolbar draws it as it draws the line between two groups, and it is never a stop of the arrow keys.

स्पेक Web SwiftUI Jetpack Compose Flutter React Native
आइटम tanrei-divider TanreiDivider TanreiDivider TanreiDivider Divider
टिप्पणियाँ A <tanrei-divider> child: the toolbar draws the line itself, as between two groups (TBR-23), as an element of its own with role="separator", and leaves the divider unassigned. A TanreiDivider() in the toolbar's view builder; the toolbar draws the line from its own tokens. A TanreiDivider() called in the toolbar's content lambda; the toolbar draws the line from its own tokens. A TanreiDivider() in the toolbar's children; the toolbar draws the line from its own tokens. A Divider among the toolbar's children; the toolbar draws the line from its own tokens.

स्टेट

व्यवहार

EARS रूप में लिखी गई आवश्यकताएँ। हर प्लैटफ़ॉर्म के इम्प्लीमेंटेशन को इन ID के आधार पर टेस्ट किया जाता है। आवश्यकताओं का पाठ स्पेक फ़ाइल से ज्यों का त्यों, अंग्रेज़ी में दिखाया गया है।

ID आवश्यकता
TBR-1 WHILE variant is docked THE toolbar SHALL span the full width of its parent, be at least comp.toolbar.container.size.docked high above the bottom system inset, fill its container with comp.toolbar.container.color.docked, raise it by comp.toolbar.container.elevation.docked, round it by comp.toolbar.container.shape.docked, and draw its top edge comp.toolbar.outline.width thick in comp.toolbar.outline.color.docked.
TBR-2 WHILE variant is docked THE toolbar SHALL lay its items out in one row in reading order, the first comp.toolbar.container.padding-inline.docked from the start edge and the last as far from the end edge, with equal space between neighbours and never less than comp.toolbar.container.gap.docked, each item vertically centered in the row; a toolbar with one item SHALL center it.
TBR-3 WHILE variant is docked THE toolbar SHALL extend its container under the bottom system inset (home indicator, gesture bar, taskbar) and SHALL place its items above that inset and inside the left and right insets, so that its color reaches the screen's bottom edge while no item sits under a system bar.
TBR-4 WHILE variant is floating THE toolbar SHALL fill its container with comp.toolbar.container.color.floating, raise it by comp.toolbar.container.elevation.floating, round it by comp.toolbar.container.shape.floating eased by sys.shape.corner-smoothing, draw an edge comp.toolbar.outline.width thick in comp.toolbar.outline.color.floating around its whole shape, be as long along its axis as its items need — comp.toolbar.container.padding-inline.floating at each end and comp.toolbar.container.gap.floating between neighbours, or as much more as TBR-16 keeps for their targets — and at least comp.toolbar.container.size.floating across it, with every item centered across the axis.
TBR-5 WHILE variant is floating THE toolbar SHALL NOT position itself: it SHALL lay out at its own size where the layout that holds it places it (normally centered above the bottom edge of the content, clear of a navigation bar and of the system inset, or beside the content's end edge for a vertical toolbar), and SHALL NOT draw a scrim, move content or reach under a system inset.
TBR-6 WHILE orientation is vertical and variant is floating or inline THE toolbar SHALL stack its items from top to bottom in the order given, with its variant's paddings and gap along the vertical axis and at least its variant's container size as its width; WHILE orientation is vertical and variant is docked THE toolbar SHALL lay out as a horizontal docked toolbar and in debug builds report that a docked toolbar is horizontal.
TBR-7 WHEN the layout direction is right-to-left THE toolbar SHALL lay out a horizontal toolbar's items from the right edge, in reading order, mirrored; a vertical toolbar SHALL keep its top-to-bottom order.
TBR-8 WHILE overflow is scroll and the items need more length than the toolbar has along its axis THE toolbar SHALL keep every item at its own size and the gap at its minimum, SHALL scroll its items along its axis so that every item stays reachable, and SHALL bring an item that receives keyboard focus fully into view; it SHALL NOT wrap, shrink or hide an item.
TBR-9 THE toolbar SHALL NOT restyle its items: each SHALL render as the Button it is, from its own tokens, variant and size, and SHALL keep its own press, focus, target and disabled behaviour and its own semantics, a toggle Button staying a toggle. Between two items the hit areas SHALL never overlap (as BGR-4): in a docked toolbar they SHALL meet at the middle of the gap, and in a floating or an inline one where the lengths TBR-16 keeps for the two items meet; each item SHALL keep its full target on every side that has no neighbour. In a docked toolbar the gap (at least comp.toolbar.container.gap.docked) is what keeps an item's target whole between its neighbours: at sys.target.touch minus the item's length or more, every item keeps its full target there, as the default system's gap does for every Button size; a layer that narrows that gap narrows the targets between items. In a floating or an inline toolbar TBR-16 keeps it, whatever comp.toolbar.container.gap.floating or comp.toolbar.container.gap.inline is.
TBR-10 THE toolbar SHALL be one Tab stop: the item that had keyboard focus last, or else the first item that is not disabled. Its items are its own and its groups' items, in reading order; a separator and a Menu anchored to an item are none. WHILE an item has keyboard focus, Right Arrow and Left Arrow in a horizontal toolbar (Left Arrow moving to the next item in a right-to-left layout) and Down Arrow and Up Arrow in a vertical one SHALL move focus to the next and previous item that is not disabled, wrapping at the ends, and Home and End to the first and last such item; moving focus SHALL NOT activate an item, and Enter and Space SHALL act on the focused item as that item does. A disabled item SHALL NOT take focus, as its own spec says (BTN-2).
TBR-11 THE toolbar SHALL expose itself as a toolbar named by label, with its orientation, on a platform that has a toolbar role, and on any other platform as a group named by label that contains its items in order; each item SHALL keep its own name, role and state, and the toolbar SHALL add nothing to them.
TBR-12 WHILE label is empty THE toolbar SHALL still render, and in debug builds report that it has no accessible name. IF the toolbar holds no item, or an element that is neither one of its item kinds nor a Menu anchored to one of its items, THE toolbar SHALL still lay it out, and in debug builds report it, because a field or a slider would take the arrow keys the toolbar moves focus with (the WAI-ARIA toolbar pattern).
TBR-13 WHEN variant names a value that the active design system does not have, or orientation a value the component does not define, THE toolbar SHALL render with the default value (inline, horizontal), and in debug builds report the unknown value. A variant value that a layer adds SHALL take the inline structure with its own values, because the structure is not a value a layer can set. WHEN overflow or separation names a value the component does not define THE toolbar SHALL render with menu or auto, and in debug builds report it.
TBR-14 WHILE the text size is enlarged THE toolbar SHALL grow across its axis to hold its items (its size is a minimum) and SHALL NOT scale its items itself; each item grows or keeps its size as its own spec says.
TBR-15 THE toolbar SHALL take its layout direction from where it is used — the direction of the nearest ancestor that sets one, and the platform's own where none does — and SHALL have no direction setting of its own; WHEN that direction changes while the toolbar is shown THE toolbar SHALL draw itself for the new direction at once, without a motion of its own, keeping its focus and the item its Tab stop stands on.
TBR-16 WHILE variant is floating THE toolbar SHALL lay its items comp.toolbar.container.gap.floating apart (and WHILE it is inline comp.toolbar.container.gap.inline apart, TBR-17), measured between their visible bounds along its axis, and SHALL move two neighbours further apart only as far as each needs in order to keep, centred on itself, a length of sys.target.touch along the axis that its neighbour's does not reach into, because items that stand this close cannot extend a hit area over each other (as BGR-3): where the token is 0, as in the default system, an item at least sys.target.touch long touches its neighbour, and a shorter one stands half of what it lacks away from it. THE toolbar SHALL NOT widen, resize or restyle an item to do so (TBR-9), SHALL space its items the same whatever the input type, so that the toolbar does not change with the pointer, and SHALL space them so along the vertical axis WHILE orientation is vertical (TBR-6). A floating toolbar is as long as its items need (TBR-4) and never spreads them across a width; WHILE variant is docked THE toolbar SHALL spread its items across its width and keep comp.toolbar.container.gap.docked as the least space between them (TBR-2), unchanged.
TBR-17 WHILE variant is inline THE toolbar SHALL lay its items out in one line along its axis where the layout places it, as long as its items need and never longer than the layout allows, with comp.toolbar.container.padding-inline.inline at each end, comp.toolbar.container.gap.inline between neighbours spaced as TBR-16 spaces a floating toolbar's, and at least comp.toolbar.container.size.inline across its axis; it SHALL fill its container with comp.toolbar.container.color.inline, raise it by comp.toolbar.container.elevation.inline, round it by comp.toolbar.container.shape.inline and edge it comp.toolbar.outline.width thick in comp.toolbar.outline.color.inline (transparent, none and no edge in the default system), and SHALL NOT read a system inset, position itself or spread its items.
TBR-18 WHILE overflow is menu and the items, at their own sizes and with the least gaps, need more length along the axis than the layout offers the toolbar — the length it would take with every item shown, which a parent as long as its content passes on from further up, so that it can grow while the toolbar and its parent stay as long as the items still shown — THE toolbar SHALL hide items from its end, in reverse reading order and one at a time, skipping every item whose overflow is never, until the items that remain and the overflow button fit; SHALL draw the overflow button after the last item that remains — an icon-only Tanrei Button of the text variant and the medium size, showing the glyph more_horiz in a horizontal toolbar and more_vert in a vertical one, named by overflowLabel or the product's words, exposed as a button that opens a menu, with its expanded state; and SHALL NOT hide an item whose overflow is never even when the items then do not fit, in which case TBR-8 applies to what remains.
TBR-19 THE toolbar SHALL decide which items are hidden before the first frame in which it is drawn, and again in the frame in which its items or the length the layout offers it (TBR-18) change, so that no item is drawn and then hidden in a later frame, and its size across its axis never changes because an item was hidden or shown; hiding and showing items SHALL NOT be animated, because it answers a change of the layout that a motion would lag behind.
TBR-20 WHEN the overflow button is activated THE toolbar SHALL open a Tanrei Menu anchored to it, placed bottom-end (in a vertical toolbar, at the side away from the edge it stands at), holding the hidden items in reading order: an action or a labelled Button as a menu item with its label and its icon, disabled while it is; a toggle as a checkbox item with its selected state; a menu button as a submenu item holding its menu's items; a Button with menu as an item for its main action followed by a submenu item named by its menuLabel; and a separator, or the boundary between two groups, as the menu's separation. Activating a menu item SHALL do exactly what activating the hidden item does — the same click or change, once, from that item — and close the menu.
TBR-21 WHEN the item that is the toolbar's Tab stop, or has keyboard focus, is hidden THE toolbar SHALL make the overflow button the Tab stop and, if focus was on the item, move focus to the overflow button; THE overflow button SHALL be the last stop of the arrow-key order (TBR-10).
TBR-22 THE toolbar SHALL lay out a group's items in its own line, in place, as items of the toolbar (the group draws nothing of its own), SHALL expose a group whose label is not empty as a group named by that label, and a group whose label is empty as nothing (its items are the toolbar's), unless the product names it (TBR-26).
TBR-23 THE toolbar SHALL set two neighbouring groups — or a group and an item outside any group — apart as separation names: WHILE it is divider by a line comp.toolbar.divider.thickness thick and comp.toolbar.divider.length long across the axis, centred, in comp.toolbar.divider.color, with comp.toolbar.group.gap on each side; WHILE it is gap by twice comp.toolbar.group.gap of empty space. A separator item SHALL be drawn the same way wherever it stands. THE toolbar SHALL expose each such line as a separator, SHALL never make it a stop of the arrow keys, and SHALL draw no line at the start or the end of the toolbar, and never two lines side by side.
TBR-24 WHILE an item is the anchor of a Menu THE toolbar SHALL keep it an item of the arrow-key order and SHALL neither lay out nor count the Menu; WHILE that Menu is open its keys SHALL be the Menu's, and WHEN it closes focus SHALL return to its anchor, which stays the Tab stop.
TBR-25 THE toolbar SHALL make each half of a Button with menu a stop of its own in the arrow-key order, the leading half first in reading order, each keeping its own name, role and state.
TBR-26 WHERE the platform has ARIA attributes (the web), the toolbar's host and a group's host carries its role (TBR-11, TBR-22) itself, so what the product writes on it is not moved, but for a name: WHILE label is not empty THE toolbar SHALL hold the product's aria-label and aria-labelledby on that host as their data-aria- twins, so that label is its whole name although the platform gives aria-labelledby the precedence, and WHEN label is emptied SHALL give them back as they were written; WHILE label is empty a name the product gives so — aria-label, or aria-labelledby naming an element — SHALL be its name and SHALL NOT be reported as having none in debug builds (TBR-12). A group whose label is empty and that the product names so SHALL be exposed as a group named by that name, as one with a label is: a group the product names is a named group, and a name on an element with no role would name nothing (TBR-22). WHEN the product removes one, or its data-aria- twin, or sets the ARIA property that reflects it (ariaLabel, ariaLabelledByElements) to null, THE toolbar SHALL take it away.

प्लैटफ़ॉर्म के अनुसार नामों का मिलान

पैरिटी का मतलब एक जैसे API नहीं है। हर प्लैटफ़ॉर्म एक ही कॉन्ट्रैक्ट को अपने तरीक़े से व्यक्त करता है।

स्पेक Web SwiftUI Jetpack Compose Flutter React Native
कंपोनेंट tanrei-toolbar TanreiToolbar TanreiToolbar TanreiToolbar Toolbar
variant · प्रॉपर्टी variant variant variant variant variant
orientation · प्रॉपर्टी orientation orientation orientation orientation orientation
label · प्रॉपर्टी label label contentDescription semanticLabel accessibilityLabel
overflow · प्रॉपर्टी overflow overflow overflow overflow overflow
overflowLabel · प्रॉपर्टी overflowLabel overflowLabel overflowContentDescription overflowSemanticLabel overflowAccessibilityLabel
separation · प्रॉपर्टी separation separation separation separation separation
टिप्पणियाँ The items are <tanrei-button> children, icon-only and labelled, <tanrei-button-with-menu> children, <tanrei-toolbar-group> children holding them, and <tanrei-divider> separators; a <tanrei-menu anchor> child anchored to an item's id is that item's Menu and is not laid out. The host has role="toolbar", aria-orientation and aria-label from label; a group with a label has role="group" and aria-label. The toolbar assigns each of its children, and a group each of its items, to a slot of its own (manual slot assignment), so that the toolbar draws the separations between them and leaves a hidden item unassigned: a hidden item is not drawn and keeps its place, its listeners and its state in the page. The overflow button and its menu are elements of the toolbar's shadow root. The roving Tab stop sets tabindex on the item elements (0 on the Tab stop, -1 on the others): an item delegates focus to the button in its shadow root, and a host whose tabindex is -1 takes that button out of the Tab order; a Button with menu is told which of its halves is the Tab stop through the internal channel (SPB-33). A docked toolbar's bottom inset is env(safe-area-inset-bottom). Snapshot harness: the stages of TBR-1, TBR-4, TBR-6 and TBR-18. TanreiToolbar(_ label: String, variant:, orientation:) { items }, a view builder of TanreiButtons, icon-only and labelled. A docked toolbar is placed with .safeAreaInset(edge: .bottom), its background ignoring the bottom safe area. SwiftUI's own .toolbar with a bottom-bar placement is not used: its bar cannot take the tokens. SwiftUI has no toolbar role: the toolbar is an accessibility container (.accessibilityElement(children: .contain)) labelled by label. The roving Tab stop is one focus group for the keyboard: Full Keyboard Access moves among its items with the arrow keys and leaves it with Tab. Lagging: the inline variant, the overflow menu, groups, separators, menu buttons and Buttons with menu as items are not built on this platform yet; it draws the docked and floating toolbar of icon-only and labelled Buttons, docked by default. .toolbarOverflow(.never) on an item keeps it; the overflow menu is a SwiftUI Menu drawn from the Tanrei Menu's tokens. TanreiToolbar(contentDescription, modifier, variant, orientation, windowInsets) { … }, the items called in its content lambda. windowInsets defaults to WindowInsets.navigationBars for a docked toolbar and to none for a floating one. Compose has no toolbar role: the toolbar is a traversal group (isTraversalGroup) labelled by contentDescription, and the README says so. The roving Tab stop is TanreiRovingFocus, the primitive the list, menu and tabs use, horizontal or vertical by orientation; the toolbar registers each item it holds. Lagging: the inline variant, the overflow menu, groups, separators, menu buttons and Buttons with menu as items are not built on this platform yet; it draws the docked and floating toolbar of icon-only and labelled Buttons, docked by default. Modifier.toolbarOverflow(TanreiToolbarOverflow.Never) on an item keeps it; the overflow menu is a TanreiMenu. TanreiToolbar(semanticLabel:, variant:, orientation:, children: [...]) (orientation is Flutter's Axis). A docked toolbar applies the bottom MediaQuery.padding itself, as SafeArea would, with its color under it. Flutter's widgets library has no toolbar role: the toolbar is a Semantics(container: true, explicitChildNodes: true, label:), and the README says so. The roving Tab stop is TanreiItemGroupMixin, the primitive the list, menu and tabs use, with its item axis set by orientation. Lagging: the inline variant, the overflow menu, groups, separators, menu buttons and Buttons with menu as items are not built on this platform yet; it draws the docked and floating toolbar of icon-only and labelled Buttons, docked by default. An item wrapped in TanreiToolbarItem(overflow: TanreiToolbarOverflow.never, child:) is kept; the overflow menu is a TanreiMenu. <Toolbar variant orientation accessibilityLabel insets>{items}</Toolbar>, the items being Button elements, icon-only and labelled. The view has role="toolbar". A docked toolbar takes the bottom inset from its own insets prop, falling back to TanreiProvider's insets; the package takes no safe-area dependency. The roving Tab stop and the arrow keys work where a hardware keyboard is attached, as the tabs row's do. Lagging: the inline variant, the overflow menu, groups, separators, menu buttons and Buttons with menu as items are not built on this platform yet; it draws the docked and floating toolbar of icon-only and labelled Buttons, docked by default. toolbarOverflow="never" on an item keeps it; the overflow menu is a Menu.

टोकन

टोकन किसका एलियास रिज़ॉल्व किया गया मान (लाइट)
--tanrei-comp-toolbar-container-color-docked sys.color.surface #ffffff
--tanrei-comp-toolbar-container-color-floating sys.color.surface-bright #ffffff
--tanrei-comp-toolbar-container-color-inline — #000000 · 0%
--tanrei-comp-toolbar-container-elevation-docked sys.elevation.level0
--tanrei-comp-toolbar-container-elevation-floating sys.elevation.level3 0px 0px 0px 1px rgb(0 0 0 / 0.08), 0px 1px 1px 0px rgb(0 0 0 / 0.04), 0px 4px 8px -4px rgb(0 0 0 / 0.04), 0px 16px 24px -8px rgb(0 0 0 / 0.06)
--tanrei-comp-toolbar-container-elevation-inline sys.elevation.level0
--tanrei-comp-toolbar-container-gap-docked — 16px
--tanrei-comp-toolbar-container-gap-floating sys.space.space0 0px
--tanrei-comp-toolbar-container-gap-inline sys.space.space50 4px
--tanrei-comp-toolbar-container-padding-inline-docked sys.space.space200 16px
--tanrei-comp-toolbar-container-padding-inline-floating sys.space.space150 12px
--tanrei-comp-toolbar-container-padding-inline-inline sys.space.space0 0px
--tanrei-comp-toolbar-container-shape-docked sys.shape.corner.none 0px
--tanrei-comp-toolbar-container-shape-floating sys.shape.corner.full 9999px
--tanrei-comp-toolbar-container-shape-inline sys.shape.corner.medium 8px
--tanrei-comp-toolbar-container-size-docked — 64px
--tanrei-comp-toolbar-container-size-floating — 64px
--tanrei-comp-toolbar-container-size-inline — 40px
--tanrei-comp-toolbar-divider-color sys.color.outline-variant #000000 · 8%
--tanrei-comp-toolbar-divider-length sys.space.space300 24px
--tanrei-comp-toolbar-divider-thickness sys.border.hairline 1px
--tanrei-comp-toolbar-group-gap sys.space.space100 8px
--tanrei-comp-toolbar-outline-color-docked sys.color.outline-variant #000000 · 8%
--tanrei-comp-toolbar-outline-color-floating — #000000 · 0%
--tanrei-comp-toolbar-outline-color-inline — #000000 · 0%
--tanrei-comp-toolbar-outline-width sys.border.hairline 1px
--tanrei-comp-toolbar-separation sys.behavior.separation 0

फ़िक्स्चर

मानक रेंडरिंग। हर प्लैटफ़ॉर्म हर फ़िक्स्चर का स्नैपशॉट एक ही ID से लेता है, ताकि नतीजों की तुलना की जा सके।

इससे जनरेट किया गया: specs/toolbar.spec.json, tokens/comp/toolbar.tokens.json, design/tokens/

दिशानिर्देश

कब इस्तेमाल करें

जो चीज़ व्यक्ति के सामने है, उस पर काम करने वाले कंट्रोल के सेट के लिए टूलबार इस्तेमाल करें: एडिटर के ऊपर “बोल्ड”, “इटैलिक” और “लिंक”; टेबल के ऊपर “फ़िल्टर”, “क्रमबद्ध करें” और “डाउनलोड करें”; खुले संदेश के लिए “आर्काइव करें”, “हटाएँ” और “ले जाएँ”; ड्रॉइंग के ऊपर पेन और इरेज़र; नक़्शे पर ज़ूम और लोकेशन। ये कंट्रोल मौजूदा कॉन्टेंट या चयन पर काम करते हैं, इस पर नहीं कि व्यक्ति आगे कहाँ जाता है।

स्क्रीन के शीर्षक, वापस जाने के रास्ते और एक-दो ग्लोबल क्रियाओं के लिए ऊपर का ऐप बार इस्तेमाल करें। ऐप के सबसे ऊपरी स्तर के गंतव्यों के बीच जाने के लिए नेविगेशन बार इस्तेमाल करें। डॉक किया हुआ टूलबार और नेविगेशन बार कभी एक ही स्क्रीन पर नहीं रहते: दोनों निचला किनारा माँगते हैं।

इनलाइन, डॉक किया हुआ या तैरता हुआ

वेरिएंट यह कहाँ रहता है आइटम किसके लिए
Inline (डिफ़ॉल्ट) कॉन्टेंट में अपनी जगह पर, जहाँ आपका लेआउट उसे रखता है, डिफ़ॉल्ट सिस्टम में बिना अपनी सरफ़ेस के पास-पास, उतने ही लंबे जितनी उन्हें ज़रूरत है, और हर एक अपने टच टार्गेट की जगह रखते हुए पेज के किसी हिस्से के कंट्रोल: एडिटर की फ़ॉर्मैटिंग, टेबल की क्रियाएँ, फ़िल्टर की पंक्ति
Docked निचले किनारे पर पूरी चौड़ाई में, उससे सटा हुआ, और उसका रंग सिस्टम बार के नीचे तक पहुँचता है चौड़ाई में फैले हुए, बीच में बराबर जगह के साथ फ़ोन पर डिटेल स्क्रीन की क्रियाएँ: खुला संदेश, फ़ोटो, दस्तावेज़
Floating कॉन्टेंट के ऊपर एक गोल कोनों वाली, उठी हुई सरफ़ेस, जिसे आपका लेआउट रखता है पास-पास, उतने ही लंबे जितनी उन्हें ज़रूरत है, और हर एक अपने टच टार्गेट की जगह रखते हुए उस कॉन्टेंट के ऊपर के टूल जिसे उनके आस-पास दिखते रहना चाहिए: कैनवस, नक़्शा

डॉक किया हुआ टूलबार हमेशा आड़ा होता है। इनलाइन या तैरता हुआ टूलबार खड़ा हो सकता है, कॉन्टेंट के बग़ल में। एक ही प्रॉडक्ट एक स्क्रीन पर टूलबार को इनलाइन रख सकता है, दूसरी पर एक को डॉक कर सकता है और तीसरी पर एक को तैरता रख सकता है। जो वेरिएंट कोई डिज़ाइन सिस्टम जोड़ता है, वह अपने मानों के साथ इनलाइन टूलबार की बनावट लेता है।

डॉक किया हुआ टूलबार अपने आइटम को चौड़ाई में फैलाता है और उन्हें कभी अपने गैप (डिफ़ॉल्ट सिस्टम में 16) से ज़्यादा पास नहीं लाता। इनलाइन या तैरता हुआ टूलबार अपने आइटम को पास-पास रखता है: दो पड़ोसी सिर्फ़ उतने दूर रहते हैं जितना हर एक को पंक्ति की दिशा में अपना टच टार्गेट बनाए रखने के लिए चाहिए, और गैप से कभी ज़्यादा पास नहीं (डिफ़ॉल्ट सिस्टम में इनलाइन के लिए 4 और तैरते हुए के लिए 0)। large बटन एक-दूसरे को छूते हैं, medium बटन 8 की दूरी पर रहते हैं और small बटन 16 की। इसके लिए टूलबार किसी आइटम को न चौड़ा करता है, न उसकी स्टाइल बदलता है, और यह दूरी माउस और टच के लिए एक जैसी है।

तैरता हुआ: small, medium और large आइटम, और narrow और wide आइटम

format_boldformat_italicformat_underlinedformat_boldformat_italicformat_underlinedformat_boldformat_italicformat_underlinedundoredoeditink_erasercheck

आइटम

  • ज़्यादातर क्रियाओं के लिए text वेरिएंट के सिर्फ़ आइकन वाले Button इस्तेमाल करें। टूलबार जिस एक क्रिया तक ले जाता है, जैसे “भेजें” या “हो गया”, उसे ज़्यादा वज़न दें: सिर्फ़ आइकन वाला filled बटन, शायद wide चौड़ाई पर, या लेबल वाला filled बटन, जब शब्द आइकन से बेहतर समझ आए।
  • narrow चौड़ाई का सिर्फ़ आइकन वाला बटन उस टूलबार के लिए ठीक है जिसमें कई छोटी क्रियाएँ हों। वह अपने टार्गेट से सँकरा बनता है, और टूलबार उसके पड़ोसियों के बीच टार्गेट के लिए जगह रखता है।
  • जो क्रिया किसी चीज़ को चालू-बंद करती है (“बोल्ड”, “म्यूट”), उसे toggle वाला, सिर्फ़ आइकन वाला बटन बनाएँ। जो फ़िल्टर चालू या बंद है, वह toggle वाला, लेबल वाला बटन है। हर एक अपना selected स्टेट और अपनी घोषणा ख़ुद रखता है।
  • जो कंट्रोल कई कमांड में से चुनने देता है, उसके लिए टूलबार के किसी Button पर मेन्यू ऐंकर करें। जिस मुख्य क्रिया के कई रूप हों, जैसे “सेव करें” और “इस रूप में सेव करें”, उसके लिए मेन्यू वाला बटन इस्तेमाल करें।
  • क्रम स्थिर रखें। लोग क्रियाओं को उनकी जगह से ढूँढ़ते हैं, और जिस टूलबार के आइटम एक स्क्रीन से दूसरी स्क्रीन पर जगह बदलते हैं उसे सीखना मुश्किल होता है।
  • एक आइटम वाला डॉक किया हुआ टूलबार उसे बीच में रखता है। सोचें कि कहीं वह आइटम कॉन्टेंट में तो नहीं होना चाहिए।

ग्रुप और सेपरेटर

आपस में जुड़े आइटम को एक ग्रुप में रखें: “बोल्ड”, “इटैलिक” और “अंडरलाइन”; “पहले जैसा करें” और “फिर से करें”; “ज़ूम इन करें” और “ज़ूम आउट करें”। टूलबार दो ग्रुप को, और किसी ग्रुप को ग्रुप से बाहर के आइटम से, उसी तरह अलग करता है जैसे डिज़ाइन सिस्टम दूसरी जगहों पर हिस्सों को अलग करता है: डिफ़ॉल्ट सिस्टम में एक छोटी रेखा और हर ओर 8 की जगह से, या जिस डिज़ाइन सिस्टम में अलगाव जगह से होता है उसमें 16 की ख़ाली जगह से, बिना रेखा के। किसी टूलबार पर separation सिर्फ़ उसकी अपनी किसी वजह से सेट करें। सेपरेटर आइटम ऐसे दो आइटम के बीच वही रेखा बनाता है जो किसी ग्रुप में नहीं हैं।

टूलबार किसी भी सिरे पर कभी रेखा नहीं बनाता, और कभी दो रेखाएँ अगल-बगल नहीं। जब ग्रुप बनाना व्यक्ति के लिए कुछ मायने रखता हो (“टेक्स्ट की स्टाइल”), तो ग्रुप को label दें, ताकि स्क्रीन रीडर उसका नाम बताए। बिना लेबल के ग्रुप अपने आइटम को अलग करता है और कुछ नहीं कहता।

जब आइटम समाते नहीं

टूलबार किसी आइटम को कभी अगली पंक्ति में नहीं भेजता और छोटा नहीं करता। जब उसके आइटम को उसके पास मौजूद जगह से ज़्यादा जगह चाहिए, तो वह अंत से एक-एक करके आइटम छिपाता है, और बचे हुए आख़िरी आइटम के बाद एक ओवरफ़्लो बटन दिखाता है। यह बटन छिपे हुए आइटम का मेन्यू खोलता है, उनके क्रम में, उनके लेबल, आइकन और स्टेट के साथ: क्रिया एक मेन्यू आइटम बनती है, टॉगल एक चेकबॉक्स आइटम, मेन्यू बटन एक सबमेन्यू, और मेन्यू वाला बटन उसकी मुख्य क्रिया और उसके बाद एक सबमेन्यू। इनमें से किसी को चुनना ठीक वही करता है जो छिपा हुआ आइटम करता है। ओवरफ़्लो बटन को overflow-label से नाम दें (“और क्रियाएँ”), या पूरे प्रॉडक्ट के लिए एक बार setWords({ toolbarOverflowLabel: … }) से।

जिस आइटम को रहना ही है, जैसे “भेजें” या “हो गया”, उसे toolbar-overflow="never" से चिह्नित करें: तब टूलबार उससे पहले के आइटम छिपाता है। अगर जो कभी नहीं छिपता वह फिर भी नहीं समाता, तो पंक्ति का बाक़ी हिस्सा स्क्रॉल होता है। हर आइटम को पंक्ति में रखने और किसी को छिपाने की जगह उन्हें स्क्रॉल करने के लिए overflow="scroll" सेट करें।

क्या छिपेगा, यह टूलबार के बनने से पहले तय होता है, और फिर उस फ़्रेम में जिसमें उसकी लंबाई बदलती है, इसलिए कोई आइटम कभी बनकर फिर छिपता नहीं, और पंक्ति कभी उछलती नहीं।

करें

  • टूलबार को उस काम से नाम दें जो उसके कंट्रोल करते हैं: “फ़ॉर्मैटिंग”, “संदेश की क्रियाएँ”।
  • जो क्रिया अभी लागू नहीं हो सकती, उसे हटाने की जगह अक्षम करें, ताकि बाक़ी अपनी जगह से न हिलें।
  • आइटम को ऐसे क्रम में रखें कि जिनकी लोगों को सबसे ज़्यादा ज़रूरत है वे पहले आएँ: टूलबार अंत से छिपाता है।
  • तैरते हुए टूलबार को उस कॉन्टेंट से हटाकर रखें जिसे लोगों को उसे इस्तेमाल करते समय देखना होता है, और नेविगेशन बार और सिस्टम के इनसेट से भी हटाकर।

न करें

  • टूलबार में टेक्स्ट फ़ील्ड, स्लाइडर या चिप का सेट न रखें। इनमें से हर एक को उन ऐरो कुंजियों की ज़रूरत होती है जिनसे टूलबार फ़ोकस चलाता है। खोज की जगह ऐप बार या पेज में है।
  • डॉक किया हुआ टूलबार और नेविगेशन बार एक ही स्क्रीन पर इस्तेमाल न करें।
  • टूलबार को ज़ोरदार दिखाने के लिए आइटम की स्टाइल न बदलें। इसकी जगह बटनों के लिए tonal या filled वेरिएंट चुनें।
  • टूलबार में नेविगेशन के गंतव्य न रखें। उसके आइटम ऐसे कंट्रोल हैं जो कॉन्टेंट पर काम करते हैं।

सुलभता

रोल
toolbar
लेबलिंग
label names the toolbar; it is never drawn. A group's label names the group; empty leaves it unexposed. Each item is named by its own label (an icon-only Button's label, a labelled Button's text), and the overflow button by overflowLabel or the product's words. The toolbar adds no name, role or state to its items.
न्यूनतम टार्गेट
दिखने वाला आकार छोटा होने पर भी हिट एरिया न्यूनतम टार्गेट साइज़ को पूरा करता है। minimum 32px · pointer 44px · spacing 8px · touch 48px

कीबोर्ड

कुंजियाँ क्रिया
Tab / Shift+Tab Moves focus into the toolbar (to the item focused last, or the first enabled item) and out of it: the toolbar is one Tab stop.
Right Arrow / Left Arrow (horizontal), Down Arrow / Up Arrow (vertical) Moves focus to the next or previous enabled item — a group's items and each half of a Button with menu included, separators skipped, the overflow button last — wrapping at the ends (Left and Right mirrored in right-to-left layouts).
Home / End Moves focus to the first or last enabled item.
Enter / Space Activates the focused item, as that Button does; on the overflow button, opens the menu of the hidden items.

टिप्पणियाँ

  • The toolbar has no target of its own and takes no input: its items are the product's Buttons, icon-only and labelled, which meet the minimum target themselves (BTN-5). A medium item's target (48) fits inside a floating toolbar's 64, and reaches past an inline toolbar's 40 as a Button's does anywhere.
  • The web has the toolbar role (with aria-orientation) and React Native has role toolbar. SwiftUI, Compose and Flutter have no toolbar role: there the toolbar is a group (an accessibility container, a traversal group, a semantics container) named by label, and each README says so.
  • One Tab stop with arrow-key movement is the WAI-ARIA toolbar pattern. It uses the same roving focus the list, menu and tabs use on each platform; a Button outside a toolbar is unchanged.
  • A toolbar holds Buttons, menu buttons, Buttons with menu, groups of them and separators. Anything else is laid out and reported (TBR-12), because a control that uses the arrow keys would take the keys the toolbar moves focus with.
  • A docked toolbar and a navigation bar are not used on the same screen: both claim the bottom edge.
  • How the items look is their own design system's answer; the toolbar reads no state tokens.
  • Hidden items stay reachable: the overflow button is the last stop of the arrow keys, and its menu holds every hidden item with its own name and state; activating one is activating the item.

इससे जनरेट किया गया: specs/toolbar.spec.json, tokens/sys/measure.tokens.json

कंपोनेंट क्या सँभालता है

  • टूलबार एक Tab स्टॉप है, WAI-ARIA के टूलबार पैटर्न के अनुसार। Tab दबाने पर फ़ोकस उसमें उस आइटम पर आता है जिस पर पिछली बार कीबोर्ड फ़ोकस था, नहीं तो पहले ऐसे आइटम पर जो अक्षम नहीं है, और अगली Tab फ़ोकस को उससे बाहर ले जाती है। आठ टॉगल वाले फ़ॉर्मैटिंग टूलबार को पार करने में Tab एक बार दबानी पड़ती है, आठ बार नहीं।
  • भीतर, उसके अक्ष की दिशा वाली ऐरो कुंजियाँ अगले या पिछले आइटम पर ले जाती हैं और सिरों पर घूमकर दूसरे सिरे पर पहुँचती हैं: आड़े टूलबार में Right Arrow और Left Arrow, खड़े टूलबार में Down Arrow और Up Arrow। Home और End पहले और आख़िरी आइटम पर ले जाती हैं। दाएँ से बाएँ वाले लेआउट में Left Arrow अगले आइटम पर ले जाती है। ग्रुप के आइटम टूलबार के ही आइटम हैं, मेन्यू वाले बटन का हर हिस्सा अपना अलग स्टॉप है, सेपरेटर छोड़ दिए जाते हैं, और ओवरफ़्लो बटन आख़िरी स्टॉप है।
  • फ़ोकस के पहुँचने भर से कोई आइटम कभी सक्रिय नहीं होता। Enter और Space फ़ोकस वाले आइटम पर वही करती हैं जो वह आइटम करता है, इसलिए टॉगल फिर भी बदलता है।
  • जब किसी आइटम पर ऐंकर किया गया मेन्यू खुला हो, तो कुंजियाँ मेन्यू की होती हैं। उसके बंद होने पर फ़ोकस उसी आइटम पर लौटता है जिससे वह खुला था।
  • जब टूलबार सँकरा होने के कारण फ़ोकस वाला आइटम छिप जाता है, तो फ़ोकस ओवरफ़्लो बटन पर चला जाता है।
  • ऐरो कुंजियाँ अक्षम आइटम को छोड़कर आगे बढ़ती हैं, और अक्षम आइटम कभी Tab स्टॉप नहीं होते, क्योंकि अक्षम बटन पर फ़ोकस नहीं जा सकता।
  • रोविंग फ़ोकस वही है जिसे हर प्लैटफ़ॉर्म पर लिस्ट, मेन्यू और टैब इस्तेमाल करते हैं।
  • जहाँ प्लैटफ़ॉर्म में टूलबार का रोल है (वेब, React Native), वहाँ टूलबार सहायक तकनीक को label के नाम वाले टूलबार के रूप में मिलता है, अपने ओरिएंटेशन के साथ। SwiftUI, Compose और Flutter में ऐसा कोई रोल नहीं है: वहाँ वह label के नाम वाला एक ग्रुप है जिसमें उसके आइटम क्रम से रहते हैं।
  • label वाला ग्रुप सहायक तकनीक को उसी नाम वाले ग्रुप के रूप में मिलता है। ग्रुप के बीच की रेखाएँ सेपरेटर के रूप में मिलती हैं।
  • ओवरफ़्लो बटन सहायक तकनीक को मेन्यू खोलने वाले बटन के रूप में मिलता है, अपने expanded स्टेट के साथ, और उसके मेन्यू में हर छिपा हुआ आइटम अपने नाम और स्टेट के साथ रहता है।
  • हर आइटम अपना नाम, रोल, स्टेट और टार्गेट ख़ुद रखता है। टूलबार इनमें कुछ नहीं जोड़ता और इनकी स्टाइल कभी नहीं बदलता।
  • दो आइटम के बीच हिट एरिया कभी एक-दूसरे पर नहीं चढ़ते। डॉक किए हुए टूलबार में वे गैप के बीचोबीच मिलते हैं, और डिफ़ॉल्ट सिस्टम का गैप (16) इतना चौड़ा है कि हर आइटम वहाँ भी अपना पूरा 48 का टच टार्गेट बनाए रखता है; सँकरे गैप वाला डिज़ाइन सिस्टम आइटम के बीच के टार्गेट को सँकरा कर देता है। इनलाइन या तैरते हुए टूलबार में आइटम बस उतने दूर रहते हैं कि हर एक पंक्ति की दिशा में अपने टच टार्गेट जितनी लंबाई बनाए रख सके, पॉइंटर चाहे जो हो, इसलिए narrow या small बटन को उसके पड़ोसी कभी नहीं दबाते। जिस ओर कोई पड़ोसी नहीं है, वहाँ आइटम अपना पूरा टार्गेट बनाए रखता है।
  • जब overflow का मान scroll हो और कीबोर्ड फ़ोकस पाने वाला आइटम स्क्रॉल होकर नज़र से बाहर हो, तो टूलबार उसे स्क्रॉल करके पूरी तरह नज़र में ले आता है।
  • बड़े टेक्स्ट साइज़ पर टूलबार अपने आइटम को समाने के लिए अपने अक्ष के आड़े बढ़ता है। वह उन्हें स्केल नहीं करता।
  • डीबग बिल्ड इन बातों की रिपोर्ट करते हैं: label का न होना, बिना आइटम वाला टूलबार, ऐसा आइटम जो इसके किसी प्रकार का नहीं है, खड़ा सेट किया गया डॉक किया हुआ टूलबार, ओवरफ़्लो बटन के नाम का न होना, और अनजान वेरिएंट, ओरिएंटेशन, overflow या separation।

प्लैटफ़ॉर्म की ज्ञात कमियाँ:

  • SwiftUI, Compose और Flutter में टूलबार का कोई रोल नहीं है। स्क्रीन रीडर एक नाम वाला ग्रुप सुनता है, टूलबार नहीं, और हर पैकेज का README यह बताता है। ग्रुप अपना ओरिएंटेशन नहीं देता।
  • SwiftUI, Compose, Flutter और React Native पीछे हैं: उनमें इनलाइन वेरिएंट नहीं है, ग्रुप या सेपरेटर नहीं हैं, ओवरफ़्लो मेन्यू नहीं है, और वे आइटम के रूप में सिर्फ़ Button लेते हैं।
  • Web: डॉक किया हुआ टूलबार env(safe-area-inset-bottom) पढ़ता है, जो शून्य रहता है जब तक पेज के viewport मेटा में viewport-fit=cover न हो।
  • Web: खड़े टूलबार का ओवरफ़्लो मेन्यू ओवरफ़्लो बटन के नीचे खुलता है, उसके बग़ल में नहीं, क्योंकि मेन्यू में बग़ल में खुलने की कोई प्लेसमेंट नहीं है।
  • Web: इनलाइन या तैरता हुआ टूलबार यह कि उसे कितनी जगह मिल सकती है, अपने पैरेंट एलिमेंट से नापता है। जिस टूलबार की जगह flex पंक्ति में उसके पैरेंट से नहीं, उसके सिबलिंग से तय होती है, वह क्या समाता है यह सिर्फ़ तब तय करता है जब उसके पैरेंट या उसके आइटम का साइज़ बदलता है।
  • Web: जब आइटम स्क्रॉल होते हैं, तो किसी आइटम का जो भी हिस्सा टूलबार के अक्ष के आड़े उससे बाहर निकलता है, वह कट जाता है: उसका हिट एरिया, उसकी फ़ोकस रिंग या ग्लो, elevated बटन की शैडो। कोई स्क्रॉलबार नहीं दिखाया जाता।
  • SwiftUI पर वह एक Tab स्टॉप कीबोर्ड के लिए एक फ़ोकस ग्रुप है: Full Keyboard Access उसके आइटम के बीच ऐरो कुंजियों से चलता है और Tab से उससे बाहर जाता है। कुंजियाँ नियमों के रूप में टेस्ट की गई हैं, असली कीबोर्ड के साथ अभी नहीं।
  • SwiftUI: जब आइटम स्क्रॉल होते हैं, तो सिरे के आइटम का हिट एरिया टूलबार के किनारे पर रुक जाता है। जब साइज़ बदलने से आइटम स्क्रॉल होने लगते हैं या स्क्रॉल होना बंद करते हैं, तो वे दोबारा बनाए जाते हैं, इसलिए आइटम का कीबोर्ड फ़ोकस या उस पर चल रहा दबाना छूट जाता है।
  • React Native पर Tab स्टॉप और ऐरो कुंजियाँ सिर्फ़ वहाँ काम करती हैं जहाँ हार्डवेयर कीबोर्ड जुड़ा हो, जैसे टैब की पंक्ति में।
  • React Native में टूलबार का रोल है, पर ओरिएंटेशन देने का कोई तरीक़ा नहीं है, इसलिए खड़ा टूलबार खड़े के रूप में पढ़कर नहीं सुनाया जाता।
  • React Native: तैरते हुए टूलबार की चौड़ाई, हार्डवेयर कीबोर्ड की कुंजियाँ, फ़ोकस वाले आइटम को स्क्रॉल करके नज़र में लाना, और VoiceOver और TalkBack टूलबार को पढ़कर सुनाते हैं या नहीं, ये सिर्फ़ Jest में जाँचे गए हैं, किसी डिवाइस पर नहीं।
  • m3-like में टूलबार डिफ़ॉल्ट सिस्टम के मानों से बनता है: Material के टूलबार के मान इस इंतज़ार में हैं कि फ़िडेलिटी रेफ़रेंस उसे शामिल करे। Material का vibrant टूलबार, जो अपने आइटम के रंग बदल देता है, बनाया नहीं जा सकता, क्योंकि टूलबार अपने आइटम की स्टाइल कभी नहीं बदलता (मिमिक्री गैप toolbar-vibrant-color)।

आपको क्या करना है

  • टूलबार को label दें, हर आइटम को अपने प्रॉडक्ट की भाषा में उसका अपना लेबल, सिर्फ़ आइकन वाली क्रियाओं समेत, और ओवरफ़्लो बटन को overflow-label से या अपने प्रॉडक्ट के शब्दों से नाम दें।
  • इसमें सिर्फ़ Tanrei के Button और मेन्यू वाले बटन रखें, अकेले, ग्रुप में, या उन पर ऐंकर किए गए मेन्यू के साथ।
  • जब कोई क्रिया लागू नहीं हो सकती, तो उसे अक्षम करें, और जब कारण साफ़ न हो तो पास में बताएँ कि क्यों।
  • मेन्यू बटन का मेन्यू ख़ुद खोलें और बंद करें, जैसे आप किसी भी मेन्यू के लिए करते हैं।
  • तैरते हुए टूलबार को इस तरह रखें कि वह उस कॉन्टेंट को न ढके जिसकी ज़रूरत टूलबार खुला रहते अब भी है।