ui-foundations 0.4.1 → 0.6.0
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/README.md +8 -7
- package/dist/core/index.css +1 -0
- package/dist/macros/ui.njk +61 -0
- package/dist/main.css +528 -89
- package/dist/react/accordion.js +36 -0
- package/dist/react/avatar.js +34 -0
- package/dist/react/button.js +1 -12
- package/dist/react/checkbox.js +3 -20
- package/dist/react/divider.js +31 -0
- package/dist/react/icon.js +1 -12
- package/dist/react/index.js +6 -0
- package/dist/react/radio.js +3 -20
- package/dist/react/switch.js +3 -20
- package/dist/react/tabs.js +72 -0
- package/dist/react/textarea.js +38 -0
- package/dist/react/tooltip.js +25 -0
- package/dist/react/warn-dev.js +15 -0
- package/dist/tokens/css/appearance-modes.tokens.mode-dark.css +6 -6
- package/dist/tokens/css/appearance-modes.tokens.mode-light.css +1 -1
- package/dist/tokens/css/components-ui.tokens.css +66 -68
- package/dist/tokens/css/core-primitives.tokens.css +72 -1
- package/dist/tokens/css/semantics-roles.tokens.css +1 -1
- package/dist/tokens/css/themes-brands.tokens.brand-a.css +11 -11
- package/dist/tokens/css/themes-brands.tokens.brand-b.css +1 -1
- package/dist/tokens/css/themes-brands.tokens.brand-c.css +22 -0
- package/dist/tokens/json/components-ui.tokens.json +275 -277
- package/dist/tokens/json/core-primitives.tokens.json +302 -0
- package/dist/tokens/json/themes-brands.tokens.brand-a.json +10 -10
- package/dist/tokens/json/themes-brands.tokens.brand-b.json +10 -10
- package/dist/tokens/json/themes-brands.tokens.brand-c.json +81 -0
- package/dist/tokens/tokens.yaml +1701 -583
- package/dist/tokens/ts/appearance-modes.tokens.mode-dark.ts +6 -6
- package/dist/tokens/ts/appearance-modes.tokens.mode-light.ts +1 -1
- package/dist/tokens/ts/components-ui.tokens.ts +67 -69
- package/dist/tokens/ts/core-primitives.tokens.ts +73 -2
- package/dist/tokens/ts/semantics-roles.tokens.ts +1 -1
- package/dist/tokens/ts/themes-brands.tokens.brand-a.ts +11 -11
- package/dist/tokens/ts/themes-brands.tokens.brand-b.ts +1 -1
- package/dist/tokens/ts/themes-brands.tokens.brand-c.ts +32 -0
- package/dist/ui/index.css +6 -0
- package/dist/ui/patterns/accordion.css +81 -0
- package/dist/ui/patterns/avatar.css +57 -0
- package/dist/ui/patterns/divider.css +25 -0
- package/dist/ui/patterns/tabs.css +71 -0
- package/dist/ui/patterns/textarea.css +50 -0
- package/dist/ui/patterns/tooltip.css +64 -0
- package/docs/agentic/README.md +1 -0
- package/docs/agentic/skills/component-accessibility-audit.md +132 -0
- package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +1 -1
- package/package.json +2 -1
- package/dist/tokens/missing-tokens.json +0 -43
package/README.md
CHANGED
|
@@ -116,7 +116,7 @@ import "ui-foundations/ui.css";
|
|
|
116
116
|
### Apply Theming
|
|
117
117
|
|
|
118
118
|
```js
|
|
119
|
-
document.documentElement.dataset.brand = "a"; // "a" | "b"
|
|
119
|
+
document.documentElement.dataset.brand = "a"; // "a" | "b" | "c"
|
|
120
120
|
document.documentElement.dataset.mode = "light"; // "light" | "dark"
|
|
121
121
|
```
|
|
122
122
|
|
|
@@ -128,8 +128,8 @@ to see it in action.
|
|
|
128
128
|
|
|
129
129
|
## Components
|
|
130
130
|
|
|
131
|
-
Label, Button (solid / outline / ghost), ButtonGroup, Input, Icon, Checkbox,
|
|
132
|
-
Radio,
|
|
131
|
+
Label, Button (solid / outline / ghost), ButtonGroup, Badge, Input, Icon, Checkbox,
|
|
132
|
+
Radio, Switch, Link
|
|
133
133
|
|
|
134
134
|
Each component uses its own token layer and supports theming out of the box.
|
|
135
135
|
|
|
@@ -201,10 +201,11 @@ npm run rules:validate # rule pipeline traceability
|
|
|
201
201
|
|
|
202
202
|
## MCP Integration
|
|
203
203
|
|
|
204
|
-
Figma integration
|
|
204
|
+
Figma integration uses the Model Context Protocol. Token exports live in
|
|
205
|
+
`figma/exports/` and are processed by `npm run tokens:generate`.
|
|
205
206
|
|
|
206
|
-
-
|
|
207
|
-
-
|
|
207
|
+
- **Figma Desktop MCP** — local server via the Figma Desktop app (primary path)
|
|
208
|
+
- **figma-developer-mcp** — REST API read access (requires `FIGMA_TOKEN` in `.env`)
|
|
208
209
|
|
|
209
210
|
```json
|
|
210
211
|
{
|
|
@@ -240,4 +241,4 @@ Vanilla CSS (Custom Properties, `@layer`) · Node.js · Eleventy · React (optio
|
|
|
240
241
|
|
|
241
242
|
---
|
|
242
243
|
|
|
243
|
-
|
|
244
|
+
MIT License
|
package/dist/core/index.css
CHANGED
|
@@ -9,4 +9,5 @@
|
|
|
9
9
|
@import url("../tokens/css/appearance-modes.tokens.mode-light.css") layer(tokens);
|
|
10
10
|
@import url("../tokens/css/themes-brands.tokens.brand-a.css") layer(tokens);
|
|
11
11
|
@import url("../tokens/css/themes-brands.tokens.brand-b.css") layer(tokens);
|
|
12
|
+
@import url("../tokens/css/themes-brands.tokens.brand-c.css") layer(tokens);
|
|
12
13
|
@import url("./themes/mode.css") layer(themes);
|
package/dist/macros/ui.njk
CHANGED
|
@@ -140,3 +140,64 @@
|
|
|
140
140
|
<span class="badge__text">{{ text }}</span>
|
|
141
141
|
</span>
|
|
142
142
|
{%- endmacro %}
|
|
143
|
+
|
|
144
|
+
{% macro divider(orientation='horizontal', variant='', className='') -%}
|
|
145
|
+
{%- set classes = "divider" -%}
|
|
146
|
+
{%- if variant -%}{%- set classes = classes + " " + variant -%}{%- endif -%}
|
|
147
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
148
|
+
<hr class="{{ classes }}"{% if orientation == "vertical" %} aria-orientation="vertical"{% endif %} />
|
|
149
|
+
{%- endmacro %}
|
|
150
|
+
|
|
151
|
+
{% macro textarea(placeholder='', value='', disabled=false, readonly=false, rows='', state='default', className='') -%}
|
|
152
|
+
{%- set classes = "textarea" -%}
|
|
153
|
+
{%- if state == "hover" -%}{%- set classes = classes + " is-hover" -%}{%- endif -%}
|
|
154
|
+
{%- if state == "focus" -%}{%- set classes = classes + " is-focus-visible" -%}{%- endif -%}
|
|
155
|
+
{%- if state == "disabled" or disabled -%}{%- set classes = classes + " is-disabled" -%}{%- endif -%}
|
|
156
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
157
|
+
<textarea class="{{ classes }}"{% if placeholder %} placeholder="{{ placeholder }}"{% endif %}{% if rows %} rows="{{ rows }}"{% endif %}{% if readonly %} readonly{% endif %}{% if disabled or state == "disabled" %} disabled{% endif %}>{{ value }}</textarea>
|
|
158
|
+
{%- endmacro %}
|
|
159
|
+
|
|
160
|
+
{% macro avatar(src='', alt='', initials='', size='', className='') -%}
|
|
161
|
+
{%- set classes = "avatar" -%}
|
|
162
|
+
{%- if size and size != "md" -%}{%- set classes = classes + " " + size -%}{%- endif -%}
|
|
163
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
164
|
+
<span class="{{ classes }}" role="img" aria-label="{{ alt or initials }}">
|
|
165
|
+
{%- if src -%}<img src="{{ src }}" alt="{{ alt }}" />{%- else -%}<span class="avatar__initials">{{ initials }}</span>{%- endif -%}
|
|
166
|
+
</span>
|
|
167
|
+
{%- endmacro %}
|
|
168
|
+
|
|
169
|
+
{% macro accordion(className='') -%}
|
|
170
|
+
{%- set classes = "accordion" -%}
|
|
171
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
172
|
+
<div class="{{ classes }}">{{ caller() }}</div>
|
|
173
|
+
{%- endmacro %}
|
|
174
|
+
|
|
175
|
+
{% macro accordionItem(title='', open=false, disabled=false) -%}
|
|
176
|
+
{%- set classes = "accordion-item" -%}
|
|
177
|
+
{%- if disabled -%}{%- set classes = classes + " is-disabled" -%}{%- endif -%}
|
|
178
|
+
<details class="{{ classes }}"{% if open %} open{% endif %}>
|
|
179
|
+
<summary>{{ title }}</summary>
|
|
180
|
+
<div class="accordion-item__content">{{ caller() }}</div>
|
|
181
|
+
</details>
|
|
182
|
+
{%- endmacro %}
|
|
183
|
+
|
|
184
|
+
{% macro tabList(orientation='horizontal', ariaLabel='', className='') -%}
|
|
185
|
+
{%- set classes = "tab-list" -%}
|
|
186
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
187
|
+
<div class="{{ classes }}" role="tablist" aria-orientation="{{ orientation }}"{% if ariaLabel %} aria-label="{{ ariaLabel }}"{% endif %}>{{ caller() }}</div>
|
|
188
|
+
{%- endmacro %}
|
|
189
|
+
|
|
190
|
+
{% macro tab(label='', selected=false, disabled=false, controls='') -%}
|
|
191
|
+
{%- set classes = "tab" -%}
|
|
192
|
+
<button class="{{ classes }}" role="tab" type="button" aria-selected="{{ "true" if selected else "false" }}"{% if controls %} aria-controls="{{ controls }}"{% endif %}{% if disabled %} disabled{% endif %} tabindex="{{ "0" if selected else "-1" }}">{{ label }}</button>
|
|
193
|
+
{%- endmacro %}
|
|
194
|
+
|
|
195
|
+
{% macro tabPanel(id='', hidden=false) -%}
|
|
196
|
+
<div class="tab-panel" role="tabpanel"{% if id %} id="{{ id }}"{% endif %}{% if hidden %} hidden{% endif %} tabindex="0">{{ caller() }}</div>
|
|
197
|
+
{%- endmacro %}
|
|
198
|
+
|
|
199
|
+
{% macro tooltip(text='', placement='top', className='') -%}
|
|
200
|
+
{%- set classes = "tooltip-trigger" -%}
|
|
201
|
+
{%- if className -%}{%- set classes = classes + " " + className -%}{%- endif -%}
|
|
202
|
+
<span class="{{ classes }}">{{ caller() }}<span class="tooltip" role="tooltip" data-placement="{{ placement }}">{{ text }}</span></span>
|
|
203
|
+
{%- endmacro %}
|