@classytic/pos-ui
v1.4.0
Published
Point-of-sale register UI — a self-contained, full-screen state-machine app (shift → products → payment → receipt → close) with a hardware DI port (printer/drawer/scanner/terminal). Multi-surface: web, Tauri desktop, React Native. Frontend sibling of the
Readme
@classytic/pos-ui
Point-of-sale register UI — a self-contained, full-screen state-machine app (shift → products → payment → receipt → close) with a hardware DI port (printer / drawer / scanner / terminal). Frontend sibling of the @classytic/pos kernel.
Multi-surface by design: web (browser), Tauri desktop, and React Native share the same screens and state machine; only the runtime + hardware adapters differ. Independent of the dashboard stack — no @classytic/erp-shell, no route framework. The host mounts one component and injects adapters.
Install
npm install @classytic/pos-uiPeers: React 19, Next 14+, @classytic/commerce-sdk ≥0.9, @classytic/fluid ≥1.7, @classytic/primitives ≥0.9, TanStack Query 5, sonner, lucide-react. Host-owned @/components/ui/* shadcn primitives (same ambient-stub convention as @classytic/commerce-ui).
Subpath exports
| Subpath | What it gives you |
|---|---|
| @classytic/pos-ui/shell | <PosShell> + props + the DI port types the host implements |
| @classytic/pos-ui/hardware | PosHardware ports, createWebHardware(), Tauri adapter, printer hooks |
| @classytic/pos-ui/runtime | Surface adapters (web, Tauri) — storage, focus, fullscreen, keyboard |
Internal layers (screens/, state/, dashboard/, components/) are not part of the public surface.
Quick start (web)
import { PosShell } from '@classytic/pos-ui/shell';
import { createWebHardware } from '@classytic/pos-ui/hardware';
<PosShell hardware={createWebHardware()} />Hardware adapters are a port — implement the interface for your printer/drawer/terminal vendor and inject it; the screens never talk to devices directly.
Releasing
See sibling packages' RELEASING.md — standard @classytic/* flow (npm run release).
