@ngstarter-ui/components 21.0.49 → 21.0.51
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/ai/component-registry.json +92 -22
- package/fesm2022/ngstarter-ui-components-confirm.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-confirm.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-country-select.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-currency-select.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-date-format-select.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-date-format-select.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-dialog.mjs +37 -10
- package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-filter-builder.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-form-builder.mjs +218 -12
- package/fesm2022/ngstarter-ui-components-form-builder.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-option.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-option.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-paginator.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-select.mjs +474 -27
- package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-stepper.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-timezone-select.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-timezone-select.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_tokens.scss +1 -1
- package/types/ngstarter-ui-components-dialog.d.ts +13 -4
- package/types/ngstarter-ui-components-form-builder.d.ts +50 -2
- package/types/ngstarter-ui-components-select.d.ts +112 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-timezone-select.mjs","sources":["../../../projects/components/timezone-select/src/timezone-utils.ts","../../../projects/components/timezone-select/src/filter-timezones.pipe.ts","../../../projects/components/timezone-select/src/timezone-select/timezone-select.ts","../../../projects/components/timezone-select/src/timezone-select/timezone-select.html","../../../projects/components/timezone-select/ngstarter-ui-components-timezone-select.ts"],"sourcesContent":["export interface LocalizedTimezone {\n id: string;\n name: string;\n shortName?: string;\n // genericName?: string; // Removed\n offsetName?: string;\n}\n\nexport interface TimezoneGroup {\n name: string; // Changed from groupName\n timezones: LocalizedTimezone[];\n}\n\nexport class TimezoneUtils {\n private static _groupTimezoneIds(timezones: string[]): Record<string, string[]> {\n const grouped: Record<string, string[]> = {};\n for (const tz of timezones) {\n const parts = tz.split('/');\n const groupName = parts[0];\n if (!grouped[groupName]) {\n grouped[groupName] = [];\n }\n grouped[groupName].push(tz);\n }\n for (const group in grouped) {\n grouped[group].sort();\n }\n return grouped;\n }\n\n private static _groupLocalizedTimezonesToArray(\n timezones: LocalizedTimezone[]\n ): TimezoneGroup[] {\n const intermediateGrouped: Record<string, LocalizedTimezone[]> = {};\n for (const tz of timezones) {\n const parts = tz.id.split('/');\n const groupNameKey = parts[0]; // Use a different variable name to avoid confusion with the 'name' property of TimezoneGroup\n if (!intermediateGrouped[groupNameKey]) {\n intermediateGrouped[groupNameKey] = [];\n }\n intermediateGrouped[groupNameKey].push(tz);\n }\n\n const result: TimezoneGroup[] = [];\n const sortedGroupKeys = Object.keys(intermediateGrouped).sort();\n\n for (const groupKey of sortedGroupKeys) {\n const timezonesInGroup = intermediateGrouped[groupKey];\n timezonesInGroup.sort((a, b) => a.name.localeCompare(b.name));\n result.push({\n name: groupKey, // Changed from groupName\n timezones: timezonesInGroup,\n });\n }\n return result;\n }\n\n public static getAll(groupByName: true): Record<string, string[]>;\n public static getAll(groupByName?: false): string[];\n public static getAll(groupByName?: boolean): string[] | Record<string, string[]> {\n let timezonesList: string[];\n if (typeof Intl.supportedValuesOf === 'function') {\n try {\n timezonesList = Intl.supportedValuesOf('timeZone');\n } catch (e) {\n timezonesList = [];\n }\n } else {\n timezonesList = [];\n }\n\n if (groupByName) {\n return TimezoneUtils._groupTimezoneIds(timezonesList);\n } else {\n return [...timezonesList];\n }\n }\n\n private static _getSingleLocalizedName(\n id: string,\n locale: string,\n style: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric', // Kept generic styles in param for flexibility if main name needs it\n currentDate: Date\n ): string | undefined {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n timeZone: id,\n timeZoneName: style,\n });\n const parts = formatter.formatToParts(currentDate);\n const tzNamePart = parts.find(part => part.type === 'timeZoneName');\n return tzNamePart?.value;\n } catch (e) {\n return undefined;\n }\n }\n\n public static getLocalizedAll(\n locale: string,\n groupByName: true,\n timeZoneNameStyle?: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric'\n ): TimezoneGroup[];\n public static getLocalizedAll(\n locale: string,\n groupByName?: false,\n timeZoneNameStyle?: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric'\n ): LocalizedTimezone[];\n\n public static getLocalizedAll(\n locale: string,\n groupByName?: boolean,\n timeZoneNameStyle: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric' = 'long'\n ): LocalizedTimezone[] | TimezoneGroup[] {\n const ianaTimezoneIds = TimezoneUtils.getAll(false);\n const localizedTimezones: LocalizedTimezone[] = [];\n const currentDate = new Date();\n\n for (const id of ianaTimezoneIds) {\n const mainName = TimezoneUtils._getSingleLocalizedName(id, locale, timeZoneNameStyle, currentDate);\n const tzObject: LocalizedTimezone = {\n id: id,\n name: mainName || id,\n shortName: TimezoneUtils._getSingleLocalizedName(id, locale, 'short', currentDate),\n offsetName: TimezoneUtils._getSingleLocalizedName(id, locale, 'longOffset', currentDate),\n };\n localizedTimezones.push(tzObject);\n }\n\n if (groupByName) {\n return TimezoneUtils._groupLocalizedTimezonesToArray(localizedTimezones);\n } else {\n localizedTimezones.sort((a, b) => a.name.localeCompare(b.name));\n return localizedTimezones;\n }\n }\n\n private static readonly ianaGroupToRegionCodeMap: Record<string, string> = {\n 'America': '019', // Americas (UN M49)\n 'Europe': '150', // Europe (UN M49)\n 'Asia': '142', // Asia (UN M49)\n 'Africa': '002', // Africa (UN M49)\n 'Australia': 'AU', // Australia (ISO 3166-1 alpha-2) - для группы IANA 'Australia'\n 'Pacific': '009', // Oceania (UN M49) - для группы IANA 'Pacific'\n 'Antarctica': 'AQ', // Antarctica (ISO 3166-1 alpha-2)\n };\n\n private static _getLocalizedRegionDisplayName(\n ianaGroupName: string,\n locale: string\n ): string {\n const regionCode = TimezoneUtils.ianaGroupToRegionCodeMap[ianaGroupName];\n if (regionCode && typeof Intl.DisplayNames === 'function') {\n try {\n const displayNameService = new Intl.DisplayNames(locale, { type: 'region' });\n return displayNameService.of(regionCode) || ianaGroupName; // Fallback if .of() returns undefined/empty\n } catch (e) {\n // Error (e.g., old environment without support for this region code)\n return ianaGroupName; // Fallback\n }\n }\n return ianaGroupName; // Fallback if no mapping or Intl.DisplayNames not supported\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizedTimezone, TimezoneGroup } from './timezone-utils';\n\n@Pipe({\n name: 'filterTimezones',\n})\nexport class FilterTimezonesPipe implements PipeTransform {\n\n transform(\n value: TimezoneGroup[] | null | undefined,\n searchTerm: string | null | undefined\n ): TimezoneGroup[] | null | undefined {\n\n if (!value) {\n return value;\n }\n if (!searchTerm || searchTerm.trim() === '') {\n return value;\n }\n\n const lowerSearchTerm = searchTerm.trim().toLowerCase();\n const timezoneMatches = (timezone: LocalizedTimezone, term: string): boolean => {\n return (\n timezone.id.toLowerCase().includes(term) ||\n !!(timezone.shortName && timezone.shortName.toLowerCase().includes(term)));\n };\n\n const resultGroups: TimezoneGroup[] = [];\n for (const group of value) { // Iterate directly over TimezoneGroup[]\n const groupNameMatches = group.name.toLowerCase().includes(lowerSearchTerm);\n const filteredTimezonesInGroup = group.timezones.filter(tz => timezoneMatches(tz, lowerSearchTerm));\n\n // A group is included if its name matches OR it has matching timezones after filtering\n if (groupNameMatches || filteredTimezonesInGroup.length > 0) {\n resultGroups.push({\n ...group,\n timezones: filteredTimezonesInGroup // Always use the filtered list of timezones for the group\n });\n }\n }\n return resultGroups;\n }\n}\n","import {\n booleanAttribute, ChangeDetectionStrategy,\n Component, computed, effect, ElementRef,\n forwardRef,\n inject,\n input,\n LOCALE_ID, model,\n OnInit, Renderer2,\n signal, untracked, viewChild, output\n} from '@angular/core';\nimport { TimezoneGroup, TimezoneUtils } from '../timezone-utils';\nimport { Select, Option, SelectHeader, SelectBody, Optgroup } from '@ngstarter-ui/components/select';\nimport {\n ControlValueAccessor, FormsModule,\n NgControl\n} from '@angular/forms';\nimport { FormFieldControl, FORM_FIELD } from '@ngstarter-ui/components/form-field';\nimport { Subject } from 'rxjs';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { FilterTimezonesPipe } from '../filter-timezones.pipe';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Button } from '@ngstarter-ui/components/button';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngs-timezone-select',\n exportAs: 'ngsTimezoneSelect',\n imports: [\n Select,\n Option,\n FormsModule,\n FilterTimezonesPipe,\n Icon,\n Button,\n SelectHeader,\n SelectBody,\n Optgroup\n ],\n providers: [\n {\n provide: FormFieldControl,\n useExisting: forwardRef(() => TimezoneSelect),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './timezone-select.html',\n styleUrl: './timezone-select.scss',\n host: {\n 'class': 'ngs-timezone-select',\n '[id]': 'id',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '(focus)': 'onFocusIn()',\n '(blur)': 'onFocusOut($event)',\n }\n})\nexport class TimezoneSelect implements OnInit, FormFieldControl<any>, ControlValueAccessor {\n protected localeId = inject(LOCALE_ID);\n protected renderer = inject(Renderer2);\n private readonly _focusMonitor = inject(FocusMonitor);\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _formField = inject(FORM_FIELD, { optional: true });\n ngControl = inject(NgControl, { optional: true, self: true });\n\n private searchInput = viewChild.required<ElementRef<HTMLInputElement>>('searchInput');\n private selectRef = viewChild.required<Select>('select');\n\n protected timezoneGroups = signal<TimezoneGroup[]>([]);\n readonly touched = signal(false);\n readonly stateChanges = new Subject<void>();\n readonly controlType = 'ngs-timezone-select';\n readonly id = `ngs-timezone-select-${nextId++}`;\n readonly _userAriaDescribedBy = input<string>('', { alias: 'aria-describedby' });\n readonly locale = input<string>(this.localeId);\n readonly _placeholder = input<string>('', { alias: 'placeholder' });\n readonly _required = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n readonly _disabledByInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n readonly _value = model<string | null>(null, { alias: 'value' });\n protected searchTerm = model('');\n private readonly _focused = signal(false);\n private readonly _disabledByCva = signal(false);\n private readonly _disabled = computed(() => this._disabledByInput() || this._disabledByCva());\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n get focused(): boolean {\n return this._focused() || (this.selectRef?.()?.panelOpen() ?? false);\n }\n\n get empty() {\n return !this._value() || this._value()?.trim() === '';\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n get userAriaDescribedBy() {\n return this._userAriaDescribedBy();\n }\n\n get placeholder(): string {\n return this._placeholder();\n }\n\n get required(): boolean {\n return this._required();\n }\n\n get disabled(): boolean {\n return this._disabled();\n }\n\n get value(): string | null {\n return this._value();\n }\n\n get errorState(): boolean {\n // @ts-ignore\n return this.ngControl?.invalid && this.touched();\n }\n\n constructor() {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n const value = this._value();\n untracked(() => {\n this.onChange(value);\n this.stateChanges.next();\n });\n });\n\n effect(() => {\n // Read signals to trigger effect.\n this._placeholder();\n this._required();\n this._disabled();\n this._focused();\n this._value();\n this.selectRef()?.panelOpen();\n // Propagate state changes.\n untracked(() => this.stateChanges.next());\n });\n }\n\n ngOnInit() {\n const locale = this.locale() || this.localeId;\n this.timezoneGroups.set(TimezoneUtils.getLocalizedAll(locale, true));\n\n if (this._formField) {\n this.renderer.addClass(this._formField.elementRef.nativeElement, 'ngs-form-field-type-timezone-select');\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n onFocusIn() {\n if (!this._focused()) {\n this._focused.set(true);\n this.stateChanges.next();\n }\n }\n\n onFocusOut(event: any) {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget as Element)) {\n this.touched.set(true);\n this._focused.set(false);\n this.onTouched();\n this.stateChanges.next();\n }\n }\n\n onContainerClick(event: MouseEvent) {\n if (this.disabled) {\n return;\n }\n\n this.focus();\n }\n\n setDescribedByIds(ids: string[]) {\n const controlElement = this._elementRef.nativeElement.querySelector('.ngs-select-trigger');\n\n if (controlElement) {\n controlElement.setAttribute('aria-describedby', ids.join(' '));\n }\n }\n\n writeValue(timezone: string | null): void {\n this._updateValue(timezone);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByCva.set(isDisabled);\n }\n\n protected onSelectOpened(): void {\n setTimeout(() => {\n this.searchInput().nativeElement.focus();\n });\n this.opened.emit();\n }\n\n clearSearch(event: MouseEvent): void {\n event.stopPropagation();\n this.searchTerm.set('');\n this.searchInput().nativeElement.focus();\n }\n\n protected onSelectClosed() {\n this._focused.set(false);\n this.searchTerm.set('');\n this.closed.emit();\n this.stateChanges.next();\n }\n\n private _updateValue(value: string | null) {\n const current = this._value();\n\n if (current === value) {\n return;\n }\n\n this._value.set(value);\n }\n\n focus(): void {\n this._elementRef.nativeElement.focus();\n setTimeout(() => {\n this.selectRef().open();\n });\n }\n}\n","<ngs-select #select=\"ngsSelect\"\n [(value)]=\"_value\"\n [aria-describedby]=\"_userAriaDescribedBy()\"\n [disabled]=\"disabled\"\n [placeholder]=\"_placeholder()\"\n (opened)=\"onSelectOpened()\"\n (closed)=\"onSelectClosed()\">\n <ngs-select-header>\n <div class=\"sticky top-0 z-1 bg-surface-container-lowest\">\n <input #searchInput\n type=\"text\"\n placeholder=\"Search...\"\n autocomplete=\"off\"\n [(ngModel)]=\"searchTerm\"\n class=\"w-full text-sm focus:outline-none border-b border-surface-container-high focus:border-b-primary h-14 px-3\">\n @if (searchTerm().trim()) {\n <div class=\"absolute end-1 top-1/2 -translate-y-1/2\">\n <button\n ngsIconButton\n (click)=\"clearSearch($event)\"\n class=\"clear-button\"\n type=\"button\"\n aria-label=\"Clear search\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n }\n </div>\n </ngs-select-header>\n <ngs-select-body>\n @for (timezoneGroup of timezoneGroups() | filterTimezones:searchTerm(); track timezoneGroup.name) {\n <ngs-optgroup [label]=\"timezoneGroup.name\">\n @for (timezone of timezoneGroup.timezones; track timezone) {\n <ngs-option [value]=\"timezone.id\">\n {{ timezone.id }}\n </ngs-option>\n }\n </ngs-optgroup>\n } @empty {\n @if (searchTerm()) {\n <div class=\"text-sm px-4 pt-1 pb-4\">\n <span i18n>Timezone not found</span>.\n </div>\n }\n }\n @if (_value()) {\n <ngs-option [value]=\"_value()\" class=\"hidden\" style=\"display: none\">{{ _value() }}</ngs-option>\n }\n </ngs-select-body>\n</ngs-select>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-timezone-select.mjs","sources":["../../../projects/components/timezone-select/src/timezone-utils.ts","../../../projects/components/timezone-select/src/filter-timezones.pipe.ts","../../../projects/components/timezone-select/src/timezone-select/timezone-select.ts","../../../projects/components/timezone-select/src/timezone-select/timezone-select.html","../../../projects/components/timezone-select/ngstarter-ui-components-timezone-select.ts"],"sourcesContent":["export interface LocalizedTimezone {\n id: string;\n name: string;\n shortName?: string;\n // genericName?: string; // Removed\n offsetName?: string;\n}\n\nexport interface TimezoneGroup {\n name: string; // Changed from groupName\n timezones: LocalizedTimezone[];\n}\n\nexport class TimezoneUtils {\n private static _groupTimezoneIds(timezones: string[]): Record<string, string[]> {\n const grouped: Record<string, string[]> = {};\n for (const tz of timezones) {\n const parts = tz.split('/');\n const groupName = parts[0];\n if (!grouped[groupName]) {\n grouped[groupName] = [];\n }\n grouped[groupName].push(tz);\n }\n for (const group in grouped) {\n grouped[group].sort();\n }\n return grouped;\n }\n\n private static _groupLocalizedTimezonesToArray(\n timezones: LocalizedTimezone[]\n ): TimezoneGroup[] {\n const intermediateGrouped: Record<string, LocalizedTimezone[]> = {};\n for (const tz of timezones) {\n const parts = tz.id.split('/');\n const groupNameKey = parts[0]; // Use a different variable name to avoid confusion with the 'name' property of TimezoneGroup\n if (!intermediateGrouped[groupNameKey]) {\n intermediateGrouped[groupNameKey] = [];\n }\n intermediateGrouped[groupNameKey].push(tz);\n }\n\n const result: TimezoneGroup[] = [];\n const sortedGroupKeys = Object.keys(intermediateGrouped).sort();\n\n for (const groupKey of sortedGroupKeys) {\n const timezonesInGroup = intermediateGrouped[groupKey];\n timezonesInGroup.sort((a, b) => a.name.localeCompare(b.name));\n result.push({\n name: groupKey, // Changed from groupName\n timezones: timezonesInGroup,\n });\n }\n return result;\n }\n\n public static getAll(groupByName: true): Record<string, string[]>;\n public static getAll(groupByName?: false): string[];\n public static getAll(groupByName?: boolean): string[] | Record<string, string[]> {\n let timezonesList: string[];\n if (typeof Intl.supportedValuesOf === 'function') {\n try {\n timezonesList = Intl.supportedValuesOf('timeZone');\n } catch (e) {\n timezonesList = [];\n }\n } else {\n timezonesList = [];\n }\n\n if (groupByName) {\n return TimezoneUtils._groupTimezoneIds(timezonesList);\n } else {\n return [...timezonesList];\n }\n }\n\n private static _getSingleLocalizedName(\n id: string,\n locale: string,\n style: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric', // Kept generic styles in param for flexibility if main name needs it\n currentDate: Date\n ): string | undefined {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n timeZone: id,\n timeZoneName: style,\n });\n const parts = formatter.formatToParts(currentDate);\n const tzNamePart = parts.find(part => part.type === 'timeZoneName');\n return tzNamePart?.value;\n } catch (e) {\n return undefined;\n }\n }\n\n public static getLocalizedAll(\n locale: string,\n groupByName: true,\n timeZoneNameStyle?: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric'\n ): TimezoneGroup[];\n public static getLocalizedAll(\n locale: string,\n groupByName?: false,\n timeZoneNameStyle?: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric'\n ): LocalizedTimezone[];\n\n public static getLocalizedAll(\n locale: string,\n groupByName?: boolean,\n timeZoneNameStyle: 'long' | 'short' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric' = 'long'\n ): LocalizedTimezone[] | TimezoneGroup[] {\n const ianaTimezoneIds = TimezoneUtils.getAll(false);\n const localizedTimezones: LocalizedTimezone[] = [];\n const currentDate = new Date();\n\n for (const id of ianaTimezoneIds) {\n const mainName = TimezoneUtils._getSingleLocalizedName(id, locale, timeZoneNameStyle, currentDate);\n const tzObject: LocalizedTimezone = {\n id: id,\n name: mainName || id,\n shortName: TimezoneUtils._getSingleLocalizedName(id, locale, 'short', currentDate),\n offsetName: TimezoneUtils._getSingleLocalizedName(id, locale, 'longOffset', currentDate),\n };\n localizedTimezones.push(tzObject);\n }\n\n if (groupByName) {\n return TimezoneUtils._groupLocalizedTimezonesToArray(localizedTimezones);\n } else {\n localizedTimezones.sort((a, b) => a.name.localeCompare(b.name));\n return localizedTimezones;\n }\n }\n\n private static readonly ianaGroupToRegionCodeMap: Record<string, string> = {\n 'America': '019', // Americas (UN M49)\n 'Europe': '150', // Europe (UN M49)\n 'Asia': '142', // Asia (UN M49)\n 'Africa': '002', // Africa (UN M49)\n 'Australia': 'AU', // Australia (ISO 3166-1 alpha-2) - для группы IANA 'Australia'\n 'Pacific': '009', // Oceania (UN M49) - для группы IANA 'Pacific'\n 'Antarctica': 'AQ', // Antarctica (ISO 3166-1 alpha-2)\n };\n\n private static _getLocalizedRegionDisplayName(\n ianaGroupName: string,\n locale: string\n ): string {\n const regionCode = TimezoneUtils.ianaGroupToRegionCodeMap[ianaGroupName];\n if (regionCode && typeof Intl.DisplayNames === 'function') {\n try {\n const displayNameService = new Intl.DisplayNames(locale, { type: 'region' });\n return displayNameService.of(regionCode) || ianaGroupName; // Fallback if .of() returns undefined/empty\n } catch (e) {\n // Error (e.g., old environment without support for this region code)\n return ianaGroupName; // Fallback\n }\n }\n return ianaGroupName; // Fallback if no mapping or Intl.DisplayNames not supported\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizedTimezone, TimezoneGroup } from './timezone-utils';\n\n@Pipe({\n name: 'filterTimezones',\n})\nexport class FilterTimezonesPipe implements PipeTransform {\n\n transform(\n value: TimezoneGroup[] | null | undefined,\n searchTerm: string | null | undefined\n ): TimezoneGroup[] | null | undefined {\n\n if (!value) {\n return value;\n }\n if (!searchTerm || searchTerm.trim() === '') {\n return value;\n }\n\n const lowerSearchTerm = searchTerm.trim().toLowerCase();\n const timezoneMatches = (timezone: LocalizedTimezone, term: string): boolean => {\n return (\n timezone.id.toLowerCase().includes(term) ||\n !!(timezone.shortName && timezone.shortName.toLowerCase().includes(term)));\n };\n\n const resultGroups: TimezoneGroup[] = [];\n for (const group of value) { // Iterate directly over TimezoneGroup[]\n const groupNameMatches = group.name.toLowerCase().includes(lowerSearchTerm);\n const filteredTimezonesInGroup = group.timezones.filter(tz => timezoneMatches(tz, lowerSearchTerm));\n\n // A group is included if its name matches OR it has matching timezones after filtering\n if (groupNameMatches || filteredTimezonesInGroup.length > 0) {\n resultGroups.push({\n ...group,\n timezones: filteredTimezonesInGroup // Always use the filtered list of timezones for the group\n });\n }\n }\n return resultGroups;\n }\n}\n","import {\n booleanAttribute, ChangeDetectionStrategy,\n Component, computed, effect, ElementRef,\n forwardRef,\n inject,\n input,\n LOCALE_ID, model,\n OnInit, Renderer2,\n signal, untracked, viewChild, output\n} from '@angular/core';\nimport { TimezoneGroup, TimezoneUtils } from '../timezone-utils';\nimport { Select, Option, SelectHeader, SelectBody, Optgroup } from '@ngstarter-ui/components/select';\nimport {\n ControlValueAccessor, FormsModule,\n NgControl\n} from '@angular/forms';\nimport { FormFieldControl, FORM_FIELD } from '@ngstarter-ui/components/form-field';\nimport { Subject } from 'rxjs';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { FilterTimezonesPipe } from '../filter-timezones.pipe';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Button } from '@ngstarter-ui/components/button';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngs-timezone-select',\n exportAs: 'ngsTimezoneSelect',\n imports: [\n Select,\n Option,\n FormsModule,\n FilterTimezonesPipe,\n Icon,\n Button,\n SelectHeader,\n SelectBody,\n Optgroup\n ],\n providers: [\n {\n provide: FormFieldControl,\n useExisting: forwardRef(() => TimezoneSelect),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './timezone-select.html',\n styleUrl: './timezone-select.scss',\n host: {\n 'class': 'ngs-timezone-select',\n '[id]': 'id',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '(focus)': 'onFocusIn()',\n '(blur)': 'onFocusOut($event)',\n }\n})\nexport class TimezoneSelect implements OnInit, FormFieldControl<any>, ControlValueAccessor {\n protected localeId = inject(LOCALE_ID);\n protected renderer = inject(Renderer2);\n private readonly _focusMonitor = inject(FocusMonitor);\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _formField = inject(FORM_FIELD, { optional: true });\n ngControl = inject(NgControl, { optional: true, self: true });\n\n private searchInput = viewChild.required<ElementRef<HTMLInputElement>>('searchInput');\n private selectRef = viewChild.required<Select>('select');\n\n protected timezoneGroups = signal<TimezoneGroup[]>([]);\n readonly touched = signal(false);\n readonly stateChanges = new Subject<void>();\n readonly controlType = 'ngs-timezone-select';\n readonly id = `ngs-timezone-select-${nextId++}`;\n readonly _userAriaDescribedBy = input<string>('', { alias: 'aria-describedby' });\n readonly locale = input<string>(this.localeId);\n readonly _placeholder = input<string>('', { alias: 'placeholder' });\n readonly _required = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n readonly _disabledByInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n readonly _value = model<string | null>(null, { alias: 'value' });\n protected searchTerm = model('');\n private readonly _focused = signal(false);\n private readonly _disabledByCva = signal(false);\n private readonly _disabled = computed(() => this._disabledByInput() || this._disabledByCva());\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n get focused(): boolean {\n return this._focused() || (this.selectRef?.()?.panelOpen() ?? false);\n }\n\n get empty() {\n return !this._value() || this._value()?.trim() === '';\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n get userAriaDescribedBy() {\n return this._userAriaDescribedBy();\n }\n\n get placeholder(): string {\n return this._placeholder();\n }\n\n get required(): boolean {\n return this._required();\n }\n\n get disabled(): boolean {\n return this._disabled();\n }\n\n get value(): string | null {\n return this._value();\n }\n\n get errorState(): boolean {\n // @ts-ignore\n return this.ngControl?.invalid && this.touched();\n }\n\n constructor() {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n const value = this._value();\n untracked(() => {\n this.onChange(value);\n this.stateChanges.next();\n });\n });\n\n effect(() => {\n // Read signals to trigger effect.\n this._placeholder();\n this._required();\n this._disabled();\n this._focused();\n this._value();\n this.selectRef()?.panelOpen();\n // Propagate state changes.\n untracked(() => this.stateChanges.next());\n });\n }\n\n ngOnInit() {\n const locale = this.locale() || this.localeId;\n this.timezoneGroups.set(TimezoneUtils.getLocalizedAll(locale, true));\n\n if (this._formField) {\n this.renderer.addClass(this._formField.elementRef.nativeElement, 'ngs-form-field-type-timezone-select');\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n onFocusIn() {\n if (!this._focused()) {\n this._focused.set(true);\n this.stateChanges.next();\n }\n }\n\n onFocusOut(event: any) {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget as Element)) {\n this.touched.set(true);\n this._focused.set(false);\n this.onTouched();\n this.stateChanges.next();\n }\n }\n\n onContainerClick(event: MouseEvent) {\n if (this.disabled) {\n return;\n }\n\n this.focus();\n }\n\n setDescribedByIds(ids: string[]) {\n const controlElement = this._elementRef.nativeElement.querySelector('.ngs-select-trigger');\n\n if (controlElement) {\n controlElement.setAttribute('aria-describedby', ids.join(' '));\n }\n }\n\n writeValue(timezone: string | null): void {\n this._updateValue(timezone);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByCva.set(isDisabled);\n }\n\n protected onSelectOpened(): void {\n setTimeout(() => {\n this.searchInput().nativeElement.focus();\n });\n this.opened.emit();\n }\n\n clearSearch(event: MouseEvent): void {\n event.stopPropagation();\n this.searchTerm.set('');\n this.searchInput().nativeElement.focus();\n }\n\n protected onSelectClosed() {\n this._focused.set(false);\n this.searchTerm.set('');\n this.closed.emit();\n this.stateChanges.next();\n }\n\n private _updateValue(value: string | null) {\n const current = this._value();\n\n if (current === value) {\n return;\n }\n\n this._value.set(value);\n }\n\n focus(): void {\n this._elementRef.nativeElement.focus();\n setTimeout(() => {\n this.selectRef().open();\n });\n }\n}\n","<ngs-select #select=\"ngsSelect\"\n [(value)]=\"_value\"\n [aria-describedby]=\"_userAriaDescribedBy()\"\n [disabled]=\"disabled\"\n [placeholder]=\"_placeholder()\"\n (opened)=\"onSelectOpened()\"\n (closed)=\"onSelectClosed()\">\n <ngs-select-header>\n <div class=\"sticky top-0 z-1 bg-surface-container-lowest\">\n <input #searchInput\n type=\"text\"\n placeholder=\"Search...\"\n autocomplete=\"off\"\n [(ngModel)]=\"searchTerm\"\n class=\"w-full text-sm focus:outline-none border-b border-surface-container-high focus:border-b-primary h-14 px-3\">\n @if (searchTerm().trim()) {\n <div class=\"absolute end-1 top-1/2 -translate-y-1/2\">\n <button\n ngsIconButton\n (click)=\"clearSearch($event)\"\n class=\"clear-button\"\n type=\"button\"\n aria-label=\"Clear search\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n }\n </div>\n </ngs-select-header>\n <ngs-select-body>\n @for (timezoneGroup of timezoneGroups() | filterTimezones:searchTerm(); track timezoneGroup.name) {\n <ngs-optgroup [label]=\"timezoneGroup.name\">\n @for (timezone of timezoneGroup.timezones; track timezone) {\n <ngs-option [value]=\"timezone.id\">\n {{ timezone.id }}\n </ngs-option>\n }\n </ngs-optgroup>\n } @empty {\n @if (searchTerm()) {\n <div class=\"text-sm px-4 pt-1 pb-4\">\n <span i18n>Timezone not found</span>.\n </div>\n }\n }\n @if (_value()) {\n <ngs-option [value]=\"_value()\" class=\"hidden\" style=\"display: none\">{{ _value() }}</ngs-option>\n }\n </ngs-select-body>\n</ngs-select>\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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngstarter-ui/components",
|
|
3
3
|
"description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
|
|
4
|
-
"version": "21.0.
|
|
4
|
+
"version": "21.0.51",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/elementarlabsdev/ngstarter.git"
|
package/styles/_tokens.scss
CHANGED
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
--ngs-dropdown-padding-y: --spacing(2);
|
|
183
183
|
--ngs-dropdown-padding: var(--ngs-dropdown-padding-y) var(--ngs-dropdown-padding-x);
|
|
184
184
|
--ngs-dropdown-item-padding-x: --spacing(3);
|
|
185
|
-
--ngs-dropdown-item-padding-y:
|
|
185
|
+
--ngs-dropdown-item-padding-y: --spacing(2);
|
|
186
186
|
--ngs-dropdown-item-padding: var(--ngs-dropdown-item-padding-y) var(--ngs-dropdown-item-padding-x);
|
|
187
187
|
--ngs-dropdown-item-nested-padding-start: calc(var(--ngs-dropdown-item-padding-x) + --spacing(4));
|
|
188
188
|
--ngs-dropdown-item-radius: var(--ngs-control-radius);
|
|
@@ -23,13 +23,15 @@ declare class DialogConfig<D = any> {
|
|
|
23
23
|
ariaLabel?: string | null;
|
|
24
24
|
role?: 'dialog' | 'alertdialog';
|
|
25
25
|
closeOnNavigation?: boolean;
|
|
26
|
+
showCloseButton?: boolean;
|
|
26
27
|
}
|
|
27
28
|
declare const DIALOG_DATA: InjectionToken<any>;
|
|
28
29
|
declare const DIALOG_DEFAULT_OPTIONS: InjectionToken<DialogConfig<any>>;
|
|
29
30
|
|
|
30
31
|
declare class DialogContainer extends CdkDialogContainer implements OnInit {
|
|
31
32
|
private readonly _cdr;
|
|
32
|
-
|
|
33
|
+
private _closeHandler?;
|
|
34
|
+
get showCloseButton(): boolean;
|
|
33
35
|
/** State of the dialog animation. */
|
|
34
36
|
_animationState: 'void' | 'enter' | 'exit';
|
|
35
37
|
/** Emits when an animation state changes. */
|
|
@@ -41,8 +43,10 @@ declare class DialogContainer extends CdkDialogContainer implements OnInit {
|
|
|
41
43
|
_startEnterAnimation(): void;
|
|
42
44
|
/** Starts the dialog exit animation. */
|
|
43
45
|
_startExitAnimation(): void;
|
|
46
|
+
_setCloseHandler(handler: () => void): void;
|
|
47
|
+
protected close(): void;
|
|
44
48
|
static ɵfac: i0.ɵɵFactoryDeclaration<DialogContainer, never>;
|
|
45
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DialogContainer, "ngs-dialog-container",
|
|
49
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DialogContainer, "ngs-dialog-container", ["ngsDialogContainer"], {}, {}, never, never, true, never>;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
declare class DialogRef<T, R = any> {
|
|
@@ -109,7 +113,12 @@ declare class DialogClose {
|
|
|
109
113
|
private _dialog;
|
|
110
114
|
protected _onClick(): void;
|
|
111
115
|
static ɵfac: i0.ɵɵFactoryDeclaration<DialogClose, never>;
|
|
112
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DialogClose, "[ngs-dialog-close],
|
|
116
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DialogClose, "[ngs-dialog-close],[ngsDialogClose]", ["ngsDialogClose"], { "dialogResult": { "alias": "ngs-dialog-close"; "required": false; "isSignal": true; }; "_dialogResult": { "alias": "ngsDialogClose"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
113
117
|
}
|
|
114
118
|
|
|
115
|
-
|
|
119
|
+
declare class DialogHeader {
|
|
120
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DialogHeader, never>;
|
|
121
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DialogHeader, "ngs-dialog-header", ["ngsDialogHeader"], {}, {}, never, ["*"], true, never>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export { DIALOG_DATA, DIALOG_DEFAULT_OPTIONS, Dialog, DialogActions, DialogClose, DialogConfig, DialogContainer, DialogContent, DialogHeader, DialogRef, DialogTitle };
|
|
@@ -2,7 +2,9 @@ import * as _angular_forms from '@angular/forms';
|
|
|
2
2
|
import { ValidatorFn, FormControl, FormGroup, FormArray } from '@angular/forms';
|
|
3
3
|
import * as _angular_core from '@angular/core';
|
|
4
4
|
import { Type, InjectionToken, EnvironmentProviders, Provider, OnDestroy, TemplateRef } from '@angular/core';
|
|
5
|
+
import { SelectDataSource, SelectOptionContentContext, SelectValueContext } from '@ngstarter-ui/components/select';
|
|
5
6
|
import { TreeNodeDropPosition, Tree, TreeNodeDrop } from '@ngstarter-ui/components/tree';
|
|
7
|
+
import * as _ngstarter_ui_components_form_builder from '@ngstarter-ui/components/form-builder';
|
|
6
8
|
import { DateRangeInput } from '@ngstarter-ui/components/datepicker';
|
|
7
9
|
import { RadioGroupOrientation } from '@ngstarter-ui/components/radio';
|
|
8
10
|
import { UploadFileSelectedEvent } from '@ngstarter-ui/components/upload';
|
|
@@ -10,11 +12,26 @@ import { UploadFileSelectedEvent } from '@ngstarter-ui/components/upload';
|
|
|
10
12
|
type FormBuilderFieldWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
|
|
11
13
|
type FormBuilderItemKind = 'field' | 'layout' | 'static';
|
|
12
14
|
type FormBuilderSettingsInheritance = 'field' | 'input-field' | 'layout' | 'layout-container' | 'static' | 'none';
|
|
15
|
+
type FormBuilderSelectOptionsSource = 'static' | 'dataSource';
|
|
13
16
|
interface FormBuilderOption {
|
|
14
17
|
label: string;
|
|
15
18
|
value: any;
|
|
16
19
|
selected?: boolean;
|
|
17
20
|
}
|
|
21
|
+
interface FormBuilderSelectDataSourceOptions {
|
|
22
|
+
pageSize?: number;
|
|
23
|
+
searchable?: boolean;
|
|
24
|
+
searchDebounce?: number;
|
|
25
|
+
minSearchLength?: number;
|
|
26
|
+
loadOnOpen?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface FormBuilderSelectDataSourceDefinition {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
dataSource: SelectDataSource;
|
|
32
|
+
optionContentComponent?: Type<any>;
|
|
33
|
+
valueComponent?: Type<any>;
|
|
34
|
+
}
|
|
18
35
|
interface FormBuilderValidationRule {
|
|
19
36
|
type: 'required' | 'email' | 'minLength' | 'maxLength' | 'min' | 'max' | string;
|
|
20
37
|
value?: any;
|
|
@@ -36,6 +53,9 @@ interface FormBuilderField {
|
|
|
36
53
|
readonly?: boolean;
|
|
37
54
|
width?: FormBuilderFieldWidth;
|
|
38
55
|
options?: FormBuilderOption[];
|
|
56
|
+
optionsSource?: FormBuilderSelectOptionsSource;
|
|
57
|
+
dataSource?: string;
|
|
58
|
+
dataSourceOptions?: FormBuilderSelectDataSourceOptions;
|
|
39
59
|
validation?: FormBuilderValidationRule[];
|
|
40
60
|
settings?: Record<string, any>;
|
|
41
61
|
children?: FormBuilderField[];
|
|
@@ -130,15 +150,19 @@ declare const FORM_BUILDER_ITEMS: InjectionToken<FormBuilderItemDefinition[]>;
|
|
|
130
150
|
declare const FORM_BUILDER_FIELDS: InjectionToken<FormBuilderFieldDefinition[]>;
|
|
131
151
|
declare const FORM_BUILDER_SETTINGS: InjectionToken<FormBuilderSettingsDefinition[]>;
|
|
132
152
|
declare const FORM_BUILDER_UPLOAD_CALLBACK: InjectionToken<FormBuilderUploadCallback>;
|
|
153
|
+
declare const FORM_BUILDER_SELECT_DATA_SOURCES: InjectionToken<FormBuilderSelectDataSourceDefinition[]>;
|
|
133
154
|
declare function formBuilderField(definition: FormBuilderFieldDefinition): FormBuilderFieldDefinition;
|
|
134
155
|
declare function formBuilderItem(definition: FormBuilderItemDefinition): FormBuilderItemDefinition;
|
|
135
156
|
declare function formBuilderSettings(definition: FormBuilderSettingsDefinition): FormBuilderSettingsDefinition;
|
|
136
157
|
declare function provideFormBuilderField(definition: FormBuilderFieldDefinition): Provider;
|
|
137
158
|
declare function provideFormBuilderFields(definitions: FormBuilderFieldDefinition[]): Provider[];
|
|
159
|
+
declare function provideFormBuilderSelectDataSource(definition: FormBuilderSelectDataSourceDefinition): Provider;
|
|
160
|
+
declare function provideFormBuilderSelectDataSources(definitions: FormBuilderSelectDataSourceDefinition[]): Provider[];
|
|
138
161
|
declare function provideFormBuilder(config?: {
|
|
139
162
|
items?: FormBuilderItemDefinition[];
|
|
140
163
|
fields?: FormBuilderFieldDefinition[];
|
|
141
164
|
settings?: FormBuilderSettingsDefinition[];
|
|
165
|
+
selectDataSources?: FormBuilderSelectDataSourceDefinition[];
|
|
142
166
|
uploadCallback?: FormBuilderUploadCallback;
|
|
143
167
|
}): EnvironmentProviders;
|
|
144
168
|
declare const FORM_BUILDER_FIELD_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
|
|
@@ -325,6 +349,14 @@ declare class FormBuilder implements OnDestroy {
|
|
|
325
349
|
}
|
|
326
350
|
declare function createDefaultFormBuilderSchema(): FormBuilderSchema;
|
|
327
351
|
|
|
352
|
+
declare class FormLogic {
|
|
353
|
+
readonly schema: _angular_core.InputSignal<FormBuilderSchema | null>;
|
|
354
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
355
|
+
readonly description: _angular_core.InputSignal<string>;
|
|
356
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormLogic, never>;
|
|
357
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormLogic, "ngs-form-logic", ["ngsFormLogic"], { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
358
|
+
}
|
|
359
|
+
|
|
328
360
|
interface FormRendererCanvasItem extends FormBuilderLayoutItem {
|
|
329
361
|
field?: FormBuilderField;
|
|
330
362
|
section?: FormBuilderSection;
|
|
@@ -369,6 +401,7 @@ declare class FormRenderer {
|
|
|
369
401
|
|
|
370
402
|
declare class FormBuilderFieldHost {
|
|
371
403
|
private readonly providedUploadCallback;
|
|
404
|
+
private readonly selectDataSources;
|
|
372
405
|
readonly field: _angular_core.InputSignal<FormBuilderField>;
|
|
373
406
|
readonly control: _angular_core.InputSignal<FormControl<any>>;
|
|
374
407
|
readonly definitions: _angular_core.InputSignal<FormBuilderFieldDefinition[]>;
|
|
@@ -386,9 +419,21 @@ declare class FormBuilderFieldHost {
|
|
|
386
419
|
protected readonly spacerHeight: _angular_core.Signal<number>;
|
|
387
420
|
protected readonly dateRangeStartValue: _angular_core.Signal<string>;
|
|
388
421
|
protected readonly dateRangeEndValue: _angular_core.Signal<string>;
|
|
422
|
+
protected readonly selectUsesDataSource: _angular_core.Signal<boolean>;
|
|
423
|
+
protected readonly selectDataSourceDefinition: _angular_core.Signal<_ngstarter_ui_components_form_builder.FormBuilderSelectDataSourceDefinition | null>;
|
|
424
|
+
protected readonly selectDataSource: _angular_core.Signal<SelectDataSource | null>;
|
|
425
|
+
protected readonly selectOptionContentComponent: _angular_core.Signal<Type<any> | null>;
|
|
426
|
+
protected readonly selectValueComponent: _angular_core.Signal<Type<any> | null>;
|
|
427
|
+
protected readonly selectPageSize: _angular_core.Signal<number>;
|
|
428
|
+
protected readonly selectSearchable: _angular_core.Signal<boolean>;
|
|
429
|
+
protected readonly selectSearchDebounce: _angular_core.Signal<number>;
|
|
430
|
+
protected readonly selectMinSearchLength: _angular_core.Signal<number>;
|
|
431
|
+
protected readonly selectLoadOnOpen: _angular_core.Signal<boolean>;
|
|
389
432
|
private readonly anchor;
|
|
390
433
|
constructor();
|
|
391
434
|
protected onUploadFilesSelected(event: UploadFileSelectedEvent): Promise<void>;
|
|
435
|
+
protected selectOptionContentInputs(data: unknown, option: SelectOptionContentContext['option'], value: unknown, label: string, selected: boolean, disabled: boolean, multiple: boolean): Record<string, unknown>;
|
|
436
|
+
protected selectValueInputs(data: SelectValueContext['data'], option: SelectValueContext['option'], value: SelectValueContext['value'], label: string, labels: string[], count: number, multiple: boolean): Record<string, unknown>;
|
|
392
437
|
protected onDateRangeChanged(rangeInput: DateRangeInput<any>): void;
|
|
393
438
|
private formatDateRangePart;
|
|
394
439
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormBuilderFieldHost, never>;
|
|
@@ -396,6 +441,7 @@ declare class FormBuilderFieldHost {
|
|
|
396
441
|
}
|
|
397
442
|
|
|
398
443
|
declare class FormBuilderSettingsHost {
|
|
444
|
+
private readonly selectDataSources;
|
|
399
445
|
readonly field: _angular_core.InputSignal<FormBuilderField | null>;
|
|
400
446
|
readonly section: _angular_core.InputSignal<FormBuilderSection | null>;
|
|
401
447
|
readonly schema: _angular_core.InputSignal<FormBuilderSchema>;
|
|
@@ -417,6 +463,8 @@ declare class FormBuilderSettingsHost {
|
|
|
417
463
|
private resolveOwnSettingsSchema;
|
|
418
464
|
private inferSettingsInheritance;
|
|
419
465
|
private baseSettingsSchema;
|
|
466
|
+
private withRegisteredSelectDataSources;
|
|
467
|
+
private withSelectDataSourceOptions;
|
|
420
468
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormBuilderSettingsHost, never>;
|
|
421
469
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormBuilderSettingsHost, "ngs-form-builder-settings-host", ["ngsFormBuilderSettingsHost"], { "field": { "alias": "field"; "required": false; "isSignal": true; }; "section": { "alias": "section"; "required": false; "isSignal": true; }; "schema": { "alias": "schema"; "required": true; "isSignal": true; }; "definitions": { "alias": "definitions"; "required": false; "isSignal": true; }; "settingsDefinitions": { "alias": "settingsDefinitions"; "required": false; "isSignal": true; }; "update": { "alias": "update"; "required": false; "isSignal": true; }; "updateSection": { "alias": "updateSection"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
422
470
|
}
|
|
@@ -476,5 +524,5 @@ declare class BasicFormBuilderSectionSettings {
|
|
|
476
524
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BasicFormBuilderSectionSettings, "ngs-basic-form-builder-section-settings", ["ngsBasicFormBuilderSectionSettings"], { "section": { "alias": "section"; "required": true; "isSignal": true; }; "update": { "alias": "update"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
477
525
|
}
|
|
478
526
|
|
|
479
|
-
export { BasicFormBuilderFieldSettings, BasicFormBuilderLayoutSettings, BasicFormBuilderSectionSettings, DEFAULT_FORM_BUILDER_FIELDS, DEFAULT_FORM_BUILDER_ITEMS, FORM_BUILDER_FIELDS, FORM_BUILDER_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_INPUT_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_ITEMS, FORM_BUILDER_LAYOUT_BASE_SETTINGS_SCHEMA, FORM_BUILDER_LAYOUT_CONTAINER_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SECTION_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SETTINGS, FORM_BUILDER_STATIC_BASE_SETTINGS_SCHEMA, FORM_BUILDER_UPLOAD_CALLBACK, FormBuilder, FormBuilderFieldHost, FormBuilderSettingsHost, FormRenderer, createDefaultFormBuilderSchema, formBuilderField, formBuilderItem, formBuilderSettings, provideFormBuilder, provideFormBuilderField, provideFormBuilderFields, validatorsFromRules };
|
|
480
|
-
export type { FormBuilderComponentImporter, FormBuilderField, FormBuilderFieldChange, FormBuilderFieldDefinition, FormBuilderFieldRenderContext, FormBuilderFieldSettingsContext, FormBuilderFieldWidth, FormBuilderItemDefinition, FormBuilderItemKind, FormBuilderLayoutItem, FormBuilderOption, FormBuilderSchema, FormBuilderSection, FormBuilderSectionSettingsContext, FormBuilderSettingsConfig, FormBuilderSettingsContext, FormBuilderSettingsDefinition, FormBuilderSettingsInheritance, FormBuilderSettingsSchemaFactory, FormBuilderUploadCallback, FormBuilderUploadContext, FormBuilderValidationRule };
|
|
527
|
+
export { BasicFormBuilderFieldSettings, BasicFormBuilderLayoutSettings, BasicFormBuilderSectionSettings, DEFAULT_FORM_BUILDER_FIELDS, DEFAULT_FORM_BUILDER_ITEMS, FORM_BUILDER_FIELDS, FORM_BUILDER_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_INPUT_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_ITEMS, FORM_BUILDER_LAYOUT_BASE_SETTINGS_SCHEMA, FORM_BUILDER_LAYOUT_CONTAINER_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SECTION_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SELECT_DATA_SOURCES, FORM_BUILDER_SETTINGS, FORM_BUILDER_STATIC_BASE_SETTINGS_SCHEMA, FORM_BUILDER_UPLOAD_CALLBACK, FormBuilder, FormBuilderFieldHost, FormBuilderSettingsHost, FormLogic, FormRenderer, createDefaultFormBuilderSchema, formBuilderField, formBuilderItem, formBuilderSettings, provideFormBuilder, provideFormBuilderField, provideFormBuilderFields, provideFormBuilderSelectDataSource, provideFormBuilderSelectDataSources, validatorsFromRules };
|
|
528
|
+
export type { FormBuilderComponentImporter, FormBuilderField, FormBuilderFieldChange, FormBuilderFieldDefinition, FormBuilderFieldRenderContext, FormBuilderFieldSettingsContext, FormBuilderFieldWidth, FormBuilderItemDefinition, FormBuilderItemKind, FormBuilderLayoutItem, FormBuilderOption, FormBuilderSchema, FormBuilderSection, FormBuilderSectionSettingsContext, FormBuilderSelectDataSourceDefinition, FormBuilderSelectDataSourceOptions, FormBuilderSelectOptionsSource, FormBuilderSettingsConfig, FormBuilderSettingsContext, FormBuilderSettingsDefinition, FormBuilderSettingsInheritance, FormBuilderSettingsSchemaFactory, FormBuilderUploadCallback, FormBuilderUploadContext, FormBuilderValidationRule };
|
|
@@ -56,6 +56,63 @@ declare abstract class _Select {
|
|
|
56
56
|
}
|
|
57
57
|
declare const SELECT: InjectionToken<_Select>;
|
|
58
58
|
|
|
59
|
+
interface SelectDataSourceRequest {
|
|
60
|
+
search: string;
|
|
61
|
+
page: number;
|
|
62
|
+
pageSize: number;
|
|
63
|
+
cursor?: unknown;
|
|
64
|
+
selectedValues: unknown[];
|
|
65
|
+
reason: 'initial' | 'open' | 'search' | 'page';
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}
|
|
68
|
+
interface SelectDataSourceOption<T = unknown> {
|
|
69
|
+
label: string;
|
|
70
|
+
value: unknown;
|
|
71
|
+
disabled?: boolean;
|
|
72
|
+
data?: T;
|
|
73
|
+
}
|
|
74
|
+
interface SelectDataSourceResult<T = unknown> {
|
|
75
|
+
items: SelectDataSourceOption<T>[];
|
|
76
|
+
hasMore?: boolean;
|
|
77
|
+
total?: number;
|
|
78
|
+
nextCursor?: unknown;
|
|
79
|
+
}
|
|
80
|
+
type SelectDataSource<T = unknown> = (request: SelectDataSourceRequest) => Promise<SelectDataSourceResult<T> | SelectDataSourceOption<T>[]>;
|
|
81
|
+
|
|
82
|
+
interface SelectOptionContentContext<T = any> {
|
|
83
|
+
$implicit: T;
|
|
84
|
+
data: T;
|
|
85
|
+
option: SelectDataSourceOption<T>;
|
|
86
|
+
value: unknown;
|
|
87
|
+
label: string;
|
|
88
|
+
selected: boolean;
|
|
89
|
+
disabled: boolean;
|
|
90
|
+
multiple: boolean;
|
|
91
|
+
}
|
|
92
|
+
declare class SelectOptionContentDef<T = any> {
|
|
93
|
+
readonly templateRef: TemplateRef<SelectOptionContentContext<T>>;
|
|
94
|
+
static ngTemplateContextGuard<T>(_directive: SelectOptionContentDef<T>, _context: unknown): _context is SelectOptionContentContext<T>;
|
|
95
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectOptionContentDef<any>, never>;
|
|
96
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectOptionContentDef<any>, "ng-template[ngsOptionContentDef]", never, {}, {}, never, never, true, never>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
interface SelectValueContext<T = any> {
|
|
100
|
+
$implicit: T | T[] | null;
|
|
101
|
+
data: T | T[] | null;
|
|
102
|
+
option: SelectDataSourceOption<T> | SelectDataSourceOption<T>[] | null;
|
|
103
|
+
value: unknown | unknown[] | null;
|
|
104
|
+
label: string;
|
|
105
|
+
labels: string[];
|
|
106
|
+
count: number;
|
|
107
|
+
multiple: boolean;
|
|
108
|
+
}
|
|
109
|
+
declare class SelectValueDef<T = any> {
|
|
110
|
+
readonly templateRef: TemplateRef<SelectValueContext<T>>;
|
|
111
|
+
static ngTemplateContextGuard<T>(_directive: SelectValueDef<T>, _context: unknown): _context is SelectValueContext<T>;
|
|
112
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectValueDef<any>, never>;
|
|
113
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDef<any>, "ng-template[ngsSelectValueDef]", never, {}, {}, never, never, true, never>;
|
|
114
|
+
}
|
|
115
|
+
|
|
59
116
|
declare class SelectChange {
|
|
60
117
|
source: Select;
|
|
61
118
|
value: any;
|
|
@@ -82,6 +139,12 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
|
|
|
82
139
|
multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
83
140
|
hideCheckIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
84
141
|
clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
142
|
+
dataSource: _angular_core.InputSignal<SelectDataSource | null | undefined>;
|
|
143
|
+
pageSize: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
144
|
+
searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
145
|
+
searchDebounce: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
146
|
+
minSearchLength: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
147
|
+
loadOnOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
85
148
|
ariaLabel: _angular_core.InputSignal<string | null>;
|
|
86
149
|
tabIndex: _angular_core.InputSignalWithTransform<number, any>;
|
|
87
150
|
ariaDescribedby: _angular_core.InputSignal<string | null>;
|
|
@@ -90,10 +153,14 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
|
|
|
90
153
|
readonly selectionChange: _angular_core.OutputEmitterRef<any>;
|
|
91
154
|
readonly opened: _angular_core.OutputEmitterRef<void>;
|
|
92
155
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
93
|
-
|
|
156
|
+
private projectedOptions;
|
|
157
|
+
private dataSourceOptions;
|
|
158
|
+
options: _angular_core.Signal<_Option[]>;
|
|
94
159
|
optionGroups: _angular_core.Signal<readonly Optgroup[]>;
|
|
95
160
|
customTrigger: _angular_core.Signal<readonly SelectTrigger[]>;
|
|
96
161
|
filterTrigger: _angular_core.Signal<readonly FilterTrigger[]>;
|
|
162
|
+
optionContentDef: _angular_core.Signal<SelectOptionContentDef<any> | undefined>;
|
|
163
|
+
selectValueDef: _angular_core.Signal<SelectValueDef<any> | undefined>;
|
|
97
164
|
overlayDir: _angular_core.Signal<CdkConnectedOverlay | undefined>;
|
|
98
165
|
panel: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
|
|
99
166
|
origin: _angular_core.Signal<CdkOverlayOrigin | undefined>;
|
|
@@ -109,6 +176,22 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
|
|
|
109
176
|
_optionsContentChanges: _angular_core.WritableSignal<number>;
|
|
110
177
|
private _errorState;
|
|
111
178
|
get errorState(): boolean;
|
|
179
|
+
protected readonly asyncOptions: _angular_core.WritableSignal<SelectDataSourceOption<unknown>[]>;
|
|
180
|
+
protected readonly asyncSearch: _angular_core.WritableSignal<string>;
|
|
181
|
+
protected readonly asyncLoading: _angular_core.WritableSignal<boolean>;
|
|
182
|
+
protected readonly asyncLoadingMore: _angular_core.WritableSignal<boolean>;
|
|
183
|
+
protected readonly asyncError: _angular_core.WritableSignal<unknown>;
|
|
184
|
+
protected readonly asyncHasMore: _angular_core.WritableSignal<boolean>;
|
|
185
|
+
protected readonly asyncEnabled: _angular_core.Signal<boolean>;
|
|
186
|
+
private readonly _asyncSelectedCache;
|
|
187
|
+
private _asyncPage;
|
|
188
|
+
private _asyncCursor;
|
|
189
|
+
private _asyncSearchTimer;
|
|
190
|
+
private _asyncRequestId;
|
|
191
|
+
private _asyncAbortController;
|
|
192
|
+
private _lastDataSource;
|
|
193
|
+
private _lastInitialSelectedKey;
|
|
194
|
+
private _destroyed;
|
|
112
195
|
private _empty;
|
|
113
196
|
get empty(): boolean;
|
|
114
197
|
readonly hasValue: _angular_core.Signal<boolean>;
|
|
@@ -122,6 +205,8 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
|
|
|
122
205
|
triggerValue: _angular_core.Signal<string>;
|
|
123
206
|
selectedCount: _angular_core.Signal<number>;
|
|
124
207
|
selectedData: _angular_core.Signal<any>;
|
|
208
|
+
protected readonly selectValueContext: _angular_core.Signal<SelectValueContext<any>>;
|
|
209
|
+
protected readonly selectValueTemplateReady: _angular_core.Signal<boolean>;
|
|
125
210
|
ngAfterContentInit(): void;
|
|
126
211
|
private _resetOptions;
|
|
127
212
|
ngOnDestroy(): void;
|
|
@@ -141,15 +226,38 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
|
|
|
141
226
|
focus(): void;
|
|
142
227
|
_handleKeydown(event: KeyboardEvent): void;
|
|
143
228
|
_onOptionClick(option: _Option): void;
|
|
229
|
+
protected onAsyncSearchInput(value: string): void;
|
|
230
|
+
protected onAsyncContentScroll(event: Event): void;
|
|
231
|
+
protected retryAsyncLoad(): void;
|
|
232
|
+
protected asyncOptionContext(option: SelectDataSourceOption): SelectOptionContentContext;
|
|
144
233
|
private _selectOption;
|
|
234
|
+
private _selectAsyncMultipleOption;
|
|
145
235
|
private _propagateChanges;
|
|
146
236
|
private _setSelectionByValue;
|
|
147
237
|
private _scrollToSelectedOption;
|
|
238
|
+
private _scrollToAsyncOptionValue;
|
|
239
|
+
private _scrollOptionElementIntoContainer;
|
|
240
|
+
private _setScrollTop;
|
|
148
241
|
private _getOptionIndex;
|
|
149
242
|
private _getOptionData;
|
|
150
243
|
private _selectValue;
|
|
244
|
+
private _loadFirstPage;
|
|
245
|
+
private _loadNextPage;
|
|
246
|
+
private _loadAsyncPage;
|
|
247
|
+
private _normalizeAsyncResult;
|
|
248
|
+
private _mergeAsyncOptions;
|
|
249
|
+
private _cacheAsyncSelectedOptions;
|
|
250
|
+
private _resetAsyncState;
|
|
251
|
+
private _selectedValues;
|
|
252
|
+
private _selectedValuesKey;
|
|
253
|
+
private _viewValueForValue;
|
|
254
|
+
private _dataForValue;
|
|
255
|
+
private _displayOptionForValue;
|
|
256
|
+
private _optionForValue;
|
|
257
|
+
private _asyncOptionForValue;
|
|
258
|
+
private _compareValues;
|
|
151
259
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select, never>;
|
|
152
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "
|
|
260
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchDebounce": { "alias": "searchDebounce"; "required": false; "isSignal": true; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; "isSignal": true; }; "loadOnOpen": { "alias": "loadOnOpen"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "projectedOptions", "optionGroups", "customTrigger", "filterTrigger", "optionContentDef", "selectValueDef"], ["ngs-select-trigger", "ngs-filter-trigger", "ngs-select-header", "ngs-select-body", "ngs-optgroup,ngs-option", "*", "ngs-select-footer"], true, never>;
|
|
153
261
|
}
|
|
154
262
|
|
|
155
263
|
declare class SelectHeader {
|
|
@@ -162,4 +270,5 @@ declare class SelectFooter {
|
|
|
162
270
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectFooter, "ngs-select-footer", never, {}, {}, never, ["*"], true, never>;
|
|
163
271
|
}
|
|
164
272
|
|
|
165
|
-
export { FilterTrigger, FilterTriggerValueDirective, SELECT, Select, SelectBody, SelectChange, SelectFooter, SelectHeader, SelectTrigger, _Select };
|
|
273
|
+
export { FilterTrigger, FilterTriggerValueDirective, SELECT, Select, SelectBody, SelectChange, SelectFooter, SelectHeader, SelectOptionContentDef, SelectTrigger, SelectValueDef, _Select };
|
|
274
|
+
export type { SelectDataSource, SelectDataSourceOption, SelectDataSourceRequest, SelectDataSourceResult, SelectOptionContentContext, SelectValueContext };
|