@aquera/nile-elements 1.2.8-beta-1.7 → 1.2.8-beta-1.9
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/demo/index.html +54 -51
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +285 -274
- package/dist/nile-auto-complete/index.cjs.js +1 -1
- package/dist/nile-auto-complete/index.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.esm.js +17 -13
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
- package/dist/nile-auto-complete/portal-manager.cjs.js +2 -0
- package/dist/nile-auto-complete/portal-manager.cjs.js.map +1 -0
- package/dist/nile-auto-complete/portal-manager.esm.js +1 -0
- package/dist/nile-auto-complete/portal-utils.cjs.js +2 -0
- package/dist/nile-auto-complete/portal-utils.cjs.js.map +1 -0
- package/dist/nile-auto-complete/portal-utils.esm.js +1 -0
- package/dist/nile-chip/index.cjs.js +1 -1
- package/dist/nile-chip/index.esm.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.esm.js +14 -7
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js.map +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.esm.js +1 -1
- package/dist/src/nile-auto-complete/nile-auto-complete.d.ts +18 -1
- package/dist/src/nile-auto-complete/nile-auto-complete.js +131 -9
- package/dist/src/nile-auto-complete/nile-auto-complete.js.map +1 -1
- package/dist/src/nile-auto-complete/portal-manager.d.ts +41 -0
- package/dist/src/nile-auto-complete/portal-manager.js +308 -0
- package/dist/src/nile-auto-complete/portal-manager.js.map +1 -0
- package/dist/src/nile-auto-complete/portal-utils.d.ts +31 -0
- package/dist/src/nile-auto-complete/portal-utils.js +166 -0
- package/dist/src/nile-auto-complete/portal-utils.js.map +1 -0
- package/dist/src/nile-chip/nile-chip.d.ts +7 -0
- package/dist/src/nile-chip/nile-chip.js +53 -10
- package/dist/src/nile-chip/nile-chip.js.map +1 -1
- package/dist/src/nile-lite-tooltip/nile-lite-tooltip.js.map +1 -1
- package/dist/src/version.js +2 -2
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-auto-complete/nile-auto-complete.ts +148 -13
- package/src/nile-auto-complete/portal-manager.ts +410 -0
- package/src/nile-auto-complete/portal-utils.ts +221 -0
- package/src/nile-chip/nile-chip.ts +54 -12
- package/src/nile-lite-tooltip/nile-lite-tooltip.ts +4 -3
- package/vscode-html-custom-data.json +17 -2
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Placement,
|
|
3
|
+
type MiddlewareData
|
|
4
|
+
} from '@floating-ui/dom';
|
|
5
|
+
|
|
6
|
+
export class PortalUtils {
|
|
7
|
+
static calculateAvailableSpace(referenceElement: HTMLElement): {
|
|
8
|
+
spaceAbove: number;
|
|
9
|
+
spaceBelow: number;
|
|
10
|
+
viewportHeight: number;
|
|
11
|
+
} {
|
|
12
|
+
const rect = referenceElement.getBoundingClientRect();
|
|
13
|
+
const viewportHeight = window.innerHeight;
|
|
14
|
+
const spaceBelow = viewportHeight - rect.bottom;
|
|
15
|
+
const spaceAbove = rect.top;
|
|
16
|
+
|
|
17
|
+
return { spaceAbove, spaceBelow, viewportHeight };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static getOptimalPlacement(referenceElement: HTMLElement): Placement {
|
|
21
|
+
const { spaceAbove, spaceBelow } = this.calculateAvailableSpace(referenceElement);
|
|
22
|
+
|
|
23
|
+
if (spaceBelow < 200 && spaceAbove > spaceBelow) {
|
|
24
|
+
return 'top';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return 'bottom';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static findBoundaryElements(component: HTMLElement): Element[] | undefined {
|
|
31
|
+
const boundaryElements: Element[] = [];
|
|
32
|
+
|
|
33
|
+
let currentElement = component.parentElement;
|
|
34
|
+
|
|
35
|
+
while (currentElement && currentElement !== document.body) {
|
|
36
|
+
const computedStyle = window.getComputedStyle(currentElement);
|
|
37
|
+
const overflow = computedStyle.overflow;
|
|
38
|
+
const overflowY = computedStyle.overflowY;
|
|
39
|
+
const overflowX = computedStyle.overflowX;
|
|
40
|
+
|
|
41
|
+
if (overflow === 'auto' || overflow === 'scroll' ||
|
|
42
|
+
overflowY === 'auto' || overflowY === 'scroll' ||
|
|
43
|
+
overflowX === 'auto' || overflowX === 'scroll') {
|
|
44
|
+
boundaryElements.push(currentElement);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (currentElement.hasAttribute('data-floating-boundary') ||
|
|
48
|
+
currentElement.classList.contains('floating-boundary') ||
|
|
49
|
+
currentElement.classList.contains('scroll-container')) {
|
|
50
|
+
boundaryElements.push(currentElement);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
currentElement = currentElement.parentElement;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return boundaryElements.length > 0 ? boundaryElements : undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static calculateOptimalHeight(
|
|
60
|
+
referenceRect: { x: number; y: number; width: number; height: number },
|
|
61
|
+
viewportHeight: number,
|
|
62
|
+
placement: Placement
|
|
63
|
+
): number {
|
|
64
|
+
const spaceBelow = viewportHeight - (referenceRect.y + referenceRect.height);
|
|
65
|
+
const spaceAbove = referenceRect.y;
|
|
66
|
+
|
|
67
|
+
if (spaceAbove > spaceBelow) {
|
|
68
|
+
return Math.max(spaceAbove - 20, 100);
|
|
69
|
+
}
|
|
70
|
+
else if (spaceBelow > spaceAbove) {
|
|
71
|
+
return Math.max(spaceBelow - 20, 100);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return Math.max(Math.min(spaceAbove, spaceBelow) - 20, 100);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static extractStylesAsCSS(styles: any): string {
|
|
78
|
+
if (typeof styles === 'string') {
|
|
79
|
+
return styles;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (Array.isArray(styles)) {
|
|
83
|
+
return styles.map(style => this.extractStylesAsCSS(style)).join('\n');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (styles && typeof styles === 'object' && styles.cssText) {
|
|
87
|
+
return styles.cssText;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static generateStyleId(): string {
|
|
94
|
+
return `nile-auto-complete-styles-${Math.random().toString(36).substring(2, 11)}`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static isPositioningOptimal(
|
|
98
|
+
placement: Placement,
|
|
99
|
+
referenceElement: HTMLElement
|
|
100
|
+
): boolean {
|
|
101
|
+
const { spaceAbove, spaceBelow } = this.calculateAvailableSpace(referenceElement);
|
|
102
|
+
|
|
103
|
+
const isAbove = placement.startsWith('top');
|
|
104
|
+
const isBelow = placement.startsWith('bottom');
|
|
105
|
+
|
|
106
|
+
if (isAbove && spaceBelow > spaceAbove) return false;
|
|
107
|
+
if (isBelow && spaceAbove > spaceBelow) return false;
|
|
108
|
+
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
static applyCollisionData(
|
|
113
|
+
element: HTMLElement,
|
|
114
|
+
middlewareData: MiddlewareData,
|
|
115
|
+
placement: Placement
|
|
116
|
+
): void {
|
|
117
|
+
if (middlewareData.flip) {
|
|
118
|
+
const { overflows } = middlewareData.flip;
|
|
119
|
+
|
|
120
|
+
element.setAttribute('data-placement', placement);
|
|
121
|
+
|
|
122
|
+
if (overflows && overflows.length > 0) {
|
|
123
|
+
const overflowPlacements = overflows.map(overflow => overflow.placement).join(',');
|
|
124
|
+
element.setAttribute('data-overflow', overflowPlacements);
|
|
125
|
+
} else {
|
|
126
|
+
element.removeAttribute('data-overflow');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (middlewareData.shift) {
|
|
131
|
+
const { x, y } = middlewareData.shift;
|
|
132
|
+
|
|
133
|
+
if (x !== undefined && y !== undefined && (x !== 0 || y !== 0)) {
|
|
134
|
+
element.setAttribute('data-shift', `${x},${y}`);
|
|
135
|
+
} else {
|
|
136
|
+
element.removeAttribute('data-shift');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (middlewareData.size) {
|
|
141
|
+
const { availableWidth, availableHeight } = middlewareData.size;
|
|
142
|
+
|
|
143
|
+
if (availableWidth !== undefined) {
|
|
144
|
+
element.setAttribute('data-available-width', availableWidth.toString());
|
|
145
|
+
}
|
|
146
|
+
if (availableHeight !== undefined) {
|
|
147
|
+
element.setAttribute('data-available-height', availableHeight.toString());
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export class PortalContentUtils {
|
|
154
|
+
static createBaseMenu(component: any): HTMLElement {
|
|
155
|
+
const menu = document.createElement('nile-menu');
|
|
156
|
+
menu.id = 'content-menu';
|
|
157
|
+
menu.className = component.enableVirtualScroll ? 'virtualized__menu' : '';
|
|
158
|
+
|
|
159
|
+
if (component.enableVirtualScroll) {
|
|
160
|
+
menu.setAttribute('exportparts', 'menu__items-wrapper:options__wrapper');
|
|
161
|
+
} else {
|
|
162
|
+
menu.setAttribute('exportparts', 'menu__items-wrapper:options__wrapper');
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return menu;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
static addMenuItems(menu: HTMLElement, component: any): void {
|
|
169
|
+
const menuItems = component.menuItems || [];
|
|
170
|
+
|
|
171
|
+
menuItems.forEach((item: any) => {
|
|
172
|
+
const menuItem = this.createMenuItem(item, component);
|
|
173
|
+
menu.appendChild(menuItem);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static createMenuItem(item: any, component: any): HTMLElement {
|
|
178
|
+
const menuItem = document.createElement('nile-menu-item');
|
|
179
|
+
const value = component.renderItemFunction ? component.renderItemFunction(item) : item;
|
|
180
|
+
menuItem.setAttribute('value', String(value));
|
|
181
|
+
menuItem.innerHTML = String(value);
|
|
182
|
+
return menuItem;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
static createPortalMenu(component: any): HTMLElement {
|
|
186
|
+
const menu = this.createBaseMenu(component);
|
|
187
|
+
this.addMenuItems(menu, component);
|
|
188
|
+
return menu;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
static updatePortalMenuItems(clonedMenu: HTMLElement, component: any): void {
|
|
192
|
+
if (!clonedMenu) return;
|
|
193
|
+
|
|
194
|
+
// Remove existing items
|
|
195
|
+
const existingItems = clonedMenu.querySelectorAll('nile-menu-item');
|
|
196
|
+
existingItems.forEach(item => item.remove());
|
|
197
|
+
|
|
198
|
+
// Add updated items
|
|
199
|
+
this.addMenuItems(clonedMenu, component);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export class PortalEventUtils {
|
|
204
|
+
static setupPortalEventListeners(clonedMenu: HTMLElement, component: any): void {
|
|
205
|
+
if (!clonedMenu) return;
|
|
206
|
+
|
|
207
|
+
this.setupMenuSelectListeners(clonedMenu, component);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static setupMenuSelectListeners(clonedMenu: HTMLElement, component: any): void {
|
|
211
|
+
if (!clonedMenu) return;
|
|
212
|
+
|
|
213
|
+
clonedMenu.addEventListener('nile-select', (event: Event) => {
|
|
214
|
+
const customEvent = event as CustomEvent;
|
|
215
|
+
if (component.handleSelect) {
|
|
216
|
+
// Call the component's handleSelect method directly
|
|
217
|
+
component.handleSelect(customEvent);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -17,6 +17,7 @@ import { styles } from './nile-chip.css';
|
|
|
17
17
|
import { classMap } from 'lit/directives/class-map.js';
|
|
18
18
|
import { HasSlotController } from '../internal/slot';
|
|
19
19
|
import NileElement, { NileFormControl } from '../internal/nile-element';
|
|
20
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
20
21
|
|
|
21
22
|
interface CustomEventDetail {
|
|
22
23
|
value: string;
|
|
@@ -39,6 +40,7 @@ export class NileChip extends NileElement {
|
|
|
39
40
|
@state() inputValue: string = '';
|
|
40
41
|
|
|
41
42
|
@state() isDropdownOpen: boolean = false;
|
|
43
|
+
@state() tooltips: (string | null)[] = [];
|
|
42
44
|
|
|
43
45
|
@query('nile-auto-complete') autoComplete!: any;
|
|
44
46
|
|
|
@@ -78,6 +80,12 @@ export class NileChip extends NileElement {
|
|
|
78
80
|
/** Disables the input. */
|
|
79
81
|
@property({ type: Boolean, reflect: true }) disabled = false;
|
|
80
82
|
|
|
83
|
+
/**
|
|
84
|
+
* When true, the dropdown menu will be appended to the document body instead of the parent container.
|
|
85
|
+
* This is useful when the parent has overflow: hidden, clip-path, or transform applied.
|
|
86
|
+
*/
|
|
87
|
+
@property({ type: Boolean, reflect: true }) portal = false;
|
|
88
|
+
|
|
81
89
|
// AUTO-COMPLETE-OPTIONS
|
|
82
90
|
|
|
83
91
|
/** Virtual scroll in dropdown options. */
|
|
@@ -103,6 +111,9 @@ export class NileChip extends NileElement {
|
|
|
103
111
|
|
|
104
112
|
@property({ attribute:false}) renderItemFunction: (item:any)=>string = (item:any)=>item;
|
|
105
113
|
|
|
114
|
+
|
|
115
|
+
@property({ type: Boolean }) showTooltip: boolean = false;
|
|
116
|
+
|
|
106
117
|
protected updated(changedProperties: PropertyValues): void {
|
|
107
118
|
super.updated(changedProperties);
|
|
108
119
|
if (changedProperties.has('autoCompleteOptions')) {
|
|
@@ -131,7 +142,6 @@ export class NileChip extends NileElement {
|
|
|
131
142
|
}
|
|
132
143
|
}
|
|
133
144
|
|
|
134
|
-
|
|
135
145
|
private handleDocumentClick = (event: MouseEvent) => {
|
|
136
146
|
const path = event.composedPath();
|
|
137
147
|
if (!path.includes(this)) {
|
|
@@ -199,21 +209,35 @@ export class NileChip extends NileElement {
|
|
|
199
209
|
'nile-chip--open': this.isDropdownOpen,
|
|
200
210
|
})}
|
|
201
211
|
>
|
|
202
|
-
${this.tags.map(
|
|
203
|
-
|
|
212
|
+
${this.tags.map((tag, index) => {
|
|
213
|
+
const tooltipContent = this.tooltips[index];
|
|
214
|
+
const tagTemplate = html`
|
|
204
215
|
<nile-tag
|
|
205
216
|
class=${classMap({
|
|
206
217
|
'nile-chip__tags': true,
|
|
207
218
|
})}
|
|
208
|
-
.variant=${this.errorIndexes.includes(index)
|
|
219
|
+
.variant=${this.errorIndexes.includes(index)
|
|
220
|
+
? 'error'
|
|
221
|
+
: 'normal'}
|
|
209
222
|
@nile-remove=${() => this.handleRemove(tag)}
|
|
210
|
-
|
|
211
|
-
|
|
223
|
+
removable
|
|
224
|
+
?pill=${this.tagVariant !== 'normal'}
|
|
212
225
|
>
|
|
213
|
-
${tag}
|
|
226
|
+
${unsafeHTML(tag)}
|
|
214
227
|
</nile-tag>
|
|
215
|
-
|
|
216
|
-
|
|
228
|
+
`;
|
|
229
|
+
|
|
230
|
+
if (this.showTooltip && tooltipContent) {
|
|
231
|
+
return html`
|
|
232
|
+
<nile-lite-tooltip allowHTML .content=${tooltipContent}>
|
|
233
|
+
${tagTemplate}
|
|
234
|
+
</nile-lite-tooltip>
|
|
235
|
+
`;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return tagTemplate;
|
|
239
|
+
})}
|
|
240
|
+
|
|
217
241
|
<div class="nile-chip__auto-complete">
|
|
218
242
|
${this.noAutoComplete
|
|
219
243
|
? html`
|
|
@@ -236,6 +260,7 @@ export class NileChip extends NileElement {
|
|
|
236
260
|
.allMenuItems=${this.filteredAutoCompleteOptions}
|
|
237
261
|
.filterFunction=${this.filterFunction}
|
|
238
262
|
.renderItemFunction=${this.renderItemFunction}
|
|
263
|
+
.showTooltips=${this.showTooltip}
|
|
239
264
|
.loading="${this.loading}"
|
|
240
265
|
.value=${this.inputValue}
|
|
241
266
|
?isDropdownOpen=${this.isDropdownOpen}
|
|
@@ -243,6 +268,7 @@ export class NileChip extends NileElement {
|
|
|
243
268
|
.noOutline=${true}
|
|
244
269
|
.noPadding=${true}
|
|
245
270
|
.disabled=${this.disabled}
|
|
271
|
+
.portal=${this.portal}
|
|
246
272
|
openOnFocus
|
|
247
273
|
exportparts="options__wrapper, input, base"
|
|
248
274
|
.placeholder=${this.placeholder}
|
|
@@ -270,9 +296,25 @@ export class NileChip extends NileElement {
|
|
|
270
296
|
|
|
271
297
|
private handleSelect(event: CustomEvent<CustomEventDetail>) {
|
|
272
298
|
// Add the selected value to the tags array only if it doesn't already exist
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
299
|
+
const selectedValue = event.detail.value;
|
|
300
|
+
const selectedOption = this.autoCompleteOptions.find(
|
|
301
|
+
(opt) => opt.name === selectedValue || opt.id === selectedValue
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
let tooltipContent: string | null = null;
|
|
305
|
+
|
|
306
|
+
if (selectedOption?.tooltip) {
|
|
307
|
+
const { content, for: showFor } = selectedOption.tooltip;
|
|
308
|
+
if (!showFor || showFor === 'tag') {
|
|
309
|
+
tooltipContent = content;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (!this.noDuplicates || !this.tags.includes(selectedValue)) {
|
|
314
|
+
this.tags = [...this.tags, selectedValue];
|
|
315
|
+
this.tooltips = [...this.tooltips, tooltipContent];
|
|
316
|
+
|
|
317
|
+
this.emit('nile-chip-change', { value: this.tags});
|
|
276
318
|
this.resetInput();
|
|
277
319
|
}
|
|
278
320
|
}
|
|
@@ -260,7 +260,7 @@ export class NileliteTooltip extends NileElement {
|
|
|
260
260
|
}
|
|
261
261
|
return;
|
|
262
262
|
}
|
|
263
|
-
|
|
263
|
+
|
|
264
264
|
const children = Array.from(this.querySelectorAll('*'));
|
|
265
265
|
if (children.length > 0) {
|
|
266
266
|
this.tooltipInstances = children.map(child => {
|
|
@@ -270,7 +270,7 @@ export class NileliteTooltip extends NileElement {
|
|
|
270
270
|
instance.popper.querySelector('.tippy-box')?.classList.add(this.size);
|
|
271
271
|
return instance;
|
|
272
272
|
});
|
|
273
|
-
|
|
273
|
+
|
|
274
274
|
if (this.singleton && this.tooltipInstances.length > 1) {
|
|
275
275
|
this.singletonInstance = createSingleton(this.tooltipInstances, {
|
|
276
276
|
delay: [75, 0],
|
|
@@ -278,13 +278,14 @@ export class NileliteTooltip extends NileElement {
|
|
|
278
278
|
moveTransition: 'transform 0.15s ease-out',
|
|
279
279
|
});
|
|
280
280
|
}
|
|
281
|
-
|
|
281
|
+
|
|
282
282
|
if (this.open) {
|
|
283
283
|
if (this.singletonInstance) this.singletonInstance.show();
|
|
284
284
|
else this.tooltipInstances.forEach(t => t.show());
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
+
|
|
288
289
|
|
|
289
290
|
private destroyTooltips(): void {
|
|
290
291
|
this.tooltipInstances?.forEach(t => t.destroy());
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"name": "nile-auto-complete",
|
|
65
|
-
"description": "Attributes:\n\n * `disabled` {`boolean`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `enableVirtualScroll` {`boolean`} - \n\n * `openOnFocus` {`boolean`} - \n\n * `value` {`string`} - \n\n * `placeholder` {`string`} - \n\n * `noBorder` {`boolean`} - \n\n * `noOutline` {`boolean`} - \n\n * `noPadding` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `allMenuItems` - \n\nProperties:\n\n * `styles` - \n\n * `dropdownElement` - \n\n * `disabled` {`boolean`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `enableVirtualScroll` {`boolean`} - \n\n * `openOnFocus` {`boolean`} - \n\n * `value` {`string`} - \n\n * `placeholder` {`string`} - \n\n * `noBorder` {`boolean`} - \n\n * `noOutline` {`boolean`} - \n\n * `noPadding` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `filterFunction` - \n\n * `renderItemFunction` - \n\n * `allMenuItems` - \n\n * `menuItems` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
|
65
|
+
"description": "Attributes:\n\n * `disabled` {`boolean`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\n * `enableVirtualScroll` {`boolean`} - \n\n * `openOnFocus` {`boolean`} - \n\n * `value` {`string`} - \n\n * `placeholder` {`string`} - \n\n * `noBorder` {`boolean`} - \n\n * `noOutline` {`boolean`} - \n\n * `noPadding` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `allMenuItems` - \n\nProperties:\n\n * `styles` - \n\n * `dropdownElement` - \n\n * `inputElement` - \n\n * `disabled` {`boolean`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\n * `portalManager` - \n\n * `enableVirtualScroll` {`boolean`} - \n\n * `openOnFocus` {`boolean`} - \n\n * `value` {`string`} - \n\n * `placeholder` {`string`} - \n\n * `noBorder` {`boolean`} - \n\n * `noOutline` {`boolean`} - \n\n * `noPadding` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `filterFunction` - \n\n * `renderItemFunction` - \n\n * `allMenuItems` - \n\n * `menuItems` - \n\n * `handleWindowResize` - \n\n * `handleWindowScroll` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
|
66
66
|
"attributes": [
|
|
67
67
|
{
|
|
68
68
|
"name": "disabled",
|
|
@@ -74,6 +74,11 @@
|
|
|
74
74
|
"description": "`isDropdownOpen` {`boolean`} - \n\nProperty: isDropdownOpen\n\nDefault: false",
|
|
75
75
|
"valueSet": "v"
|
|
76
76
|
},
|
|
77
|
+
{
|
|
78
|
+
"name": "portal",
|
|
79
|
+
"description": "`portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\nProperty: portal\n\nDefault: false",
|
|
80
|
+
"valueSet": "v"
|
|
81
|
+
},
|
|
77
82
|
{
|
|
78
83
|
"name": "enableVirtualScroll",
|
|
79
84
|
"description": "`enableVirtualScroll` {`boolean`} - \n\nProperty: enableVirtualScroll\n\nDefault: false",
|
|
@@ -726,7 +731,7 @@
|
|
|
726
731
|
},
|
|
727
732
|
{
|
|
728
733
|
"name": "nile-chip",
|
|
729
|
-
"description": "Attributes:\n\n * `warning` {`boolean`} - Sets the input to a warning state, changing its visual appearance.\n\n * `noAutoComplete` {`boolean`} - \n\n * `error` {`boolean`} - Sets the input to an error state, changing its visual appearance.\n\n * `success` {`boolean`} - Sets the input to a success state, changing its visual appearance.\n\n * `noDuplicates` {`boolean`} - Disables the duplicate entries.\n\n * `label` {`string`} - The input's label. If you need to display HTML, use the `label` slot instead.\n\n * `tagVariant` {`string`} - \n\n * `acceptUserInput` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `clearable` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `placeholder` {`string`} - Placeholder text to show as a hint when the input is empty.\n\n * `readonly` {`boolean`} - Makes the input readonly.\n\n * `disabled` {`boolean`} - Disables the input.\n\n * `enableVirtualScroll` {`boolean`} - Virtual scroll in dropdown options.\n\n * `autoCompleteOptions` {`any[]`} - \n\n * `filteredAutoCompleteOptions` {`any[]`} - \n\n * `value` {`any[]`} - \n\n * `noWrap` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `errorIndexes` {`number[]`} - \n\n * `help-text` {`string`} - \n\n * `error-message` {`string`} - \n\nProperties:\n\n * `hasSlotController` - \n\n * `tags` {`string[]`} - \n\n * `inputValue` {`string`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `autoComplete` - \n\n * `warning` {`boolean`} - Sets the input to a warning state, changing its visual appearance.\n\n * `noAutoComplete` {`boolean`} - \n\n * `error` {`boolean`} - Sets the input to an error state, changing its visual appearance.\n\n * `success` {`boolean`} - Sets the input to a success state, changing its visual appearance.\n\n * `noDuplicates` {`boolean`} - Disables the duplicate entries.\n\n * `label` {`string`} - The input's label. If you need to display HTML, use the `label` slot instead.\n\n * `tagVariant` {`string`} - \n\n * `acceptUserInput` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `clearable` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `placeholder` {`string`} - Placeholder text to show as a hint when the input is empty.\n\n * `readonly` {`boolean`} - Makes the input readonly.\n\n * `disabled` {`boolean`} - Disables the input.\n\n * `enableVirtualScroll` {`boolean`} - Virtual scroll in dropdown options.\n\n * `autoCompleteOptions` {`any[]`} - \n\n * `filteredAutoCompleteOptions` {`any[]`} - \n\n * `value` {`any[]`} - \n\n * `noWrap` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `errorIndexes` {`number[]`} - \n\n * `helpText` {`string`} - \n\n * `errorMessage` {`string`} - \n\n * `filterFunction` - \n\n * `renderItemFunction` - \n\n * `handleDocumentClick` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
|
734
|
+
"description": "Attributes:\n\n * `warning` {`boolean`} - Sets the input to a warning state, changing its visual appearance.\n\n * `noAutoComplete` {`boolean`} - \n\n * `error` {`boolean`} - Sets the input to an error state, changing its visual appearance.\n\n * `success` {`boolean`} - Sets the input to a success state, changing its visual appearance.\n\n * `noDuplicates` {`boolean`} - Disables the duplicate entries.\n\n * `label` {`string`} - The input's label. If you need to display HTML, use the `label` slot instead.\n\n * `tagVariant` {`string`} - \n\n * `acceptUserInput` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `clearable` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `placeholder` {`string`} - Placeholder text to show as a hint when the input is empty.\n\n * `readonly` {`boolean`} - Makes the input readonly.\n\n * `disabled` {`boolean`} - Disables the input.\n\n * `portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\n * `enableVirtualScroll` {`boolean`} - Virtual scroll in dropdown options.\n\n * `autoCompleteOptions` {`any[]`} - \n\n * `filteredAutoCompleteOptions` {`any[]`} - \n\n * `value` {`any[]`} - \n\n * `noWrap` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `errorIndexes` {`number[]`} - \n\n * `help-text` {`string`} - \n\n * `error-message` {`string`} - \n\n * `showTooltip` {`boolean`} - \n\nProperties:\n\n * `hasSlotController` - \n\n * `tags` {`string[]`} - \n\n * `inputValue` {`string`} - \n\n * `isDropdownOpen` {`boolean`} - \n\n * `tooltips` {`(string | null)[]`} - \n\n * `autoComplete` - \n\n * `warning` {`boolean`} - Sets the input to a warning state, changing its visual appearance.\n\n * `noAutoComplete` {`boolean`} - \n\n * `error` {`boolean`} - Sets the input to an error state, changing its visual appearance.\n\n * `success` {`boolean`} - Sets the input to a success state, changing its visual appearance.\n\n * `noDuplicates` {`boolean`} - Disables the duplicate entries.\n\n * `label` {`string`} - The input's label. If you need to display HTML, use the `label` slot instead.\n\n * `tagVariant` {`string`} - \n\n * `acceptUserInput` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `clearable` {`boolean`} - Adds a clear button when the input is not empty.\n\n * `placeholder` {`string`} - Placeholder text to show as a hint when the input is empty.\n\n * `readonly` {`boolean`} - Makes the input readonly.\n\n * `disabled` {`boolean`} - Disables the input.\n\n * `portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\n * `enableVirtualScroll` {`boolean`} - Virtual scroll in dropdown options.\n\n * `autoCompleteOptions` {`any[]`} - \n\n * `filteredAutoCompleteOptions` {`any[]`} - \n\n * `value` {`any[]`} - \n\n * `noWrap` {`boolean`} - \n\n * `loading` {`boolean`} - \n\n * `errorIndexes` {`number[]`} - \n\n * `helpText` {`string`} - \n\n * `errorMessage` {`string`} - \n\n * `filterFunction` - \n\n * `renderItemFunction` - \n\n * `showTooltip` {`boolean`} - \n\n * `handleDocumentClick` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
|
730
735
|
"attributes": [
|
|
731
736
|
{
|
|
732
737
|
"name": "warning",
|
|
@@ -785,6 +790,11 @@
|
|
|
785
790
|
"description": "`disabled` {`boolean`} - Disables the input.\n\nProperty: disabled\n\nDefault: false",
|
|
786
791
|
"valueSet": "v"
|
|
787
792
|
},
|
|
793
|
+
{
|
|
794
|
+
"name": "portal",
|
|
795
|
+
"description": "`portal` {`boolean`} - When true, the dropdown menu will be appended to the document body instead of the parent container.\nThis is useful when the parent has overflow: hidden, clip-path, or transform applied.\n\nProperty: portal\n\nDefault: false",
|
|
796
|
+
"valueSet": "v"
|
|
797
|
+
},
|
|
788
798
|
{
|
|
789
799
|
"name": "enableVirtualScroll",
|
|
790
800
|
"description": "`enableVirtualScroll` {`boolean`} - Virtual scroll in dropdown options.\n\nProperty: enableVirtualScroll\n\nDefault: false",
|
|
@@ -823,6 +833,11 @@
|
|
|
823
833
|
{
|
|
824
834
|
"name": "error-message",
|
|
825
835
|
"description": "`error-message` {`string`} - \n\nProperty: errorMessage\n\nDefault: "
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"name": "showTooltip",
|
|
839
|
+
"description": "`showTooltip` {`boolean`} - \n\nProperty: showTooltip\n\nDefault: false",
|
|
840
|
+
"valueSet": "v"
|
|
826
841
|
}
|
|
827
842
|
]
|
|
828
843
|
},
|