ចាប់ផ្តើមជាមួយ Lily

ជ្រើសរើសក្របខណ្ឌ ក្លូន monorepo ហើយបើកបណ្ណាល័យគ្មានក្បាល ឬកម្មវិធីគំរូរបស់វា ហើយចាប់ផ្តើមផ្សំទំព័រផ្ទាល់ខ្លួនរបស់អ្នក។ ចូលចិត្តផ្លូវដែលមានការណែនាំ? ចាប់ផ្តើមជាមួយ មេរៀន.

ដំឡើង

Lily រស់នៅក្នុង monorepo Git មួយ ជាមួយថតសម្រាប់បណ្ណាល័យគ្មានក្បាល កញ្ចប់ជំនួយការ និងកម្មវិធីគំរូរបស់ក្របខណ្ឌនីមួយៗ។ វិធីលឿនបំផុតក្នុងការសាកល្បងគឺក្លូន monorepo ហើយបើកបណ្ណាល័យគ្មានក្បាលសម្រាប់ស្ទែករបស់អ្នក៖

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install

លំនាំដូចគ្នាដំណើរការសម្រាប់ក្របខណ្ឌផ្សេងទៀត៖

  • @lilydesignsystem/html-headless — មិនត្រូវការដំឡើងទេ; ចម្លង .html ឯកសារ
  • @lilydesignsystem/svelte-headless — pnpm install
  • @lilydesignsystem/react-headless — pnpm install
  • @lilydesignsystem/vue-headless — pnpm install
  • @lilydesignsystem/angular-headless — pnpm install
  • @lilydesignsystem/nunjucks-headless — pnpm install
  • lily-design-system-blazor-headless — dotnet build

បណ្ណាល័យគ្មានក្បាលត្រូវបានរចនាឱ្យក្លូន ឬ vendor — ចាត់ទុកប្រភពជាប្រភពនៃសេចក្តីពិត ហើយចម្លងអ្វីដែលអ្នកត្រូវការ។ ជំនួយការចំណូលចិត្ត ក៏មកជាកញ្ចប់ដែលអាចដំឡើងបានដោយមានបំពង់សាងសង់ និងផ្សាយ (npm សម្រាប់ក្របខណ្ឌ JS, NuGet សម្រាប់ Blazor)។

ប្រើសមាសភាគគ្មានក្បាល

សមាសភាគគ្មានក្បាលដឹកជញ្ជូន HTML ន័យវិទ្យា ARIA និងលក្ខណៈសម្បត្តិ — ប៉ុន្តែគ្មាន CSS ទេ។ នេះជា Button ក្នុងក្របខណ្ឌនីមួយៗ៖

HTML

<button class="button" type="button" aria-label="Save">
  Save
</button>

Svelte

<script>
  import Button from "lily-design-system-svelte-headless/components/Button/Button.svelte";
</script>

<Button onclick={save}>Save</Button>

React

import Button from "lily-design-system-react-headless/components/Button";

<Button onClick={save}>Save</Button>

Vue

<script setup>
  import Button from "lily-design-system-vue-headless/components/Button.vue";
</script>

<Button @click="save">Save</Button>

Angular

import { Button } from "@lilydesignsystem/angular-headless";

@Component({
  imports: [Button],
  template: `<lily-button (click)="save()">Save</lily-button>`,
})

Blazor

<Button OnClick="Save">Save</Button>

Nunjucks

{% from "components/button/macro.njk" import button %}

{{ button({ text: "Save", type: "button" }) }}

ប្រើឧទាហរណ៍មានរចនាប័ទ្ម

កម្មវិធីគំរូរួមមាន CSS ផ្លូវ និងទំព័របង្ហាញពេញលេញ។ វិធីលឿនបំផុតក្នុងការពិសោធន៍គឺចាប់ផ្តើមកម្មវិធីគំរូ SvelteKit, Next, Nuxt, Analog ឬ Eleventy ហើយមើលការបង្ហាញនៅ /components.

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-sveltekit-examples
pnpm install
pnpm run dev

បន្ទាប់មកបើក http://localhost:5173 ហើយរុករក /components.

រចនាប័ទ្ម និងតូខឹនរចនា

