इस पेज का अनुवाद मशीन द्वारा किया गया है और इसमें त्रुटियाँ हो सकती हैं। मूल अंग्रेज़ी पढ़ें

एलिमेंट

ColorPicker

कलर पिकर एक रंग रखता है, और उसके अंदर के पार्ट्स उसे दिखाते और बदलते हैं: सैचुरेशन और ब्राइटनेस का एक ColorArea, RGB, HSL, HSB या OKLCH के किसी भी चैनल और अल्फ़ा के ColorSlider, ऐसे ColorField जो रंग को टेक्स्ट के रूप में या एक चैनल को संख्या के रूप में लेते हैं, प्रीसेट रंगों के ColorSwatch और एक ColorEyeDropper जो स्क्रीन पर कहीं से भी रंग चुनता है। ऐप पार्ट्स के बीच अपने एलिमेंट रखकर उन्हें व्यवस्थित करता है (हर चैनल के लिए उसके अक्षर वाली एक पंक्ति, Tabs से चुना गया स्पेस, Popover में पिकर), और हर पार्ट की स्टाइलिंग करता है: पार्ट्स चैनलों के रंग बनाते हैं, जबकि हर आकार, रेडियस, बॉर्डर और शैडो ऐप का होता है।

el-color-picker.tsx
el-color-picker.tsxLive
import { mount, signal, Text, View } from "nsh";
import { type ColorChannel, ColorArea, ColorEyeDropper, ColorField, ColorPicker, ColorSlider, type ColorSpace, ColorSwatch } from "nsh/base";
import { desktop, field, Icon, Log, Segmented, Split, ui } from "./palette";

// `ColorPicker` holds the color; its parts, laid out and styled here, read
// and change it: the saturation and brightness area, the hue and alpha
// sliders, a row per channel of the space picked (its slider and its
// number), the color typed in any CSS form, the browser's eyedropper where
// it has one, and a palette of swatches.
const thumb = "rounded-full border-2 border-white";
const thumbStyle = { boxShadow: "0 0 0 1px rgba(0,0,0,0.25), 0 1px 3px rgba(0,0,0,0.3)" };
const spaces = ["rgb", "hsl", "hsb", "oklch"] as const;
const channels: Record<ColorSpace, [ColorChannel, string][]> = {
  rgb: [["red", "R"], ["green", "G"], ["blue", "B"]],
  hsl: [["hue", "H"], ["saturation", "S"], ["lightness", "L"]],
  hsb: [["hue", "H"], ["saturation", "S"], ["brightness", "B"]],
  oklch: [["lightness", "L"], ["chroma", "C"], ["hue", "H"]],
};
const palette = ["#ef4444", "#f97316", "#eab308", "#22c55e", "#06b6d4", "#3b82f6", "#8b5cf6", "#ec4899", "#0f172a80"];

/** A track `h` points high, half a thumb free at each end for the thumb. */
const track = (h: number) => ({
  class: `h-[${h + 8}px] justify-center px-[${(h + 6) / 2}px]`,
  trackClass: `h-[${h}px] rounded-full`,
  thumbClass: `w-[${h + 6}px] h-[${h + 6}px] ${thumb}`,
  thumbStyle,
  fillThumb: true,
});

