@gunkin/uiify 0.0.17-alpha → 0.0.19-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/uiify/SKILL.md +55 -33
- package/skills/uiify/references/compositions/card-rhythm.md +0 -2
- package/skills/uiify/references/compositions/destructive-confirmation.md +1 -3
- package/skills/uiify/references/compositions/form-grouping.md +0 -2
- package/skills/uiify/references/compositions/hero-actions.md +3 -5
- package/skills/uiify/references/compositions/page-frame.md +0 -2
- package/skills/uiify/references/compositions/pricing-actions.md +0 -2
- package/skills/uiify/references/compositions/save-feedback.md +1 -3
- package/skills/uiify/references/compositions/table-controls.md +1 -3
- package/skills/uiify/references/elements/accordion.md +38 -0
- package/skills/uiify/references/elements/alert-modal.md +32 -5
- package/skills/uiify/references/elements/avatar.md +31 -2
- package/skills/uiify/references/elements/badge.md +32 -3
- package/skills/uiify/references/elements/bar-chart.md +39 -7
- package/skills/uiify/references/elements/breadcrumb.md +38 -0
- package/skills/uiify/references/elements/button.md +38 -3
- package/skills/uiify/references/elements/candle-chart.md +38 -0
- package/skills/uiify/references/elements/card.md +38 -1
- package/skills/uiify/references/elements/carousel.md +38 -0
- package/skills/uiify/references/elements/checkbox.md +39 -0
- package/skills/uiify/references/elements/code-block.md +31 -2
- package/skills/uiify/references/elements/collapsible.md +38 -0
- package/skills/uiify/references/elements/color-picker.md +39 -0
- package/skills/uiify/references/elements/combobox.md +37 -0
- package/skills/uiify/references/elements/command-palette.md +33 -12
- package/skills/uiify/references/elements/context-menu.md +38 -0
- package/skills/uiify/references/elements/cookie-banner.md +30 -2
- package/skills/uiify/references/elements/date-picker.md +33 -9
- package/skills/uiify/references/elements/divider.md +30 -2
- package/skills/uiify/references/elements/drawer.md +38 -0
- package/skills/uiify/references/elements/dropdown-menu.md +38 -0
- package/skills/uiify/references/elements/empty-state.md +30 -2
- package/skills/uiify/references/elements/feature-grid.md +41 -1
- package/skills/uiify/references/elements/field.md +33 -3
- package/skills/uiify/references/elements/file-upload.md +40 -0
- package/skills/uiify/references/elements/footer.md +35 -4
- package/skills/uiify/references/elements/form.md +31 -4
- package/skills/uiify/references/elements/header.md +31 -3
- package/skills/uiify/references/elements/hero.md +43 -3
- package/skills/uiify/references/elements/hover-card.md +38 -0
- package/skills/uiify/references/elements/image-gallery.md +36 -4
- package/skills/uiify/references/elements/inline-alert.md +30 -2
- package/skills/uiify/references/elements/input.md +31 -4
- package/skills/uiify/references/elements/line-chart.md +38 -0
- package/skills/uiify/references/elements/logo-wall.md +31 -2
- package/skills/uiify/references/elements/modal.md +38 -0
- package/skills/uiify/references/elements/number-field.md +39 -0
- package/skills/uiify/references/elements/otp-input.md +39 -0
- package/skills/uiify/references/elements/pagination.md +31 -4
- package/skills/uiify/references/elements/password-input.md +33 -9
- package/skills/uiify/references/elements/popup.md +38 -0
- package/skills/uiify/references/elements/pricing-table.md +55 -2
- package/skills/uiify/references/elements/progress-bar.md +32 -4
- package/skills/uiify/references/elements/radio-group.md +39 -0
- package/skills/uiify/references/elements/rating.md +39 -0
- package/skills/uiify/references/elements/search-input.md +35 -4
- package/skills/uiify/references/elements/segmented-control.md +39 -0
- package/skills/uiify/references/elements/select.md +29 -1
- package/skills/uiify/references/elements/sidebar.md +33 -10
- package/skills/uiify/references/elements/skeleton.md +38 -0
- package/skills/uiify/references/elements/slider.md +39 -0
- package/skills/uiify/references/elements/spinner.md +38 -0
- package/skills/uiify/references/elements/stats-bar.md +30 -2
- package/skills/uiify/references/elements/stepper.md +32 -9
- package/skills/uiify/references/elements/switch.md +31 -4
- package/skills/uiify/references/elements/table-of-contents.md +39 -0
- package/skills/uiify/references/elements/table.md +32 -3
- package/skills/uiify/references/elements/tabs.md +38 -0
- package/skills/uiify/references/elements/tags-input.md +39 -0
- package/skills/uiify/references/elements/testimonial.md +35 -4
- package/skills/uiify/references/elements/textarea.md +30 -3
- package/skills/uiify/references/elements/timeline.md +31 -3
- package/skills/uiify/references/elements/toast.md +27 -1
- package/skills/uiify/references/elements/toggle-group.md +39 -0
- package/skills/uiify/references/elements/toggle.md +39 -0
- package/skills/uiify/references/elements/toolbar.md +39 -0
- package/skills/uiify/references/elements/tooltip.md +38 -0
- package/skills/uiify/references/elements/virtual-scroll.md +39 -0
- package/skills/uiify/references/examples/alert-confirmation.md +34 -0
- package/skills/uiify/references/examples/field-validation.md +37 -0
- package/skills/uiify/references/examples/select-basic.md +35 -0
- package/skills/uiify/references/examples/table-controls.md +40 -0
- package/skills/uiify/references/guides/assets.md +14 -0
- package/skills/uiify/references/guides/content.md +11 -0
- package/skills/uiify/references/guides/hierarchy.md +14 -0
- package/skills/uiify/references/guides/reference.md +9 -0
- package/skills/uiify/references/guides/states.md +12 -0
- package/skills/uiify/references/guides/surface.md +27 -0
- package/skills/uiify/scripts/lint.mjs +1 -1
- package/skills/uiify/scripts/static.mjs +71 -14
|
@@ -4,7 +4,47 @@ Binding: gap
|
|
|
4
4
|
|
|
5
5
|
Present related product capabilities as a coherent set.
|
|
6
6
|
|
|
7
|
-
Use
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Several related capabilities have equal importance and repeat the same content shape.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not force unequal priorities or long-form explanations into a uniform grid. Use a comparison table when people must compare values across features.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
This is an app-level composition, not a UIify component. Render a labeled section containing a list of items; give each item a heading and short explanation. Use the same order and content hierarchy for every item.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Collapse to one column on narrow screens and retain source order. Avoid fixed heights that clip translated or zoomed text.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Keep item actions consistent. If each feature links to detail, link its heading and retain a clear focus indicator.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check section label, heading levels, source order, one-column reflow, link names, and the card spacing at mobile width.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Do not use three equal cards to imply equal priority when one feature is the primary action.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<section aria-labelledby="features-title">
|
|
39
|
+
<h2 id="features-title">Built for daily work</h2>
|
|
40
|
+
<ul>
|
|
41
|
+
<li><article><h3>Shared workspace</h3><p>Keep team work together.</p></article></li>
|
|
42
|
+
<li><article><h3>Clear history</h3><p>See what changed and when.</p></article></li>
|
|
43
|
+
</ul>
|
|
44
|
+
</section>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
This is an app-level composition; UIify does not currently ship this component.
|
|
8
48
|
|
|
9
49
|
Related laws: references/laws/proximity.md, references/laws/readability.md
|
|
10
50
|
|
|
@@ -4,11 +4,41 @@ Binding: field
|
|
|
4
4
|
|
|
5
5
|
Keep a label and its form control together.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Keep a form control, its label, instructions, and any validation message connected. Use visible labels that name the expected information; a placeholder is not a substitute.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not use a field wrapper without a real form control, or hide instructions needed before the person enters a value.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Use `Field.Root`, `Field.Label`, `Field.Control`, `Field.Description`, and `Field.Error` with the same `id` on Root and `fieldId` on every part. Put native props such as `name`, `type`, and `autoComplete` on `Field.Control`. Pass `invalid`, `required`, and `disabled` to the parts that need those states; Root does not inject props into them.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Keep labels and help text close to the control at narrow widths. Let long instructions and error messages wrap without clipping.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Native required validation works without JavaScript. For application validation, set `invalid` on Root and Control and render `Field.Error` with the same state after validation. The control's accessible description includes the error while invalid.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Click the label and confirm its control receives focus. Inspect the accessibility tree for the control's name and associated description; submit an invalid value and confirm a textual error appears and is announced. Check required, disabled, read-only, and long-message states.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
A label and control with different `fieldId` values disconnect the visible label from the input and its instructions.
|
|
34
|
+
|
|
35
|
+
Example: `references/examples/field-validation.md`.
|
|
8
36
|
|
|
9
37
|
Related laws: references/laws/proximity.md, references/laws/accessibility.md
|
|
10
38
|
|
|
11
39
|
## Sources
|
|
12
40
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-
|
|
41
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-17)
|
|
42
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
|
|
43
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html) (verified 2026-10-17)
|
|
44
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html) (verified 2026-10-17)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# file-upload
|
|
2
|
+
|
|
3
|
+
Binding: file-upload
|
|
4
|
+
|
|
5
|
+
Let people select and manage files for a form or task.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Let people attach one or more files to a form or task.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not require drag and drop as the only way to choose files. Avoid asking for files unrelated to the task.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Use FileUpload.Root with a labelled HiddenInput and an optional Trigger or Dropzone. Explain allowed formats, size limits, and maximum file count before selection; show selected filenames and provide a named remove action for each file.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Keep the browse control and selected-file list usable at narrow widths. Do not rely on a large drop target that pushes the file picker off screen.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Report rejected files with the reason, including type, size, or count limits. Keep the accepted files and let people remove them. Treat accept as a picker hint; validate file type and size on the server.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Test keyboard file selection, the accessible input name, multiple-file selection, dropzone as an optional path, rejected-file feedback, removal, and server-side validation.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Treating the accept attribute as security validation or failing silently when a file is rejected.
|
|
34
|
+
|
|
35
|
+
## Sources
|
|
36
|
+
|
|
37
|
+
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/file) (verified 2026-10-17)
|
|
38
|
+
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept) (verified 2026-10-17)
|
|
39
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
|
|
40
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/instructions/) (verified 2026-10-17)
|
|
@@ -2,13 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
Binding: gap
|
|
4
4
|
|
|
5
|
-
Offer secondary navigation at the end of a page.
|
|
5
|
+
Offer secondary navigation and supporting information at the end of a page.
|
|
6
6
|
|
|
7
|
-
Use
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Collect site-wide destinations, contact details, and supporting information after the main content.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not use the footer to repeat every page section or create a landmark for a small local card footer.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Use a page-level footer landmark and group related destinations into labelled navigation lists. Keep repeated link order consistent across pages.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Allow link groups to wrap or stack while preserving their source order. Avoid clipped columns and tiny tap targets.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Keep destinations available at every viewport; do not hide essential links behind hover-only behavior.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check the landmark structure, labels for multiple navigation regions, keyboard access, and reflow at narrow widths and zoom.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Using a page-level footer inside a card and unintentionally creating a landmark.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
36
|
+
|
|
37
|
+
Use a semantic footer with headings and navigation lists. This app-level pattern does not add a UIify component.
|
|
8
38
|
|
|
9
39
|
Related laws: references/laws/readability.md, references/laws/accessibility.md
|
|
10
40
|
|
|
11
41
|
## Sources
|
|
12
42
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/
|
|
43
|
+
- [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/) (verified 2026-10-17)
|
|
44
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-17)
|
|
45
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html) (verified 2026-10-17)
|
|
@@ -2,13 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
Binding: form
|
|
4
4
|
|
|
5
|
-
Collect
|
|
5
|
+
Collect the information needed to complete one task.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Collect the information needed to complete one task, such as signing in, registering, or purchasing. Ask only for information the task needs.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not make a form for a collection of unrelated actions or for navigation alone.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
`Form` renders a native `<form>` and uses browser validation by default. Label every control; group related choices with `fieldset` and `legend`. Put one clearly named submit action after the fields. `validationBehavior="aria"` sets `noValidate`, so the page must provide its own accessible validation.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
A single column is a useful default on narrow screens. Keep each label, control, and its instructions together when the layout changes; UIify `Form` does not impose visual layout.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Support invalid submission, pending submission, success, and server error. Show detected errors in text, identify each affected field, and keep entered values after failure so the person can correct them.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Submit empty and malformed values. Confirm browser validation or the page's own validation is active, errors identify the affected controls in text, values remain available after failure, and success and server-error messages are clear.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Disabling submit before explaining validation can leave people stuck. Let the form explain what needs correction.
|
|
8
34
|
|
|
9
35
|
Related laws: references/laws/proximity.md, references/laws/accessibility.md
|
|
10
36
|
|
|
11
37
|
## Sources
|
|
12
38
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-
|
|
39
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-17)
|
|
40
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
|
|
41
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html) (verified 2026-10-17)
|
|
@@ -4,11 +4,39 @@ Binding: header
|
|
|
4
4
|
|
|
5
5
|
Orient visitors with stable top-level navigation.
|
|
6
6
|
|
|
7
|
-
Use
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Orient people with site identity and primary navigation that stays in a consistent place and order across pages.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not turn the header into a second page body or hide all navigation behind a menu on wide screens.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
`Header.Root` renders a semantic `<header>`. Place a home link for the site identity, a named `<nav>` with primary links, and at most one prominent action. Mark the current page link with `aria-current="page"`. Give repeated navigation landmarks distinct names when their link sets differ.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Keep the logo and one useful action visible on narrow screens. Move secondary navigation behind a clearly named button that opens a `Modal`; leave the full navigation visible on wide screens.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Keep navigation order consistent between pages. The `Header` component itself is static; use `@gunkin/uiify/components/header/client` only when scroll hide/reveal is requested.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Inspect the accessibility tree for the banner and named navigation landmarks. Tab through the logo, links, and action in reading order; on narrow screens open and close the menu with the keyboard and check its focus and accessible name.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Hiding the entire navigation behind a hamburger on desktop makes common destinations harder to scan.
|
|
8
34
|
|
|
9
35
|
Related laws: references/laws/readability.md, references/laws/accessibility.md
|
|
10
36
|
|
|
11
37
|
## Sources
|
|
12
38
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-
|
|
39
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-17)
|
|
40
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
|
|
41
|
+
- [www.w3.org](https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/) (verified 2026-10-17)
|
|
42
|
+
- [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/examples/disclosure-navigation/) (verified 2026-10-17)
|
|
@@ -4,11 +4,51 @@ Binding: gap
|
|
|
4
4
|
|
|
5
5
|
Introduce the product and its next action.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Use a hero on a page whose goal is to help people decide what to do next, such as a landing, pricing, or campaign page. Do not add one to settings, dashboards, or docs; start with the task's content.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not lead with a generic slogan, a large decorative image, or multiple equally prominent actions.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Start with one specific `h1` that states the page's purpose, one supporting sentence, and one main action. Add a secondary action only for a different useful path. Use an image only when it shows the product or subject and supports the page's claim; prefer existing assets from the project, preserve the focal point across responsive crops, and provide suitable alternative text. If no suitable asset exists, keep the layout complete without inventing one.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
On narrow screens, order the text, action, then image. Let translated or long headings wrap, and keep the main action visible without horizontal scrolling.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Check a long or translated heading and the layout when no image is available. Keep action labels and focus states clear in both light and dark themes.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Confirm there is one `h1`, the main action is visible at 390×844 and 1440×900, and content reflows at 320 CSS px without two-dimensional scrolling. Check image alternative text against its purpose.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
A generic slogan, decorative gradient, and two equal buttons do not explain the page or the next step.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
36
|
+
|
|
37
|
+
Use a named section, semantic heading, supporting copy, and the documented Button. The main action usually opens another page, so render it as a link. Add only static CSS for layout.
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<section aria-labelledby="page-title">
|
|
41
|
+
<h1 id="page-title">Plan releases your whole team can follow</h1>
|
|
42
|
+
<p>Orbit turns scattered tasks into one shared release timeline.</p>
|
|
43
|
+
<Button as="a" href="/signup">Start a free trial</Button>
|
|
44
|
+
</section>
|
|
45
|
+
```
|
|
8
46
|
|
|
9
47
|
Related laws: references/laws/von-restorff.md, references/laws/accessibility.md
|
|
10
48
|
|
|
11
49
|
## Sources
|
|
12
50
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-
|
|
51
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-17)
|
|
52
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
|
|
53
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html) (verified 2026-10-17)
|
|
54
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/images/) (verified 2026-10-17)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# hover-card
|
|
2
|
+
|
|
3
|
+
Binding: hover-card
|
|
4
|
+
|
|
5
|
+
A link or control has useful supplementary detail that a person may inspect on hover or keyboard focus without leaving the current page
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
A link or control has useful supplementary detail that a person may inspect on hover or keyboard focus without leaving the current page. Keep it optional and short.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not place essential instructions, required actions, or the only copy of important information in a hover card. Do not use it for a brief label (tooltip) or a menu of actions.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Compose `HoverCard` Root, Trigger, and Content. Give the trigger a meaningful name on its own; the card supplements it rather than repairing an ambiguous link label.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
The card opens on mouse hover and keyboard focus. Touch users need the same essential information elsewhere in the page and a usable trigger. Keep content narrow enough to fit without obscuring nearby controls.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Focus or mouse hover opens the card; pointer movement into the content keeps it open, and leaving schedules close. Configure open/close delays only when they improve pointer travel without making content feel unresponsive.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Test keyboard focus, mouse travel from trigger to card, dismissibility, persistence while moving the pointer, narrow viewports, and that all essential content remains available without hover.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
A hover card that closes while the pointer travels from its trigger to its content fails the hover/focus content requirements.
|
|
34
|
+
|
|
35
|
+
## Sources
|
|
36
|
+
|
|
37
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/content-on-hover-or-focus.html) (verified 2026-10-17)
|
|
38
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html) (verified 2026-10-17)
|
|
@@ -4,17 +4,49 @@ Binding: gap
|
|
|
4
4
|
|
|
5
5
|
Show related images with useful captions or alternatives.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
A related set of images benefits from being browsed together with captions or contextual text.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not build a gallery if one image answers the need. Do not hide the only useful visual information behind a lightbox with no inline alternative.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
This is an app-level composition, not a UIify component. Use a list of figures. Write alt text for the image's purpose; use figcaption for additional context, avoiding redundant repetition.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Prefer existing project assets. Keep images within their container, preserve intrinsic ratio and important content in responsive crops, and allow the list to stack. Provide intrinsic width and height to reduce layout shift.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
If images open a larger view, use a real link or button with an accessible name and a way back. Do not imply gallery navigation when items are static.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check informative/decorative alternatives, captions, loading and intrinsic dimensions, keyboard access for interactive images, and narrow reflow.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Using the same sentence as both alt text and caption can produce repetitive announcements when both convey identical information.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
8
36
|
|
|
9
37
|
```html
|
|
10
38
|
<ul>
|
|
11
|
-
<li><figure
|
|
39
|
+
<li><figure>
|
|
40
|
+
<img src="/bridge.webp" width="640" height="400" alt="Stone bridge over a river" />
|
|
41
|
+
<figcaption>Old town bridge at dusk</figcaption>
|
|
42
|
+
</figure></li>
|
|
12
43
|
</ul>
|
|
13
44
|
```
|
|
14
45
|
|
|
15
|
-
This is an app-level composition
|
|
46
|
+
This is an app-level composition; UIify does not currently ship this component.
|
|
16
47
|
|
|
17
48
|
## Sources
|
|
18
49
|
|
|
19
50
|
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure) (verified 2026-10-16)
|
|
20
|
-
- [
|
|
51
|
+
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) (verified 2026-10-16)
|
|
52
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html) (verified 2026-10-16)
|
|
@@ -4,13 +4,41 @@ Binding: gap
|
|
|
4
4
|
|
|
5
5
|
Give a short message context beside the content it affects.
|
|
6
6
|
|
|
7
|
-
Use
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
A message belongs beside the content or control it explains. Use status for a non-urgent update and alert only when the information requires immediate attention.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not use assertive announcements for routine success, or a toast for an error that must remain visible while the person fixes it.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
This is an app-level composition, not a UIify component. Place concise text in a semantic status/alert element next to the affected content; include a heading when it helps identify the issue.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Keep the message in reading order beside the affected field or section. Let text wrap and do not communicate severity by color alone.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Use role=status for dynamic, non-urgent updates; use role=alert for urgent messages that should be announced immediately. Keep the message visible until the related issue can be addressed.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check announcement timing and role, reading order, message visibility, color contrast, and the relationship to its field/section. Avoid repeating the same announcement through multiple live regions.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Do not move focus to routine status text; the live region should announce the update while focus stays on the user's task.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
8
36
|
|
|
9
37
|
```html
|
|
10
38
|
<p role="status">Changes saved.</p>
|
|
11
39
|
```
|
|
12
40
|
|
|
13
|
-
This is an app-level composition
|
|
41
|
+
This is an app-level composition; UIify does not currently ship this component.
|
|
14
42
|
|
|
15
43
|
## Sources
|
|
16
44
|
|
|
@@ -2,13 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
Binding: input
|
|
4
4
|
|
|
5
|
-
Accept a short
|
|
5
|
+
Accept a short, single-line value.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
Collect one short value such as a name, email address, or search query.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Use a textarea for longer free text and a purpose-specific control when it provides a more suitable native input mode.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Use the documented Input component with an associated visible label. Put format instructions before entry and connect them to the field; keep validation feedback beside the control.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Let the field and label reflow within the available width. Keep the label visible and avoid horizontal page scrolling.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
Preserve entered values when validation fails. Distinguish disabled, read-only, and invalid states, and explain the correction in text.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check the label association, input purpose and autocomplete where relevant, keyboard access, error description, and narrow-screen reflow.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
Using a placeholder as the only label or instruction.
|
|
8
34
|
|
|
9
35
|
Related laws: references/laws/proximity.md, references/laws/accessibility.md
|
|
10
36
|
|
|
11
37
|
## Sources
|
|
12
38
|
|
|
13
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/
|
|
14
|
-
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/
|
|
39
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
|
|
40
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/forms/instructions/) (verified 2026-10-17)
|
|
41
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html) (verified 2026-10-17)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# line-chart
|
|
2
|
+
|
|
3
|
+
Binding: line-chart
|
|
4
|
+
|
|
5
|
+
A measured value changes over an ordered time or numeric axis and the trend is useful
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
A measured value changes over an ordered time or numeric axis and the trend is useful.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not connect unrelated categories with a line or imply precision/time continuity the data does not have. For a few independent categories, use a table or bar chart.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
Use `LineChart` with ordered time/value data, a descriptive accessible label, and axis labels that include units/context. UIify renders a data table fallback. Import the component entry for static rendering; use /client only for interactive points or live history.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Keep the data table available as the plot narrows. For live history, 'visibleCount' virtualizes older points and the table follows the visible window; provide another route to full history when users need it.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
The static component needs no JavaScript. Interactive points use labeled buttons; the client entry adds live readout behavior. Disable announcements for high-frequency streaming updates when repeated speech would overwhelm.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check exact values in the table, time/unit labels, trend description, keyboard point controls if enabled, data updates, and narrow viewport.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
A default “Line chart” name does not explain which measure, unit, or period the chart shows.
|
|
34
|
+
|
|
35
|
+
## Sources
|
|
36
|
+
|
|
37
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html) (verified 2026-10-17)
|
|
38
|
+
- [www.w3.org](https://www.w3.org/WAI/tutorials/images/complex/) (verified 2026-10-17)
|
|
@@ -4,7 +4,35 @@ Binding: gap
|
|
|
4
4
|
|
|
5
5
|
Show organizations associated with a product or event.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
A small collection of customer, partner, or member organizations provides relevant context.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not present logos as proof of endorsement without permission, or include a large wall of brands that does not help the current decision.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
This is an app-level composition, not a UIify component. Use a list. Give each informative logo an alt text with the organization's name; use empty alt only when adjacent text already names it.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
Preserve recognizable proportions and allow the list to wrap. Avoid raster logos that become blurry or require horizontal scrolling.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
If a logo links somewhere, give the link a meaningful accessible name and a real destination. If not interactive, do not make it look like a control.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Check each image alternative, adjacent duplicate text, logo proportions, list reading order, link purpose, and mobile wrapping.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
An empty alt on an informative logo hides the organization name from screen readers.
|
|
34
|
+
|
|
35
|
+
## Custom implementation
|
|
8
36
|
|
|
9
37
|
```html
|
|
10
38
|
<ul aria-label="Organizations using the product">
|
|
@@ -12,9 +40,10 @@ Give each meaningful organization logo an identifying alternative. If the adjace
|
|
|
12
40
|
</ul>
|
|
13
41
|
```
|
|
14
42
|
|
|
15
|
-
This is an app-level composition
|
|
43
|
+
This is an app-level composition; UIify does not currently ship this component.
|
|
16
44
|
|
|
17
45
|
## Sources
|
|
18
46
|
|
|
19
47
|
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) (verified 2026-10-16)
|
|
20
48
|
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
|
|
49
|
+
- [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html) (verified 2026-10-16)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# modal
|
|
2
|
+
|
|
3
|
+
Binding: modal
|
|
4
|
+
|
|
5
|
+
Hold attention on a task that must be completed before returning to the page.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
The person must finish or dismiss a focused task before returning to the page. Use inline content when they need to compare it with the page; use `toast` for brief feedback and `alert-modal` for an irreversible decision.
|
|
10
|
+
|
|
11
|
+
## Avoid when
|
|
12
|
+
|
|
13
|
+
Do not open a modal automatically on page load or use one for content most visitors need to read.
|
|
14
|
+
|
|
15
|
+
## Structure
|
|
16
|
+
|
|
17
|
+
`Modal` provides a trigger, named dialog, title, optional description and body, close control, and optional footer. Give it a specific title, concise body, and clearly labeled actions. A modal dialog contains its Tab sequence; include a visible way to close it.
|
|
18
|
+
|
|
19
|
+
## Responsive
|
|
20
|
+
|
|
21
|
+
On narrow screens the default modal becomes a full-width bottom sheet. Its body scrolls while the header and footer remain visible. Keep the task short enough to understand and complete in this space.
|
|
22
|
+
|
|
23
|
+
## States
|
|
24
|
+
|
|
25
|
+
The native `show-modal` dialog blocks interaction with the page. Its default dismissal allows Escape; `dismiss="none"` requires an explicit close action. Controlled or initially open state requires `ModalClientContent` from `@gunkin/uiify/components/modal/client`.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Open from the keyboard. Confirm focus enters the dialog, stays within its Tab sequence, Escape closes it when dismissal is enabled, focus returns to the trigger, and the dialog has its visible title as its accessible name. Check long content and footer actions at a narrow viewport.
|
|
30
|
+
|
|
31
|
+
## Common mistake
|
|
32
|
+
|
|
33
|
+
A generic title such as “Notice” does not explain the task. Name the decision or activity instead.
|
|
34
|
+
|
|
35
|
+
## Sources
|
|
36
|
+
|
|
37
|
+
- [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/) (verified 2026-10-17)
|
|
38
|
+
- [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) (verified 2026-10-17)
|