{"_id":"@aditkuma/ngx-bulk-upload","name":"@aditkuma/ngx-bulk-upload","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@aditkuma/ngx-bulk-upload","version":"0.1.0","description":"Angular component for uploading huge CSV/Excel files to a Laravel queue-backed backend, with a live processed/failed/in-progress/remaining dashboard (WebSocket + polling fallback).","keywords":["angular","laravel","csv","excel","upload","bulk-upload","queue","import"],"author":{"name":"aditkuma"},"license":"MIT","publishConfig":{"access":"public"},"peerDependencies":{"@angular/common":"^14.2.0","@angular/core":"^14.2.0","@angular/material":"^14.2.0","rxjs":"^7.5.0"},"dependencies":{"tslib":"^2.3.0","laravel-echo":"^2.4.0","pusher-js":"^8.5.0"},"module":"fesm2015/aditkuma-ngx-bulk-upload.mjs","es2020":"fesm2020/aditkuma-ngx-bulk-upload.mjs","esm2020":"esm2020/aditkuma-ngx-bulk-upload.mjs","fesm2020":"fesm2020/aditkuma-ngx-bulk-upload.mjs","fesm2015":"fesm2015/aditkuma-ngx-bulk-upload.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2020":"./esm2020/aditkuma-ngx-bulk-upload.mjs","es2020":"./fesm2020/aditkuma-ngx-bulk-upload.mjs","es2015":"./fesm2015/aditkuma-ngx-bulk-upload.mjs","node":"./fesm2015/aditkuma-ngx-bulk-upload.mjs","default":"./fesm2020/aditkuma-ngx-bulk-upload.mjs"}},"sideEffects":false,"_id":"@aditkuma/ngx-bulk-upload@0.1.0","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-XNWgjY41MV+XCoL6QtKvnvSV3Z2/5VHL0p/1y+wq47m3WZ6ykJBys60aO2E476sPUdsXoiZKR3zfb7AD8oq3gw==","shasum":"b857c4a401f9f4769d842c4a2df0ffee38adfbe6","tarball":"https://registry.npmjs.org/@aditkuma/ngx-bulk-upload/-/ngx-bulk-upload-0.1.0.tgz","fileCount":26,"unpackedSize":265890,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHQ6LsLlySPFlSUFpg4E1EbW5qxRU4oxBHDSLCFBNDG2AiEA23BgZiKeJCRQFpXLUJNNhUr/08Wcw9WPiDwCcrnXEJo="}]},"_npmUser":{"name":"aditkuma","email":"aditkuma@gmail.com"},"directories":{},"maintainers":[{"name":"aditkuma","email":"aditkuma@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ngx-bulk-upload_0.1.0_1784713363705_0.5849491768413531"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T09:42:43.542Z","0.1.0":"2026-07-22T09:42:43.839Z","modified":"2026-07-22T09:42:44.048Z"},"maintainers":[{"name":"aditkuma","email":"aditkuma@gmail.com"}],"description":"Angular component for uploading huge CSV/Excel files to a Laravel queue-backed backend, with a live processed/failed/in-progress/remaining dashboard (WebSocket + polling fallback).","keywords":["angular","laravel","csv","excel","upload","bulk-upload","queue","import"],"author":{"name":"aditkuma"},"license":"MIT","readme":"# @aditkuma/ngx-bulk-upload\n\nAngular component for uploading huge CSV/Excel files to a Laravel queue-backed\nbackend, with a live processed/failed/in-progress/remaining dashboard. Pairs\nwith the [Laravel pipeline](https://github.com/aditkuma/angular-bulk-upload)\n(`AnalyzeUploadJob` / `ProcessUploadChunkJob` / `FinalizeUploadJob`) - see that\nrepo for the API side.\n\nIt doesn't assume any particular spreadsheet schema: any CSV/XLS/XLSX file,\nany columns, any row count.\n\n## Install\n\n```\nnpm install @aditkuma/ngx-bulk-upload\n```\n\nPeer dependencies: `@angular/material` (Button, Card, Icon, Paginator,\nProgress Bar, Tooltip modules) and `@angular/animations`\n(`BrowserAnimationsModule`) must be set up in the host app.\n\n## Usage\n\nIn your root module:\n\n```ts\nimport { NgxBulkUploadModule } from '@aditkuma/ngx-bulk-upload';\nimport { environment } from '../environments/environment';\n\n@NgModule({\n  imports: [\n    // ...\n    NgxBulkUploadModule.forRoot({\n      apiBaseUrl: environment.apiBaseUrl,\n      // Omit `pusher` entirely to disable realtime updates and rely on\n      // polling only - the component works either way.\n      pusher: environment.pusher,\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\nIn a template:\n\n```html\n<ngx-bulk-upload [maxFileSizeMb]=\"500\" (completed)=\"onUploadCompleted($event)\"></ngx-bulk-upload>\n```\n\n| Input | Default | Purpose |\n|---|---|---|\n| `apiBaseUrl` | value from `forRoot()` | Override per-instance if one page talks to a different backend |\n| `maxFileSizeMb` | `500` | Client-side guard shown before upload starts (server enforces its own limit too) |\n\n| Output | Payload | Fires |\n|---|---|---|\n| `completed` | `UploadProgress` | Once, when the upload reaches a terminal status (`completed`, `completed_with_errors`, or `failed`) |\n\n## Backend contract\n\nThe component expects four REST endpoints under `apiBaseUrl`:\n\n- `POST /uploads` - multipart file upload, returns `{ uuid }`\n- `GET /uploads/{uuid}` - current progress snapshot\n- `GET /uploads/{uuid}/errors?page=&per_page=` - paginated failed rows\n- `GET /uploads/{uuid}/errors/export` - CSV download of all failures\n\n...and, if `pusher` is configured, broadcasts on a public channel\n`upload.{uuid}` with a `.progress.updated` event carrying the same progress\nsnapshot shape.\n\n## Development\n\nThis package lives inside the `frontend` Angular workspace as\n`projects/ngx-bulk-upload`.\n\n```\nng build ngx-bulk-upload\ncd dist/ngx-bulk-upload\nnpm publish\n```\n","readmeFilename":"README.md","_rev":"1-5aee88d8d1d5632e4ebfb2d730094802"}