@imfusion/web-ui 0.6.1-dev.27.gfc6e5abb → 0.6.1-dev.3.g5b432448
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 +169 -102
- package/dist/{code-C_56u-Vk.js → code-Blo48PGr.js} +2 -2
- package/dist/components/stack/stack.d.ts +1 -1
- package/dist/icons/icon-config-provider.d.ts +8 -0
- package/dist/icons/icon-context.d.ts +4 -0
- package/dist/{icons-Cy1HAosO.js → icons-wBmF0U2x.js} +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +830 -1009
- package/dist/integrations/code-highlight/highlighter.d.ts +0 -24
- package/dist/integrations/code-highlight.js +47 -80
- package/dist/integrations/image-display-options.js +2 -2
- package/dist/provider/web-ui-provider.d.ts +3 -3
- package/dist/style.css +1 -1
- package/dist/{tabs-DIe1Utiy.js → tabs-CMKvMF4E.js} +0 -2
- package/package.json +4 -5
- package/src/docgen/doc.gen.json +1 -389
- package/src/llms/install-templates/AGENTS.md +18 -15
- package/src/llms/llms.gen.txt +33 -39
- package/src/llms/skills/imf-web-ui/SKILL.md +39 -30
- package/src/llms/skills/imf-web-ui-audit/SKILL.md +102 -50
- package/src/llms/skills/imf-web-ui-components/SKILL.md +104 -47
- package/src/llms/skills/imf-web-ui-conventions/SKILL.md +52 -44
- package/src/llms/skills/imf-web-ui-conventions/templates/AUDIT_CHECKLIST.md +0 -1
- package/src/llms/skills/imf-web-ui-conventions/topics/agent-tooling.md +62 -40
- package/src/llms/skills/imf-web-ui-conventions/topics/assets.md +12 -11
- package/src/llms/skills/imf-web-ui-conventions/topics/authentication.md +46 -31
- package/src/llms/skills/imf-web-ui-conventions/topics/class-names.md +23 -18
- package/src/llms/skills/imf-web-ui-conventions/topics/components.md +69 -20
- package/src/llms/skills/imf-web-ui-conventions/topics/data.md +146 -50
- package/src/llms/skills/imf-web-ui-conventions/topics/docs-structure.md +23 -17
- package/src/llms/skills/imf-web-ui-conventions/topics/git.md +20 -15
- package/src/llms/skills/imf-web-ui-conventions/topics/library-boundary.md +19 -28
- package/src/llms/skills/imf-web-ui-conventions/topics/library-setup.md +16 -20
- package/src/llms/skills/imf-web-ui-conventions/topics/npm-project.md +42 -28
- package/src/llms/skills/imf-web-ui-conventions/topics/project-structure.md +30 -28
- package/src/llms/skills/imf-web-ui-conventions/topics/react.md +74 -28
- package/src/llms/skills/imf-web-ui-conventions/topics/styling.md +62 -65
- package/src/llms/skills/imf-web-ui-conventions/topics/testing.md +14 -12
- package/src/llms/skills/imf-web-ui-conventions/topics/tokens.md +4 -9
- package/src/llms/skills/imf-web-ui-conventions/topics/tooling.md +68 -40
- package/src/llms/skills/imf-web-ui-conventions/topics/typescript.md +50 -26
- package/src/llms/skills/imf-web-ui-conventions/topics/validation.md +25 -19
- package/src/llms/skills/imf-web-ui-setup/SKILL.md +64 -45
- package/src/llms/skills/imf-web-ui-update/SKILL.md +114 -48
- package/src/llms/skills/imf-web-ui-ux/SKILL.md +92 -64
- package/src/llms/skills/imf-web-ui-ux/references/forms.md +36 -16
- package/src/llms/skills/imf-web-ui-ux/references/usability-heuristics.md +27 -14
- package/src/llms/skills/imf-web-ui-ux/references/visual-design.md +38 -22
- package/src/llms/tokens.gen.json +5 -5
- package/dist/codegen/gen-code-highlight-theme.d.ts +0 -1
- package/dist/components/toast/index.d.ts +0 -2
- package/dist/components/toast/toast.d.ts +0 -200
- package/dist/components/toast/toast.meta.d.ts +0 -2
- package/dist/icons/icon-config.d.ts +0 -12
package/src/llms/llms.gen.txt
CHANGED
|
@@ -11,189 +11,183 @@ props, which always live in the docgen file above.
|
|
|
11
11
|
|
|
12
12
|
## AppShell
|
|
13
13
|
- category: Layout, status: stable
|
|
14
|
-
Application layout shell
|
|
14
|
+
Application layout shell — a fixed header, collapsible navbar/aside sidebars, an optional footer, and a scrolling main area. The classic dashboard frame; also called an app layout, application frame, dashboard shell, or sidebar layout. Sizing is CSS-driven and sidebars collapse to sliding overlays on small screens.
|
|
15
15
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .app-shell (jq: jq '.app-shell' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
16
16
|
|
|
17
17
|
## Button
|
|
18
18
|
- category: Buttons, status: stable
|
|
19
|
-
Triggers an action
|
|
19
|
+
Triggers an action — submit, confirm, cancel, navigate, or destructive operations. Six semantic variants (primary, secondary, positive, negative, outline, ghost) communicate intent across four sizes (sm, md, lg, hero). The brand's chamfered shape; hover inverts fill and label. An optional endIcon slot aligns the label left and pins the icon right. Also called a CTA or action.
|
|
20
20
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .button (jq: jq '.button' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
21
21
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/button.md
|
|
22
22
|
|
|
23
23
|
## Callout
|
|
24
24
|
- category: Display, status: stable
|
|
25
|
-
|
|
25
|
+
Inline status banner — a persistent, non-interactive message that sits in the content flow to convey info, success, warning, or error state. Composed from slots: Callout.Root wraps a Callout.Icon (status glyph), an optional Callout.Title, and a Callout.Description. Tonal `variant` (info/positive/warning/negative) tints the surface and colours the icon and text. Also called an alert, callout, or inline notice. Not a Toast (transient) or Alert Dialog (modal).
|
|
26
26
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .callout (jq: jq '.callout' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
27
27
|
|
|
28
28
|
## Card
|
|
29
29
|
- category: Layout, status: stable
|
|
30
|
-
Surface container
|
|
30
|
+
Surface container — groups related content on a tonal background. Composed from slots: Card.Root wraps an optional edge-to-edge Card.Image plus padded Card.Header, Card.Content, and Card.Footer. Tonal or coloured `variant`, opt-in shadow and radius, and a `density` scale. Also called a panel, tile, or paper.
|
|
31
31
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .card (jq: jq '.card' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
32
32
|
|
|
33
33
|
## Checkbox
|
|
34
34
|
- category: Inputs, status: stable
|
|
35
|
-
Binary form control for
|
|
35
|
+
Binary form control for opt-in choices — accept terms, select table rows, pick list items. Supports an indeterminate state for parent/child selection. Also called a check box or tick box; for immediate on/off preferences, prefer Switch.
|
|
36
36
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .checkbox (jq: jq '.checkbox' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
37
37
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/checkbox.md
|
|
38
38
|
|
|
39
39
|
## Chip
|
|
40
40
|
- category: Display, status: stable
|
|
41
|
-
Compact label for tags, status, categories, counts,
|
|
41
|
+
Compact inline label for tags, status, categories, counts, or metadata. Also known as a badge, tag, or pill. Two dimensions — a color variant for semantic role and a shape variant for visual appearance, including an inline form that sits naturally in flowing body text.
|
|
42
42
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .chip (jq: jq '.chip' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
43
43
|
|
|
44
44
|
## ChipLink
|
|
45
45
|
- category: Buttons, status: stable
|
|
46
|
-
|
|
46
|
+
Inline link styled as a chip — a small labeled anchor that auto-appends a directional icon. Use for external doc references and source attribution (opens in a new tab) or in-app navigation badges (stays in the current tab). Also called a link chip or link badge.
|
|
47
47
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .chip-link (jq: jq '.chip-link' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
48
48
|
|
|
49
49
|
## Code
|
|
50
50
|
- category: Display, status: stable
|
|
51
|
-
Displays source code
|
|
51
|
+
Displays source code — Code.Inline for a fragment in running text, Code.Block for a fenced block with an optional language label and copy button. Also called a code snippet or code block.
|
|
52
52
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .code (jq: jq '.code' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
53
53
|
|
|
54
54
|
## CodeHighlight
|
|
55
55
|
- category: Display, status: experimental
|
|
56
|
-
Syntax-highlighted Code parts
|
|
56
|
+
Syntax-highlighted drop-in for the Code parts — the same Code.Block and Code.Inline, with TanStack Highlight token coloring that follows the color scheme. Imported from @imfusion/web-ui/integrations/code-highlight; requires the @tanstack/highlight peer.
|
|
57
57
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .code-highlight (jq: jq '.code-highlight' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
58
58
|
|
|
59
59
|
## Collapsible
|
|
60
60
|
- category: Display, status: stable
|
|
61
|
-
|
|
61
|
+
Toggleable show/hide region for progressive disclosure — FAQ entries, expandable settings, detail toggles. A trigger button drives an animated open/close panel; multiple stacked form an accordion. Also called a disclosure or expand/collapse.
|
|
62
62
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .collapsible (jq: jq '.collapsible' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
63
63
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/collapsible.md
|
|
64
64
|
|
|
65
65
|
## CopyButton
|
|
66
66
|
- category: Buttons, status: stable
|
|
67
|
-
|
|
67
|
+
Button that copies a value to the clipboard and shows a transient confirmation. Also called a copy-to-clipboard button. Composes Button; commonly paired with Code.Block.
|
|
68
68
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .copy-button (jq: jq '.copy-button' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
69
69
|
|
|
70
70
|
## Drawer
|
|
71
71
|
- category: Layout, status: stable
|
|
72
|
-
Off-canvas panel that slides in from a screen edge for navigation, settings,
|
|
72
|
+
Off-canvas panel that slides in from a screen edge. Use for mobile navigation, secondary nav, settings trays, filter sidebars, or any side sheet. Also called a sidebar, side panel, off-canvas, or sheet.
|
|
73
73
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .drawer (jq: jq '.drawer' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
74
74
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/drawer.md
|
|
75
75
|
|
|
76
76
|
## Field
|
|
77
77
|
- category: Inputs, status: stable
|
|
78
|
-
Accessible field composition for a label, control, supporting
|
|
78
|
+
Accessible field composition for a label, form control, supporting description, and inline validation message. Use it to associate a control such as Input, Checkbox, or Select with field state including valid, invalid, dirty, touched, filled, and focused.
|
|
79
79
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .field (jq: jq '.field' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
80
80
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/field.md
|
|
81
81
|
|
|
82
82
|
## Fieldset
|
|
83
83
|
- category: Inputs, status: stable
|
|
84
|
-
Semantic
|
|
84
|
+
Semantic grouping for related form controls with a shared legend. Also called a form group; use it to communicate a common topic and propagate disabled state without introducing a decorative container.
|
|
85
85
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .fieldset (jq: jq '.fieldset' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
86
86
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/fieldset.md
|
|
87
87
|
|
|
88
88
|
## Icon
|
|
89
89
|
- category: Display, status: stable
|
|
90
|
-
|
|
90
|
+
Semantic color wrapper for an icon imported from the Web UI icons entry. Use it when an icon needs a named foreground role instead of the inherited currentColor.
|
|
91
91
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .icon (jq: jq '.icon' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
92
92
|
|
|
93
93
|
## ImageDisplayOptions
|
|
94
94
|
- category: Inputs, status: experimental
|
|
95
|
-
|
|
95
|
+
A panel or toolbar of controls bound to an image dataset's display options.
|
|
96
96
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .image-display-options (jq: jq '.image-display-options' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
97
97
|
- further reading (usage/anatomy, not props): https://docs.imfusion.com/
|
|
98
98
|
|
|
99
99
|
## Input
|
|
100
100
|
- category: Inputs, status: stable
|
|
101
|
-
Single-line text input for form data entry. Also called a text field
|
|
101
|
+
Single-line text input for form data entry. Also called a text field or input field. Supports controlled and uncontrolled modes, and integrates with Base UI's Field context for validation state (valid, invalid, dirty, touched, filled, focused).
|
|
102
102
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .input (jq: jq '.input' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
103
103
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/input.md
|
|
104
104
|
|
|
105
105
|
## Logo
|
|
106
106
|
- category: Display, status: stable
|
|
107
|
-
|
|
107
|
+
Brand mark display primitive — renders a logo from a URL or inline React element with consistent sizing. Also called a wordmark, brand icon, or logotype.
|
|
108
108
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .logo (jq: jq '.logo' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
109
109
|
|
|
110
110
|
## NavigationMenu
|
|
111
111
|
- category: Display, status: experimental
|
|
112
|
-
Navigation menu
|
|
112
|
+
Navigation menu — a horizontal (or vertical) strip of triggers that open flat, anchored flyout panels for site or app wayfinding, with multi-column mega-menu content and a viewport-responsive inline master/detail submenu. Composed from slots: NavigationMenu.Root, List, Item, Trigger, Icon, Content, Link, FlyoutLink, LinkList, LinkCard, InlineSubmenu, Portal, Positioner, Popup, Viewport, Arrow, Backdrop. Also called a nav bar, menu bar, or mega menu.
|
|
113
113
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .navigation-menu (jq: jq '.navigation-menu' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
114
114
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/navigation-menu.md
|
|
115
115
|
|
|
116
116
|
## Popover
|
|
117
117
|
- category: Display, status: stable
|
|
118
|
-
Floating panel anchored to a trigger for contextual
|
|
118
|
+
Floating panel anchored to a trigger element. Use for contextual menus, tooltips-with-actions, rich hover cards, quick-edit forms, or any non-modal detail overlay. Also called a popup, flyout, or floating menu.
|
|
119
119
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .popover (jq: jq '.popover' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
120
120
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/popover.md
|
|
121
121
|
|
|
122
122
|
## Row
|
|
123
123
|
- category: Layout, status: stable
|
|
124
|
-
Horizontal layout primitive
|
|
124
|
+
Horizontal layout primitive — children are arranged left-to-right with configurable spacing, alignment, and optional wrapping. Also called hstack, horizontal stack, flex row.
|
|
125
125
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .row (jq: jq '.row' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
126
126
|
|
|
127
127
|
## Select
|
|
128
128
|
- category: Inputs, status: stable
|
|
129
|
-
|
|
129
|
+
Single-choice dropdown — pick one value from a known list. Keyboard-accessible listbox with a labelled trigger and a portalled popup. Best for short, fixed option sets (status, role, country). Also called a dropdown or picker.
|
|
130
130
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .select (jq: jq '.select' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
131
131
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/select.md
|
|
132
132
|
|
|
133
133
|
## Separator
|
|
134
134
|
- category: Layout, status: stable
|
|
135
|
-
|
|
135
|
+
Thin line that visually divides content into groups — section break, list item rule, sidebar division. Also called a divider, hr, or horizontal / vertical rule.
|
|
136
136
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .separator (jq: jq '.separator' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
137
137
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/separator.md
|
|
138
138
|
|
|
139
139
|
## Slider
|
|
140
140
|
- category: Inputs, status: stable
|
|
141
|
-
|
|
141
|
+
Drag a thumb along a track to pick a numeric value or range. Use for continuous or stepped numeric input where magnitude matters — volume, brightness, opacity, price ranges. Also called a range input.
|
|
142
142
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .slider (jq: jq '.slider' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
143
143
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/slider.md
|
|
144
144
|
|
|
145
145
|
## Spinner
|
|
146
146
|
- category: Display, status: stable
|
|
147
|
-
|
|
147
|
+
Loading indicator built from the animated ImFusion glyph. Also called a loader, progress spinner, or activity indicator; signals indeterminate loading.
|
|
148
148
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .spinner (jq: jq '.spinner' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
149
149
|
|
|
150
150
|
## Stack
|
|
151
151
|
- category: Layout, status: stable
|
|
152
|
-
Vertical layout primitive
|
|
152
|
+
Vertical layout primitive — children stack top-to-bottom with configurable spacing and alignment. Use it instead of writing flex column layouts by hand. Also called a vstack or column.
|
|
153
153
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .stack (jq: jq '.stack' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
154
154
|
|
|
155
155
|
## Switch
|
|
156
156
|
- category: Inputs, status: stable
|
|
157
|
-
Two-state
|
|
157
|
+
Two-state toggle for immediate on/off preferences — enable a feature, mute audio, toggle dark mode. Takes effect right away (no submit step); for form-submission booleans, a checkbox is more conventional. Also called a toggle.
|
|
158
158
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .switch (jq: jq '.switch' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
159
159
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/switch.md
|
|
160
160
|
|
|
161
161
|
## Table
|
|
162
162
|
- category: Display, status: stable
|
|
163
|
-
|
|
163
|
+
Styled, static building blocks for tabular data — Root, Header, Body, Row, HeaderCell, Cell, HeaderButton, SortableHeaderCell. Also called a data grid anatomy. Purely presentational with no data logic; for a full data grid, drive these parts with a headless table library (TanStack Table recommended) that you install yourself.
|
|
164
164
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .table (jq: jq '.table' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
165
165
|
|
|
166
166
|
## Tabs
|
|
167
167
|
- category: Display, status: stable
|
|
168
|
-
|
|
168
|
+
Tabbed navigation — switches between panels of content within one view via a horizontal (or vertical) strip of labels with a sliding active-state underline. Composed from slots: Tabs.Root, Tabs.List, Tabs.Tab, Tabs.Indicator, Tabs.Panel. Also called a tab strip or tab bar.
|
|
169
169
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .tabs (jq: jq '.tabs' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
170
170
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/tabs.md
|
|
171
171
|
|
|
172
|
-
## Toast
|
|
173
|
-
- category: Display, status: experimental
|
|
174
|
-
Transient message stack that reports the outcome of a background action without interrupting the page. Use for save confirmations, undo offers, and async progress; attach one to an element for contextual feedback like a copy confirmation. Also called a snackbar, notification, or flash message; for a message that stays inline in the page use Callout instead.
|
|
175
|
-
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .toast (jq: jq '.toast' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
176
|
-
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/toast.md
|
|
177
|
-
|
|
178
172
|
## Toggle
|
|
179
173
|
- category: Inputs, status: experimental
|
|
180
|
-
|
|
174
|
+
A two-state button that can be on or off. Compose several inside a ToggleGroup for a segmented control.
|
|
181
175
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .toggle (jq: jq '.toggle' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
182
176
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/toggle.md
|
|
183
177
|
|
|
184
178
|
## ToggleGroup
|
|
185
179
|
- category: Inputs, status: experimental
|
|
186
|
-
|
|
180
|
+
A set of connected Toggle buttons sharing one value: single-select by default (a segmented control), or multi-select with `multiple`. Compose one Toggle per segment, each with a value. Also called a segmented control or segmented button.
|
|
187
181
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .toggle-group (jq: jq '.toggle-group' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
188
182
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/toggle-group.md
|
|
189
183
|
|
|
190
184
|
## Tooltip
|
|
191
185
|
- category: Display, status: stable
|
|
192
|
-
Hover- or focus-triggered label
|
|
186
|
+
Hover- or focus-triggered floating label giving terse contextual help for a control or term. Use for icon-button descriptions, truncated-text reveals, and field hints. Also called a hint, hovercard, or info bubble; for click-triggered panels with actions use Popover instead.
|
|
193
187
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .tooltip (jq: jq '.tooltip' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
194
188
|
- further reading (usage/anatomy, not props): https://base-ui.com/react/components/tooltip.md
|
|
195
189
|
|
|
196
190
|
## Typo
|
|
197
191
|
- category: Display, status: stable
|
|
198
|
-
|
|
192
|
+
Typographic primitives — a family of heading (H1–H4), paragraph (P, Lead), and inline accent (InlineCode, Highlight, Link) components. Most support a color role — main, support, or minor — plus the standard HTML attributes for its element; InlineCode is a fixed neutral chip (it renders Code.Inline).
|
|
199
193
|
- props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .typo (jq: jq '.typo' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
|
|
@@ -1,47 +1,56 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: imf-web-ui
|
|
3
3
|
description:
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
"Entry point for UI work in a project that depends on @imfusion/web-ui. Decides whether guidance is needed at all, then
|
|
5
|
+
routes to the right companion skill — component reference, UX guidance, or frontend conventions. Load when adding or
|
|
6
|
+
editing UI in a consumer repo."
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# imf-web-ui
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
`@imfusion/web-ui` ships a small family of skills. This one is the map — it costs almost nothing to load and tells you which
|
|
12
|
+
companion to open, or that you need none at all. Don't load a companion speculatively: route first, zoom second.
|
|
12
13
|
|
|
13
|
-
##
|
|
14
|
+
## Row zero — is help needed at all?
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
already correct. Do the work. Look up an API silently only when you are unsure.
|
|
16
|
+
Before routing, check whether this task needs guidance in the first place. It does **not** when:
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
- The request is explicit and small ("make the button say Save", "add a column for email"), or
|
|
19
|
+
- You're repeating a pattern that already exists nearby in the codebase — copy it, and
|
|
20
|
+
- The components involved are already imported and used correctly.
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
In that case: just do the work. At most, do a silent props lookup via `imf-web-ui-components` if you're unsure of an API.
|
|
23
|
+
Guidance skills exist to fill gaps, not to add ceremony to clear tasks.
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
| ----------------------------------------------------------------- | ------------------------------------------------------ |
|
|
25
|
-
| Look up a component, part, prop, default, or icon | `imf-web-ui-components` |
|
|
26
|
-
| Choose components or shape a screen or flow | `imf-web-ui-ux` |
|
|
27
|
-
| Write or update documentation | `/documentation-writer`, then `imf-web-ui-conventions` |
|
|
28
|
-
| Write a wrapper, custom UI, CSS, data layer, validation, or tests | `imf-web-ui-conventions` |
|
|
29
|
-
| Install the library or bootstrap project tooling | `imf-web-ui-setup` |
|
|
30
|
-
| Inspect an existing project without changing it | `imf-web-ui-audit` |
|
|
31
|
-
| Update the package, skills, or hooks | `imf-web-ui-update` |
|
|
25
|
+
## Routing
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
| The task at hand | Open |
|
|
28
|
+
| ----------------------------------------------------------------------------------------------------- | --------------------------------------- |
|
|
29
|
+
| Using a specific component; checking props, sub-components, or defaults | `imf-web-ui-components` |
|
|
30
|
+
| First-time setup, adding a library dependency, or components rendering unstyled/broken | `imf-web-ui-setup` (`library-setup`) |
|
|
31
|
+
| Building/reshaping a screen or flow; choosing between components; layout, density, hierarchy, states | `imf-web-ui-ux` |
|
|
32
|
+
| Writing wrappers or custom UI; styling beyond defaults; adding files; TypeScript, naming, testing | `imf-web-ui-conventions` |
|
|
33
|
+
| Setting up or auditing an **ImFusion** repo's tooling: formatting, linting, hooks, scripts, structure | `imf-web-ui-setup` / `imf-web-ui-audit` |
|
|
34
|
+
| Installing or checking agent tooling: vendored skills, lifecycle hooks, registrations, and staleness | `imf-web-ui-setup` / `imf-web-ui-audit` |
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
The two setup rows are narrow on purpose. They're for "what is this project missing?" — a question about the repo as a whole.
|
|
37
|
+
Being asked to add one config file is just that edit; make it, and don't open a skill to do so.
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
Tasks routinely span two: building a screen usually means `imf-web-ui-ux` for the shape and `imf-web-ui-components` for the
|
|
40
|
+
APIs. That's normal — open both, in that order.
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
library and read its current documentation with `npx @tanstack/cli` before using it.
|
|
42
|
+
## The stack
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
TanStack is the recommended tooling library — routing, server state, forms, tables. When a task needs one of those and the
|
|
45
|
+
project has no incumbent, propose it, and read the library's own docs (`npx @tanstack/cli`) rather than working from memory.
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
## When to interview the human
|
|
48
|
+
|
|
49
|
+
`imf-web-ui-ux` contains a short per-feature interview. Run it **only** when both hold:
|
|
50
|
+
|
|
51
|
+
1. The request is foggy — you couldn't say what the primary action of the screen is, who uses it, or what data it shows.
|
|
52
|
+
2. A human is available to answer.
|
|
53
|
+
|
|
54
|
+
Never interview when a spec, mockup, or clear instruction exists — asking questions the conversation already answered is
|
|
55
|
+
worse than not asking at all. When in doubt and no human is around, make the conservative choice, and say which assumptions
|
|
56
|
+
you made.
|
|
@@ -1,67 +1,119 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: imf-web-ui-audit
|
|
3
3
|
description:
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
"Read-only health check for an ImFusion frontend against the conventions baseline. Audit the full project or any topic,
|
|
5
|
+
including library-setup, tooling, git, npm-project, authentication, project-structure, docs-structure, data, testing,
|
|
6
|
+
React, TypeScript, class names, validation, components, styling, assets, library-boundary, and tokens. Reports broken
|
|
7
|
+
pieces, missing pieces, working deviations, present evidence, and unverified state, then turns them into an actionable
|
|
8
|
+
plan."
|
|
7
9
|
argument-hint: "[full|<topic>]"
|
|
8
10
|
allowed-tools: Read Glob Grep
|
|
9
11
|
---
|
|
10
12
|
|
|
11
|
-
#
|
|
13
|
+
# imf-web-ui-audit
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
You are the frontend health-check auditor, and you run as an orchestrator: one investigator per topic gathers the evidence,
|
|
16
|
+
you merge their findings and turn them into an actionable plan. Follow the applicable `imf-web-ui-conventions` topics, cite
|
|
17
|
+
repository evidence, distinguish defects from working deviations, and never present the baseline as universal best practice.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
1. Resolve the argument. Bare means `full`; an unknown topic is an error, not a reason to widen the scope.
|
|
20
|
-
2. Enter plan mode unless this audit is being called as verification by another skill or the host has no plan mode.
|
|
21
|
-
3. Assign one investigator to each in-scope topic. An investigator checks every section in that topic and writes nothing. If
|
|
22
|
-
the host cannot dispatch agents, inspect the topics inline in the same order.
|
|
23
|
-
4. Merge the evidence into the shared report format in
|
|
24
|
-
[`templates/REPORT.md`](../imf-web-ui-conventions/templates/REPORT.md).
|
|
25
|
-
5. Put each finding's `Next action` into an ordered plan, grouped by topic and cheapest first. Present the report and wait
|
|
26
|
-
for approval; an audit does not edit the project.
|
|
19
|
+
An audit belongs in plan mode: it ends in work to approve, not in files to write.
|
|
27
20
|
|
|
28
|
-
|
|
21
|
+
## Workflow
|
|
29
22
|
|
|
30
|
-
|
|
23
|
+
1. Resolve the argument. Bare means `full`; a topic selects one row below. If no topic matches, list every available topic
|
|
24
|
+
instead of guessing or widening the scope.
|
|
25
|
+
2. Enter the host's plan mode, unless one of the exceptions after step 5 applies. If plan mode is not already active, use the
|
|
26
|
+
host plan-mode control before dispatching anything.
|
|
27
|
+
3. Dispatch one investigator per in-scope topic, using the host's subagent mechanism, as concurrently as the host allows.
|
|
28
|
+
Investigators are cheap and narrow: each one gets a single topic and reports back. A host with no subagent mechanism is
|
|
29
|
+
not a blocker — work the topics inline in this session, in the same order, to the same contract.
|
|
30
|
+
4. Merge what comes back. Findings you did not gather yourself are the report; do not re-inspect files an investigator
|
|
31
|
+
covered. Reconcile conflicts by reading the cited evidence, and drop any finding whose citation does not hold.
|
|
32
|
+
5. Deliver the merged report and the plan in the host plan, from the shared report contract at
|
|
33
|
+
[`../imf-web-ui-conventions/templates/REPORT.md`](../imf-web-ui-conventions/templates/REPORT.md), with the mode label
|
|
34
|
+
`audit`. The plan's ordered steps are the `Next action` lines of the findings, grouped by topic and cheapest-first;
|
|
35
|
+
`Present` findings produce no steps.
|
|
36
|
+
|
|
37
|
+
Some runs take the report somewhere other than a plan. When the human asks for the durable file, or the host has no plan
|
|
38
|
+
mode, write the same content to `AUDIT_REPORT.md` and preserve everything under `## Reviewer notes` verbatim. When another
|
|
39
|
+
skill invokes the audit as its verification step, report the findings to that caller and stay out of plan mode — the caller
|
|
40
|
+
owns the flow, and the human has usually just left plan mode to let its work happen.
|
|
41
|
+
|
|
42
|
+
## Dispatching an investigator
|
|
43
|
+
|
|
44
|
+
Each investigator prompt carries, in full:
|
|
45
|
+
|
|
46
|
+
- the topic name and the path of its convention topic file;
|
|
47
|
+
- the topic's block from the shared [convention audit checklist](../imf-web-ui-conventions/templates/AUDIT_CHECKLIST.md), and
|
|
48
|
+
the instruction to check every box in it;
|
|
49
|
+
- the safety constraint below, verbatim — an investigator that reaches for a shell breaks the audit's only guarantee;
|
|
50
|
+
- the report contract's entry format, so findings arrive mergeable: severity, reference, short title, `path:line` evidence,
|
|
51
|
+
impact, next action;
|
|
52
|
+
- the instruction to report findings back as its result and write no files.
|
|
53
|
+
|
|
54
|
+
An investigator reports on its topic alone. Anything it notices outside that topic goes back as a note for the orchestrator
|
|
55
|
+
to route, not as a finding it rules on.
|
|
56
|
+
|
|
57
|
+
## Checklist
|
|
58
|
+
|
|
59
|
+
The shared [convention audit checklist](../imf-web-ui-conventions/templates/AUDIT_CHECKLIST.md) is the working checklist: a
|
|
60
|
+
full audit covers every block, a scoped audit covers the requested block plus its dependencies. The audit is not complete
|
|
61
|
+
until every in-scope box has been checked by the investigator that owns it and its evidence appears in the report. The
|
|
62
|
+
checklist itself is not edited during an audit.
|
|
31
63
|
|
|
32
|
-
|
|
64
|
+
## Safety
|
|
33
65
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
66
|
+
Use only static inspection: Read, Glob, Grep, and equivalent non-executing search tools. Do not use a shell or invoke Node,
|
|
67
|
+
npm, npx, package scripts, hooks, config imports, linters, tests, builds, Git commands, or project binaries. Read config as
|
|
68
|
+
text and report runtime or machine-local state that cannot be established statically as unverified. This binds every
|
|
69
|
+
investigator too — a dispatched agent inherits the audit's constraint, not the host's default freedom, so the prompt that
|
|
70
|
+
dispatches it repeats this paragraph verbatim.
|
|
39
71
|
|
|
40
|
-
|
|
41
|
-
|
|
72
|
+
An audit writes at most one file: `AUDIT_REPORT.md`, in the two cases named in the workflow. Investigators write nothing.
|
|
73
|
+
Neither Write nor the host's dispatch tool is pre-approved in `allowed-tools` — `allowed-tools` names what an audit needs on
|
|
74
|
+
every run, and both of these follow the host's ordinary approval when a run needs them. Host-managed hooks may run after that
|
|
75
|
+
write; the skill neither invokes nor suppresses them, but it does report broken or unexpected hook behavior found during
|
|
76
|
+
static inspection.
|
|
42
77
|
|
|
43
78
|
## Topics
|
|
44
79
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`library-setup
|
|
48
|
-
|
|
49
|
-
`
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
`
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
80
|
+
| Topic | Assess |
|
|
81
|
+
| ------------------- | ------------------------------------------------------------------------------ |
|
|
82
|
+
| `library-setup` | styles import, `WebUIProvider`, and library package wiring |
|
|
83
|
+
| `library-boundary` | imports, wrappers, type derivation, and peer boundaries |
|
|
84
|
+
| `react` | component roles, state ownership, and effects discipline |
|
|
85
|
+
| `components` | component folders, anatomy, and colocation |
|
|
86
|
+
| `typescript` | functional style, types, and naming |
|
|
87
|
+
| `styling` | CSS Modules, tokens, and prohibited styling systems |
|
|
88
|
+
| `tokens` | names, authored default values, and families from the shipped token index |
|
|
89
|
+
| `class-names` | CVA variants, `cx`, and incoming `className` handling |
|
|
90
|
+
| `validation` | runtime schemas, boundary parsing, and derived types |
|
|
91
|
+
| `data` | transport, schemas, query/mutation options, keys, and invalidation |
|
|
92
|
+
| `authentication` | current-user query, public/app guards, login, and logout |
|
|
93
|
+
| `project-structure` | source tree, route groups, optional app shell, naming, and imports |
|
|
94
|
+
| `testing` | test boundaries and verification coverage |
|
|
95
|
+
| `npm-project` | package metadata, scripts, pins, npm, and Node configuration |
|
|
96
|
+
| `tooling` | dependency selection, devtools, Prettier, ESLint, TypeScript, and verification |
|
|
97
|
+
| `git` | tracked hooks, verification scopes, and staleness wiring |
|
|
98
|
+
| `assets` | image formats and static asset handling |
|
|
99
|
+
| `docs-structure` | README, AGENTS, docs index, and content boundaries |
|
|
100
|
+
| `agent-tooling` | installed skills, AGENTS fence, lifecycle hooks, registrations, staleness |
|
|
101
|
+
|
|
102
|
+
Report everything within the selected topic: defects and working deviations alike, with no severity-based filtering.
|
|
103
|
+
|
|
104
|
+
## Agent-tooling assessment reference
|
|
105
|
+
|
|
106
|
+
The baseline is the conventions [agent-tooling topic](../imf-web-ui-conventions/topics/agent-tooling.md): the complete bundle
|
|
107
|
+
with matching version markers, the AGENTS fence, and the lifecycle hooks installed and registered for both hosts
|
|
108
|
+
(`.claude/settings.json` and `.codex/hooks.json`) or consciously adapted. Hooks or registrations beyond the shipped set — the
|
|
109
|
+
three injection hooks, the stop gate, plus `baseline-staleness.sh` — are drift, and the tracked pre-commit path calls
|
|
110
|
+
`baseline-staleness.sh`. Read files and settings as text—do not run installers, hooks, or local config queries during
|
|
111
|
+
assessment.
|
|
112
|
+
|
|
113
|
+
Version drift is part of this topic: compare the declared version in `package.json`, the installed
|
|
114
|
+
`node_modules/@imfusion/web-ui/package.json`, and every `.imf-web-ui-skill-version.json` marker, then report the drift and
|
|
115
|
+
point at `imf-web-ui-update`. The registry is unreachable from a static audit, so a line saying that a newer version may
|
|
116
|
+
exist is unverified.
|
|
117
|
+
|
|
118
|
+
Use the shared report template as the report contract. It defines the headings, ordering, empty-section marker, evidence
|
|
119
|
+
format, and reviewer-note preservation rules; do not duplicate that contract here.
|