function App() {
  const color = signal("#3b82f6ff");
  const text = signal("#3b82f6");
  const space = signal<ColorSpace>("oklch");
  const events = signal<string[]>([]);
  return (
    <View style={{ flex: 1, backgroundColor: ui().page, padding: 20, paddingTop: 24, gap: 14 }}>
      <Text style={{ fontSize: 22, fontWeight: "700", color: ui().text }}>color picker</Text>
      <Text style={{ color: ui().muted }}>
        {desktop ? "Drag the area or a slider, type a color, or pick a swatch" : "Drag the area or a slider, or tap a swatch"}
      </Text>
      <Split
        gap={14}
        inspector={
<Log title="onChangeEnd({ value, formatted })" lines={events()} minHeight={92} />
        }
      >
        <View style={{ ...ui().card, borderRadius: 16, padding: 16 }}>
          <ColorPicker
            value={color()}
            onChange={({ value, formatted }) => {
              color.set(value);
              text.set(formatted);
            }}
            onChangeEnd={({ formatted }) => events.set([formatted, ...events()].slice(0, 5))}
            style={{ gap: 12 }}
          >
            <ColorArea
              accessibilityLabel="Saturation and brightness"
              style={{ height: desktop ? 160 : 140 }}
              panelClass="rounded-lg"
              thumbClass={`w-[18px] h-[18px] ${thumb}`}
              thumbStyle={thumbStyle}
              fillThumb
            />
            <View style={{ flexDirection: "row", alignItems: "center", gap: 12 }}>
              <ColorSwatch accessibilityLabel="Current color" style={{ width: 36, height: 36, borderRadius: 18 }} checkerboardColor="#d4d4d8" />
              <View style={{ flex: 1, gap: 8 }}>
                <ColorSlider colorSpace="hsb" channel="hue" accessibilityLabel="Hue" {...track(12)} />
                <ColorSlider channel="alpha" accessibilityLabel="Alpha" checkerboardColor="#d4d4d8" {...track(12)} />
              </View>
            </View>
            <Text style={{ fontSize: 13, color: ui().muted, fontVariant: ["tabular-nums"] }}>{text()}</Text>
            <Segmented options={spaces} value={space()} onChange={(next) => space.set(next)} />
            {() =>
              channels[space()].map(([channel, letter]) => (
                <View style={{ flexDirection: "row", alignItems: "center", gap: 10 }}>
                  <Text style={{ width: 14, fontSize: 13, color: ui().muted }}>{letter}</Text>
                  <ColorSlider colorSpace={space()} channel={channel} accessibilityLabel={`${space()} ${channel}`} style={{ flex: 1 }} {...track(10)} />
                  <ColorField
                    colorSpace={space()}
                    channel={channel}
                    accessibilityLabel={`${space()} ${channel} value`}
                    {...field({ style: { width: 64, textAlign: "right" } })}
                  />
                </View>
              ))
            }
            <View style={{ flexDirection: "row", alignItems: "center", gap: 8 }}>
              <ColorField
                accessibilityLabel="Color"
                placeholder="#rrggbb, rgb(), hsl(), oklch() or a name"
                {...field({ style: { flex: 1 } })}
              />
              <ColorEyeDropper
                accessibilityLabel="Pick a color from the screen"
                class="disabled:hidden w-9 h-9 items-center justify-center rounded-md border border-border active:opacity-70"
              >
                <Icon name="pipette" size={16} tint={ui().text} />
              </ColorEyeDropper>
            </View>
            <View style={{ flexDirection: "row", flexWrap: "wrap", gap: 8 }}>
              {palette.map((c) => (
                <ColorSwatch
                  color={c}
                  style={{ width: 24, height: 24, borderRadius: 6 }}
                  selectedStyle={{ borderWidth: 2, borderColor: ui().text }}
                  checkerboardColor="#d4d4d8"
                  checkerboardSize={6}
                />
              ))}
            </View>
          </ColorPicker>
        </View>
      </Split>
    </View>
  );
}

mount(App);
use nsh_base::{
    ColorChannel, ColorPickerEvent, ColorSpace, color_area, color_field, color_picker,
    color_slider, color_swatch, theme,
};
use nsh_core::prelude::*;

