@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.
- package/dist/tool/index.js +1 -0
- package/dist/tool/vite-plugin.d.ts.map +1 -1
- package/dist/vui.cjs.js +92 -69
- package/dist/vui.cjs.prod.js +92 -69
- package/dist/vui.css +45 -17
- package/dist/vui.d.ts +32 -0
- package/dist/vui.min.css +1 -1
- package/dist/vui.min.css.map +1 -1
- package/dist/vui.mjs +94 -72
- package/package.json +6 -6
- package/src/components/VFormControl/VFormControl.scss +42 -0
- package/src/components/VFormControl/VFormControl.tsx +34 -2
- package/src/components/VSelect/VSelect.tsx +1 -0
- package/src/components/VTextField/VTextField.tsx +1 -0
- package/src/components/VTextarea/VTextarea.tsx +1 -0
- package/src/components/VWysiwygEditor/VWysiwygEditor.tsx +1 -0
- package/src/components/kits.ts +1 -1
- package/src/composables/form-selector.tsx +1 -0
- package/src/service.tsx +1 -0
- package/src/tool/vite-plugin.ts +1 -0
package/dist/tool/index.js
CHANGED
|
@@ -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,
|
|
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()
|
|
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.cjs.prod.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()
|
|
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;
|