@fastkit/vui 0.6.10 → 0.6.14

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.
@@ -1,7 +1,11 @@
1
1
  import { createPropsOptions, createFormControlSettings, defineSlotsProps, useFormControl, renderSlotOrEmpty, createFormSelectorSettings, createFormControlProps, useFormSelectorControl, createFormSelectorItemSettings, useFormSelectorItemControl, createFormSelectorItemGroupProps, useFormSelectorItemGroupControl, resolveVNodeChildOrSlots, useParentFormNode, VMenu, createTextInputSettings, useTextInputControl, createTextareaSettings, useTextareaControl, createFormSettings, useForm, getDocumentScroller, useInjectTheme, VStackRoot, VueColorSchemePlugin, installVueStackPlugin } from '@fastkit/vue-kit';
2
2
  export * from '@fastkit/vue-kit';
3
- export { VStackBtn as VButton, VDialog, VMenu, VSnackbar } from '@fastkit/vue-kit';
4
- import { inject, computed, provide, defineComponent, createVNode, isVNode, ref, withDirectives, vModelSelect } from 'vue';
3
+ export { VDialog, VMenu, VSnackbar } from '@fastkit/vue-kit';
4
+ import { inject, computed, provide, defineComponent, createVNode, mergeProps, isVNode, ref, withDirectives, vModelSelect, createTextVNode } from 'vue';
5
+ import { useScopeColorClass, colorSchemeProps, useColorClasses } from '@fastkit/vue-color-scheme';
6
+ import { createPropsOptions as createPropsOptions$1, defineSlotsProps as defineSlotsProps$1, renderSlotOrEmpty as renderSlotOrEmpty$1, navigationableProps, navigationableEmits, useNavigationable } from '@fastkit/vue-utils';
7
+ import { VProgressCircular } from '@fastkit/vue-loading';
8
+ export * from '@fastkit/vue-loading';
5
9
  export { ICON_NAMES } from '@fastkit/icon-font';
6
10
 
7
11
  const CONTROL_SIZES = ['sm', 'md', 'lg'];
@@ -35,8 +39,8 @@ function useVuiColorProvider() {
35
39
  return parent;
36
40
  }
37
41
  const vui = useVui();
38
- const primary = computed(() => vui.color('primary'));
39
- const error = computed(() => vui.color('error'));
42
+ const primary = computed(() => vui.setting('primaryScope'));
43
+ const error = computed(() => vui.setting('errorScope'));
40
44
  const provider = {
41
45
  primary,
42
46
  error,
@@ -231,16 +235,137 @@ function defineFormSelectorComponent(opts) {
231
235
  });
232
236
  }
233
237
 
