
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@praxisui/files-upload
Advanced tools
File upload components and services for Praxis UI with presigned and direct strategies, quotas and rate-limit handling.
Para ver esta biblioteca em funcionamento em uma aplicação completa, utilize o projeto de exemplo (Quickstart):
@praxisui/* em um app Angular, incluindo instalação, configuração e uso em telas reais.Components and services for integrating file uploads with the Praxis backend. Configuration is provided as JSON and can be edited at runtime through the Settings Panel.
Main component selector: praxis-files-upload
Inputs
config: FilesUploadConfig | null UI/limits/options for the upload flow.baseUrl?: string Required to enable uploads (backend base URL for files API).componentId: string Persistence key suffix for local config (default: default).displayMode: 'full' | 'compact' Controls UI density and overlays (default: full).Outputs
uploadSuccess: { file: FileMetadata } Emitted per successful single upload.bulkComplete: BulkUploadResponse Summary for batch uploads.error: ErrorResponse Error information for failed requests.rateLimited: RateLimitInfo Emits when 429 is detected (with reset hints).retry | download | copyLink | detailsOpened | detailsClosed: BulkUploadFileResult Advanced list actions.pendingFilesChange: File[] Current selected (pending) files.proximityChange: boolean Proximity overlay visibility toggles.PraxisFilesUploadimport { Component } from "@angular/core";
import { PraxisFilesUpload, FilesUploadConfig, FileMetadata } from "@praxisui/files-upload";
@Component({
standalone: true,
imports: [PraxisFilesUpload],
template: `<praxis-files-upload [config]="config" (uploadSuccess)="onSuccess($event)"></praxis-files-upload>`,
})
export class DemoComponent {
config: FilesUploadConfig = {
strategy: "auto",
ui: { showDropzone: true },
};
onSuccess(event: { file: FileMetadata }) {
console.log("uploaded", event.file);
}
}
PdxFilesUploadFieldComponentWrapper for dynamic forms that implements ControlValueAccessor and emits either file metadata or the uploaded id according to the configured valueMode.
<form [formGroup]="form">
<pdx-material-files-upload formControlName="attachment" />
</form>
The editor allows adjusting UI behavior, bulk parameters, limits, quotas, rate limit handling, headers and messages for individual error codes.
strategy: direct | presign | auto — auto tenta upload pré-assinado e recorre ao modo direto se a etapa de presign falhar.{
"ui": { "accept": ["image/png", "application/pdf"], "showMetadataForm": true },
"limits": { "maxFileSizeBytes": 1048576 },
"bulk": { "parallelUploads": 2, "retryCount": 3 },
"quotas": { "showQuotaWarnings": true },
"rateLimit": { "autoRetryOn429": true, "maxAutoRetry": 2 },
"headers": { "tenantHeader": "X-Tenant-Id" },
"messages": {
"successSingle": "Uploaded",
"errors": { "QUOTA_EXCEEDED": "Quota reached" }
}
}
Client-side constraints can be enforced via config and validated by built-in validators:
ui.accept: string[] (e.g., ['image/png','application/pdf'])options.allowedExtensions, options.acceptMimeTypeslimits.maxFileSizeBytes (bytes) or limits.maxUploadSizeMblimits.maxFilesPerBulklimits.maxBulkSizeBytesExample (2 files max, 5 MB each, PNG/JPEG only):
const cfg: FilesUploadConfig = {
ui: { accept: ['image/png', 'image/jpeg'], showDropzone: true },
limits: { maxFileSizeBytes: 5 * 1024 * 1024, maxFilesPerBulk: 2 },
};
FilesApiClient – performs direct or bulk uploads and requests presigned URLs.PresignedUploaderService – posts files to presigned targets with headers and form fields.ConfigService – retrieves effective backend configuration with ETag caching scoped by base URL and tenant/user headers.useEffectiveUploadConfig – Angular composable exposing loading/data/error/context signals and a refetch method.acceptValidatormaxFileSizeValidatormaxFilesPerBulkValidatormaxBulkSizeValidatorErrorMapperService translates backend ErrorCode values into user-facing messages and exposes rate limit information.
Default messages are provided in Portuguese but can be overridden globally by
providing the FILES_UPLOAD_ERROR_MESSAGES injection token:
{ provide: FILES_UPLOAD_ERROR_MESSAGES, useValue: { QUOTA_EXCEEDED: 'Limite atingido' } }
The configuration editor stores settings in CONFIG_STORAGE with fallback to localStorage, using the key files-upload-config:<componentId>.
Todas as mensagens do componente são fornecidas em Português Brasileiro. Para cenários multilíngues, o componente integra-se opcionalmente ao @ngx-translate/core e expõe um conjunto de chaves praxis.filesUpload.*.
As traduções padrão podem ser registradas com o objeto FILES_UPLOAD_PT_BR:
import { TranslateService } from '@ngx-translate/core';
import { FILES_UPLOAD_PT_BR } from '@praxisui/files-upload';
constructor(private translate: TranslateService) {
translate.setTranslation('pt-BR', FILES_UPLOAD_PT_BR, true);
}
Se nenhuma tradução estiver disponível, o componente utiliza o token FILES_UPLOAD_TEXTS como fallback. Para sobrescrever os textos manualmente:
import { FILES_UPLOAD_TEXTS } from "@praxisui/files-upload";
providers: [
{
provide: FILES_UPLOAD_TEXTS,
useValue: {
settingsAriaLabel: "Open settings",
dropzoneLabel: "Drag files here or",
dropzoneButton: "select",
conflictPolicyLabel: "Conflict policy",
metadataLabel: "Metadata (JSON)",
progressAriaLabel: "Upload progress",
rateLimitBanner: "Rate limit exceeded. Try again at",
},
},
];
FAQs
File upload components and services for Praxis UI with presigned and direct strategies, quotas and rate-limit handling.
We found that @praxisui/files-upload demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.