fn primary(color: Signal<Hsla>) -> impl IntoElement {
    // A channel of OKLCH: its letter, its slider, its number.
    let channel = move |channel: ColorChannel, letter: &'static str| {
        view()
            .flex_row()
            .items_center()
            .gap_2()
            .child(text(letter).w(px(14.0)).text_sm().text_color(move || theme().muted_foreground))
            .child(
                color_slider()
                    .color_space(ColorSpace::Oklch)
                    .channel(channel)
                    .accessibility_label(letter)
                    .flex_1()
                    .h(px(18.0))
                    .justify_center()
                    .px(px(8.0))
                    .track_style(|s| s.h(px(10.0)).rounded_full())
                    .thumb_style(|s| s.size(px(16.0)).rounded_full().border_2().border_color(white()))
                    .fill_thumb(true),
            )
            .child(
                color_field()
                    .color_space(ColorSpace::Oklch)
                    .channel(channel)
                    .accessibility_label(letter)
                    .w(px(64.0))
                    .h(px(28.0))
                    .px_2()
                    .rounded_md()
                    .border_1()
                    .border_color(move || theme().border)
                    .text_sm(),
            )
    };
    color_picker()
        .value(move || Some(color.get()))
        .on_change(move |e: &ColorPickerEvent| {
            if let ColorPickerEvent::Change(value, _) = e {
                color.set(*value);
            }
        })
        .gap_3()
        .child(
            color_area()
                .accessibility_label("Saturation and brightness")
                .h(px(160.0))
                .panel_style(|s| s.rounded_lg())
                .thumb_style(|s| s.size(px(18.0)).rounded_full().border_2().border_color(white()))
                .fill_thumb(true),
        )
        .child(channel(ColorChannel::Lightness, "L"))
        .child(channel(ColorChannel::Chroma, "C"))
        .child(channel(ColorChannel::Hue, "H"))
        .child(color_swatch().size(px(28.0)).rounded_md())
}

ColorPicker, ColorArea, ColorSlider, ColorField, ColorSwatch और ColorEyeDropper nsh/base से आते हैं, जो Rust में nsh-base क्रेट है। Rust में color_picker() और उसके पार्ट्स के फ़ंक्शन उन्हें बनाते हैं: हर प्रॉप के लिए एक सेटर (.channel(..), .thumb_style(..)), हर इवेंट के लिए एक लिसनर मेथड (.on_change(..)) और टाइप्ड स्टाइल मेथड के साथ; रंग एक Hsla है, और स्पेस, चैनल और फ़ॉर्मैट क्रमशः ColorSpace, ColorChannel और ColorFormat हैं।

#मान

