@inbeat/standards 0.9.2 → 0.9.3
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/CHANGELOG.md +7 -0
- package/package.json +2 -2
- package/skills/ib-ui/SKILL.md +59 -53
- package/template/.agents/skills/ib-ui/SKILL.md +59 -53
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.3](https://github.com/Genoux/ib-toolkit/compare/standards-v0.9.2...standards-v0.9.3) (2026-10-08)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* alert radius, spacing rule and sync cleanup ([#47](https://github.com/Genoux/ib-toolkit/issues/47)) ([b9d1f5d](https://github.com/Genoux/ib-toolkit/commit/b9d1f5d3c4a46d01e4dca9c1485438d28210a3c9))
|
|
9
|
+
|
|
3
10
|
## [0.9.2](https://github.com/Genoux/ib-toolkit/compare/standards-v0.9.1...standards-v0.9.2) (2026-10-07)
|
|
4
11
|
|
|
5
12
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inbeat/standards",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Agent standards for inBeat apps: managed AGENTS.md block, skills under .agents/skills, ib CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"test": "bun --bun vitest run"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@inbeat/config": "^0.9.
|
|
34
|
+
"@inbeat/config": "^0.9.3",
|
|
35
35
|
"vitest": "^4.1.1"
|
|
36
36
|
},
|
|
37
37
|
"repository": {
|
package/skills/ib-ui/SKILL.md
CHANGED
|
@@ -28,6 +28,12 @@ agreement, use a workaround and mark it `// toolkit-gap: <what is missing>` so i
|
|
|
28
28
|
- Tokens only: `bg-background`, `text-muted-foreground`, `border-border`, `bg-primary`, radius
|
|
29
29
|
scale `rounded-{sm..4xl}`, shadows `shadow-hairline|subtle|elevated`. No hex colors, no
|
|
30
30
|
arbitrary spacing unless no token fits.
|
|
31
|
+
- Spacing: nothing touches a border, divider or container edge. A row with a `border-b` gets
|
|
32
|
+
bottom padding at least as large as the gap between its items (`pb-3` minimum), and a bordered
|
|
33
|
+
box pads every bordered side. Space siblings with `gap-*` on the parent, not margins. Use one
|
|
34
|
+
step of the spacing scale per level: tighter inside a group (`gap-2`), looser between groups
|
|
35
|
+
(`gap-4`/`gap-6`). Before finishing, check every bordered or separated region for flush
|
|
36
|
+
content.
|
|
31
37
|
- App shells: `AppShell` + `AppNav`, never Sidebar primitives. Links come in via `renderLink`;
|
|
32
38
|
app sidebar content goes in the `sidebar` slot. Products differ only through `AppShell` props
|
|
33
39
|
(`variant`, `collapsible`, `sidebarWidth`, `headerVariant`), never classes or local shell markup.
|
|
@@ -63,75 +69,75 @@ agreement, use a workaround and mark it `// toolkit-gap: <what is missing>` so i
|
|
|
63
69
|
Every module of `@inbeat/ui`, imported as `@inbeat/ui/<path>`.
|
|
64
70
|
|
|
65
71
|
### Actions
|
|
66
|
-
- `components/button
|
|
67
|
-
- `components/icon-button
|
|
72
|
+
- `components/button`: Button with variants, sizes and `buttonVariants` for link styling.
|
|
73
|
+
- `components/icon-button`: icon-only Button with a required label, tooltip and toggle state.
|
|
68
74
|
|
|
69
75
|
### Forms
|
|
70
|
-
- `components/field
|
|
71
|
-
- `components/label
|
|
72
|
-
- `components/input
|
|
73
|
-
- `components/textarea
|
|
74
|
-
- `components/checkbox
|
|
75
|
-
- `components/select
|
|
76
|
-
- `components/combobox
|
|
77
|
-
- `components/multi-select-popover
|
|
78
|
-
- `components/toggle-pills
|
|
79
|
-
- `components/input-group
|
|
80
|
-
- `components/search-input
|
|
81
|
-
- `components/calendar
|
|
76
|
+
- `components/field`: Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldSet and friends for form layout.
|
|
77
|
+
- `components/label`: accessible form Label.
|
|
78
|
+
- `components/input`: text Input.
|
|
79
|
+
- `components/textarea`: multi-line Textarea.
|
|
80
|
+
- `components/checkbox`: Checkbox.
|
|
81
|
+
- `components/select`: single-choice Select.
|
|
82
|
+
- `components/combobox`: searchable Combobox with chips for multiple values.
|
|
83
|
+
- `components/multi-select-popover`: popover multi-select over a list of options.
|
|
84
|
+
- `components/toggle-pills`: pill buttons toggling a set of string options, for filters.
|
|
85
|
+
- `components/input-group`: Input or Textarea with inline addons, buttons and text.
|
|
86
|
+
- `components/search-input`: controlled search Input with a loading state.
|
|
87
|
+
- `components/calendar`: date Calendar (react-day-picker) in the toolkit style.
|
|
82
88
|
|
|
83
89
|
### Display
|
|
84
|
-
- `components/avatar
|
|
85
|
-
- `components/person-identity
|
|
86
|
-
- `components/member-avatar-stack
|
|
87
|
-
- `components/badge
|
|
88
|
-
- `components/number-dot
|
|
89
|
-
- `components/labeled-field
|
|
90
|
-
- `components/empty-state
|
|
91
|
-
- `components/separator
|
|
92
|
-
- `components/carousel
|
|
93
|
-
- `components/collapsible-section
|
|
90
|
+
- `components/avatar`: Avatar, AvatarImage, AvatarFallback, AvatarGroup and AvatarGroupCount.
|
|
91
|
+
- `components/person-identity`: PersonAvatar, PersonName and PersonIdentity for a person's image and name.
|
|
92
|
+
- `components/member-avatar-stack`: overlapping avatars of up to three members plus a remainder count.
|
|
93
|
+
- `components/badge`: Badge chip.
|
|
94
|
+
- `components/number-dot`: small count pill, renders nothing at zero.
|
|
95
|
+
- `components/labeled-field`: read-only label and value pair.
|
|
96
|
+
- `components/empty-state`: EmptyState with icon, title, description and an optional labelled action.
|
|
97
|
+
- `components/separator`: horizontal or vertical Separator.
|
|
98
|
+
- `components/carousel`: Embla Carousel, CarouselContent and CarouselItem.
|
|
99
|
+
- `components/collapsible-section`: animated CollapsibleSection with trigger and content.
|
|
94
100
|
|
|
95
101
|
### Feedback
|
|
96
|
-
- `components/alert
|
|
97
|
-
- `components/sonner
|
|
98
|
-
- `components/spinner
|
|
99
|
-
- `components/skeleton
|
|
100
|
-
- `components/progress
|
|
101
|
-
- `components/platform-disclaimer
|
|
102
|
+
- `components/alert`: Alert, AlertTitle and AlertDescription (default, destructive).
|
|
103
|
+
- `components/sonner`: Toaster for `sonner` toasts; mount once in the root layout.
|
|
104
|
+
- `components/spinner`: Spinner and SectionSpinner for loading states.
|
|
105
|
+
- `components/skeleton`: Skeleton placeholder.
|
|
106
|
+
- `components/progress`: Progress bar.
|
|
107
|
+
- `components/platform-disclaimer`: dismissible notice whose dismissal is stored in a cookie.
|
|
102
108
|
|
|
103
109
|
### Navigation
|
|
104
|
-
- `components/app-nav
|
|
105
|
-
- `components/nav-user
|
|
106
|
-
- `components/breadcrumb
|
|
107
|
-
- `components/tabs
|
|
108
|
-
- `components/sidebar
|
|
110
|
+
- `components/app-nav`: sidebar navigation list driven by `items` and `renderLink`.
|
|
111
|
+
- `components/nav-user`: sidebar user menu with name, email, avatar and dropdown.
|
|
112
|
+
- `components/breadcrumb`: Breadcrumb trail.
|
|
113
|
+
- `components/tabs`: Tabs, TabsList (pills from a `tabs` array) and TabsContent.
|
|
114
|
+
- `components/sidebar`: Sidebar primitives that AppShell is built from; apps do not use them directly.
|
|
109
115
|
|
|
110
116
|
### Overlays
|
|
111
|
-
- `components/dialog
|
|
112
|
-
- `components/alert-dialog
|
|
113
|
-
- `components/destructive-action-dialog
|
|
114
|
-
- `components/sheet
|
|
115
|
-
- `components/popover
|
|
116
|
-
- `components/dropdown-menu
|
|
117
|
-
- `components/tooltip
|
|
118
|
-
- `components/portal-container
|
|
117
|
+
- `components/dialog`: modal Dialog.
|
|
118
|
+
- `components/alert-dialog`: AlertDialog for interrupting confirmations.
|
|
119
|
+
- `components/destructive-action-dialog`: confirm step for destructive actions, optionally typed.
|
|
120
|
+
- `components/sheet`: side Sheet panel.
|
|
121
|
+
- `components/popover`: Popover.
|
|
122
|
+
- `components/dropdown-menu`: DropdownMenu.
|
|
123
|
+
- `components/tooltip`: Tooltip and TooltipProvider.
|
|
124
|
+
- `components/portal-container`: PortalContainerProvider and usePortalContainer to portal overlays into a chosen element.
|
|
119
125
|
|
|
120
126
|
### Data
|
|
121
|
-
- `components/data-table
|
|
122
|
-
- `components/data-table-shell
|
|
123
|
-
- `components/data-table-sortable-header
|
|
124
|
-
- `components/table
|
|
125
|
-
- `components/load-more-sentinel
|
|
127
|
+
- `components/data-table`: DataTable driven by TanStack `columns` and `data`.
|
|
128
|
+
- `components/data-table-shell`: scrollable wrapper that holds a DataTable.
|
|
129
|
+
- `components/data-table-sortable-header`: sortable column header for DataTable columns.
|
|
130
|
+
- `components/table`: Table, TableHeader, TableBody, TableRow, TableHead and TableCell primitives.
|
|
131
|
+
- `components/load-more-sentinel`: invisible marker that triggers infinite loading.
|
|
126
132
|
|
|
127
133
|
### Layout
|
|
128
|
-
- `components/app-shell
|
|
134
|
+
- `components/app-shell`: AppShell page frame with sidebar and header, and AppShellLogo.
|
|
129
135
|
|
|
130
136
|
### Hooks and lib
|
|
131
|
-
- `hooks/use-mobile
|
|
132
|
-
- `lib/utils
|
|
133
|
-
- `lib/easing
|
|
134
|
-
- `lib/initials
|
|
137
|
+
- `hooks/use-mobile`: `useIsMobile()` breakpoint hook.
|
|
138
|
+
- `lib/utils`: `cn()` class merging.
|
|
139
|
+
- `lib/easing`: `EASING_FUNCTION` curves shared with motion animations.
|
|
140
|
+
- `lib/initials`: `getInitials(name, fallback)`.
|
|
135
141
|
|
|
136
142
|
## Setup in an app
|
|
137
143
|
|
|
@@ -28,6 +28,12 @@ agreement, use a workaround and mark it `// toolkit-gap: <what is missing>` so i
|
|
|
28
28
|
- Tokens only: `bg-background`, `text-muted-foreground`, `border-border`, `bg-primary`, radius
|
|
29
29
|
scale `rounded-{sm..4xl}`, shadows `shadow-hairline|subtle|elevated`. No hex colors, no
|
|
30
30
|
arbitrary spacing unless no token fits.
|
|
31
|
+
- Spacing: nothing touches a border, divider or container edge. A row with a `border-b` gets
|
|
32
|
+
bottom padding at least as large as the gap between its items (`pb-3` minimum), and a bordered
|
|
33
|
+
box pads every bordered side. Space siblings with `gap-*` on the parent, not margins. Use one
|
|
34
|
+
step of the spacing scale per level: tighter inside a group (`gap-2`), looser between groups
|
|
35
|
+
(`gap-4`/`gap-6`). Before finishing, check every bordered or separated region for flush
|
|
36
|
+
content.
|
|
31
37
|
- App shells: `AppShell` + `AppNav`, never Sidebar primitives. Links come in via `renderLink`;
|
|
32
38
|
app sidebar content goes in the `sidebar` slot. Products differ only through `AppShell` props
|
|
33
39
|
(`variant`, `collapsible`, `sidebarWidth`, `headerVariant`), never classes or local shell markup.
|
|
@@ -63,75 +69,75 @@ agreement, use a workaround and mark it `// toolkit-gap: <what is missing>` so i
|
|
|
63
69
|
Every module of `@inbeat/ui`, imported as `@inbeat/ui/<path>`.
|
|
64
70
|
|
|
65
71
|
### Actions
|
|
66
|
-
- `components/button
|
|
67
|
-
- `components/icon-button
|
|
72
|
+
- `components/button`: Button with variants, sizes and `buttonVariants` for link styling.
|
|
73
|
+
- `components/icon-button`: icon-only Button with a required label, tooltip and toggle state.
|
|
68
74
|
|
|
69
75
|
### Forms
|
|
70
|
-
- `components/field
|
|
71
|
-
- `components/label
|
|
72
|
-
- `components/input
|
|
73
|
-
- `components/textarea
|
|
74
|
-
- `components/checkbox
|
|
75
|
-
- `components/select
|
|
76
|
-
- `components/combobox
|
|
77
|
-
- `components/multi-select-popover
|
|
78
|
-
- `components/toggle-pills
|
|
79
|
-
- `components/input-group
|
|
80
|
-
- `components/search-input
|
|
81
|
-
- `components/calendar
|
|
76
|
+
- `components/field`: Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldSet and friends for form layout.
|
|
77
|
+
- `components/label`: accessible form Label.
|
|
78
|
+
- `components/input`: text Input.
|
|
79
|
+
- `components/textarea`: multi-line Textarea.
|
|
80
|
+
- `components/checkbox`: Checkbox.
|
|
81
|
+
- `components/select`: single-choice Select.
|
|
82
|
+
- `components/combobox`: searchable Combobox with chips for multiple values.
|
|
83
|
+
- `components/multi-select-popover`: popover multi-select over a list of options.
|
|
84
|
+
- `components/toggle-pills`: pill buttons toggling a set of string options, for filters.
|
|
85
|
+
- `components/input-group`: Input or Textarea with inline addons, buttons and text.
|
|
86
|
+
- `components/search-input`: controlled search Input with a loading state.
|
|
87
|
+
- `components/calendar`: date Calendar (react-day-picker) in the toolkit style.
|
|
82
88
|
|
|
83
89
|
### Display
|
|
84
|
-
- `components/avatar
|
|
85
|
-
- `components/person-identity
|
|
86
|
-
- `components/member-avatar-stack
|
|
87
|
-
- `components/badge
|
|
88
|
-
- `components/number-dot
|
|
89
|
-
- `components/labeled-field
|
|
90
|
-
- `components/empty-state
|
|
91
|
-
- `components/separator
|
|
92
|
-
- `components/carousel
|
|
93
|
-
- `components/collapsible-section
|
|
90
|
+
- `components/avatar`: Avatar, AvatarImage, AvatarFallback, AvatarGroup and AvatarGroupCount.
|
|
91
|
+
- `components/person-identity`: PersonAvatar, PersonName and PersonIdentity for a person's image and name.
|
|
92
|
+
- `components/member-avatar-stack`: overlapping avatars of up to three members plus a remainder count.
|
|
93
|
+
- `components/badge`: Badge chip.
|
|
94
|
+
- `components/number-dot`: small count pill, renders nothing at zero.
|
|
95
|
+
- `components/labeled-field`: read-only label and value pair.
|
|
96
|
+
- `components/empty-state`: EmptyState with icon, title, description and an optional labelled action.
|
|
97
|
+
- `components/separator`: horizontal or vertical Separator.
|
|
98
|
+
- `components/carousel`: Embla Carousel, CarouselContent and CarouselItem.
|
|
99
|
+
- `components/collapsible-section`: animated CollapsibleSection with trigger and content.
|
|
94
100
|
|
|
95
101
|
### Feedback
|
|
96
|
-
- `components/alert
|
|
97
|
-
- `components/sonner
|
|
98
|
-
- `components/spinner
|
|
99
|
-
- `components/skeleton
|
|
100
|
-
- `components/progress
|
|
101
|
-
- `components/platform-disclaimer
|
|
102
|
+
- `components/alert`: Alert, AlertTitle and AlertDescription (default, destructive).
|
|
103
|
+
- `components/sonner`: Toaster for `sonner` toasts; mount once in the root layout.
|
|
104
|
+
- `components/spinner`: Spinner and SectionSpinner for loading states.
|
|
105
|
+
- `components/skeleton`: Skeleton placeholder.
|
|
106
|
+
- `components/progress`: Progress bar.
|
|
107
|
+
- `components/platform-disclaimer`: dismissible notice whose dismissal is stored in a cookie.
|
|
102
108
|
|
|
103
109
|
### Navigation
|
|
104
|
-
- `components/app-nav
|
|
105
|
-
- `components/nav-user
|
|
106
|
-
- `components/breadcrumb
|
|
107
|
-
- `components/tabs
|
|
108
|
-
- `components/sidebar
|
|
110
|
+
- `components/app-nav`: sidebar navigation list driven by `items` and `renderLink`.
|
|
111
|
+
- `components/nav-user`: sidebar user menu with name, email, avatar and dropdown.
|
|
112
|
+
- `components/breadcrumb`: Breadcrumb trail.
|
|
113
|
+
- `components/tabs`: Tabs, TabsList (pills from a `tabs` array) and TabsContent.
|
|
114
|
+
- `components/sidebar`: Sidebar primitives that AppShell is built from; apps do not use them directly.
|
|
109
115
|
|
|
110
116
|
### Overlays
|
|
111
|
-
- `components/dialog
|
|
112
|
-
- `components/alert-dialog
|
|
113
|
-
- `components/destructive-action-dialog
|
|
114
|
-
- `components/sheet
|
|
115
|
-
- `components/popover
|
|
116
|
-
- `components/dropdown-menu
|
|
117
|
-
- `components/tooltip
|
|
118
|
-
- `components/portal-container
|
|
117
|
+
- `components/dialog`: modal Dialog.
|
|
118
|
+
- `components/alert-dialog`: AlertDialog for interrupting confirmations.
|
|
119
|
+
- `components/destructive-action-dialog`: confirm step for destructive actions, optionally typed.
|
|
120
|
+
- `components/sheet`: side Sheet panel.
|
|
121
|
+
- `components/popover`: Popover.
|
|
122
|
+
- `components/dropdown-menu`: DropdownMenu.
|
|
123
|
+
- `components/tooltip`: Tooltip and TooltipProvider.
|
|
124
|
+
- `components/portal-container`: PortalContainerProvider and usePortalContainer to portal overlays into a chosen element.
|
|
119
125
|
|
|
120
126
|
### Data
|
|
121
|
-
- `components/data-table
|
|
122
|
-
- `components/data-table-shell
|
|
123
|
-
- `components/data-table-sortable-header
|
|
124
|
-
- `components/table
|
|
125
|
-
- `components/load-more-sentinel
|
|
127
|
+
- `components/data-table`: DataTable driven by TanStack `columns` and `data`.
|
|
128
|
+
- `components/data-table-shell`: scrollable wrapper that holds a DataTable.
|
|
129
|
+
- `components/data-table-sortable-header`: sortable column header for DataTable columns.
|
|
130
|
+
- `components/table`: Table, TableHeader, TableBody, TableRow, TableHead and TableCell primitives.
|
|
131
|
+
- `components/load-more-sentinel`: invisible marker that triggers infinite loading.
|
|
126
132
|
|
|
127
133
|
### Layout
|
|
128
|
-
- `components/app-shell
|
|
134
|
+
- `components/app-shell`: AppShell page frame with sidebar and header, and AppShellLogo.
|
|
129
135
|
|
|
130
136
|
### Hooks and lib
|
|
131
|
-
- `hooks/use-mobile
|
|
132
|
-
- `lib/utils
|
|
133
|
-
- `lib/easing
|
|
134
|
-
- `lib/initials
|
|
137
|
+
- `hooks/use-mobile`: `useIsMobile()` breakpoint hook.
|
|
138
|
+
- `lib/utils`: `cn()` class merging.
|
|
139
|
+
- `lib/easing`: `EASING_FUNCTION` curves shared with motion animations.
|
|
140
|
+
- `lib/initials`: `getInitials(name, fallback)`.
|
|
135
141
|
|
|
136
142
|
## Setup in an app
|
|
137
143
|
|