@gunkin/uiify 0.0.16-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.
Files changed (98) hide show
  1. package/README.md +34 -9
  2. package/package.json +1 -1
  3. package/skills/uiify/SKILL.md +125 -125
  4. package/skills/uiify/references/compositions/card-rhythm.md +14 -0
  5. package/skills/uiify/references/compositions/destructive-confirmation.md +15 -0
  6. package/skills/uiify/references/compositions/form-grouping.md +14 -0
  7. package/skills/uiify/references/compositions/hero-actions.md +14 -0
  8. package/skills/uiify/references/compositions/page-frame.md +14 -0
  9. package/skills/uiify/references/compositions/pricing-actions.md +13 -0
  10. package/skills/uiify/references/compositions/save-feedback.md +13 -0
  11. package/skills/uiify/references/compositions/table-controls.md +14 -0
  12. package/skills/uiify/references/elements/accordion.md +38 -0
  13. package/skills/uiify/references/elements/alert-modal.md +42 -0
  14. package/skills/uiify/references/elements/avatar.md +47 -0
  15. package/skills/uiify/references/elements/badge.md +47 -0
  16. package/skills/uiify/references/elements/bar-chart.md +61 -0
  17. package/skills/uiify/references/elements/breadcrumb.md +38 -0
  18. package/skills/uiify/references/elements/button.md +49 -0
  19. package/skills/uiify/references/elements/candle-chart.md +38 -0
  20. package/skills/uiify/references/elements/card.md +51 -0
  21. package/skills/uiify/references/elements/carousel.md +38 -0
  22. package/skills/uiify/references/elements/checkbox.md +39 -0
  23. package/skills/uiify/references/elements/code-block.md +50 -0
  24. package/skills/uiify/references/elements/collapsible.md +38 -0
  25. package/skills/uiify/references/elements/color-picker.md +39 -0
  26. package/skills/uiify/references/elements/combobox.md +37 -0
  27. package/skills/uiify/references/elements/command-palette.md +43 -0
  28. package/skills/uiify/references/elements/context-menu.md +38 -0
  29. package/skills/uiify/references/elements/cookie-banner.md +51 -0
  30. package/skills/uiify/references/elements/date-picker.md +43 -0
  31. package/skills/uiify/references/elements/divider.md +46 -0
  32. package/skills/uiify/references/elements/drawer.md +38 -0
  33. package/skills/uiify/references/elements/dropdown-menu.md +38 -0
  34. package/skills/uiify/references/elements/empty-state.md +50 -0
  35. package/skills/uiify/references/elements/feature-grid.md +54 -0
  36. package/skills/uiify/references/elements/field.md +44 -0
  37. package/skills/uiify/references/elements/file-upload.md +40 -0
  38. package/skills/uiify/references/elements/footer.md +45 -0
  39. package/skills/uiify/references/elements/form.md +41 -0
  40. package/skills/uiify/references/elements/header.md +42 -0
  41. package/skills/uiify/references/elements/hero.md +54 -0
  42. package/skills/uiify/references/elements/hover-card.md +38 -0
  43. package/skills/uiify/references/elements/image-gallery.md +52 -0
  44. package/skills/uiify/references/elements/inline-alert.md +46 -0
  45. package/skills/uiify/references/elements/input.md +41 -0
  46. package/skills/uiify/references/elements/line-chart.md +38 -0
  47. package/skills/uiify/references/elements/logo-wall.md +49 -0
  48. package/skills/uiify/references/elements/modal.md +38 -0
  49. package/skills/uiify/references/elements/number-field.md +39 -0
  50. package/skills/uiify/references/elements/otp-input.md +39 -0
  51. package/skills/uiify/references/elements/pagination.md +41 -0
  52. package/skills/uiify/references/elements/password-input.md +43 -0
  53. package/skills/uiify/references/elements/popup.md +38 -0
  54. package/skills/uiify/references/elements/pricing-table.md +66 -0
  55. package/skills/uiify/references/elements/progress-bar.md +47 -0
  56. package/skills/uiify/references/elements/radio-group.md +39 -0
  57. package/skills/uiify/references/elements/rating.md +39 -0
  58. package/skills/uiify/references/elements/search-input.md +45 -0
  59. package/skills/uiify/references/elements/segmented-control.md +39 -0
  60. package/skills/uiify/references/elements/select.md +42 -0
  61. package/skills/uiify/references/elements/sidebar.md +43 -0
  62. package/skills/uiify/references/elements/skeleton.md +38 -0
  63. package/skills/uiify/references/elements/slider.md +39 -0
  64. package/skills/uiify/references/elements/spinner.md +38 -0
  65. package/skills/uiify/references/elements/stats-bar.md +49 -0
  66. package/skills/uiify/references/elements/stepper.md +43 -0
  67. package/skills/uiify/references/elements/switch.md +41 -0
  68. package/skills/uiify/references/elements/table-of-contents.md +39 -0
  69. package/skills/uiify/references/elements/table.md +43 -0
  70. package/skills/uiify/references/elements/tabs.md +38 -0
  71. package/skills/uiify/references/elements/tags-input.md +39 -0
  72. package/skills/uiify/references/elements/testimonial.md +52 -0
  73. package/skills/uiify/references/elements/textarea.md +41 -0
  74. package/skills/uiify/references/elements/timeline.md +48 -0
  75. package/skills/uiify/references/elements/toast.md +39 -0
  76. package/skills/uiify/references/elements/toggle-group.md +39 -0
  77. package/skills/uiify/references/elements/toggle.md +39 -0
  78. package/skills/uiify/references/elements/toolbar.md +39 -0
  79. package/skills/uiify/references/elements/tooltip.md +38 -0
  80. package/skills/uiify/references/elements/virtual-scroll.md +39 -0
  81. package/skills/uiify/references/examples/alert-confirmation.md +34 -0
  82. package/skills/uiify/references/examples/field-validation.md +37 -0
  83. package/skills/uiify/references/examples/select-basic.md +35 -0
  84. package/skills/uiify/references/examples/table-controls.md +40 -0
  85. package/skills/uiify/references/guides/assets.md +14 -0
  86. package/skills/uiify/references/guides/content.md +11 -0
  87. package/skills/uiify/references/guides/hierarchy.md +14 -0
  88. package/skills/uiify/references/guides/reference.md +9 -0
  89. package/skills/uiify/references/guides/states.md +12 -0
  90. package/skills/uiify/references/guides/surface.md +27 -0
  91. package/skills/uiify/references/laws/accessibility.md +11 -0
  92. package/skills/uiify/references/laws/error-prevention.md +12 -0
  93. package/skills/uiify/references/laws/feedback.md +9 -0
  94. package/skills/uiify/references/laws/proximity.md +10 -0
  95. package/skills/uiify/references/laws/readability.md +9 -0
  96. package/skills/uiify/references/laws/von-restorff.md +9 -0
  97. package/skills/uiify/scripts/lint.mjs +1 -1
  98. package/skills/uiify/scripts/static.mjs +71 -14