234
- const VIcon = defineComponent({
235
- name: 'VIcon',
236
- props: {
237
- name: {
238
+ function createElevationProps() {
239
+ return createPropsOptions$1({
240
+ elevation: Number,
241
+ });
242
+ }
243
+ function useElevation(props, opts = {}) {
244
+ const elevationValue = computed(() => props.elevation == null ? opts.defaultValue : props.elevation);
245
+ const elevationClassName = computed(() => {
246
+ const v = elevationValue.value;
247
+ return v == null ? undefined : `elevation-${v}`;
248
+ });
249
+ return {
250
+ elevationValue,
251
+ elevationClassName,
252
+ };
253
+ }
254
+
255
+ function createPaperProps() {
256
+ return { ...createElevationProps(),
257
+ square: Boolean,
258
+ color: String,
259
+ tag: {
238
260
  type: String,
239
- required: true
261
+ default: 'div'
240
262
  },
241
- rotate: {
242
- type: Number
243
- }
263
+ ...defineSlotsProps$1()
264
+ }; //
265
+ }
266
+ const VPaper = defineComponent({
267
+ name: 'VPaper',
268
+ props: createPaperProps(),
269
+
270
+ setup(props, ctx) {
271
+ const tag = computed(() => props.tag);
272
+ const elevation = useElevation(props, {
273
+ defaultValue: 1
274
+ });
275
+ const scope = useScopeColorClass(props);
276
+ const classes = computed(() => [elevation.elevationClassName.value, scope.value.className, {
277
+ 'v-paper--plain': !scope.value.value,
278
+ 'v-paper--has-color': !!scope.value.value,
279
+ 'v-paper--square': props.square
280
+ }]);
281
+ return () => {
282
+ const TagName = tag.value;
283
+ const header = renderSlotOrEmpty$1(ctx.slots, 'header');
284
+ const footer = renderSlotOrEmpty$1(ctx.slots, 'footer');
285
+ return createVNode(TagName, {
286
+ "class": ['v-paper', classes.value]
287
+ }, {
288
+ default: () => [header && createVNode("div", {
289
+ "class": "v-paper__header"
290
+ }, [header]), createVNode("div", {
291
+ "class": "v-paper__body"
292
+ }, [renderSlotOrEmpty$1(ctx.slots, 'default')]), footer && createVNode("div", {
293
+ "class": "v-paper__footer"
294
+ }, [footer])]
295
+ });
296
+ };
297
+ }
298
+
299
+ });
300
+
301
+ function createCardProps() {
302
+ return { ...createPaperProps()
303
+ };
304
+ }
305
+ const VCard = defineComponent({
306
+ name: 'VCard',
307
+ props: createCardProps(),
308
+
309
+ setup(props, ctx) {
310
+ const _props = computed(() => props);
311
+
312
+ return () => {
313
+ return createVNode(VPaper, mergeProps({
314
+ "class": "v-card"
315
+ }, _props.value), ctx.slots);
316
+ };
317
+ }
318
+
319
+ });
320
+
321
+ const VCardContent = defineComponent({
322
+ name: 'VCardContent',
323
+
324
+ setup(props, ctx) {
325
+ return () => {
326
+ return createVNode("div", {
327
+ "class": "v-card-content"
328
+ }, [renderSlotOrEmpty$1(ctx.slots, 'default')]);
329
+ };
330
+ }
331
+
332
+ });
333
+
334
+ const VCardActions = defineComponent({
335
+ name: 'VCardActions',
336
+
337
+ setup(props, ctx) {
338
+ return () => {
339
+ return createVNode("div", {
340
+ "class": "v-card-actions"
341
+ }, [renderSlotOrEmpty$1(ctx.slots, 'default')]);
342
+ };
343
+ }
344
+
345
+ });
346
+
347
+ const _rawRawIconProp = [String, Function];
348
+ function rawRawIconProp() {
349
+ return _rawRawIconProp;
350
+ }
351
+ function resolveRawIconProp(prop, extraProps) {
352
+ if (!prop) return;
353
+ return typeof prop === 'function' ? prop(input => createVNode(VIcon, mergeProps(input, extraProps), null)) : createVNode(VIcon, mergeProps(extraProps, {
354
+ "name": prop
355
+ }), null);
356
+ }
357
+ const iconProps = createPropsOptions$1({
358
+ name: {
359
+ type: String,
360
+ required: true
361
+ },
362
+ rotate: {
363
+ type: Number
364
+ }
365
+ });
366
+ const VIcon = defineComponent({
367
+ name: 'VIcon',
368
+ props: { ...iconProps
244
369
  },
245
370
  emits: {},
246
371
 
@@ -270,6 +395,243 @@ const VIcon = defineComponent({
270
395
 
271
396
  });
272
397
 
398
+ function resolveRawVButtonIcon(raw, type = 'main') {
399
+ if (!raw) return;
400
+ return typeof raw === 'function' ? raw : () => createVNode(VIcon, {
401
+ "class": ['v-button__icon', `v-button__icon--${type}`],
402
+ "name": raw
403
+ }, null);
404
+ }
405
+
406
+ const vueButtonProps = createPropsOptions$1({ ...colorSchemeProps(),
407
+ ...navigationableProps,
408
+ spacer: [Boolean, String],
409
+ loading: Boolean,
410
+ rounded: Boolean,
411
+ icon: [String, Function],
412
+ startIcon: [String, Function],
413
+ endIcon: [String, Function],
414
+ ...createControlProps()
415
+ });
416
+ const LOADING_SIZE_MAP = {
417
+ sm: 14,
418
+ md: 20,
419
+ lg: 28
420
+ };
421
+ const VButton = defineComponent({
422
+ name: 'VButton',
423
+ props: vueButtonProps,
424
+ emits: { ...navigationableEmits.emits
425
+ },
426
+
427
+ setup(props, ctx) {
428
+ const vui = useVui();
429
+ const control = useControl(props);
430
+ const defaults = vui.setting('buttonDefault');
431
+ const icon = computed(() => {
432
+ const _icon = resolveRawVButtonIcon(props.icon);
433
+
434
+ return _icon && _icon();
435
+ });
436
+ const startIcon = computed(() => {
437
+ const _icon = resolveRawVButtonIcon(props.startIcon, 'start');
438
+
439
+ return _icon && _icon();
440
+ });
441
+ const endIcon = computed(() => {
442
+ const _icon = resolveRawVButtonIcon(props.endIcon, 'end');
443
+
444
+ return _icon && _icon();
445
+ });
446
+ const color = useColorClasses({
447
+ color: () => props.color || defaults.color,
448
+ variant: () => props.variant || (icon.value ? vui.setting('plainVariant') : defaults.variant)
449
+ });
450
+ const isPlain = computed(() => color.variant.value.value === vui.setting('plainVariant') && color.color.value.value === defaults.color);
451
+ const navigationable = useNavigationable(props);
452
+ const isLoading = computed(() => props.loading);
453
+ const isDisabled = computed(() => props.disabled);
454
+ const isRounded = computed(() => props.rounded || !!icon.value);
455
+ const spacer = computed(() => {
456
+ const _spacer = props.spacer;
457
+ if (!_spacer) return;
458
+ return _spacer === true ? 'left' : _spacer;
459
+ });
460
+ const classes = computed(() => [color.colorClasses.value, navigationable.value.classes, spacer.value ? `v-button--spacer-${spacer.value}` : undefined, `v-button--${control.size.value}`, {
461
+ 'v-button--loading': isLoading.value,
462
+ 'v-button--icon': !!icon.value,
463
+ 'v-button--rounded': isRounded.value,
464
+ 'v-button--plain': isPlain.value
465
+ }]);
466
+ return () => {
467
+ const {
468
+ Tag,
469
+ attrs
470
+ } = navigationable.value;
471
+ const children = renderSlotOrEmpty$1(ctx.slots, 'default');
472
+ const _attrs = { ...attrs
473
+ };
474
+
475
+ if (isDisabled.value) {
476
+ _attrs.disabled = true;
477
+ }
478
+
479
+ return createVNode(Tag, mergeProps({
480
+ "class": ['v-button', classes.value]
481
+ }, _attrs, {
482
+ "onClick": ev => {
483
+ if (isDisabled.value || isLoading.value) {
484
+ ev.preventDefault();
485
+
486
+ if (isDisabled.value) {
487
+ return;
488
+ }
489
+ }
490
+
491
+ ctx.emit('click', ev);
492
+ }
493
+ }), {
494
+ default: () => [createVNode("span", {
495
+ "class": "v-button__content"
496
+ }, [startIcon.value, children, icon.value, endIcon.value]), isLoading.value && createVNode(VProgressCircular, {
497
+ "class": "v-button__loading",
498
+ "indeterminate": true,
499
+ "size": LOADING_SIZE_MAP[control.size.value]
500
+ }, null)]
501
+ });
502
+ };
503
+ }
504
+
505
+ });
506
+
507
+ function createListTileProps() {
508
+ const icon = rawRawIconProp();
509
+ return createPropsOptions$1({ ...navigationableProps,
510
+ startIcon: icon,
511
+ endIcon: icon,
512
+ fallbackTag: {
513
+ type: String,
514
+ default: 'div'
515
+ }
516
+ });
517
+ }
518
+ const listTileEmits = { ...navigationableEmits.emits
519
+ };
520
+ const VListTile = defineComponent({
521
+ name: 'VListTile',
522
+ props: createListTileProps(),
523
+ emits: { ...listTileEmits
524
+ },
525
+
526
+ setup(props, ctx) {
527
+ const startIcon = computed(() => resolveRawIconProp(props.startIcon));
528
+ const endIcon = computed(() => resolveRawIconProp(props.endIcon));
529
+ const navigationable = useNavigationable(props, () => props.fallbackTag);
530
+ return () => {
531
+ const _startIcon = startIcon.value;
532
+ const _endIcon = endIcon.value;
533
+ const {
534
+ Tag,
535
+ attrs,
536
+ classes
537
+ } = navigationable.value;
538
+ return createVNode(Tag, mergeProps({
539
+ "class": ['v-list-tile', classes]
540
+ }, attrs), {
541
+ default: () => [_startIcon && createVNode("span", {
542
+ "class": "v-list-tile__icon v-list-tile__icon--start"
543
+ }, [_startIcon]), createVNode("span", {
544
+ "class": "v-list-tile__body"
545
+ }, [renderSlotOrEmpty$1(ctx.slots, 'default')]), _endIcon && createVNode("span", {
546
+ "class": "v-list-tile__icon v-list-tile__icon--end"
547
+ }, [_endIcon])]
548
+ });
549
+ };
550
+ }
551
+
552
+ });
553
+
554
+ const VAccordion = defineComponent({
555
+ name: 'VAccordion'
556
+ });
557
+
558
+ function _isSlot$6(s) {
559
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
560
+ }
561
+
562
+ function createNavigationItemProps() {
563
+ return { ...createListTileProps()
564
+ };
565
+ }
566
+ const VNavigationItem = defineComponent({
567
+ name: 'VNavigationItem',
568
+ props: createNavigationItemProps(),
569
+ emits: { ...listTileEmits
570
+ },
571
+
572
+ setup(props, ctx) {
573
+ const _props = computed(() => ({ ...props
574
+ }));
575
+
576
+ return () => {
577
+ let _slot;
578
+
579
+ return createVNode(VListTile, mergeProps(_props.value, {
580
+ "class": "v-navigation-item"
581
+ }), _isSlot$6(_slot = renderSlotOrEmpty$1(ctx.slots, 'default')) ? _slot : {
582
+ default: () => [_slot]
583
+ });
584
+ };
585
+ }
586
+
587
+ });
588
+
589
+ function _isSlot$5(s) {
590
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
591
+ }
592
+
593
+ const VNavigation = defineComponent({
594
+ name: 'VNavigation',
595
+ props: {
596
+ items: {
597
+ type: Array,
598
+ required: true
599
+ }
600
+ },
601
+
602
+ setup(props, ctx) {
603
+ const items = computed(() => props.items);
604
+ const $items = computed(() => items.value.map(item => {
605
+ let label = item.label;
606
+ const _props = { ...item
607
+ };
608
+
609
+ if (typeof label === 'function') {
610
+ label = label();
611
+ }
612
+
613
+ delete _props.label;
614
+ return {
615
+ label,
616
+ props: _props
617
+ };
618
+ }));
619
+ return () => {
620
+ return createVNode("nav", {
621
+ "class": "v-navigation"
622
+ }, [$items.value.map(({
623
+ label,
624
+ props
625
+ }) => createVNode(VNavigationItem, mergeProps(props, {
626
+ "class": "v-navigation__item"
627
+ }), _isSlot$5(label) ? label : {
628
+ default: () => [label]
629
+ }))]);
630
+ };
631
+ }
632
+
633
+ });
634
+
273
635
  const VCheckable = defineComponent({
274
636
  name: 'VCheckable',
275
637
  props: {
@@ -363,7 +725,7 @@ const VCheckbox = defineComponent({
363
725
 
364
726
  });
365
727
 
366
- function _isSlot$3(s) {
728
+ function _isSlot$4(s) {
367
729
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
368
730
  }
369
731
 
@@ -375,7 +737,7 @@ const VCheckboxGroup = defineFormSelectorComponent({
375
737
  itemRenderer: ({
376
738
  attrs,
377
739
  slots
378
- }) => createVNode(VCheckbox, attrs, _isSlot$3(slots) ? slots : {
740
+ }) => createVNode(VCheckbox, attrs, _isSlot$4(slots) ? slots : {
379
741
  default: () => [slots]
380
742
  })
381
743
  });
@@ -427,7 +789,7 @@ const VRadio = defineComponent({
427
789
 
428
790
  });
429
791
 
430
- function _isSlot$2(s) {
792
+ function _isSlot$3(s) {
431
793
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
432
794
  }
433
795
 
@@ -438,7 +800,7 @@ const VRadioGroup = defineFormSelectorComponent({
438
800
  itemRenderer: ({
439
801
  attrs,
440
802
  slots
441
- }) => createVNode(VRadio, attrs, _isSlot$2(slots) ? slots : {
803
+ }) => createVNode(VRadio, attrs, _isSlot$3(slots) ? slots : {
442
804
  default: () => [slots]
443
805
  })
444
806
  });
@@ -500,7 +862,7 @@ const VSwitch = defineComponent({
500
862
 
501
863
  });
502
864
 
503
- function _isSlot$1(s) {
865
+ function _isSlot$2(s) {
504
866
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
505
867
  }
506
868
 
@@ -512,7 +874,7 @@ const VSwitchGroup = defineFormSelectorComponent({
512
874
  itemRenderer: ({
513
875
  attrs,
514
876
  slots
515
- }) => createVNode(VSwitch, attrs, _isSlot$1(slots) ? slots : {
877
+ }) => createVNode(VSwitch, attrs, _isSlot$2(slots) ? slots : {
516
878
  default: () => [slots]
517
879
  })
518
880
  });
@@ -1055,7 +1417,7 @@ const VForm = defineComponent({
1055
1417
 
1056
1418
  });
1057
1419
 
1058
- function _isSlot(s) {
1420
+ function _isSlot$1(s) {
1059
1421
  return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
1060
1422
  }
1061
1423
 
@@ -1067,7 +1429,93 @@ const VApp = defineComponent({
1067
1429
  return () => {
1068
1430
  let _slot;
1069
1431
 
1070
- return createVNode(VStackRoot, null, _isSlot(_slot = renderSlotOrEmpty(ctx.slots, 'default')) ? _slot : {
1432
+ return createVNode(VStackRoot, null, _isSlot$1(_slot = renderSlotOrEmpty(ctx.slots, 'default')) ? _slot : {
1433
+ default: () => [_slot]
1434
+ });
1435
+ };
1436
+ }
1437
+
1438
+ });
1439
+
1440
+ const VToolbar = defineComponent({
1441
+ name: 'VToolbar',
1442
+ props: { ...createElevationProps(),
1443
+ ...colorSchemeProps(),
1444
+ dense: Boolean
1445
+ },
1446
+
1447
+ setup(props, ctx) {
1448
+ const vui = useVui();
1449
+ const elevation = useElevation(props, {
1450
+ defaultValue: 4
1451
+ });
1452
+ const dense = computed(() => props.dense);
1453
+ const color = useColorClasses({
1454
+ color: () => props.color,
1455
+ variant: () => props.variant || vui.setting('containedVariant')
1456
+ });
1457
+ const classes = computed(() => {
1458
+ return [elevation.elevationClassName.value, color.colorClasses.value, {
1459
+ 'v-toolbar--plain': !color.color.value.value,
1460
+ 'v-toolbar--dense': dense.value
1461
+ }];
1462
+ });
1463
+ return () => {
1464
+ return createVNode("div", {
1465
+ "class": ['v-toolbar', classes.value]
1466
+ }, [renderSlotOrEmpty$1(ctx.slots, 'default')]);
1467
+ };
1468
+ }
1469
+
1470
+ });
1471
+
1472
+ const VToolbarMenu = defineComponent({
1473
+ name: 'VToolbarMenu',
1474
+ props: {
1475
+ edge: {
1476
+ type: String,
1477
+ required: true
1478
+ }
1479
+ },
1480
+
1481
+ setup(props, ctx) {
1482
+ const edge = computed(() => props.edge);
1483
+ return () => {
1484
+ const children = renderSlotOrEmpty$1(ctx.slots, 'default');
1485
+ const hasChildren = !!children && children.length > 0;
1486
+ return createVNode("div", {
1487
+ "class": ['v-toolbar-menu', `v-toolbar-menu--${edge.value}`, {
1488
+ [`v-toolbar-menu--empty`]: !hasChildren
1489
+ }]
1490
+ }, [children]);
1491
+ };
1492
+ }
1493
+
1494
+ });
1495
+
1496
+ function _isSlot(s) {
1497
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
1498
+ }
1499
+
1500
+ const VToolbarTitle = defineComponent({
1501
+ name: 'VToolbarTitle',
1502
+ props: {
1503
+ tag: {
1504
+ type: String,
1505
+ default: 'span'
1506
+ }
1507
+ },
1508
+
1509
+ setup(props, ctx) {
1510
+ const _TagName = computed(() => props.tag);
1511
+
1512
+ return () => {
1513
+ let _slot;
1514
+
1515
+ const TagName = _TagName.value;
1516
+ return createVNode(TagName, {
1517
+ "class": "v-toolbar-title"
1518
+ }, _isSlot(_slot = renderSlotOrEmpty$1(ctx.slots, 'default')) ? _slot : {
1071
1519
  default: () => [_slot]
1072
1520
  });
1073
1521
  };
@@ -1091,8 +1539,8 @@ class VuiService {
1091
1539
  this.textareaRows = textareaRows;
1092
1540
  this.requiredChip = requiredChip;
1093
1541
  }
1094
- color(colorType) {
1095
- return this.options.colors[colorType];
1542
+ setting(key) {
1543
+ return this.options.uiSettings[key];
1096
1544
  }
1097
1545
  icon(iconType) {
1098
1546
  return this.options.icons[iconType];
@@ -1110,36 +1558,61 @@ class VuiService {
1110
1558
  }
1111
1559
  }
1112
1560
 
1113
- class VuiPlugin {
1114
- static installedApps = new Set();
1115
- static install(app, opts) {
1116
- const { installedApps } = this;
1117
- if (installedApps.has(app))
1118
- return;
1119
- const unmountApp = app.unmount;
1120
- installedApps.add(app);
1121
- const { colors, colorScheme, stack } = opts;
1122
- // ColorScheme
1123
- const vueColorSchemePlugin = new VueColorSchemePlugin(colorScheme);
1124
- app.use(vueColorSchemePlugin);
1125
- // Stack
1126
- installVueStackPlugin(app, {
1127
- primaryColor: colors.primary,
1128
- ...stack,
1129
- });
1130
- // Vui
1131
- const $vui = new VuiService(opts);
1132
- app.provide(VuiInjectionKey, $vui);
1133
- app.config.globalProperties.$vui = $vui;
1134
- app.unmount = function () {
1135
- installedApps.delete(app);
1136
- delete app.config.globalProperties.$vui;
1137
- unmountApp();
1138
- };
1139
- }
1140
- }
1141
- function installVuiPlugin(app, opts) {
1142
- return app.use(VuiPlugin, opts);
1561
+ class VuiPlugin {
1562
+ static installedApps = new Set();
1563
+
1564
+ static install(app, opts) {
1565
+ const {
1566
+ installedApps
1567
+ } = this;
1568
+ if (installedApps.has(app)) return;
1569
+ const unmountApp = app.unmount;
1570
+ installedApps.add(app);
1571
+ const {
1572
+ colorScheme,
1573
+ stack,
1574
+ uiSettings
1575
+ } = opts; // ColorScheme
1576
+
1577
+ const vueColorSchemePlugin = new VueColorSchemePlugin(colorScheme);
1578
+ app.use(vueColorSchemePlugin); // Stack
1579
+
1580
+ installVueStackPlugin(app, {
1581
+ actions: {
1582
+ ok: ({
1583
+ bindings
1584
+ }) => createVNode(VButton, mergeProps(uiSettings.dialogOk, bindings), {
1585
+ default: () => [createTextVNode("OK")]
1586
+ }),
1587
+ cancel: ({
1588
+ bindings
1589
+ }) => createVNode(VButton, mergeProps(uiSettings.dialogCancel, bindings), {
1590
+ default: () => [createTextVNode("CANCEL")]
1591
+ }),
1592
+ close: ({
1593
+ bindings
1594
+ }) => createVNode(VButton, mergeProps(uiSettings.dialogClose, bindings), {
1595
+ default: () => [createTextVNode("CLOSE")]
1596
+ }),
1597
+ ...(stack ? stack.actions : {})
1598
+ },
1599
+ ...stack
1600
+ }); // Vui
1601
+
1602
+ const $vui = new VuiService(opts);
1603
+ app.provide(VuiInjectionKey, $vui);
1604
+ app.config.globalProperties.$vui = $vui;
1605
+
1606
+ app.unmount = function () {
1607
+ installedApps.delete(app);
1608
+ delete app.config.globalProperties.$vui;
1609
+ unmountApp();
1610
+ };
1611
+ }
1612
+
1613
+ }
1614
+ function installVuiPlugin(app, opts) {
1615
+ return app.use(VuiPlugin, opts);
1143
1616
  }
1144
1617
 
1145
- export { CONTROL_FIELD_VARIANTS, CONTROL_SIZES, VApp, VCheckbox, VCheckboxGroup, VForm, VIcon, VOption, VOptionGroup, VRadio, VRadioGroup, VSelect, VSwitch, VSwitchGroup, VTextField, VTextarea, VuiInjectionKey, VuiPlugin, VuiService, createControlFieldProviderProps, createControlProps, defineFormSelectorComponent, installVuiPlugin, useControl, useControlField };
1618
+ export { CONTROL_FIELD_VARIANTS, CONTROL_SIZES, VAccordion, VApp, VButton, VCard, VCardActions, VCardContent, VCheckbox, VCheckboxGroup, VForm, VIcon, VListTile, VNavigation, VNavigationItem, VOption, VOptionGroup, VPaper, VRadio, VRadioGroup, VSelect, VSwitch, VSwitchGroup, VTextField, VTextarea, VToolbar, VToolbarMenu, VToolbarTitle, VUI_CHECKBOX_GROUP_SYMBOL, VUI_CHECKBOX_SYMBOL, VUI_FORM_SYMBOL, VUI_OPTION_SYMBOL, VUI_RADIO_GROUP_SYMBOL, VUI_RADIO_SYMBOL, VUI_SELECT_SYMBOL, VUI_SWITCH_GROUP_SYMBOL, VUI_SWITCH_SYMBOL, VUI_TEXTAREA_SYMBOL, VUI_TEXT_FIELD_SYMBOL, VuiColorProviderInjectionKey, VuiControlFieldInjectionKey, VuiControlInjectionKey, VuiInjectionKey, VuiPlugin, VuiService, createCardProps, createControlFieldProviderProps, createControlProps, createElevationProps, createListTileProps, createNavigationItemProps, createPaperProps, defineFormSelectorComponent, iconProps, installVuiPlugin, listTileEmits, rawRawIconProp, resolveRawIconProp, useControl, useControlField, useElevation, useVui, useVuiColorProvider, vueButtonProps };