សមាសភាគនីមួយៗបង្ហាញជាមួយថ្នាក់ kebab-case មួយនៅលើធាតុឫសរបស់វា។ ឧទាហរណ៍ <Button> បង្ហាញ <button class="button">។ ដាក់រចនាប័ទ្មវាតាមចិត្ត៖

.button {
  background: var(--my-primary);
  color: #fff;
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
}
.button:hover { background: var(--my-primary-hover); }

ក្បាលពណ៌ Lily លំនាំដើម (ប្រើក្នុងកម្មវិធីគំរូ) គឺ៖

  • ចម្បង៖ #2563eb
  • គ្រោះថ្នាក់៖ #dc2626
  • ការព្រមាន៖ #f59e0b
  • ជោគជ័យ៖ #16a34a
  • ផ្ទៃខាងក្រោយទំព័រ៖ #f9fafb
  • ផ្ទៃខាងក្រោយកាត៖ #ffffff

ទាំងនេះជាការណែនាំ មិនមែនតម្រូវការទេ។ ជំនួសវាដោយក្បាលពណ៌ម៉ាកផ្ទាល់ខ្លួនរបស់អ្នក ហើយ Lily នឹងមកតាមដោយអំណរ។

ស្បែករួចជាស្រេច

មិនចង់សរសេរ CSS ពីសូន្យ? Lily មកជាមួយ ស្បែកយោងឯករាជ្យ ៥៧ ក្នុងថត themes/ ។ នីមួយៗជាសន្លឹករចនាប័ទ្មមួយដែលកំណត់គោលដៅ class hook របស់ Lily — ភ្ជាប់វា ហើយអ្នកមានរចនាប័ទ្ម៖

<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />

សំណុំនេះគ្របដណ្តប់៖

  • វិស័យសាធារណៈ — NHS England, NHS Scotland និង NHS Wales (កំណែសម្រាប់អ្នកជំងឺ និងអ្នកអនុវត្តនីមួយៗ) GOV.UK GDS និង U.S. Web Design System។
  • បំផុសដោយអ្នកលក់ — Adobe Spectrum, Mozilla Protocol។
  • គោលបំណងទូទៅ — light, dark, nord, dracula, wireframe និងប្រហែលសាមសិបទៀត។

ឧបករណ៍ជ្រើសស្បែកប្រើ :where(...)ដូច្នេះ CSS របស់អ្នកឈ្នះជានិច្ចលើភាពជាក់លាក់។ ផ្គូផ្គងពួកវាជាមួយជំនួយការ theme-picker ខាងក្រោមសម្រាប់ការប្តូរពេលដំណើរការ ឬធ្វើតាម មេរៀនស្បែក.

ជំនួយការចំណូលចិត្ត

