@fastkit/vui 0.12.7 → 0.12.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.
Files changed (109) hide show
  1. package/LICENSE +1 -1
  2. package/dist/vui.css +2786 -2716
  3. package/dist/vui.css.map +1 -0
  4. package/dist/vui.d.ts +9072 -10160
  5. package/dist/vui.mjs +2158 -1968
  6. package/dist/vui.mjs.map +1 -0
  7. package/package.json +89 -59
  8. package/src/components/VApp/VApp.tsx +3 -1
  9. package/src/components/VAvatar/VAvatar.scss +62 -60
  10. package/src/components/VAvatar/VAvatar.tsx +6 -1
  11. package/src/components/VBreadcrumbs/VBreadcrumbs.scss +53 -51
  12. package/src/components/VBusyImage/VBusyImage.scss +50 -51
  13. package/src/components/VButton/VButton.scss +120 -118
  14. package/src/components/VButton/VButton.tsx +6 -1
  15. package/src/components/VButton/VButtonGroup.scss +21 -19
  16. package/src/components/VCard/VCard.scss +41 -42
  17. package/src/components/VCard/VCard.tsx +5 -0
  18. package/src/components/VCard/VCardActions.scss +9 -7
  19. package/src/components/VCard/VCardContent.scss +4 -2
  20. package/src/components/VCheckable/VCheckable.scss +79 -80
  21. package/src/components/VCheckable/VCheckable.tsx +1 -1
  22. package/src/components/VCheckbox/VCheckbox.scss +50 -48
  23. package/src/components/VCheckbox/VCheckbox.tsx +2 -2
  24. package/src/components/VChip/VChip.scss +61 -59
  25. package/src/components/VChip/VChip.tsx +6 -1
  26. package/src/components/VContentSwitcher/VContentSwitcher.scss +52 -50
  27. package/src/components/VControlField/VControlField.scss +148 -146
  28. package/src/components/VControlField/VControlField.tsx +3 -3
  29. package/src/components/VDataTable/VDataTable.scss +167 -168
  30. package/src/components/VDataTable/VDataTable.tsx +39 -8
  31. package/src/components/VDrawerLayout/VDrawerLayout.scss +27 -25
  32. package/src/components/VForm/VForm.tsx +3 -4
  33. package/src/components/VFormControl/VFormControl.scss +84 -82
  34. package/src/components/VFormControl/VFormControl.tsx +2 -3
  35. package/src/components/VGrid/VGridContainer.scss +5 -3
  36. package/src/components/VGrid/VGridItem.scss +4 -2
  37. package/src/components/VHero/VHero.scss +23 -21
  38. package/src/components/VIcon/VIcon.scss +19 -17
  39. package/src/components/VListTile/VListTile.scss +60 -58
  40. package/src/components/VListTile/VListTile.tsx +5 -0
  41. package/src/components/VNavigation/VNavigation.scss +12 -10
  42. package/src/components/VNavigation/VNavigationItem.scss +21 -19
  43. package/src/components/VNavigation/VNavigationItem.tsx +5 -0
  44. package/src/components/VOption/VOption.scss +55 -56
  45. package/src/components/VOption/VOption.tsx +2 -2
  46. package/src/components/VOptionGroup/VOptionGroup.scss +14 -12
  47. package/src/components/VOptionGroup/VOptionGroup.tsx +3 -1
  48. package/src/components/VPagination/VPagination.scss +81 -79
  49. package/src/components/VPagination/VPagination.tsx +1 -1
  50. package/src/components/VPaper/VPaper.scss +43 -41
  51. package/src/components/VRadio/VRadio.scss +52 -53
  52. package/src/components/VRadio/VRadio.tsx +2 -2
  53. package/src/components/VSelect/VSelect.scss +77 -75
  54. package/src/components/VSelect/VSelect.tsx +5 -2
  55. package/src/components/VSkeltonLoader/VSkeltonLoaderBone.scss +24 -22
  56. package/src/components/VSwitch/VSwitch.scss +96 -94
  57. package/src/components/VSwitch/VSwitch.tsx +2 -2
  58. package/src/components/VTabs/VTab.scss +59 -57
  59. package/src/components/VTabs/VTabs.scss +41 -39
  60. package/src/components/VTabs/VTabs.tsx +5 -2
  61. package/src/components/VTextCounter/VTextCounter.scss +4 -2
  62. package/src/components/VTextField/VTextField.scss +37 -35
  63. package/src/components/VTextField/VTextField.tsx +2 -2
  64. package/src/components/VTextarea/VTextarea.scss +33 -31
  65. package/src/components/VTextarea/VTextarea.tsx +2 -2
  66. package/src/components/VToolbar/VToolbar.scss +19 -17
  67. package/src/components/VToolbar/VToolbarEdge.scss +21 -19
  68. package/src/components/VToolbar/VToolbarMenu.scss +6 -4
  69. package/src/components/VToolbar/VToolbarMenu.tsx +5 -0
  70. package/src/components/VToolbar/VToolbarTitle.scss +19 -17
  71. package/src/components/VWysiwygEditor/VWysiwygEditor.scss +52 -50
  72. package/src/components/VWysiwygEditor/VWysiwygEditor.tsx +2 -2
  73. package/src/components/VWysiwygEditor/extensions/linter/Linter.scss +108 -109
  74. package/src/components/VWysiwygEditor/schemes.ts +1 -1
  75. package/src/components/VWysiwygEditor/tools/color.scss +106 -112
  76. package/src/components/kits.ts +1 -1
  77. package/src/composables/control.ts +1 -1
  78. package/src/composables/form-selector.scss +20 -18
  79. package/src/composables/form-selector.tsx +5 -3
  80. package/src/index.ts +13 -2
  81. package/src/plugin.tsx +4 -4
  82. package/src/schemes/control.ts +2 -2
  83. package/src/service.tsx +5 -5
  84. package/src/styles/core/functions.scss +2 -2
  85. package/src/styles/index.scss +23 -9
  86. package/dist/tool/index.d.ts +0 -2
  87. package/dist/tool/index.d.ts.map +0 -1
  88. package/dist/tool/index.mjs +0 -193
  89. package/dist/tool/vite-plugin.d.ts +0 -25
  90. package/dist/tool/vite-plugin.d.ts.map +0 -1
  91. package/src/.DS_Store +0 -0
  92. package/src/assets/builtins/color-scheme.ts +0 -9
  93. package/src/assets/builtins/media-match.ts +0 -3
  94. package/src/components/.DS_Store +0 -0
  95. package/src/components/VAvatar/.DS_Store +0 -0
  96. package/src/components/VChip/.DS_Store +0 -0
  97. package/src/components/VSkeltonLoader/.DS_Store +0 -0
  98. package/src/components/VTextField/.DS_Store +0 -0
  99. package/src/components/VWysiwygEditor/.DS_Store +0 -0
  100. package/src/components/VWysiwygEditor/extensions/.DS_Store +0 -0
  101. package/src/components/VWysiwygEditor/extensions/linter/.DS_Store +0 -0
  102. package/src/tool/index.ts +0 -2
  103. package/src/tool/vite-plugin.ts +0 -266
  104. /package/{src/styles → dist}/after-effects/display-flow.scss +0 -0
  105. /package/{src/styles → dist}/after-effects/spacing.scss +0 -0
  106. /package/{src/styles → dist}/after-effects/text.scss +0 -0
  107. /package/{src/styles → dist}/after-effects.scss +0 -0
  108. /package/dist/{assets/builtins → builtins}/color-scheme.ts +0 -0
  109. /package/dist/{assets/builtins → builtins}/media-match.ts +0 -0
