@boxy-design/htmx
v1.2.0
Published
Boxy design system for HTMX and server-rendered HTML: string renderers, copy-paste partials and a no-framework behaviour script. Generated from spec/components.json.
Readme
@boxy-design/htmx
Boxy for HTMX / server-rendered HTML: a sharp-edged, zero-radius design system. Hairline structure, a disciplined neutral palette, and square everything.
Generated, not hand-ported. This package is emitted from the same component spec as the Boxy stylesheet and is tested against 826 conformance cases, so the markup it renders is identical to the design system's. How that works.
Install
npm install @boxy-design/htmxSetup
- Link the stylesheet (
styles.cssfrom the package) and includeboxy-htmx.jsonce; it handles tab keys and turns any.bx-dialogswapped into the page into a real modal (focus trap, inert page, scroll lock, Esc, focus return). - Render
iconSprite()once in the base layout. - Not a Node server? Use the HTML in
partials/*.html, orspec.json, to template the same markup in any language. boxy-htmx.jsalso starts every interactive widget (menus, tooltips, combobox, calendar, kanban, ...), tabs and modal dialogs; there is nothing more to wire.
Example
import { button, field, input, tabs, tabList, tab, tabPanel } from "@boxy-design/htmx";
field({ id: "svc", label: "Service name", help: "Lowercase." }, (f) => input({ field: f }));
button({ variant: "primary", attrs: { "hx-post": "/deploy", "hx-target": "#out" } }, "Deploy");Notes
- Every function takes
(props, children)and returns an HTML string. Passhx-*and any other attribute throughattrs. - Escape user text with
esc(): children are trusted HTML. field()andtabs()hand their wiring to a callback because a server has no context.
What is included
Icon, Button, ButtonGroup, Label, Field, Input, Textarea, Select, Choice, Checkbox, Radio, Toggle, Tag, Callout, Card, CardHead, CardBody, CardFoot, TableWrap, Table, Th, Td, Spinner, Tabs, TabList, Tab, TabPanel, Dialog, DialogHeader, DialogTitle, DialogBody, DialogFooter, Modal, Stack, Cluster, Grid, AutoGrid, Split, Collapse, Container, Rail, Section, GridBackground, DotBackground, Ticks, LabelText, Mono, Num, ScreenReaderText, Kbd, Mark, Code, Caret, Prose, Quote, Cite, List, OrderedList, ListItem, DescriptionList, Status, Skeleton, Empty, EmptyGlyph, Progress, ProgressRow, Meter, MeterCell, StepBar, StepBarCell, Avatar, AvatarGroup, Timeline, TimelineItem, TimelineTime, TimelineTitle, TimelineBody, Breadcrumb, BreadcrumbMore, Tree, TreeHeading, TreeLink, TreeSummary, TreeCount, Toc, TocLink, Accordion, AccordionNumber, AccordionBody, CodeBlock, CodeBlockHead, CodeBlockSpacer, CodeBlockButton, CodeBlockFoot, CodeLines, CodeLine, Token, Banner, Chart, ChartLegend, ChartKey, ChartTip, Dropzone, DropzoneGlyph, UploadList, UploadItem, UploadType, UploadName, UploadMeta, Sparkline, UptimeStrip, HelpText, SearchField, DateField, Slider, SliderScale, SliderTicks, Stepper, Segmented, Swatch, SwatchButton, ColorPicker, PickerField, PickerHue, PickerRow, PickerSwatches, PickerContrast, Combo, ComboToggle, Listbox, ListboxGroup, ListboxEmpty, ListboxOption, OptionMeta, MultiSelect, MultiInput, MultiClear, Calendar, RangeCalendar, CalendarFoot, RangePicker, RangePresets, Menu, MenuEntry, MenuItem, MenuLink, MenuItemCheckbox, MenuItemRadio, MenuIcon, MenuHint, MenuLabel, MenuSeparator, MenuHeader, MenuFooter, Popover, PopoverHead, PopoverBody, PopoverFoot, FloatingPanel, DrawerPanel, DrawerHead, DrawerBody, DrawerFoot, Drawer, ToastStack, Toast, ToastBody, Tooltip, PaletteSearch, PaletteList, PaletteGroup, PaletteLink, PaletteAction, PaletteMeta, PaletteEmpty, PaletteFoot, TagRemove, Thread, Message, MessageWho, MessageMeta, MessageBody, MessageActions, Thought, ThoughtBody, ToolList, Tool, ToolStatus, ToolName, ToolArgs, ToolDuration, ToolBody, ToolSummary, Approval, ApprovalHead, ApprovalBody, ApprovalFoot, Composer, ComposerFiles, ComposerBar, Kanban, KanbanColumn, KanbanHead, KanbanCount, KanbanList, KanbanSlot, KanbanCard, KanbanCardTitle, KanbanCardMeta, KanbanPriority, Panes, Pane, PaneHead, Resizer, BellButton, BellCount, Inbox, InboxHead, InboxTabs, InboxList, InboxDay, InboxFoot, Note, NoteIcon, NoteText, NoteActions, NoteTime, DataGrid, DataGridBar.
More components are added to the spec and arrive in every package at once. Until then, build the rest from the stylesheet classes the same way the docs do: Boxy component reference.
Versioning
Every @boxy-design/* package and the boxy-design CLI share one version number, and a release
publishes them together. Keep them on the same version.
Links
Docs · Source · Other frameworks · MIT
