@fastkit/vui 0.7.14 → 0.7.17

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.
@@ -122,6 +122,7 @@ function viteVuiPlugin(options = {}) {
122
122
  editorLinkOff: 'mdi-link-off',
123
123
  editorUndo: 'mdi-undo-variant',
124
124
  editorRedo: 'mdi-redo-variant',
125
+ hinttip: 'mdi-help-circle-outline',
125
126
  // navigationExpand: (gen, active) => {
126
127
  // return gen({
127
128
  // name: 'mdi-menu-down' as any,
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../../../../../../packages/vui/src/tool/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAK9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+F/C,MAAM,WAAW,oBACf,SAAQ,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAuJrB"}
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../../../../../../packages/vui/src/tool/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAK9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+F/C,MAAM,WAAW,oBACf,SAAQ,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAwJrB"}
package/dist/vui.cjs.js CHANGED
@@ -139,6 +139,71 @@ function useControlField(props, opts = {}) {
139
139
  return provider;
140
140
  }
141
141
 
142
+ // prop: RawIconProp<T>,
143
+ // payload: () => T,
144
+ // ): RawIconProp {
145
+ // if (!prop || typeof prop !== 'function') {
146
+ // return prop;
147
+ // }
148
+ // const fn = (gen: IconGenerator): VNodeChild => {
149
+ // const t = payload();
150
+ // return prop(gen, t);
151
+ // };
152
+ // return fn;
153
+ // }
154
+ // export const rawRawIconProp = [String, Function] as PropType<RawIconProp>;
155
+
156
+ const _rawIconProp = [String, Function];
157
+ function rawIconProp() {
158
+ return _rawIconProp;
159
+ }
160
+ function resolveRawIconProp(payload, prop, extraProps) {
161
+ if (!prop) return;
162
+ return typeof prop === 'function' ? prop(input => vue.createVNode(VIcon, vue.mergeProps(input, extraProps), null), payload) : vue.createVNode(VIcon, vue.mergeProps(extraProps, {
163
+ "name": prop
164
+ }), null);
165
+ }
166
+ const iconProps = vueUtils.createPropsOptions({
167
+ name: {
168
+ type: String,
169
+ required: true
170
+ },
171
+ rotate: {
172
+ type: Number
173
+ }
174
+ });
175
+ const VIcon = vue.defineComponent({
176
+ name: 'VIcon',
177
+ props: { ...iconProps
178
+ },
179
+ emits: {},
180
+
181
+ setup(props, ctx) {
182
+ const iconName = vue.computed(() => props.name);
183
+ const clickable = vue.computed(() => typeof ctx.attrs.onClick !== 'undefined');
184
+ const classes = vue.computed(() => [{
185
+ 'v-icon--clickable': clickable.value
186
+ }]);
187
+ const bodyClasses = vue.computed(() => `icon-${iconName.value}`);
188
+ const bodyStyles = vue.computed(() => {
189
+ const {
190
+ rotate
191
+ } = props;
192
+ if (!rotate) return;
193
+ return {
194
+ transform: `rotate(${rotate}deg)`
195
+ };
196
+ });
197
+ return () => vue.createVNode("span", {
198
+ "class": [`v-icon notranslate`, classes.value]
199
+ }, [vue.createVNode("i", {
200
+ "class": ['v-icon__body icon', bodyClasses.value],
201
+ "style": bodyStyles.value
202
+ }, null)]);
203
+ }
204
+
205
+ });
206
+
142
207
  const {
143
208
  props: props$8,
144
209
  emits: emits$8
@@ -151,9 +216,14 @@ const VFormControl = vue.defineComponent({
151
216
  emits: emits$8,
152
217
 
153
218
  setup(props, ctx) {
154
- const control = vueKit.useFormControl(props, ctx);
155
- ctx.expose(control.expose());
156
219
  const vui = useVui();
220
+ const control = vueKit.useFormControl(props, ctx, {
221
+ hinttipPrepend: () => vue.createVNode(VIcon, {
222
+ "class": "v-form-control__label__hinttip__icon",
223
+ "name": vui.icon('hinttip')
224
+ }, null)
225
+ });
226
+ ctx.expose(control.expose());
157
227
  const colorProvider = useVuiColorProvider();
158
228
  const classes = vue.computed(() => [{
159
229
  'v-form-control--validating': control.validating,
@@ -172,6 +242,7 @@ const VFormControl = vue.defineComponent({
172
242
  const label = control.renderLabel();
173
243
  const message = control.renderMessage();
174
244
  const appends = control.renderInfoAppends();
245
+ const hinttip = control.renderHinttip();
175
246
  return vue.createVNode("div", {
176
247
  "class": ['v-form-control', classes.value]
177
248
  }, [label && vue.createVNode("label", {
@@ -179,7 +250,18 @@ const VFormControl = vue.defineComponent({
179
250
  "onClick": ev => {
180
251
  ctx.emit('clickLabel', ev, control);
181
252
  }
182
- }, [label, control.required && vui.getRequiredChip()]), vue.createVNode("div", {
253
+ }, [label, control.required && vui.getRequiredChip(), hinttip && vue.createVNode(vueKit.VTooltip, {
254
+ "top": true,
255
+ "openOnHover": false
256
+ }, {
257
+ default: () => [vue.createVNode("div", {
258
+ "class": "v-form-control__label__hinttip__hint"
259
+ }, [hinttip.hint])],
260
+ activator: ctx => vue.createVNode("a", vue.mergeProps({
261
+ "class": "v-form-control__label__hinttip",
262
+ "href": "javascript:void(0)"
263
+ }, ctx.attrs), [hinttip.tip])
264
+ })]), vue.createVNode("div", {
183
265
  "class": "v-form-control__body"
184
266
  }, [vueKit.renderSlotOrEmpty(ctx.slots, 'default', control), !props.hiddenInfo && vue.createVNode("div", {
185
267
  "class": "v-form-control__info"
@@ -239,7 +321,8 @@ function defineFormSelectorComponent(opts) {
239
321
  'v-form-selector--stacked': this.stacked
240
322
  }],
241
323
  "label": this.label,
242
- "hint": this.hint
324
+ "hint": this.hint,
325
+ "hinttip": this.hinttip
243
326
  }, { ...this.$slots,
244
327
  default: () => vue.createVNode("div", {
245
328
  "class": "v-form-selector__body"
@@ -567,71 +650,6 @@ const VCardActions = vue.defineComponent({
567
650
 
568
651
  });
569
652
 
570
- // prop: RawIconProp<T>,
571
- // payload: () => T,
572
- // ): RawIconProp {
573
- // if (!prop || typeof prop !== 'function') {
574
- // return prop;
575
- // }
576
- // const fn = (gen: IconGenerator): VNodeChild => {
577
- // const t = payload();
578
- // return prop(gen, t);
579
- // };
580
- // return fn;
581
- // }
582
- // export const rawRawIconProp = [String, Function] as PropType<RawIconProp>;
583
-
584
- const _rawIconProp = [String, Function];
585
- function rawIconProp() {
586
- return _rawIconProp;
587
- }
588
- function resolveRawIconProp(payload, prop, extraProps) {
589
- if (!prop) return;
590
- return typeof prop === 'function' ? prop(input => vue.createVNode(VIcon, vue.mergeProps(input, extraProps), null), payload) : vue.createVNode(VIcon, vue.mergeProps(extraProps, {
591
- "name": prop
592
- }), null);
593
- }
594
- const iconProps = vueUtils.createPropsOptions({
595
- name: {
596
- type: String,
597
- required: true
598
- },
599
- rotate: {
600
- type: Number
601
- }
602
- });
603
- const VIcon = vue.defineComponent({
604
- name: 'VIcon',
605
- props: { ...iconProps
606
- },
607
- emits: {},
608
-
609
- setup(props, ctx) {
610
- const iconName = vue.computed(() => props.name);
611
- const clickable = vue.computed(() => typeof ctx.attrs.onClick !== 'undefined');
612
- const classes = vue.computed(() => [{
613
- 'v-icon--clickable': clickable.value
614
- }]);
615
- const bodyClasses = vue.computed(() => `icon-${iconName.value}`);
616
- const bodyStyles = vue.computed(() => {
617
- const {
618
- rotate
619
- } = props;
620
- if (!rotate) return;
621
- return {
622
- transform: `rotate(${rotate}deg)`
623
- };
624
- });
625
- return () => vue.createVNode("span", {
626
- "class": [`v-icon notranslate`, classes.value]
627
- }, [vue.createVNode("i", {
628
- "class": ['v-icon__body icon', bodyClasses.value],
629
- "style": bodyStyles.value
630
- }, null)]);
631
- }
632
-
633
- });
634
-
635
653
  function resolveRawVButtonIcon(raw, type = 'main') {
636
654
  if (!raw) return;
637
655
  return typeof raw === 'function' ? raw : () => vue.createVNode(VIcon, {
@@ -2040,6 +2058,7 @@ const VSelect = vue.defineComponent({
2040
2058
  "class": ['v-select', this.classes],
2041
2059
  "label": this.label,
2042
2060
  "hint": this.hint,
2061
+ "hinttip": this.hinttip,
2043
2062
  "hiddenInfo": this.hiddenInfo,
2044
2063
  "onClickLabel": ev => {
2045
2064
  this.focus();
@@ -2174,6 +2193,7 @@ const VTextField = vue.defineComponent({
2174
2193
  "class": ['v-text-field', this.classes],
2175
2194
  "label": this.label,
2176
2195
  "hint": this.hint,
2196
+ "hinttip": this.hinttip,
2177
2197
  "onClickLabel": ev => {
2178
2198
  this.focus();
2179
2199
  }
@@ -2234,6 +2254,7 @@ const VTextarea = vue.defineComponent({
2234
2254
  "class": ['v-textarea', this.classes],
2235
2255
  "label": this.label,
2236
2256
  "hint": this.hint,
2257
+ "hinttip": this.hinttip,
2237
2258
  "hiddenInfo": this.hiddenInfo,
2238
2259
  "onClickLabel": ev => {
2239
2260
  this.focus();
@@ -2456,6 +2477,7 @@ const VWysiwygEditor = vue.defineComponent({
2456
2477
  }],
2457
2478
  "label": this.label,
2458
2479
  "hint": this.hint,
2480
+ "hinttip": this.hinttip,
2459
2481
  "hiddenInfo": this.hiddenInfo,
2460
2482
  "onClickLabel": ev => {
2461
2483
  this.focus('start', {
@@ -4271,6 +4293,7 @@ function installVuiPlugin(app, opts) {
4271
4293
  exports.VDialog = vueKit.VDialog;
4272
4294
  exports.VMenu = vueKit.VMenu;
4273
4295
  exports.VSnackbar = vueKit.VSnackbar;
4296
+ exports.VTooltip = vueKit.VTooltip;
4274
4297
  exports.ICON_NAMES = iconFont.ICON_NAMES;
4275
4298
  exports.CONTROL_FIELD_VARIANTS = CONTROL_FIELD_VARIANTS;
4276
4299
  exports.CONTROL_SIZES = CONTROL_SIZES;
@@ -139,6 +139,71 @@ function useControlField(props, opts = {}) {
139
139
  return provider;
140
140
  }
141
141
 
142
+ // prop: RawIconProp<T>,
143
+ // payload: () => T,
144
+ // ): RawIconProp {
145
+ // if (!prop || typeof prop !== 'function') {
146
+ // return prop;
147
+ // }
148
+ // const fn = (gen: IconGenerator): VNodeChild => {
149
+ // const t = payload();
150
+ // return prop(gen, t);
151
+ // };
152
+ // return fn;
153
+ // }
154
+ // export const rawRawIconProp = [String, Function] as PropType<RawIconProp>;
155
+
156
+ const _rawIconProp = [String, Function];
157
+ function rawIconProp() {
158
+ return _rawIconProp;
159
+ }
160
+ function resolveRawIconProp(payload, prop, extraProps) {
161
+ if (!prop) return;
162
+ return typeof prop === 'function' ? prop(input => vue.createVNode(VIcon, vue.mergeProps(input, extraProps), null), payload) : vue.createVNode(VIcon, vue.mergeProps(extraProps, {
163
+ "name": prop
164
+ }), null);
165
+ }
166
+ const iconProps = vueUtils.createPropsOptions({
167
+ name: {
168
+ type: String,
169
+ required: true
170
+ },
171
+ rotate: {
172
+ type: Number
173
+ }
174
+ });
175
+ const VIcon = vue.defineComponent({
176
+ name: 'VIcon',
177
+ props: { ...iconProps
178
+ },
179
+ emits: {},
180
+
181
+ setup(props, ctx) {
182
+ const iconName = vue.computed(() => props.name);
183
+ const clickable = vue.computed(() => typeof ctx.attrs.onClick !== 'undefined');
184
+ const classes = vue.computed(() => [{
185
+ 'v-icon--clickable': clickable.value
186
+ }]);
187
+ const bodyClasses = vue.computed(() => `icon-${iconName.value}`);
188
+ const bodyStyles = vue.computed(() => {
189
+ const {
190
+ rotate
191
+ } = props;
192
+ if (!rotate) return;
193
+ return {
194
+ transform: `rotate(${rotate}deg)`
195
+ };
196
+ });
197
+ return () => vue.createVNode("span", {
198
+ "class": [`v-icon notranslate`, classes.value]
199
+ }, [vue.createVNode("i", {
200
+ "class": ['v-icon__body icon', bodyClasses.value],
201
+ "style": bodyStyles.value
202
+ }, null)]);
203
+ }
204
+
205
+ });
206
+
142
207
  const {
143
208
  props: props$8,
144
209
  emits: emits$8
@@ -151,9 +216,14 @@ const VFormControl = vue.defineComponent({
151
216
  emits: emits$8,
152
217
 
153
218
  setup(props, ctx) {
154
- const control = vueKit.useFormControl(props, ctx);
155
- ctx.expose(control.expose());
156
219
  const vui = useVui();
220
+ const control = vueKit.useFormControl(props, ctx, {
221
+ hinttipPrepend: () => vue.createVNode(VIcon, {
222
+ "class": "v-form-control__label__hinttip__icon",
223
+ "name": vui.icon('hinttip')
224
+ }, null)
225
+ });
226
+ ctx.expose(control.expose());
157
227
  const colorProvider = useVuiColorProvider();
158
228
  const classes = vue.computed(() => [{
159
229
  'v-form-control--validating': control.validating,
@@ -172,6 +242,7 @@ const VFormControl = vue.defineComponent({
172
242
  const label = control.renderLabel();
173
243
  const message = control.renderMessage();
174
244
  const appends = control.renderInfoAppends();
245
+ const hinttip = control.renderHinttip();
175
246
  return vue.createVNode("div", {
176
247
  "class": ['v-form-control', classes.value]
177
248
  }, [label && vue.createVNode("label", {
@@ -179,7 +250,18 @@ const VFormControl = vue.defineComponent({
179
250
  "onClick": ev => {
180
251
  ctx.emit('clickLabel', ev, control);
181
252
  }
182
- }, [label, control.required && vui.getRequiredChip()]), vue.createVNode("div", {
253
+ }, [label, control.required && vui.getRequiredChip(), hinttip && vue.createVNode(vueKit.VTooltip, {
254
+ "top": true,
255
+ "openOnHover": false
256
+ }, {
257
+ default: () => [vue.createVNode("div", {
258
+ "class": "v-form-control__label__hinttip__hint"
259
+ }, [hinttip.hint])],
260
+ activator: ctx => vue.createVNode("a", vue.mergeProps({
261
+ "class": "v-form-control__label__hinttip",
262
+ "href": "javascript:void(0)"
263
+ }, ctx.attrs), [hinttip.tip])
264
+ })]), vue.createVNode("div", {
183
265
  "class": "v-form-control__body"
184
266
  }, [vueKit.renderSlotOrEmpty(ctx.slots, 'default', control), !props.hiddenInfo && vue.createVNode("div", {
185
267
  "class": "v-form-control__info"
@@ -239,7 +321,8 @@ function defineFormSelectorComponent(opts) {
239
321
  'v-form-selector--stacked': this.stacked
240
322
  }],
241
323
  "label": this.label,
242
- "hint": this.hint
324
+ "hint": this.hint,
325
+ "hinttip": this.hinttip
243
326
  }, { ...this.$slots,
244
327
  default: () => vue.createVNode("div", {
245
328
  "class": "v-form-selector__body"
@@ -567,71 +650,6 @@ const VCardActions = vue.defineComponent({
567
650
 
568
651
  });
569
652
 
570
- // prop: RawIconProp<T>,
571
- // payload: () => T,
572
- // ): RawIconProp {
573
- // if (!prop || typeof prop !== 'function') {
574
- // return prop;
575
- // }
576
- // const fn = (gen: IconGenerator): VNodeChild => {
577
- // const t = payload();
578
- // return prop(gen, t);
579
- // };
580
- // return fn;
581
- // }
582
- // export const rawRawIconProp = [String, Function] as PropType<RawIconProp>;
583
-
584
- const _rawIconProp = [String, Function];
585
- function rawIconProp() {
586
- return _rawIconProp;
587
- }
588
- function resolveRawIconProp(payload, prop, extraProps) {
589
- if (!prop) return;
590
- return typeof prop === 'function' ? prop(input => vue.createVNode(VIcon, vue.mergeProps(input, extraProps), null), payload) : vue.createVNode(VIcon, vue.mergeProps(extraProps, {
591
- "name": prop
592
- }), null);
593
- }
594
- const iconProps = vueUtils.createPropsOptions({
595
- name: {
596
- type: String,
597
- required: true
598
- },
599
- rotate: {
600
- type: Number
601
- }
602
- });
603
- const VIcon = vue.defineComponent({
604
- name: 'VIcon',
605
- props: { ...iconProps
606
- },
607
- emits: {},
608
-
609
- setup(props, ctx) {
610
- const iconName = vue.computed(() => props.name);
611
- const clickable = vue.computed(() => typeof ctx.attrs.onClick !== 'undefined');
612
- const classes = vue.computed(() => [{
613
- 'v-icon--clickable': clickable.value
614
- }]);
615
- const bodyClasses = vue.computed(() => `icon-${iconName.value}`);
616
- const bodyStyles = vue.computed(() => {
617
- const {
618
- rotate
619
- } = props;
620
- if (!rotate) return;
621
- return {
622
- transform: `rotate(${rotate}deg)`
623
- };
624
- });
625
- return () => vue.createVNode("span", {
626
- "class": [`v-icon notranslate`, classes.value]
627
- }, [vue.createVNode("i", {
628
- "class": ['v-icon__body icon', bodyClasses.value],
629
- "style": bodyStyles.value
630
- }, null)]);
631
- }
632
-
633
- });
634
-
635
653
  function resolveRawVButtonIcon(raw, type = 'main') {
636
654
  if (!raw) return;
637
655
  return typeof raw === 'function' ? raw : () => vue.createVNode(VIcon, {
@@ -2040,6 +2058,7 @@ const VSelect = vue.defineComponent({
2040
2058
  "class": ['v-select', this.classes],
2041
2059
  "label": this.label,
2042
2060
  "hint": this.hint,
2061
+ "hinttip": this.hinttip,
2043
2062
  "hiddenInfo": this.hiddenInfo,
2044
2063
  "onClickLabel": ev => {
2045
2064
  this.focus();
@@ -2174,6 +2193,7 @@ const VTextField = vue.defineComponent({
2174
2193
  "class": ['v-text-field', this.classes],
2175
2194
  "label": this.label,
2176
2195
  "hint": this.hint,
2196
+ "hinttip": this.hinttip,
2177
2197
  "onClickLabel": ev => {
2178
2198
  this.focus();
2179
2199
  }
@@ -2234,6 +2254,7 @@ const VTextarea = vue.defineComponent({
2234
2254
  "class": ['v-textarea', this.classes],
2235
2255
  "label": this.label,
2236
2256
  "hint": this.hint,
2257
+ "hinttip": this.hinttip,
2237
2258
  "hiddenInfo": this.hiddenInfo,
2238
2259
  "onClickLabel": ev => {
2239
2260
  this.focus();
@@ -2456,6 +2477,7 @@ const VWysiwygEditor = vue.defineComponent({
2456
2477
  }],
2457
2478
  "label": this.label,
2458
2479
  "hint": this.hint,
2480
+ "hinttip": this.hinttip,
2459
2481
  "hiddenInfo": this.hiddenInfo,
2460
2482
  "onClickLabel": ev => {
2461
2483
  this.focus('start', {
@@ -4271,6 +4293,7 @@ function installVuiPlugin(app, opts) {
4271
4293
  exports.VDialog = vueKit.VDialog;
4272
4294
  exports.VMenu = vueKit.VMenu;
4273
4295
  exports.VSnackbar = vueKit.VSnackbar;
4296
+ exports.VTooltip = vueKit.VTooltip;
4274
4297
  exports.ICON_NAMES = iconFont.ICON_NAMES;
4275
4298
  exports.CONTROL_FIELD_VARIANTS = CONTROL_FIELD_VARIANTS;
4276
4299
  exports.CONTROL_SIZES = CONTROL_SIZES;
package/dist/vui.css CHANGED
@@ -866,6 +866,8 @@ thead th {
866
866
  --my-message-color: var(--control-disabled-color);
867
867
  }
868
868
  .v-form-control__label {
869
+ display: flex;
870
+ align-items: center;
869
871
  align-self: flex-start;
870
872
  font-size: var(--control-label-font-size);
871
873
  font-weight: var(--control-label-font-weight);
@@ -873,6 +875,32 @@ thead th {
873
875
  color: var(--my-label-color);
874
876
  letter-spacing: 0.00938em;
875
877
  }
878
+ .v-form-control__label__hinttip {
879
+ display: inline-flex;
880
+ align-items: center;
881
+ margin-top: -0.2em;
882
+ margin-left: 0.6em;
883
+ font-size: 80%;
884
+ line-height: 1;
885
+ color: inherit;
886
+ text-decoration: none;
887
+ letter-spacing: normal;
888
+ cursor: pointer;
889
+ }
890
+ .v-form-control__label__hinttip__icon {
891
+ position: relative;
892
+ display: flex;
893
+ align-items: center;
894
+ justify-content: center;
895
+ font-size: 120%;
896
+ text-decoration: none !important;
897
+ }
898
+ .v-form-control__label__hinttip:hover .v-form-control__label__hinttip__icon::before, .v-form-control__label__hinttip:focus .v-form-control__label__hinttip__icon::before {
899
+ opacity: 0.1;
900
+ }
901
+ .v-form-control__label__hinttip__hint {
902
+ font-size: calc(var(--root-em) * 0.75);
903
+ }
876
904
  .v-form-control__info {
877
905
  display: flex;
878
906
  padding-top: 3px;
@@ -890,6 +918,23 @@ thead th {
890
918
  flex: 0 1;
891
919
  margin-left: auto;
892
920
  }
921
+ .v-icon {
922
+ display: inline-flex;
923
+ align-items: center;
924
+ justify-content: center;
925
+ width: 1.25em;
926
+ user-select: none;
927
+ aspect-ratio: 1/1;
928
+ }
929
+ .v-icon--clickable {
930
+ cursor: pointer;
931
+ }
932
+ .v-icon__body {
933
+ display: inline-flex;
934
+ align-items: center;
935
+ justify-content: center;
936
+ transition: transform 150ms linear;
937
+ }
893
938
  .v-grid-item {
894
939
  display: block;
895
940
  }
@@ -983,23 +1028,6 @@ thead th {
983
1028
  margin-top: 0;
984
1029
  margin-bottom: 0;
985
1030
  }
986
- .v-icon {
987
- display: inline-flex;
988
- align-items: center;
989
- justify-content: center;
990
- width: 1.25em;
991
- user-select: none;
992
- aspect-ratio: 1/1;
993
- }
994
- .v-icon--clickable {
995
- cursor: pointer;
996
- }
997
- .v-icon__body {
998
- display: inline-flex;
999
- align-items: center;
1000
- justify-content: center;
1001
- transition: transform 150ms linear;
1002
- }
1003
1031
  .v-button {
1004
1032
  --padding: 1em;
1005
1033
  --height: 2.5714285714em;