@xui/file-input 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,7 +3,7 @@ import { viewChild, signal, input, booleanAttribute, computed, forwardRef, ViewE
|
|
|
3
3
|
import { provideIcons, NgIcon } from '@ng-icons/core';
|
|
4
4
|
import { matUploadFileRound } from '@ng-icons/material-icons/round';
|
|
5
5
|
import { createXConfigToken, xui } from '@xui/core';
|
|
6
|
-
import {
|
|
6
|
+
import { injectUniqueId } from '@xui/core/a11y';
|
|
7
7
|
import { XFormFieldControl } from '@xui/core/form-field';
|
|
8
8
|
import { createXErrorState, createXValueAccessor, provideXValueAccessor } from '@xui/core/forms';
|
|
9
9
|
import { XuiIcon } from '@xui/icon';
|
|
@@ -45,7 +45,7 @@ class XuiFileInput {
|
|
|
45
45
|
field = viewChild.required('field', /* @ts-ignore */
|
|
46
46
|
...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
47
47
|
formState = createXErrorState();
|
|
48
|
-
fieldId =
|
|
48
|
+
fieldId = injectUniqueId('xui-file-input');
|
|
49
49
|
/** Error state for `xui-form-field`, derived from the optional bound form control. */
|
|
50
50
|
errorState = this.formState.errorState;
|
|
51
51
|
/** Points the form field's `<label for>` at the real file input, not the host. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xui-file-input.mjs","sources":["../../../../../../libs/ui/file-input/xui/src/lib/file-input.token.ts","../../../../../../libs/ui/file-input/xui/src/lib/file-input.ts","../../../../../../libs/ui/file-input/xui/src/index.ts","../../../../../../libs/ui/file-input/xui/src/xui-file-input.ts"],"sourcesContent":["import { createXConfigToken } from '@xui/core';\nimport { XuiFileInputVariants } from './file-input';\n\nexport interface XuiFileInputConfig {\n size: XuiFileInputVariants['size'];\n fill: boolean;\n}\n\nexport const [injectXuiFileInputConfig, provideXuiFileInputConfig] = createXConfigToken<XuiFileInputConfig>(\n 'XuiFileInputConfig',\n {\n size: 'md',\n fill: false\n }\n);\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n type Signal\n} from '@angular/core';\nimport { ControlValueAccessor, type NgControl } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matUploadFileRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { uniqueId } from '@xui/core/a11y';\nimport { XFormFieldControl } from '@xui/core/form-field';\nimport { createXErrorState, createXValueAccessor, provideXValueAccessor } from '@xui/core/forms';\nimport { XuiIcon } from '@xui/icon';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport { injectXuiFileInputConfig } from './file-input.token';\n\nexport const fileInputVariants = cva(\n 'border-border bg-surface-inset text-foreground-muted focus-within:border-focus flex cursor-pointer items-center gap-2 rounded-lg border pe-1 transition-colors has-disabled:cursor-not-allowed has-disabled:opacity-50',\n {\n variants: {\n size: {\n md: 'h-(--control-height-md) ps-(--control-padding-md) text-sm',\n sm: 'h-(--control-height-sm) ps-(--control-padding-sm) text-xs'\n },\n fill: {\n true: 'w-full',\n false: 'w-auto'\n }\n },\n defaultVariants: { size: 'md', fill: false }\n }\n);\n\nexport type XuiFileInputVariants = VariantProps<typeof fileInputVariants>;\n\n/**\n * A styled file picker.\n *\n * ```html\n * <xui-file-input [(ngModel)]=\"files\" accept=\"image/*\" multiple />\n * ```\n *\n * Wraps a real hidden `<input type=\"file\">`, so the native picker, `accept` and\n * `multiple` all work — this only dresses the trigger and shows the selection.\n * Its value is the `FileList` (or `null`), and it is a `ControlValueAccessor`.\n * A file input is write-only in the DOM for security, so `writeValue` can only\n * clear it, never pre-fill a selection.\n */\n@Component({\n selector: 'xui-file-input',\n imports: [NgIcon, XuiIcon],\n viewProviders: [provideIcons({ matUploadFileRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n provideXValueAccessor(() => XuiFileInput),\n {\n provide: XFormFieldControl,\n useExisting: forwardRef(() => XuiFileInput)\n }\n ],\n template: `\n <label [class]=\"computedClass()\">\n <ng-icon xui size=\"sm\" name=\"matUploadFileRound\" class=\"shrink-0\" />\n <span class=\"min-w-0 flex-1 truncate\" [class.text-foreground]=\"hasSelection()\">{{ label() }}</span>\n <span\n class=\"bg-surface-raised border-border text-foreground my-0.5 me-0.5 flex shrink-0 items-center rounded-md border px-(--control-padding-sm) text-xs font-medium\"\n >\n {{ buttonText() }}\n </span>\n <input\n #field\n [id]=\"fieldId\"\n type=\"file\"\n class=\"sr-only\"\n [attr.accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() ?? text()\"\n (change)=\"onSelect(field.files)\"\n (blur)=\"cva.markTouched()\"\n />\n </label>\n `,\n host: {\n class: 'block'\n }\n})\nexport class XuiFileInput implements ControlValueAccessor, XFormFieldControl {\n private readonly config = injectXuiFileInputConfig();\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n private readonly formState = createXErrorState();\n protected readonly fieldId = uniqueId('xui-file-input');\n\n /** Error state for `xui-form-field`, derived from the optional bound form control. */\n readonly errorState = this.formState.errorState;\n\n /** Points the form field's `<label for>` at the real file input, not the host. */\n readonly controlId: Signal<string | null> = signal(this.fieldId).asReadonly();\n\n get ngControl(): NgControl | null {\n return this.formState.ngControl();\n }\n\n /** The user-defined classes on the trigger. Merged last so they win. */\n readonly class = input<ClassValue>('');\n /** Control height, from the shared control scale. */\n readonly size = input<XuiFileInputVariants['size']>(this.config.size);\n /** Stretch to the available width instead of hugging its contents. */\n readonly fill = input<boolean, BooleanInput>(this.config.fill, { transform: booleanAttribute });\n\n /** Placeholder shown before anything is chosen. */\n readonly text = input('Choose a file…');\n /** Label of the browse button. */\n readonly buttonText = input('Browse');\n /**\n * Passed to the native input's `accept` — a comma-separated list of extensions or MIME types. A filter for the file\n * chooser, not validation: check the chosen files yourself.\n */\n readonly accept = input<string | null>(null);\n /** Allow more than one file to be chosen. */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n /** Accessible name for the control. Falls back to the displayed text, which is the file name once one is chosen. */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** Block interaction and dim the control. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly cva = createXValueAccessor<FileList | null>({\n // The browser forbids programmatically setting a file input's value, so the\n // only write we can honour is a reset to empty.\n onWrite: value => {\n if (!value) {\n this.selection.set(null);\n this.field().nativeElement.value = '';\n }\n },\n disabled: this.disabled\n });\n protected readonly isDisabled = this.cva.disabled;\n\n private readonly selection = signal<FileList | null>(null);\n protected readonly hasSelection = computed(() => (this.selection()?.length ?? 0) > 0);\n\n /** The current selection: the picker's filename(s), or the placeholder. */\n protected readonly label = computed(() => {\n const files = this.selection();\n\n if (!files || files.length === 0) {\n return this.text();\n }\n\n return files.length === 1 ? files[0].name : `${files.length} files`;\n });\n\n protected readonly computedClass = computed(() =>\n xui(fileInputVariants({ size: this.size(), fill: this.fill() }), this.class())\n );\n\n protected onSelect(files: FileList | null): void {\n const value = files && files.length ? files : null;\n this.selection.set(value);\n this.cva.notifyChange(value);\n this.cva.markTouched();\n }\n\n readonly writeValue = this.cva.writeValue;\n readonly registerOnChange = this.cva.registerOnChange;\n readonly registerOnTouched = this.cva.registerOnTouched;\n readonly setDisabledState = this.cva.setDisabledState;\n}\n","import { XuiFileInput } from './lib/file-input';\n\nexport * from './lib/file-input';\nexport * from './lib/file-input.token';\n\nexport const XuiFileInputImports = [XuiFileInput] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xui-file-input.mjs","sources":["../../../../../../libs/ui/file-input/xui/src/lib/file-input.token.ts","../../../../../../libs/ui/file-input/xui/src/lib/file-input.ts","../../../../../../libs/ui/file-input/xui/src/index.ts","../../../../../../libs/ui/file-input/xui/src/xui-file-input.ts"],"sourcesContent":["import { createXConfigToken } from '@xui/core';\nimport { XuiFileInputVariants } from './file-input';\n\nexport interface XuiFileInputConfig {\n size: XuiFileInputVariants['size'];\n fill: boolean;\n}\n\nexport const [injectXuiFileInputConfig, provideXuiFileInputConfig] = createXConfigToken<XuiFileInputConfig>(\n 'XuiFileInputConfig',\n {\n size: 'md',\n fill: false\n }\n);\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n type Signal\n} from '@angular/core';\nimport { ControlValueAccessor, type NgControl } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matUploadFileRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { injectUniqueId } from '@xui/core/a11y';\nimport { XFormFieldControl } from '@xui/core/form-field';\nimport { createXErrorState, createXValueAccessor, provideXValueAccessor } from '@xui/core/forms';\nimport { XuiIcon } from '@xui/icon';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport { injectXuiFileInputConfig } from './file-input.token';\n\nexport const fileInputVariants = cva(\n 'border-border bg-surface-inset text-foreground-muted focus-within:border-focus flex cursor-pointer items-center gap-2 rounded-lg border pe-1 transition-colors has-disabled:cursor-not-allowed has-disabled:opacity-50',\n {\n variants: {\n size: {\n md: 'h-(--control-height-md) ps-(--control-padding-md) text-sm',\n sm: 'h-(--control-height-sm) ps-(--control-padding-sm) text-xs'\n },\n fill: {\n true: 'w-full',\n false: 'w-auto'\n }\n },\n defaultVariants: { size: 'md', fill: false }\n }\n);\n\nexport type XuiFileInputVariants = VariantProps<typeof fileInputVariants>;\n\n/**\n * A styled file picker.\n *\n * ```html\n * <xui-file-input [(ngModel)]=\"files\" accept=\"image/*\" multiple />\n * ```\n *\n * Wraps a real hidden `<input type=\"file\">`, so the native picker, `accept` and\n * `multiple` all work — this only dresses the trigger and shows the selection.\n * Its value is the `FileList` (or `null`), and it is a `ControlValueAccessor`.\n * A file input is write-only in the DOM for security, so `writeValue` can only\n * clear it, never pre-fill a selection.\n */\n@Component({\n selector: 'xui-file-input',\n imports: [NgIcon, XuiIcon],\n viewProviders: [provideIcons({ matUploadFileRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n provideXValueAccessor(() => XuiFileInput),\n {\n provide: XFormFieldControl,\n useExisting: forwardRef(() => XuiFileInput)\n }\n ],\n template: `\n <label [class]=\"computedClass()\">\n <ng-icon xui size=\"sm\" name=\"matUploadFileRound\" class=\"shrink-0\" />\n <span class=\"min-w-0 flex-1 truncate\" [class.text-foreground]=\"hasSelection()\">{{ label() }}</span>\n <span\n class=\"bg-surface-raised border-border text-foreground my-0.5 me-0.5 flex shrink-0 items-center rounded-md border px-(--control-padding-sm) text-xs font-medium\"\n >\n {{ buttonText() }}\n </span>\n <input\n #field\n [id]=\"fieldId\"\n type=\"file\"\n class=\"sr-only\"\n [attr.accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() ?? text()\"\n (change)=\"onSelect(field.files)\"\n (blur)=\"cva.markTouched()\"\n />\n </label>\n `,\n host: {\n class: 'block'\n }\n})\nexport class XuiFileInput implements ControlValueAccessor, XFormFieldControl {\n private readonly config = injectXuiFileInputConfig();\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n private readonly formState = createXErrorState();\n protected readonly fieldId = injectUniqueId('xui-file-input');\n\n /** Error state for `xui-form-field`, derived from the optional bound form control. */\n readonly errorState = this.formState.errorState;\n\n /** Points the form field's `<label for>` at the real file input, not the host. */\n readonly controlId: Signal<string | null> = signal(this.fieldId).asReadonly();\n\n get ngControl(): NgControl | null {\n return this.formState.ngControl();\n }\n\n /** The user-defined classes on the trigger. Merged last so they win. */\n readonly class = input<ClassValue>('');\n /** Control height, from the shared control scale. */\n readonly size = input<XuiFileInputVariants['size']>(this.config.size);\n /** Stretch to the available width instead of hugging its contents. */\n readonly fill = input<boolean, BooleanInput>(this.config.fill, { transform: booleanAttribute });\n\n /** Placeholder shown before anything is chosen. */\n readonly text = input('Choose a file…');\n /** Label of the browse button. */\n readonly buttonText = input('Browse');\n /**\n * Passed to the native input's `accept` — a comma-separated list of extensions or MIME types. A filter for the file\n * chooser, not validation: check the chosen files yourself.\n */\n readonly accept = input<string | null>(null);\n /** Allow more than one file to be chosen. */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n /** Accessible name for the control. Falls back to the displayed text, which is the file name once one is chosen. */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** Block interaction and dim the control. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly cva = createXValueAccessor<FileList | null>({\n // The browser forbids programmatically setting a file input's value, so the\n // only write we can honour is a reset to empty.\n onWrite: value => {\n if (!value) {\n this.selection.set(null);\n this.field().nativeElement.value = '';\n }\n },\n disabled: this.disabled\n });\n protected readonly isDisabled = this.cva.disabled;\n\n private readonly selection = signal<FileList | null>(null);\n protected readonly hasSelection = computed(() => (this.selection()?.length ?? 0) > 0);\n\n /** The current selection: the picker's filename(s), or the placeholder. */\n protected readonly label = computed(() => {\n const files = this.selection();\n\n if (!files || files.length === 0) {\n return this.text();\n }\n\n return files.length === 1 ? files[0].name : `${files.length} files`;\n });\n\n protected readonly computedClass = computed(() =>\n xui(fileInputVariants({ size: this.size(), fill: this.fill() }), this.class())\n );\n\n protected onSelect(files: FileList | null): void {\n const value = files && files.length ? files : null;\n this.selection.set(value);\n this.cva.notifyChange(value);\n this.cva.markTouched();\n }\n\n readonly writeValue = this.cva.writeValue;\n readonly registerOnChange = this.cva.registerOnChange;\n readonly registerOnTouched = this.cva.registerOnTouched;\n readonly setDisabledState = this.cva.setDisabledState;\n}\n","import { XuiFileInput } from './lib/file-input';\n\nexport * from './lib/file-input';\nexport * from './lib/file-input.token';\n\nexport const XuiFileInputImports = [XuiFileInput] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xui/file-input",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "Modern Angular 22 UI Library based on TailwindCSS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@angular/forms": "22",
|
|
42
42
|
"@ng-icons/core": "34",
|
|
43
43
|
"@ng-icons/material-icons": "34",
|
|
44
|
-
"@xui/core": "2.2.
|
|
45
|
-
"@xui/icon": "2.2.
|
|
44
|
+
"@xui/core": "2.2.3",
|
|
45
|
+
"@xui/icon": "2.2.3",
|
|
46
46
|
"class-variance-authority": "^0.7.1",
|
|
47
47
|
"clsx": "^2.1.1"
|
|
48
48
|
},
|