@termuijs/ui 0.1.0
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/dist/index.cjs +780 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +285 -0
- package/dist/index.d.ts +285 -0
- package/dist/index.js +746 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Divider.ts","../src/Spacer.ts","../src/Tabs.ts","../src/Modal.ts","../src/Select.ts","../src/MultiSelect.ts","../src/Tree.ts","../src/Toast.ts","../src/ConfirmDialog.ts","../src/Form.ts","../src/CommandPalette.ts"],"sourcesContent":["// ─────────────────────────────────────────────────────\n// @termuijs/ui — Rich Component Library\n//\n// The shadcn/ui for terminals — 16+ production-ready\n// components for building beautiful CLI apps.\n// ─────────────────────────────────────────────────────\n\n// ── Re-exports from @termuijs/widgets (base components) ──\nexport {\n Box,\n Text,\n Table,\n List,\n TextInput,\n Gauge,\n Sparkline,\n StatusIndicator,\n LogView,\n ProgressBar,\n Spinner,\n Widget,\n} from '@termuijs/widgets';\n\n// ── New components ──\nexport { Divider } from './Divider.js';\nexport type { DividerOptions } from './Divider.js';\n\nexport { Spacer } from './Spacer.js';\n\nexport { Tabs } from './Tabs.js';\nexport type { Tab, TabsOptions } from './Tabs.js';\n\nexport { Modal } from './Modal.js';\nexport type { ModalOptions } from './Modal.js';\n\nexport { Select } from './Select.js';\nexport type { SelectOption, SelectOptions } from './Select.js';\n\nexport { MultiSelect } from './MultiSelect.js';\nexport type { MultiSelectOption, MultiSelectOptions } from './MultiSelect.js';\n\nexport { Tree } from './Tree.js';\nexport type { TreeNode, TreeOptions } from './Tree.js';\n\nexport { Toast } from './Toast.js';\nexport type { ToastType, ToastMessage, ToastOptions } from './Toast.js';\n\nexport { ConfirmDialog } from './ConfirmDialog.js';\nexport type { ConfirmDialogOptions } from './ConfirmDialog.js';\n\nexport { Form } from './Form.js';\nexport type { FormField, FormOptions } from './Form.js';\n\nexport { CommandPalette } from './CommandPalette.js';\nexport type { Command, CommandPaletteOptions } from './CommandPalette.js';\n","// Divider — horizontal separator line\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface DividerOptions {\n char?: string;\n color?: Style['fg'];\n title?: string;\n}\n\nexport class Divider extends Widget {\n private _char: string;\n private _color: Style['fg'];\n private _title: string;\n\n constructor(options: DividerOptions = {}) {\n super(mergeStyles(defaultStyle(), { height: 1 }));\n this._char = options.char ?? '─';\n this._color = options.color;\n this._title = options.title ?? '';\n }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width } = this._rect;\n if (width <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n if (this._color) attrs.fg = this._color;\n attrs.dim = true;\n if (this._title) {\n const titleStr = ` ${this._title} `;\n const padLeft = Math.max(0, Math.floor((width - titleStr.length) / 2));\n const padRight = Math.max(0, width - padLeft - titleStr.length);\n const line = this._char.repeat(padLeft) + titleStr + this._char.repeat(padRight);\n screen.writeString(x, y, line.slice(0, width), attrs);\n } else {\n screen.writeString(x, y, this._char.repeat(width), attrs);\n }\n }\n}\n","// Spacer — flexible empty space\nimport { Widget } from '@termuijs/widgets';\nimport { type Screen, mergeStyles, defaultStyle } from '@termuijs/core';\n\nexport class Spacer extends Widget {\n constructor(grow: number = 1) {\n super(mergeStyles(defaultStyle(), { flexGrow: grow }));\n }\n protected _renderSelf(_screen: Screen): void { /* empty */ }\n}\n","// Tabs — tabbed container with keyboard switching\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface Tab { label: string; content: Widget; }\nexport interface TabsOptions {\n activeColor?: Style['fg'];\n inactiveColor?: Style['fg'];\n border?: Style['border'];\n}\n\nexport class Tabs extends Widget {\n private _tabs: Tab[] = [];\n private _activeIndex = 0;\n private _activeColor: Style['fg'];\n private _inactiveColor: Style['fg'];\n focusable = true;\n\n constructor(tabs: Tab[], options: TabsOptions = {}) {\n super(mergeStyles(defaultStyle(), { flexGrow: 1, border: options.border ?? 'single' }));\n this._tabs = tabs;\n this._activeColor = options.activeColor ?? { type: 'named', name: 'cyan' };\n this._inactiveColor = options.inactiveColor ?? { type: 'named', name: 'brightBlack' };\n }\n\n get activeIndex(): number { return this._activeIndex; }\n selectTab(i: number): void { if (i >= 0 && i < this._tabs.length) this._activeIndex = i; }\n nextTab(): void { this._activeIndex = (this._activeIndex + 1) % this._tabs.length; }\n prevTab(): void { this._activeIndex = (this._activeIndex - 1 + this._tabs.length) % this._tabs.length; }\n get activeContent(): Widget | undefined { return this._tabs[this._activeIndex]?.content; }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width, height } = this._rect;\n if (width <= 0 || height <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n let col = x;\n for (let i = 0; i < this._tabs.length; i++) {\n const tab = this._tabs[i];\n const isActive = i === this._activeIndex;\n const label = isActive ? ` ● ${tab.label} ` : ` ${tab.label} `;\n screen.writeString(col, y, label, {\n ...attrs,\n fg: isActive ? this._activeColor : this._inactiveColor,\n bold: isActive, dim: !isActive,\n });\n col += label.length;\n if (i < this._tabs.length - 1) { screen.writeString(col, y, '│', { ...attrs, dim: true }); col++; }\n }\n if (height > 1) screen.writeString(x, y + 1, '─'.repeat(width), { ...attrs, dim: true });\n }\n}\n","// Modal — overlay dialog with backdrop\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs, getBorderChars } from '@termuijs/core';\n\nexport interface ModalOptions {\n title?: string;\n width?: number;\n height?: number;\n borderColor?: Style['fg'];\n backdropChar?: string;\n}\n\nexport class Modal extends Widget {\n private _title: string;\n private _modalWidth: number;\n private _modalHeight: number;\n private _borderColor: Style['fg'];\n private _backdropChar: string;\n private _visible = false;\n private _content: Widget | null = null;\n\n constructor(options: ModalOptions = {}) {\n super(mergeStyles(defaultStyle(), {}));\n this._title = options.title ?? '';\n this._modalWidth = options.width ?? 50;\n this._modalHeight = options.height ?? 15;\n this._borderColor = options.borderColor ?? { type: 'named', name: 'cyan' };\n this._backdropChar = options.backdropChar ?? '░';\n }\n\n get visible(): boolean { return this._visible; }\n show(): void { this._visible = true; }\n hide(): void { this._visible = false; }\n toggle(): void { this._visible = !this._visible; }\n setContent(content: Widget): void { this._content = content; }\n\n protected _renderSelf(screen: Screen): void {\n if (!this._visible) return;\n const { x, y, width, height } = this._rect;\n const attrs = styleToCellAttrs(this.style);\n // Backdrop\n for (let r = 0; r < height; r++) {\n screen.writeString(x, y + r, this._backdropChar.repeat(width), { ...attrs, dim: true });\n }\n // Centered modal\n const mw = Math.min(this._modalWidth, width - 4);\n const mh = Math.min(this._modalHeight, height - 2);\n const mx = x + Math.floor((width - mw) / 2);\n const my = y + Math.floor((height - mh) / 2);\n const border = getBorderChars('single');\n if (!border) return;\n const bAttrs = { ...attrs, fg: this._borderColor };\n // Title bar\n const titleStr = this._title ? ` ${this._title} ` : '';\n const topFill = mw - 2 - titleStr.length;\n const tl = Math.floor(topFill / 2);\n const tr = topFill - tl;\n screen.writeString(mx, my, border.topLeft + border.top.repeat(tl) + titleStr + border.top.repeat(Math.max(0, tr)) + border.topRight, bAttrs);\n // Sides\n const clr = styleToCellAttrs(this.style);\n for (let r = 1; r < mh - 1; r++) {\n screen.writeString(mx, my + r, border.left, bAttrs);\n screen.writeString(mx + 1, my + r, ' '.repeat(mw - 2), clr);\n screen.writeString(mx + mw - 1, my + r, border.right, bAttrs);\n }\n // Bottom\n screen.writeString(mx, my + mh - 1, border.bottomLeft + border.bottom.repeat(mw - 2) + border.bottomRight, bAttrs);\n // Content\n if (this._content) {\n const cr = { x: mx + 2, y: my + 1, width: mw - 4, height: mh - 2 };\n (this._content as any)._rect = cr;\n (this._content as any)._renderSelf(screen);\n }\n }\n}\n","// Select — single-item dropdown selector\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface SelectOption { label: string; value: string; disabled?: boolean; }\nexport interface SelectOptions {\n placeholder?: string;\n activeColor?: Style['fg'];\n onSelect?: (option: SelectOption, index: number) => void;\n}\n\nexport class Select extends Widget {\n private _options: SelectOption[];\n private _selectedIndex = 0;\n private _isOpen = false;\n private _placeholder: string;\n private _activeColor: Style['fg'];\n private _onSelect?: (option: SelectOption, index: number) => void;\n focusable = true;\n\n constructor(options: SelectOption[], config: SelectOptions = {}) {\n super(mergeStyles(defaultStyle(), { height: 1 }));\n this._options = options;\n this._placeholder = config.placeholder ?? 'Select...';\n this._activeColor = config.activeColor ?? { type: 'named', name: 'cyan' };\n this._onSelect = config.onSelect;\n }\n\n get selectedOption(): SelectOption | undefined { return this._options[this._selectedIndex]; }\n get selectedIndex(): number { return this._selectedIndex; }\n get isOpen(): boolean { return this._isOpen; }\n open(): void { this._isOpen = true; }\n close(): void { this._isOpen = false; }\n toggle(): void { this._isOpen = !this._isOpen; }\n\n selectNext(): void {\n let n = this._selectedIndex + 1;\n while (n < this._options.length && this._options[n].disabled) n++;\n if (n < this._options.length) this._selectedIndex = n;\n }\n selectPrev(): void {\n let n = this._selectedIndex - 1;\n while (n >= 0 && this._options[n].disabled) n--;\n if (n >= 0) this._selectedIndex = n;\n }\n confirm(): void {\n const opt = this._options[this._selectedIndex];\n if (opt && !opt.disabled) { this._onSelect?.(opt, this._selectedIndex); this._isOpen = false; }\n }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width } = this._rect;\n if (width <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n const sel = this._options[this._selectedIndex];\n const label = sel ? sel.label : this._placeholder;\n const prefix = this._isOpen ? '▼ ' : '▶ ';\n screen.writeString(x, y, prefix + label.slice(0, width - 2), { ...attrs, fg: this._activeColor });\n if (this._isOpen) {\n for (let i = 0; i < this._options.length; i++) {\n const o = this._options[i];\n const isSel = i === this._selectedIndex;\n const m = isSel ? '● ' : ' ';\n screen.writeString(x, y + 1 + i, m + o.label.slice(0, width - 2), {\n ...attrs,\n fg: o.disabled ? { type: 'named' as const, name: 'brightBlack' as const } : isSel ? this._activeColor : attrs.fg,\n bold: isSel, dim: o.disabled,\n });\n }\n }\n }\n}\n","// MultiSelect — checkbox-style multi-item selector\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface MultiSelectOption { label: string; value: string; disabled?: boolean; }\nexport interface MultiSelectOptions {\n activeColor?: Style['fg'];\n checkChar?: string;\n uncheckChar?: string;\n onSubmit?: (selected: MultiSelectOption[]) => void;\n}\n\nexport class MultiSelect extends Widget {\n private _options: MultiSelectOption[];\n private _cursorIndex = 0;\n private _checked: Set<number> = new Set();\n private _activeColor: Style['fg'];\n private _checkChar: string;\n private _uncheckChar: string;\n private _onSubmit?: (selected: MultiSelectOption[]) => void;\n focusable = true;\n\n constructor(options: MultiSelectOption[], config: MultiSelectOptions = {}) {\n super(mergeStyles(defaultStyle(), { height: Math.max(options.length, 1) }));\n this._options = options;\n this._activeColor = config.activeColor ?? { type: 'named', name: 'cyan' };\n this._checkChar = config.checkChar ?? '◼';\n this._uncheckChar = config.uncheckChar ?? '◻';\n this._onSubmit = config.onSubmit;\n }\n\n get selectedOptions(): MultiSelectOption[] {\n return [...this._checked].sort().map(i => this._options[i]);\n }\n selectNext(): void { let n = this._cursorIndex + 1; while (n < this._options.length && this._options[n].disabled) n++; if (n < this._options.length) this._cursorIndex = n; }\n selectPrev(): void { let n = this._cursorIndex - 1; while (n >= 0 && this._options[n].disabled) n--; if (n >= 0) this._cursorIndex = n; }\n toggleCurrent(): void {\n const o = this._options[this._cursorIndex];\n if (o && !o.disabled) { this._checked.has(this._cursorIndex) ? this._checked.delete(this._cursorIndex) : this._checked.add(this._cursorIndex); }\n }\n submit(): void { this._onSubmit?.(this.selectedOptions); }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width, height } = this._rect;\n if (width <= 0 || height <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n for (let i = 0; i < this._options.length && i < height; i++) {\n const o = this._options[i];\n const active = i === this._cursorIndex;\n const checked = this._checked.has(i);\n const label = `${active ? '❯ ' : ' '}${checked ? this._checkChar : this._uncheckChar} ${o.label}`;\n screen.writeString(x, y + i, label.slice(0, width), {\n ...attrs,\n fg: o.disabled ? { type: 'named' as const, name: 'brightBlack' as const } : active ? this._activeColor : attrs.fg,\n bold: active, dim: o.disabled,\n });\n }\n }\n}\n","// Tree — expandable/collapsible tree view\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface TreeNode { label: string; children?: TreeNode[]; expanded?: boolean; icon?: string; }\nexport interface TreeOptions { activeColor?: Style['fg']; onSelect?: (node: TreeNode, path: number[]) => void; }\n\nexport class Tree extends Widget {\n private _roots: TreeNode[];\n private _cursorIndex = 0;\n private _activeColor: Style['fg'];\n private _onSelect?: (node: TreeNode, path: number[]) => void;\n focusable = true;\n\n constructor(roots: TreeNode[], options: TreeOptions = {}) {\n super(mergeStyles(defaultStyle(), { flexGrow: 1 }));\n this._roots = roots;\n this._activeColor = options.activeColor ?? { type: 'named', name: 'cyan' };\n this._onSelect = options.onSelect;\n }\n\n private _flatten(): { node: TreeNode; depth: number; path: number[]; hasChildren: boolean }[] {\n const result: { node: TreeNode; depth: number; path: number[]; hasChildren: boolean }[] = [];\n const walk = (nodes: TreeNode[], depth: number, path: number[]) => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasChildren = (node.children?.length ?? 0) > 0;\n result.push({ node, depth, path: [...path, i], hasChildren });\n if (hasChildren && node.expanded) walk(node.children!, depth + 1, [...path, i]);\n }\n };\n walk(this._roots, 0, []);\n return result;\n }\n\n selectNext(): void { const f = this._flatten(); if (this._cursorIndex < f.length - 1) this._cursorIndex++; }\n selectPrev(): void { if (this._cursorIndex > 0) this._cursorIndex--; }\n toggleExpand(): void { const f = this._flatten(); const it = f[this._cursorIndex]; if (it?.hasChildren) it.node.expanded = !it.node.expanded; }\n confirm(): void {\n const f = this._flatten(); const it = f[this._cursorIndex];\n if (it) { it.hasChildren ? this.toggleExpand() : this._onSelect?.(it.node, it.path); }\n }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width, height } = this._rect;\n if (width <= 0 || height <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n const flat = this._flatten();\n for (let i = 0; i < flat.length && i < height; i++) {\n const it = flat[i];\n const active = i === this._cursorIndex;\n const indent = ' '.repeat(it.depth);\n const icon = it.hasChildren ? (it.node.expanded ? '▼ ' : '▶ ') : ' ';\n const nodeIcon = it.node.icon ? `${it.node.icon} ` : '';\n const line = `${indent}${icon}${nodeIcon}${it.node.label}`;\n screen.writeString(x, y + i, line.slice(0, width), { ...attrs, fg: active ? this._activeColor : attrs.fg, bold: active });\n }\n }\n}\n","// Toast — auto-dismiss notification\nimport { Widget } from '@termuijs/widgets';\nimport { type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport type ToastType = 'info' | 'success' | 'warning' | 'error';\nexport interface ToastMessage { text: string; type: ToastType; expireAt: number; }\nexport interface ToastOptions { position?: 'top-right' | 'bottom-right' | 'top-left' | 'bottom-left'; durationMs?: number; maxVisible?: number; }\n\nconst ICONS: Record<ToastType, string> = { info: 'ℹ', success: '✓', warning: '⚠', error: '✗' };\nconst COLORS: Record<ToastType, string> = { info: 'cyan', success: 'green', warning: 'yellow', error: 'red' };\n\nexport class Toast extends Widget {\n private _messages: ToastMessage[] = [];\n private _position: string;\n private _durationMs: number;\n private _maxVisible: number;\n\n constructor(options: ToastOptions = {}) {\n super(mergeStyles(defaultStyle(), {}));\n this._position = options.position ?? 'top-right';\n this._durationMs = options.durationMs ?? 3000;\n this._maxVisible = options.maxVisible ?? 5;\n }\n\n push(text: string, type: ToastType = 'info'): void { this._messages.push({ text, type, expireAt: Date.now() + this._durationMs }); }\n info(text: string): void { this.push(text, 'info'); }\n success(text: string): void { this.push(text, 'success'); }\n warning(text: string): void { this.push(text, 'warning'); }\n error(text: string): void { this.push(text, 'error'); }\n\n protected _renderSelf(screen: Screen): void {\n const now = Date.now();\n this._messages = this._messages.filter(m => m.expireAt > now);\n if (this._messages.length === 0) return;\n const { x, y, width, height } = this._rect;\n const visible = this._messages.slice(-this._maxVisible);\n const tw = Math.min(40, width - 2);\n const isRight = this._position.includes('right');\n const isBottom = this._position.includes('bottom');\n const sx = isRight ? x + width - tw - 1 : x + 1;\n const sy = isBottom ? y + height - visible.length - 1 : y + 1;\n const attrs = styleToCellAttrs(this.style);\n for (let i = 0; i < visible.length; i++) {\n const m = visible[i];\n const label = ` ${ICONS[m.type]} ${m.text} `.slice(0, tw).padEnd(tw);\n screen.writeString(sx, sy + i, label, { ...attrs, fg: { type: 'named', name: COLORS[m.type] as any }, bold: true });\n }\n }\n}\n","// ConfirmDialog — yes/no prompt overlay\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs, getBorderChars } from '@termuijs/core';\n\nexport interface ConfirmDialogOptions {\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n borderColor?: Style['fg'];\n onConfirm?: () => void;\n onCancel?: () => void;\n}\n\nexport class ConfirmDialog extends Widget {\n private _message: string;\n private _confirmLabel: string;\n private _cancelLabel: string;\n private _borderColor: Style['fg'];\n private _selected: 'confirm' | 'cancel' = 'confirm';\n private _visible = false;\n private _onConfirm?: () => void;\n private _onCancel?: () => void;\n focusable = true;\n\n constructor(options: ConfirmDialogOptions) {\n super(mergeStyles(defaultStyle(), {}));\n this._message = options.message;\n this._confirmLabel = options.confirmLabel ?? 'Yes';\n this._cancelLabel = options.cancelLabel ?? 'No';\n this._borderColor = options.borderColor ?? { type: 'named', name: 'yellow' };\n this._onConfirm = options.onConfirm;\n this._onCancel = options.onCancel;\n }\n\n get visible(): boolean { return this._visible; }\n show(): void { this._visible = true; this._selected = 'confirm'; }\n hide(): void { this._visible = false; }\n selectConfirm(): void { this._selected = 'confirm'; }\n selectCancel(): void { this._selected = 'cancel'; }\n toggleSelection(): void { this._selected = this._selected === 'confirm' ? 'cancel' : 'confirm'; }\n confirm(): void {\n (this._selected === 'confirm' ? this._onConfirm : this._onCancel)?.();\n this._visible = false;\n }\n\n protected _renderSelf(screen: Screen): void {\n if (!this._visible) return;\n const { x, y, width, height } = this._rect;\n const attrs = styleToCellAttrs(this.style);\n for (let r = 0; r < height; r++) screen.writeString(x, y + r, '░'.repeat(width), { ...attrs, dim: true });\n const bw = Math.min(40, width - 4);\n const bh = 5;\n const bx = x + Math.floor((width - bw) / 2);\n const by = y + Math.floor((height - bh) / 2);\n const border = getBorderChars('single');\n if (!border) return;\n const ba = { ...attrs, fg: this._borderColor };\n screen.writeString(bx, by, border.topLeft + border.top.repeat(bw - 2) + border.topRight, ba);\n for (let r = 1; r < bh - 1; r++) {\n screen.writeString(bx, by + r, border.left, ba);\n screen.writeString(bx + 1, by + r, ' '.repeat(bw - 2), attrs);\n screen.writeString(bx + bw - 1, by + r, border.right, ba);\n }\n screen.writeString(bx, by + bh - 1, border.bottomLeft + border.bottom.repeat(bw - 2) + border.bottomRight, ba);\n screen.writeString(bx + 2, by + 1, this._message.slice(0, bw - 4), { ...attrs, bold: true });\n const yesStr = this._selected === 'confirm' ? ` [${this._confirmLabel}] ` : ` ${this._confirmLabel} `;\n const noStr = this._selected === 'cancel' ? ` [${this._cancelLabel}] ` : ` ${this._cancelLabel} `;\n screen.writeString(bx + 2, by + 3, yesStr, { ...attrs, fg: this._selected === 'confirm' ? { type: 'named', name: 'green' } : attrs.fg, bold: this._selected === 'confirm' });\n screen.writeString(bx + 2 + yesStr.length + 2, by + 3, noStr, { ...attrs, fg: this._selected === 'cancel' ? { type: 'named', name: 'red' } : attrs.fg, bold: this._selected === 'cancel' });\n }\n}\n","// Form — compound input container with validation\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs } from '@termuijs/core';\n\nexport interface FormField {\n name: string; label: string; type: 'text' | 'select' | 'checkbox';\n placeholder?: string; required?: boolean; options?: string[];\n validate?: (value: string) => string | null;\n}\nexport interface FormOptions {\n labelColor?: Style['fg']; errorColor?: Style['fg']; activeColor?: Style['fg'];\n onSubmit?: (values: Record<string, string>) => void;\n}\n\nexport class Form extends Widget {\n private _fields: FormField[];\n private _values: Map<string, string> = new Map();\n private _errors: Map<string, string> = new Map();\n private _activeField = 0;\n private _cursorPos = 0;\n private _labelColor: Style['fg'];\n private _errorColor: Style['fg'];\n private _activeColor: Style['fg'];\n private _onSubmit?: (values: Record<string, string>) => void;\n focusable = true;\n\n constructor(fields: FormField[], options: FormOptions = {}) {\n super(mergeStyles(defaultStyle(), { height: fields.length * 2 + 1, flexGrow: 1 }));\n this._fields = fields;\n this._labelColor = options.labelColor ?? { type: 'named', name: 'cyan' };\n this._errorColor = options.errorColor ?? { type: 'named', name: 'red' };\n this._activeColor = options.activeColor ?? { type: 'named', name: 'cyan' };\n this._onSubmit = options.onSubmit;\n for (const f of fields) this._values.set(f.name, '');\n }\n\n get values(): Record<string, string> { const r: Record<string, string> = {}; for (const [k, v] of this._values) r[k] = v; return r; }\n nextField(): void { if (this._activeField < this._fields.length) { this._activeField++; this._cursorPos = 0; } }\n prevField(): void { if (this._activeField > 0) { this._activeField--; this._cursorPos = (this._values.get(this._fields[this._activeField].name) ?? '').length; } }\n insertChar(ch: string): void {\n if (this._activeField >= this._fields.length) return;\n const f = this._fields[this._activeField]; const cur = this._values.get(f.name) ?? '';\n this._values.set(f.name, cur.slice(0, this._cursorPos) + ch + cur.slice(this._cursorPos));\n this._cursorPos++; this._errors.delete(f.name);\n }\n deleteBack(): void {\n if (this._activeField >= this._fields.length) return;\n const f = this._fields[this._activeField]; const cur = this._values.get(f.name) ?? '';\n if (this._cursorPos > 0) { this._values.set(f.name, cur.slice(0, this._cursorPos - 1) + cur.slice(this._cursorPos)); this._cursorPos--; }\n }\n submit(): void {\n this._errors.clear(); let hasErr = false;\n for (const f of this._fields) {\n const v = this._values.get(f.name) ?? '';\n if (f.required && !v.trim()) { this._errors.set(f.name, `${f.label} is required`); hasErr = true; }\n if (f.validate) { const e = f.validate(v); if (e) { this._errors.set(f.name, e); hasErr = true; } }\n }\n if (!hasErr) this._onSubmit?.(this.values);\n }\n\n protected _renderSelf(screen: Screen): void {\n const { x, y, width, height } = this._rect;\n if (width <= 0 || height <= 0) return;\n const attrs = styleToCellAttrs(this.style);\n let row = 0;\n for (let i = 0; i < this._fields.length && row < height - 1; i++) {\n const f = this._fields[i]; const active = i === this._activeField;\n const val = this._values.get(f.name) ?? ''; const err = this._errors.get(f.name);\n screen.writeString(x, y + row, `${f.label}${f.required ? ' *' : ''}:`.slice(0, width), { ...attrs, fg: err ? this._errorColor : this._labelColor, bold: active }); row++;\n if (row >= height) break;\n const display = val || (f.placeholder ?? '');\n screen.writeString(x, y + row, `${active ? '❯ ' : ' '}${display}`.slice(0, width), { ...attrs, fg: active ? this._activeColor : attrs.fg, dim: !val && !!f.placeholder }); row++;\n }\n if (row < height) {\n const isSub = this._activeField >= this._fields.length;\n screen.writeString(x, y + row, isSub ? ' [ Submit ]' : ' Submit ', { ...attrs, fg: isSub ? { type: 'named', name: 'green' } : attrs.fg, bold: isSub });\n }\n }\n}\n","// CommandPalette — fuzzy-search command launcher\nimport { Widget } from '@termuijs/widgets';\nimport { type Style, type Screen, mergeStyles, defaultStyle, styleToCellAttrs, getBorderChars } from '@termuijs/core';\n\nexport interface Command { id: string; label: string; shortcut?: string; action: () => void; category?: string; }\nexport interface CommandPaletteOptions { placeholder?: string; borderColor?: Style['fg']; activeColor?: Style['fg']; maxVisible?: number; }\n\nexport class CommandPalette extends Widget {\n private _commands: Command[];\n private _filtered: Command[] = [];\n private _query = '';\n private _cursorPos = 0;\n private _selectedIndex = 0;\n private _visible = false;\n private _placeholder: string;\n private _borderColor: Style['fg'];\n private _activeColor: Style['fg'];\n private _maxVisible: number;\n focusable = true;\n\n constructor(commands: Command[], options: CommandPaletteOptions = {}) {\n super(mergeStyles(defaultStyle(), {}));\n this._commands = commands;\n this._filtered = [...commands];\n this._placeholder = options.placeholder ?? 'Type a command...';\n this._borderColor = options.borderColor ?? { type: 'named', name: 'cyan' };\n this._activeColor = options.activeColor ?? { type: 'named', name: 'cyan' };\n this._maxVisible = options.maxVisible ?? 10;\n }\n\n get visible(): boolean { return this._visible; }\n show(): void { this._visible = true; this._query = ''; this._cursorPos = 0; this._selectedIndex = 0; this._filtered = [...this._commands]; }\n hide(): void { this._visible = false; }\n toggle(): void { this._visible ? this.hide() : this.show(); }\n insertChar(ch: string): void { this._query = this._query.slice(0, this._cursorPos) + ch + this._query.slice(this._cursorPos); this._cursorPos++; this._filter(); }\n deleteBack(): void { if (this._cursorPos > 0) { this._query = this._query.slice(0, this._cursorPos - 1) + this._query.slice(this._cursorPos); this._cursorPos--; this._filter(); } }\n selectNext(): void { if (this._selectedIndex < this._filtered.length - 1) this._selectedIndex++; }\n selectPrev(): void { if (this._selectedIndex > 0) this._selectedIndex--; }\n confirm(): void { const c = this._filtered[this._selectedIndex]; if (c) { this.hide(); c.action(); } }\n\n private _filter(): void {\n const q = this._query.toLowerCase();\n if (!q) { this._filtered = [...this._commands]; } else {\n this._filtered = this._commands.filter(c => { const l = c.label.toLowerCase(); let qi = 0; for (let i = 0; i < l.length && qi < q.length; i++) { if (l[i] === q[qi]) qi++; } return qi === q.length; });\n }\n this._selectedIndex = 0;\n }\n\n protected _renderSelf(screen: Screen): void {\n if (!this._visible) return;\n const { x, y, width, height } = this._rect;\n const attrs = styleToCellAttrs(this.style);\n // Backdrop\n for (let r = 0; r < height; r++) screen.writeString(x, y + r, '░'.repeat(width), { ...attrs, dim: true });\n // Box\n const vis = this._filtered.slice(0, this._maxVisible);\n const bw = Math.min(60, width - 4);\n const bh = Math.min(vis.length + 3, height - 2);\n const bx = x + Math.floor((width - bw) / 2);\n const by = y + 2;\n const border = getBorderChars('single');\n if (!border) return;\n const ba = { ...attrs, fg: this._borderColor };\n // Top\n screen.writeString(bx, by, border.topLeft + border.top.repeat(bw - 2) + border.topRight, ba);\n // Input row\n screen.writeString(bx, by + 1, border.left, ba);\n const input = this._query || this._placeholder;\n screen.writeString(bx + 1, by + 1, (' 🔍 ' + input).slice(0, bw - 2).padEnd(bw - 2), { ...attrs, dim: !this._query });\n screen.writeString(bx + bw - 1, by + 1, border.right, ba);\n // Separator\n screen.writeString(bx, by + 2, border.left + '─'.repeat(bw - 2) + border.right, ba);\n // Items\n for (let i = 0; i < vis.length && i + 3 < bh - 1; i++) {\n const c = vis[i]; const active = i === this._selectedIndex;\n const label = (active ? '❯ ' : ' ') + c.label;\n const sc = c.shortcut ?? '';\n screen.writeString(bx, by + 3 + i, border.left, ba);\n screen.writeString(bx + 1, by + 3 + i, (' ' + label).slice(0, bw - sc.length - 3).padEnd(bw - sc.length - 3), { ...attrs, fg: active ? this._activeColor : attrs.fg, bold: active });\n if (sc) screen.writeString(bx + bw - sc.length - 2, by + 3 + i, sc, { ...attrs, dim: true });\n screen.writeString(bx + bw - 1, by + 3 + i, border.right, ba);\n }\n // Bottom\n const last = Math.min(by + 3 + vis.length, by + bh - 1);\n screen.writeString(bx, last, border.bottomLeft + border.bottom.repeat(bw - 2) + border.bottomRight, ba);\n }\n}\n"],"mappings":"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","names":["Widget","Widget","mergeStyles","defaultStyle","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","getBorderChars","Widget","mergeStyles","defaultStyle","styleToCellAttrs","Widget","mergeStyles","defaultStyle","styleToCellAttrs","getBorderChars"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@termuijs/ui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Rich component library for TermUI — Modal, Tabs, Select, Form, Toast, and more",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@termuijs/core": "0.1.0",
|
|
24
|
+
"@termuijs/widgets": "0.1.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"tsup": "^8.0.0",
|
|
28
|
+
"typescript": "^5.4.0"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"terminal",
|
|
32
|
+
"tui",
|
|
33
|
+
"cli",
|
|
34
|
+
"ui",
|
|
35
|
+
"modal",
|
|
36
|
+
"select",
|
|
37
|
+
"form",
|
|
38
|
+
"toast"
|
|
39
|
+
],
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsup",
|
|
43
|
+
"dev": "tsup --watch"
|
|
44
|
+
}
|
|
45
|
+
}
|