64 Commits

Author SHA1 Message Date
afc163 24bc1d1b2d ci: auto-append changelog entry on data sync release (#26)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 14:25:23 +08:00
afc163 624c6d053d fix(extract): handle escaped pipes in markdown table cells
parseTableRow now replaces \| with a placeholder before splitting on |,
then restores it. This fixes 400+ malformed props across all data files
where multi-value union types like \`primary\` \| \`dashed\` \| \`link\`
were split across wrong columns (type/default/since all got wrong values).

Also removes the defensive load-time \ stripping from normalizeStore
(no longer needed after data regeneration), keeping only deduplication.

Adds scripts/extractors/__tests__/props.test.ts and expands vitest config
to include scripts/**/*.test.ts.
2026-03-20 14:44:53 +08:00
afc163 3f683f1887 data: patch doc/docZh fields into all historical snapshots
Use git-show to read markdown from each version's tag and inject
doc/docZh into the 61 existing snapshot files without full re-extraction.
Also adds scripts/patch-doc-fields.ts for future use.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 19:07:08 -07:00
afc163 c0fe017ce9 feat: add antd doc <component> command to output full markdown docs
Bundle raw markdown content (doc/docZh) in component data during
extraction, and expose it via a new `doc` command. This complements
`antd info` by providing the complete unprocessed API documentation
for cases where structured prop extraction is insufficient.

- src/types.ts: Add `doc` and `docZh` optional fields to ComponentData
- scripts/extract.ts: Bundle raw markdown (frontmatter-stripped) into each component during extraction
- src/commands/doc.ts: New command — outputs markdown or JSON, with error handling and fuzzy match suggestions
- src/index.ts: Register the new doc command
- data/v5.json, data/v5.29.3.json: Re-extracted with doc/docZh fields

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 19:07:08 -07:00
afc163 9f00d82b6f fix(info): parse multi-section API docs (Form.FormInstance, useWatch, etc.)
Some components (Form, Cascader) split their API across multiple ## sections:
  ## API        → main Form props
  ## Form.Item  → Form.Item props
  ## Hooks      → ### Form.useForm, ### Form.useWatch, ...
  ## Interface  → ### FormInstance (contains validateFields), ### Rule, ...

The previous parser stopped at the first ## heading after ## API,
so everything in ## Hooks and ## Interface was silently dropped.

Fix: collect all ## sections from ## API through all intermediate
API sections, stopping only at terminal sections (Design Token, FAQ,
Note, Examples, Semantic DOM). Within each block, ## headings provide
the sub-component label for content appearing before the first ###.

Result for Form (v5.29.3):
  Before: main=25, subComponentProps={}
  After:  main=25 | Form.Item(30) Form.FormInstance(15, incl. validateFields)
          Form.List(4) Form.Rule(15) Form.WatchOptions(2) etc.

Note: Form.useWatch is a function-type annotation (not a table) so it
cannot be extracted as props — this is a docs format limitation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 19:07:08 -07:00
afc163 88e4b81c30 fix(info): fix isMainSection detection for all antd API patterns
Improve sub-component props extraction to correctly handle all naming
conventions in antd's markdown docs, not just Splitter:

- Add 'Param' to recognized column headers (fixes Menu losing its props)
- Strip HTML <Badge> and {#anchor} noise from section labels
- Expanded isMainSection() to match:
  - "Select props" / "Anchor Props" (ComponentName + " props/API" suffix)
  - "Tree props" for TreeSelect (base word is prefix of component name)
  - "Radio/Radio.Button" slash format
  - "Mention" → "Mentions" (singular/plural variants, ≤2 chars diff)
  - "common API" generic phrase

Before: Select main=0, Radio main=0, Tree main=0, FloatButton main=0...
After:  all main props correctly in props[], sub-types in subComponentProps

Also re-extracted data/v5.json and data/v5.29.3.json with improved extractor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 19:07:08 -07:00
afc163 bcd505d254 feat(info): show sub-component props separately (e.g. Splitter.Panel)
Previously the `info` command mixed all API table rows together, so
`antd info Splitter` incorrectly listed Panel props (defaultSize, min,
max, size, collapsible, resizable) alongside main Splitter props.

Changes:
- scripts/extractors/props.ts: split API section by ### headings;
  tables under the component name become main props, other sub-sections
  (e.g. "Panel") become subComponentProps keyed as "Splitter.Panel"
- scripts/extract.ts: pass componentName to extractProps; store
  subComponentProps in the JSON when present
- src/types.ts: add subComponentProps?: Record<string, PropData[]>
  to ComponentData
- src/commands/info.ts: render sub-component sections below the main
  table in text/markdown output; include subComponentProps in JSON output
- data: re-extracted v5.json and v5.29.3.json; manually patched all v5
  (5.21–5.28) and v6 snapshots to separate Splitter.Panel props

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 19:07:08 -07:00
afc163 8b0d93feb9 chore: simplify sync workflow (#11)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 19:52:21 +08:00
afc163 e3e9ed2aed fix: restore missing name field in globalTokens for token command (#10)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 19:34:03 +08:00
afc163 d879a4ee56 fix: improve list command with correct categories, bilingual names, and since version (#2)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 15:38:56 +08:00
afc163 78d2a944ee fix: properly filter debug demos using regex attribute match
The previous string-based check missed cases where `debug` attribute
appears after other attributes (e.g. `iframe="800" debug`). Switch to
a regex that matches `debug` anywhere within the <code> tag.

Regenerate all per-minor snapshots and latest v4/v5/v6.json with
the corrected filter applied.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 14:21:09 +08:00
afc163 3ce5cb13bc data: bootstrap historical per-minor snapshots for v4/v5/v6
- v4: 25 minor series (4.0.x ~ 4.24.x), extracted from each representative patch tag
- v5: 30 minor series (5.0.x ~ 5.29.x)
- v6: 4 minor series (6.0.x ~ 6.3.x)
- Update data/versions.json with all 59 minor entries
- Fix bootstrap-snapshots.ts to use git checkout -f to handle untracked file conflicts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 14:11:40 +08:00
afc163 5d8e48d504 feat: add multi-version snapshot architecture for accurate historical queries
- Add loadMetadataForVersion() to loader.ts with 3-level resolution:
  exact minor match → nearest earlier minor → fallback to latest major
- Add data/versions.json as version index (minor series → snapshot tag)
- Update all 7 command files to use loadMetadataForVersion(versionInfo.version)
- Update sync.yml to extract per-minor snapshots on each daily sync
- Add scripts/bootstrap-snapshots.ts for one-time historical backfill
- Update spec.md with multi-snapshot architecture documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 12:16:44 +08:00
afc163 21d75b49e4 feat: add auto-extraction scripts and GitHub Actions sync workflow
Add scripts/extract.ts pipeline that extracts antd metadata (components,
props, demos, tokens, semantic, changelog, FAQ) from source. Add daily
GitHub Actions workflow to detect new antd releases and auto-publish.
CLI version now aligns with antd version.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 16:24:03 +08:00