ក្របខណ្ឌនីមួយៗមានឧបករណ៍ជ្រើសតូចៗប្រាំបី ដែលនីមួយៗនៅក្នុងកញ្ចប់ lily-design-system-{framework}-{package} ផ្ទាល់ខ្លួន (និង picker-bar ដែលផ្គុំពួកវា)។ នីមួយៗជាប៊ូតុងរូបតំណាងគ្មានក្បាលដែលបើកផ្ទាំងលេចឡើង — ប្រអប់បញ្ជី បញ្ជីតំណ ទម្រង់ស្វែងរក ឬ (សម្រាប់ date-time-picker) ប្រអប់ជ្រើសកាលបរិច្ឆេទ — មិនមែនជា <select>ដើមទេ; សុវត្ថិភាព SSR; ហើយមកដោយគ្មាន CSS៖

  • theme-picker — ផ្ទុកសន្លឹករចនាប័ទ្មស្បែកពេលដំណើរការដោយប្តូរ <link>ដែលគ្រប់គ្រង កំណត់ data-theme នៅលើឯកសារ ហើយជាជម្រើសរក្សាទុកទៅ localStorage.
  • locale-picker — កំណត់ lang និង dir (ជាមួយការរកឃើញ RTL ស្វ័យប្រវត្តិ) ដើម្បីឱ្យបណ្ណាល័យ i18n របស់អ្នកអាចតាម; វាមិនបកប្រែដោយខ្លួនឯងទេ។
  • text-size-picker — កំណត់ data-text-size នៅលើឯកសារ; CSS របស់អ្នកផ្គូផ្គងតម្លៃនីមួយៗទៅនឹងទំហំពុម្ពអក្សរ។
  • motion-picker — កំណត់ data-motion នៅលើឯកសារ ចាប់ផ្តើមពីការកំណត់ចលនាថយចុះរបស់អ្នកទស្សនា; CSS និងស្គ្រីបរបស់អ្នកសម្រេចថាអ្វីត្រូវបង្ក្រាប។
  • search-picker — ប៊ូតុងរូបតំណាងដែលបើកវាលស្វែងរក; ការដាក់ស្នើរុករកទៅទំព័រស្វែងរក។ ជាម្ចាស់សកម្មភាពមួយ មិនមែនចំណូលចិត្តទេ។
  • link-picker — រូបតំណាងផ្ទះដែលបើកម៉ឺនុយនៃតំណទំព័រដែលកម្មវិធីរបស់អ្នកកំណត់ (ទំព័រដើម អំពីយើង ទាក់ទងយើង គោលការណ៍ឯកជនភាព …)។ ជាម្ចាស់សកម្មភាពមួយ មិនមែនចំណូលចិត្តទេ។
  • share-picker — បើកសន្លឹកចែករំលែកដើម ឬបញ្ជីគោលដៅដែលអ្នកប្រើប្រាស់ផ្តល់ បូកចម្លង URL។ ជាម្ចាស់សកម្មភាពមួយ មិនមែនចំណូលចិត្តទេ៖ មិនអនុវត្តអ្វី មិនរក្សាទុកអ្វីទេ។
  • date-time-picker — វាលអត្ថបទបូកប្រអប់ជ្រើសកាលបរិច្ឆេទ APG សម្រាប់កាលបរិច្ឆេទ ពេលវេលា ឬទាំងពីរ។ ជាម្ចាស់តម្លៃទម្រង់មួយ មិនមែនចំណូលចិត្តទេ៖ ខ្សែអក្សរ ISO ធ្វើដំណើរទៅមកទៅ <input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker

កាតាឡុក Svelte ជាឯកសារយោងស្តង់ដារ; ច្រកផ្សេងទៀត React, Vue, Angular, HTML, Nunjucks, Web Components និង Blazor ត្រូវគ្នានឹងវាកិច្ចសន្យាដោយកិច្ចសន្យា។ មើល មេរៀនជំនួយការ.

ភាពងាយស្រួលចូលប្រើ

សមាសភាគមានគោលដៅ WCAG 2.2 AAA។ ពួកវាធ្វើតាមលំនាំទាំងនេះ៖

  • ធាតុ HTML ន័យវិទ្យាជាជាងទូទៅ <div>s.
  • <label for="id"> ភ្ជាប់ស្លាកទៅនឹងវាលបញ្ចូល។
  • aria-labelledby / aria-describedby សម្រាប់ឯកសារយោងឆ្លង។
  • aria-invalid + aria-errormessage សម្រាប់ស្ថានភាពកំហុស។
  • role="alert" និង aria-live សម្រាប់មាតិកាថាមវន្ត។
  • aria-pressed, aria-expanded, aria-current សម្រាប់ស្ថានភាព។
  • Roving tabindex សម្រាប់ក្រឡាចត្រង្គ។

សូចនាកររូបតំណាងការផ្តោតត្រូវបានផ្តល់ដោយអ្នកប្រើប្រាស់ដោយចេតនា — Lily មិនដែលគូររង្វង់ផ្តោតលំនាំដើមដែលប៉ះទង្គិចនឹងការរចនារបស់អ្នកទេ។ កម្មវិធីគំរូរក្សា axe-core baseline ស្អាតនៅទូទាំងផ្លូវរបស់វា។

អន្តរជាតិកម្ម

ស្លាកនីមួយៗ អត្ថបទជំនួស សារកំហុស និងអត្ថបទប៊ូតុងជាលក្ខណៈសម្បត្តិ។ គ្មានអក្សរសរសេរជាប់ក្នុងកូដទេ។ ដាក់ក្របខណ្ឌបកប្រែដែលអ្នកចូលចិត្ត — Paraglide, i18next, vue-i18n, react-intl, ឯកសារ .resx អ្វីក៏បាន។

សម្រាប់កាលបរិច្ឆេទ លេខ និងរូបិយប័ណ្ណ សមាសភាគទទួលខ្សែអក្សរដែលបានធ្វើទ្រង់ទ្រាយរួច៖ អ្នកធ្វើទ្រង់ទ្រាយជាមួយ Intl.DateTimeFormat / Intl.NumberFormat / បណ្ណាល័យដែលអ្នកចូលចិត្ត ហើយបញ្ជូនលទ្ធផល។

