{"_id":"@arp0d3v/lds-core","_rev":"2-9f255eeca4aa8950cf6638580dc1c164","name":"@arp0d3v/lds-core","dist-tags":{"latest":"2.1.0"},"versions":{"2.0.0":{"name":"@arp0d3v/lds-core","version":"2.0.0","keywords":["data-source","table","grid","pagination","sorting","filtering","typescript","framework-independent","event-emitter"],"author":{"name":"Arash Pouya","email":"arp0d3v"},"license":"MIT","_id":"@arp0d3v/lds-core@2.0.0","maintainers":[{"name":"arp0d3v","email":"arp0d3v@gmail.com"}],"homepage":"https://github.com/arp0d3v/lds-core#readme","bugs":{"url":"https://github.com/arp0d3v/lds-core/issues"},"dist":{"shasum":"d5406f4f44be847ab9c7e9a97ffd086b5d3c6ce6","tarball":"https://registry.npmjs.org/@arp0d3v/lds-core/-/lds-core-2.0.0.tgz","fileCount":43,"integrity":"sha512-w6nM7Xrxhd6iVe8bHU+QSfj+QB+pWW3qgiZKwwxIg7Dlk98ffY0Zgdl5jnvu2kwZvk3tlSr70gs9MLv1Stwi8g==","signatures":[{"sig":"MEYCIQDQvrmnTwv8gDO9YY1gPQf0gB8NA+13Pn0gj6boMVsp/wIhAJns6fXhnacNlX1l9FBQ5juVB3mmJqiO76e/ZmCDZxlE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71726},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"build":"tsc","clean":"rimraf dist","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"arp0d3v","email":"arp0d3v@gmail.com"},"repository":{"url":"git+https://github.com/arp0d3v/lds-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Framework-independent data source management for tables, lists, and grids","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.0","typescript":"^4.5.0"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/lds-core_2.0.0_1760629368324_0.8000782032879532","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@arp0d3v/lds-core","version":"2.1.0","description":"Framework-independent data source management for tables, lists, and grids","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","build:watch":"tsc --watch","clean":"rimraf dist","prepublishOnly":"npm run clean && npm run build"},"keywords":["data-source","table","grid","pagination","sorting","filtering","typescript","framework-independent","event-emitter"],"author":{"name":"Arash Pouya","email":"arp0d3v"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arp0d3v/lds-core.git"},"bugs":{"url":"https://github.com/arp0d3v/lds-core/issues"},"homepage":"https://github.com/arp0d3v/lds-core#readme","peerDependencies":{},"devDependencies":{"typescript":"^4.5.0","rimraf":"^3.0.0"},"_id":"@arp0d3v/lds-core@2.1.0","gitHead":"03aff69a48069230a6ec2d491d86794606da758b","_nodeVersion":"20.18.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Nu1dTUdeIhXgx6EgMJpme7HN/la217VETqUupfL4hNXofUD/2y2cHB5ubeIhUIP1jaUPB0CqYGjT93G832l3Jw==","shasum":"ee5005402e4f3c75144b090a04915dd101f37341","tarball":"https://registry.npmjs.org/@arp0d3v/lds-core/-/lds-core-2.1.0.tgz","fileCount":43,"unpackedSize":85330,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICf6HgZKB5RTxR5l1hdnSP1lPEajz7QP6CEoACStYipIAiAnTyX1jMA7QqOOtsCGdu6mW433D8vOpV8FuNbOtiDwVQ=="}]},"_npmUser":{"name":"arp0d3v","email":"arp0d3v@gmail.com"},"directories":{},"maintainers":[{"name":"arp0d3v","email":"arp0d3v@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lds-core_2.1.0_1764668420689_0.9731202162166621"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-16T15:42:48.258Z","modified":"2025-12-02T09:40:21.071Z","2.0.0":"2025-10-16T15:42:48.515Z","2.1.0":"2025-12-02T09:40:20.890Z"},"bugs":{"url":"https://github.com/arp0d3v/lds-core/issues"},"author":{"name":"Arash Pouya","email":"arp0d3v"},"license":"MIT","homepage":"https://github.com/arp0d3v/lds-core#readme","keywords":["data-source","table","grid","pagination","sorting","filtering","typescript","framework-independent","event-emitter"],"repository":{"type":"git","url":"git+https://github.com/arp0d3v/lds-core.git"},"description":"Framework-independent data source management for tables, lists, and grids","maintainers":[{"name":"arp0d3v","email":"arp0d3v@gmail.com"}],"readme":"# @arp0d3v/lds-core\r\n\r\n> Framework-independent data source management for tables, lists, and grids\r\n\r\n[![npm version](https://badge.fury.io/js/%40arp0d3v%2Flds-core.svg)](https://www.npmjs.com/package/@arp0d3v/lds-core)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n---\r\n\r\n## Features\r\n\r\n- ✅ **Framework-Independent** - Works with Angular, React, Vue, Svelte, or vanilla JS\r\n- ✅ **Zero Dependencies** - Pure TypeScript, no external libraries\r\n- ✅ **Custom Event System** - No RxJS required\r\n- ✅ **TypeScript First** - Full type safety and IntelliSense\r\n- ✅ **Lightweight** - ~15KB minified\r\n- ✅ **Pagination** - Built-in pagination support\r\n- ✅ **Sorting** - Single and multi-column sorting\r\n- ✅ **Filtering** - Flexible filter management\r\n- ✅ **Routing Support** - URL-based state management with query params\r\n- ✅ **State Caching** - Persist state in localStorage/sessionStorage\r\n- ✅ **Memory Safe** - Built-in dispose() pattern\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @arp0d3v/lds-core\r\n```\r\n\r\nOr with yarn:\r\n\r\n```bash\r\nyarn add @arp0d3v/lds-core\r\n```\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n```typescript\r\nimport { ListDataSource, LdsField } from '@arp0d3v/lds-core';\r\n\r\n// Create a data source\r\nconst dataSource = new ListDataSource('myList', 'remote', {\r\n    sort: { defaultDir: 'asc' },\r\n    pagination: {\r\n        enabled: true,\r\n        pageSize: 20\r\n    },\r\n    saveState: true\r\n});\r\n\r\n// Define fields\r\ndataSource.setFields([\r\n    new LdsField('id', 'ID', 'number'),\r\n    new LdsField('name', 'Name', 'string'),\r\n    new LdsField('email', 'Email', 'string'),\r\n    new LdsField('createdAt', 'Created', 'datetime')\r\n]);\r\n\r\n// Listen to events\r\ndataSource.onDataLoaded.subscribe(data => {\r\n    console.log('Loaded:', data.items.length, 'items');\r\n    console.log('Total:', data.total);\r\n});\r\n\r\n// Load data\r\ndataSource.setData({\r\n    items: [\r\n        { id: 1, name: 'John Doe', email: 'john@example.com', createdAt: '2024-01-15' },\r\n        { id: 2, name: 'Jane Smith', email: 'jane@example.com', createdAt: '2024-01-16' }\r\n    ],\r\n    total: 2\r\n});\r\n\r\n// Cleanup\r\ndataSource.dispose();\r\n```\r\n\r\n---\r\n\r\n## ⚠️ Breaking Changes in v2.1.0\r\n\r\nIf you're upgrading from v2.0.0 or earlier, note these breaking changes:\r\n\r\n- **Field Properties:** `orderable` → `sortable`\r\n- **State Properties:** `order1Name`/`order1Dir` → `sort1Name`/`sort1Dir`\r\n- **State Properties:** `order2Name`/`order2Dir` → `sort2Name`/`sort2Dir`\r\n\r\n**Migration:**\r\n```typescript\r\n// Old (v2.0.0)\r\nnew LdsField('name', 'Name', 'string', true, true, 'order1Name', 'asc')\r\ndataSource.state.order1Name\r\n\r\n// New (v2.1.0)\r\nnew LdsField('name', 'Name', 'string', true, true, 'sort1Name', 'asc')\r\ndataSource.state.sort1Name\r\n```\r\n\r\n---\r\n\r\n## Core Concepts\r\n\r\n### ListDataSource\r\n\r\nThe main class for managing data:\r\n\r\n```typescript\r\nconst ds = new ListDataSource<MyType>(\r\n    'uniqueId',      // Unique identifier\r\n    'remote',        // 'remote' or 'local'\r\n    config           // Configuration\r\n);\r\n```\r\n\r\n### LdsField\r\n\r\nDefine your data columns:\r\n\r\n```typescript\r\nnew LdsField(\r\n    'fieldName',     // Property name\r\n    'Display Title', // Column title\r\n    'string',        // Data type\r\n    true,            // Visible (default: true)\r\n    true             // Sortable (default: true)\r\n);\r\n```\r\n\r\n### Events\r\n\r\n```typescript\r\ndataSource.onDataRequested.subscribe(() => {\r\n    // Fetch data from API\r\n});\r\n\r\ndataSource.onDataLoaded.subscribe(data => {\r\n    // Data loaded successfully\r\n});\r\n\r\ndataSource.onSortChanged.subscribe(fieldName => {\r\n    // Sort changed\r\n});\r\n\r\ndataSource.onPaginationChanged.subscribe(state => {\r\n    // Page or page size changed\r\n});\r\n\r\ndataSource.onNavigateRequested.subscribe(eventName => {\r\n    // Navigation requested (when useRouting is enabled)\r\n});\r\n```\r\n\r\n---\r\n\r\n## Routing Support\r\n\r\nEnable URL-based state management for better user experience and shareable links:\r\n\r\n```typescript\r\nconst dataSource = new ListDataSource('myList', 'remote', {\r\n    useRouting: true,  // Enable routing\r\n    pagination: {\r\n        enabled: true,\r\n        pageSize: 20\r\n    },\r\n    sort: {\r\n        defaultDir: 'desc'\r\n    }\r\n});\r\n\r\n// Get query parameters for current state\r\nconst queryParams = dataSource.getQueryParams();\r\n// Returns: { pageIndex: 0, pageSize: 20, sort1Name: 'name', sort1Dir: 'desc', ...filters }\r\n\r\n// Apply query parameters from URL\r\ndataSource.applyQueryParams({\r\n    pageIndex: '2',\r\n    pageSize: '50',\r\n    sort1Name: 'email',\r\n    sort1Dir: 'asc',\r\n    searchText: 'john'\r\n});\r\n\r\n// Listen for navigation requests\r\ndataSource.onNavigateRequested.subscribe(eventName => {\r\n    const params = dataSource.getQueryParams();\r\n    // Navigate using your routing library\r\n    router.navigate([], { queryParams: params });\r\n});\r\n```\r\n\r\n**Note:** Routing integration is framework-specific. See `@arp0d3v/lds-angular` for Angular Router integration.\r\n\r\n---\r\n\r\n## API Reference\r\n\r\n### Methods\r\n\r\n- `setFields(fields: LdsField[])` - Set field definitions\r\n- `setData(data: { items: T[], total: number })` - Set current page data\r\n- `setSourceItems(items: T[])` - Set all items (local mode)\r\n- `setPageSize(size: number)` - Set page size\r\n- `loadPage(pageIndex: number)` - Load specific page\r\n- `loadNextPage()` - Load next page\r\n- `reload()` - Reload data\r\n- `field(name: string)` - Get field by name\r\n- `getQueryParams(includePagination?: boolean)` - Get query params for routing\r\n- `applyQueryParams(params: any, customFieldTypes?: object)` - Apply query params\r\n- `dispose()` - Cleanup resources\r\n\r\n### Properties\r\n\r\n- `items: T[]` - Current page items\r\n- `sourceItems: T[]` - All items (local mode)\r\n- `pages: LdsPageData[]` - All loaded pages\r\n- `fields: LdsField[]` - Field definitions\r\n- `hasData: boolean` - Has items\r\n- `isLoading: boolean` - Is loading\r\n- `isLastPage: boolean` - Is on last page\r\n- `pageIndex: number` - Current page (0-based)\r\n- `pageSize: number` - Items per page\r\n- `totalCount: number` - Total items across all pages\r\n- `pagination: LdsPaginationState` - Pagination state\r\n- `state: LdsViewState` - Complete state\r\n- `filters: any` - Filter object\r\n\r\n### Built-in TrackBy\r\n\r\n```typescript\r\n// For multi-page rendering\r\ndataSource.trackByPageIndex(index, page);\r\n```\r\n\r\n---\r\n\r\n## Framework Integration\r\n\r\n### Angular\r\n\r\nUse with `@arp0d3v/lds-angular`:\r\n\r\n```bash\r\nnpm install @arp0d3v/lds-core @arp0d3v/lds-angular\r\n```\r\n\r\nSee [@arp0d3v/lds-angular](https://github.com/arp0d3v/lds-angular) for Angular components.\r\n\r\n### React (Future)\r\n\r\n```bash\r\nnpm install @arp0d3v/lds-core @arp0d3v/lds-react\r\n```\r\n\r\n### Vue (Future)\r\n\r\n```bash\r\nnpm install @arp0d3v/lds-core @arp0d3v/lds-vue\r\n```\r\n\r\n### Vanilla JS\r\n\r\n```html\r\n<script src=\"https://unpkg.com/@arp0d3v/lds-core@2.1.0/dist/index.js\"></script>\r\n<script>\r\n  const { ListDataSource, LdsField } = LdsCore;\r\n  const ds = new ListDataSource('myList', 'local', {});\r\n</script>\r\n```\r\n\r\n---\r\n\r\n## Documentation\r\n\r\n- [Quick Start](https://github.com/arp0d3v/lds-core/blob/main/docs/01-QUICK-START.md)\r\n- [API Reference](https://github.com/arp0d3v/lds-core/blob/main/docs/16-API-REFERENCE.md)\r\n- [Advanced Patterns](https://github.com/arp0d3v/lds-core/blob/main/docs/17-ADVANCED-PATTERNS.md)\r\n- [Examples](https://github.com/arp0d3v/lds-core/blob/main/docs/18-EXAMPLES.md)\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT © [Arash Pouya](https://github.com/arp0d3v)\r\n\r\n---\r\n\r\n## Author\r\n\r\n**Arash Pouya** ([@arp0d3v](https://github.com/arp0d3v))\r\n\r\nProgramming since 17. C# ASP.NET developer with expertise in Angular, TypeScript, and web development.\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please open an issue or submit a pull request.\r\n\r\n---\r\n\r\n## Support\r\n\r\n- 🐛 [Report a bug](https://github.com/arp0d3v/lds-core/issues)\r\n- 💡 [Request a feature](https://github.com/arp0d3v/lds-core/issues)\r\n- 📖 [Read the docs](https://github.com/arp0d3v/lds-core/blob/main/docs/README.md)\r\n\r\n","readmeFilename":"README.md"}