{"_id":"@author-today-tools/tui","_rev":"3-52ad5d37aa9a3fe5510f6a49d9cfe453","name":"@author-today-tools/tui","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@author-today-tools/tui","version":"0.1.0","keywords":["author-today","tui","terminal","interactive","ink","react"],"license":"MIT","_id":"@author-today-tools/tui@0.1.0","maintainers":[{"name":"maderwin","email":"az@maderwin.com"}],"bin":{"at-ui":"dist/cli.mjs","at-tui":"dist/cli.mjs"},"dist":{"shasum":"4ade738fb968d828ec3b2c7fb65b11efd9170dc2","tarball":"https://registry.npmjs.org/@author-today-tools/tui/-/tui-0.1.0.tgz","fileCount":10,"integrity":"sha512-+qZjYjFYM7dKzYCwU2uJ4qtnjrwgUT1GFrZw+c7q7vMGEdtbv5l80mGox/KeqvIb1M9QClcpvQtEThoegJQk+g==","signatures":[{"sig":"MEYCIQCe4+wmA/EShx7iJejA1VEmqB+PRHwCYyRamxcHQ3r9pQIhAI/ApC1eV/NLIRA1tpuQQA5UiYX1saoXg7WicmRkCeb6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288752},"main":"./dist/index.mjs","type":"module","_from":"file:author-today-tools-tui-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"scripts":{"dev":"pkgroll --watch","test":"vitest run","build":"pkgroll","clean":"rm -rf dist *.tsbuildinfo","test:watch":"vitest","type-check":"tsc --project tsconfig.typecheck.json --noEmit"},"_npmUser":{"name":"maderwin","email":"az@maderwin.com"},"_resolved":"/private/var/folders/7c/0_nm12_90g14x2s1lq4jvb3h0000gn/T/65918916c6d1aaf5494c3855dc36213b/author-today-tools-tui-0.1.0.tgz","_integrity":"sha512-+qZjYjFYM7dKzYCwU2uJ4qtnjrwgUT1GFrZw+c7q7vMGEdtbv5l80mGox/KeqvIb1M9QClcpvQtEThoegJQk+g==","_npmVersion":"11.6.2","description":"Terminal User Interface for Author.Today platform","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ink":"^5.2.0","mobx":"^6.15.0","react":"^18.3.1","date-fns":"^4.1.0","commander":"^12.1.0","ya-signals":"^1.0.1","ink-spinner":"^5.0.0","mobx-react-lite":"^4.1.1","@author-today-tools/api":"0.1.0","@author-today-tools/cli-core":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","pkgroll":"^2.23.0","typescript":"^5.8.3","@types/node":"^24.0.0","@vitest/coverage-v8":"^4.0.18","ink-testing-library":"^4.0.0","@testing-library/react":"^16.3.2"},"peerDependencies":{"@types/react":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.1.0_1770206375047_0.6605079271466558","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@author-today-tools/tui","version":"0.1.2","keywords":["author-today","tui","terminal","interactive","ink","react"],"license":"MIT","_id":"@author-today-tools/tui@0.1.2","maintainers":[{"name":"maderwin","email":"az@maderwin.com"}],"homepage":"https://github.com/maderwin/author-today-tools#readme","bugs":{"url":"https://github.com/maderwin/author-today-tools/issues"},"bin":{"at-ui":"dist/cli.mjs","at-tui":"dist/cli.mjs"},"dist":{"shasum":"6cfbdf22538c11ee7c2fafe69c608035fb70257e","tarball":"https://registry.npmjs.org/@author-today-tools/tui/-/tui-0.1.2.tgz","fileCount":8,"integrity":"sha512-aBWPz7DJQg7lQrfzkHHJz5qkBNlnGtjsA1PVE+lDnMRJsYI7XMTiT2T7zap/7/HDlXUEGQDuoJmVdvLq81O67w==","signatures":[{"sig":"MEQCIGkybolS9/3tCElJVKrmIkFLU4NEOnERpvTcXgyJs/XiAiAShNFCfhIddulS6RzpuMLgGiFWumMvUBmmAE57cKB3pA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170765},"main":"./dist/index.mjs","type":"module","_from":"file:author-today-tools-tui-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"scripts":{"dev":"pkgroll --watch","test":"vitest run","build":"pkgroll","clean":"rm -rf dist *.tsbuildinfo","test:watch":"vitest","type-check":"tsc --project tsconfig.typecheck.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:aa5ce6db-0a17-4c34-b850-c7132612e88b"}},"_resolved":"/tmp/4c0823522224f4e837bb64e6c51bd179/author-today-tools-tui-0.1.2.tgz","_integrity":"sha512-aBWPz7DJQg7lQrfzkHHJz5qkBNlnGtjsA1PVE+lDnMRJsYI7XMTiT2T7zap/7/HDlXUEGQDuoJmVdvLq81O67w==","repository":{"url":"git+ssh://git@github.com/maderwin/author-today-tools.git","type":"git"},"_npmVersion":"11.6.2","description":"Terminal User Interface for Author.Today platform","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ink":"^5.2.0","mobx":"^6.15.0","react":"^18.3.1","date-fns":"^4.1.0","commander":"^14.0.3","ya-signals":"^1.0.1","ink-spinner":"^5.0.0","mobx-react-lite":"^4.1.1","@author-today-tools/api":"^0.1.0","@author-today-tools/cli-core":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","pkgroll":"^2.23.0","typescript":"^5.8.3","@types/node":"^24.0.0","@vitest/coverage-v8":"^4.0.18","ink-testing-library":"^4.0.0","@testing-library/react":"^16.3.2"},"peerDependencies":{"@types/react":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.1.2_1770220877527_0.8081406686045971","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@author-today-tools/tui","version":"0.1.3","description":"Terminal User Interface for Author.Today platform","repository":{"type":"git","url":"git+ssh://git@github.com/maderwin/author-today-tools.git"},"type":"module","bin":{"at-tui":"dist/cli.mjs","at-ui":"dist/cli.mjs"},"main":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"publishConfig":{"access":"public"},"keywords":["author-today","tui","terminal","interactive","ink","react"],"license":"MIT","dependencies":{"commander":"^14.0.3","date-fns":"^4.1.0","ink":"^5.2.0","ink-spinner":"^5.0.0","mobx":"^6.15.0","mobx-react-lite":"^4.1.1","react":"^18.3.1","ya-signals":"^1.0.1","@author-today-tools/api":"^0.1.1","@author-today-tools/cli-core":"^0.1.3"},"peerDependencies":{"@types/react":"^18.0.0"},"devDependencies":{"@testing-library/react":"^16.3.2","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.18","ink-testing-library":"^4.0.0","pkgroll":"^2.23.0","typescript":"^5.8.3","vitest":"^4.0.18"},"engines":{"node":">=22.0.0"},"scripts":{"build":"pkgroll","dev":"pkgroll --watch","test":"vitest run","test:watch":"vitest","type-check":"tsc --project tsconfig.typecheck.json --noEmit","clean":"rm -rf dist *.tsbuildinfo"},"_id":"@author-today-tools/tui@0.1.3","bugs":{"url":"https://github.com/maderwin/author-today-tools/issues"},"homepage":"https://github.com/maderwin/author-today-tools#readme","_integrity":"sha512-rCOwEUjPS3x1V+sR8l01OkK35KPtgPZok/DLnpOi6bWFGY3nwYsyG2Ctl44Y6BcgLYftj3ur6V0bAldOi2+b4w==","_resolved":"/tmp/abacb30ea14ab3a1dda2e4186a015ccd/author-today-tools-tui-0.1.3.tgz","_from":"file:author-today-tools-tui-0.1.3.tgz","_nodeVersion":"22.21.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-rCOwEUjPS3x1V+sR8l01OkK35KPtgPZok/DLnpOi6bWFGY3nwYsyG2Ctl44Y6BcgLYftj3ur6V0bAldOi2+b4w==","shasum":"c99f75434f263426487ecc5c6ac4f0b2fbb1ecf8","tarball":"https://registry.npmjs.org/@author-today-tools/tui/-/tui-0.1.3.tgz","fileCount":8,"unpackedSize":170779,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC2DeQiKBlwgtnU+1KVNKOMsdXGJwVQ2SUfoVn6ydkG0QIgTc33x10hVW20zEROWFcovtYtWYNWrAVy59GG5rsGX8Y="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:aa5ce6db-0a17-4c34-b850-c7132612e88b"}},"directories":{},"maintainers":[{"name":"maderwin","email":"az@maderwin.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tui_0.1.3_1770286264557_0.09613815608436527"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-04T11:59:34.922Z","modified":"2026-02-05T10:11:04.821Z","0.1.0":"2026-02-04T11:59:35.236Z","0.1.2":"2026-02-04T16:01:17.670Z","0.1.3":"2026-02-05T10:11:04.699Z"},"bugs":{"url":"https://github.com/maderwin/author-today-tools/issues"},"license":"MIT","homepage":"https://github.com/maderwin/author-today-tools#readme","keywords":["author-today","tui","terminal","interactive","ink","react"],"repository":{"type":"git","url":"git+ssh://git@github.com/maderwin/author-today-tools.git"},"description":"Terminal User Interface for Author.Today platform","maintainers":[{"name":"maderwin","email":"az@maderwin.com"}],"readme":"# @author-today-tools/tui\n\nTerminal User Interface for the Author.Today publishing platform. An interactive, React-based terminal application built with [Ink](https://github.com/vadimdemedes/ink).\n\n## Overview\n\nThe TUI provides a rich, interactive terminal interface for browsing and managing content on Author.Today:\n\n- **Dashboard** - Overview of library, notifications, and reading progress\n- **Library Browser** - Navigate your saved works with filtering and sorting\n- **Works Manager** - View work details, chapters, and statistics\n- **Keyboard Shortcuts** - Efficient navigation with customizable keybindings\n- **Multi-window Support** - Task-based window management\n\n## Installation\n\n```bash\n# From npm (when published)\nnpm install -g @author-today-tools/tui\n\n# Or with pnpm\npnpm add -g @author-today-tools/tui\n```\n\n## Usage\n\n### Basic Commands\n\n```bash\n# Launch TUI (default: dashboard view)\nat-tui\n\n# Launch with specific view\nat-tui --mode=library\nat-tui --mode=works\nat-tui --mode=dashboard\n\n# Use specific profile\nat-tui --profile=work\n```\n\n### From Workspace\n\n```bash\n# Launch TUI from monorepo root\npnpm tui\n\n# With options\npnpm tui -- --mode=library\n```\n\n### Authentication\n\nBefore using the TUI, authenticate using the CLI:\n\n```bash\n# Browser-based authentication (recommended)\nat-cli auth login-browser\n\n# Or email/password\nat-cli auth login user@example.com\n```\n\nThe TUI uses the same authentication as the CLI (shared via [@author-today-tools/cli-core](../cli-core)).\n\n## Features\n\n### Dashboard View\n\n- **Library Overview** - Total works and recent additions\n- **Notifications** - Unread notification count\n- **Reading Progress** - Continue reading from where you left off\n- **Quick Actions** - Navigate to library, works, or settings\n\n### Library Browser\n\n- **Work Cards** - Cover images, titles, authors, and metadata\n- **Filtering** - By genre, status, and tags\n- **Sorting** - By title, author, date added, or last read\n- **Search** - Quick search across your library\n- **Details View** - Expand work for full description and chapters\n\n### Works Manager\n\n- **Work Details** - Title, author, description, tags, and statistics\n- **Chapter List** - Browse and navigate chapters\n- **Actions** - Like, bookmark, download\n- **Statistics** - Views, likes, comments\n\n### Keyboard Shortcuts\n\nDefault keybindings (customizable):\n\n- `q` - Quit application\n- `Tab` - Switch views\n- `?` - Show shortcuts help\n- `↑/↓` - Navigate lists\n- `Enter` - Select/activate\n- `Esc` - Go back/cancel\n- `/` - Search/filter\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build\npnpm --filter @author-today-tools/tui build\n\n# Development mode (watch)\npnpm --filter @author-today-tools/tui dev\n\n# Run tests\npnpm --filter @author-today-tools/tui test\n\n# Type check\npnpm --filter @author-today-tools/tui type-check\n```\n\n## Architecture\n\n### Component Structure\n\n```\nsrc/\n├── ui/                  # React components\n│   ├── App.tsx         # Main app component\n│   ├── Dashboard.tsx   # Dashboard view\n│   ├── Library.tsx     # Library browser\n│   ├── Works.tsx       # Works manager\n│   ├── components/     # Reusable UI components\n│   │   ├── Button.tsx\n│   │   ├── Card.tsx\n│   │   ├── Menu.tsx\n│   │   ├── Table.tsx\n│   │   ├── chrome/    # Window chrome (MenuBar, StatusBar, etc.)\n│   │   ├── forms/     # Form components\n│   │   ├── feedback/  # Alerts, modals, toasts\n│   │   └── layout/    # Layout components\n│   └── contexts/       # React contexts\n│       ├── KeyboardShortcutsContext.tsx\n│       └── WindowContext.tsx\n├── tasks/              # Task service for background operations\n│   ├── TaskService.ts\n│   └── types.ts\n└── cli.ts             # Entry point (Commander.js)\n```\n\n### Technology Stack\n\n- **UI Framework**: [Ink 5.2.0](https://github.com/vadimdemedes/ink) - React for terminal\n- **State Management**: [MobX 6.15.0](https://mobx.js.org/) - Reactive state management\n- **Keyboard Handling**: [ya-signals 1.0.1](https://github.com/preactjs/signals) - Signal-based keyboard shortcuts\n- **CLI Parser**: [Commander.js 12.1.0](https://github.com/tj/commander.js) - Command-line argument parsing\n- **Shared Core**: [@author-today-tools/cli-core](../cli-core) - Config, credentials, API client\n- **API Client**: [@author-today-tools/api](../api) - Author.Today API wrapper\n\n### Component Library\n\nThe TUI includes a comprehensive component library built on Ink:\n\n**Basic Components:**\n\n- Button, Card, Input, Menu, Modal, Spinner, Table, Tabs\n\n**Advanced Components:**\n\n- DataGrid, EnhancedMenu, EnhancedTable, VirtualList, ContextMenu\n\n**Forms:**\n\n- Checkbox, Form, Radio, Select, TextArea with validation\n\n**Feedback:**\n\n- Alert, Badge, Modal, ProgressBar, Toast\n\n**Chrome:**\n\n- MenuBar, StatusBar, TaskBar, TitleBar\n\n**Layout:**\n\n- Layout, Panel, Splitter for complex layouts\n\nAll components are exported and can be used to build custom TUI applications.\n\n## Programmatic Usage\n\n```typescript\nimport { render } from 'ink';\nimport React from 'react';\nimport { App } from '@author-today-tools/tui';\nimport { createApiClient } from '@author-today-tools/cli-core';\n\n// Create authenticated API client\nconst client = await createApiClient();\n\n// Render TUI\nconst { waitUntilExit } = render(\n  React.createElement(App, {\n    client,\n    initialView: 'dashboard',\n  }),\n);\n\n// Wait for user to exit\nawait waitUntilExit();\n```\n\n## Testing\n\n```bash\n# Run all tests\npnpm test\n\n# Watch mode\npnpm test:watch\n\n# Coverage\npnpm test -- --coverage\n```\n\nTests use [ink-testing-library](https://github.com/vadimdemedes/ink-testing-library) for component testing.\n\n## License\n\nMIT © Artyom Zakharov\n\n## Links\n\n- [CLI Package](../cli) - Command-line interface\n- [CLI Core Package](../cli-core) - Shared utilities\n- [API Package](../api) - API client\n- [Ink Documentation](https://github.com/vadimdemedes/ink)\n- [Author.Today](https://author.today)\n","readmeFilename":"README.md"}