@fastkit/vui 0.7.50 → 0.7.52

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/vui.cjs.js CHANGED
@@ -2684,6 +2684,48 @@ const VTextField = vue.defineComponent({
2684
2684
 
2685
2685
  });
2686
2686
 
2687
+ const VNumberField = vue.defineComponent({
2688
+ name: 'VNumberField',
2689
+ props: { ...undefined,
2690
+ modelValue: {
2691
+ type: Number,
2692
+ default: null
2693
+ }
2694
+ },
2695
+ emits: { ...undefined,
2696
+ 'update:modelValue': value => true,
2697
+ change: value => true
2698
+ },
2699
+
2700
+ setup(props, ctx) {
2701
+ const toString = value => {
2702
+ if (value == null) return '';
2703
+ return String(value);
2704
+ };
2705
+
2706
+ const toNumber = value => {
2707
+ if (value == null) return null;
2708
+ if (typeof value === 'number') return value;
2709
+ if (value.trim() === '') return null;
2710
+ return Number(value);
2711
+ };
2712
+
2713
+ return () => {
2714
+ return vue.createVNode(VTextField, vue.mergeProps(ctx.attrs, {
2715
+ "type": "number",
2716
+ "modelValue": toString(props.modelValue),
2717
+ "onUpdate:modelValue": value => {
2718
+ ctx.emit('update:modelValue', toNumber(value));
2719
+ },
2720
+ "onChange": value => {
2721
+ ctx.emit('change', toNumber(value));
2722
+ }
2723
+ }), ctx.slots);
2724
+ };
2725
+ }
2726
+
2727
+ });
2728
+
2687
2729
  const {
2688
2730
  props: props$1,
2689
2731
  emits: emits$1
@@ -2843,7 +2885,6 @@ const VWysiwygEditor = vue.defineComponent({
2843
2885
  onUpdate: ev => {
2844
2886
  inputControl.value = ev.editor.getHTML();
2845
2887
  textRef.value = ev.editor.getText();
2846
- console.log(textRef.value);
2847
2888
  },
2848
2889
  autofocus: props.autofocus,
2849
2890
  content: props.modelValue,
@@ -4954,6 +4995,7 @@ exports.VIcon = VIcon;
4954
4995
  exports.VListTile = VListTile;
4955
4996
  exports.VNavigation = VNavigation;
4956
4997
  exports.VNavigationItem = VNavigationItem;
4998
+ exports.VNumberField = VNumberField;
4957
4999
  exports.VOption = VOption;
4958
5000
  exports.VOptionGroup = VOptionGroup;
4959
5001
  exports.VPagination = VPagination;
@@ -2684,6 +2684,48 @@ const VTextField = vue.defineComponent({
2684
2684
 
2685
2685
  });
2686
2686
 
2687
+ const VNumberField = vue.defineComponent({
2688
+ name: 'VNumberField',
2689
+ props: { ...undefined,
2690
+ modelValue: {
2691
+ type: Number,
2692
+ default: null
2693
+ }
2694
+ },
2695
+ emits: { ...undefined,
2696
+ 'update:modelValue': value => true,
2697
+ change: value => true
2698
+ },
2699
+
2700
+ setup(props, ctx) {
2701
+ const toString = value => {
2702
+ if (value == null) return '';
2703
+ return String(value);
2704
+ };
2705
+
2706
+ const toNumber = value => {
2707
+ if (value == null) return null;
2708
+ if (typeof value === 'number') return value;
2709
+ if (value.trim() === '') return null;
2710
+ return Number(value);
2711
+ };
2712
+
2713
+ return () => {
2714
+ return vue.createVNode(VTextField, vue.mergeProps(ctx.attrs, {
2715
+ "type": "number",
2716
+ "modelValue": toString(props.modelValue),
2717
+ "onUpdate:modelValue": value => {
2718
+ ctx.emit('update:modelValue', toNumber(value));
2719
+ },
2720
+ "onChange": value => {
2721
+ ctx.emit('change', toNumber(value));
2722
+ }
2723
+ }), ctx.slots);
2724
+ };
2725
+ }
2726
+
2727
+ });
2728
+
2687
2729
  const {
2688
2730
  props: props$1,
2689
2731
  emits: emits$1
@@ -2843,7 +2885,6 @@ const VWysiwygEditor = vue.defineComponent({
2843
2885
  onUpdate: ev => {
2844
2886
  inputControl.value = ev.editor.getHTML();
2845
2887
  textRef.value = ev.editor.getText();
2846
- console.log(textRef.value);
2847
2888
  },
2848
2889
  autofocus: props.autofocus,
2849
2890
  content: props.modelValue,
@@ -4954,6 +4995,7 @@ exports.VIcon = VIcon;
4954
4995
  exports.VListTile = VListTile;
4955
4996
  exports.VNavigation = VNavigation;
4956
4997
  exports.VNavigationItem = VNavigationItem;
4998
+ exports.VNumberField = VNumberField;
4957
4999
  exports.VOption = VOption;
4958
5000
  exports.VOptionGroup = VOptionGroup;
4959
5001
  exports.VPagination = VPagination;
package/dist/vui.d.ts CHANGED
@@ -70,6 +70,7 @@ import { TextableCounterSettings } from '@fastkit/vue-kit';
70
70
  import { TextareaAutosizeSettings } from '@fastkit/vue-kit';
71
71
  import { TextareaControl } from '@fastkit/vue-kit';
72
72
  import { TextInputControl } from '@fastkit/vue-kit';
73
+ import { TextInputEmits } from '@fastkit/vue-kit';
73
74
  import { TypedSlot } from '@fastkit/vue-kit';
74
75
  import { UnderlineOptions } from '@tiptap/extension-underline';
75
76
  import { UnwrapNestedRefs } from 'vue';
@@ -2285,8 +2286,12 @@ export declare function splitAttrs(attrs: ImgHTMLAttributes): {
2285
2286
  img: ImgHTMLAttributes;
2286
2287
  };
2287
2288
 
2289
+ export declare type TextFieldEmits = TextInputEmits;
2290
+
2288
2291
  export declare type TextFieldInput = ExtractPropInput<ReturnType<typeof createTextFieldProps>>;
2289
2292
 
2293
+ export declare type TextFieldPropsOptions = ReturnType<typeof createTextFieldProps>;
2294
+
2290
2295
  declare type ToggleableIconHook = (gen: IconGenerator, ctx: boolean) => VNodeChild;
2291
2296
 
2292
2297
  export declare function useControl(props: ControlProps, opts?: UseControlProviderOptions): ControlProvider;
@@ -6289,6 +6294,201 @@ export declare const VNavigationItem: DefineComponent<{
6289
6294
  ariaCurrentValue: "page" | "step" | "location" | "date" | "time" | "true" | "false" | undefined;
6290
6295
  }>;
6291
6296
 
6297
+ export declare const VNumberField: DefineComponent<{
6298
+ modelValue: {
6299
+ type: PropType<number | null>;
6300
+ default: null;
6301
+ };
6302
+ name: StringConstructor;
6303
+ autofocus: BooleanConstructor;
6304
+ disabled: BooleanConstructor;
6305
+ readonly: BooleanConstructor;
6306
+ spellcheck: BooleanConstructor;
6307
+ viewonly: BooleanConstructor;
6308
+ required: BooleanConstructor;
6309
+ clearable: BooleanConstructor;
6310
+ error: BooleanConstructor;
6311
+ tabindex: {
6312
+ type: (StringConstructor | NumberConstructor)[];
6313
+ default: number;
6314
+ };
6315
+ validateTiming: {
6316
+ type: PropType<ValidateTiming>;
6317
+ default: ValidateTiming;
6318
+ };
6319
+ rules: {
6320
+ type: PropType<RecursiveArray<Rule<any>>>;
6321
+ default: () => never[];
6322
+ };
6323
+ errorMessages: PropType<string | string[]>;
6324
+ autocomplete: PropType<boolean | "name" | "off" | "on" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "email" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "url" | "photo">;
6325
+ placeholder: StringConstructor;
6326
+ limit: BooleanConstructor;
6327
+ minlength: (StringConstructor | NumberConstructor)[];
6328
+ maxlength: (StringConstructor | NumberConstructor)[];
6329
+ pattern: (StringConstructor | RegExpConstructor)[];
6330
+ autocapitalize: PropType<FormAutoCapitalize>;
6331
+ finishings: PropType<RawTextableFinishingProp>;
6332
+ counter: PropType<string | number | boolean>;
6333
+ counterValue: PropType<(value: string) => number>;
6334
+ masked: StringConstructor;
6335
+ unmasked: StringConstructor;
6336
+ typed: (StringConstructor | NumberConstructor | DateConstructor)[];
6337
+ validating: BooleanConstructor;
6338
+ pending: BooleanConstructor;
6339
+ focused: BooleanConstructor;
6340
+ dirty: BooleanConstructor;
6341
+ pristine: BooleanConstructor;
6342
+ touched: BooleanConstructor;
6343
+ untouched: BooleanConstructor;
6344
+ invalid: BooleanConstructor;
6345
+ valid: BooleanConstructor;
6346
+ hiddenInfo: BooleanConstructor;
6347
+ errors: {
6348
+ type: PropType<FormNodeError[]>;
6349
+ default: () => FormNodeError[];
6350
+ };
6351
+ nodeControl: PropType<FormNodeControl<any, any>>;
6352
+ label: PropType<VNodeChildOrSlot<any>>;
6353
+ hint: PropType<VNodeChildOrSlot<any>>;
6354
+ hinttip: PropType<FormControlHinttip>;
6355
+ hinttipDelay: PropType<FormControlHinttipDelay>;
6356
+ infoAppends: PropType<VNodeChildOrSlot<any>>;
6357
+ requiredChip: PropType<RequiredChipSource>;
6358
+ startAdornment: PropType<VNodeChildOrSlot<any>>;
6359
+ endAdornment: PropType<VNodeChildOrSlot<any>>;
6360
+ variant: {
6361
+ type: PropType<"flat" | "outlined" | "filled">;
6362
+ validator: (value: any) => boolean;
6363
+ };
6364
+ size: {
6365
+ type: PropType<"sm" | "md" | "lg">;
6366
+ validator: (value: any) => boolean;
6367
+ };
6368
+ 'v-slots': PropType<ResolveRawSlots<FormControlSlots & InputBoxSlots>>;
6369
+ mask: PropType<any>;
6370
+ }, () => JSX.Element, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
6371
+ 'update:modelValue': (value: number | null) => true;
6372
+ change: (value: number | null) => true;
6373
+ blur: (ev: FocusEvent) => boolean;
6374
+ accept: (ev: IMaskEvent) => boolean;
6375
+ complete: (ev: IMaskEvent) => boolean;
6376
+ 'update:masked': (maskedValue: string) => boolean;
6377
+ 'update:typed': (typedValue: IMaskTypedValue | undefined) => boolean;
6378
+ 'update:unmasked': (unmaskedValue: string) => boolean;
6379
+ 'update:errors': (errors: FormNodeError[]) => boolean;
6380
+ focus: (ev: FocusEvent) => boolean;
6381
+ }, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<{
6382
+ modelValue: {
6383
+ type: PropType<number | null>;
6384
+ default: null;
6385
+ };
6386
+ name: StringConstructor;
6387
+ autofocus: BooleanConstructor;
6388
+ disabled: BooleanConstructor;
6389
+ readonly: BooleanConstructor;
6390
+ spellcheck: BooleanConstructor;
6391
+ viewonly: BooleanConstructor;
6392
+ required: BooleanConstructor;
6393
+ clearable: BooleanConstructor;
6394
+ error: BooleanConstructor;
6395
+ tabindex: {
6396
+ type: (StringConstructor | NumberConstructor)[];
6397
+ default: number;
6398
+ };
6399
+ validateTiming: {
6400
+ type: PropType<ValidateTiming>;
6401
+ default: ValidateTiming;
6402
+ };
6403
+ rules: {
6404
+ type: PropType<RecursiveArray<Rule<any>>>;
6405
+ default: () => never[];
6406
+ };
6407
+ errorMessages: PropType<string | string[]>;
6408
+ autocomplete: PropType<boolean | "name" | "off" | "on" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "email" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "url" | "photo">;
6409
+ placeholder: StringConstructor;
6410
+ limit: BooleanConstructor;
6411
+ minlength: (StringConstructor | NumberConstructor)[];
6412
+ maxlength: (StringConstructor | NumberConstructor)[];
6413
+ pattern: (StringConstructor | RegExpConstructor)[];
6414
+ autocapitalize: PropType<FormAutoCapitalize>;
6415
+ finishings: PropType<RawTextableFinishingProp>;
6416
+ counter: PropType<string | number | boolean>;
6417
+ counterValue: PropType<(value: string) => number>;
6418
+ masked: StringConstructor;
6419
+ unmasked: StringConstructor;
6420
+ typed: (StringConstructor | NumberConstructor | DateConstructor)[];
6421
+ validating: BooleanConstructor;
6422
+ pending: BooleanConstructor;
6423
+ focused: BooleanConstructor;
6424
+ dirty: BooleanConstructor;
6425
+ pristine: BooleanConstructor;
6426
+ touched: BooleanConstructor;
6427
+ untouched: BooleanConstructor;
6428
+ invalid: BooleanConstructor;
6429
+ valid: BooleanConstructor;
6430
+ hiddenInfo: BooleanConstructor;
6431
+ errors: {
6432
+ type: PropType<FormNodeError[]>;
6433
+ default: () => FormNodeError[];
6434
+ };
6435
+ nodeControl: PropType<FormNodeControl<any, any>>;
6436
+ label: PropType<VNodeChildOrSlot<any>>;
6437
+ hint: PropType<VNodeChildOrSlot<any>>;
6438
+ hinttip: PropType<FormControlHinttip>;
6439
+ hinttipDelay: PropType<FormControlHinttipDelay>;
6440
+ infoAppends: PropType<VNodeChildOrSlot<any>>;
6441
+ requiredChip: PropType<RequiredChipSource>;
6442
+ startAdornment: PropType<VNodeChildOrSlot<any>>;
6443
+ endAdornment: PropType<VNodeChildOrSlot<any>>;
6444
+ variant: {
6445
+ type: PropType<"flat" | "outlined" | "filled">;
6446
+ validator: (value: any) => boolean;
6447
+ };
6448
+ size: {
6449
+ type: PropType<"sm" | "md" | "lg">;
6450
+ validator: (value: any) => boolean;
6451
+ };
6452
+ 'v-slots': PropType<ResolveRawSlots<FormControlSlots & InputBoxSlots>>;
6453
+ mask: PropType<any>;
6454
+ }>> & {
6455
+ onBlur?: ((ev: FocusEvent) => any) | undefined;
6456
+ onChange?: ((value: number | null) => any) | undefined;
6457
+ "onUpdate:modelValue"?: ((value: number | null) => any) | undefined;
6458
+ onAccept?: ((ev: IMaskEvent) => any) | undefined;
6459
+ onComplete?: ((ev: IMaskEvent) => any) | undefined;
6460
+ "onUpdate:masked"?: ((maskedValue: string) => any) | undefined;
6461
+ "onUpdate:typed"?: ((typedValue: IMaskTypedValue | undefined) => any) | undefined;
6462
+ "onUpdate:unmasked"?: ((unmaskedValue: string) => any) | undefined;
6463
+ "onUpdate:errors"?: ((errors: FormNodeError[]) => any) | undefined;
6464
+ onFocus?: ((ev: FocusEvent) => any) | undefined;
6465
+ }, {
6466
+ autofocus: boolean;
6467
+ disabled: boolean;
6468
+ readonly: boolean;
6469
+ spellcheck: boolean;
6470
+ viewonly: boolean;
6471
+ required: boolean;
6472
+ clearable: boolean;
6473
+ error: boolean;
6474
+ modelValue: number | null;
6475
+ tabindex: string | number;
6476
+ validateTiming: ValidateTiming;
6477
+ rules: RecursiveArray<Rule<any>>;
6478
+ limit: boolean;
6479
+ validating: boolean;
6480
+ pending: boolean;
6481
+ focused: boolean;
6482
+ dirty: boolean;
6483
+ pristine: boolean;
6484
+ touched: boolean;
6485
+ untouched: boolean;
6486
+ invalid: boolean;
6487
+ valid: boolean;
6488
+ hiddenInfo: boolean;
6489
+ errors: FormNodeError[];
6490
+ }>;
6491
+
6292
6492
  export declare const VOption: DefineComponent<{
6293
6493
  size: {
6294
6494
  type: PropType<"sm" | "md" | "lg">;
package/dist/vui.mjs CHANGED
@@ -2679,6 +2679,48 @@ const VTextField = defineComponent({
2679
2679
 
2680
2680
  });
2681
2681
 
2682
+ const VNumberField = defineComponent({
2683
+ name: 'VNumberField',
2684
+ props: { ...undefined,
2685
+ modelValue: {
2686
+ type: Number,
2687
+ default: null
2688
+ }
2689
+ },
2690
+ emits: { ...undefined,
2691
+ 'update:modelValue': value => true,
2692
+ change: value => true
2693
+ },
2694
+
2695
+ setup(props, ctx) {
2696
+ const toString = value => {
2697
+ if (value == null) return '';
2698
+ return String(value);
2699
+ };
2700
+
2701
+ const toNumber = value => {
2702
+ if (value == null) return null;
2703
+ if (typeof value === 'number') return value;
2704
+ if (value.trim() === '') return null;
2705
+ return Number(value);
2706
+ };
2707
+
2708
+ return () => {
2709
+ return createVNode(VTextField, mergeProps(ctx.attrs, {
2710
+ "type": "number",
2711
+ "modelValue": toString(props.modelValue),
2712
+ "onUpdate:modelValue": value => {
2713
+ ctx.emit('update:modelValue', toNumber(value));
2714
+ },
2715
+ "onChange": value => {
2716
+ ctx.emit('change', toNumber(value));
2717
+ }
2718
+ }), ctx.slots);
2719
+ };
2720
+ }
2721
+
2722
+ });
2723
+
2682
2724
  const {
2683
2725
  props: props$1,
2684
2726
  emits: emits$1
@@ -2838,7 +2880,6 @@ const VWysiwygEditor = defineComponent({
2838
2880
  onUpdate: ev => {
2839
2881
  inputControl.value = ev.editor.getHTML();
2840
2882
  textRef.value = ev.editor.getText();
2841
- console.log(textRef.value);
2842
2883
  },
2843
2884
  autofocus: props.autofocus,
2844
2885
  content: props.modelValue,
@@ -4915,4 +4956,4 @@ function installVuiPlugin(app, opts) {
4915
4956
  return app.use(VuiPlugin, opts);
4916
4957
  }
4917
4958
 
4918
- export { AVATAR_SIZES, CHIP_SIZES, CONTROL_FIELD_VARIANTS, CONTROL_SIZES, PAGINATION_ALIGNS, VApp, VAvatar, VBreadcrumbs, VBusyImage, VButton, VButtonGroup, VCard, VCardActions, VCardContent, VCheckbox, VCheckboxGroup, VChip, VContentSwitcher, VDataTable, VDrawerLayout, VForm, VFormControl, VGridContainer, VGridItem, VHero, VIcon, VListTile, VNavigation, VNavigationItem, VOption, VOptionGroup, VPagination, VPaper, VRadio, VRadioGroup, VSelect, VSkeltonLoaderBone, VSwitch, VSwitchGroup, VTabs, VTextField, VTextarea, VToolbar, VToolbarEdge, 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, VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, VuiColorProviderInjectionKey, VuiControlFieldInjectionKey, VuiControlInjectionKey, VuiInjectionKey, VuiPlugin, VuiService, WysiwygBulletListTool, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygOrderedListTool, WysiwygTextColorTool, configureDataTableDefaults, createAvatarProps, createCardProps, createChipProps, createControlFieldProviderProps, createControlProps, createElevationProps, createListTileProps, createNavigationItemProps, createPaperBaseProps, createPaperProps, createRequiredChipRenderer, createVFormProps, defineFormSelectorComponent, iconProps, installVuiPlugin, listTileEmits, mergeVuiPluginOptions, mergeVuiServiceIconSettings, mergeVuiServiceOptions, mergeVuiServiceUISettings, paginationProps, rawIconProp, renderNavigationItemInput, resolveNavigationItemInput, resolveRawIconProp, resolveRawWysiwygEditorTools, splitAttrs, useControl, useControlField, useElevation, useVui, useVuiColorProvider, vueButtonProps };
4959
+ export { AVATAR_SIZES, CHIP_SIZES, CONTROL_FIELD_VARIANTS, CONTROL_SIZES, PAGINATION_ALIGNS, VApp, VAvatar, VBreadcrumbs, VBusyImage, VButton, VButtonGroup, VCard, VCardActions, VCardContent, VCheckbox, VCheckboxGroup, VChip, VContentSwitcher, VDataTable, VDrawerLayout, VForm, VFormControl, VGridContainer, VGridItem, VHero, VIcon, VListTile, VNavigation, VNavigationItem, VNumberField, VOption, VOptionGroup, VPagination, VPaper, VRadio, VRadioGroup, VSelect, VSkeltonLoaderBone, VSwitch, VSwitchGroup, VTabs, VTextField, VTextarea, VToolbar, VToolbarEdge, 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, VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, VuiColorProviderInjectionKey, VuiControlFieldInjectionKey, VuiControlInjectionKey, VuiInjectionKey, VuiPlugin, VuiService, WysiwygBulletListTool, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygOrderedListTool, WysiwygTextColorTool, configureDataTableDefaults, createAvatarProps, createCardProps, createChipProps, createControlFieldProviderProps, createControlProps, createElevationProps, createListTileProps, createNavigationItemProps, createPaperBaseProps, createPaperProps, createRequiredChipRenderer, createVFormProps, defineFormSelectorComponent, iconProps, installVuiPlugin, listTileEmits, mergeVuiPluginOptions, mergeVuiServiceIconSettings, mergeVuiServiceOptions, mergeVuiServiceUISettings, paginationProps, rawIconProp, renderNavigationItemInput, resolveNavigationItemInput, resolveRawIconProp, resolveRawWysiwygEditorTools, splitAttrs, useControl, useControlField, useElevation, useVui, useVuiColorProvider, vueButtonProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/vui",
3
- "version": "0.7.50",
3
+ "version": "0.7.52",
4
4
  "description": "@fastkit/vui",
5
5
  "buildOptions": {
6
6
  "name": "Vui",
@@ -32,11 +32,11 @@
32
32
  "vue": "^3.2.26"
33
33
  },
34
34
  "dependencies": {
35
- "@fastkit/color-scheme": "0.7.50",
36
- "@fastkit/icon-font": "0.7.50",
37
- "@fastkit/tiny-logger": "0.7.50",
38
- "@fastkit/vite-kit": "0.7.50",
39
- "@fastkit/vue-kit": "0.7.50",
35
+ "@fastkit/color-scheme": "0.7.52",
36
+ "@fastkit/icon-font": "0.7.52",
37
+ "@fastkit/tiny-logger": "0.7.52",
38
+ "@fastkit/vite-kit": "0.7.52",
39
+ "@fastkit/vue-kit": "0.7.52",
40
40
  "@tiptap/extension-link": "^2.0.0-beta.36",
41
41
  "@tiptap/extension-underline": "^2.0.0-beta.23",
42
42
  "@tiptap/starter-kit": "^2.0.0-beta.183",
Binary file
@@ -0,0 +1,55 @@
1
+ import { defineComponent, PropType } from 'vue';
2
+ import {
3
+ VTextField,
4
+ TextFieldPropsOptions,
5
+ TextFieldEmits,
6
+ } from '../VTextField/VTextField';
7
+
8
+ export const VNumberField = defineComponent({
9
+ name: 'VNumberField',
10
+ props: {
11
+ ...(undefined as unknown as Omit<TextFieldPropsOptions, 'type'>),
12
+ modelValue: {
13
+ type: Number as PropType<number | null>,
14
+ default: null,
15
+ },
16
+ },
17
+ emits: {
18
+ ...(undefined as unknown as Omit<
19
+ TextFieldEmits,
20
+ 'update:modelValue' | 'change'
21
+ >),
22
+ 'update:modelValue': (value: number | null) => true,
23
+ change: (value: number | null) => true,
24
+ },
25
+ setup(props, ctx) {
26
+ const toString = (value?: string | number | null): string => {
27
+ if (value == null) return '';
28
+ return String(value);
29
+ };
30
+
31
+ const toNumber = (value?: string | number | null): number | null => {
32
+ if (value == null) return null;
33
+ if (typeof value === 'number') return value;
34
+ if (value.trim() === '') return null;
35
+ return Number(value);
36
+ };
37
+
38
+ return () => {
39
+ return (
40
+ <VTextField
41
+ {...ctx.attrs}
42
+ type="number"
43
+ modelValue={toString(props.modelValue)}
44
+ onUpdate:modelValue={(value) => {
45
+ ctx.emit('update:modelValue', toNumber(value));
46
+ }}
47
+ onChange={(value) => {
48
+ ctx.emit('change', toNumber(value));
49
+ }}
50
+ v-slots={ctx.slots}
51
+ />
52
+ );
53
+ };
54
+ },
55
+ });
@@ -0,0 +1 @@
1
+ export * from './VNumberField';
@@ -6,6 +6,7 @@ import {
6
6
  createFormControlProps,
7
7
  FormControlSlots,
8
8
  defineSlotsProps,
9
+ TextInputEmits,
9
10
  } from '@fastkit/vue-kit';
10
11
  import { VFormControl } from '../VFormControl';
11
12
  import {
@@ -36,6 +37,10 @@ function createTextFieldProps() {
36
37
  };
37
38
  }
38
39
 
40
+ export type TextFieldPropsOptions = ReturnType<typeof createTextFieldProps>;
41
+
42
+ export type TextFieldEmits = TextInputEmits;
43
+
39
44
  export type TextFieldInput = ExtractPropInput<
40
45
  ReturnType<typeof createTextFieldProps>
41
46
  >;
@@ -120,7 +120,6 @@ export const VWysiwygEditor = defineComponent({
120
120
  onUpdate: (ev) => {
121
121
  inputControl.value = ev.editor.getHTML();
122
122
  textRef.value = ev.editor.getText();
123
- console.log(textRef.value);
124
123
  },
125
124
  autofocus: props.autofocus,
126
125
  content: props.modelValue,
@@ -26,6 +26,7 @@ export * from './VOption';
26
26
  export * from './VOptionGroup';
27
27
  export * from './VSelect';
28
28
  export * from './VTextField';
29
+ export * from './VNumberField';
29
30
  export * from './VTextarea';
30
31
  export * from './VWysiwygEditor';
31
32
  export * from './VForm';