{#snippet fileBadge(kind: FileKind, className = '')} {/snippet} {#snippet dropzone(forceCompact = false)} {@const compact = forceCompact || dropLayout === 'compact'} {@const vertical = !compact && dropLayout === 'vertical'}
{ if (disabled) return; if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openPicker(); } }} onclick={openPicker} class={[ 'relative overflow-hidden border border-dashed transition-colors duration-150 outline-none', 'focus-visible:ring-brand-500/30 focus-visible:border-brand-500 focus-visible:ring-2', 'rounded-xl', isDragging ? 'border-brand-500 bg-brand-500/5 dark:bg-brand-950/40' : 'border-border bg-surface-elevated hover:border-border-strong hover:bg-surface-overlay/60', disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer' ]} >

{#if isDragging} {i18n.t('dropToUpload')} {:else} {i18n.t('dropOrBrowse')} {i18n.t('browse')} {/if}

{#if resolvedHelperText}

{resolvedHelperText}

{/if}
{#if !disabled && !compact && !vertical} {/if}
{#if isDragging} {/if}
{/snippet}
{#if resolvedLabel}
{resolvedLabel}
{#if isMultiple && hasFile}
{#if showViewToggle}
{/if} {#if !disabled} {/if}
{/if}
{/if} {#if variant === 'avatar'}
{ if (disabled) return; if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openPicker(); } }} onclick={openPicker} class={[ 'group h-24 w-24 relative shrink-0 overflow-hidden rounded-full border-2 border-dashed transition-colors outline-none', 'focus-visible:ring-brand-500/30 focus-visible:border-brand-500 focus-visible:ring-2', isDragging ? 'border-brand-500 bg-brand-500/10' : hasFile || externalSrc ? 'border-transparent' : 'border-border bg-surface-elevated hover:border-border-strong', disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer' ]} > {#if primaryFile?.previewUrl || externalSrc} {#if !disabled}
{/if} {:else}
{i18n.t('upload')}
{/if}
{#if primaryFile}

{primaryFile.name}

{primaryFile.sizeFormatted}

{:else}

{i18n.t('addProfilePhoto')}

{#if resolvedHelperText}

{resolvedHelperText}

{/if} {/if}
{:else if showSinglePreview}
{#if singlePreviewUrl && singleIsVideo} {:else if singlePreviewUrl && singleIsAudio}
{@render fileBadge('audio', 'h-14 w-14 rounded-xl text-xs')}
{:else if singlePreviewUrl} {:else}
{@render fileBadge(primaryFile?.kind ?? 'other', 'h-14 w-14 rounded-xl text-xs')}
{/if} {#if !disabled}
{/if}

{singlePreviewName}

{#if singlePreviewMeta}

{singlePreviewMeta}

{/if}
{#if resolvedHelperText}

{resolvedHelperText}

{/if}
{:else if !(isMultiple && hasFile && showFileList)} {@render dropzone()} {/if} {#if errorMessage} {/if} {#if isMultiple && hasFile && showFileList} {#if view === 'grid'} {:else} {/if} {#if !disabled} {@render dropzone(true)} {/if} {/if}