@gunkin/uiify 0.0.15-alpha → 0.0.17-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 (112) hide show
  1. package/README.md +59 -1
  2. package/agents/components.md +1 -0
  3. package/agents/index.md +7 -1
  4. package/agents/reference/components/table-of-contents.md +185 -0
  5. package/dist/components/index.d.ts +1 -0
  6. package/dist/components/index.d.ts.map +1 -1
  7. package/dist/components/index.js +1 -0
  8. package/dist/components/index.js.map +1 -1
  9. package/dist/components/table-of-contents/TableOfContents.d.ts +22 -0
  10. package/dist/components/table-of-contents/TableOfContents.d.ts.map +1 -0
  11. package/dist/components/table-of-contents/TableOfContents.js +142 -0
  12. package/dist/components/table-of-contents/TableOfContents.js.map +1 -0
  13. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts +18 -0
  14. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts.map +1 -0
  15. package/dist/components/table-of-contents/client/TableOfContentsClient.js +140 -0
  16. package/dist/components/table-of-contents/client/TableOfContentsClient.js.map +1 -0
  17. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts +7 -0
  18. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts.map +1 -0
  19. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js +48 -0
  20. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js.map +1 -0
  21. package/dist/components/table-of-contents/client/index.d.ts +5 -0
  22. package/dist/components/table-of-contents/client/index.d.ts.map +1 -0
  23. package/dist/components/table-of-contents/client/index.js +23 -0
  24. package/dist/components/table-of-contents/client/index.js.map +1 -0
  25. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts +3 -0
  26. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts.map +1 -0
  27. package/dist/components/table-of-contents/client/table-of-contents-context.js +7 -0
  28. package/dist/components/table-of-contents/client/table-of-contents-context.js.map +1 -0
  29. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts +3 -0
  30. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts.map +1 -0
  31. package/dist/components/table-of-contents/client/table-of-contents-interactions.js +144 -0
  32. package/dist/components/table-of-contents/client/table-of-contents-interactions.js.map +1 -0
  33. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts +3 -0
  34. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts.map +1 -0
  35. package/dist/components/table-of-contents/client/table-of-contents-pointer.js +94 -0
  36. package/dist/components/table-of-contents/client/table-of-contents-pointer.js.map +1 -0
  37. package/dist/components/table-of-contents/client.d.ts +1 -0
  38. package/dist/components/table-of-contents/client.js +1 -0
  39. package/dist/components/table-of-contents/index.d.ts +3 -0
  40. package/dist/components/table-of-contents/index.d.ts.map +1 -0
  41. package/dist/components/table-of-contents/index.js +21 -0
  42. package/dist/components/table-of-contents/index.js.map +1 -0
  43. package/dist/components/table-of-contents/scrollspy-selection.d.ts +4 -0
  44. package/dist/components/table-of-contents/scrollspy-selection.d.ts.map +1 -0
  45. package/dist/components/table-of-contents/scrollspy-selection.js +31 -0
  46. package/dist/components/table-of-contents/scrollspy-selection.js.map +1 -0
  47. package/dist/components/table-of-contents/scrollspy.d.ts +4 -0
  48. package/dist/components/table-of-contents/scrollspy.d.ts.map +1 -0
  49. package/dist/components/table-of-contents/scrollspy.js +178 -0
  50. package/dist/components/table-of-contents/scrollspy.js.map +1 -0
  51. package/dist/components/table-of-contents/types.d.ts +123 -0
  52. package/dist/components/table-of-contents/types.d.ts.map +1 -0
  53. package/dist/components/table-of-contents/types.js +1 -0
  54. package/dist/components/table-of-contents/types.js.map +1 -0
  55. package/dist/components/table-of-contents.d.ts +1 -0
  56. package/dist/components/table-of-contents.js +1 -0
  57. package/dist/styles/index.css +1 -1
  58. package/package.json +3 -2
  59. package/skills/uiify/SKILL.md +145 -0
  60. package/skills/uiify/references/compositions/card-rhythm.md +16 -0
  61. package/skills/uiify/references/compositions/destructive-confirmation.md +17 -0
  62. package/skills/uiify/references/compositions/form-grouping.md +16 -0
  63. package/skills/uiify/references/compositions/hero-actions.md +16 -0
  64. package/skills/uiify/references/compositions/page-frame.md +16 -0
  65. package/skills/uiify/references/compositions/pricing-actions.md +15 -0
  66. package/skills/uiify/references/compositions/save-feedback.md +15 -0
  67. package/skills/uiify/references/compositions/table-controls.md +16 -0
  68. package/skills/uiify/references/elements/alert-modal.md +15 -0
  69. package/skills/uiify/references/elements/avatar.md +18 -0
  70. package/skills/uiify/references/elements/badge.md +18 -0
  71. package/skills/uiify/references/elements/bar-chart.md +29 -0
  72. package/skills/uiify/references/elements/button.md +14 -0
  73. package/skills/uiify/references/elements/card.md +14 -0
  74. package/skills/uiify/references/elements/code-block.md +21 -0
  75. package/skills/uiify/references/elements/command-palette.md +22 -0
  76. package/skills/uiify/references/elements/cookie-banner.md +23 -0
  77. package/skills/uiify/references/elements/date-picker.md +19 -0
  78. package/skills/uiify/references/elements/divider.md +18 -0
  79. package/skills/uiify/references/elements/empty-state.md +22 -0
  80. package/skills/uiify/references/elements/feature-grid.md +14 -0
  81. package/skills/uiify/references/elements/field.md +14 -0
  82. package/skills/uiify/references/elements/footer.md +14 -0
  83. package/skills/uiify/references/elements/form.md +14 -0
  84. package/skills/uiify/references/elements/header.md +14 -0
  85. package/skills/uiify/references/elements/hero.md +14 -0
  86. package/skills/uiify/references/elements/image-gallery.md +20 -0
  87. package/skills/uiify/references/elements/inline-alert.md +18 -0
  88. package/skills/uiify/references/elements/input.md +14 -0
  89. package/skills/uiify/references/elements/logo-wall.md +20 -0
  90. package/skills/uiify/references/elements/pagination.md +14 -0
  91. package/skills/uiify/references/elements/password-input.md +19 -0
  92. package/skills/uiify/references/elements/pricing-table.md +13 -0
  93. package/skills/uiify/references/elements/progress-bar.md +19 -0
  94. package/skills/uiify/references/elements/search-input.md +14 -0
  95. package/skills/uiify/references/elements/select.md +14 -0
  96. package/skills/uiify/references/elements/sidebar.md +20 -0
  97. package/skills/uiify/references/elements/stats-bar.md +21 -0
  98. package/skills/uiify/references/elements/stepper.md +20 -0
  99. package/skills/uiify/references/elements/switch.md +14 -0
  100. package/skills/uiify/references/elements/table.md +14 -0
  101. package/skills/uiify/references/elements/testimonial.md +21 -0
  102. package/skills/uiify/references/elements/textarea.md +14 -0
  103. package/skills/uiify/references/elements/timeline.md +20 -0
  104. package/skills/uiify/references/elements/toast.md +13 -0
  105. package/skills/uiify/references/laws/accessibility.md +11 -0
  106. package/skills/uiify/references/laws/error-prevention.md +12 -0
  107. package/skills/uiify/references/laws/feedback.md +9 -0
  108. package/skills/uiify/references/laws/proximity.md +10 -0
  109. package/skills/uiify/references/laws/readability.md +9 -0
  110. package/skills/uiify/references/laws/von-restorff.md +9 -0
  111. package/skills/uiify/scripts/lint.mjs +56 -0
  112. package/skills/uiify/scripts/static.mjs +95 -0
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: uiify
3
+ description: >-
4
+ Use when creating or improving a web page with @gunkin/uiify, especially when a project needs component
5
+ coverage, a distinctive visual direction, or UIify-aware design and implementation guidance.
6
+ disable-model-invocation: true
7
+ ---
8
+
9
+ # /uiify
10
+
11
+ Page request: $ARGUMENTS
12
+
13
+ Add UIify component and UX knowledge to the user's request. Follow the agent's normal workflow and the project's instructions; this skill is a reference, not a separate interaction protocol. Do not add approval gates, fixed stages, routine questions or pauses. Use ordinary language in the user's language for useful progress and results, without internal stage names or machine-readable status markers. Proceed with authorized work autonomously; handle genuine missing requirements through the agent's normal workflow.
14
+
15
+ ## Project context
16
+
17
+ Use the explicit request in the conversation if the client does not substitute `$ARGUMENTS`. Read repository instructions, the relevant package manifest and framework config, and a route example as needed. Resolve `@gunkin/uiify` from the selected workspace, including hoisted dependencies in parent workspaces. Follow the requested framework's route conventions and RSC/client boundaries. Create the requested route rather than replacing the home page; `src/App.tsx` is a destination only when it matches the request.
18
+
19
+ Reuse existing design decisions, tokens and conventions, including `DESIGN.md` when present. Do not create `DESIGN.md` or a managed state block merely because this skill was invoked. Create or update planning files only when the user or project workflow calls for them, preserving unrelated content. Keep changes within the requested page and necessary source files; setup and dependency changes follow the user's request and project rules.
20
+
21
+ ## Select knowledge for the page
22
+
23
+ Match the needed elements to the Index by name or alias. Use the listed component binding; never invent a binding. A `gap` or an unlisted element needs custom UI, not a guessed UIify API.
24
+
25
+ For each selected element with a fourth-column reference path, read that file once. A blank path means no curated recipe is available. From the Composition index, read only relationships where both elements are needed on the page. Read each selected reference and linked law once, including the related laws named by element recipes. Do not load the complete catalog or unrelated component references.
26
+
27
+ For mapped components, read the resolved package's `agents/index.md` once and the relevant `agents/reference/components/<name>.md`, then adapt a documented example. Import from `@gunkin/uiify/components/<name>`. Inspect Runtime exports and the Types/declaration file before rendering: use the explicit `NameRoot` export when available. A namespace export is not itself a JSX component; use its `.Root` or an explicit root export. Prefer these version-matched references over memory. Use UIify wherever its documented API covers the interaction; for gaps, use semantic native HTML or custom components following UIify's public styling and accessibility contracts.
28
+
29
+ ## Design guidance
30
+
31
+ Consult `frontend-design` when available for design direction; if absent, use the built-in guidance below. Consult `vercel-react-best-practices` for relevant React performance decisions and `web-design-guidelines` for reviews. These skills are optional references. UIify's public component and styling contracts take precedence over conflicting advice.
32
+
33
+ Ground the visual direction in the subject, audience and primary job. Plan clear typography, hierarchy, grouping, purposeful copy and responsive layout using existing semantic color roles. Choose one signature detail appropriate to the subject and keep the rest restrained. Avoid defaulting to a gradient hero, repeated equal cards or decorative numbering without a reason. Preserve visible focus, keyboard-sized targets and reduced-motion behavior.
34
+
35
+ For a settings page, group fields by the decision the person makes, keep labels and validation close to controls, and give one `Button` the save action. Use documented anatomy:
36
+
37
+ ```tsx
38
+ <Field.Root id="email" invalid={invalid} required>
39
+ <Field.Label fieldId="email" required>Email</Field.Label>
40
+ <Field.Control as="input" fieldId="email" type="email" invalid={invalid} required />
41
+ <Field.Error fieldId="email" invalid={invalid}>Enter a valid email address</Field.Error>
42
+ </Field.Root>
43
+ <Button type="submit">Save changes</Button>
44
+ ```
45
+
46
+ Do not add an unrelated marketing hero or make every field group an equally prominent card. For unresolved gaps, explain material limitations in plain language; research only when it helps the request. Research does not grant approval to change the library's public API or mark a catalog gap accepted.
47
+
48
+ ## Verification guidance
49
+
50
+ Use applicable project build, typecheck and test commands when permitted. The optional `node <resolved-skill-directory>/scripts/lint.mjs <project-root>` checks only the static subset enabled by accepted laws in existing design state. No enabled checks is not proof of accessibility. Missing parsers or execution failures mean unavailable, never a pass.
51
+
52
+ Reuse existing browser and accessibility tooling to inspect responsive layouts, keyboard access and requested interactions. When missing tools are needed for quality verification, use Playwright for browser checks and axe-core (or the project's axe integration) for accessibility checks. Before installing missing Playwright or axe-core packages or downloading browser binaries, notify the user briefly in their language, explaining what will be installed and why. For example: “I'll install Playwright and axe-core as development tools to check the page in a browser and catch accessibility issues.” This is a notification, not a confirmation question; continue within existing authorization and respect project installation rules. Use the project's package manager and development dependencies, reuse existing integrations, and install only what is needed.
53
+
54
+ Repair findings within the task's scope and rerun the affected checks. If commands, installation or browser execution are unavailable or prohibited, report those checks as not run and explain the limitation. Report actual checks and remaining issues in ordinary language; never claim a check passed without running it.
55
+
56
+ ## Index
57
+
58
+ One line per element: `element|aliases|uiify component or gap|reference path`. A blank final field means no curated reference.
59
+
60
+ ```text
61
+ accordion|faq-accordion,disclosure|accordion|
62
+ alert-modal|confirmation-dialog,alert-dialog|alert-modal|references/elements/alert-modal.md
63
+ avatar|profile-picture|gap|references/elements/avatar.md
64
+ badge|chip,tag|gap|references/elements/badge.md
65
+ bar-chart|column-chart|gap|references/elements/bar-chart.md
66
+ breadcrumb|breadcrumbs|breadcrumb|
67
+ button|cta-button,icon-button,primary-button|button|references/elements/button.md
68
+ candle-chart|candlestick-chart|candle-chart|
69
+ card|content-card|gap|references/elements/card.md
70
+ carousel|testimonial-carousel,image-slider|carousel|
71
+ checkbox||checkbox|
72
+ code-block|code-snippet|gap|references/elements/code-block.md
73
+ collapsible|expandable-section|collapsible|
74
+ color-picker||color-picker|
75
+ combobox|autocomplete,typeahead|combobox|
76
+ command-palette|spotlight-search|gap|references/elements/command-palette.md
77
+ context-menu|right-click-menu|context-menu|
78
+ cookie-banner|cookie-consent|gap|references/elements/cookie-banner.md
79
+ date-picker|calendar-picker|gap|references/elements/date-picker.md
80
+ divider|separator|gap|references/elements/divider.md
81
+ drawer|sheet,off-canvas-menu|drawer|
82
+ dropdown-menu|menu|dropdown-menu|
83
+ empty-state|no-results|gap|references/elements/empty-state.md
84
+ feature-grid|feature-cards,feature-list|gap|references/elements/feature-grid.md
85
+ field|form-field|field|references/elements/field.md
86
+ file-upload|file-input,dropzone|file-upload|
87
+ footer|site-footer|gap|references/elements/footer.md
88
+ form||form|references/elements/form.md
89
+ header|navbar,top-nav|header|references/elements/header.md
90
+ hero|hero-section,hero-banner|gap|references/elements/hero.md
91
+ hover-card||hover-card|
92
+ image-gallery|gallery,lightbox|gap|references/elements/image-gallery.md
93
+ inline-alert|banner-alert,callout|gap|references/elements/inline-alert.md
94
+ input|text-input|input|references/elements/input.md
95
+ line-chart|sparkline|line-chart|
96
+ logo-wall|logo-cloud,customer-logos|gap|references/elements/logo-wall.md
97
+ modal|dialog|modal|
98
+ number-field|number-input|number-field|
99
+ otp-input|pin-input|otp-input|
100
+ pagination||pagination|references/elements/pagination.md
101
+ password-input|show-hide-password|gap|references/elements/password-input.md
102
+ popup|popover|popup|
103
+ pricing-table|pricing,plan-cards,pricing-plans|gap|references/elements/pricing-table.md
104
+ progress-bar|progress,linear-progress|gap|references/elements/progress-bar.md
105
+ radio-group|radio|radio-group|
106
+ rating|star-rating|rating|
107
+ search-input|search-box|gap|references/elements/search-input.md
108
+ segmented-control||segmented-control|
109
+ select|native-select|select|references/elements/select.md
110
+ sidebar|sidebar-nav,side-nav|gap|references/elements/sidebar.md
111
+ skeleton|skeleton-loader|skeleton|
112
+ slider|range-slider|slider|
113
+ spinner|loading-indicator|spinner|
114
+ stats-bar|stat-card,metrics|gap|references/elements/stats-bar.md
115
+ stepper|step-indicator,wizard-steps|gap|references/elements/stepper.md
116
+ switch|toggle-switch|switch|references/elements/switch.md
117
+ table|data-table,comparison-table|table|references/elements/table.md
118
+ table-of-contents|toc,in-page-nav|table-of-contents|
119
+ tabs|tab-navigation|tabs|
120
+ tags-input|token-input|tags-input|
121
+ testimonial|testimonials,quote-card|gap|references/elements/testimonial.md
122
+ textarea||textarea|references/elements/textarea.md
123
+ timeline||gap|references/elements/timeline.md
124
+ toast|snackbar,toast-notification|toast|references/elements/toast.md
125
+ toggle|toggle-button|toggle|
126
+ toggle-group|button-group|toggle-group|
127
+ toolbar||toolbar|
128
+ tooltip||tooltip|
129
+ virtual-scroll|virtualized-list|virtual-scroll|
130
+ ```
131
+
132
+ ## Composition index
133
+
134
+ One line per accepted relationship: `name|element,element|reference path`.
135
+
136
+ ```text
137
+ card-rhythm|feature-grid,card|references/compositions/card-rhythm.md
138
+ destructive-confirmation|alert-modal,button|references/compositions/destructive-confirmation.md
139
+ form-grouping|form,field|references/compositions/form-grouping.md
140
+ hero-actions|hero,button|references/compositions/hero-actions.md
141
+ page-frame|header,footer|references/compositions/page-frame.md
142
+ pricing-actions|pricing-table,button|references/compositions/pricing-actions.md
143
+ save-feedback|button,toast|references/compositions/save-feedback.md
144
+ table-controls|table,pagination|references/compositions/table-controls.md
145
+ ```
@@ -0,0 +1,16 @@
1
+ # card-rhythm
2
+
3
+ Use when both feature-grid and card are present.
4
+
5
+ Law: references/laws/proximity.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Keep cards in one group only when the items share a purpose and hierarchy. Preserve readable separation and source order as the layout becomes a single column.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/visual-presentation.html) (verified 2026-10-16)
@@ -0,0 +1,17 @@
1
+ # destructive-confirmation
2
+
3
+ Use when both alert-modal and button are present.
4
+
5
+ Law: references/laws/error-prevention.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ State the consequence in the dialog title or message. Name both the destructive action and the safe way to cancel, identify the dialog, and follow the modal-dialog focus and keyboard pattern.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/) (verified 2026-10-16)
17
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-16)
@@ -0,0 +1,16 @@
1
+ # form-grouping
2
+
3
+ Use when both form and field are present.
4
+
5
+ Law: references/laws/proximity.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Group related controls with a fieldset and legend. Keep each control labelled and present groups in the order people complete them.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-16)
@@ -0,0 +1,16 @@
1
+ # hero-actions
2
+
3
+ Use when both hero and button are present.
4
+
5
+ Law: references/laws/von-restorff.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Make the primary action easy to identify and keep the secondary action visually quieter. Use concrete action labels and retain visible keyboard focus.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,16 @@
1
+ # page-frame
2
+
3
+ Use when both header and footer are present.
4
+
5
+ Law: references/laws/readability.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Use consistent page landmarks and repeated navigation order. Align header, main content and footer to one responsive content measure without clipping narrow screens.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,15 @@
1
+ # pricing-actions
2
+
3
+ Use when both pricing-table and button are present.
4
+
5
+ Law: references/laws/proximity.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Keep each plan action associated with the plan name, price and included features. Let the page stack plans at narrow widths without changing their reading order.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,15 @@
1
+ # save-feedback
2
+
3
+ Use when both button and toast are present.
4
+
5
+ Law: references/laws/feedback.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Place save feedback near the action it describes and announce the update as a status message. Keep the message understandable without color or motion.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-16)
@@ -0,0 +1,16 @@
1
+ # table-controls
2
+
3
+ Use when both table and pagination are present.
4
+
5
+ Law: references/laws/proximity.md
6
+
7
+ ## Rule
8
+
9
+ ## Rule
10
+
11
+ Keep labeled search and filters associated with the table they change. Identify the current page and preserve a clear sequence from controls to rows to pagination.
12
+
13
+ ## Sources
14
+
15
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-16)
16
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,15 @@
1
+ # alert-modal
2
+
3
+ Binding: alert-modal
4
+
5
+ Confirm an irreversible action before executing it.
6
+
7
+ Explain the consequence before asking for a decision. Give the dialog a clear title, keep the safe action available, and return focus after the choice.
8
+
9
+ Related laws: references/laws/error-prevention.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/) (verified 2026-10-16)
15
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-16)
@@ -0,0 +1,18 @@
1
+ # avatar
2
+
3
+ Binding: gap
4
+
5
+ Identify a person or account with a compact image and fallback.
6
+
7
+ When text beside the image already identifies the person, use an empty alt value; otherwise write a concise alternative that identifies the person without repeating nearby text.
8
+
9
+ ```html
10
+ <img src="/people/ada.webp" width="40" height="40" alt="" />
11
+ <span>Ada Lovelace</span>
12
+ ```
13
+
14
+ The empty alternative is appropriate here because the adjacent text already names the person.
15
+
16
+ ## Sources
17
+
18
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) (verified 2026-10-16)
@@ -0,0 +1,18 @@
1
+ # badge
2
+
3
+ Binding: gap
4
+
5
+ Mark a short status or category beside related content.
6
+
7
+ Keep a badge short and attach it to the item it qualifies. If the text conveys status, include the status in words and do not rely on color alone.
8
+
9
+ ```html
10
+ <span>Pending review</span>
11
+ ```
12
+
13
+ This is an app-level composition recipe; it does not add a component to UIify.
14
+
15
+ ## Sources
16
+
17
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span) (verified 2026-10-16)
18
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,29 @@
1
+ # bar-chart
2
+
3
+ Binding: gap
4
+
5
+ Compare values across a small set of named categories.
6
+
7
+ Give the chart a concise caption and provide the same values in a readable table. Treat chart color and geometry as supporting views of the values.
8
+
9
+ ```html
10
+ <figure>
11
+ <figcaption>Signups by month</figcaption>
12
+ <svg role="img" aria-label="January 12, February 19">…</svg>
13
+ <table>
14
+ <caption>Signups by month</caption>
15
+ <thead><tr><th scope="col">Month</th><th scope="col">Signups</th></tr></thead>
16
+ <tbody>
17
+ <tr><th scope="row">January</th><td>12</td></tr>
18
+ <tr><th scope="row">February</th><td>19</td></tr>
19
+ </tbody>
20
+ </table>
21
+ </figure>
22
+ ```
23
+
24
+ This is an app-level composition recipe; it does not add a component to UIify.
25
+
26
+ ## Sources
27
+
28
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure) (verified 2026-10-16)
29
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # button
2
+
3
+ Binding: button
4
+
5
+ Expose a clear action with its native interaction semantics.
6
+
7
+ Name the action with a concrete verb. Use one visually prominent action for the current decision and keep secondary actions understandable.
8
+
9
+ Related laws: references/laws/von-restorff.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # card
2
+
3
+ Binding: gap
4
+
5
+ Group one feature heading and its explanation.
6
+
7
+ Group related information under a heading. Give a card a link or control only when the entire surface has one clear destination or action.
8
+
9
+ Related laws: references/laws/proximity.md, references/laws/readability.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/visual-presentation.html) (verified 2026-10-16)
@@ -0,0 +1,21 @@
1
+ # code-block
2
+
3
+ Binding: gap
4
+
5
+ Present source text with preserved whitespace.
6
+
7
+ Use preformatted code with a concise caption. Preserve whitespace and provide a separate, clearly named copy action only when copying is available.
8
+
9
+ ```html
10
+ <figure>
11
+ <figcaption>Install the package</figcaption>
12
+ <pre><code>npm install uiify</code></pre>
13
+ </figure>
14
+ ```
15
+
16
+ This is an app-level composition recipe; it does not add a component to UIify.
17
+
18
+ ## Sources
19
+
20
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre) (verified 2026-10-16)
21
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,22 @@
1
+ # command-palette
2
+
3
+ Binding: gap
4
+
5
+ Let users find and invoke a small set of named commands.
6
+
7
+ For a non-interactive command list, use a labeled search form and links or buttons with clear names. A searchable list is not a command palette until keyboard navigation, selection, and dismissal behavior are implemented.
8
+
9
+ ```html
10
+ <form role="search">
11
+ <label for="commands">Search commands</label>
12
+ <input id="commands" type="search" />
13
+ <ul><li><a href="/settings">Open settings</a></li></ul>
14
+ </form>
15
+ ```
16
+
17
+ This is an app-level composition recipe; it does not add a component to UIify.
18
+
19
+ ## Sources
20
+
21
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/search) (verified 2026-10-16)
22
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,23 @@
1
+ # cookie-banner
2
+
3
+ Binding: gap
4
+
5
+ Explain cookie choices and provide consent actions.
6
+
7
+ State which optional storage choices are available and link to the detailed policy. Offer distinct actions for consent choices without making one choice the only visible path.
8
+
9
+ ```html
10
+ <aside aria-labelledby="cookie-title">
11
+ <h2 id="cookie-title">Cookie choices</h2>
12
+ <p>Choose whether to allow optional cookies.</p>
13
+ <button type="button">Allow optional cookies</button>
14
+ <button type="button">Reject optional cookies</button>
15
+ </aside>
16
+ ```
17
+
18
+ This is an app-level composition recipe; it does not add a component to UIify.
19
+
20
+ ## Sources
21
+
22
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-in-context.html) (verified 2026-10-16)
23
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,19 @@
1
+ # date-picker
2
+
3
+ Binding: gap
4
+
5
+ Collect one calendar date using the native date control.
6
+
7
+ Prefer the native date input for one date. Show date constraints in text and connect invalid-value feedback to the input.
8
+
9
+ ```html
10
+ <label for="start-date">Start date</label>
11
+ <input id="start-date" name="start-date" type="date" />
12
+ ```
13
+
14
+ This is an app-level composition recipe; it does not add a component to UIify.
15
+
16
+ ## Sources
17
+
18
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date) (verified 2026-10-16)
19
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,18 @@
1
+ # divider
2
+
3
+ Binding: gap
4
+
5
+ Separate adjacent thematic sections when a heading is not appropriate.
6
+
7
+ Use a thematic separator only when it marks a real change of topic; leave purely decorative separators out of the accessibility tree.
8
+
9
+ ```html
10
+ <hr />
11
+ ```
12
+
13
+ This is an app-level composition recipe; it does not add a component to UIify.
14
+
15
+ ## Sources
16
+
17
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr) (verified 2026-10-16)
18
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,22 @@
1
+ # empty-state
2
+
3
+ Binding: gap
4
+
5
+ Explain why a collection has no items and offer a relevant next step.
6
+
7
+ Explain what is empty and why it matters, then offer one next action that addresses the empty state.
8
+
9
+ ```html
10
+ <section aria-labelledby="empty-title">
11
+ <h2 id="empty-title">No invoices yet</h2>
12
+ <p>Create an invoice to see it listed here.</p>
13
+ <a href="/invoices/new">Create invoice</a>
14
+ </section>
15
+ ```
16
+
17
+ This is an app-level composition recipe; it does not add a component to UIify.
18
+
19
+ ## Sources
20
+
21
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html) (verified 2026-10-16)
22
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # feature-grid
2
+
3
+ Binding: gap
4
+
5
+ Present related product capabilities as a coherent set.
6
+
7
+ Use a repeated grid when the features share the same level and structure. Keep each feature’s heading and explanation in reading order at narrow widths.
8
+
9
+ Related laws: references/laws/proximity.md, references/laws/readability.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/visual-presentation.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # field
2
+
3
+ Binding: field
4
+
5
+ Keep a label and its form control together.
6
+
7
+ Keep each label next to its control. Put a group label on related controls and show validation beside the field it describes.
8
+
9
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # footer
2
+
3
+ Binding: gap
4
+
5
+ Offer secondary navigation at the end of a page.
6
+
7
+ Use a named footer landmark for site-wide information and group its links by destination. Preserve the site’s repeated navigation order.
8
+
9
+ Related laws: references/laws/readability.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # form
2
+
3
+ Binding: form
4
+
5
+ Collect related workspace preferences.
6
+
7
+ Group related controls and explain the form’s purpose before its fields. Keep submit, validation, and success feedback connected to the form.
8
+
9
+ Related laws: references/laws/proximity.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/grouping/) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # header
2
+
3
+ Binding: header
4
+
5
+ Orient visitors with stable top-level navigation.
6
+
7
+ Use the header for the site identity and primary navigation. Keep repeated navigation in a consistent order and give each navigation landmark a distinct name when there are several.
8
+
9
+ Related laws: references/laws/readability.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
@@ -0,0 +1,14 @@
1
+ # hero
2
+
3
+ Binding: gap
4
+
5
+ Introduce the product and its next action.
6
+
7
+ Lead with the page’s primary purpose, a specific heading, and its main action. Add a secondary action only when it serves a different useful path.
8
+
9
+ Related laws: references/laws/von-restorff.md, references/laws/accessibility.md
10
+
11
+ ## Sources
12
+
13
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html) (verified 2026-10-16)
14
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)