@vuecs/forms 5.0.1 → 5.1.1
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/components/form-checkbox/FormCheckbox.vue.d.ts.map +1 -1
- package/dist/components/form-checkbox-group/FormCheckboxGroup.vue.d.ts.map +1 -1
- package/dist/components/form-group/FormGroup.vue.d.ts.map +1 -1
- package/dist/components/form-group/context.d.ts +46 -0
- package/dist/components/form-group/context.d.ts.map +1 -0
- package/dist/components/form-group/index.d.ts +2 -0
- package/dist/components/form-group/index.d.ts.map +1 -1
- package/dist/components/form-input/FormInput.vue.d.ts +31 -7
- package/dist/components/form-input/FormInput.vue.d.ts.map +1 -1
- package/dist/components/form-number/FormNumber.vue.d.ts.map +1 -1
- package/dist/components/form-pin/FormPin.vue.d.ts.map +1 -1
- package/dist/components/form-radio/FormRadio.vue.d.ts.map +1 -1
- package/dist/components/form-radio-group/FormRadioGroup.vue.d.ts.map +1 -1
- package/dist/components/form-select/FormSelect.vue.d.ts.map +1 -1
- package/dist/components/form-select-search/FormSelectSearch.vue.d.ts.map +1 -1
- package/dist/components/form-slider/FormSlider.vue.d.ts.map +1 -1
- package/dist/components/form-switch/FormSwitch.vue.d.ts.map +1 -1
- package/dist/components/form-tags/FormTags.vue.d.ts.map +1 -1
- package/dist/components/form-textarea/FormTextarea.vue.d.ts +27 -7
- package/dist/components/form-textarea/FormTextarea.vue.d.ts.map +1 -1
- package/dist/components/validation-group/ValidationGroup.vue.d.ts +1 -1
- package/dist/components/validation-group/ValidationGroup.vue.d.ts.map +1 -1
- package/dist/index.mjs +91 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,46 @@
|
|
|
1
|
-
import { installDefaultsManager, installThemeManager, useComponentDefaults, useComponentTheme, useId } from "@vuecs/core";
|
|
1
|
+
import { installDefaultsManager, installThemeManager, useComponentDefaults, useComponentTheme, useId, useThemeProps } from "@vuecs/core";
|
|
2
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, h, inject, mergeProps, normalizeClass, openBlock, provide, ref, renderList, renderSlot, resolveComponent, toDisplayString, toRef, toValue, vModelText, vShow, watch, withCtx, withDirectives } from "vue";
|
|
2
3
|
import { CheckboxGroupRoot, CheckboxIndicator, CheckboxRoot, NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, PinInputInput, PinInputRoot, RadioGroupIndicator, RadioGroupItem, RadioGroupRoot, SelectContent, SelectGroup, SelectIcon, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectPortal, SelectRoot, SelectTrigger, SelectValue, SelectViewport, SliderRange, SliderRoot, SliderThumb, SliderTrack, SwitchRoot, SwitchThumb, TagsInputInput, TagsInputItem, TagsInputItemDelete, TagsInputItemText, TagsInputRoot } from "reka-ui";
|
|
3
|
-
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, h, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, resolveComponent, toDisplayString, toRef, toValue, vModelText, vShow, watch, withCtx, withDirectives } from "vue";
|
|
4
4
|
import { onClickOutside, useDebounceFn, useInfiniteScroll } from "@vueuse/core";
|
|
5
|
+
//#region src/components/form-group/context.ts
|
|
6
|
+
const FORM_GROUP_CONTEXT_KEY = Symbol("vcFormGroupContext");
|
|
7
|
+
function provideFormGroupContext(ctx) {
|
|
8
|
+
provide(FORM_GROUP_CONTEXT_KEY, ctx);
|
|
9
|
+
}
|
|
10
|
+
function useFormGroupContext() {
|
|
11
|
+
return inject(FORM_GROUP_CONTEXT_KEY, null);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Wrap a form-input component's props so that any inherited severity
|
|
15
|
+
* from the surrounding `<VCFormGroup>` flows into `themeVariant.severity`
|
|
16
|
+
* — lighting up the theme's `severity` variant on the input without
|
|
17
|
+
* the consumer wiring it per-instance.
|
|
18
|
+
*
|
|
19
|
+
* Per-instance values win: if the caller's `themeVariant` already has
|
|
20
|
+
* a `severity` key (even one set to `undefined`), the inherited value
|
|
21
|
+
* is ignored. Outside a `<VCFormGroup>` the helper is a pass-through.
|
|
22
|
+
*
|
|
23
|
+
* Pass directly to `useComponentTheme(name, useFormInputThemeProps(props), defaults)`.
|
|
24
|
+
*/
|
|
25
|
+
function useFormInputThemeProps(props) {
|
|
26
|
+
const ctx = useFormGroupContext();
|
|
27
|
+
return {
|
|
28
|
+
get themeClass() {
|
|
29
|
+
return props.themeClass;
|
|
30
|
+
},
|
|
31
|
+
get themeVariant() {
|
|
32
|
+
const own = props.themeVariant;
|
|
33
|
+
if (own && "severity" in own) return own;
|
|
34
|
+
const inherited = ctx?.severity();
|
|
35
|
+
if (inherited === void 0) return own;
|
|
36
|
+
return {
|
|
37
|
+
...own ?? {},
|
|
38
|
+
severity: inherited
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
5
44
|
//#region src/components/form-checkbox/FormCheckbox.vue?vue&type=script&lang.ts
|
|
6
45
|
const formCheckboxThemeDefaults = { classes: {
|
|
7
46
|
root: "vc-form-checkbox",
|
|
@@ -79,7 +118,7 @@ var FormCheckbox_default = defineComponent({
|
|
|
79
118
|
emits: ["update:modelValue"],
|
|
80
119
|
slots: Object,
|
|
81
120
|
setup(props, { attrs, emit, slots }) {
|
|
82
|
-
const theme = useComponentTheme("formCheckbox", props, formCheckboxThemeDefaults);
|
|
121
|
+
const theme = useComponentTheme("formCheckbox", useFormInputThemeProps(props), formCheckboxThemeDefaults);
|
|
83
122
|
const defaults = useComponentDefaults("formCheckbox", props, behavioralDefaults$3);
|
|
84
123
|
const fallbackId = useId(void 0, "vc-form-checkbox");
|
|
85
124
|
return () => {
|
|
@@ -165,7 +204,7 @@ var FormCheckboxGroup_default = defineComponent({
|
|
|
165
204
|
},
|
|
166
205
|
emits: ["update:modelValue"],
|
|
167
206
|
setup(props, { attrs, emit, slots }) {
|
|
168
|
-
const theme = useComponentTheme("formCheckboxGroup", props, formCheckboxGroupThemeDefaults);
|
|
207
|
+
const theme = useComponentTheme("formCheckboxGroup", useFormInputThemeProps(props), formCheckboxGroupThemeDefaults);
|
|
169
208
|
return () => h(CheckboxGroupRoot, mergeProps(attrs, {
|
|
170
209
|
name: props.name,
|
|
171
210
|
orientation: props.orientation,
|
|
@@ -234,7 +273,7 @@ var ValidationGroup_default = defineComponent({
|
|
|
234
273
|
},
|
|
235
274
|
slots: Object,
|
|
236
275
|
setup(props, { slots }) {
|
|
237
|
-
const theme = useComponentTheme("validationGroup", props, validationGroupThemeDefaults);
|
|
276
|
+
const theme = useComponentTheme("validationGroup", useThemeProps(props, "severity"), validationGroupThemeDefaults);
|
|
238
277
|
return () => {
|
|
239
278
|
const resolved = theme.value;
|
|
240
279
|
let errors;
|
|
@@ -358,6 +397,12 @@ var FormGroup_default = defineComponent({
|
|
|
358
397
|
slots: Object,
|
|
359
398
|
setup(props, { attrs, slots }) {
|
|
360
399
|
const theme = useComponentTheme("formGroup", props, formGroupThemeDefaults);
|
|
400
|
+
provideFormGroupContext({ severity: () => {
|
|
401
|
+
if (props.validation != null) return props.validation.severity;
|
|
402
|
+
if (props.validationSeverity !== void 0) return props.validationSeverity;
|
|
403
|
+
const messages = props.validationMessages;
|
|
404
|
+
return !!messages && (Array.isArray(messages) ? messages.length > 0 : Object.keys(messages).length > 0) ? "error" : void 0;
|
|
405
|
+
} });
|
|
361
406
|
return () => {
|
|
362
407
|
const resolved = theme.value;
|
|
363
408
|
const children = [];
|
|
@@ -397,6 +442,8 @@ var FormGroup_default = defineComponent({
|
|
|
397
442
|
//#region src/components/form-input/FormInput.vue?vue&type=script&lang.ts
|
|
398
443
|
const formInputThemeDefaults = { classes: {
|
|
399
444
|
root: "vc-form-input",
|
|
445
|
+
rootGroupStart: "",
|
|
446
|
+
rootGroupEnd: "",
|
|
400
447
|
group: "vc-form-input-group",
|
|
401
448
|
groupAppend: "vc-form-input-group-append",
|
|
402
449
|
groupPrepend: "vc-form-input-group-prepend"
|
|
@@ -407,11 +454,16 @@ var FormInput_default = defineComponent({
|
|
|
407
454
|
name: "VCFormInput",
|
|
408
455
|
inheritAttrs: false,
|
|
409
456
|
props: {
|
|
410
|
-
/**
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Controlled string value (v-model). `null` is the documented "unset" value.
|
|
459
|
+
*
|
|
460
|
+
* No `default` on purpose: vue-tsc strips `null`/`undefined` (via `NonNullable`)
|
|
461
|
+
* when folding a prop default into the emitted `DefaultProps`, which then
|
|
462
|
+
* intersects `$props['modelValue']` back down to `string` and breaks v-model
|
|
463
|
+
* against nullable entity fields (#1613). The render coerces `null`/`undefined`
|
|
464
|
+
* to `''`, so the empty-input behaviour is unchanged.
|
|
465
|
+
*/
|
|
466
|
+
modelValue: { type: [String, null] },
|
|
415
467
|
/** Native `<input type>` attribute. */
|
|
416
468
|
type: {
|
|
417
469
|
type: String,
|
|
@@ -461,7 +513,7 @@ var FormInput_default = defineComponent({
|
|
|
461
513
|
emits: ["update:modelValue"],
|
|
462
514
|
slots: Object,
|
|
463
515
|
setup(props, { attrs, emit, slots }) {
|
|
464
|
-
const theme = useComponentTheme("formInput", props, formInputThemeDefaults);
|
|
516
|
+
const theme = useComponentTheme("formInput", useFormInputThemeProps(props), formInputThemeDefaults);
|
|
465
517
|
const localValue = ref(props.modelValue);
|
|
466
518
|
watch(() => props.modelValue, (value) => {
|
|
467
519
|
localValue.value = value;
|
|
@@ -479,6 +531,8 @@ var FormInput_default = defineComponent({
|
|
|
479
531
|
return () => {
|
|
480
532
|
const resolved = theme.value;
|
|
481
533
|
const children = [];
|
|
534
|
+
const hasPrepend = !!(slots.groupPrepend || props.groupPrepend);
|
|
535
|
+
const hasAppend = !!(slots.groupAppend || props.groupAppend);
|
|
482
536
|
if (slots.groupPrepend) children.push(slots.groupPrepend({
|
|
483
537
|
class: resolved.groupPrepend,
|
|
484
538
|
tag: "div"
|
|
@@ -486,7 +540,11 @@ var FormInput_default = defineComponent({
|
|
|
486
540
|
else if (props.groupPrepend) children.push(h("div", { class: resolved.groupPrepend || void 0 }, [props.groupPrependContent]));
|
|
487
541
|
children.push(h("input", mergeProps({
|
|
488
542
|
type: props.type,
|
|
489
|
-
class:
|
|
543
|
+
class: [
|
|
544
|
+
resolved.root,
|
|
545
|
+
hasPrepend ? resolved.rootGroupStart : void 0,
|
|
546
|
+
hasAppend ? resolved.rootGroupEnd : void 0
|
|
547
|
+
],
|
|
490
548
|
onInput,
|
|
491
549
|
value: localValue.value
|
|
492
550
|
}, attrs)));
|
|
@@ -592,7 +650,7 @@ var FormNumber_default = defineComponent({
|
|
|
592
650
|
},
|
|
593
651
|
emits: ["update:modelValue"],
|
|
594
652
|
setup(props, { attrs, emit }) {
|
|
595
|
-
const theme = useComponentTheme("formNumber", props, formNumberThemeDefaults);
|
|
653
|
+
const theme = useComponentTheme("formNumber", useFormInputThemeProps(props), formNumberThemeDefaults);
|
|
596
654
|
return () => h(NumberFieldRoot, mergeProps(attrs, {
|
|
597
655
|
focusOnChange: props.focusOnChange,
|
|
598
656
|
name: props.name,
|
|
@@ -692,7 +750,7 @@ var FormPin_default = defineComponent({
|
|
|
692
750
|
},
|
|
693
751
|
emits: ["update:modelValue", "complete"],
|
|
694
752
|
setup(props, { attrs, emit }) {
|
|
695
|
-
const theme = useComponentTheme("formPin", props, formPinThemeDefaults);
|
|
753
|
+
const theme = useComponentTheme("formPin", useFormInputThemeProps(props), formPinThemeDefaults);
|
|
696
754
|
return () => h(PinInputRoot, mergeProps(attrs, {
|
|
697
755
|
name: props.name,
|
|
698
756
|
id: props.id,
|
|
@@ -781,7 +839,7 @@ var FormRadio_default = defineComponent({
|
|
|
781
839
|
},
|
|
782
840
|
slots: Object,
|
|
783
841
|
setup(props, { attrs, slots }) {
|
|
784
|
-
const theme = useComponentTheme("formRadio", props, formRadioThemeDefaults);
|
|
842
|
+
const theme = useComponentTheme("formRadio", useFormInputThemeProps(props), formRadioThemeDefaults);
|
|
785
843
|
const defaults = useComponentDefaults("formRadio", props, behavioralDefaults$2);
|
|
786
844
|
const fallbackId = useId(void 0, "vc-form-radio");
|
|
787
845
|
return () => {
|
|
@@ -870,7 +928,7 @@ var FormRadioGroup_default = defineComponent({
|
|
|
870
928
|
},
|
|
871
929
|
emits: ["update:modelValue"],
|
|
872
930
|
setup(props, { attrs, emit, slots }) {
|
|
873
|
-
const theme = useComponentTheme("formRadioGroup", props, formRadioGroupThemeDefaults);
|
|
931
|
+
const theme = useComponentTheme("formRadioGroup", useFormInputThemeProps(props), formRadioGroupThemeDefaults);
|
|
874
932
|
return () => h(RadioGroupRoot, mergeProps(attrs, {
|
|
875
933
|
name: props.name,
|
|
876
934
|
orientation: props.orientation,
|
|
@@ -975,7 +1033,7 @@ var FormSelect_default = defineComponent({
|
|
|
975
1033
|
},
|
|
976
1034
|
emits: ["update:modelValue"],
|
|
977
1035
|
setup(props, { attrs, emit }) {
|
|
978
|
-
const theme = useComponentTheme("formSelect", props, formSelectThemeDefaults);
|
|
1036
|
+
const theme = useComponentTheme("formSelect", useFormInputThemeProps(props), formSelectThemeDefaults);
|
|
979
1037
|
const defaults = useComponentDefaults("formSelect", props, behavioralDefaults$1);
|
|
980
1038
|
return () => {
|
|
981
1039
|
const resolved = theme.value;
|
|
@@ -1113,7 +1171,7 @@ var FormSelectSearch_vue_vue_type_script_lang_default = defineComponent({
|
|
|
1113
1171
|
},
|
|
1114
1172
|
emits: ["update:modelValue", "change"],
|
|
1115
1173
|
setup(props, { emit }) {
|
|
1116
|
-
const theme = useComponentTheme("formSelectSearch", props, formSelectSearchThemeDefaults);
|
|
1174
|
+
const theme = useComponentTheme("formSelectSearch", useFormInputThemeProps(props), formSelectSearchThemeDefaults);
|
|
1117
1175
|
const listElement = ref(null);
|
|
1118
1176
|
const inputElement = ref(null);
|
|
1119
1177
|
const q = ref("");
|
|
@@ -1416,7 +1474,7 @@ var FormSlider_default = defineComponent({
|
|
|
1416
1474
|
},
|
|
1417
1475
|
emits: ["update:modelValue", "valueCommit"],
|
|
1418
1476
|
setup(props, { attrs, emit }) {
|
|
1419
|
-
const theme = useComponentTheme("formSlider", props, formSliderThemeDefaults);
|
|
1477
|
+
const theme = useComponentTheme("formSlider", useFormInputThemeProps(props), formSliderThemeDefaults);
|
|
1420
1478
|
const isScalar = computed(() => typeof props.modelValue === "number");
|
|
1421
1479
|
const internalValue = computed(() => {
|
|
1422
1480
|
if (props.modelValue === void 0 || props.modelValue === null) return [props.min];
|
|
@@ -1519,7 +1577,7 @@ var FormSwitch_default = defineComponent({
|
|
|
1519
1577
|
emits: ["update:modelValue"],
|
|
1520
1578
|
slots: Object,
|
|
1521
1579
|
setup(props, { attrs, emit, slots }) {
|
|
1522
|
-
const theme = useComponentTheme("formSwitch", props, formSwitchThemeDefaults);
|
|
1580
|
+
const theme = useComponentTheme("formSwitch", useFormInputThemeProps(props), formSwitchThemeDefaults);
|
|
1523
1581
|
const defaults = useComponentDefaults("formSwitch", props, behavioralDefaults);
|
|
1524
1582
|
const fallbackId = useId(void 0, "vc-form-switch");
|
|
1525
1583
|
return () => {
|
|
@@ -1636,7 +1694,7 @@ var FormTags_default = defineComponent({
|
|
|
1636
1694
|
},
|
|
1637
1695
|
emits: ["update:modelValue", "invalid"],
|
|
1638
1696
|
setup(props, { attrs, emit }) {
|
|
1639
|
-
const theme = useComponentTheme("formTags", props, formTagsThemeDefaults);
|
|
1697
|
+
const theme = useComponentTheme("formTags", useFormInputThemeProps(props), formTagsThemeDefaults);
|
|
1640
1698
|
return () => h(TagsInputRoot, mergeProps(attrs, {
|
|
1641
1699
|
placeholder: props.placeholder,
|
|
1642
1700
|
addOnBlur: props.addOnBlur,
|
|
@@ -1671,11 +1729,16 @@ const formTextareaThemeDefaults = { classes: { root: "" } };
|
|
|
1671
1729
|
var FormTextarea_default = defineComponent({
|
|
1672
1730
|
name: "VCFormTextarea",
|
|
1673
1731
|
props: {
|
|
1674
|
-
/**
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1732
|
+
/**
|
|
1733
|
+
* Controlled string value (v-model). `null` is the documented "unset" value.
|
|
1734
|
+
*
|
|
1735
|
+
* No `default` on purpose: vue-tsc strips `null`/`undefined` (via `NonNullable`)
|
|
1736
|
+
* when folding a prop default into the emitted `DefaultProps`, which then
|
|
1737
|
+
* intersects `$props['modelValue']` back down to `string` and breaks v-model
|
|
1738
|
+
* against nullable entity fields (#1613). The render coerces `null`/`undefined`
|
|
1739
|
+
* to `''`, so the empty-textarea behaviour is unchanged.
|
|
1740
|
+
*/
|
|
1741
|
+
modelValue: { type: [String, null] },
|
|
1679
1742
|
/** Debounce window (ms) for `update:modelValue` emissions. `0` disables debouncing. */
|
|
1680
1743
|
debounce: {
|
|
1681
1744
|
type: Number,
|
|
@@ -1694,7 +1757,7 @@ var FormTextarea_default = defineComponent({
|
|
|
1694
1757
|
},
|
|
1695
1758
|
emits: ["update:modelValue"],
|
|
1696
1759
|
setup(props, { attrs, emit }) {
|
|
1697
|
-
const theme = useComponentTheme("formTextarea", props, formTextareaThemeDefaults);
|
|
1760
|
+
const theme = useComponentTheme("formTextarea", useFormInputThemeProps(props), formTextareaThemeDefaults);
|
|
1698
1761
|
const localValue = ref(props.modelValue);
|
|
1699
1762
|
watch(() => props.modelValue, (value) => {
|
|
1700
1763
|
localValue.value = value;
|
|
@@ -1794,6 +1857,6 @@ function install(instance, options = {}) {
|
|
|
1794
1857
|
}
|
|
1795
1858
|
var src_default = { install };
|
|
1796
1859
|
//#endregion
|
|
1797
|
-
export { FormCheckbox_default as VCFormCheckbox, FormCheckboxGroup_default as VCFormCheckboxGroup, FormGroup_default as VCFormGroup, FormInput_default as VCFormInput, FormNumber_default as VCFormNumber, FormPin_default as VCFormPin, FormRadio_default as VCFormRadio, FormRadioGroup_default as VCFormRadioGroup, FormSelect_default as VCFormSelect, FormSelectSearch_default as VCFormSelectSearch, FormSlider_default as VCFormSlider, FormSwitch_default as VCFormSwitch, FormTags_default as VCFormTags, FormTextarea_default as VCFormTextarea, ValidationGroup_default as VCValidationGroup, ValidationSeverity, src_default as default, formCheckboxGroupThemeDefaults, formCheckboxThemeDefaults, formGroupThemeDefaults, formInputThemeDefaults, formNumberThemeDefaults, formPinThemeDefaults, formRadioGroupThemeDefaults, formRadioThemeDefaults, formSelectSearchThemeDefaults, formSelectThemeDefaults, formSliderThemeDefaults, formSwitchThemeDefaults, formTagsThemeDefaults, formTextareaThemeDefaults, install, isFormOptionGroup, useSubmitButton, validationGroupThemeDefaults };
|
|
1860
|
+
export { FormCheckbox_default as VCFormCheckbox, FormCheckboxGroup_default as VCFormCheckboxGroup, FormGroup_default as VCFormGroup, FormInput_default as VCFormInput, FormNumber_default as VCFormNumber, FormPin_default as VCFormPin, FormRadio_default as VCFormRadio, FormRadioGroup_default as VCFormRadioGroup, FormSelect_default as VCFormSelect, FormSelectSearch_default as VCFormSelectSearch, FormSlider_default as VCFormSlider, FormSwitch_default as VCFormSwitch, FormTags_default as VCFormTags, FormTextarea_default as VCFormTextarea, ValidationGroup_default as VCValidationGroup, ValidationSeverity, src_default as default, formCheckboxGroupThemeDefaults, formCheckboxThemeDefaults, formGroupThemeDefaults, formInputThemeDefaults, formNumberThemeDefaults, formPinThemeDefaults, formRadioGroupThemeDefaults, formRadioThemeDefaults, formSelectSearchThemeDefaults, formSelectThemeDefaults, formSliderThemeDefaults, formSwitchThemeDefaults, formTagsThemeDefaults, formTextareaThemeDefaults, install, isFormOptionGroup, provideFormGroupContext, useFormGroupContext, useFormInputThemeProps, useSubmitButton, validationGroupThemeDefaults };
|
|
1798
1861
|
|
|
1799
1862
|
//# sourceMappingURL=index.mjs.map
|