ជំនួយការ locale-picker ផ្តល់សញ្ញាតំបន់ភាសាដែលបានជ្រើសរើសដល់បណ្ណាល័យ i18n របស់អ្នកដោយកំណត់ lang និង dir នៅលើឫសឯកសារ។

ការធ្វើតេស្ត

ក្របខណ្ឌគម្រោងរងនីមួយៗដឹកជញ្ជូនតេស្តផ្ទាល់ខ្លួនដោយប្រើស្ទែកបែបតាមមាត់របស់វា៖

  • HTML៖ WebDriverIO ដំណើរការកម្មវិធីរុករកពិតប្រាកដ។
  • Svelte៖ Vitest + @testing-library/svelte.
  • React៖ Vitest + @testing-library/react.
  • Vue៖ Vitest + @testing-library/vue.
  • Angular៖ Vitest + TestBed (តាមរយៈ Analog Vite plugin)។
  • Nunjucks៖ Vitest ជាមួយជំនួយការបង្ហាញ។
  • Blazor៖ bUnit។

តេស្តប្រើ តែ matcher ដែលភ្ជាប់មកជាមួយរបស់ Vitest ប៉ុណ្ណោះ — មិនដែល jest-dom matcher ទេ។ នេះរក្សាសំណុំតេស្តឱ្យអាចចល័តបាន។ កម្មវិធីគំរូបន្ថែមសំណុំ Playwright ពីចុងដល់ចុង baseline ភាពងាយស្រួលចូលប្រើ axe-core និងការស្កេន viewport ឆ្លើយតប។

ភ្នាក់ងារ AI

គេហទំព័រនេះបោះពុម្ព llms.txt និង llms.json នៅឫសរបស់វា — ផែនទីជ្រើសរើសនៃទំព័រសំខាន់បំផុតរបស់វា សម្រាប់ឧបករណ៍ណាមួយដែលធ្វើតាម អនុសញ្ញា llms.txt.

monorepo ស្តង់ដារក៏ដឹកជញ្ជូនពីរ Claude Skills: lily-design-system-skillជំនាញទូទៅដែលគ្របដណ្តប់គំនិត វាក្យស័ព្ទ និងលំនាំនៃការផ្សំរបស់ Lily សម្រាប់អ្នកដែលសាងសង់ជាមួយប្រព័ន្ធ និង lily-design-system-maintainer-skillជំនាញបច្ចេកទេសដែលគ្របដណ្តប់ប្លង់ឯកសារតម្រូវ និងឧបករណ៍របស់ monorepo សម្រាប់អ្នកដែលធ្វើការលើវា។ ទាំងពីរស្ថិតនៅឫសនៃ monorepo ស្តង់ដារ.

ការដោះស្រាយបញ្ហា

សមាសភាគបង្ហាញប៉ុន្តែមើលទៅគ្មានរចនាប័ទ្ម

នោះគឺជាគ្មានក្បាលដំណើរការតាមការរំពឹង — គ្មាន CSS មកជាមួយសមាសភាគទេ។ ឬសរសេរ CSS ប្រឆាំងនឹងថ្នាក់ kebab-case របស់សមាសភាគ (បង្ហាញនៅលើ ទំព័រកាតាឡុកនីមួយៗ) ឬភ្ជាប់មួយក្នុងចំណោម ស្បែករួចជាស្រេច ៥៧.

CSS របស់ខ្ញុំហាក់ដូចជាមិនអនុវត្តលើស្បែកទេ

វាគួរតែអនុវត្ត — ឧបករណ៍ជ្រើសស្បែកត្រូវបានរុំក្នុង :where(...)ដែលមានភាពជាក់លាក់សូន្យ។ ប្រសិនបើច្បាប់នៅតែចាញ់ សូមពិនិត្យថាសន្លឹករចនាប័ទ្មរបស់អ្នកផ្ទុកបន្ទាប់ពីរបស់ស្បែក <link> ហើយថាឧបករណ៍ជ្រើសពិតជាត្រូវនឹង class hook របស់សមាសភាគ។