@@ -1,230 +1,229 @@
1
- .v-data-table {
2
- --controls-vertial-margin: 0.625em;
1
+ @layer vui {
2
+ .v-data-table {
3
+ --controls-vertial-margin: 0.625em;
3
4
 
4
- .v-card-content & {
5
- margin-right: calc(var(--card-content-padding) * -1);
6
- margin-left: calc(var(--card-content-padding) * -1);
7
- }
8
-
9
- &__empty--message {
10
- // @include container;
5
+ .v-card-content & {
6
+ margin-right: calc(var(--card-content-padding) * -1);
7
+ margin-left: calc(var(--card-content-padding) * -1);
8
+ }
11
9
 
12
- // color: get-color(text-muted);
13
- }
10
+ &__empty--message {
11
+ // @include container;
14
12
 
15
- &__controls {
16
- display: flex;
17
- flex-wrap: wrap;
18
- align-items: center;
19
- justify-content: flex-end;
13
+ // color: get-color(text-muted);
14
+ }
20
15
 
21
- &__info {
16
+ &__controls {
22
17
  display: flex;
18
+ flex-wrap: wrap;
23
19
  align-items: center;
20
+ justify-content: flex-end;
24
21
 
25
- &__length {
26
- margin-right: 20px;
22
+ &__info {
23
+ display: flex;
24
+ align-items: center;
25
+
26
+ &__length {
27
+ margin-right: 20px;
28
+ }
27
29
  }
28
- }
29
30
 
30
- &__select-limit {
31
- display: flex;
32
- align-items: center;
31
+ &__select-limit {
32
+ display: flex;
33
+ align-items: center;
33
34
 
34
- &__prefix {
35
- margin-right: 0.5em;
36
- font-size: 0.75em;
37
- color: var(--palette-muted);
38
- white-space: nowrap;
39
- }
35
+ &__prefix {
36
+ margin-right: 0.5em;
37
+ font-size: 0.75em;
38
+ color: var(--palette-muted);
39
+ white-space: nowrap;
40
+ }
40
41
 
41
- .v-select {
42
- width: 5em;
43
- margin-left: 0.5em;
42
+ .v-select {
43
+ width: 5em;
44
+ margin-left: 0.5em;
45
+ }
44
46
  }
45
- }
46
47
 
47
- &__pagination {
48
- flex: 1 1 100%;
49
- margin-left: auto;
48
+ &__pagination {
49
+ flex: 1 1 100%;
50
+ margin-left: auto;
50
51
 
51
- @media screen and (min-width: 320px) {
52
- flex: 0 0 50%;
53
- width: 50%;
52
+ @media screen and (min-width: 320px) {
53
+ flex: 0 0 50%;
54
+ width: 50%;
55
+ }
54
56
  }
55
57
  }
56
- }
57
58
 
58
- &__header {
59
- margin-bottom: var(--controls-vertial-margin);
60
- }
59
+ &__header {
60
+ margin-bottom: var(--controls-vertial-margin);
61
+ }
61
62
 
62
- &__footer {
63
- margin-top: var(--controls-vertial-margin);
64
- }
63
+ &__footer {
64
+ margin-top: var(--controls-vertial-margin);
65
+ }
65
66
 
66
- &__body {
67
- position: relative;
67
+ &__body {
68
+ position: relative;
68
69
 
69
- &__inner {
70
- overflow-x: auto;
70
+ &__inner {
71
+ overflow-x: auto;
72
+ }
71
73
  }
72
- }
73
74
 
74
- &__table-wrapper {
75
- display: flex;
75
+ &__table-wrapper {
76
+ display: flex;
76
77
 
77
- &::before,
78
- &::after {
79
- display: block;
80
- // flex: 0 0 $view-padding-narrow;
81
- // width: $view-padding-narrow;
82
- height: 1px;
83
- content: '';
78
+ &::before,
79
+ &::after {
80
+ display: block;
81
+ // flex: 0 0 $view-padding-narrow;
82
+ // width: $view-padding-narrow;
83
+ height: 1px;
84
+ content: '';
85
+
86
+ // @include mq(wide) {
87
+ // flex-basis: $view-padding-wide;
88
+ // width: $view-padding-wide;
89
+ // }
90
+ }
91
+ }
84
92
 
85
- // @include mq(wide) {
86
- // flex-basis: $view-padding-wide;
87
- // width: $view-padding-wide;
88
- // }
93
+ &__loading {
94
+ position: absolute;
95
+ inset: 0;
96
+ z-index: 1;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ background: var(--palette-background);
101
+ opacity: 0.5;
89
102
  }
90
- }
91
103
 
92
- &__loading {
93
- position: absolute;
94
- top: 0;
95
- right: 0;
96
- bottom: 0;
97
- left: 0;
98
- z-index: 1;
99
- display: flex;
100
- align-items: center;
101
- justify-content: center;
102
- background: var(--palette-background);
103
- opacity: 0.5;
104
- }
104
+ &__table {
105
+ width: 100%;
106
+ // min-width: calc(100% - #{$view-padding-narrow * 2});
107
+ margin: 0;
108
+ // border-collapse: separate;
109
+ background: var(--palette-background);
110
+ border-radius: var(--control-field-radius);
105
111
 
106
- &__table {
107
- width: 100%;
108
- // min-width: calc(100% - #{$view-padding-narrow * 2});
109
- margin: 0;
110
- // border-collapse: separate;
111
- background: var(--palette-background);
112
- border-radius: var(--control-field-radius);
112
+ // @include mq(wide) {
113
+ // min-width: calc(100% - #{$view-padding-wide * 2});
114
+ // }
113
115
 
114
- // @include mq(wide) {
115
- // min-width: calc(100% - #{$view-padding-wide * 2});
116
- // }
116
+ &__cell {
117
+ position: relative;
118
+ text-align: left;
119
+ white-space: nowrap;
120
+ vertical-align: middle;
121
+ border-bottom: thin solid rgba(0, 0, 0, 0.12);
122
+ transition: background 0.2s;
117
123
 
118
- &__cell {
119
- position: relative;
120
- text-align: left;
121
- white-space: nowrap;
122
- vertical-align: middle;
123
- border-bottom: thin solid rgba(0, 0, 0, 0.12);
124
- transition: background 0.2s;
125
-
126
- &:first-child {
127
- padding-left: calc(var(--table-cell-horizontal-padding) * 2);
128
- }
124
+ &:first-child {
125
+ padding-left: calc(var(--table-cell-horizontal-padding) * 2);
126
+ }
129
127
 
130
- &:last-child {
131
- padding-right: calc(var(--table-cell-horizontal-padding) * 2);
132
- }
128
+ &:last-child {
129
+ padding-right: calc(var(--table-cell-horizontal-padding) * 2);
130
+ }
133
131
 
134
- &--left {
135
- text-align: left;
136
- }
132
+ &--left {
133
+ text-align: left;
134
+ }
137
135
 
138
- &--center {
139
- text-align: center;
136
+ &--center {
137
+ text-align: center;
140
138
 
141
- .v-data-table__table__sort-icon--empty {
142
- display: flex;
139
+ .v-data-table__table__sort-icon--empty {
140
+ display: flex;
141
+ }
143
142
  }
144
- }
145
143
 
146
- &--right {
147
- text-align: right;
148
- }
144
+ &--right {
145
+ text-align: right;
146
+ }
149
147
 
150
- &[tabindex='0'] {
151
- cursor: pointer;
148
+ &[tabindex='0'] {
149
+ cursor: pointer;
152
150
 
153
- &:hover,
154
- &:focus {
155
- // background: var(--shadow-color);
156
- // background: get-color(light);
151
+ &:hover,
152
+ &:focus {
153
+ // background: var(--shadow-color);
154
+ // background: get-color(light);
155
+ }
157
156
  }
158
- }
159
157
 
160
- &__tile {
161
- display: flex;
162
- align-items: center;
158
+ &__tile {
159
+ display: flex;
160
+ align-items: center;
161
+ }
163
162
  }
164
- }
165
163
 
166
- &__sort-icon {
167
- width: 25px;
168
- font-size: 1.25em;
169
- opacity: 0;
170
- transition: transform 0.2s, opacity 0.2s;
164
+ &__sort-icon {
165
+ width: 25px;
166
+ font-size: 1.25em;
167
+ opacity: 0;
168
+ transition: transform 0.2s, opacity 0.2s;
171
169
 
172
- // stylelint-disable-next-line no-descending-specificity
173
- &--empty {
174
- display: none;
170
+ // stylelint-disable-next-line no-descending-specificity
171
+ &--empty {
172
+ display: none;
173
+ }
175
174
  }
176
- }
177
175
 
178
- &__header &__cell {
179
- user-select: none;
180
- background: rgba(255, 255, 255, 0.85);
181
- backdrop-filter: blur(3px);
176
+ &__header &__cell {
177
+ user-select: none;
178
+ background: rgba(255, 255, 255, 0.85);
179
+ backdrop-filter: blur(3px);
182
180
 
183
- &--active[tabindex='0'] {
184
- // color: get-color(invert-text);
185
- // background: get-color(primary);
181
+ &--active[tabindex='0'] {
182
+ // color: get-color(invert-text);
183
+ // background: get-color(primary);
184
+ }
186
185
  }
187
- }
188
-
189
- &__header &__cell--active &__sort-icon {
190
- opacity: 1;
191
- }
192
186
 
193
- &__cell[tabindex='0']:hover &__sort-icon,
194
- &__cell[tabindex='0']:focus &__sort-icon {
195
- opacity: 1;
196
- }
187
+ &__header &__cell--active &__sort-icon {
188
+ opacity: 1;
189
+ }
197
190
 
198
- &__body tr:last-child &__cell {
199
- border-bottom: none;
200
- }
191
+ &__cell[tabindex='0']:hover &__sort-icon,
192
+ &__cell[tabindex='0']:focus &__sort-icon {
193
+ opacity: 1;
194
+ }
201
195
 
202
- &__item {
203
- &:hover {
204
- td {
205
- // background: get-color(tocuh-0);
206
- }
196
+ &__body tr:last-child &__cell {
197
+ border-bottom: none;
207
198
  }
208
199
 
209
- &--selected {
210
- // stylelint-disable-next-line no-descending-specificity
211
- td {
212
- // background: get-color(light);
200
+ &__item {
201
+ &:hover {
202
+ td {
203
+ // background: get-color(tocuh-0);
204
+ }
213
205
  }
214
206
 
215
- &:hover {
207
+ &--selected {
208
+ // stylelint-disable-next-line no-descending-specificity
216
209
  td {
217
210
  // background: get-color(light);
218
211
  }
212
+
213
+ &:hover {
214
+ td {
215
+ // background: get-color(light);
216
+ }
217
+ }
219
218
  }
220
219
  }
221
220
  }
222
- }
223
221
 
224
- // stylelint-disable-next-line no-descending-specificity
225
- &--fixed-header &__table__header &__table__cell {
226
- position: sticky;
227
- top: 0;
228
- z-index: 1;
222
+ // stylelint-disable-next-line no-descending-specificity
223
+ &--fixed-header &__table__header &__table__cell {
224
+ position: sticky;
225
+ top: 0;
226
+ z-index: 1;
227
+ }
229
228
  }
230
229
  }
@@ -13,6 +13,7 @@ import {
13
13
  withDirectives,
14
14
  Transition,
15
15
  isVNode,
16
+ HTMLAttributes,
16
17
  } from 'vue';
17
18
  import { useVui } from '../../injections';
18
19
  import type { VuiService } from '../../service';
@@ -23,6 +24,7 @@ import { VIcon, resolveRawIconProp } from '../VIcon';
23
24
  import { VProgressCircular } from '../loading';
24
25
  import { resizeDirectiveArgument, VNodeChildOrSlot } from '@fastkit/vue-utils';
25
26
  import { VueAppLayout } from '@fastkit/vue-app-layout';
27
+ import { ScopeName, toScopeColorClass } from '@fastkit/vue-color-scheme';
26
28
  import { VPaper } from '../VPaper';
27
29
 
28
30
  export type DataTableHeaderAlign = 'left' | 'center' | 'right';
@@ -88,6 +90,19 @@ export interface DataTableHeader<T extends DataTableItem = DataTableItem> {
88
90
  cell?: (payload: DataTableCellSlotPayload<T>) => VNodeChild;
89
91
  }
90
92
 
93
+ export interface DataTableRowSettings<T extends DataTableItem = DataTableItem> {
94
+ color?: ScopeName;
95
+ attrs?: HTMLAttributes;
96
+ }
97
+
98
+ export type DataTableRowSettingsFn<T extends DataTableItem = DataTableItem> = (
99
+ payload: DataTableItemSlotPayload<T>,
100
+ ) => DataTableRowSettings<T>;
101
+
102
+ export type RawDataTableRowSettings<T extends DataTableItem = DataTableItem> =
103
+ | DataTableRowSettingsFn<T>
104
+ | DataTableRowSettings<T>;
105
+
91
106
  const SELECTABLE_HEADER_SYMBOL = '__selectable_header__';
92
107
 
93
108
  export const VDataTable = defineComponent({
@@ -186,6 +201,7 @@ export const VDataTable = defineComponent({
186
201
  noDataMessage: {} as PropType<VNodeChildOrSlot>,
187
202
  // eslint-disable-next-line vue/require-prop-types
188
203
  noResultsMessage: {} as PropType<VNodeChildOrSlot>,
204
+ rowSettings: [Object, Function] as PropType<RawDataTableRowSettings>,
189
205
  },
190
206
  emits: {
191
207
  input: (selecteds: string[]) => true,
@@ -195,6 +211,15 @@ export const VDataTable = defineComponent({
195
211
  const bootedRef = ref(false);
196
212
  const footerHeightRef = ref(0);
197
213
  const internalValues = ref<string[]>(props.modelValue.slice());
214
+ const rowSettings = computed<DataTableRowSettingsFn>(() => {
215
+ const { rowSettings } = props;
216
+ if (!rowSettings) return () => ({});
217
+ return typeof rowSettings === 'function'
218
+ ? rowSettings
219
+ : () => rowSettings;
220
+ });
221
+ const containedVariant = vui.setting('containedVariant');
222
+
198
223
  const sortedItemKeysRef = computed(() =>
199
224
  props.items.map((item) => item[props.itemKey]),
200
225
  );
@@ -725,15 +750,21 @@ export const VDataTable = defineComponent({
725
750
  </td>
726
751
  );
727
752
  });
753
+
754
+ const { color, attrs } = rowSettings.value(payload);
755
+ const colorClass = color && toScopeColorClass(color);
756
+ const classes = [
757
+ 'v-data-table__table__item',
758
+ {
759
+ 'v-data-table__table__item--selected': selected,
760
+ },
761
+ ];
762
+ if (colorClass) {
763
+ classes.push(colorClass, containedVariant);
764
+ }
765
+
728
766
  return (
729
- <tr
730
- class={[
731
- 'v-data-table__table__item',
732
- {
733
- 'v-data-table__table__item--selected': selected,
734
- },
735
- ]}
736
- key={key}>
767
+ <tr class={classes} key={key} {...attrs}>
737
768
  {children}
738
769
  </tr>
739
770
  );
@@ -1,32 +1,34 @@
1
- .v-drawer-layout {
2
- display: block;
3
- width: 100%;
4
- height: 100%;
5
-
6
- &__inner {
7
- display: flex;
8
- flex-direction: column;
9
- align-items: stretch;
1
+ @layer vui {
2
+ .v-drawer-layout {
3
+ display: block;
10
4
  width: 100%;
11
5
  height: 100%;
12
- }
13
6
 
14
- &__header {
15
- display: flex;
16
- flex: 0 0 var(--val-topToolbar-height);
17
- align-items: center;
18
- justify-content: center;
19
- height: var(--val-topToolbar-height);
20
- }
7
+ &__inner {
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: stretch;
11
+ width: 100%;
12
+ height: 100%;
13
+ }
21
14
 
22
- &__body {
23
- flex: 1 1 100%;
24
- overflow: auto;
25
- -webkit-overflow-scrolling: touch;
26
- }
15
+ &__header {
16
+ display: flex;
17
+ flex: 0 0 var(--val-topToolbar-height);
18
+ align-items: center;
19
+ justify-content: center;
20
+ height: var(--val-topToolbar-height);
21
+ }
22
+
23
+ &__body {
24
+ flex: 1 1 100%;
25
+ overflow: auto;
26
+ -webkit-overflow-scrolling: touch;
27
+ }
27
28
 
28
- &__footer {
29
- flex: 0 0 auto;
30
- margin-top: auto;
29
+ &__footer {
30
+ flex: 0 0 auto;
31
+ margin-top: auto;
32
+ }
31
33
  }
32
34
  }
@@ -3,10 +3,9 @@ import {
3
3
  VueForm,
4
4
  createFormSettings,
5
5
  useForm,
6
- defineSlotsProps,
7
- renderSlotOrEmpty,
8
- getDocumentScroller,
9
- } from '@fastkit/vue-kit';
6
+ } from '@fastkit/vue-form-control';
7
+ import { defineSlotsProps, renderSlotOrEmpty } from '@fastkit/vue-utils';
8
+ import { getDocumentScroller } from '@fastkit/vue-scroller';
10
9
  import { createControlProps, useControl } from '../../composables';
11
10
  import { VUI_FORM_SYMBOL, useVui } from '../../injections';
12
11