From ec62f506b265cabca3d20f1872e5ba11ce358875 Mon Sep 17 00:00:00 2001 From: Charles de Dreuille Date: Wed, 15 Jan 2025 16:34:53 +0000 Subject: [PATCH] Improve docs Signed-off-by: Charles de Dreuille --- canon-docs/public/components.css | 54 +++--- .../src/app/(docs)/components/field/page.mdx | 176 ++++++++++++++++++ .../src/app/(docs)/components/input/page.mdx | 67 +------ .../src/app/(playground)/playground/page.tsx | 4 +- .../src/components/PropsTable/PropsTable.tsx | 14 +- canon-docs/src/mdx-components.tsx | 47 ++--- canon-docs/src/snippets/field.tsx | 21 +++ canon-docs/src/snippets/input.tsx | 22 +-- canon-docs/src/utils/data.ts | 5 + packages/canon/report.api.md | 32 ++++ .../src/components/Field/Field.stories.tsx | 21 +++ .../src/components/Field/Field.styles.css | 8 + packages/canon/src/components/Field/Field.tsx | 11 +- .../src/components/Input/Input.styles.css | 1 + packages/canon/src/components/Input/Input.tsx | 2 + packages/canon/src/index.ts | 2 +- 16 files changed, 358 insertions(+), 129 deletions(-) create mode 100644 canon-docs/src/app/(docs)/components/field/page.mdx create mode 100644 canon-docs/src/snippets/field.tsx diff --git a/canon-docs/public/components.css b/canon-docs/public/components.css index e1cd4c9fad..cd32445165 100644 --- a/canon-docs/public/components.css +++ b/canon-docs/public/components.css @@ -278,21 +278,7 @@ } } -.canon-input-root { - font-family: var(--canon-font-regular); - flex-direction: column; - width: 100%; - display: flex; -} - -.canon-input-label { - font-size: var(--canon-font-size-caption); - font-weight: var(--canon-font-weight-regular); - color: var(--canon-text-primary); - margin-bottom: var(--canon-spacing-3xs); -} - -.canon-input-control { +.canon-Input { border-radius: var(--canon-border-radius-sm); border: 1px solid var(--canon-border-base); padding: var(--canon-spacing-sm); @@ -300,44 +286,62 @@ font-size: var(--canon-font-size-body); font-weight: var(--canon-font-weight-regular); color: var(--canon-text-primary); + width: 100%; transition: border-color .2s ease-in-out, outline-color .2s ease-in-out; } -.canon-input-control::placeholder { +.canon-Input::placeholder { color: var(--canon-text-secondary); } -.canon-input-control:hover { +.canon-Input:hover { border-color: var(--canon-border-hover); } -.canon-input-control:focus-visible { +.canon-Input:focus-visible { outline-color: var(--canon-border-selected); border-color: var(--canon-border-selected); outline-width: 0; } -.canon-input-control[data-invalid] { +.canon-Input[data-invalid] { border-color: var(--canon-error); } -.canon-input-control-sm { +.canon-Input--size-sm { height: 2rem; } -.canon-input-control-md { +.canon-Input--size-md { height: 2.5rem; } -.canon-input-description { +.canon-FieldRoot { + font-family: var(--canon-font-regular); + flex-direction: column; + width: 100%; + display: flex; +} + +.canon-FieldLabel { + font-size: var(--canon-font-size-caption); + font-weight: var(--canon-font-weight-regular); + color: var(--canon-text-primary); + margin-bottom: var(--canon-spacing-3xs); +} + +.canon-FieldDescription { font-size: var(--canon-font-size-caption); font-weight: var(--canon-font-weight-regular); color: var(--canon-text-secondary); - margin-top: var(--canon-spacing-3xs); + padding-top: var(--canon-spacing-3xs); + margin: 0; } -.canon-input-error { +.canon-FieldError { font-size: var(--canon-font-size-caption); + font-weight: var(--canon-font-weight-regular); color: var(--canon-error); - margin-top: var(--canon-spacing-3xs); + padding-top: var(--canon-spacing-3xs); + margin: 0; } diff --git a/canon-docs/src/app/(docs)/components/field/page.mdx b/canon-docs/src/app/(docs)/components/field/page.mdx new file mode 100644 index 0000000000..83029be506 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/field/page.mdx @@ -0,0 +1,176 @@ +import { PropsTable } from '@/components/PropsTable'; +import { Snippet } from '@/components/Snippet'; +import { Tabs } from '@/components/Tabs'; +import { CodeBlock } from '@/components/CodeBlock'; +import { FieldPreview } from '@/snippets/field'; +import { BaseUI } from '@/components/HeadlessBanners/BaseUI'; + +# Field + +A wrapper around `Input` or `Select` component to add label, description and error messages.. + +} code={``} /> + + + + Usage + Theming + + + + Name + + Visible on your profile + +`} + /> + + + We recommend starting with our [global tokens](/theme/theming) to customize the library and align it with + your brand. For additional flexibility, you can use the provided class names for each element listed below. + + + + +`} + /> + + + +## API reference + + + +### Field.Root + +Groups all parts of the field. Renders a `
` element. + + string | string[] | null | Promise', + responsive: false, + }, + validationMode: { + type: ['onBlur', 'onChange'], + responsive: false, + }, + validationDebounceTime: { + type: 'number', + responsive: false, + }, + className: { + type: 'string', + responsive: false, + }, + style: { + type: 'CSSProperties', + responsive: false, + }, + }} +/> + +### Field.Label + +An accessible label that is automatically associated with the field control. Renders a `