रंग एक CSS रंग है: हेक्स (#3b82f6, अल्फ़ा सहित #3b82f680), rgb(), hsl(), hsb(), oklch() या कोई CSS नाम; Rust में एक Hsla। ऐप इसे value से अपने पास रखता है और वही onChange सेट करता है जो रिपोर्ट होता है, जैसा nsh/base के हर कंट्रोल के लिए होता है; या वह रंग पिकर पर छोड़ देता है defaultValue के साथ और फिर भी बदलाव सुनता है।

  • onChange({ value, formatted }) उपयोगकर्ता द्वारा माँगे गए हर रंग को रिपोर्ट करता है: एरिया या स्लाइडर पर ड्रैग के हर चरण पर, हर कुंजी पर, फ़ील्ड में टाइप करते समय उसकी संख्या पर, स्वैच दबाने पर। value रंग है, formatted वही रंग है जैसा format कहता है वैसे लिखा हुआ ("hex", "rgb", "hsl", "hsb" या "oklch"), जो सहेजने या टोकन के रूप में सेट करने के लिए तैयार है।
  • onChangeEnd({ value, formatted }) वह रंग रिपोर्ट करता है जिस पर बदलाव समाप्त हुआ, एक बार: जब पॉइंटर उठता है, हर कुंजी के बाद, जब फ़ील्ड छोड़ी या सबमिट की जाती है, जब स्वैच दबाया जाता है।
  • पिकर रंग को हर स्पेस में वैसे ही रखता है जैसा उपयोगकर्ता ने सेट किया। एक ग्रे अपना ह्यू और सैचुरेशन बनाए रखता है, इसलिए ह्यू स्लाइडर वहीं रहता है जहाँ उपयोगकर्ता ने उसे छोड़ा; OKLCH में संपादित रंग अपनी लाइटनेस, क्रोमा और ह्यू को वैसा ही रखता है जैसा टाइप किया गया, sRGB जितना दिखा सकता है उससे आगे भी (रिपोर्ट किया गया रंग वह निकटतम रंग है जो sRGB दिखाता है, और "oklch" में formatted चैनलों को बनाए रखता है)।
  • ऐप द्वारा सेट किया गया value जिसे पिकर ने रिपोर्ट नहीं किया था, हर स्पेस में रंग को बदल देता है।

#स्पेस और चैनल

colorSpaceचैनल (channel)रेंज
"rgb""red", "green", "blue"0 से 255
"hsl""hue", "saturation", "lightness"ह्यू 0 से 360, बाकी 0 से 100
"hsb""hue", "saturation", "brightness"ह्यू 0 से 360, बाकी 0 से 100
"oklch""lightness", "chroma", "hue"लाइटनेस 0 से 100 (0.1 के चरण में), क्रोमा 0 से 0.4 (0.001 के चरण में), ह्यू 0 से 360 (0.1 के चरण में)
कोई भी"alpha"0 से 100

स्लाइडर का ट्रैक अपने चैनल के रंग बनाता है, बाकी चैनल स्थिर रखते हुए, इसलिए वह दिखाता है कि हर मान किस ओर ले जाता है। जो चैनल उसके स्पेस में नहीं है, उसकी जगह स्पेस का पहला चैनल लिया जाता है (एक चेतावनी यह बताती है)।

#Props

#ColorPicker

PropRustटाइपडिफ़ॉल्टविवरण
value.value(..)stringकोई नहींरंग (नियंत्रित)। ऐप वही रंग सेट करता है जो onChange रिपोर्ट करता है।
defaultValue.default_value(..)string"#000000"शुरू का रंग, जब तक value सेट नहीं है; तब पिकर अपना रंग खुद रखता है।
format.format(..)"hex" | "rgb" | "hsl" | "hsb" | "oklch""hex"formatted रंग को कैसे लिखता है।
disabled.disabled(..)booleanfalseकिसी भी पार्ट से कोई बदलाव नहीं; disabled: क्लासेज़ पिकर और उसके पार्ट्स पर लागू होती हैं।
children.child(..)JSX.Elementकोई नहींपार्ट्स और उनके बीच ऐप के एलिमेंट।
class, styleस्टाइल मेथडstring, StyleProp<ViewStyle>कोई नहींस्वयं पिकर: उसके पार्ट्स के चारों ओर का कॉलम (या रो)।

#ColorArea

PropRustटाइपडिफ़ॉल्टविवरण
panelClass, panelStyle.panel_style(|s| ..)string, StyleProp<ViewStyle>कोई नहींपैनल, जो एरिया को भरता है: ह्यू के रंग, सैचुरेशन बाएँ से दाएँ (राइट-टू-लेफ़्ट लेआउट में दाएँ से बाएँ) और ब्राइटनेस नीचे से ऊपर, उसके कोनों तक क्लिप किया हुआ।
thumbClass, thumbStyle.thumb_style(|s| ..)string, StyleProp<ViewStyle>कोई नहींथंब, रंग पर केंद्रित।
fillThumb.fill_thumb(..)booleanfalseथंब का बैकग्राउंड वही रंग है।
disabled.disabled(..)booleanfalseपॉइंटर, कीबोर्ड या स्क्रीन रीडर से कोई बदलाव नहीं।
accessibilityLabel.accessibility_label(..)stringकोई नहींथंब के लिए स्क्रीन रीडर क्या बोलते हैं।
class, styleस्टाइल मेथडstring, StyleProp<ViewStyle>कोई नहींएरिया: उसका आकार ऐप तय करता है।

#ColorSlider

PropRustटाइपडिफ़ॉल्टविवरण
colorSpace.color_space(..)"rgb" | "hsl" | "hsb" | "oklch""hsb"चैनल का स्पेस।
channel.channel(..)ColorChannel"hue"वह चैनल जिसे यह बदलता है: स्पेस का कोई एक चैनल, या "alpha"।
axis.axis(..)"horizontal" | "vertical""horizontal"ट्रैक की दिशा: सबसे छोटा मान शुरुआत में (बाईं ओर, राइट-टू-लेफ़्ट लेआउट में दाईं ओर), या नीचे। स्लाइडर बनाते समय पढ़ा जाता है।
trackClass, trackStyle.track_style(|s| ..)string, StyleProp<ViewStyle>कोई नहींट्रैक: उसके साथ-साथ चैनल के रंग, उसके कोनों तक क्लिप किए हुए; थंब उसी पर रखा जाता है।
thumbClass, thumbStyle.thumb_style(|s| ..)string, StyleProp<ViewStyle>कोई नहींथंब, मान पर केंद्रित।
fillThumb.fill_thumb(..)booleanfalseथंब का बैकग्राउंड वही रंग है (अल्फ़ा स्लाइडर पर उसके अल्फ़ा सहित)।
checkerboardColor.checkerboard_color(..)stringकोई नहींट्रैक के नीचे चेकरबोर्ड का रंग, जो अल्फ़ा स्लाइडर के रंगों में से दिखता है।
checkerboardSize.checkerboard_size(..)number4चेकरबोर्ड के वर्गों की भुजा।
disabled.disabled(..)booleanfalseपॉइंटर, कीबोर्ड या स्क्रीन रीडर से कोई बदलाव नहीं।
accessibilityLabel.accessibility_label(..)stringकोई नहींथंब के लिए स्क्रीन रीडर क्या बोलते हैं।
class, styleस्टाइल मेथडstring, StyleProp<ViewStyle>कोई नहींस्लाइडर: ट्रैक के चारों ओर की पट्टी जो प्रेस और ड्रैग लेती है।

#ColorField

PropRustटाइपडिफ़ॉल्टविवरण
channel.channel(..)ColorChannelकोई नहींवह चैनल जिसे यह संख्या के रूप में लेता है। इसके बिना, फ़ील्ड पूरा रंग टेक्स्ट के रूप में लेती है।
colorSpace.color_space(..)ColorSpace"hsb"channel का स्पेस।
format.format(..)ColorFormat"hex"फ़ील्ड पूरा रंग कैसे लिखती है। यह किसी भी CSS रूप को पढ़ती है।
placeholder.placeholder(..)stringकोई नहींफ़ील्ड के खाली रहने पर दिखाया जाता है।
disabled.disabled(..)booleanfalseटाइप नहीं किया जा सकता।
accessibilityLabel.accessibility_label(..)stringकोई नहींफ़ील्ड के लिए स्क्रीन रीडर क्या बोलते हैं।
class, styleस्टाइल मेथडstring, StyleProp<TextStyle>कोई नहींफ़ील्ड, एक टेक्स्ट इनपुट।

किसी चैनल की फ़ील्ड संख्या टाइप होते ही रंग बदल देती है, चैनल की रेंज में सीमित रखते हुए; पूरे रंग की फ़ील्ड उसे तब बदलती है जब फ़ील्ड छोड़ी या सबमिट की जाए, बशर्ते टेक्स्ट रंग के रूप में पढ़ा जा सके। फ़ील्ड छोड़ने पर उसका मान उसके फ़ॉर्मैट में दोबारा लिखा जाता है।

#ColorSwatch

PropRustटाइपडिफ़ॉल्टविवरण
color.color(..)stringकोई नहींवह रंग जो यह दिखाता है; दबाने पर वह इसके आसपास के पिकर में चुन लिया जाता है। इसके बिना, पिकर का अपना रंग: एक प्रिव्यू।
selectedStyle.selected_style(..)StyleProp<ViewStyle>कोई नहींस्टाइल, जब यह पिकर का रंग हो, selected: क्लासेज़ के रूप में।
checkerboardColor.checkerboard_color(..)stringकोई नहींपारदर्शी रंग के नीचे एक चेकरबोर्ड।
checkerboardSize.checkerboard_size(..)number4उसके वर्गों की भुजा।
disabled.disabled(..)booleanfalseकोई प्रेस नहीं।
accessibilityLabel.accessibility_label(..)stringहेक्स में रंगस्क्रीन रीडर क्या बोलते हैं।
children.child(..)JSX.Elementकोई नहींरंग के ऊपर की सामग्री: चुने हुए स्वैच पर एक चेक (group-selected:)।
class, styleस्टाइल मेथडstring, StyleProp<ViewStyle>कोई नहींस्वैच: उसका आकार, शेप और बॉर्डर; उसके कोने रंग को क्लिप करते हैं।

#ColorEyeDropper

PropRustटाइपडिफ़ॉल्टविवरण
disabled.disabled(..)booleanfalseकोई प्रेस नहीं। जहाँ प्लेटफ़ॉर्म में आईड्रॉपर नहीं है, वहाँ यह भी डिसेबल रहता है।
accessibilityLabel.accessibility_label(..)stringकोई नहींस्क्रीन रीडर क्या बोलते हैं।
children.child(..)JSX.Elementकोई नहींइसकी सामग्री: ऐप का आइकन या लेबल।
class, styleस्टाइल मेथडstring, StyleProp<ViewStyle>कोई नहींबटन।

दबाने पर सिस्टम का आईड्रॉपर दिखता है: macOS पर AppKit का कलर सैंपलर, वेब पर ब्राउज़र का EyeDropper (Chrome और Edge में)। चुना गया रंग पिकर का रंग बन जाता है (onChange, फिर onChangeEnd); Escape दबाने पर कोई रंग नहीं चुना जाता। जहाँ प्लेटफ़ॉर्म में आईड्रॉपर नहीं है, वहाँ बटन डिसेबल रहता है, और disabled:hidden उसे वहाँ छिपा देता है।

#इवेंट

इवेंटकिसकाRustपेलोडकब
onChangeColorPicker.on_change(|e: &ColorPickerEvent| ..)({ value: string, formatted: string })उपयोगकर्ता ने रंग बदला।
onChangeEndColorPicker.on_change_end(|e: &ColorPickerEvent| ..)({ value: string, formatted: string })बदलाव समाप्त हुआ। हर बदलाव पर एक बार।
onPressColorSwatch.on_press(|color: &Hsla| ..)({ color: string })स्वैच दबाया गया; यह अकेले भी काम करता है, पैलेट के चिप की तरह।
onPickColorEyeDropper.on_pick(|color: &Hsla| ..)({ color: string })उपयोगकर्ता ने स्क्रीन पर से रंग चुना; यह अकेले भी काम करता है।

Rust में ColorPickerEvent::Change(Hsla, SharedString) और ColorPickerEvent::ChangeEnd(Hsla, SharedString) रंग और उसका formatted टेक्स्ट रखते हैं।

#पार्ट्स

पार्टकहाँस्टाइल किसके साथ
ColorAreaपिकर के अंदरclass, style
एरिया का पैनलएरिया के अंदर, उसे भरता हुआpanelClass, panelStyle
एरिया का थंबएरिया के अंदर, रंग पर केंद्रितthumbClass, thumbStyle
ColorSliderपिकर के अंदरclass, style
स्लाइडर का ट्रैकस्लाइडर के अंदरtrackClass, trackStyle
स्लाइडर का थंबस्लाइडर के अंदर, ट्रैक पर मान पर केंद्रितthumbClass, thumbStyle
ColorFieldपिकर के अंदरclass, style
ColorSwatchपिकर के अंदर, या अकेलाclass, style, selectedStyle
ColorEyeDropperपिकर के अंदर, या अकेलाclass, style

स्लाइडर का थंब ट्रैक पर केंद्रित होता है, इसलिए चैनल के सिरों पर वह ट्रैक के सिरों पर होता है। स्लाइडर पर थंब की आधी चौड़ाई के बराबर पैडिंग (h-3 ट्रैक के चारों ओर h-6 justify-center px-2.5) पूरे थंब को स्लाइडर के अंदर रखती है, जहाँ वह दोनों सिरों पर प्रेस लेता है। पार्ट्स जो स्टेट दिखाते हैं: थंब का active: जब उसे ड्रैग किया जाए और कीबोर्ड फ़ोकस के साथ focus:, स्वैच का selected:, और हर पार्ट का disabled:।

#कीबोर्ड

macOS और वेब पर हर थंब कीबोर्ड फ़ोकस (Tab) का एक पड़ाव है:

कुंजीस्लाइडर परएरिया पर
Right, Upएक चरण ऊपरRight: अधिक सैचुरेशन; Up: अधिक ब्राइटनेस
Left, Downएक चरण नीचेLeft: कम सैचुरेशन; Down: कम ब्राइटनेस
Shift के साथ तीरदस चरणदस चरण
Page Up, Page Downदस चरणब्राइटनेस के दस चरण
Home, Endचैनल के सिरे

राइट-टू-लेफ़्ट लेआउट में क्षैतिज स्लाइडर और एरिया दाईं ओर से शुरू होते हैं, सबसे छोटा मान (सबसे कम सैचुरेशन) दाएँ सिरे पर होता है: Left एक चरण ऊपर और Right एक चरण नीचे होता है, और प्रेस या ड्रैग पॉइंटर के नीचे का वह मान चुनता है जैसा वह खींचा गया दिखता है। ऊर्ध्वाधर स्लाइडर में Right और Up एक चरण ऊपर ही रहते हैं; एरिया पर Up और Down ब्राइटनेस ही बदलते हैं।

स्वैच Space और Return लेता है। हर कुंजी पहले onChange और फिर onChangeEnd रिपोर्ट करती है; तीर दबाए रखने पर दोहराते हैं।

#एक्सेसिबिलिटी

  • एरिया और हर स्लाइडर के थंब एडजस्टेबल एलिमेंट हैं ("adjustable", ब्राउज़र में एक स्लाइडर) जिनके साथ उनका लेबल, मान और रेंज होती है; स्क्रीन रीडर के इन्क्रीमेंट और डिक्रीमेंट उन्हें चरणों में बदलते हैं।
  • हर फ़ील्ड अपने लेबल के साथ एक टेक्स्ट फ़ील्ड है; हर स्वैच एक बटन है, जो पिकर का रंग होने पर चयनित रहता है, और जब तक accessibilityLabel उसे नाम न दे, हेक्स में अपने रंग से नामित होता है। आईड्रॉपर ऐप के लेबल वाला एक बटन है।
  • डिसेबल होने पर स्क्रीन रीडर बताते हैं कि पार्ट्स धुँधले हैं, और वे कोई एक्शन नहीं लेते।

लेबल, रोल और एक्शन के बारे में सामान्य जानकारी के लिए एक्सेसिबिलिटी देखें।

#प्लेटफ़ॉर्म नोट्स

  • हर प्लेटफ़ॉर्म वही बनाता है जो ऐप स्टाइल करता है; ट्रैक और पैनल के रंग ग्रेडिएंट हैं जिन्हें प्लेटफ़ॉर्म बनाता है। प्रेस और ड्रैग कोर में ट्रैक किए जाते हैं, माउस, पेन या उँगली के लिए, और पिकर के आसपास का स्क्रॉल व्यू अपनी स्क्रॉलिंग उन ड्रैग तक सीमित रखता है जो कहीं और से शुरू होते हैं।
  • ColorEyeDropper macOS पर AppKit के कलर सैंपलर से और वेब पर ब्राउज़र के EyeDropper से रंग चुनता है; रंग sRGB में आता है।