@retailcrm/embed-ui-v1-components 0.9.7 → 0.9.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/assets/stylesheets/motion.less +1 -0
- package/assets/stylesheets/typography.less +9 -0
- package/dist/host.cjs +939 -304
- package/dist/host.css +320 -2
- package/dist/host.d.ts +76 -11
- package/dist/host.js +940 -305
- package/dist/remote.cjs +860 -0
- package/dist/remote.d.ts +564 -0
- package/dist/remote.js +861 -1
- package/package.json +1 -1
package/dist/remote.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { defineComponent, h,
|
|
1
|
+
import { defineComponent, h, reactive, computed, inject, ref, provide, watch, createBlock, openBlock, unref, withCtx, createVNode, createElementBlock, createCommentVNode, renderSlot, toDisplayString, createElementVNode, onBeforeMount, onBeforeUnmount, mergeProps, createSlots, onMounted, createTextVNode, getCurrentInstance } from "vue";
|
|
2
2
|
import "@remote-ui/rpc";
|
|
3
|
+
import isEqual from "lodash.isequal";
|
|
3
4
|
import { preview } from "@retailcrm/image-preview";
|
|
4
5
|
import { format } from "date-fns";
|
|
5
6
|
const REMOTE_SLOT = "RemoteSlot";
|
|
@@ -171,6 +172,14 @@ const UiTag = defineRemoteComponent(
|
|
|
171
172
|
UiTagType,
|
|
172
173
|
["click", "focus", "blur", "remove"]
|
|
173
174
|
);
|
|
175
|
+
var SIZE$1 = /* @__PURE__ */ ((SIZE2) => {
|
|
176
|
+
SIZE2["XS"] = "xs";
|
|
177
|
+
SIZE2["SM"] = "sm";
|
|
178
|
+
SIZE2["MD"] = "md";
|
|
179
|
+
SIZE2["LG"] = "lg";
|
|
180
|
+
SIZE2["XL"] = "xl";
|
|
181
|
+
return SIZE2;
|
|
182
|
+
})(SIZE$1 || {});
|
|
174
183
|
const events = [
|
|
175
184
|
"input",
|
|
176
185
|
"keydown",
|
|
@@ -209,6 +218,850 @@ const UiYandexMap = defineRemoteComponent(
|
|
|
209
218
|
"update:address"
|
|
210
219
|
]
|
|
211
220
|
);
|
|
221
|
+
const UiMenuItemType = "UiMenuItem";
|
|
222
|
+
const UiMenuItem = defineRemoteComponent(
|
|
223
|
+
UiMenuItemType,
|
|
224
|
+
[],
|
|
225
|
+
[
|
|
226
|
+
"default",
|
|
227
|
+
"avatar",
|
|
228
|
+
"leading-icon",
|
|
229
|
+
"description",
|
|
230
|
+
"trailing-icon"
|
|
231
|
+
]
|
|
232
|
+
);
|
|
233
|
+
const UiMenuItemGroupType = "UiMenuItemGroup";
|
|
234
|
+
const UiMenuItemGroup = defineRemoteComponent(
|
|
235
|
+
UiMenuItemGroupType,
|
|
236
|
+
[],
|
|
237
|
+
[
|
|
238
|
+
"default",
|
|
239
|
+
"option",
|
|
240
|
+
"label",
|
|
241
|
+
"quantity"
|
|
242
|
+
]
|
|
243
|
+
);
|
|
244
|
+
const UiSelectTriggerType = "UiSelectTrigger";
|
|
245
|
+
const UiSelectTrigger = defineRemoteComponent(
|
|
246
|
+
UiSelectTriggerType,
|
|
247
|
+
[
|
|
248
|
+
"input",
|
|
249
|
+
"focus",
|
|
250
|
+
"blur",
|
|
251
|
+
"clear",
|
|
252
|
+
"update:value",
|
|
253
|
+
"update:expanded"
|
|
254
|
+
]
|
|
255
|
+
);
|
|
256
|
+
const UiSelectPopperType = "UiSelectPopper";
|
|
257
|
+
const UiSelectPopper = defineRemoteComponent(
|
|
258
|
+
UiSelectPopperType,
|
|
259
|
+
[
|
|
260
|
+
"update:visible",
|
|
261
|
+
"show",
|
|
262
|
+
"hide",
|
|
263
|
+
"shown",
|
|
264
|
+
"hidden",
|
|
265
|
+
"dispose"
|
|
266
|
+
]
|
|
267
|
+
);
|
|
268
|
+
const UiSelectOptionType = "UiSelectOption";
|
|
269
|
+
defineRemoteComponent(
|
|
270
|
+
UiSelectOptionType
|
|
271
|
+
);
|
|
272
|
+
const pluralization_en_GB = (choice) => choice === 1 ? 0 : 1;
|
|
273
|
+
const pluralization_es_ES = (choice) => choice === 1 ? 0 : 1;
|
|
274
|
+
const pluralization_ru_RU = (choice, choicesLength) => {
|
|
275
|
+
if (choicesLength === 2) {
|
|
276
|
+
return choice === 1 ? 0 : 1;
|
|
277
|
+
}
|
|
278
|
+
const mod100 = choice % 100;
|
|
279
|
+
return mod100 % 10 === 1 && mod100 !== 11 ? 0 : mod100 % 10 >= 2 && mod100 % 10 <= 4 && !(mod100 >= 10 && mod100 < 15) ? 1 : 2;
|
|
280
|
+
};
|
|
281
|
+
const get = (messages, path) => {
|
|
282
|
+
let i = 0;
|
|
283
|
+
let slice = messages[path[0]];
|
|
284
|
+
while (i < path.length) {
|
|
285
|
+
if (typeof slice === "string" && i + 1 === path.length) {
|
|
286
|
+
return slice;
|
|
287
|
+
}
|
|
288
|
+
if (typeof slice !== "object") {
|
|
289
|
+
return void 0;
|
|
290
|
+
}
|
|
291
|
+
slice = slice[path[++i]];
|
|
292
|
+
}
|
|
293
|
+
return slice;
|
|
294
|
+
};
|
|
295
|
+
const replace = (message, values) => {
|
|
296
|
+
return Object.keys(values).reduce((message2, key) => {
|
|
297
|
+
const pattern = new RegExp(`\\{${key}\\}`, "g");
|
|
298
|
+
const replacement = String(values[key]);
|
|
299
|
+
return message2.replace(pattern, replacement);
|
|
300
|
+
}, message);
|
|
301
|
+
};
|
|
302
|
+
const compile = (messages, path, values = void 0) => {
|
|
303
|
+
const message = get(messages, path);
|
|
304
|
+
if (typeof message === "string" && values) {
|
|
305
|
+
return replace(message, values);
|
|
306
|
+
}
|
|
307
|
+
return message;
|
|
308
|
+
};
|
|
309
|
+
const fail = (message) => {
|
|
310
|
+
throw new Error(message);
|
|
311
|
+
};
|
|
312
|
+
const t = (locale, messages, path, values = void 0) => {
|
|
313
|
+
const keys = path.split(".");
|
|
314
|
+
if (locale) {
|
|
315
|
+
const message = compile(messages[locale] ?? {}, keys, values);
|
|
316
|
+
return typeof message !== "object" ? message : fail(`Translation for "${locale}:${path}" is not translatable`);
|
|
317
|
+
}
|
|
318
|
+
return void 0;
|
|
319
|
+
};
|
|
320
|
+
const plural = (template, choice, rule) => {
|
|
321
|
+
const forms = template.split("|");
|
|
322
|
+
return forms[rule(choice, forms.length)];
|
|
323
|
+
};
|
|
324
|
+
class I18n {
|
|
325
|
+
parent;
|
|
326
|
+
messages;
|
|
327
|
+
computed;
|
|
328
|
+
pluralization;
|
|
329
|
+
fallback;
|
|
330
|
+
constructor(options = void 0, parent = void 0) {
|
|
331
|
+
this.parent = parent;
|
|
332
|
+
this.messages = options?.messages ?? {};
|
|
333
|
+
this.computed = options?.computed ?? {};
|
|
334
|
+
this.pluralization = {
|
|
335
|
+
"en-GB": pluralization_en_GB,
|
|
336
|
+
"es-ES": pluralization_es_ES,
|
|
337
|
+
"ru-RU": pluralization_ru_RU,
|
|
338
|
+
...options?.pluralization ?? {}
|
|
339
|
+
};
|
|
340
|
+
this.fallback = options?.fallback;
|
|
341
|
+
}
|
|
342
|
+
t(locale, path, values = void 0) {
|
|
343
|
+
try {
|
|
344
|
+
const _t = (locale2) => t(locale2, this.messages, path, values);
|
|
345
|
+
return _t(locale) ?? _t(this.fallback) ?? fail(`Translation for "${path}" does not exists`);
|
|
346
|
+
} catch (e) {
|
|
347
|
+
if (this.parent) {
|
|
348
|
+
return this.parent.t(locale, path, values);
|
|
349
|
+
}
|
|
350
|
+
throw e;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
tc(locale, path, choice, values = void 0) {
|
|
354
|
+
return plural(
|
|
355
|
+
this.t(
|
|
356
|
+
locale,
|
|
357
|
+
path,
|
|
358
|
+
values
|
|
359
|
+
),
|
|
360
|
+
choice,
|
|
361
|
+
this.pluralization[locale]
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
compute(locale, key, values) {
|
|
365
|
+
const computed2 = this.computed[key];
|
|
366
|
+
if (computed2) {
|
|
367
|
+
return computed2(localize$3(this, locale), values);
|
|
368
|
+
}
|
|
369
|
+
if (this.parent) {
|
|
370
|
+
return this.parent.compute(locale, key, values);
|
|
371
|
+
}
|
|
372
|
+
return fail("Key " + key + " is not registered");
|
|
373
|
+
}
|
|
374
|
+
extend(options) {
|
|
375
|
+
return new I18n({
|
|
376
|
+
pluralization: this.pluralization,
|
|
377
|
+
fallback: this.fallback,
|
|
378
|
+
...options
|
|
379
|
+
}, this);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
const localize$3 = (i18n, locale) => ({
|
|
383
|
+
t(path, values = void 0) {
|
|
384
|
+
return i18n.t(locale, path, values);
|
|
385
|
+
},
|
|
386
|
+
tc(path, choice, values = void 0) {
|
|
387
|
+
return i18n.tc(locale, path, choice, values);
|
|
388
|
+
},
|
|
389
|
+
compute(key, values) {
|
|
390
|
+
return i18n.compute(locale, key, values);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
const fallback = "en-GB";
|
|
394
|
+
const define = (options = void 0, parent = void 0) => {
|
|
395
|
+
const i18n = new I18n({
|
|
396
|
+
...options,
|
|
397
|
+
fallback
|
|
398
|
+
}, parent);
|
|
399
|
+
const extend = (i18n2, options2 = void 0) => options2 ? i18n2.extend(options2) : i18n2;
|
|
400
|
+
return {
|
|
401
|
+
i18n,
|
|
402
|
+
init: (locale, options2 = void 0) => localize$3(
|
|
403
|
+
extend(i18n, options2),
|
|
404
|
+
locale
|
|
405
|
+
),
|
|
406
|
+
fallback
|
|
407
|
+
};
|
|
408
|
+
};
|
|
409
|
+
const selected$2 = "Selected";
|
|
410
|
+
const search$2 = { "placeholder": "", "noResult": "Nothing found" };
|
|
411
|
+
const messages_en_GB = {
|
|
412
|
+
selected: selected$2,
|
|
413
|
+
search: search$2
|
|
414
|
+
};
|
|
415
|
+
const selected$1 = "Seleccionado";
|
|
416
|
+
const search$1 = { "placeholder": "", "noResult": "No se ha encontrado" };
|
|
417
|
+
const messages_es_ES = {
|
|
418
|
+
selected: selected$1,
|
|
419
|
+
search: search$1
|
|
420
|
+
};
|
|
421
|
+
const selected = "Выбрано";
|
|
422
|
+
const search = { "placeholder": "", "noResult": "Ничего не найдено" };
|
|
423
|
+
const messages_ru_RU = {
|
|
424
|
+
selected,
|
|
425
|
+
search
|
|
426
|
+
};
|
|
427
|
+
const _18n = define({
|
|
428
|
+
messages: {
|
|
429
|
+
"en-GB": messages_en_GB,
|
|
430
|
+
"es-ES": messages_es_ES,
|
|
431
|
+
"ru-RU": messages_ru_RU
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
var PLACEMENT = /* @__PURE__ */ ((PLACEMENT2) => {
|
|
435
|
+
PLACEMENT2["TOP"] = "top";
|
|
436
|
+
PLACEMENT2["TOP_START"] = "top-start";
|
|
437
|
+
PLACEMENT2["TOP_END"] = "top-end";
|
|
438
|
+
PLACEMENT2["BOTTOM"] = "bottom";
|
|
439
|
+
PLACEMENT2["BOTTOM_START"] = "bottom-start";
|
|
440
|
+
PLACEMENT2["BOTTOM_END"] = "bottom-end";
|
|
441
|
+
PLACEMENT2["LEFT"] = "left";
|
|
442
|
+
PLACEMENT2["LEFT_START"] = "left-start";
|
|
443
|
+
return PLACEMENT2;
|
|
444
|
+
})(PLACEMENT || {});
|
|
445
|
+
const escapeSpecialSymbols = (text) => text.replace(
|
|
446
|
+
/([\\^$.*+?()[\]{}|=!<>:-])/g,
|
|
447
|
+
"\\$1"
|
|
448
|
+
);
|
|
449
|
+
const highlight = (text, term, style) => text.replace(
|
|
450
|
+
new RegExp(`(${escapeSpecialSymbols(term)})`, "gi"),
|
|
451
|
+
`<span style="${style}">$1</span>`
|
|
452
|
+
);
|
|
453
|
+
let counter = 0;
|
|
454
|
+
const uid = (prefix = "ui-v1-select") => `${prefix}-${++counter}`;
|
|
455
|
+
const IsSelectedKey = Symbol("UiSelectedIsSelected");
|
|
456
|
+
const RegisterKey = Symbol("UiSelectRegister");
|
|
457
|
+
const SyncKey = Symbol("UiSelectSync");
|
|
458
|
+
const UnregisterKey = Symbol("UiSelectUnregister");
|
|
459
|
+
const ToggleKey = Symbol("UiSelectToggle");
|
|
460
|
+
const FilterKey = Symbol("UiSelectFilter");
|
|
461
|
+
const FilteredKey = Symbol("UiSelectFiltered");
|
|
462
|
+
const TickerKey = Symbol("UiSelectTicker");
|
|
463
|
+
const MultipleKey = Symbol("UiSelectMultiple");
|
|
464
|
+
const FastenedKey = Symbol("UiSelectFastened");
|
|
465
|
+
const UnregisterOptionKey = Symbol("UiSelectUnregisterOption");
|
|
466
|
+
const RegisterOptionKey = Symbol("UiSelectRegisterOption");
|
|
467
|
+
const RegisterGroupKey = Symbol("UiSelectOptionGroupRegister");
|
|
468
|
+
const UnregisterGroupKey = Symbol("UiSelectOptionGroupUnregister");
|
|
469
|
+
const RegisterHeaderOptionKey = Symbol("UiSelectOptionGroupRegisterHeaderOption");
|
|
470
|
+
const UnregisterHeaderOptionKey = Symbol("UiSelectOptionGroupUnregisterHeaderOption");
|
|
471
|
+
const I18nInjectKey = Symbol("$embedI18n");
|
|
472
|
+
const _hoisted_1$3 = {
|
|
473
|
+
key: 0,
|
|
474
|
+
class: "ui-v1-select__no-results-text"
|
|
475
|
+
};
|
|
476
|
+
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
477
|
+
__name: "UiSelect",
|
|
478
|
+
props: {
|
|
479
|
+
/** Атрибут id корневого элемента выпадающего списка. Должен быть уникальным на странице */
|
|
480
|
+
id: {
|
|
481
|
+
type: String,
|
|
482
|
+
default: void 0
|
|
483
|
+
},
|
|
484
|
+
/** Атрибут value, содержащий выбранный элемент из выпадающего списка */
|
|
485
|
+
value: {
|
|
486
|
+
type: null,
|
|
487
|
+
default: void 0
|
|
488
|
+
},
|
|
489
|
+
/** Атрибут placeholder нативного поля ввода input */
|
|
490
|
+
placeholder: {
|
|
491
|
+
type: String,
|
|
492
|
+
default: "test"
|
|
493
|
+
},
|
|
494
|
+
/** Отображает иконку сброса введённого или выбранного значения в виде крестика */
|
|
495
|
+
clearable: {
|
|
496
|
+
type: Boolean,
|
|
497
|
+
default: false
|
|
498
|
+
},
|
|
499
|
+
/** Фильтрация строк выпадающего списка на соответствие введённого выражения в input */
|
|
500
|
+
filterable: {
|
|
501
|
+
type: Boolean,
|
|
502
|
+
default: false
|
|
503
|
+
},
|
|
504
|
+
/** Подсвечивает поле как содержащее некорректное значение */
|
|
505
|
+
invalid: {
|
|
506
|
+
type: Boolean,
|
|
507
|
+
default: false
|
|
508
|
+
},
|
|
509
|
+
/** Устанавливает поле ввода в состояние доступное только для чтения */
|
|
510
|
+
readonly: {
|
|
511
|
+
type: Boolean,
|
|
512
|
+
default: false
|
|
513
|
+
},
|
|
514
|
+
/** Блокировка поля ввода */
|
|
515
|
+
disabled: {
|
|
516
|
+
type: Boolean,
|
|
517
|
+
default: false
|
|
518
|
+
},
|
|
519
|
+
/** Функция для проверки равенства элементов */
|
|
520
|
+
equalsFn: {
|
|
521
|
+
type: Function,
|
|
522
|
+
default: (a, b) => a === b
|
|
523
|
+
},
|
|
524
|
+
/**
|
|
525
|
+
* Сторона цели, у которой появится плавающий элемент,
|
|
526
|
+
* или подробный объект настройки положения и адаптации положения при нехватке места
|
|
527
|
+
*/
|
|
528
|
+
placement: {
|
|
529
|
+
type: String,
|
|
530
|
+
validator: (placement) => Object.values(PLACEMENT).includes(placement),
|
|
531
|
+
default: PLACEMENT.BOTTOM
|
|
532
|
+
},
|
|
533
|
+
/** События целевого элемента, по которым производится переключение видимости */
|
|
534
|
+
targetTriggers: {
|
|
535
|
+
type: [Array, Object],
|
|
536
|
+
default: () => ({
|
|
537
|
+
show: ["click"]
|
|
538
|
+
})
|
|
539
|
+
},
|
|
540
|
+
/** События плавающего элемента, по которым производится переключение видимости */
|
|
541
|
+
popperTriggers: {
|
|
542
|
+
type: [Array, Object],
|
|
543
|
+
default: () => []
|
|
544
|
+
},
|
|
545
|
+
/**
|
|
546
|
+
* Флаг, устанавливающий ширину выпадающего списка по ширине целевого элемента.
|
|
547
|
+
* По-умолчанию отключает такое поведение
|
|
548
|
+
*/
|
|
549
|
+
popperFitTrigger: {
|
|
550
|
+
type: Boolean,
|
|
551
|
+
default: false
|
|
552
|
+
},
|
|
553
|
+
/** Стиль для плавающего элемента */
|
|
554
|
+
popperClass: {
|
|
555
|
+
type: String,
|
|
556
|
+
default: null
|
|
557
|
+
},
|
|
558
|
+
/** Набор свойств плавающего элемента. See @/common/components/popper */
|
|
559
|
+
popperOptions: {
|
|
560
|
+
type: Object,
|
|
561
|
+
default: () => ({})
|
|
562
|
+
},
|
|
563
|
+
/** Размер поля ввода */
|
|
564
|
+
textboxSize: {
|
|
565
|
+
type: String,
|
|
566
|
+
validator: (size) => Object.values(SIZE$1).includes(size),
|
|
567
|
+
default: SIZE$1.SM
|
|
568
|
+
},
|
|
569
|
+
/** Наличие множественного выбора среди элементов выпадающего списка */
|
|
570
|
+
multiple: {
|
|
571
|
+
type: Boolean,
|
|
572
|
+
default: false
|
|
573
|
+
},
|
|
574
|
+
/** Состояние открытия выпадающего списка */
|
|
575
|
+
expanded: {
|
|
576
|
+
type: Boolean,
|
|
577
|
+
default: false
|
|
578
|
+
},
|
|
579
|
+
/** Устанавливает в качестве выводимого в input значения только содержимое placeholder */
|
|
580
|
+
placeholderOnly: {
|
|
581
|
+
type: Boolean,
|
|
582
|
+
default: false
|
|
583
|
+
},
|
|
584
|
+
/** Добавляет анимацию показала полной строки при переполнении */
|
|
585
|
+
ticker: {
|
|
586
|
+
type: Boolean,
|
|
587
|
+
default: false
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
setup(__props) {
|
|
591
|
+
const props = __props;
|
|
592
|
+
const state = reactive({
|
|
593
|
+
expanded: props.expanded,
|
|
594
|
+
filter: "",
|
|
595
|
+
value: props.value
|
|
596
|
+
});
|
|
597
|
+
const i18n = computed(() => _18n.init(inject(I18nInjectKey, null)?.locale ?? _18n.fallback));
|
|
598
|
+
const noResult = computed(() => i18n.value.t("search.noResult", { filter: state.filter }));
|
|
599
|
+
const optionsRegistry = ref([]);
|
|
600
|
+
const selection = computed(() => {
|
|
601
|
+
const model = arraify(state.value);
|
|
602
|
+
const selectedOptions = [];
|
|
603
|
+
model.forEach((item) => {
|
|
604
|
+
const option = optionsRegistry.value.find((o) => equals(o.value, item));
|
|
605
|
+
if (option) {
|
|
606
|
+
selectedOptions.push(option);
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
return selectedOptions;
|
|
610
|
+
});
|
|
611
|
+
const arraify = (value) => Array.isArray(value) ? [...value] : typeof value === "number" || typeof value === "boolean" || value ? [value] : [];
|
|
612
|
+
const equals = (a, b) => props.equalsFn(a, b);
|
|
613
|
+
const contains = (array, value) => array.some((v) => equals(v, value));
|
|
614
|
+
provide(RegisterKey, (option) => {
|
|
615
|
+
if (optionsRegistry.value.some((item) => item.id === option.id)) {
|
|
616
|
+
throw new Error(`[UiSelect] Component with id ${option.id} already registered. Unregister it before using again.`);
|
|
617
|
+
}
|
|
618
|
+
optionsRegistry.value.push(option);
|
|
619
|
+
});
|
|
620
|
+
provide(SyncKey, (id, data) => {
|
|
621
|
+
const option = optionsRegistry.value.find((option2) => option2.id === id);
|
|
622
|
+
if (option) {
|
|
623
|
+
option.label = data.label;
|
|
624
|
+
option.value = data.value;
|
|
625
|
+
}
|
|
626
|
+
});
|
|
627
|
+
provide(UnregisterKey, (id) => {
|
|
628
|
+
const index = optionsRegistry.value.findIndex((option) => option.id === id);
|
|
629
|
+
if (index !== -1) {
|
|
630
|
+
optionsRegistry.value.splice(index, 1);
|
|
631
|
+
}
|
|
632
|
+
});
|
|
633
|
+
provide(IsSelectedKey, computed(() => (value) => {
|
|
634
|
+
return Array.isArray(state.value) ? contains(state.value, value) : equals(state.value, value);
|
|
635
|
+
}));
|
|
636
|
+
provide(ToggleKey, (value) => {
|
|
637
|
+
if (props.multiple) {
|
|
638
|
+
const model = arraify(state.value);
|
|
639
|
+
const index = model.findIndex((item) => equals(item, value));
|
|
640
|
+
if (index !== -1) {
|
|
641
|
+
model.splice(index, 1);
|
|
642
|
+
} else {
|
|
643
|
+
model.push(value);
|
|
644
|
+
}
|
|
645
|
+
state.value = model;
|
|
646
|
+
if (!props.multiple) {
|
|
647
|
+
close();
|
|
648
|
+
}
|
|
649
|
+
} else {
|
|
650
|
+
state.value = value;
|
|
651
|
+
close();
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
provide(FilterKey, computed(() => state.filter));
|
|
655
|
+
provide(FilteredKey, computed(() => props.filterable && state.filter.length > 0));
|
|
656
|
+
provide(TickerKey, computed(() => props.ticker));
|
|
657
|
+
provide(MultipleKey, computed(() => props.multiple));
|
|
658
|
+
const onInput = (value) => {
|
|
659
|
+
state.filter = value;
|
|
660
|
+
};
|
|
661
|
+
const close = () => {
|
|
662
|
+
if (state.expanded) {
|
|
663
|
+
state.expanded = false;
|
|
664
|
+
state.filter = "";
|
|
665
|
+
}
|
|
666
|
+
};
|
|
667
|
+
watch(() => props.expanded, (newVal) => {
|
|
668
|
+
state.expanded = newVal;
|
|
669
|
+
if (!newVal) {
|
|
670
|
+
state.filter = "";
|
|
671
|
+
}
|
|
672
|
+
});
|
|
673
|
+
watch(() => props.value, (newVal) => {
|
|
674
|
+
state.value = newVal;
|
|
675
|
+
});
|
|
676
|
+
return (_ctx, _cache) => {
|
|
677
|
+
return openBlock(), createBlock(unref(UiPopperConnector), null, {
|
|
678
|
+
default: withCtx(() => [
|
|
679
|
+
createVNode(unref(UiSelectTrigger), {
|
|
680
|
+
id: __props.id,
|
|
681
|
+
value: state.value,
|
|
682
|
+
multiple: __props.multiple,
|
|
683
|
+
selection: selection.value,
|
|
684
|
+
filter: state.filter,
|
|
685
|
+
filterable: __props.filterable,
|
|
686
|
+
clearable: __props.clearable,
|
|
687
|
+
expanded: state.expanded,
|
|
688
|
+
invalid: __props.invalid,
|
|
689
|
+
disabled: __props.disabled,
|
|
690
|
+
readonly: __props.readonly,
|
|
691
|
+
"placeholder-only": __props.placeholderOnly,
|
|
692
|
+
placeholder: __props.placeholder,
|
|
693
|
+
"textbox-size": __props.textboxSize,
|
|
694
|
+
onInput,
|
|
695
|
+
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => state.value = $event),
|
|
696
|
+
"onUpdate:expanded": _cache[1] || (_cache[1] = ($event) => state.expanded = $event)
|
|
697
|
+
}, null, 8, ["id", "value", "multiple", "selection", "filter", "filterable", "clearable", "expanded", "invalid", "disabled", "readonly", "placeholder-only", "placeholder", "textbox-size"]),
|
|
698
|
+
createVNode(unref(UiSelectPopper), {
|
|
699
|
+
id: __props.id,
|
|
700
|
+
disabled: __props.disabled || __props.readonly,
|
|
701
|
+
multiple: __props.multiple,
|
|
702
|
+
opened: state.expanded,
|
|
703
|
+
placement: __props.placement,
|
|
704
|
+
"popper-class": __props.popperClass,
|
|
705
|
+
"popper-fit-trigger": __props.popperFitTrigger,
|
|
706
|
+
"popper-options": __props.popperOptions,
|
|
707
|
+
"popper-triggers": __props.popperTriggers,
|
|
708
|
+
readonly: __props.readonly,
|
|
709
|
+
"target-triggers": __props.targetTriggers,
|
|
710
|
+
ticker: __props.ticker,
|
|
711
|
+
filterable: __props.filterable,
|
|
712
|
+
"options-registry": optionsRegistry.value,
|
|
713
|
+
onHide: close
|
|
714
|
+
}, {
|
|
715
|
+
default: withCtx(() => [
|
|
716
|
+
__props.filterable && optionsRegistry.value.every((o) => !o.isMatched()) && noResult.value ? (openBlock(), createElementBlock("div", _hoisted_1$3, toDisplayString(noResult.value), 1)) : createCommentVNode("", true),
|
|
717
|
+
renderSlot(_ctx.$slots, "default")
|
|
718
|
+
]),
|
|
719
|
+
_: 3
|
|
720
|
+
}, 8, ["id", "disabled", "multiple", "opened", "placement", "popper-class", "popper-fit-trigger", "popper-options", "popper-triggers", "readonly", "target-triggers", "ticker", "filterable", "options-registry"])
|
|
721
|
+
]),
|
|
722
|
+
_: 3
|
|
723
|
+
});
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
});
|
|
727
|
+
const _hoisted_1$2 = {
|
|
728
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
729
|
+
viewBox: "0 0 24 24"
|
|
730
|
+
};
|
|
731
|
+
function render$1(_ctx, _cache) {
|
|
732
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$2, [..._cache[0] || (_cache[0] = [
|
|
733
|
+
createElementVNode("path", {
|
|
734
|
+
fill: "currentColor",
|
|
735
|
+
"fill-rule": "evenodd",
|
|
736
|
+
d: "M2 12C2 6.477 6.477 2 12 2A10 10 0 1 1 2 12m8.73 3.35 5.62-5.62a.5.5 0 0 0 0-.69l-.53-.53a.5.5 0 0 0-.7 0l-4.74 4.74-1.5-1.49a.48.48 0 0 0-.7 0l-.53.53a.5.5 0 0 0 0 .71l2.38 2.35a.48.48 0 0 0 .7 0",
|
|
737
|
+
"clip-rule": "evenodd"
|
|
738
|
+
}, null, -1)
|
|
739
|
+
])]);
|
|
740
|
+
}
|
|
741
|
+
const IconCheckmarkCircle = { render: render$1 };
|
|
742
|
+
const _hoisted_1$1 = {
|
|
743
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
744
|
+
viewBox: "0 0 24 24"
|
|
745
|
+
};
|
|
746
|
+
function render(_ctx, _cache) {
|
|
747
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [
|
|
748
|
+
createElementVNode("path", {
|
|
749
|
+
fill: "currentColor",
|
|
750
|
+
"fill-rule": "evenodd",
|
|
751
|
+
d: "M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10A10 10 0 0 0 12 2m0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16m1-9h2.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H13v2.5a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5V13H8.5a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5H11V8.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5z",
|
|
752
|
+
"clip-rule": "evenodd"
|
|
753
|
+
}, null, -1)
|
|
754
|
+
])]);
|
|
755
|
+
}
|
|
756
|
+
const IconAddCircleOutlined = { render };
|
|
757
|
+
var SIZE = /* @__PURE__ */ ((SIZE2) => {
|
|
758
|
+
SIZE2["XS"] = "xs";
|
|
759
|
+
SIZE2["SM"] = "sm";
|
|
760
|
+
SIZE2["MD"] = "md";
|
|
761
|
+
SIZE2["LG"] = "lg";
|
|
762
|
+
return SIZE2;
|
|
763
|
+
})(SIZE || {});
|
|
764
|
+
const _hoisted_1 = ["aria-selected"];
|
|
765
|
+
const _hoisted_2 = ["innerHTML"];
|
|
766
|
+
const _hoisted_3 = ["innerHTML"];
|
|
767
|
+
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
768
|
+
__name: "UiSelectOption",
|
|
769
|
+
props: {
|
|
770
|
+
/** Значение опции */
|
|
771
|
+
value: {
|
|
772
|
+
type: null,
|
|
773
|
+
required: true
|
|
774
|
+
},
|
|
775
|
+
/** Заголовок */
|
|
776
|
+
label: {
|
|
777
|
+
type: String,
|
|
778
|
+
required: true
|
|
779
|
+
},
|
|
780
|
+
/** Описание */
|
|
781
|
+
description: {
|
|
782
|
+
type: String,
|
|
783
|
+
default: ""
|
|
784
|
+
},
|
|
785
|
+
/** Опция выбрана/не выбрана в списке */
|
|
786
|
+
active: {
|
|
787
|
+
type: Boolean,
|
|
788
|
+
default: false
|
|
789
|
+
},
|
|
790
|
+
/** Заблокированный */
|
|
791
|
+
disabled: {
|
|
792
|
+
type: Boolean,
|
|
793
|
+
default: false
|
|
794
|
+
},
|
|
795
|
+
/** Размер шрифта, иконок и внутренних отступов компонента */
|
|
796
|
+
size: {
|
|
797
|
+
type: String,
|
|
798
|
+
validator: (size) => Object.values(SIZE).includes(size),
|
|
799
|
+
default: SIZE.MD
|
|
800
|
+
},
|
|
801
|
+
/** Счетчик количества */
|
|
802
|
+
counter: {
|
|
803
|
+
type: null,
|
|
804
|
+
validator: (counter2) => counter2 === null || ["string", "number"].includes(typeof counter2),
|
|
805
|
+
default: null
|
|
806
|
+
},
|
|
807
|
+
/** Жирное начертание текста */
|
|
808
|
+
accent: {
|
|
809
|
+
type: Boolean,
|
|
810
|
+
default: false
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
setup(__props) {
|
|
814
|
+
const props = __props;
|
|
815
|
+
const id = uid("u1-v1-select-option");
|
|
816
|
+
const isSelected = inject(IsSelectedKey, ref(() => false));
|
|
817
|
+
const syncInSelect = inject(SyncKey, () => {
|
|
818
|
+
});
|
|
819
|
+
const registerInGroup = inject(RegisterOptionKey, () => {
|
|
820
|
+
});
|
|
821
|
+
const registerInSelect = inject(RegisterKey, () => {
|
|
822
|
+
});
|
|
823
|
+
const unregisterInGroup = inject(UnregisterOptionKey, () => {
|
|
824
|
+
});
|
|
825
|
+
const unregisterInSelect = inject(UnregisterKey, () => {
|
|
826
|
+
});
|
|
827
|
+
const toggle = inject(ToggleKey, () => {
|
|
828
|
+
});
|
|
829
|
+
const fastened = inject(FastenedKey, false);
|
|
830
|
+
const filter = inject(FilterKey, ref(""));
|
|
831
|
+
const filtered = inject(FilteredKey, ref(false));
|
|
832
|
+
const ticker = inject(TickerKey, ref(false));
|
|
833
|
+
const multiple = inject(MultipleKey, ref(false));
|
|
834
|
+
const highlight$1 = (text, style = "font-weight: 500;") => highlight(text, filter.value, style);
|
|
835
|
+
const texts = computed(() => ({
|
|
836
|
+
label: filtered.value ? highlight$1(props.label) : props.label,
|
|
837
|
+
description: filtered.value ? highlight$1(props.description, "font-weight: 600;") : props.description
|
|
838
|
+
}));
|
|
839
|
+
const matched = computed(() => texts.value.label !== props.label || texts.value.description !== props.description);
|
|
840
|
+
const selected2 = computed(() => props.active || isSelected.value(props.value));
|
|
841
|
+
const hidden = computed(() => !(fastened || !filtered.value || matched.value));
|
|
842
|
+
const onClick = () => {
|
|
843
|
+
if (!props.disabled) {
|
|
844
|
+
toggle(props.value);
|
|
845
|
+
}
|
|
846
|
+
};
|
|
847
|
+
const off = watch([
|
|
848
|
+
() => props.label,
|
|
849
|
+
() => props.value
|
|
850
|
+
], ([newLabel, newValue], [oldLabel, oldValue]) => {
|
|
851
|
+
if (newLabel !== oldLabel || !isEqual(newValue, oldValue)) {
|
|
852
|
+
syncInSelect(id, {
|
|
853
|
+
label: newLabel,
|
|
854
|
+
value: newValue
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
});
|
|
858
|
+
onBeforeMount(() => {
|
|
859
|
+
const option = {
|
|
860
|
+
id,
|
|
861
|
+
value: props.value,
|
|
862
|
+
label: props.label,
|
|
863
|
+
isMatched: () => !filtered.value || matched.value
|
|
864
|
+
};
|
|
865
|
+
registerInSelect(option);
|
|
866
|
+
registerInGroup(option);
|
|
867
|
+
});
|
|
868
|
+
onBeforeUnmount(() => {
|
|
869
|
+
off();
|
|
870
|
+
unregisterInSelect(id);
|
|
871
|
+
unregisterInGroup(id);
|
|
872
|
+
});
|
|
873
|
+
return (_ctx, _cache) => {
|
|
874
|
+
return openBlock(), createElementBlock("div", mergeProps(_ctx.$attrs, {
|
|
875
|
+
"aria-selected": selected2.value ? "true" : "false",
|
|
876
|
+
class: {
|
|
877
|
+
"ui-v1-select-option": true,
|
|
878
|
+
"ui-v1-select-option_selected": selected2.value,
|
|
879
|
+
"ui-v1-select-option_disabled": __props.disabled,
|
|
880
|
+
"ui-v1-select-option_hidden": hidden.value
|
|
881
|
+
},
|
|
882
|
+
role: "option",
|
|
883
|
+
onClick
|
|
884
|
+
}), [
|
|
885
|
+
renderSlot(_ctx.$slots, "default", {
|
|
886
|
+
highlight: highlight$1,
|
|
887
|
+
selected: selected2.value
|
|
888
|
+
}, () => [
|
|
889
|
+
createVNode(unref(UiMenuItem), {
|
|
890
|
+
accent: __props.accent,
|
|
891
|
+
counter: __props.counter,
|
|
892
|
+
disabled: __props.disabled,
|
|
893
|
+
size: __props.size,
|
|
894
|
+
ticker: unref(ticker)
|
|
895
|
+
}, createSlots({
|
|
896
|
+
"trailing-icon": withCtx(() => [
|
|
897
|
+
renderSlot(_ctx.$slots, "trailing-icon", { selected: selected2.value }, () => [
|
|
898
|
+
selected2.value ? (openBlock(), createBlock(unref(IconCheckmarkCircle), {
|
|
899
|
+
key: 0,
|
|
900
|
+
class: "ui-v1-select-option__checkmark-icon",
|
|
901
|
+
"aria-hidden": "true"
|
|
902
|
+
})) : unref(multiple) ? (openBlock(), createBlock(unref(IconAddCircleOutlined), {
|
|
903
|
+
key: 1,
|
|
904
|
+
class: "ui-v1-select-option__add-icon",
|
|
905
|
+
"aria-hidden": "true"
|
|
906
|
+
})) : createCommentVNode("", true)
|
|
907
|
+
])
|
|
908
|
+
]),
|
|
909
|
+
default: withCtx(() => [
|
|
910
|
+
renderSlot(_ctx.$slots, "value", { selected: selected2.value }, () => [
|
|
911
|
+
createElementVNode("span", {
|
|
912
|
+
innerHTML: texts.value.label
|
|
913
|
+
}, null, 8, _hoisted_2)
|
|
914
|
+
])
|
|
915
|
+
]),
|
|
916
|
+
_: 2
|
|
917
|
+
}, [
|
|
918
|
+
_ctx.$slots["leading-icon"] ? {
|
|
919
|
+
name: "leading-icon",
|
|
920
|
+
fn: withCtx(() => [
|
|
921
|
+
renderSlot(_ctx.$slots, "leading-icon", { selected: selected2.value })
|
|
922
|
+
]),
|
|
923
|
+
key: "0"
|
|
924
|
+
} : void 0,
|
|
925
|
+
texts.value.description ? {
|
|
926
|
+
name: "description",
|
|
927
|
+
fn: withCtx(() => [
|
|
928
|
+
createElementVNode("span", {
|
|
929
|
+
innerHTML: texts.value.description
|
|
930
|
+
}, null, 8, _hoisted_3)
|
|
931
|
+
]),
|
|
932
|
+
key: "1"
|
|
933
|
+
} : void 0
|
|
934
|
+
]), 1032, ["accent", "counter", "disabled", "size", "ticker"])
|
|
935
|
+
])
|
|
936
|
+
], 16, _hoisted_1);
|
|
937
|
+
};
|
|
938
|
+
}
|
|
939
|
+
});
|
|
940
|
+
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
941
|
+
__name: "UiSelectOptionGroupHeader",
|
|
942
|
+
setup(__props) {
|
|
943
|
+
provide(RegisterOptionKey, inject(RegisterHeaderOptionKey, () => {
|
|
944
|
+
}));
|
|
945
|
+
provide(UnregisterOptionKey, inject(UnregisterHeaderOptionKey, () => {
|
|
946
|
+
}));
|
|
947
|
+
provide(FastenedKey, computed(() => true));
|
|
948
|
+
return (_ctx, _cache) => {
|
|
949
|
+
return openBlock(), createElementBlock("div", null, [
|
|
950
|
+
renderSlot(_ctx.$slots, "default")
|
|
951
|
+
]);
|
|
952
|
+
};
|
|
953
|
+
}
|
|
954
|
+
});
|
|
955
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
956
|
+
__name: "UiSelectOptionGroup",
|
|
957
|
+
props: {
|
|
958
|
+
/** Заголовок группы опций */
|
|
959
|
+
label: {
|
|
960
|
+
type: String,
|
|
961
|
+
default: ""
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
setup(__props) {
|
|
965
|
+
const id = uid("u1-v1-select-option-group");
|
|
966
|
+
const options = ref([]);
|
|
967
|
+
const groups = ref([]);
|
|
968
|
+
const headerOptions = ref([]);
|
|
969
|
+
const COMPONENT_ALREADY_REGISTERED = (prefix, id2) => {
|
|
970
|
+
return `[${prefix}] Component with id ${id2} already registered. Unregister it before using again.`;
|
|
971
|
+
};
|
|
972
|
+
provide(RegisterOptionKey, (option) => {
|
|
973
|
+
if (options.value.some((item) => item.id === option.id)) {
|
|
974
|
+
throw new Error(COMPONENT_ALREADY_REGISTERED("UiSelect", option.id));
|
|
975
|
+
}
|
|
976
|
+
options.value.push(option);
|
|
977
|
+
});
|
|
978
|
+
provide(UnregisterOptionKey, (id2) => {
|
|
979
|
+
const index = options.value.findIndex((option) => option.id === id2);
|
|
980
|
+
if (index !== -1) {
|
|
981
|
+
options.value.splice(index, 1);
|
|
982
|
+
}
|
|
983
|
+
});
|
|
984
|
+
provide(RegisterGroupKey, (group) => {
|
|
985
|
+
if (groups.value.some((g) => g.id === group.id)) {
|
|
986
|
+
throw new Error(COMPONENT_ALREADY_REGISTERED("UiSelectOptionGroup", group.id));
|
|
987
|
+
}
|
|
988
|
+
groups.value.push(group);
|
|
989
|
+
});
|
|
990
|
+
provide(UnregisterGroupKey, (id2) => {
|
|
991
|
+
const index = groups.value.findIndex((group) => group.id === id2);
|
|
992
|
+
if (index !== -1) {
|
|
993
|
+
groups.value.splice(index, 1);
|
|
994
|
+
}
|
|
995
|
+
});
|
|
996
|
+
provide(RegisterHeaderOptionKey, (option) => {
|
|
997
|
+
if (headerOptions.value.some((item) => item.id === option.id)) {
|
|
998
|
+
throw new Error(COMPONENT_ALREADY_REGISTERED("UiSelectOptionGroupHeader", option.id));
|
|
999
|
+
}
|
|
1000
|
+
headerOptions.value.push(option);
|
|
1001
|
+
});
|
|
1002
|
+
provide(UnregisterHeaderOptionKey, (id2) => {
|
|
1003
|
+
const index = headerOptions.value.findIndex((o) => o.id === id2);
|
|
1004
|
+
if (index !== -1) {
|
|
1005
|
+
headerOptions.value.splice(index, 1);
|
|
1006
|
+
}
|
|
1007
|
+
});
|
|
1008
|
+
provide(FastenedKey, computed(() => false));
|
|
1009
|
+
const registerInGroup = inject(RegisterGroupKey, () => {
|
|
1010
|
+
});
|
|
1011
|
+
const unregisterInGroup = inject(UnregisterGroupKey, () => {
|
|
1012
|
+
});
|
|
1013
|
+
const filtered = inject(FilteredKey, ref(false));
|
|
1014
|
+
const matchedOptionsQuantity = computed(() => {
|
|
1015
|
+
return options.value.filter((o) => o.isMatched()).length + groups.value.reduce((total, g) => total + g.matchedQuantity(), 0);
|
|
1016
|
+
});
|
|
1017
|
+
const matched = computed(() => !!matchedOptionsQuantity.value || headerOptions.value.some((o) => o.isMatched()) || groups.value.some((g) => g.isMatched()));
|
|
1018
|
+
const hidden = computed(() => !filtered.value || matched.value);
|
|
1019
|
+
onMounted(() => registerInGroup({
|
|
1020
|
+
id,
|
|
1021
|
+
matchedQuantity: () => matchedOptionsQuantity.value,
|
|
1022
|
+
isMatched: () => matched.value
|
|
1023
|
+
}));
|
|
1024
|
+
onBeforeUnmount(() => unregisterInGroup(id));
|
|
1025
|
+
return (_ctx, _cache) => {
|
|
1026
|
+
return openBlock(), createElementBlock("div", mergeProps(_ctx.$attrs, {
|
|
1027
|
+
class: {
|
|
1028
|
+
"ui-v1-select-option-group": true,
|
|
1029
|
+
"ui-v1-select-option-group_hidden": hidden.value
|
|
1030
|
+
}
|
|
1031
|
+
}), [
|
|
1032
|
+
createVNode(unref(UiMenuItemGroup), null, createSlots({
|
|
1033
|
+
label: withCtx(() => [
|
|
1034
|
+
renderSlot(_ctx.$slots, "label", {}, () => [
|
|
1035
|
+
createTextVNode(toDisplayString(__props.label), 1)
|
|
1036
|
+
])
|
|
1037
|
+
]),
|
|
1038
|
+
quantity: withCtx(() => [
|
|
1039
|
+
renderSlot(_ctx.$slots, "quantity", { quantity: matchedOptionsQuantity.value }, () => [
|
|
1040
|
+
createTextVNode(toDisplayString(matchedOptionsQuantity.value), 1)
|
|
1041
|
+
])
|
|
1042
|
+
]),
|
|
1043
|
+
default: withCtx(() => [
|
|
1044
|
+
renderSlot(_ctx.$slots, "default")
|
|
1045
|
+
]),
|
|
1046
|
+
_: 2
|
|
1047
|
+
}, [
|
|
1048
|
+
_ctx.$slots.option ? {
|
|
1049
|
+
name: "option",
|
|
1050
|
+
fn: withCtx(() => [
|
|
1051
|
+
createVNode(_sfc_main$1, null, {
|
|
1052
|
+
default: withCtx(() => [
|
|
1053
|
+
renderSlot(_ctx.$slots, "option")
|
|
1054
|
+
]),
|
|
1055
|
+
_: 3
|
|
1056
|
+
})
|
|
1057
|
+
]),
|
|
1058
|
+
key: "0"
|
|
1059
|
+
} : void 0
|
|
1060
|
+
]), 1024)
|
|
1061
|
+
], 16);
|
|
1062
|
+
};
|
|
1063
|
+
}
|
|
1064
|
+
});
|
|
212
1065
|
const ImageWorkersKey = Symbol("$image.workers");
|
|
213
1066
|
const usePreview = (workers = ref([])) => {
|
|
214
1067
|
const _workers = inject(ImageWorkersKey, workers);
|
|
@@ -1868,6 +2721,10 @@ export {
|
|
|
1868
2721
|
UiLinkType,
|
|
1869
2722
|
UiLoader,
|
|
1870
2723
|
UiLoaderType,
|
|
2724
|
+
UiMenuItem,
|
|
2725
|
+
UiMenuItemGroup,
|
|
2726
|
+
UiMenuItemGroupType,
|
|
2727
|
+
UiMenuItemType,
|
|
1871
2728
|
UiModalSidebar,
|
|
1872
2729
|
UiModalSidebarType,
|
|
1873
2730
|
UiModalWindow,
|
|
@@ -1884,6 +2741,9 @@ export {
|
|
|
1884
2741
|
UiRadioType,
|
|
1885
2742
|
UiScrollBox,
|
|
1886
2743
|
UiScrollBoxType,
|
|
2744
|
+
_sfc_main$3 as UiSelect,
|
|
2745
|
+
_sfc_main$2 as UiSelectOption,
|
|
2746
|
+
_sfc_main as UiSelectOptionGroup,
|
|
1887
2747
|
UiTag,
|
|
1888
2748
|
UiTagType,
|
|
1889
2749
|
UiTextbox,
|