टेलविंड CSS च्या फंक्शन्स API चा सखोल अभ्यास करा आणि कस्टम युटिलिटी क्लासेस, थीम्स आणि व्हेरिएंट्स तयार करायला शिका. आपले टेलविंड कौशल्य वाढवा आणि खरोखरच अद्वितीय यूजर इंटरफेस तयार करा.
टेलविंड CSS मध्ये प्राविण्य मिळवा: कस्टम युटिलिटी जनरेशनसाठी फंक्शन्स API ची शक्ती वापरा
टेलविंड CSS ने स्टाइलिंगसाठी युटिलिटी-फर्स्ट दृष्टिकोन प्रदान करून फ्रंट-एंड डेव्हलपमेंटमध्ये क्रांती घडवली आहे. त्याचे पूर्वनिर्धारित क्लासेस डेव्हलपर्सना जलद प्रोटोटाइप बनवण्यास आणि सुसंगत यूजर इंटरफेस तयार करण्यास मदत करतात. तथापि, कधीकधी युटिलिटीजचा डिफॉल्ट संच पुरेसा नसतो. इथेच टेलविंड CSS फंक्शन्स API कामाला येतो, जो टेलविंडची क्षमता वाढवण्याचा आणि आपल्या विशिष्ट प्रोजेक्टच्या गरजेनुसार कस्टम युटिलिटी क्लासेस तयार करण्याचा एक शक्तिशाली मार्ग देतो.
टेलविंड CSS फंक्शन्स API म्हणजे काय?
फंक्शन्स API हा टेलविंड CSS द्वारे उपलब्ध केलेल्या जावास्क्रिप्ट फंक्शन्सचा एक संच आहे, जो आपल्याला टेलविंडच्या कॉन्फिगरेशनशी प्रोग्रामॅटिकली संवाद साधण्याची आणि कस्टम CSS तयार करण्याची परवानगी देतो. यामुळे अनेक शक्यतांचे दरवाजे उघडतात, ज्यामुळे आपण हे करू शकता:
- पूर्णपणे नवीन युटिलिटी क्लासेस तयार करणे.
- विद्यमान टेलविंड थीम्सना कस्टम व्हॅल्यूजसह विस्तारित करणे.
- आपल्या कस्टम युटिलिटीजसाठी व्हेरिएंट्स तयार करणे.
- पुन्हा वापरण्यायोग्य कंपोनंट्ससह शक्तिशाली डिझाइन सिस्टीम तयार करणे.
मूलतः, फंक्शन्स API टेलविंड CSS ला आपल्या अचूक आवश्यकतांनुसार आकार देण्यासाठी आवश्यक साधने प्रदान करते, जे त्याच्या अंगभूत युटिलिटीजच्या पलीकडे जाऊन खऱ्या अर्थाने एक अद्वितीय आणि टेलर्ड स्टाइलिंग सोल्यूशन तयार करते.
टेलविंड CSS API ची प्रमुख फंक्शन्स
फंक्शन्स API चा गाभा अनेक प्रमुख फंक्शन्सभोवती फिरतो, जे आपल्या टेलविंड कॉन्फिगरेशन फाइलमध्ये (tailwind.config.js
किंवा tailwind.config.ts
) आणि @tailwindcss/plugin
वापरून तयार केलेल्या कस्टम प्लगइन्समध्ये उपलब्ध असतात.
theme(path, defaultValue)
theme()
फंक्शन आपल्याला आपल्या टेलविंड थीम कॉन्फिगरेशनमध्ये परिभाषित केलेल्या व्हॅल्यूजमध्ये प्रवेश करण्याची परवानगी देते. यामध्ये रंग आणि स्पेसिंगपासून फॉन्ट आकार आणि ब्रेकपॉइंट्सपर्यंत सर्वकाही समाविष्ट आहे. आपल्या प्रोजेक्टच्या डिझाइन लँग्वेजशी सुसंगत युटिलिटीज तयार करण्यासाठी हे महत्त्वाचे आहे.
उदाहरण: थीममधून कस्टम रंग मिळवणे:
module.exports = {
theme: {
extend: {
colors: {
'brand-primary': '#007bff',
},
},
},
plugins: [
function ({ addUtilities, theme }) {
const newUtilities = {
'.bg-brand-primary': {
backgroundColor: theme('colors.brand-primary'),
},
};
addUtilities(newUtilities);
},
],
};
हे उदाहरण brand-primary
साठी परिभाषित केलेला हेक्स कोड मिळवते आणि त्याचा वापर .bg-brand-primary
युटिलिटी क्लास तयार करण्यासाठी करते, ज्यामुळे ब्रँडचा रंग बॅकग्राउंड म्हणून लागू करणे सोपे होते.
addUtilities(utilities, variants)
addUtilities()
फंक्शन हे कस्टम युटिलिटी जनरेशनचा आधारस्तंभ आहे. हे आपल्याला टेलविंडच्या स्टाइलशीटमध्ये नवीन CSS नियम समाविष्ट करण्याची परवानगी देते. utilities
हा एक ऑब्जेक्ट आहे जिथे कीज (keys) आपण तयार करू इच्छित असलेल्या क्लासची नावे असतात आणि व्हॅल्यूज (values) म्हणजे ते क्लास वापरल्यावर लागू होणारे CSS गुणधर्म आणि व्हॅल्यूज असतात.
पर्यायी variants
आर्गुमेंट आपल्याला आपल्या कस्टम युटिलिटीसाठी तयार केले जाणारे रिस्पॉन्सिव्ह ब्रेकपॉइंट्स आणि स्यूडो-क्लासेस (उदा. hover
, focus
) निर्दिष्ट करण्याची परवानगी देते. जर कोणतेही व्हेरिएंट्स निर्दिष्ट केले नाहीत, तर युटिलिटी फक्त डीफॉल्ट (बेस) स्थितीसाठी तयार केली जाईल.
उदाहरण: टेक्स्ट ओव्हरफ्लोला इलिप्सिसमध्ये सेट करण्यासाठी युटिलिटी तयार करणे:
module.exports = {
plugins: [
function ({ addUtilities }) {
const newUtilities = {
'.truncate-multiline': {
overflow: 'hidden',
display: '-webkit-box',
'-webkit-line-clamp': '3',
'-webkit-box-orient': 'vertical',
},
};
addUtilities(newUtilities);
},
],
};
हे एक .truncate-multiline
क्लास तयार करते जो टेक्स्टला तीन ओळींपर्यंत मर्यादित करतो आणि जर टेक्स्ट त्या मर्यादेपेक्षा जास्त असेल तर इलिप्सिस जोडतो.
addComponents(components)
addUtilities
हे निम्न-स्तरीय, एकल-उद्देशीय क्लासेससाठी आहे, तर addComponents
हे अधिक जटिल UI एलिमेंट्स किंवा कंपोनंट्सच्या स्टाइलिंगसाठी डिझाइन केलेले आहे. पुन्हा वापरण्यायोग्य कंपोनंट स्टाइल्स तयार करण्यासाठी हे विशेषतः उपयुक्त आहे.
उदाहरण: बटन कंपोनंटला स्टाइल करणे:
module.exports = {
plugins: [
function ({ addComponents, theme }) {
const buttons = {
'.btn': {
padding: `${theme('spacing.2')} ${theme('spacing.4')}`,
borderRadius: theme('borderRadius.md'),
fontWeight: theme('fontWeight.semibold'),
backgroundColor: theme('colors.blue.500'),
color: theme('colors.white'),
'&:hover': {
backgroundColor: theme('colors.blue.700'),
},
},
};
addComponents(buttons);
},
],
};
हे पॅडिंग, बॉर्डर रेडियस, फॉन्ट वेट आणि रंगांसाठी पूर्वनिर्धारित स्टाइलिंगसह एक .btn
क्लास तयार करते, ज्यामध्ये हॉवर इफेक्टचाही समावेश आहे. हे आपल्या ऍप्लिकेशनमध्ये पुन्हा वापरण्यायोग्यतेला आणि सुसंगततेला प्रोत्साहन देते.
addBase(baseStyles)
addBase
फंक्शनचा वापर टेलविंडच्या स्टाइलशीटमध्ये बेस स्टाइल्स समाविष्ट करण्यासाठी केला जातो. या स्टाइल्स टेलविंडच्या कोणत्याही युटिलिटी क्लासच्या आधी लागू होतात, ज्यामुळे त्या HTML एलिमेंट्ससाठी डीफॉल्ट स्टाइल्स सेट करण्यासाठी किंवा ग्लोबल रिसेट लागू करण्यासाठी उपयुक्त ठरतात.
उदाहरण: ग्लोबल बॉक्स-साइजिंग रिसेट लागू करणे:
module.exports = {
plugins: [
function ({ addBase }) {
const baseStyles = {
'*, ::before, ::after': {
boxSizing: 'border-box',
},
};
addBase(baseStyles);
},
],
};
addVariants(name, variants)
addVariants
फंक्शन आपल्याला नवीन व्हेरिएंट्स परिभाषित करण्याची परवानगी देते जे विद्यमान किंवा कस्टम युटिलिटीजवर लागू केले जाऊ शकतात. व्हेरिएंट्स आपल्याला हॉवर, फोकस, ऍक्टिव्ह, डिसेबल्ड किंवा रिस्पॉन्सिव्ह ब्रेकपॉइंट्स यांसारख्या वेगवेगळ्या स्थितींवर आधारित स्टाइल्स लागू करण्यास सक्षम करतात. डायनॅमिक आणि इंटरॅक्टिव्ह यूजर इंटरफेस तयार करण्याचा हा एक शक्तिशाली मार्ग आहे.
उदाहरण: एलिमेंटची व्हिजिबिलिटी नियंत्रित करण्यासाठी 'visible' व्हेरिएंट तयार करणे:
module.exports = {
plugins: [
function ({ addUtilities, addVariants }) {
const newUtilities = {
'.visible': {
visibility: 'visible',
},
'.invisible': {
visibility: 'hidden',
},
};
addUtilities(newUtilities);
addVariants('visible', ['hover', 'focus']);
},
],
};
हे .visible
आणि .invisible
युटिलिटीज तयार करते आणि नंतर visible
युटिलिटीसाठी hover
आणि focus
व्हेरिएंट्स परिभाषित करते, ज्यामुळे hover:visible
आणि focus:visible
सारखे क्लासेस तयार होतात.
कस्टम युटिलिटी जनरेशनची व्यावहारिक उदाहरणे
चला, फंक्शन्स API चा वापर करून विविध उपयोगांसाठी कस्टम युटिलिटी क्लासेस कसे तयार करता येतील याची काही व्यावहारिक उदाहरणे पाहूया.
१. कस्टम फॉन्ट साइज युटिलिटी तयार करणे
कल्पना करा की आपल्याला अशा फॉन्ट आकाराची आवश्यकता आहे जो टेलविंडच्या डीफॉल्ट फॉन्ट साइज स्केलमध्ये समाविष्ट नाही. आपण फंक्शन्स API वापरून ते सहजपणे जोडू शकता.
module.exports = {
theme: {
extend: {
fontSize: {
'7xl': '5rem',
},
},
},
plugins: [
function ({ addUtilities, theme }) {
const newUtilities = {
'.text-7xl': {
fontSize: theme('fontSize.7xl'),
},
};
addUtilities(newUtilities);
},
],
};
हा कोड एक text-7xl
युटिलिटी क्लास जोडतो जो फॉन्ट आकार 5rem
वर सेट करतो.
२. रिस्पॉन्सिव्ह स्पेसिंग युटिलिटीज तयार करणे
आपण रिस्पॉन्सिव्ह स्पेसिंग युटिलिटीज तयार करू शकता जे स्क्रीनच्या आकारानुसार आपोआप समायोजित होतात. वेगवेगळ्या डिव्हाइसेससाठी अनुकूल लेआउट तयार करण्यासाठी हे विशेषतः उपयुक्त आहे.
module.exports = {
theme: {
extend: {
spacing: {
'72': '18rem',
'84': '21rem',
'96': '24rem',
},
},
},
plugins: [
function ({ addUtilities, theme, variants }) {
const spacing = theme('spacing');
const newUtilities = Object.entries(spacing).reduce((acc, [key, value]) => {
acc[`.my-${key}`] = {
marginTop: value,
marginBottom: value,
};
return acc;
}, {});
addUtilities(newUtilities, variants('margin'));
},
],
};
हे उदाहरण आपल्या थीममध्ये परिभाषित केलेल्या सर्व स्पेसिंग व्हॅल्यूजसाठी .my-*
युटिलिटीज तयार करते आणि मार्जिनसाठी व्हेरिएंट्स सक्षम करते, ज्यामुळे md:my-8
सारख्या रिस्पॉन्सिव्ह व्हेरिएशन्सना परवानगी मिळते.
३. कस्टम ग्रेडियंट युटिलिटी तयार करणे
ग्रेडियंट्स आपल्या डिझाइनमध्ये दृश्यात्मक आकर्षण वाढवू शकतात. आपण फंक्शन्स API वापरून कस्टम ग्रेडियंट युटिलिटी तयार करू शकता.
module.exports = {
theme: {
extend: {
gradientColorStops: {
'brand-primary': '#007bff',
'brand-secondary': '#6610f2',
},
},
},
plugins: [
function ({ addUtilities, theme }) {
const newUtilities = {
'.bg-gradient-brand': {
background: `linear-gradient(to right, ${theme('gradientColorStops.brand-primary')}, ${theme('gradientColorStops.brand-secondary')})`,
},
};
addUtilities(newUtilities);
},
],
};
हा कोड एक .bg-gradient-brand
क्लास तयार करतो जो आपल्या कस्टम ब्रँड रंगांचा वापर करून एक लिनियर ग्रेडियंट लागू करतो.
४. कस्टम बॉक्स शॅडो युटिलिटीज
फंक्शन्स API च्या मदतीने विशिष्ट बॉक्स शॅडो स्टाइल्स सहज तयार करता येतात. हे विशेषतः डिझाइन सिस्टीमसाठी उपयुक्त आहे ज्यांना सुसंगत लुक आणि फील आवश्यक असतो.
module.exports = {
theme: {
extend: {
boxShadow: {
'custom-shadow': '0 4px 12px rgba(0, 0, 0, 0.15)',
},
},
},
plugins: [
function ({ addUtilities, theme }) {
const newUtilities = {
'.shadow-custom': {
boxShadow: theme('boxShadow.custom-shadow'),
},
};
addUtilities(newUtilities);
},
],
};
हे एक .shadow-custom
क्लास जोडते जो निर्दिष्ट कस्टम बॉक्स शॅडो लागू करतो.
फंक्शन्स API वापरण्यासाठी सर्वोत्तम पद्धती
फंक्शन्स API प्रचंड लवचिकता देत असले तरी, एक स्वच्छ आणि सुलभ कोडबेस राखण्यासाठी सर्वोत्तम पद्धतींचे पालन करणे महत्त्वाचे आहे:
- आपली कॉन्फिगरेशन फाइल व्यवस्थित ठेवा: आपला प्रोजेक्ट जसजसा वाढतो, तसतशी आपली
tailwind.config.js
फाइल मोठी आणि अव्यवस्थित होऊ शकते. कमेंट्स वापरा, आपले एक्सटेंशन्स तार्किकदृष्ट्या व्यवस्थित करा आणि आवश्यक असल्यास आपले कॉन्फिगरेशन अनेक फाइल्समध्ये विभागण्याचा विचार करा. - वर्णनात्मक क्लास नावे वापरा: अशी क्लास नावे निवडा जी युटिलिटीचा उद्देश स्पष्टपणे दर्शवतात. यामुळे आपला कोड समजण्यास आणि सांभाळण्यास सोपा होतो.
- थीम कॉन्फिगरेशनचा फायदा घ्या: शक्य असेल तेव्हा, आपल्या प्रोजेक्टमध्ये सुसंगतता सुनिश्चित करण्यासाठी आपल्या थीम कॉन्फिगरेशनमध्ये परिभाषित व्हॅल्यूज वापरा. आपल्या युटिलिटी डेफिनिशन्समध्ये थेट व्हॅल्यूज हार्डकोड करणे टाळा.
- ॲक्सेसिबिलिटीचा विचार करा: कस्टम युटिलिटीज तयार करताना, ॲक्सेसिबिलिटीबद्दल जागरूक रहा. आपल्या युटिलिटीजमुळे अपुरा रंगीत कॉन्ट्रास्ट किंवा पाहण्यास कठीण असलेली फोकस स्टेट्स यांसारख्या ॲक्सेसिबिलिटी समस्या निर्माण होणार नाहीत याची खात्री करा.
- जटिल लॉजिकसाठी प्लगइन्स वापरा: अधिक जटिल युटिलिटी जनरेशन लॉजिकसाठी,
@tailwindcss/plugin
वापरून कस्टम टेलविंड प्लगइन तयार करण्याचा विचार करा. हे आपली कॉन्फिगरेशन फाइल स्वच्छ आणि व्यवस्थित ठेवण्यास मदत करते. - आपल्या कस्टम युटिलिटीजचे दस्तऐवजीकरण करा: जर आपण टीममध्ये काम करत असाल, तर आपल्या कस्टम युटिलिटीजचे दस्तऐवजीकरण करा जेणेकरून इतर डेव्हलपर्सना त्यांचा उद्देश आणि ते कसे वापरावे हे समजेल.
फंक्शन्स API सह डिझाइन सिस्टीम तयार करणे
फंक्शन्स API मजबूत आणि सुलभ डिझाइन सिस्टीम तयार करण्यात महत्त्वपूर्ण भूमिका बजावते. थीम कॉन्फिगरेशनमध्ये आपले डिझाइन टोकन (रंग, टायपोग्राफी, स्पेसिंग) परिभाषित करून आणि नंतर त्या टोकनवर आधारित युटिलिटीज तयार करण्यासाठी फंक्शन्स API वापरून, आपण सुसंगतता सुनिश्चित करू शकता आणि आपल्या डिझाइन लँग्वेजसाठी सत्याचा एकच स्त्रोत तयार करू शकता. हा दृष्टिकोन भविष्यात आपली डिझाइन सिस्टीम अद्यतनित करणे देखील सोपे करतो, कारण थीम कॉन्फिगरेशनमधील बदल त्या व्हॅल्यूज वापरणाऱ्या सर्व युटिलिटीजमध्ये आपोआप प्रसारित होतील.
विशिष्ट स्पेसिंग इन्क्रिमेंट्स असलेल्या डिझाइन सिस्टीमची कल्पना करा. आपण हे आपल्या `tailwind.config.js` मध्ये परिभाषित करू शकता आणि नंतर त्या व्हॅल्यूजवर आधारित मार्जिन, पॅडिंग आणि रुंदीसाठी युटिलिटीज तयार करू शकता. त्याचप्रमाणे, आपण आपला कलर पॅलेट परिभाषित करू शकता आणि बॅकग्राउंड कलर्स, टेक्स्ट कलर्स आणि बॉर्डर कलर्ससाठी युटिलिटीज तयार करू शकता.
मूलभूत गोष्टींच्या पलीकडे: प्रगत तंत्रे
फंक्शन्स API अधिक प्रगत तंत्रांसाठी मार्ग खुला करते, जसे की:
- डेटावर आधारित युटिलिटीज डायनॅमिकली तयार करणे: आपण बाह्य स्रोतावरून (उदा. API) डेटा मिळवू शकता आणि बिल्डच्या वेळी कस्टम युटिलिटीज तयार करण्यासाठी तो डेटा वापरू शकता. यामुळे आपल्याला विशिष्ट सामग्री किंवा डेटासाठी अनुकूल युटिलिटीज तयार करण्याची परवानगी मिळते.
- जावास्क्रिप्ट लॉजिकवर आधारित कस्टम व्हेरिएंट्स तयार करणे: आपण अनेक अटींवर आधारित जटिल व्हेरिएंट्स परिभाषित करण्यासाठी जावास्क्रिप्ट लॉजिक वापरू शकता. यामुळे आपल्याला अत्यंत रिस्पॉन्सिव्ह आणि अनुकूल युटिलिटीज तयार करण्याची परवानगी मिळते.
- इतर साधने आणि लायब्ररीसह एकत्रीकरण: आपण कस्टम वर्कफ्लो तयार करण्यासाठी आणि कार्ये स्वयंचलित करण्यासाठी फंक्शन्स API ला इतर साधने आणि लायब्ररीसह एकत्रित करू शकता. उदाहरणार्थ, आपण आपल्या डिझाइन स्पेसिफिकेशन्सवर आधारित टेलविंड युटिलिटीज स्वयंचलितपणे तयार करण्यासाठी कोड जनरेटर वापरू शकता.
सामान्य चुका आणि त्या कशा टाळाव्यात
- अति-विशिष्टता: खूप विशिष्ट असलेल्या युटिलिटीज तयार करणे टाळा. पुन्हा वापरण्यायोग्य युटिलिटीजचे ध्येय ठेवा ज्या अनेक संदर्भांमध्ये लागू केल्या जाऊ शकतात.
- कार्यक्षमतेच्या समस्या: मोठ्या संख्येने युटिलिटीज तयार केल्याने बिल्डच्या कार्यक्षमतेवर परिणाम होऊ शकतो. आपण किती युटिलिटीज तयार करत आहात याबद्दल सावध रहा आणि शक्य असेल तिथे आपला कोड ऑप्टिमाइझ करा.
- कॉन्फिगरेशनमधील संघर्ष: आपल्या कस्टम युटिलिटीज टेलविंडच्या डीफॉल्ट युटिलिटीज किंवा इतर प्लगइन्समधील युटिलिटीजशी संघर्ष करत नाहीत याची खात्री करा. संघर्ष टाळण्यासाठी युनिक प्रीफिक्स किंवा नेमस्पेस वापरा.
- पर्ज प्रक्रियेकडे दुर्लक्ष करणे: कस्टम युटिलिटीज जोडताना, त्या प्रोडक्शनमध्ये योग्यरित्या पर्ज झाल्या आहेत याची खात्री करा. आपल्या `tailwind.config.js` मधील `purge` सेटिंग्जमध्ये त्या फाइल्सचा समावेश करा जिथे या युटिलिटीज वापरल्या जातात.
टेलविंड CSS आणि फंक्शन्स API चे भविष्य
टेलविंड CSS इकोसिस्टीम सतत विकसित होत आहे, आणि भविष्यात फंक्शन्स API अधिकाधिक महत्त्वाची भूमिका बजावण्याची शक्यता आहे. टेलविंड CSS ची लोकप्रियता वाढत असताना, कस्टमायझेशन आणि एक्सटेन्सिबिलिटीची मागणी फक्त वाढेल. फंक्शन्स API ही मागणी पूर्ण करण्यासाठी आवश्यक साधने प्रदान करते, ज्यामुळे डेव्हलपर्सना खऱ्या अर्थाने अद्वितीय आणि टेलर्ड स्टाइलिंग सोल्यूशन्स तयार करता येतात.
टेलविंड CSS च्या भविष्यातील आवृत्त्यांमध्ये फंक्शन्स API मध्ये आणखी सुधारणा अपेक्षित आहेत, ज्यामुळे ते अधिक शक्तिशाली आणि लवचिक बनेल. यामध्ये थीम कॉन्फिगरेशनमध्ये बदल करण्यासाठी नवीन फंक्शन्स, अधिक जटिल CSS नियम तयार करणे आणि इतर साधने आणि लायब्ररीसह एकत्रीकरण यांचा समावेश असू शकतो.
निष्कर्ष
टेलविंड CSS फंक्शन्स API हे फ्रंट-एंड डेव्हलपर्ससाठी एक गेम-चेंजर आहे ज्यांना आपले टेलविंड कौशल्य पुढील स्तरावर न्यायचे आहे. फंक्शन्स API समजून घेऊन आणि त्याचा वापर करून, आपण कस्टम युटिलिटी क्लासेस तयार करू शकता, विद्यमान थीम्स विस्तारित करू शकता, व्हेरिएंट्स तयार करू शकता आणि शक्तिशाली डिझाइन सिस्टीम तयार करू शकता. हे आपल्याला टेलविंड CSS ला आपल्या विशिष्ट प्रोजेक्टच्या गरजेनुसार अनुकूल करण्यास आणि खरोखरच अद्वितीय आणि दृश्यात्मक आकर्षक यूजर इंटरफेस तयार करण्यास सक्षम करते. फंक्शन्स API ची शक्ती स्वीकारा आणि टेलविंड CSS ची पूर्ण क्षमता अनलॉक करा.
आपण एक अनुभवी टेलविंड CSS वापरकर्ता असाल किंवा नुकतीच सुरुवात करत असाल, फंक्शन्स API एक मौल्यवान साधन आहे जे आपल्याला अधिक कार्यक्षम, सुलभ आणि दृश्यात्मकदृष्ट्या आकर्षक वेब ऍप्लिकेशन्स तयार करण्यात मदत करू शकते. म्हणून, यात सामील व्हा, प्रयोग करा आणि फंक्शन्स API ने देऊ केलेल्या अगणित शक्यता शोधा.