Skip to content

থিম ডেভেলপমেন্ট ​

mineproj থিম হল npm প্যাকেজ যা আপনার সাইটের চেহারা এবং অনুভূতি নিয়ন্ত্রণ করে।

থিম কন্ট্র্যাক্ট ​

একটি থিম হল একটি অবজেক্ট যার নিম্নলিখিত প্রপার্টি রয়েছে:

প্রপার্টিটাইপপ্রয়োজনীয়বর্ণনা
namestring✅অনন্য থিমের নাম
layoutsRecord<string, Component>✅প্রতিটি রুট টাইপের জন্য লেআউট
componentsRecord<string, Component>ঐচ্ছিকপুনঃব্যবহারযোগ্য কম্পোনেন্ট
slotsstring[]ঐচ্ছিকনামযুক্ত ইনসার্শন পয়েন্ট
configSchemaZodSchemaঐচ্ছিকthemeConfig-এর জন্য স্কিমা
localesRecord<string, Record<string, string>>ঐচ্ছিকUI অনুবাদ অভিধান
stylesstring[]ঐচ্ছিকCSS স্ট্রিং যা প্রতিটি পৃষ্ঠার head-এ ইনলাইন করা হয়
headScriptsstring[]ঐচ্ছিকইনলাইন স্ক্রিপ্ট যা পৃষ্ঠার head-ে ইনজেক্ট করা হয়
islandsRecord<string, Component>ঐচ্ছিকইন্টারেক্টিভ কম্পোনেন্ট যা ক্লায়েন্টে হাইড্রেটেড হয়
extendsTheme | stringঐচ্ছিকপ্যারেন্ট থিম যা থেকে উত্তরাধিকার সূত্রে পাওয়া যায়

উদাহরণ ​

ts
import { defineTheme } from '@mineproj/core';

const theme = defineTheme({
  name: 'my-theme',
  layouts: {
    home: ({ data, config }) => (
      <main>
        <h1>{config.title}</h1>
        <ul>
          {data.projects.map(p => <li key={p.slug}>{p.name}</li>)}
        </ul>
      </main>
    ),
  },
  styles: [`:root { --mp-color-accent: #ff5500; }`],
});

export default theme;

লোকাল থিম ব্যবহার করা ​

.mineproj/theme/index.mts তৈরি করুন:

ts
import { defineTheme } from '@mineproj/core';
export default defineTheme({ ... });

তারপর আপনার কনফিগে theme: '.mineproj/theme' সেট করুন।

লেআউট ​

সাতটি প্রয়োজনীয় লেআউট টাইপ:

লেআউটরুটউদ্দেশ্য
home/হিরো, ফিচার্ড প্রকল্প, গ্রিড সহ ল্যান্ডিং পৃষ্ঠা
list/projects/ফিল্টারযোগ্য প্রকল্প গ্রিড
detail/projects/<slug>/সাইডবার সহ প্রকল্পের বিস্তারিত
tag/tags/<name>/ট্যাগ অনুসারে ফিল্টার করা প্রকল্প
collection/collections/<slug>/কিউরেটেড কালেকশন
about/about/লেখকের প্রোফাইল
notFound404.htmlকাস্টম 404 পৃষ্ঠা

আইল্যান্ডস ​

ইন্টারেক্টিভ কম্পোনেন্টগুলো আইল্যান্ড হিসেবে চিহ্নিত করা হয়:

tsx
export function MyCounter({ start }: { start: number }) {
  const [count, setCount] = useState(start);
  return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
}

থিমে রেজিস্টার করুন:

ts
const theme = defineTheme({
  name: 'my-theme',
  layouts: { ... },
  islands: { 'my-counter': MyCounter },
  islandsImport: 'my-theme/islands',
});

কন্ট্র্যাক্ট টেস্টিং ​

ts
import { runThemeContract } from '@mineproj/test-utils';
const result = runThemeContract(myTheme, { requireAllLayouts: true });
console.log(result.errors); // [] if valid

প্রকাশনা ​

  1. আপনার প্যাকেজের নাম mineproj-theme-* বা @scope/mineproj-theme-* দিন
  2. package.json-এ "keywords": ["mineproj-theme"] যোগ করুন
  3. বৈধতা যাচাই করতে runThemeContract চালান
  4. npm-এ প্রকাশ করুন

Released under the Apache-2.0 License.