@tailng-ui/primitives 0.42.0 → 0.43.0
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.
- package/package.json +2 -2
- package/src/lib/form/autocomplete/tng-autocomplete.d.ts +2 -2
- package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +5 -3
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailng-ui/primitives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"@angular/core": "^21.1.0",
|
|
20
|
-
"@tailng-ui/cdk": "^0.
|
|
20
|
+
"@tailng-ui/cdk": "^0.30.0",
|
|
21
21
|
"tslib": "^2.3.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
/** Emitted when user commits a free-form value (Enter with no active option). */
|
|
4
|
-
export
|
|
4
|
+
export type TngAutocompleteCreateEvent = {
|
|
5
5
|
query: string;
|
|
6
|
-
}
|
|
6
|
+
};
|
|
7
7
|
export declare class TngAutocomplete<T = unknown> {
|
|
8
8
|
readonly hostElement: any;
|
|
9
9
|
readonly open: import("@angular/core").ModelSignal<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tng-autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;;AAGlF,iFAAiF;AACjF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,CAAA;AAED,qBAKa,eAAe,CAAC,CAAC,GAAG,OAAO;IACtC,QAAQ,CAAC,WAAW,MAAiD;IAErE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,oCAAoC;IACpC,SAAgB,KAAK,gDAAyB;IAC9C,+DAA+D;IAC/D,SAAgB,WAAW,+CAAyB;IACpD,2EAA2E;IAC3E,SAAgB,MAAM,+CAAyB;IAC/C,yFAAyF;IACzF,SAAgB,MAAM,uEAAwC;IAE9D,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA0C;IAC7D,mFAAmF;IAC5E,eAAe,UAAS;IAC/B,4GAA4G;IACrG,kBAAkB,UAAS;IAElC,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAEnD,gDAAgD;IAClD,SAAgB,KAAK,8CAAqB;IAE1C,uEAAuE;IACvE,SAAgB,WAAW,mDAAoB;IAG/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,cAAc,CAAU;IAGtD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAEM,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAC7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAC7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAC9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAEtC,UAAU,IAAI,IAAI;IAKlB,KAAK,IAAI,IAAI;IAEb,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAM3B,aAAa,CAAC,GAAG,EAAE,yBAAyB,GAAG,IAAI,GAAG,IAAI;IAI1D,aAAa,IAAI,yBAAyB,GAAG,IAAI;yCAlF7C,eAAe;2CAAf,eAAe;CAqF3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tng-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport type { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\n\n/** Emitted when user commits a free-form value (Enter with no active option). */\nexport type TngAutocompleteCreateEvent = {\n query: string;\n}\n\n@Directive({\n selector: '[tngAutocomplete]',\n exportAs: 'tngAutocomplete',\n providers: [{ provide: TNG_AUTOCOMPLETE, useExisting: TngAutocomplete }],\n})\nexport class TngAutocomplete<T = unknown> {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Value of the selected option. */\n public readonly value = model<T | null>(null);\n /** Allow free-form create when Enter with no active option. */\n public readonly allowCreate = input<boolean>(false);\n /** When true, blocks free-form create (strict = must select from list). */\n public readonly strict = input<boolean>(false);\n /** Emitted when user presses Enter with no active option and allowCreate and !strict. */\n public readonly create = output<TngAutocompleteCreateEvent>();\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngAutocompleteListboxApi | null = null;\n /** Set by overlay before programmatic focus restore to prevent reopen-on-focus. */\n public _restoringFocus = false;\n /** Set by trigger when create is emitted; listbox effect skips sync to avoid overwriting consumer value. */\n public _createJustEmitted = false;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n /** Current input query (used for filtering). */\n public readonly query = model<string>('');\n\n /** Emitted when query changes (typing OR open-on-focus empty emit). */\n public readonly queryChange = output<string>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete' as const;\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n public setContentId(id: string | null): void { this._contentId = id; }\n public getContentId(): string | null { return this._contentId; }\n public setListboxId(id: string | null): void { this._listboxId = id; }\n public getListboxId(): string | null { return this._listboxId; }\n public setActiveDescendantId(id: string | null): void { this._activeId = id; }\n public getActiveDescendantId(): string | null { return this._activeId; }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n public close(): void { this.open.set(false); }\n\n public selectValue(value: T): void {\n if (this.disabled()) return;\n this.value.set(value);\n this.close();\n }\n\n public setListboxApi(api: TngAutocompleteListboxApi | null): void {\n this._listboxApi = api;\n }\n\n public getListboxApi(): TngAutocompleteListboxApi | null {\n return this._listboxApi;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tng-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;;;;AAK7E,qBAea,sBAAsB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,yBAAyB;IACnF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgD;IAC7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IA2B1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,YAAY,IAAI,IAAI;IAOpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCA3DzD,sBAAsB;2CAAtB,sBAAsB;CAmFlC;AAED,qBASa,qBAAqB,CAAC,CAAC;IAElC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,qBAAqB,CAAU;yCAFlD,qBAAqB;2CAArB,qBAAqB;CAGjC"}
|
|
@@ -2,7 +2,7 @@ import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untra
|
|
|
2
2
|
import { createTngIdFactory } from '@tailng-ui/cdk';
|
|
3
3
|
import { TngListboxDirective } from '../listbox/listbox.directive';
|
|
4
4
|
import { TngOptionDirective } from '../listbox/option.directive';
|
|
5
|
-
import { TNG_LISTBOX_FORCE_TYPEAHEAD } from '../listbox/tokens';
|
|
5
|
+
import { TNG_LISTBOX_FORCE_TYPEAHEAD, TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, } from '../listbox/tokens';
|
|
6
6
|
import { normalizeToSingle } from '../../internal/combobox';
|
|
7
7
|
import { TNG_AUTOCOMPLETE_LISTBOX } from './tng-autocomplete.listbox.tokens';
|
|
8
8
|
import { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';
|
|
@@ -80,7 +80,8 @@ export class TngAutocompleteListbox {
|
|
|
80
80
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteListbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
81
81
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngAutocompleteListbox, isStandalone: true, selector: "[tngAutocompleteListbox]", host: { listeners: { "valueChange": "onListboxValueChange($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.id": "this.id" } }, providers: [
|
|
82
82
|
{ provide: TNG_AUTOCOMPLETE_LISTBOX, useExisting: TngAutocompleteListbox },
|
|
83
|
-
{ provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false }
|
|
83
|
+
{ provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },
|
|
84
|
+
{ provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },
|
|
84
85
|
], hostDirectives: [{ directive: i1.TngListboxDirective, inputs: ["orientation", "orientation", "direction", "direction", "disabled", "disabled", "loop", "loop", "value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 });
|
|
85
86
|
}
|
|
86
87
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteListbox, decorators: [{
|
|
@@ -89,7 +90,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
89
90
|
selector: '[tngAutocompleteListbox]',
|
|
90
91
|
providers: [
|
|
91
92
|
{ provide: TNG_AUTOCOMPLETE_LISTBOX, useExisting: TngAutocompleteListbox },
|
|
92
|
-
{ provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false }
|
|
93
|
+
{ provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },
|
|
94
|
+
{ provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },
|
|
93
95
|
],
|
|
94
96
|
hostDirectives: [
|
|
95
97
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"tng-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TngListboxDirective } from '../listbox/listbox.directive';\nimport { TngOptionDirective } from '../listbox/option.directive';\nimport {\n TNG_LISTBOX_FORCE_TYPEAHEAD,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n} from '../listbox/tokens';\nimport { normalizeToSingle } from '../../internal/combobox';\nimport type { TngAutocomplete } from './tng-autocomplete';\nimport { TNG_AUTOCOMPLETE_LISTBOX } from './tng-autocomplete.listbox.tokens';\nimport { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\n\nconst createListboxId = createTngIdFactory('tng-autocomplete-listbox');\n\n@Directive({\n selector: '[tngAutocompleteListbox]',\n providers: [\n { provide: TNG_AUTOCOMPLETE_LISTBOX, useExisting: TngAutocompleteListbox },\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },\n { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngAutocompleteListbox<T = unknown> implements TngAutocompleteListboxApi {\n private readonly autocomplete = inject<TngAutocomplete<T>>(TNG_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.autocomplete.setListboxId(this.id);\n this.autocomplete.setListboxApi(this);\n\n effect(() => {\n const v = this.autocomplete.value();\n if (this.autocomplete.open()) return;\n\n if (this.autocomplete._createJustEmitted) {\n this.autocomplete._createJustEmitted = false;\n return;\n }\n\n const current = untracked(this.listbox.value);\n const currentSingle = normalizeToSingle(current);\n if (Object.is(currentSingle, v)) return;\n this.listbox.value.set(v as T | null);\n });\n\n this.destroyRef.onDestroy(() => {\n this.autocomplete.setListboxId(null);\n this.autocomplete.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n commitActive(): void {\n const value = this.listbox.getActiveValue();\n if (value === undefined) return;\n this.autocomplete.selectValue(value as T);\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.autocomplete.disabled()) return;\n\n const next = normalizeToSingle(value);\n if (Object.is(next, this.autocomplete.value())) {\n if (this.autocomplete.open() && next !== null) {\n this.autocomplete.selectValue(next as T);\n }\n return;\n }\n\n if (!this.autocomplete.open()) {\n this.autocomplete.value.set(next as T | null);\n return;\n }\n\n if (next === null) {\n // When overlay is open, null usually means the previous selection dropped out of\n // filtered options (user is typing to filter). Preserve value and stay open.\n return;\n }\n\n this.autocomplete.selectValue(next);\n }\n}\n\n@Directive({\n selector: '[tngAutocompleteOption]',\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngAutocompleteOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-option' as const;\n}\n"]}
|