docs: generate documentation for UI components (#5849)

* added tool to generate spec files for React components

* use typedoc for missing descriptions and types

* improvements and fixes

* improvements

* added doc comments for half of the components

* add custom resolver + more doc comments

* added all tsdocs

* general improvements

* add specs to UI docs

* added github action

* remove unnecessary api route

* Added readme for react-docs-generator

* remove comment

* Update packages/design-system/ui/src/components/currency-input/currency-input.tsx

Co-authored-by: Kasper Fabricius Kristensen <45367945+kasperkristensen@users.noreply.github.com>

* remove description of aria fields + add generate script

---------

Co-authored-by: Kasper Fabricius Kristensen <45367945+kasperkristensen@users.noreply.github.com>
This commit is contained in:
Shahed Nasser
2023-12-13 16:02:41 +02:00
committed by GitHub
parent edc49bfe1d
commit 245e5c9a69
288 changed files with 6029 additions and 1447 deletions

View File

@@ -0,0 +1,8 @@
import { PropDescriptor } from "react-docgen/dist/Documentation.js"
export default function emptyPropDescriptor(propDescriptor: PropDescriptor) {
const objKeys = Object.keys(propDescriptor)
objKeys.forEach((key) => {
delete propDescriptor[key as keyof PropDescriptor]
})
}

View File

@@ -0,0 +1,19 @@
import { PropDescriptor } from "react-docgen/dist/Documentation.js"
export default function isEmptyPropDescriptor(propDescriptor: PropDescriptor) {
const objKeys = Object.keys(propDescriptor)
return (
objKeys.length === 0 ||
objKeys.every((objKey) => {
const value = propDescriptor[objKey as keyof PropDescriptor]
switch (typeof value) {
case "string":
return value.length === 0
case "object":
return Object.keys(value).length === 0
default:
return false
}
})
)
}

View File

@@ -0,0 +1,5 @@
const BLACKLISTED_PROPS = ["className", "children"]
export default function isPropBlacklisted(propName: string) {
return BLACKLISTED_PROPS.includes(propName)
}

View File

@@ -0,0 +1,20 @@
import { statSync, readFileSync } from "fs"
import { globSync } from "glob"
export default function readFiles(path: string): Map<string, string> {
const files = new Map<string, string>()
// check if path is for a file
const fileStats = statSync(path)
if (fileStats.isFile()) {
files.set(path, readFileSync(path, "utf-8"))
} else {
const filePaths = globSync(`${path}/**/*.{tsx,jsx}`, {
ignore: [`${path}/**/*.spec.*`, `${path}/**/*.stories.*`],
})
filePaths.forEach((filePath) => {
files.set(filePath, readFileSync(filePath, "utf-8"))
})
}
return files
}