Mats Bosson
0116447bf2
Rewrite to vanilla Web Components
...
Complete rewrite from SolidJS to browser-native Custom Elements.
8 components: Dialog, Select, Tabs, Accordion, Form, Toast, DropdownMenu, Popover
Infrastructure: signals (~30 lines), router (Navigation API + View Transitions)
Theme: optional default CSS with custom properties
Zero framework deps. No Shadow DOM. Built on Popover API, <dialog>,
Invoker Commands, Navigation API, View Transitions.
2026-03-30 14:41:25 +07:00
Mats Bosson
02cd1f5522
Snapshot before v2 rewrite
2026-03-30 12:08:51 +07:00
Mats Bosson
81f6be6a00
Fix showcase Pagination
2026-03-30 04:09:18 +07:00
Mats Bosson
eea201cd12
Fix showcase dependencies
...
- Add resolve.dedupe for solid-js to prevent duplicate context instances
- Rewrite Pagination with correct page/totalPages/onPageChange API + children
- Add Calendar inside DatePicker.Content so dates actually render
2026-03-30 04:07:54 +07:00
Mats Bosson
d8ac5e4cb6
Fix showcase API mismatches
...
- Select/Combobox: options → items
- Listbox: add missing items prop
- Slider: onChange → onValueChange
- TextField: validationState="invalid" → invalid (boolean)
- ToggleGroup: add required type="single"
- Pagination: rewrite with page/totalPages/onPageChange + children
- CommandPalette: wrap in Show instead of non-existent open prop
- Toggle/ToggleGroup.Item: data-[pressed] → data-[state=on]
- Tabs.Tab: data-[selected] → data-[state=active]
- Wizard.StepTrigger: data-[active/completed] → data-[state=active/completed]
- Listbox.Item: data-[selected] → aria-selected
2026-03-30 04:03:37 +07:00
Mats Bosson
b76755de76
Fix showcase DataTable columns
2026-03-30 03:49:41 +07:00
Mats Bosson
ac1306edd9
Fix showcase Wizard nesting
...
StepContent requires WizardStepContext provided by Wizard.Step.
2026-03-30 03:48:47 +07:00
Mats Bosson
48d047e5d5
Fix showcase Form rendering
...
Form.Control uses render-prop children(ariaProps). Also moved navLinks
creation inside App() to avoid SolidJS createRoot warning.
2026-03-30 03:47:43 +07:00
Mats Bosson
8f4eb77bdc
Fix showcase state attributes
...
These components use children?: JSX.Element, not render-prop callbacks.
State is exposed via data-state="checked|unchecked" attributes.
2026-03-30 03:45:41 +07:00
Mats Bosson
8761d317ae
All 44 component demos
...
Layout & Display, Inputs Basic, Inputs Selection, Inputs Advanced,
Navigation, Overlays, Feedback & Status, and Data sections with
live interactive demos for every PettyUI component.
2026-03-30 03:36:22 +07:00
Mats Bosson
3d2257ae3c
Showcase layout and navigation
2026-03-30 03:15:24 +07:00
Mats Bosson
144565afb5
Showcase app scaffold
2026-03-30 03:12:57 +07:00
Mats Bosson
e20b69d7e8
Wire up MCP CLI
...
- Add packages/mcp/src/cli.ts with init/list/inspect/discover/add commands
- Add packages/mcp/tests/cli.test.ts with 11 parseCommand tests (42 total)
- Update server.ts to register all 5 tools: discover, inspect, validate, add, compose
- Add @types/node devDep, switch to tsc --noCheck build to avoid re-checking
core source under stricter NodeNext moduleResolution
- tsconfig: NodeNext module, types: [node], exclude core/src
2026-03-30 01:25:45 +07:00
Mats Bosson
e4a91d9386
MCP validate tool
2026-03-29 23:50:58 +07:00
Mats Bosson
0e5033414b
MCP compose tool
2026-03-29 23:50:55 +07:00
Mats Bosson
6545b53310
MCP add tool
2026-03-29 23:50:22 +07:00
Mats Bosson
7e88fbc347
MCP discover tool
2026-03-29 23:49:53 +07:00
Mats Bosson
5e66d6fae1
MCP inspect tool
2026-03-29 23:49:50 +07:00
Mats Bosson
9f78750105
MCP component registry
2026-03-29 23:48:03 +07:00
Mats Bosson
2989ce4974
MCP server scaffold
2026-03-29 21:51:51 +07:00
Mats Bosson
17fe357837
Wire up all Phase 2 exports
...
VirtualList, Calendar, DatePicker, CommandPalette, Form, Wizard,
DataTable + createVirtualizer primitive. 445 tests passing, build clean.
2026-03-29 21:21:16 +07:00
Mats Bosson
894df74d7f
DatePicker component
...
Composes Calendar inside a floating dropdown anchored to an input, with Intl locale formatting, controlled/uncontrolled date+open state, createDismiss for outside-click handling, and hidden input for form submission.
2026-03-29 21:20:09 +07:00
Mats Bosson
ea18b5b62c
DataTable component
2026-03-29 21:17:56 +07:00
Mats Bosson
92435b2667
Wizard component
...
17 tests passing. Implements WizardRoot, WizardStep, WizardStepList, WizardStepTrigger, WizardStepContent, WizardPrev, WizardNext with createControllableSignal step state, completedSteps Set, registerStep/unregisterStep registration, linear guard on triggers, onComplete callback, and Object.assign compound export.
2026-03-29 21:15:55 +07:00
Mats Bosson
f270ef64af
VirtualList component
2026-03-29 21:15:40 +07:00
Mats Bosson
896819526e
Form component with Zod validation
...
Compound Form component (Root, Field, Label, Control, Description,
ErrorMessage, Submit) with reactive error store, aria linking, and
render-prop FormControl. 10 tests across rendering and validation suites.
2026-03-29 21:15:23 +07:00
Mats Bosson
8a248958f5
Calendar component
...
Compound component with Root, Header, Heading, Nav, PrevButton, NextButton, Grid, GridHead, GridBody, and Cell parts. Uses Intl.DateTimeFormat for locale-aware month/year heading and weekday names, min/max date constraints, and Enter/Space keyboard selection. 16 tests passing.
2026-03-29 21:15:19 +07:00
Mats Bosson
1106c2d020
CommandPalette component
2026-03-29 21:13:39 +07:00
Mats Bosson
de1c9a1cb8
Virtual scrolling primitive
2026-03-29 21:06:06 +07:00
Mats Bosson
5f425f445e
Wire up Card, Avatar, NavigationMenu
...
Phase 1 complete — 32 component exports + 6 utility exports, 353 tests
passing, build clean.
2026-03-29 20:55:25 +07:00
Mats Bosson
b4ec99fe4a
Registry package scaffold
...
Adds the shadcn-style copy-paste layer as a new monorepo package. Includes
theme token CSS custom properties (light/dark), a cn() class-merging utility
with tests, and a reference Dialog styled component wrapping the headless
pettyui/dialog primitive with Tailwind classes.
2026-03-29 20:53:40 +07:00
Mats Bosson
56f06c961d
NavigationMenu component
...
Horizontal nav with dropdown submenus, hover-intent delay, keyboard-accessible
trigger/content parts, and full Zod v4 schema + ComponentMeta.
2026-03-29 20:53:17 +07:00
Mats Bosson
80f7af401a
Avatar component
...
Image + fallback pattern with idle/loading/loaded/error status tracking via context. 4 tests passing.
2026-03-29 20:52:04 +07:00
Mats Bosson
5c503ee9ef
Card component
...
Compound API (Root/Header/Content/Footer/Title/Description) with data-scope/data-part attributes, CardPropsSchema, and CardMeta. 4 tests passing.
2026-03-29 20:51:36 +07:00
Mats Bosson
01286d8b07
Trim unused exports
...
Fix systemic index.ts re-export bugs (accordion, alert-dialog, breadcrumbs, tabs)
where types were claimed from wrong source files, causing DTS build failures.
2026-03-29 20:49:28 +07:00
Mats Bosson
2e3d034a12
Migrate form components to Zod props
2026-03-29 20:41:18 +07:00
Mats Bosson
c0019d57e7
Migrate navigation components to Zod props
2026-03-29 20:41:10 +07:00
Mats Bosson
fdd12f95c6
Migrate selection components to Zod props
2026-03-29 20:39:35 +07:00
Mats Bosson
6dd06986cc
Migrate overlay components to Zod props
2026-03-29 20:39:28 +07:00
Mats Bosson
c4547473a4
Migrate basic components to Zod props
2026-03-29 20:38:44 +07:00
Mats Bosson
38ef3b0934
Migrate Dialog to Zod props
...
Centralises all Dialog prop interfaces and schemas in dialog.props.ts.
Adds DialogRootPropsSchema, DialogContentPropsSchema, and DialogMeta for
AI/MCP discovery. Sub-components now import types from the shared file.
2026-03-29 20:36:18 +07:00
Mats Bosson
f197c58296
Add Zod v4 and ComponentMeta type
2026-03-29 20:32:18 +07:00
Mats Bosson
8f075f1792
feat: add 12 components — Tooltip, Popover, HoverCard, Alert, Badge,
...
Skeleton, Breadcrumbs, Link, Button, Image, Meter, NumberField
Floating components: Tooltip (hover/focus), Popover (click, with focus
trap and dismiss), HoverCard (hover with safe area).
Simple components: Alert (role=alert), Badge (role=status), Skeleton
(loading placeholder with data attributes).
Navigation: Breadcrumbs (nav>ol>li with separators), Link (accessible
anchor with disabled), Button (with disabled click suppression).
Data/Form: Image (Img+Fallback with loading status), Meter (like
Progress for known ranges), NumberField (spinbutton with inc/dec).
302 tests across 46 files, typecheck clean, build produces 176 files.
2026-03-29 19:34:13 +07:00
Mats Bosson
2a07d9ceaa
Wire up Wave 2 exports
...
Adds listbox, select, combobox, dropdown-menu, context-menu, and toast
to package.json exports and tsdown build config.
2026-03-29 19:24:43 +07:00
Mats Bosson
6382a59eaf
Combobox, DropdownMenu, ContextMenu, Toast
...
Combobox: text input + floating listbox with consumer-driven filtering,
allowCustomValue, and aria-autocomplete support.
DropdownMenu: activation-mode menu with menuitem, menuitemcheckbox,
menuitemradio roles, keyboard navigation, and typeahead.
ContextMenu: right-click triggered menu with virtual anchor positioning
at pointer coordinates.
Toast: imperative API (toast(), toast.success/error/dismiss/clear) with
reactive signal-based store and Toast.Region declarative renderer.
2026-03-29 19:23:33 +07:00
Mats Bosson
5bc9ac7b61
Listbox, Select, and list navigation
...
createListNavigation is the core primitive for all collection components
(Listbox, Select, Combobox, Menu). It provides value-based keyboard
navigation, selection/activation modes, typeahead, and aria-activedescendant
virtual focus.
Listbox: standalone selectable list with single/multiple selection.
Select: floating dropdown with trigger, keyboard navigation, form integration.
Also fixes exactOptionalPropertyTypes compatibility in createDisclosureState
and createListNavigation interfaces.
2026-03-29 19:12:05 +07:00
Mats Bosson
b249509cd7
Update build config
...
Replaces static entry map with programmatic generation from component
and utility arrays. Removes stale src/index.ts entry, adds all 16
components and 6 utilities.
2026-03-29 13:34:57 +07:00
Mats Bosson
c78a8832d9
Floating positioning primitive
...
Reactive wrapper around @floating-ui/dom that auto-updates floating
element position relative to an anchor. Exports createFloating,
CreateFloatingOptions, and FloatingState from primitives index.
2026-03-29 10:25:38 +07:00
Mats Bosson
d9285cc524
Suppress progressbar lint false positive
2026-03-29 09:17:14 +07:00
Mats Bosson
295dd1388c
Switch to sub-path exports
...
Consumers use sub-path imports (e.g. "pettyui/slider") for tree-shaking.
Adds Drawer component + 15 sub-path entries to package.json exports.
2026-03-29 09:15:53 +07:00