{"_id":"@anvil-and-loom/the-weave-react","name":"@anvil-and-loom/the-weave-react","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@anvil-and-loom/the-weave-react","version":"1.0.0","description":"React components and hooks for The Weave random table generator","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","dev":"tsc --watch"},"dependencies":{"@anvil-and-loom/the-weave-core":"^1.0.0","uuid":"^13.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@types/react":"^19.2.5","@types/react-dom":"^19.2.3","typescript":"~5.9.3"},"keywords":["random-table","ttrpg","tabletop","dice","react"],"license":"MIT","gitHead":"efc0c960a49d46df434b69afd34c84db43f4791d","_id":"@anvil-and-loom/the-weave-react@1.0.0","_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-YoQhpxc7GqcHHM3I2vMwOa6PiZMQvcAWN1zFk/0MEi7xpwsWw0XtCEH4EAAsIxJ7NHSsBBtwHhzDuxzlkTpUDA==","shasum":"46c057c1fac95b60e452cee809eb2100fa88a666","tarball":"https://registry.npmjs.org/@anvil-and-loom/the-weave-react/-/the-weave-react-1.0.0.tgz","fileCount":18,"unpackedSize":33650,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDTnZPFEv699SLQ8cSHwvzJbDbI1ANfD0ob6/xTBWyLiAiEAzWUiO3bBso+6hExtBJ2IVe5gZxyfnxKZ34A+EA2Bw1E="}]},"_npmUser":{"name":"tguiles","email":"t.guiles@gmail.com"},"directories":{},"maintainers":[{"name":"tguiles","email":"t.guiles@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/the-weave-react_1.0.0_1768685779786_0.19256494209307906"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-17T21:36:19.635Z","1.0.0":"2026-01-17T21:36:19.945Z","modified":"2026-01-17T21:36:20.239Z"},"maintainers":[{"name":"tguiles","email":"t.guiles@gmail.com"}],"description":"React components and hooks for The Weave random table generator","keywords":["random-table","ttrpg","tabletop","dice","react"],"license":"MIT","readme":"# @the-weave/react\r\n\r\nReact components and hooks for The Weave random table generator.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @the-weave/react @the-weave/core\r\n```\r\n\r\n## Usage\r\n\r\n### Provider Setup\r\n\r\n```tsx\r\nimport { WeaveProvider } from '@the-weave/react';\r\nimport { WeaveEngine } from '@the-weave/core';\r\n\r\nconst engine = new WeaveEngine();\r\nengine.loadTables([/* your tables */]);\r\n\r\nfunction App() {\r\n  return (\r\n    <WeaveProvider engine={engine}>\r\n      <MyComponent />\r\n    </WeaveProvider>\r\n  );\r\n}\r\n```\r\n\r\n### Hooks\r\n\r\n```tsx\r\nimport { useWeave, useTable, useTables, useTags, useRoll } from '@the-weave/react';\r\n\r\nfunction MyComponent() {\r\n  // Access the engine directly\r\n  const engine = useWeave();\r\n\r\n  // Get a specific table\r\n  const table = useTable('encounters');\r\n\r\n  // Get all tables (optionally filtered)\r\n  const allTables = useTables();\r\n  const filtered = useTables({ tag: 'monster' });\r\n\r\n  // Get all tags\r\n  const tags = useTags();\r\n\r\n  // Roll on a table\r\n  const { roll, lastResult } = useRoll('encounters');\r\n\r\n  return (\r\n    <div>\r\n      <h1>{table?.name}</h1>\r\n      <button onClick={() => roll()}>Roll!</button>\r\n      <p>{lastResult?.result}</p>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n### Import Dialog\r\n\r\n```tsx\r\nimport { WeaveImportDialog } from '@the-weave/react';\r\nimport '@the-weave/react/dist/components/WeaveImportDialog.css';\r\n\r\nfunction ImportButton() {\r\n  const engine = useWeave();\r\n  const [showImport, setShowImport] = useState(false);\r\n\r\n  return (\r\n    <>\r\n      <button onClick={() => setShowImport(true)}>Import Table</button>\r\n      \r\n      {showImport && (\r\n        <WeaveImportDialog\r\n          onImport={(table) => {\r\n            engine.saveTable(table);\r\n            setShowImport(false);\r\n          }}\r\n          onCancel={() => setShowImport(false)}\r\n        />\r\n      )}\r\n    </>\r\n  );\r\n}\r\n```\r\n\r\n## Components\r\n\r\n| Component | Description |\r\n|-----------|-------------|\r\n| `WeaveProvider` | Context provider for the engine |\r\n| `WeaveImportDialog` | Import tables from text/file |\r\n\r\n## Hooks\r\n\r\n| Hook | Returns | Description |\r\n|------|---------|-------------|\r\n| `useWeave()` | `WeaveEngine` | Access engine instance |\r\n| `useTable(idOrTag)` | `Table \\| undefined` | Get single table |\r\n| `useTables(filter?)` | `Table[]` | Get all tables |\r\n| `useTableInfo(idOrTag)` | `TableInfo \\| undefined` | Get table metadata |\r\n| `useTags()` | `string[]` | Get all unique tags |\r\n| `useRoll(idOrTag)` | `{ roll, lastResult }` | Roll on a table |\r\n\r\n## CSS Theming\r\n\r\nThe components use CSS variables for theming:\r\n\r\n```css\r\n:root {\r\n  --weave-dialog-bg: #1e1e1e;\r\n  --weave-dialog-text: #ffffff;\r\n  --weave-dialog-border: #444444;\r\n  --weave-dialog-primary: #4a9eff;\r\n  --weave-dialog-error: #ff4a4a;\r\n}\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md","_rev":"1-a655e471bebc15691bcccc6ee080ca07"}