pnpm install បរាជ័យដោយមានកំហុស peer ឬកំណែ

ប្រើ pnpm បច្ចុប្បន្ន (v10+) និង Node 22+។ គម្រោងរងនីមួយៗខ្ទាស់កំណែក្របខណ្ឌរបស់វាក្នុង package.jsonផ្ទាល់ខ្លួន; ប្រសិនបើ toolchain សកលរបស់អ្នកចាស់ជាងនេះ pnpm env use --global lts គឺជាដំណោះស្រាយលឿនបំផុត។

កម្មវិធីអានអេក្រង់ប្រកាសឈ្មោះខុសសម្រាប់ការគ្រប់គ្រង

ពិនិត្យលក្ខណៈសម្បត្តិតម្រូវរបស់សមាសភាគ label — សមាសភាគដែលគ្មានអត្ថបទមើលឃើញត្រូវការមួយ ហើយ aria-label / aria-labelledby ដែលអ្នកប្រើប្រាស់ផ្តល់ដែលបញ្ជូនតាម rest-props ឈ្នះដោយចេតនាលើខ្សែភ្ជាប់ដែលភ្ជាប់មកស្រាប់។ ទំព័រកាតាឡុកនីមួយៗចងក្រងឯកសារកិច្ចសន្យា ARIA របស់សមាសភាគ។

ជំនួយការ theme-picker មិនប្តូរសន្លឹករចនាប័ទ្មទេ

បញ្ជាក់ថា themesUrl ចង្អុលទៅថតដែលកម្មវិធីរុករកអាចទាញយក (បម្រើ themes/ ឯកសារជាទ្រព្យឋិតិត) ហើយថា slug ស្បែកក្នុង themes លក្ខណៈសម្បត្តិត្រូវនឹងឈ្មោះឯកសារ។ ជំនួយការប្តូរ href នៃមួយ <link data-lily-theme-picker> ដែលគ្រប់គ្រង — ពិនិត្យវាក្នុង devtools ដើម្បីមើល URL ដែលកំពុងស្នើសុំ។

មានអ្វីផ្សេងទៀតខូច

បើក issue ជាមួយការផលិតឡើងវិញតិចតួចបំផុតនៅ github.com/LilyDesignSystem/lily-design-system — ឬមើល សហគមន៍ និងការគាំទ្រ.

ការចូលរួមចំណែក

Lily នៅវ័យក្មេង ហើយស្វាគមន៍ការសហការ។ ការចូលរួមចំណែកមានប្រយោជន៍បំផុតនៅពេលនេះគឺ៖

  • សមាសភាគថ្មី (ជាពិសេសលំនាំពីប្រព័ន្ធរចនាដែលបានបង្កើតឡើង)។
  • ស្បែកថ្មី — នីមួយៗជាសន្លឹករចនាប័ទ្មឯករាជ្យមួយ PR ដំបូងដែលមានវិសាលភាពល្អ។
  • រចនាប័ទ្មឧទាហរណ៍ល្អជាងមុន — បង្ហាញអ្វីដែលអាចធ្វើបាន។
  • ការបកប្រែអក្សរកម្មវិធីគំរូ។
  • របាយការណ៍កំហុសជាមួយការផលិតឡើងវិញតិចតួចបំផុត។
  • សវនកម្មភាពងាយស្រួលចូលប្រើជាមួយកម្មវិធីអានអេក្រង់ និងបច្ចេកវិទ្យាជំនួយ។

បើក issue និង PR នៅ github.com/LilyDesignSystem/lily-design-system.

សហគមន៍ និងការគាំទ្រ

  • សំណួរ និងរបាយការណ៍កំហុស — បើក issue នៅ github.com/LilyDesignSystem/lily-design-system.
  • អ៊ីមែល — អ្នកថែទាំអាន joel@joelparkerhenderson.com ហើយស្វាគមន៍ការសហការ ការណែនាំ និងមតិកែលម្អ។
  • កញ្ចក់ — Lily ក៏ត្រូវបានរុញទៅ Codeberg និង GitLabដូច្នេះអ្នកអាចចូលរួមពី forge ដែលអ្នកចូលចិត្ត។
  • អាកប្បកិរិយា — គម្រោងធ្វើតាមក្រមប្រតិបត្តិស្តង់ដារ; សូមមានចិត្តល្អ សន្មត់ថាមានចេតនាល្អ។

