{"_id":"@arqueosfera/smart-ui-components","_rev":"6-c1ebe4a232e63e1d1c5271e091bde02a","name":"@arqueosfera/smart-ui-components","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@arqueosfera/smart-ui-components","version":"1.0.0","keywords":["react","ui","datagrid","pagination","typescript","components"],"license":"MIT","_id":"@arqueosfera/smart-ui-components@1.0.0","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"dist":{"shasum":"8a79576a1eb12586696332164720aa6c0027daad","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.0.0.tgz","fileCount":31,"integrity":"sha512-d1ZE6L16G741a3IWUd7HS6tDbRuyepQZF683pI+f8tt0vYIghXyhueJlf8MzxQc2V2cPH08M97nzDgZDuEs1eA==","signatures":[{"sig":"MEQCIDqG8STeF590fPdq6RHm7JU2bdic2BVQ9MBPa1ABZjyiAiBrhLazAQf/sXZ6HQo7CL/hx45dYnEGO4Wt7rjL9maYFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43178},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2c32a323e63dfc08cd0e6e1cbe548c9b114d1bc8","scripts":{"lint":"eslint src --ext .ts,.tsx --max-warnings 0","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"husky","quality":"npm run type-check && npm run lint:check && npm run test:coverage","release":"semantic-release","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","test:watch":"vitest","type-check":"tsc -p tsconfig.json --noEmit","publish:local":"npm publish --access public --registry https://registry.npmjs.org","test:coverage":"vitest run --coverage","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"},"repository":{"url":"git+https://github.com/rtsarakaki/smart-ui-components.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable React UI controls — DataGrid with native sort, pagination, and row actions","directories":{},"_nodeVersion":"23.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","eslint":"^9.33.0","vitest":"^3.0.8","react-dom":"^19.0.0","typescript":"^5.8.2","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","semantic-release":"^25.0.8","@vitest/coverage-v8":"^3.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@testing-library/react":"^16.2.0","@semantic-release/github":"^11.0.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.39.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.39.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smart-ui-components_1.0.0_1786049302324_0.25028558429946424","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arqueosfera/smart-ui-components","version":"1.0.1","keywords":["react","ui","datagrid","pagination","typescript","components"],"license":"MIT","_id":"@arqueosfera/smart-ui-components@1.0.1","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"dist":{"shasum":"af34ce0a07eba2b67d7d92b50daead097c8c1e51","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.0.1.tgz","fileCount":31,"integrity":"sha512-UklGMJf9Hz5CWahUCrULIRwYH5tXHfm0QY8ENx+Z7mIPIohotgFWVv/O9HtMm1veuk2abesVcabV11wxwCinLQ==","signatures":[{"sig":"MEQCIA3nsWuaLu76EsXoWaPpaR1BMSUarqX3Nv2fBIwFRqr1AiBJ8Gkeb8dmDIwESrJWMoEz6qb2wf38zhvnrYdvG/Xx1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43178},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2c32a323e63dfc08cd0e6e1cbe548c9b114d1bc8","scripts":{"lint":"eslint src --ext .ts,.tsx --max-warnings 0","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"husky","quality":"npm run type-check && npm run lint:check && npm run test:coverage","release":"semantic-release","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","test:watch":"vitest","type-check":"tsc -p tsconfig.json --noEmit","publish:local":"npm publish --access public --registry https://registry.npmjs.org","test:coverage":"vitest run --coverage","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"},"repository":{"url":"git+https://github.com/rtsarakaki/smart-ui-components.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable React UI controls — DataGrid with native sort, pagination, and row actions","directories":{},"_nodeVersion":"23.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","eslint":"^9.33.0","vitest":"^3.0.8","react-dom":"^19.0.0","typescript":"^5.8.2","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","semantic-release":"^25.0.8","@vitest/coverage-v8":"^3.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@testing-library/react":"^16.2.0","@semantic-release/github":"^11.0.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.39.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.39.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smart-ui-components_1.0.1_1786049453195_0.8223274524775146","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@arqueosfera/smart-ui-components","version":"1.0.3","keywords":["react","ui","datagrid","pagination","typescript","components"],"license":"MIT","_id":"@arqueosfera/smart-ui-components@1.0.3","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"dist":{"shasum":"f3febc3c04c2bb5923959cddb73422bb4f0da695","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.0.3.tgz","fileCount":35,"integrity":"sha512-KMPyJRJxSGjHc/JAwuWVVe1OY++MR7s6+AZrzeSdTCeRIVja3D3HXd8dJi6OP7eJqCBO8FTOEx8aHCtPUDmCSA==","signatures":[{"sig":"MEUCIG92HJqBr94INJYiujM1exXENYtKI+k5OdQr6POHH91lAiEAsaj88vyZhBY0UmCf1S4nKJERCNsWXvSEnHsplKLpWj0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arqueosfera%2fsmart-ui-components@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"eb27401b75ccc8669d8f561a35d3817ef5765978","scripts":{"lint":"eslint src --ext .ts,.tsx --max-warnings 0","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"husky","quality":"npm run type-check && npm run lint:check && npm run test:coverage","release":"semantic-release","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","test:watch":"vitest","type-check":"tsc -p tsconfig.json --noEmit","publish:local":"npm publish --access public --registry https://registry.npmjs.org","test:coverage":"vitest run --coverage","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:745db9fd-a542-4418-a117-03a9dbbd3d12"}},"repository":{"url":"git+https://github.com/rtsarakaki/smart-ui-components.git","type":"git"},"_npmVersion":"12.0.2","description":"Reusable React UI controls — DataGrid with native sort, pagination, and row actions","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","eslint":"^9.33.0","vitest":"^3.0.8","react-dom":"^19.0.0","typescript":"^5.8.2","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","semantic-release":"^25.0.8","@vitest/coverage-v8":"^3.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@testing-library/react":"^16.2.0","@semantic-release/github":"^11.0.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.39.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.39.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smart-ui-components_1.0.3_1786053592982_0.7643080257792221","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@arqueosfera/smart-ui-components","version":"1.1.0","keywords":["react","ui","datagrid","picker","pagination","typescript","components"],"license":"MIT","_id":"@arqueosfera/smart-ui-components@1.1.0","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"dist":{"shasum":"8124668fb86e15a8c58a319aff03c3f225956e07","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.1.0.tgz","fileCount":43,"integrity":"sha512-SZpiOLXNveAUwUaL1dKWrMj0AhWAZAjL+erOOxYFJ1dCsBGK2cV/RFKhEGuTh/MdHl2ut+pVWwhcKoEi1wem1w==","signatures":[{"sig":"MEUCIQCfQMGY3jmMsc90sfbVyEHJaMx9iN/I4BjVoj2HVoRHkQIgEl0htojP6kGhCs4Wj0DuLZnEcI6P1IRD1b11XMKIN/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arqueosfera%2fsmart-ui-components@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":80569},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"43c70395b74aba6dc510dbefacfbf416f05951d1","scripts":{"lint":"eslint src --ext .ts,.tsx --max-warnings 0","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"husky","quality":"npm run type-check && npm run lint:check && npm run test:coverage","release":"semantic-release","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","test:watch":"vitest","type-check":"tsc -p tsconfig.json --noEmit","publish:local":"npm publish --access public --registry https://registry.npmjs.org","test:coverage":"vitest run --coverage","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:745db9fd-a542-4418-a117-03a9dbbd3d12"}},"repository":{"url":"git+https://github.com/rtsarakaki/smart-ui-components.git","type":"git"},"_npmVersion":"12.0.2","description":"Reusable React UI controls — DataGrid, DatasetPicker, and related list primitives","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","eslint":"^9.33.0","vitest":"^3.0.8","react-dom":"^19.0.0","typescript":"^5.8.2","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","semantic-release":"^25.0.8","@vitest/coverage-v8":"^3.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@testing-library/react":"^16.2.0","@semantic-release/github":"^11.0.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.39.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.39.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smart-ui-components_1.1.0_1786055603822_0.33327573029035173","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@arqueosfera/smart-ui-components","version":"1.2.0","keywords":["react","ui","datagrid","picker","markdown","pagination","typescript","components"],"license":"MIT","_id":"@arqueosfera/smart-ui-components@1.2.0","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"dist":{"shasum":"a8b8e10c5da06212b06da35d81f09b2321a3820f","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.2.0.tgz","fileCount":59,"integrity":"sha512-RmBwXQ3TLF5N8XNnSJKL9JdctJxaMrvcAmNNqRZnJ0+AFHaHmQloCFjC/4VLe0Tc9l7fJHS89MQurkuZ1W/NTg==","signatures":[{"sig":"MEUCIBBVprXZlzmfwoNYnhgFjzBfweKpQ3QsPZk9DEZyk+XvAiEAs0QDJlg/q+rSKrlH8GPtWIJpLuncPwhgE/Ukb2ccEFY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arqueosfera%2fsmart-ui-components@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":110117},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"56c17c2dbacbe05b02e8f585fd78cf2ae79f8ef0","scripts":{"lint":"eslint src --ext .ts,.tsx --max-warnings 0","test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"husky","quality":"npm run type-check && npm run lint:check && npm run test:coverage","release":"semantic-release","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","test:watch":"vitest","type-check":"tsc -p tsconfig.json --noEmit","publish:local":"npm publish --access public --registry https://registry.npmjs.org","test:coverage":"vitest run --coverage","release:dry-run":"semantic-release --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:745db9fd-a542-4418-a117-03a9dbbd3d12"}},"repository":{"url":"git+https://github.com/rtsarakaki/smart-ui-components.git","type":"git"},"_npmVersion":"12.0.2","description":"Reusable React UI controls — DataGrid, DatasetPicker, MarkdownEditor, and related primitives","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","eslint":"^9.33.0","vitest":"^3.0.8","react-dom":"^19.0.0","typescript":"^5.8.2","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","semantic-release":"^25.0.8","@vitest/coverage-v8":"^3.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@testing-library/react":"^16.2.0","@semantic-release/github":"^11.0.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.39.1","@semantic-release/changelog":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.39.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smart-ui-components_1.2.0_1786099041103_0.8263275840006556","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@arqueosfera/smart-ui-components","version":"1.2.1","description":"Reusable React UI controls — DataGrid, DatasetPicker, MarkdownEditor, and related primitives","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"prepare":"husky","build":"tsc -p tsconfig.build.json","type-check":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"eslint src --ext .ts,.tsx --max-warnings 0","lint:check":"eslint src --ext .ts,.tsx --max-warnings 0","quality":"npm run type-check && npm run lint:check && npm run test:coverage","publish:local":"npm publish --access public --registry https://registry.npmjs.org","release":"semantic-release","release:dry-run":"semantic-release --dry-run"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.0","@semantic-release/npm":"^13.1.5","@testing-library/jest-dom":"^6.6.3","@testing-library/react":"^16.2.0","@types/react":"^19.0.10","@types/react-dom":"^19.0.4","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/parser":"^8.39.1","@vitest/coverage-v8":"^3.0.8","eslint":"^9.33.0","husky":"^9.1.7","jsdom":"^26.0.0","react":"^19.0.0","react-dom":"^19.0.0","semantic-release":"^25.0.8","typescript":"^5.8.2","vitest":"^3.0.8"},"repository":{"type":"git","url":"git+https://github.com/rtsarakaki/smart-ui-components.git"},"publishConfig":{"access":"public"},"keywords":["react","ui","datagrid","picker","markdown","pagination","typescript","components"],"license":"MIT","engines":{"node":">=20.0.0"},"gitHead":"e08ccebd4bfb14f3112607bcf543ef9dfce18796","_id":"@arqueosfera/smart-ui-components@1.2.1","bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-ASrF2RJSiQzpSgIYXXQxGxEURWctwTHTr5WEdnhEbXuejYiBajuLgAfFEzTXUoPwNeCfdodKViHnq0rTuTFLag==","shasum":"de598d330200c7750c3b9ca4a3eb5faee31d4c2e","tarball":"https://registry.npmjs.org/@arqueosfera/smart-ui-components/-/smart-ui-components-1.2.1.tgz","fileCount":59,"unpackedSize":110794,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arqueosfera%2fsmart-ui-components@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDCn9YkwVK9oQ2pw9YrFZ9x4qhd3HrojutMZgJwFjsYYAIhALzW8BIZoQLmESffvXhcCyI+w/lO+eMbwH5ud/QtV5Gw"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:745db9fd-a542-4418-a117-03a9dbbd3d12"}},"directories":{},"maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/smart-ui-components_1.2.1_1786614991271_0.5557500378197104"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T20:48:22.156Z","modified":"2026-08-13T09:56:31.786Z","1.0.0":"2026-08-06T20:48:22.462Z","1.0.1":"2026-08-06T20:50:53.377Z","1.0.3":"2026-08-06T21:59:53.126Z","1.1.0":"2026-08-06T22:33:23.972Z","1.2.0":"2026-08-07T10:37:21.251Z","1.2.1":"2026-08-13T09:56:31.444Z"},"bugs":{"url":"https://github.com/rtsarakaki/smart-ui-components/issues"},"license":"MIT","homepage":"https://github.com/rtsarakaki/smart-ui-components#readme","keywords":["react","ui","datagrid","picker","markdown","pagination","typescript","components"],"repository":{"type":"git","url":"git+https://github.com/rtsarakaki/smart-ui-components.git"},"description":"Reusable React UI controls — DataGrid, DatasetPicker, MarkdownEditor, and related primitives","maintainers":[{"name":"rtsarakaki","email":"rtsarakaki@gmail.com"}],"readme":"# @arqueosfera/smart-ui-components\n\nReusable React UI controls extracted for Archsphere and other apps.\n\n## Components\n\n### `DataGrid`\n\n- Client-side **column sorting**\n- Built-in **pagination** (page + page size)\n- Native **edit** and **delete** action buttons\n- **Extra / custom row actions** (`extraActions` or `renderRowActions`) for screens like participants\n- Optional **selected row** highlight via `selectedRowId` / `getRowClassName`\n- Receives a dataset (`rows`) and declarative `columns`\n- Optional **`showPagination={false}`** when the host owns server-side paging\n\n```tsx\nimport { DataGrid } from \"@arqueosfera/smart-ui-components\";\n\n<DataGrid\n  rows={items}\n  columns={[\n    {\n      id: \"title\",\n      header: \"Title\",\n      sortable: true,\n      getSortValue: (row) => row.title,\n      render: (row) => row.title,\n    },\n  ]}\n  getRowId={(row) => row.id}\n  ariaLabel=\"Items\"\n  selectedRowId={selectedId}\n  onEdit={(row) => open(row)}\n  onDelete={(row) => confirmDelete(row)}\n  onRowActivate={(row) => open(row)}\n  extraActions={[\n    {\n      id: \"prompt\",\n      label: (row) => `Generate prompt for ${row.title}`,\n      shortLabel: \"1:1\",\n      onClick: (row) => generatePrompt(row),\n      visible: (row) => row.canEdit,\n    },\n  ]}\n  actionLabels={{ /* … */ }}\n  paginationLabels={{ /* … */ }}\n/>\n```\n\n### `DatasetPicker`\n\nGeneric “choose one item from a dataset” field (participant picker pattern):\n\n- Trigger shows the selected item; button opens a modal\n- **Description** search field is always present\n- **Type** filter is optional (`typeOptions`)\n- Items are passed as a plain `items` dataset (`id`, `label`, `description?`, `type?`, `imageUrl?`)\n- **Label hint** (`labelHint`) — info tooltip next to the field label when text is present\n- **Field hint** (`hint`) — helper under the trigger; omitted when empty\n\n```tsx\nimport { DatasetPicker } from \"@arqueosfera/smart-ui-components\";\n\n<DatasetPicker\n  fieldLabel=\"Responsible\"\n  value={selectedId}\n  onChange={setSelectedId}\n  items={dataset}\n  typeOptions={[\n    { value: \"partner\", label: \"Partner\" },\n    { value: \"stakeholder\", label: \"Stakeholder\" },\n  ]}\n  labels={{ /* i18n strings */ }}\n/>\n```\n\n### `MarkdownEditor`\n\nMarkdown field with an action toolbar:\n\n- Edit / preview mode toggle\n- Optional **copy** and **download** export actions\n- Optional **expand** toggle (controlled via `expanded` / `onExpandedChange`)\n- Host supplies `renderPreview` (markdown engine stays in the app)\n- Hint shows only when text/node is provided (`editHint` / `previewHint` / `hint`)\n\n```tsx\nimport { MarkdownEditor } from \"@arqueosfera/smart-ui-components\";\n\n<MarkdownEditor\n  value={markdown}\n  onChange={setMarkdown}\n  label={<span>Description</span>}\n  fieldAriaLabel=\"Description\"\n  previewEmptyMessage=\"Nothing to preview\"\n  editModeAria=\"Edit\"\n  previewModeAria=\"Preview\"\n  renderPreview={(content) => <YourMarkdown content={content} />}\n  exportActions={{\n    copyLabel: \"Copy\",\n    downloadLabel: \"Download\",\n    downloadFilename: \"notes.md\",\n  }}\n/>\n```\n\n## Scripts\n\n- `npm run build` — emit `dist/`\n- `npm run lint` — ESLint (max-warnings 0)\n- `npm run test:coverage` — Vitest with 80% coverage gate\n- `npm run quality` — type-check + lint + test:coverage\n- **Pre-commit (Husky):** runs `lint` + `test:coverage` (same as Archsphere)\n\n## Agents\n\nSee [AGENTS.md](./AGENTS.md) and `.cursor/rules/index.mdc` for curated Cursor rules/skills (subset of Archsphere, adapted for this npm UI library).\n\n## Publish\n\nPush to `main` runs GitHub Actions: quality checks, then npm publish with provenance (trusted publishing) + GitHub release + semantic-release, same pattern as `smart-value-objects`.\n\n### First-time npm setup (required before CI can publish)\n\n1. Create the empty package on [npmjs.com](https://www.npmjs.com/) (or let the first publish create it if your account allows).\n2. Package settings → **Trusted Publishers** → add GitHub Actions:\n   - Repository: `rtsarakaki/smart-ui-components`\n   - Workflow: `ci.yml`\n   - Environment: leave empty unless you use one\n3. Push to `main` (or re-run the Release job).\n\nUntil the package is on npm, Archsphere may depend via `file:../../smart-ui-components`. After `1.0.0` is published, switch to `\"@arqueosfera/smart-ui-components\": \"^1.0.0\"`.\n","readmeFilename":"README.md"}