[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D251THE9RYJC3PX43FGZC2":3,"skill-same:01M6D251THE9RYJC3PX43FGZC2":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":53,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6D251THE9RYJC3PX43FGZC2","research-libraries",null,"Choosing a dependency: whether a library is needed at all, finding candidates, comparing them on fit, maintenance, adoption, licence, size, types, security history and API quality, trying the top one or two in a few minutes, and recommending with the trade-offs and the rejected options. Read before recommending or adding a library.","enowdev\u002Fenowxcli","enowdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F179420349?v=4","01M6D1MVX2KC0X3Z9NESE7P22K","Enow Dev.","01M6D1MW1FMZGBDKWAJY4GQX81",67,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fresearch-libraries\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42],"research","libraries","research libraries","security","library","adoption","api","quality","history","read","dependency","maintenance","options","trade","2026-11-10 10:12:30",false,"---\nname: research-libraries\ndescription: \"Choosing a dependency: whether a library is needed at all, finding candidates, comparing them on fit, maintenance, adoption, licence, size, types, security history and API quality, trying the top one or two in a few minutes, and recommending with the trade-offs and the rejected options. Read before recommending or adding a library.\"\n---\n\n# Choosing a dependency\n\nThe naive pick is the first search result or a name remembered from\ntraining, chosen by its stars: a whole date library with every locale for\none formatted date, an abandoned package with an install script, a GPL\nlicence inside a closed product, no alternative looked at, and no way out\nlater. A dependency is code you ship and maintain without having written it.\nThis is how to decide whether you need one, compare two or three on dated\nfacts, try the favourite, and recommend it with what was rejected and why.\nWhere the facts about packages live online is `research-web`.\n\n## 1. First: is a library needed?\n\n- The platform may already do it. For example:\n  - JavaScript: `fetch`, `structuredClone`, `crypto.randomUUID()`, `URL` and\n    `URLSearchParams`, `AbortController`, `Intl` (dates, numbers, plurals,\n    lists, relative time, `Segmenter` for graphemes), `Object.groupBy`,\n    `Array.prototype.toSorted`; in Node, `node:test` and `util.parseArgs`.\n  - Python: `pathlib`, `dataclasses`, `zoneinfo`, `tomllib`, `argparse`,\n    `itertools.batched` (3.12), `asyncio.TaskGroup` (3.11).\n  - Go: `slices`, `maps` and `log\u002Fslog` (1.21), methods and wildcards in\n    `net\u002Fhttp` route patterns (1.22).\n  - Rust: `std::sync::OnceLock` (1.70) and `LazyLock` (1.80) in place of\n    `lazy_static` and `once_cell`.\n- The project may already have one: search the lockfile before adding a\n  second date, HTTP or validation library.\n- Write it yourself when it is small, stable and easy to get right (a\n  `clamp`, an ASCII slug, a retry loop). Take a library when the domain is\n  full of edge cases: cryptography, time zones and calendars, parsing (CSV\n  with quotes, HTML sanitising, Markdown, URLs), Unicode, authentication\n  protocols, anything security-sensitive.\n- When the project or its framework already names a choice (`frontend`,\n  the `backend-stack-*` skills), that choice wins over a fresh comparison.\n\n## 2. The requirement, then the candidates\n\n- Write the requirement in one sentence with the case that matters most:\n  \"format and parse dates in the user's time zone, DST changes included,\n  in the browser and on Node 22\". Every candidate is judged against it.\n- Two or three candidates, not ten, from: the framework's docs (its\n  recommended integrations and recipes), what mature projects on the same\n  stack use (read their manifests), the registry's search, and curated\n  lists as leads.\n\n## 3. Compare on facts\n\n| Criterion | What to find out | Where | Warning sign |\n|---|---|---|---|\n| Fit | the requirement, hard case included; runs where the project runs (Node version, browsers, edge runtimes, Bun or Deno, the OS) | docs, types, a trial | needs a polyfill or another runtime |\n| Maintenance | last release and its date, commits in the last six months, issues answered, pull requests merged, active maintainers | repository, registry | archived; no release in two years with bugs open |\n| Adoption | weekly downloads, dependents, projects you know that use it | registry, deps.dev | tiny use for a critical job |\n| Licence | MIT, Apache-2.0, BSD and ISC suit most projects; LGPL with care; GPL and AGPL in closed or hosted software need the owner's decision; SSPL, BSL and Commons Clause terms are not open source | `LICENSE` at the version, `license` in the manifest | missing, custom, or changed recently |\n| Size | frontend: the gzipped cost of what you import, tree-shaking (ESM, `sideEffects: false`); elsewhere: transitive dependencies, native builds, compile time | bundlephobia or pkg-size, `npm ls`, `cargo tree`, deps.dev | a large bundle for a small job; a native build step |\n| Types | built in (`types` in `package.json`, `py.typed`) or a maintained `@types\u002F` package | manifest, repository | `any` at the surface |\n| Security | past advisories and how fast they were fixed, install scripts, provenance, the OpenSSF Scorecard | osv.dev, GitHub advisories, deps.dev | unfixed advisories; a `postinstall` that downloads |\n| API and docs | clear, versioned docs with examples, a changelog, migration guides | the docs site | breaking changes in every minor |\n| Way out | can you reach the layer below it, swap it, keep your data format | docs | owns your data format or your architecture |\n\n- Stars measure attention at some moment, not health: weigh them least.\n- Record each fact with its source and date (\"4.1.0 released 2026-08-12,\n  npm\"), never an adjective (\"actively maintained\").\n\n## 4. Fit with the project\n\n- The latest stable release, not an alpha, beta, rc or canary, unless the\n  feature exists only there; then it is a risk named in the recommendation.\n- `peerDependencies` against the project's framework major (React, Vue,\n  ESLint), and `engines` against its Node version.\n- Module format: an ESM-only package in a CommonJS project needs `import()`,\n  or a Node recent enough to `require()` an ES module (22.12 and later).\n  Read `type` and `exports` in its `package.json`.\n- Python: `requires-python`, and wheels for every platform the project\n  runs on (without one, the install compiles from source). Rust: its\n  `rust-version` against the project's toolchain. Go: its `go` directive.\n- Duplicates: a second major of a library already in the tree ships both;\n  `npm ls \u003Cpkg>` and `cargo tree -d` show them.\n\n## 5. Red flags\n\n- Abandoned: archived, no release in two years with security issues open, a\n  maintainer asking for someone to take over.\n- One inactive maintainer on something critical.\n- Install scripts (`preinstall`, `install`, `postinstall`) that download or\n  run binaries; read the package's `scripts`.\n- A dependency tree far larger than the job.\n- A breaking change in every release, or no changelog at all.\n- A name one letter from a popular package, a missing or mismatched\n  repository link, a new package with a sudden jump in downloads.\n- Minified or obfuscated code in a package that should be readable.\n- Ownership transferred recently, followed by a burst of releases.\n- A licence changed away from open source. For infrastructure that did\n  this (Terraform, Redis, Elasticsearch), compare the current licence with\n  the community fork (OpenTofu, Valkey, OpenSearch) before choosing.\n\n## 6. Try the favourite in fifteen minutes\n\nWith a shell that may install, in a scratch folder outside the project:\n\n```sh\nmkdir -p \u002Ftmp\u002Ftry-dates && cd \u002Ftmp\u002Ftry-dates && npm init -y >\u002Fdev\u002Fnull\nnpm i date-fns@4\nnode --input-type=module -e 'import { format } from \"date-fns\";\n  console.log(format(new Date(2026, 8, 29), \"d MMM yyyy\"))'        # 29 Sep 2026\necho 'export { format } from \"date-fns\"' > entry.mjs\nnpx esbuild entry.mjs --bundle --minify --format=esm | gzip -c | wc -c   # bytes shipped\n\nuv run --with httpx python -c 'import httpx; print(httpx.__version__)'  # Python, throwaway env\ncargo new \u002Ftmp\u002Ftry-x && cd \u002Ftmp\u002Ftry-x && cargo add \u003Ccrate> && cargo tree | wc -l\n```\n\n- Try the main use and the hard case from the requirement (a DST change for\n  dates, a 500 MB file for a parser, a timeout for an HTTP client), and the\n  error it gives when misused.\n- Measure what you ship, not the package's full size: the bundle of what\n  you import, or the dependency count after install.\n- Agents that cannot install (`research`, `review`, the orchestrator) read\n  instead: the README's examples, the types (`index.d.ts`), the\n  repository's tests for the hard case. Their recommendation says the trial\n  is still to be done, and gives these commands.\n\n## 7. The recommendation\n\n```\nPick: \u003Cname> \u003Cversion> (\u003Clicence>)\nWhy: \u003Chow it meets the requirement, hard case included>;\n  \u003Cmaintenance facts with dates>; \u003Csize, measured or reported, with source>\nRunner-up: \u003Cname>: better at \u003Cx>; not chosen because \u003Cy>\nRejected: \u003Cname> (archived \u003Cdate>), \u003Cname> (AGPL-3.0),\n  \u003Cname> (\u003Cn> kB gzipped for one function)\nWithout a library: \u003Cwhat the platform offers, and where it falls short>\nRisks: \u003Cone maintainer, a major in beta, a native build>; to replace it\n  later, keep its imports in one module (\u003Cpath>)\nEvidence: \u003Cregistry and repository URLs> read on \u003Cdate>; trial: \u003Coutput, or not run>\n```\n\n- Facts with dates and sources, not adjectives.\n- The runner-up and the rejected are part of the answer: they show a choice\n  was made, and save the next person from making it again.\n- Say when the honest answer is \"no library\": the platform covers it, or the\n  code is ten lines.\n\n## 8. After it is added\n\n- Installed with the project's package manager, so the lockfile changes in\n  the same commit; one package manager per project.\n- A replaceable library is imported in one module that the rest of the code\n  calls, so replacing it later touches one file. Frameworks are not wrapped.\n- Updates arrive through Renovate or Dependabot with the project's\n  grouping, where it has them; majors are read, not merged blind.\n- A security or licence review, if the project has one, sees it before it\n  ships (`security-supply-chain`).\n\n## Check it\n\n- The requirement is one sentence with its hard case, written before the\n  comparison.\n- Every criterion has a fact, a source and a date.\n- The licence was read from the `LICENSE` file at the version, not only\n  the registry's field.\n- The trial ran, or the recommendation says it did not and gives the\n  commands.\n- The platform alternative was considered and its limit stated.\n\n## Avoid\n\nPicking by stars or from memory; a library for a few lines; a second\nlibrary for what an installed one already does; abandoned packages and\nsurprise install scripts; GPL or AGPL added without the owner's decision;\nbundle size ignored for frontend code; adjectives instead of dated facts; a\nrecommendation with no runner-up and no rejected options; adapters around\nframeworks.\n","# Choosing a dependency\n\nThe naive pick is the first search result or a name remembered from\ntraining, chosen by its stars: a whole date library with every locale for\none formatted date, an abandoned package with an install script, a GPL\nlicence inside a closed product, no alternative looked at, and no way out\nlater. A dependency is code you ship and maintain without having written it.\nThis is how to decide whether you need one, compare two or three on dated\nfacts, try the favourite, and recommend it with what was rejected and why.\nWhere the facts about packages live online is `research-web`.\n\n## 1. First: is a library needed?\n\n- The platform may already do it. For example:\n  - JavaScript: `fetch`, `structuredClone`, `crypto.randomUUID()`, `URL` and\n    `URLSearchParams`, `AbortController`, `Intl` (dates, numbers, plurals,\n    lists, relative time, `Segmenter` for graphemes), `Object.groupBy`,\n    `Array.prototype.toSorted`; in Node, `node:test` and `util.parseArgs`.\n  - Python: `pathlib`, `dataclasses`, `zoneinfo`, `tomllib`, `argparse`,\n    `itertools.batched` (3.12), `asyncio.TaskGroup` (3.11).\n  - Go: `slices`, `maps` and `log\u002Fslog` (1.21), methods and wildcards in\n    `net\u002Fhttp` route patterns (1.22).\n  - Rust: `std::sync::OnceLock` (1.70) and `LazyLock` (1.80) in place of\n    `lazy_static` and `once_cell`.\n- The project may already have one: search the lockfile before adding a\n  second date, HTTP or validation library.\n- Write it yourself when it is small, stable and easy to get right (a\n  `clamp`, an ASCII slug, a retry loop). Take a library when the domain is\n  full of edge cases: cryptography, time zones and calendars, parsing (CSV\n  with quotes, HTML sanitising, Markdown, URLs), Unicode, authentication\n  protocols, anything security-sensitive.\n- When the project or its framework already names a choice (`frontend`,\n  the `backend-stack-*` skills), that choice wins over a fresh comparison.\n\n## 2. The requirement, then the candidates\n\n- Write the requirement in one sentence with the case that matters most:\n  \"format and parse dates in the user's time zone, DST changes included,\n  in the browser and on Node 22\". Every candidate is judged against it.\n- Two or three candidates, not ten, from: the framework's docs (its\n  recommended integrations and recipes), what mature projects on the same\n  stack use (read their manifests), the registry's search, and curated\n  lists as leads.\n\n## 3. Compare on facts\n\n| Criterion | What to find out | Where | Warning sign |\n|---|---|---|---|\n| Fit | the requirement, hard case included; runs where the project runs (Node version, browsers, edge runtimes, Bun or Deno, the OS) | docs, types, a trial | needs a polyfill or another runtime |\n| Maintenance | last release and its date, commits in the last six months, issues answered, pull requests merged, active maintainers | repository, registry | archived; no release in two years with bugs open |\n| Adoption | weekly downloads, dependents, projects you know that use it | registry, deps.dev | tiny use for a critical job |\n| Licence | MIT, Apache-2.0, BSD and ISC suit most projects; LGPL with care; GPL and AGPL in closed or hosted software need the owner's decision; SSPL, BSL and Commons Clause terms are not open source | `LICENSE` at the version, `license` in the manifest | missing, custom, or changed recently |\n| Size | frontend: the gzipped cost of what you import, tree-shaking (ESM, `sideEffects: false`); elsewhere: transitive dependencies, native builds, compile time | bundlephobia or pkg-size, `npm ls`, `cargo tree`, deps.dev | a large bundle for a small job; a native build step |\n| Types | built in (`types` in `package.json`, `py.typed`) or a maintained `@types\u002F` package | manifest, repository | `any` at the surface |\n| Security | past advisories and how fast they were fixed, install scripts, provenance, the OpenSSF Scorecard | osv.dev, GitHub advisories, deps.dev | unfixed advisories; a `postinstall` that downloads |\n| API and docs | clear, versioned docs with examples, a changelog, migration guides | the docs site | breaking changes in every minor |\n| Way out | can you reach the layer below it, swap it, keep your data format | docs | owns your data format or your architecture |\n\n- Stars measure attention at some moment, not health: weigh them least.\n- Record each fact with its source and date (\"4.1.0 released 2026-08-12,\n  npm\"), never an adjective (\"actively maintained\").\n\n## 4. Fit with the project\n\n- The latest stable release, not an alpha, beta, rc or canary, unless the\n  feature exists only there; then it is a risk named in the recommendation.\n- `peerDependencies` against the project's framework major (React, Vue,\n  ESLint), and `engines` against its Node version.\n- Module format: an ESM-only package in a CommonJS project needs `import()`,\n  or a Node recent enough to `require()` an ES module (22.12 and later).\n  Read `type` and `exports` in its `package.json`.\n- Python: `requires-python`, and wheels for every platform the project\n  runs on (without one, the install compiles from source). Rust: its\n  `rust-version` against the project's toolchain. Go: its `go` directive.\n- Duplicates: a second major of a library already in the tree ships both;\n  `npm ls \u003Cpkg>` and `cargo tree -d` show them.\n\n## 5. Red flags\n\n- Abandoned: archived, no release in two years with security issues open, a\n  maintainer asking for someone to take over.\n- One inactive maintainer on something critical.\n- Install scripts (`preinstall`, `install`, `postinstall`) that download or\n  run binaries; read the package's `scripts`.\n- A dependency tree far larger than the job.\n- A breaking change in every release, or no changelog at all.\n- A name one letter from a popular package, a missing or mismatched\n  repository link, a new package with a sudden jump in downloads.\n- Minified or obfuscated code in a package that should be readable.\n- Ownership transferred recently, followed by a burst of releases.\n- A licence changed away from open source. For infrastructure that did\n  this (Terraform, Redis, Elasticsearch), compare the current licence with\n  the community fork (OpenTofu, Valkey, OpenSearch) before choosing.\n\n## 6. Try the favourite in fifteen minutes\n\nWith a shell that may install, in a scratch folder outside the project:\n\n```sh\nmkdir -p \u002Ftmp\u002Ftry-dates && cd \u002Ftmp\u002Ftry-dates && npm init -y >\u002Fdev\u002Fnull\nnpm i date-fns@4\nnode --input-type=module -e 'import { format } from \"date-fns\";\n  console.log(format(new Date(2026, 8, 29), \"d MMM yyyy\"))'        # 29 Sep 2026\necho 'export { format } from \"date-fns\"' > entry.mjs\nnpx esbuild entry.mjs --bundle --minify --format=esm | gzip -c | wc -c   # bytes shipped\n\nuv run --with httpx python -c 'import httpx; print(httpx.__version__)'  # Python, throwaway env\ncargo new \u002Ftmp\u002Ftry-x && cd \u002Ftmp\u002Ftry-x && cargo add \u003Ccrate> && cargo tree | wc -l\n```\n\n- Try the main use and the hard case from the requirement (a DST change for\n  dates, a 500 MB file for a parser, a timeout for an HTTP client), and the\n  error it gives when misused.\n- Measure what you ship, not the package's full size: the bundle of what\n  you import, or the dependency count after install.\n- Agents that cannot install (`research`, `review`, the orchestrator) read\n  instead: the README's examples, the types (`index.d.ts`), the\n  repository's tests for the hard case. Their recommendation says the trial\n  is still to be done, and gives these commands.\n\n## 7. The recommendation\n\n```\nPick: \u003Cname> \u003Cversion> (\u003Clicence>)\nWhy: \u003Chow it meets the requirement, hard case included>;\n  \u003Cmaintenance facts with dates>; \u003Csize, measured or reported, with source>\nRunner-up: \u003Cname>: better at \u003Cx>; not chosen because \u003Cy>\nRejected: \u003Cname> (archived \u003Cdate>), \u003Cname> (AGPL-3.0),\n  \u003Cname> (\u003Cn> kB gzipped for one function)\nWithout a library: \u003Cwhat the platform offers, and where it falls short>\nRisks: \u003Cone maintainer, a major in beta, a native build>; to replace it\n  later, keep its imports in one module (\u003Cpath>)\nEvidence: \u003Cregistry and repository URLs> read on \u003Cdate>; trial: \u003Coutput, or not run>\n```\n\n- Facts with dates and sources, not adjectives.\n- The runner-up and the rejected are part of the answer: they show a choice\n  was made, and save the next person from making it again.\n- Say when the honest answer is \"no library\": the platform covers it, or the\n  code is ten lines.\n\n## 8. After it is added\n\n- Installed with the project's package manager, so the lockfile changes in\n  the same commit; one package manager per project.\n- A replaceable library is imported in one module that the rest of the code\n  calls, so replacing it later touches one file. Frameworks are not wrapped.\n- Updates arrive through Renovate or Dependabot with the project's\n  grouping, where it has them; majors are read, not merged blind.\n- A security or licence review, if the project has one, sees it before it\n  ships (`security-supply-chain`).\n\n## Check it\n\n- The requirement is one sentence with its hard case, written before the\n  comparison.\n- Every criterion has a fact, a source and a date.\n- The licence was read from the `LICENSE` file at the version, not only\n  the registry's field.\n- The trial ran, or the recommendation says it did not and gives the\n  commands.\n- The platform alternative was considered and its limit stated.\n\n## Avoid\n\nPicking by stars or from memory; a library for a few lines; a second\nlibrary for what an installed one already does; abandoned packages and\nsurprise install scripts; GPL or AGPL added without the owner's decision;\nbundle size ignored for frontend code; adjectives instead of dated facts; a\nrecommendation with no runner-up and no rejected options; adapters around\nframeworks.\n",{"name":5,"description":7},"main","38293fe1b096e6bf3646c7344c38786ed688f464","crates\u002Fenowx-core\u002Fskills\u002Fresearch-libraries",21,"https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli","https:\u002F\u002Fenowx.ai","https:\u002F\u002Fgithub.com\u002Fenowdev","Pretending to be a Developer","2026-10-06 02:05:35",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add enowdev\u002Fenowxcli --skill research-libraries",{"tool":63,"command":64},"bunx","bunx skills add enowdev\u002Fenowxcli --skill research-libraries",{"tool":66,"command":67},"pnpm","pnpm dlx skills add enowdev\u002Fenowxcli --skill research-libraries","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fresearch-libraries\u002FSKILL.md",true,[],[72,86,109,125,150,172],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":43},"01M6D2HQYSQD9N7MTNDT4A7CBM","demo-skill","Project-scope demo skill for tests.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fworkspace\u002F.agents\u002Fskills\u002Fdemo-skill\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[82,83,84,85,38],"demo skill","demo","tests","project",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":98,"publishedAt":43},"01M6D2HM0GCPM0TM2HPG9HHR2R","writing","Writing words people read: the specific thing instead of claims, words to drop, sentences, interface copy (buttons, labels, errors, empty states, confirmations), page copy, notifications and emails, alt text and link text, numbers and dates, words that translate well, documentation and voice. Read before writing a page's copy, an interface's text or a document.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fwriting\u002FSKILL.md",[92,95],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":96,"categoryName":97,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[88,99,100,101,102,103,38,104,105,106,107,108],"text","emails","empty","drop","document","page","voice","notifications","documentation","translate",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":118,"publishedAt":43},"01M6D2HG07YS49NM196Q0R3AZ8","ui","Designing or restyling an interface: direction, layout, type, colour, icons, components, states, responsive behaviour. Read before building a page, a screen or a set of components.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[111,119,120,121,122,104,123,38,124],"icons","components","SET","responsive","layout","before building",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":135,"publishedAt":43},"01M6D2HB59HZHWG1RYZDV4SJ91","ui-themes","Light and dark themes, and colour that holds in both: tokens with a value per theme, and what each kind of content needs to stay visible (icons, SVG drawings and line art, logos, photos, screenshots, charts, code, maps, borders, shadows, focus, form controls), switching without a flash, and checking both. Read before building a second theme or a theme toggle, and before any drawing, logo or chart on a page that has two themes.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-themes\u002FSKILL.md",[131,134],{"categoryNo":132,"categoryName":133,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[111,136,137,138,139,140,141,142,143,38,124,144,104,145,146,147,119,148,149],"ui themes","switching","photos","tokens","drawing","focus","maps","Art","flash","code","Charts","content","screenshots","logo",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":159,"publishedAt":43},"01M6D2H5R5KRAE524C8QX0T7Q0","ui-structure","Structure before styling: the blueprint written before any interface code (the screen's job, the regions its kind of page needs, their order and why, the layout skeleton in numbers, the components and their states), the anatomy and order of a homepage, a dashboard, a list, a detail page, settings, a form, sign-in, pricing, docs, an article and a checkout, and how to turn the blueprint into code (tokens, layout primitives, components, sections, page). Read first, before building or rebuilding any page or screen.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-structure\u002FSKILL.md",[156,157,158],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},{"categoryNo":96,"categoryName":97,"taxonomyType":26,"taxonomyTypeDesc":27},[160,111,161,120,162,163,145,164,165,166,123,139,167,168,169,38,124,104,170,171],"structure","ui structure","pricing","dashboard","Blueprint","article","anatomy","styling","primitives","list","why","how",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":185,"publishedAt":43},"01M6D2H0ZZBJG77MBGPZHA6MWD","ui-stack-vue","Building interfaces in Vue 3 and Nuxt: project layout, script setup with typed defineProps, defineEmits and defineModel, attribute fallthrough, slots and scoped slots, template refs, ref, reactive and computed, watch versus watchEffect, composables and VueUse, provide and inject, Pinia, keyed v-for, transitions, Nuxt 4 (app directory, pages, layouts, useFetch and useAsyncData keys, $fetch in handlers, server routes, runtime config, useSeoMeta, NuxtImg, middleware), VeeValidate forms, Reka UI and Nuxt UI, testing, vue-tsc, and the traps. Read when the project uses Vue or Nuxt.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-stack-vue\u002FSKILL.md",[178,181,184],{"categoryNo":179,"categoryName":180,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":116,"categoryName":117,"taxonomyType":26,"taxonomyTypeDesc":27},[111,186,187,188,189,190,191,192,123,85,193,194,38,195,196,197,198,199,200,201],"vue","stack","ui stack vue","forms","pages","watch","runtime","transitions","fetch","pinia","nuxt","template","server","config","directory","testing"]