សំណួរញឹកញាប់

ហេតុអ្វីគ្មានក្បាលជំនួសឱ្យមានរចនាប័ទ្ម?

សមាសភាគមានរចនាប័ទ្មជាមុនងាយស្រួល — រហូតដល់ពួកវាមិនត្រូវនឹងម៉ាករបស់អ្នក។ សមាសភាគគ្មានក្បាលត្រូវការការងារបន្ថែមបន្តិចនៅពេលដំបូង ប៉ុន្តែផ្តល់ឱ្យអ្នកនូវការគ្រប់គ្រងពេញលេញលើការរចនាដែលមើលឃើញ។ កម្មវិធីគំរូ និងស្បែក ៥៧ បង្ហាញវិធីដាក់រចនាប័ទ្មពួកវា; អ្នកអាចយកវា ឬជំនួសវាទាំងស្រុង។ អំណះអំណាងវែងជាងនេះគឺនៅលើ ហេតុអ្វី Lily.

ហេតុអ្វីមានសមាសភាគច្រើនម្ល៉េះ?

Lily មានគោលបំណងគ្របដណ្តប់លំនាំដែលកម្មវិធីភាគច្រើនត្រូវការ ដោយមិនបង្ខំអ្នកឱ្យសាងសង់ពីសូន្យ — រួមទាំងរឿងជ្រៅៗដូចជាការបញ្ចូលអត្តសញ្ញាណជាតិ និង scrollytelling វិចារណកថា។ កាតាឡុកទាញយកពីប្រព័ន្ធរចនាដែលបានបង្កើតឡើងមួយឌូហ្សែន បូកការងារដើម — មើល អំពី.

តើខ្ញុំអាចប្រើ Lily ជាមួយ Tailwind បានទេ?

បាន។ សមាសភាគនីមួយៗបង្ហាញថ្នាក់ឫស kebab-case មួយ បូក className / classដែលអ្នកប្រើប្រាស់ផ្តល់។ ដាក់ឧបករណ៍ប្រើប្រាស់ Tailwind នៅលើតាមចិត្ត។

តើខ្ញុំអាចប្រើ Lily ជាមួយក្របខណ្ឌ CSS ន័យវិទ្យាដូចជា DaisyUI បានទេ?

បាន។ ឈ្មោះថ្នាក់ kebab-case លើធាតុឫសដំណើរការជា CSS hook ន័យវិទ្យា។ ផ្គូផ្គង Lily ជាមួយក្របខណ្ឌន័យវិទ្យា ហើយអ្នកទទួលបានសមាសភាគមានរចនាប័ទ្មជាមុនដែលនៅតែគោរព ARIA និង i18n។

តើមានកញ្ចប់ npm ទេ?

ជំនួយការ ជំនួយការចំណូលចិត្ត ដឹកជញ្ជូនជាកញ្ចប់ដោយមានបំពង់ផ្សាយ npm/NuGet។ បណ្ណាល័យសមាសភាគគ្មានក្បាលត្រូវបានរចនាឱ្យក្លូន ឬ vendor — ប្រភពគឺជាអ្វីដែលត្រូវប្រគល់ ដូច្នេះអ្នកអាចអាន កាត់ និងជាម្ចាស់ចំពោះអ្វីដែលអ្នកដឹកជញ្ជូន។ ការផ្សាយក្នុងបញ្ជីសម្រាប់បណ្ណាល័យគ្មានក្បាលនៅតែស្ថិតក្នុងផែនទីបង្ហាញផ្លូវ។

ហេតុអ្វីមានអាជ្ញាប័ណ្ណច្រើន?

គម្រោងផ្សេងគ្នាមានតម្រូវការអាជ្ញាប័ណ្ណខុសគ្នា។ BSD និង MIT អនុញ្ញាត Apache-2.0 មានការផ្តល់ប៉ាតង់ ហើយជម្រើស GPL គាំទ្រ copyleft។ ជ្រើសរើសអ្វីដែលសមនឹងស្ថានភាពរបស់អ្នក។

តើខ្ញុំរាយការណ៍កំហុស ឬស្នើសុំមុខងារដោយរបៀបណា?

បើក issue នៅលើឃ្លាំង GitHub ឬផ្ញើអ៊ីមែលទៅ joel@joelparkerhenderson.com.