@@ -0,0 +1,45 @@
1
+ # search-input
2
+
3
+ Binding: gap
4
+
5
+ Find records in a collection or page.
6
+
7
+ ## Use when
8
+
9
+ Help people find a record or content within a defined collection.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use a search field when the collection is small and browsing its links is clearer.
14
+
15
+ ## Structure
16
+
17
+ Use a labelled search form and a native search input. Identify the collection being searched and keep filters, results, and pagination in a clear reading order.
18
+
19
+ ## Responsive
20
+
21
+ Allow the field and result controls to wrap without clipping. Keep result content usable at narrow widths and zoom.
22
+
23
+ ## States
24
+
25
+ Explain empty and no-match results separately. When results update without a page navigation, announce a concise result status.
26
+
27
+ ## Verify
28
+
29
+ Check the visible label, submitted query behavior, empty/no-match states, keyboard access, and result announcement when updates are dynamic.
30
+
31
+ ## Common mistake
32
+
33
+ Showing a magnifying-glass icon without an accessible name for the search field.
34
+
35
+ ## Custom implementation
36
+
37
+ Use a search form with an associated label and an input of type search. This app-level recipe does not add a UIify search-input component.
38
+
39
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
40
+
41
+ ## Sources
42
+
43
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/search) (verified 2026-10-17)
44
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
45
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-17)
@@ -0,0 +1,39 @@
1
+ # segmented-control
2
+
3
+ Binding: segmented-control
4
+
5
+ Choose one value from a short set of mutually exclusive options.
6
+
7
+ ## Use when
8
+
9
+ Let people switch among a few short, mutually exclusive values, such as a billing period or view mode.
10
+
11
+ ## Avoid when
12
+
13
+ Use ordinary links for navigation and Tabs only when each choice opens a corresponding panel. Prefer a select for many options or long labels.
14
+
15
+ ## Structure
16
+
17
+ Use SegmentedControl with a stable id and items that each have a value and label. Give the group an accessible name, and show the selected option with the component's native radio semantics.
18
+
19
+ ## Responsive
20
+
21
+ Allow the group to fit or stack at narrow widths without truncating labels or shrinking the targets.
22
+
23
+ ## States
24
+
25
+ Keep one value selected and update the associated content or setting when the selection changes. Use the documented client entry only when controlled state is required.
26
+
27
+ ## Verify
28
+
29
+ Test arrow-key selection, keyboard focus, group name, visible selected state, narrow-width layout, and that dependent content reflects the chosen value.
30
+
31
+ ## Common mistake
32
+
33
+ Styling unrelated navigation links as segmented options and hiding their link behavior.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/radio/) (verified 2026-10-17)
38
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-17)
39
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html) (verified 2026-10-17)
@@ -0,0 +1,42 @@
1
+ # select
2
+
3
+ Binding: select
4
+
5
+ Choose one value from a fixed list.
6
+
7
+ ## Use when
8
+
9
+ Choose one value from a finite list, especially when the form benefits from a native control.
10
+
11
+ ## Avoid when
12
+
13
+ Avoid a select when users must compare several options at once or when the task needs a richer search or selection interaction.
14
+
15
+ ## Structure
16
+
17
+ Associate a visible label with the select. Group related options with `optgroup` and provide an empty prompt only when the value is genuinely optional.
18
+
19
+ ## Responsive
20
+
21
+ Keep the native control usable at narrow widths and browser zoom; do not depend on a fixed-width option label.
22
+
23
+ ## States
24
+
25
+ Preserve the selected value after validation errors. Use native disabled, required, and invalid form semantics.
26
+
27
+ ## Verify
28
+
29
+ Confirm the label is announced, options can be selected by keyboard, and the chosen value survives an invalid submission.
30
+
31
+ ## Common mistake
32
+
33
+ Replacing a native select with a custom popup without a clear interaction need.
34
+
35
+ Example: `references/examples/select-basic.md`.
36
+
37
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
38
+
39
+ ## Sources
40
+
41
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-16)
42
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-16)
@@ -0,0 +1,43 @@
1
+ # sidebar
2
+
3
+ Binding: gap
4
+
5
+ Provide secondary navigation for a site or application section.
6
+
7
+ ## Use when
8
+
9
+ Provide a stable set of destinations within a larger site or application section.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use a sidebar for a short set of links that fits naturally in the page header or content.
14
+
15
+ ## Structure
16
+
17
+ Use a nav landmark with a concise accessible name and a list of links. Group links under headings only when the groups help people find destinations. Mark the current destination with aria-current="page".
18
+
19
+ ## Responsive
20
+
21
+ At narrow widths, place navigation in the document flow or expose it through a clearly named disclosure control. Keep DOM and keyboard order aligned with the page.
22
+
23
+ ## States
24
+
25
+ Show the current location in text or semantics, and preserve it when the navigation collapses or expands.
26
+
27
+ ## Verify
28
+
29
+ Check the landmark name when the page has multiple navigation regions, the current link state, keyboard access, and narrow-screen reflow.
30
+
31
+ ## Common mistake
32
+
33
+ Using a second navigation landmark with the same name for a different set of destinations.
34
+
35
+ ## Custom implementation
36
+
37
+ Use a named nav containing grouped lists of ordinary links. This app-level pattern does not add a UIify component.
38
+
39
+ ## Sources
40
+
41
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/navigation.html) (verified 2026-10-17)
42
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-17)
43
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
@@ -0,0 +1,38 @@
1
+ # skeleton
2
+
3
+ Binding: skeleton
4
+
5
+ A known content layout is temporarily loading and a close shape preview can reduce the perception of a blank page
6
+
7
+ ## Use when
8
+
9
+ A known content layout is temporarily loading and a close shape preview can reduce the perception of a blank page.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use skeletons for unknown layout, short waits, or as a substitute for an announced loading state. Do not present a false preview that suggests content is already available.
14
+
15
+ ## Structure
16
+
17
+ Use `Skeleton` only around content that will occupy the same space. Match the approximate width, height, and shape; keep a separate status message when the loading state needs announcement.
18
+
19
+ ## Responsive
20
+
21
+ Match the real content's responsive geometry and reserve its space so the page does not shift when it arrives.
22
+
23
+ ## States
24
+
25
+ While loading, Skeleton is aria-hidden and does not render children. When loading becomes false, it renders the actual children. Pulse/shimmer/none variants are available; motion is reduced by shipped styles.
26
+
27
+ ## Verify
28
+
29
+ Check loading and loaded transitions, no duplicate announcements, geometry at narrow widths, reduced motion, and that the final content replaces the placeholder.
30
+
31
+ ## Common mistake
32
+
33
+ Do not expose placeholder blocks as meaningful content or rely on their movement to announce progress.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-17)
38
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) (verified 2026-10-17)
@@ -0,0 +1,39 @@
1
+ # slider
2
+
3
+ Binding: slider
4
+
5
+ Set a value within a continuous or stepped range.
6
+
7
+ ## Use when
8
+
9
+ Let people adjust a value within meaningful lower and upper bounds.
10
+
11
+ ## Avoid when
12
+
13
+ Use a number field when people need exact numeric entry or the range has too many meaningful values to scan.
14
+
15
+ ## Structure
16
+
17
+ Use the documented Slider for one value and label it with the quantity and units. State the current value in adjacent text when it is not otherwise clear; set min, max, and step to match the task. Use SliderClient for a range with two thumbs, labels, or marks.
18
+
19
+ ## Responsive
20
+
21
+ Keep the track and thumb operable at narrow widths. Do not communicate the selected value by thumb position or color alone.
22
+
23
+ ## States
24
+
25
+ Expose the current value, bounds, step, and disabled state. Keep a numeric text entry alternative when precise adjustment is important.
26
+
27
+ ## Verify
28
+
29
+ Test keyboard adjustment, endpoints, step increments, accessible name and value, touch screen-reader operation, and any alternative numeric entry.
30
+
31
+ ## Common mistake
32
+
33
+ Showing a slider without a visible label or a way to understand its current value.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/slider/) (verified 2026-10-17)
38
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
39
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html) (verified 2026-10-17)
@@ -0,0 +1,38 @@
1
+ # spinner
2
+
3
+ Binding: spinner
4
+
5
+ A task is actively pending and there is no reliable completion percentage
6
+
7
+ ## Use when
8
+
9
+ A task is actively pending and there is no reliable completion percentage. Pair the indicator with a short label that says what is waiting.
10
+
11
+ ## Avoid when
12
+
13
+ Do not show a spinner for a task with measurable progress; use a labeled progress element. Avoid showing it for work that completes too quickly to perceive.
14
+
15
+ ## Structure
16
+
17
+ Use `Spinner` with a specific label. Its status role and polite live region announce the label; use showLabel when the text should also be visible.
18
+
19
+ ## Responsive
20
+
21
+ Keep the indicator near the task it describes, reserve enough space to prevent layout jumps, and do not let fixed positioning obscure controls.
22
+
23
+ ## States
24
+
25
+ The delay prop writes a delayed state marker; shipped CSS disables animation in that state, but does not hide the element or schedule a timer. The component supports sm/md/lg sizes and center/fixed/absolute alignment. Motion respects reduced-motion preferences in UIify styles.
26
+
27
+ ## Verify
28
+
29
+ Check the announced label, visible label when needed, the delayed marker behavior, alignment at narrow widths, and reduced-motion rendering. Ensure completion removes the status.
30
+
31
+ ## Common mistake
32
+
33
+ A spinner without a meaningful label says that something is happening but not what the person is waiting for. Do not treat `delay` as a timer that hides the indicator.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-17)
38
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) (verified 2026-10-17)
@@ -0,0 +1,49 @@
1
+ # stats-bar
2
+
3
+ Binding: gap
4
+
5
+ Summarize a few named values for one subject or time period.
6
+
7
+ ## Use when
8
+
9
+ A few named values summarize one subject, population, and time period.
10
+
11
+ ## Avoid when
12
+
13
+ Do not show unlabeled numbers, mix unlike periods/populations, or use a stats bar when people need detailed comparisons or exploration.
14
+
15
+ ## Structure
16
+
17
+ This is an app-level composition, not a UIify component. Use a description list for term/value pairs and label units and the time period in text.
18
+
19
+ ## Responsive
20
+
21
+ Let each label/value pair wrap and keep pairs together. Preserve source order as columns collapse.
22
+
23
+ ## States
24
+
25
+ For values that update, explain their meaning and update timing; announce important changes without repeatedly interrupting users.
26
+
27
+ ## Verify
28
+
29
+ Check labels, units, period, number formatting, reading order, and narrow layout. Ensure decoration does not carry the only meaning.
30
+
31
+ ## Common mistake
32
+
33
+ “1,248” without a label, unit, or period is not an interpretable metric.
34
+
35
+ ## Custom implementation
36
+
37
+ ```html
38
+ <dl>
39
+ <div><dt>Active users</dt><dd>1,248</dd></div>
40
+ <div><dt>Period</dt><dd>Last 30 days</dd></div>
41
+ </dl>
42
+ ```
43
+
44
+ This is an app-level composition; UIify does not currently ship this component.
45
+
46
+ ## Sources
47
+
48
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl) (verified 2026-10-16)
49
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,43 @@
1
+ # stepper
2
+
3
+ Binding: gap
4
+
5
+ Show ordered steps and identify the current step in a multi-step task.
6
+
7
+ ## Use when
8
+
9
+ Show the sequence and current position in a multi-step task.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use a stepper for unrelated navigation or suggest that future steps are already complete.
14
+
15
+ ## Structure
16
+
17
+ Use an ordered list in task order. Identify the current step with aria-current="step" and provide concise step names.
18
+
19
+ ## Responsive
20
+
21
+ Keep the current step and sequence understandable when labels wrap or the list becomes compact.
22
+
23
+ ## States
24
+
25
+ Distinguish completed, current, and upcoming steps in text or semantics, not color alone. Update the current marker only when the task advances.
26
+
27
+ ## Verify
28
+
29
+ Check list order, current-step announcement, keyboard sequence through any step links, and narrow-screen reading order.
30
+
31
+ ## Common mistake
32
+
33
+ Marking every past step complete when users can still need to correct its information.
34
+
35
+ ## Custom implementation
36
+
37
+ Render the sequence as an ol and set aria-current="step" on the current item. This task-progress pattern does not add a UIify component.
38
+
39
+ ## Sources
40
+
41
+ - [www.w3.org](https://www.w3.org/TR/wai-aria-1.2/#aria-current) (verified 2026-10-17)
42
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
43
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html) (verified 2026-10-17)
@@ -0,0 +1,41 @@
1
+ # switch
2
+
3
+ Binding: switch
4
+
5
+ Expose a binary setting that takes effect immediately.
6
+
7
+ ## Use when
8
+
9
+ Let a person turn a persistent setting on or off and apply the change immediately.
10
+
11
+ ## Avoid when
12
+
13
+ Use a checkbox for a form choice that is applied on submit, or a button for a one-time action.
14
+
15
+ ## Structure
16
+
17
+ Use the documented Switch with a stable visible label that describes the setting. Keep the label unchanged as the state changes, and expose the current checked state.
18
+
19
+ ## Responsive
20
+
21
+ Keep the label and control together as they wrap. Ensure the complete control remains operable at narrow widths.
22
+
23
+ ## States
24
+
25
+ Make on, off, and disabled states clear. If changing the setting triggers remote work, communicate pending and failure feedback in text.
26
+
27
+ ## Verify
28
+
29
+ Test label activation, Space-key operation, checked-state announcement, persistence after navigation, and feedback for failed updates.
30
+
31
+ ## Common mistake
32
+
33
+ Using a switch for a form value that does not take effect until the user submits.
34
+
35
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
36
+
37
+ ## Sources
38
+
39
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/switch/) (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/status-messages.html) (verified 2026-10-17)
@@ -0,0 +1,39 @@
1
+ # table-of-contents
2
+
3
+ Binding: table-of-contents
4
+
5
+ Help readers navigate sections within a long page.
6
+
7
+ ## Use when
8
+
9
+ Help readers jump among named sections in a long document or article.
10
+
11
+ ## Avoid when
12
+
13
+ Do not add a contents rail to a short page or include headings that are not present in the content.
14
+
15
+ ## Structure
16
+
17
+ Use the documented TableOfContents parts with a named navigation region and links whose fragments match stable heading IDs. Reflect heading hierarchy with the documented level.
18
+
19
+ ## Responsive
20
+
21
+ Keep the links reachable on small screens. The native popover trigger can expose the contents without removing the in-page heading and fragment destinations.
22
+
23
+ ## States
24
+
25
+ Use the base entry for native fragment navigation. The /client entry can add scroll tracking and controlled open/current state; it enhances the native shell after hydration.
26
+
27
+ ## Verify
28
+
29
+ Follow each link and confirm its target exists, is visible after navigation, and is not obscured by a sticky header. Check the named landmark and keyboard operation of the popover trigger.
30
+
31
+ ## Common mistake
32
+
33
+ Using scroll position alone to highlight a link while its fragment target is missing or unstable.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/navigation.html) (verified 2026-10-17)
38
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
39
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html) (verified 2026-10-17)
@@ -0,0 +1,43 @@
1
+ # table
2
+
3
+ Binding: table
4
+
5
+ Compare structured member records.
6
+
7
+ ## Use when
8
+
9
+ Compare records across shared attributes in rows and columns. Use a list for a one-dimensional set of items and CSS grid for page layout.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use a table only to position content. Turn rows into cards only when people no longer need to compare values across records.
14
+
15
+ ## Structure
16
+
17
+ Use `Table.Root`, `Table.Caption`, `Table.Header`, `Table.ColumnHeader`, `Table.Body`, `Table.Row`, and `Table.Cell` for native table structure. Give the table a caption or an accessible name and mark header cells so their relationship to data is clear. Keep action controls in a separate column. Align numbers to the end and use tabular numerals for easier comparison.
18
+
19
+ ## Responsive
20
+
21
+ Preserve the table's row and column relationships. If columns need horizontal scrolling, prioritize which columns remain visible and make the overflow region usable with a keyboard. Do not squeeze text until values are unreadable.
22
+
23
+ ## States
24
+
25
+ Distinguish an empty dataset from a filter with no matches. Communicate loading and errors, and keep selection or sort state visible when requested. The native table is Tier 0; row selection, sorting, and expansion require the `/client` entry.
26
+
27
+ ## Verify
28
+
29
+ Inspect the accessibility tree for the caption, header cells, and their data relationships. Navigate through the table at a narrow viewport and check any horizontal overflow with a keyboard. Test empty, no-match, loading, error, selected, and sorted states that the page supports.
30
+
31
+ ## Common mistake
32
+
33
+ A grid of `div` elements can look like a table but does not provide native row and column header relationships.
34
+
35
+ Example: `references/examples/table-controls.md`.
36
+
37
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
38
+
39
+ ## Sources
40
+
41
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/tables/) (verified 2026-10-17)
42
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/table/) (verified 2026-10-17)
43
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-17)
@@ -0,0 +1,38 @@
1
+ # tabs
2
+
3
+ Binding: tabs
4
+
5
+ Switch between alternate views of the same object.
6
+
7
+ ## Use when
8
+
9
+ Switch between equivalent views of the same object when only one view needs to be visible at a time.
10
+
11
+ ## Avoid when
12
+
13
+ Use links for navigation, a stepper for sequential tasks, and side-by-side content when people need to compare views.
14
+
15
+ ## Structure
16
+
17
+ UIify `Tabs` takes an `id`, `items` with a `value`, `label`, and `panel`, and an optional `defaultValue` and `orientation`. It renders a native radio group with one label and panel per item; it does not implement the ARIA tablist pattern. Set `defaultValue` so a useful panel is selected initially. Keep labels short and make each panel's content match its label.
18
+
19
+ ## Responsive
20
+
21
+ Let the radio labels wrap or scroll as a group on narrow screens; do not shrink them until they are hard to read. Keep the selected label and its panel visually connected.
22
+
23
+ ## States
24
+
25
+ `defaultValue` selects the initial radio and panel; changing the native radio changes the visible panel. The panels are CSS-only and work without JavaScript. Use native radio keyboard behavior; do not assume the APG tablist arrow-key model.
26
+
27
+ ## Verify
28
+
29
+ Check one radio is selected, each label selects its matching panel, and Tab and arrow keys work as they do for a native radio group. Verify the group at narrow widths and with long labels.
30
+
31
+ ## Common mistake
32
+
33
+ Using tabs as the site's primary navigation hides the fact that each choice is a different page.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/) (verified 2026-10-17)
38
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio) (verified 2026-10-17)
@@ -0,0 +1,39 @@
1
+ # tags-input
2
+
3
+ Binding: tags-input
4
+
5
+ Enter and manage a set of text tokens such as recipients or filters.
6
+
7
+ ## Use when
8
+
9
+ Let people enter multiple free-form values as removable tokens.
10
+
11
+ ## Avoid when
12
+
13
+ Use a select or checkbox group for a fixed choice set. Do not add suggestion-list semantics unless the complete combobox interaction is implemented.
14
+
15
+ ## Structure
16
+
17
+ Use TagsInput.Root with the documented List, Tag, TagRemove, and Input parts. Give the text input a clear accessible name and keep each remove control adjacent to its tag. UIify currently names each one “Remove tag”; verify that the tag context is announced when moving among removal controls.
18
+
19
+ ## Responsive
20
+
21
+ Allow tags to wrap and the input to remain reachable as the list grows. Keep remove controls visible and operable at narrow widths.
22
+
23
+ ## States
24
+
25
+ Communicate validation, duplicate values, and maximum-tag limits in text. Preserve existing tags when one value is rejected.
26
+
27
+ ## Verify
28
+
29
+ Test adding, removing, paste and delimiter behavior, duplicate and limit cases, keyboard access, accessible names, and long lists. If removal controls are ambiguous in the target assistive technology, use custom controls with names that include the tag value.
30
+
31
+ ## Common mistake
32
+
33
+ Rendering tags as decorative chips with no accessible way to identify or remove each value.
34
+
35
+ ## Sources
36
+
37
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-17)
38
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) (verified 2026-10-17)
39
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html) (verified 2026-10-17)
@@ -0,0 +1,52 @@
1
+ # testimonial
2
+
3
+ Binding: gap
4
+
5
+ Attribute a customer quote to a named source.
6
+
7
+ ## Use when
8
+
9
+ A real customer quotation adds useful evidence to a product or service claim.
10
+
11
+ ## Avoid when
12
+
13
+ Do not invent a quote, imply an endorsement that was not given, or use a testimonial as the only source for a factual claim.
14
+
15
+ ## Structure
16
+
17
+ This is an app-level composition, not a UIify component. Mark the quoted words with blockquote and include a clear attribution in a nearby caption or paragraph. Keep the quote and its speaker together.
18
+
19
+ ## Responsive
20
+
21
+ Let the quotation wrap at a readable line length. Keep attribution adjacent on narrow screens and do not crop text into an image.
22
+
23
+ ## States
24
+
25
+ If quotes rotate, provide labeled controls and user control over rotation; otherwise prefer a static quote.
26
+
27
+ ## Verify
28
+
29
+ Check quote accuracy and attribution, semantic quotation markup, text contrast, reading order, and keyboard access for any controls.
30
+
31
+ ## Common mistake
32
+
33
+ A decorative quotation mark does not identify who said the words.
34
+
35
+ ## Custom implementation
36
+
37
+ ```html
38
+ <figure>
39
+ <blockquote cite="/customers/acme">
40
+ <p>Our team can find the latest project status quickly.</p>
41
+ </blockquote>
42
+ <figcaption>Jordan Lee, Operations Lead</figcaption>
43
+ </figure>
44
+ ```
45
+
46
+ This is an app-level composition; UIify does not currently ship this component.
47
+
48
+ ## Sources
49
+
50
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote) (verified 2026-10-16)
51
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure) (verified 2026-10-16)
52
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)