srcdev-nuxt-forms 6.1.0 → 6.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.
Files changed (24) hide show
  1. package/app/components/forms/form-fieldset/FormFieldset.vue +19 -10
  2. package/app/components/forms/input-button/InputButtonCore.vue +25 -28
  3. package/app/components/forms/input-checkbox/MultipleCheckboxes.vue +48 -27
  4. package/app/components/forms/input-checkbox/SingleCheckbox.vue +52 -33
  5. package/app/components/forms/input-checkbox-radio/InputCheckboxRadioButton.vue +40 -22
  6. package/app/components/forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +33 -17
  7. package/app/components/forms/input-label/InputLabel.vue +10 -12
  8. package/app/components/forms/input-number/InputNumberCore.vue +26 -22
  9. package/app/components/forms/input-number/variants/InputNumberDefault.vue +50 -27
  10. package/app/components/forms/input-radio/MultipleRadiobuttons.vue +31 -25
  11. package/app/components/forms/input-range/InputRangeCore.vue +30 -28
  12. package/app/components/forms/input-range/variants/InputRangeDefault.vue +45 -28
  13. package/app/components/forms/input-range-fancy/InputRangeFancyWithLabel.vue +31 -18
  14. package/app/components/forms/input-select/variants/InputSelectWithLabel.vue +48 -37
  15. package/app/components/forms/input-text/InputTextCore.vue +4 -6
  16. package/app/components/forms/input-text/variants/InputTextAsNumberWithLabel.vue +42 -33
  17. package/app/components/forms/input-text/variants/InputTextWithLabel.vue +51 -42
  18. package/app/components/forms/input-textarea/InputTextareaCore.vue +29 -24
  19. package/app/components/forms/input-textarea/variants/InputTextareaWithLabel.vue +41 -31
  20. package/app/components/forms/toggle-switch/ToggleSwitchCore.vue +43 -25
  21. package/app/components/forms/toggle-switch/ToggleSwitchCoreOld.vue +36 -22
  22. package/app/components/forms/toggle-switch/variants/ToggleSwitchWithLabel.vue +42 -25
  23. package/app/components/forms/toggle-switch/variants/ToggleSwitchWithLabelInline.vue +30 -26
  24. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
1
  <template>
2
2
  <label :for="id" class="input-label" :class="[elementClasses, inputVariant]">
3
- <slot v-if="hasHtmlLabel" name="htmlLabel"></slot>
4
- <slot v-if="hasTextLabel" name="textLabel"></slot>
3
+ <slot v-if="slots.htmlLabel" name="htmlLabel"></slot>
4
+ <slot v-if="slots.textLabel" name="textLabel"></slot>
5
5
  </label>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
- import propValidators from '../c12/prop-validators';
9
+ import propValidators from "../c12/prop-validators"
10
10
 
11
11
  const props = defineProps({
12
12
  id: {
@@ -27,25 +27,23 @@ const props = defineProps({
27
27
  },
28
28
  theme: {
29
29
  type: String as PropType<string>,
30
- default: 'primary',
30
+ default: "primary",
31
31
  validator(value: string) {
32
- return propValidators.theme.includes(value);
32
+ return propValidators.theme.includes(value)
33
33
  },
34
34
  },
35
35
  inputVariant: {
36
36
  type: String as PropType<string>,
37
- default: 'default',
37
+ default: "default",
38
38
  validator(value: string) {
39
- return propValidators.inputVariant.includes(value);
39
+ return propValidators.inputVariant.includes(value)
40
40
  },
41
41
  },
42
- });
42
+ })
43
43
 
44
- const slots = useSlots();
45
- const hasHtmlLabel = computed(() => slots.htmlLabel !== undefined);
46
- const hasTextLabel = computed(() => slots.textLabel !== undefined);
44
+ const slots = useSlots()
47
45
 
48
- const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
46
+ const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough)
49
47
  </script>
50
48
 
51
49
  <style lang="css">
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="input-number-wrapper" :data-theme="formTheme" :data-size="size">
3
- <div v-if="hasLeftContent" class="slot left">
3
+ <div v-if="slots.left" class="slot left">
4
4
  <slot name="left"></slot>
5
5
  </div>
6
6
 
@@ -13,21 +13,27 @@
13
13
  :min
14
14
  :max
15
15
  :step
16
- :class="[elementClasses, 'input-number-core', `input-number--${theme}`, `input-number--${size}`, `input-number--${weight}`]"
16
+ :class="[
17
+ elementClasses,
18
+ 'input-number-core',
19
+ `input-number--${theme}`,
20
+ `input-number--${size}`,
21
+ `input-number--${weight}`,
22
+ ]"
17
23
  v-model="modelValue"
18
24
  ref="inputField"
19
25
  inputmode="numeric"
20
26
  pattern="[0-9]+"
21
27
  />
22
28
  </div>
23
- <div v-if="hasRightContent" class="slot right">
29
+ <div v-if="slots.right" class="slot right">
24
30
  <slot name="right"></slot>
25
31
  </div>
26
32
  </div>
27
33
  </template>
28
34
 
29
35
  <script setup lang="ts">
30
- import propValidators from '../c12/prop-validators';
36
+ import propValidators from "../c12/prop-validators"
31
37
 
32
38
  const props = defineProps({
33
39
  id: {
@@ -52,7 +58,7 @@ const props = defineProps({
52
58
  },
53
59
  placeholder: {
54
60
  type: String,
55
- default: '',
61
+ default: "",
56
62
  },
57
63
  required: {
58
64
  type: Boolean,
@@ -60,23 +66,23 @@ const props = defineProps({
60
66
  },
61
67
  theme: {
62
68
  type: String as PropType<string>,
63
- default: 'primary',
69
+ default: "primary",
64
70
  validator(value: string) {
65
- return propValidators.theme.includes(value);
71
+ return propValidators.theme.includes(value)
66
72
  },
67
73
  },
68
74
  size: {
69
75
  type: String as PropType<string>,
70
- default: 'medium',
76
+ default: "medium",
71
77
  validator(value: string) {
72
- return propValidators.size.includes(value);
78
+ return propValidators.size.includes(value)
73
79
  },
74
80
  },
75
81
  weight: {
76
82
  type: String as PropType<string>,
77
- default: 'wght-400',
83
+ default: "wght-400",
78
84
  validator(value: string) {
79
- return propValidators.weight.includes(value);
85
+ return propValidators.weight.includes(value)
80
86
  },
81
87
  },
82
88
  fieldHasError: {
@@ -87,20 +93,18 @@ const props = defineProps({
87
93
  type: Array as PropType<string[]>,
88
94
  default: () => [],
89
95
  },
90
- });
96
+ })
91
97
 
92
- const slots = useSlots();
93
- const hasLeftContent = computed(() => slots.left !== undefined);
94
- const hasRightContent = computed(() => slots.right !== undefined);
98
+ const slots = useSlots()
95
99
 
96
100
  const formTheme = computed(() => {
97
- return props.fieldHasError ? 'error' : props.theme;
98
- });
101
+ return props.fieldHasError ? "error" : props.theme
102
+ })
99
103
 
100
- const modelValue = defineModel<number | readonly number[]>();
104
+ const modelValue = defineModel<number | readonly number[]>()
101
105
 
102
- const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
103
- const minLength = computed(() => `${props.max.toString().length + 1}em`);
106
+ const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough)
107
+ const minLength = computed(() => `${props.max.toString().length + 1}em`)
104
108
  </script>
105
109
 
106
110
  <style lang="css">
@@ -196,8 +200,8 @@ const minLength = computed(() => `${props.max.toString().length + 1}em`);
196
200
  }
197
201
  }
198
202
 
199
- input[type='number']::-webkit-inner-spin-button,
200
- input[type='number']::-webkit-outer-spin-button {
203
+ input[type="number"]::-webkit-inner-spin-button,
204
+ input[type="number"]::-webkit-outer-spin-button {
201
205
  -webkit-appearance: none;
202
206
  margin: 0;
203
207
  }
@@ -1,15 +1,41 @@
1
1
  <template>
2
- <div class="input-number-with-label" :data-theme="formTheme" :data-size="size" :class="[elementClasses, `theme-${theme}`, { error: fieldHasError }]">
3
- <InputLabel :for="id" :id :theme :name input-variant="normal" :field-has-error :style-class-passthrough="['input-number-label', 'body-normal-bold']">
2
+ <div
3
+ class="input-number-with-label"
4
+ :data-theme="formTheme"
5
+ :data-size="size"
6
+ :class="[elementClasses, `theme-${theme}`, { error: fieldHasError }]"
7
+ >
8
+ <InputLabel
9
+ :for="id"
10
+ :id
11
+ :theme
12
+ :name
13
+ input-variant="normal"
14
+ :field-has-error
15
+ :style-class-passthrough="['input-number-label', 'body-normal-bold']"
16
+ >
4
17
  <template #textLabel>{{ label }}</template>
5
18
  </InputLabel>
6
19
 
7
- <template v-if="hasDescription">
20
+ <template v-if="slots.description">
8
21
  <slot name="description"></slot>
9
22
  </template>
10
23
 
11
- <InputNumberCore v-model="modelValue" :id :name :min :max :step :theme :required :size :weight :fieldHasError :styleClassPassthrough>
12
- <template v-if="hasLeftContent" #left>
24
+ <InputNumberCore
25
+ v-model="modelValue"
26
+ :id
27
+ :name
28
+ :min
29
+ :max
30
+ :step
31
+ :theme
32
+ :required
33
+ :size
34
+ :weight
35
+ :fieldHasError
36
+ :styleClassPassthrough
37
+ >
38
+ <template v-if="slots.left" #left>
13
39
  <InputButtonCore
14
40
  type="button"
15
41
  @click.stop.prevent="updateValue(-step, Number(modelValue) > min)"
@@ -24,7 +50,7 @@
24
50
  </template>
25
51
  </InputButtonCore>
26
52
  </template>
27
- <template v-if="hasRightContent" #right>
53
+ <template v-if="slots.right" #right>
28
54
  <InputButtonCore
29
55
  type="button"
30
56
  @click.stop.prevent="updateValue(step, Number(modelValue) < max)"
@@ -45,7 +71,7 @@
45
71
  </template>
46
72
 
47
73
  <script setup lang="ts">
48
- import propValidators from '../../c12/prop-validators';
74
+ import propValidators from "../../c12/prop-validators"
49
75
 
50
76
  const props = defineProps({
51
77
  name: {
@@ -70,7 +96,7 @@ const props = defineProps({
70
96
  },
71
97
  placeholder: {
72
98
  type: String,
73
- default: '',
99
+ default: "",
74
100
  },
75
101
  errorMessage: {
76
102
  type: [Object, String],
@@ -86,51 +112,48 @@ const props = defineProps({
86
112
  },
87
113
  theme: {
88
114
  type: String as PropType<string>,
89
- default: 'primary',
115
+ default: "primary",
90
116
  validator(value: string) {
91
- return propValidators.theme.includes(value);
117
+ return propValidators.theme.includes(value)
92
118
  },
93
119
  },
94
120
  size: {
95
121
  type: String as PropType<string>,
96
- default: 'medium',
122
+ default: "medium",
97
123
  validator(value: string) {
98
- return propValidators.size.includes(value);
124
+ return propValidators.size.includes(value)
99
125
  },
100
126
  },
101
127
  weight: {
102
128
  type: String as PropType<string>,
103
- default: 'wght-400',
129
+ default: "wght-400",
104
130
  validator(value: string) {
105
- return propValidators.weight.includes(value);
131
+ return propValidators.weight.includes(value)
106
132
  },
107
133
  },
108
134
  styleClassPassthrough: {
109
135
  type: Array as PropType<string[]>,
110
136
  default: () => [],
111
137
  },
112
- });
138
+ })
113
139
 
114
- const slots = useSlots();
115
- const hasDescription = computed(() => slots.description !== undefined);
116
- const hasLeftContent = computed(() => slots.left !== undefined);
117
- const hasRightContent = computed(() => slots.right !== undefined);
118
- const { elementClasses, updateElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
140
+ const slots = useSlots()
141
+ const { elementClasses, updateElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough)
119
142
 
120
- const id = useId();
143
+ const id = useId()
121
144
  const formTheme = computed(() => {
122
- return props.fieldHasError ? 'error' : props.theme;
123
- });
145
+ return props.fieldHasError ? "error" : props.theme
146
+ })
124
147
 
125
- const modelValue = defineModel<number | readonly number[]>();
148
+ const modelValue = defineModel<number | readonly number[]>()
126
149
 
127
150
  const updateValue = (step: number, withinRangeLimit: boolean) => {
128
151
  if (withinRangeLimit) {
129
- modelValue.value = (Number(modelValue.value) + step) as number;
152
+ modelValue.value = (Number(modelValue.value) + step) as number
130
153
  }
131
- };
154
+ }
132
155
 
133
- updateElementClasses(['has-left-button', 'has-right-button']);
156
+ updateElementClasses(["has-left-button", "has-right-button"])
134
157
  </script>
135
158
 
136
159
  <style lang="css">
@@ -1,5 +1,13 @@
1
1
  <template>
2
- <FormFieldset :id :name :legend :fieldHasError :required :data-testid :styleClassPassthrough="['multiple-radiobuttons-fieldset']">
2
+ <FormFieldset
3
+ :id
4
+ :name
5
+ :legend
6
+ :fieldHasError
7
+ :required
8
+ :data-testid
9
+ :styleClassPassthrough="['multiple-radiobuttons-fieldset']"
10
+ >
3
11
  <template #description>
4
12
  <slot name="description"></slot>
5
13
  </template>
@@ -59,13 +67,13 @@
59
67
  </template>
60
68
 
61
69
  <script setup lang="ts">
62
- import propValidators from '../c12/prop-validators';
63
- import type { IFormMultipleOptions } from '../../../../shared/types/types.forms';
70
+ import propValidators from "../c12/prop-validators"
71
+ import type { IFormMultipleOptions } from "../../../../shared/types/types.forms"
64
72
 
65
73
  const props = defineProps({
66
74
  dataTestid: {
67
75
  type: String,
68
- default: 'multiple-radio-buttons',
76
+ default: "multiple-radio-buttons",
69
77
  },
70
78
  name: {
71
79
  type: String,
@@ -81,7 +89,7 @@ const props = defineProps({
81
89
  },
82
90
  placeholder: {
83
91
  type: String,
84
- default: '',
92
+ default: "",
85
93
  },
86
94
  isButton: {
87
95
  type: Boolean,
@@ -105,16 +113,16 @@ const props = defineProps({
105
113
  },
106
114
  size: {
107
115
  type: String as PropType<string>,
108
- default: 'medium',
116
+ default: "medium",
109
117
  validator(value: string) {
110
- return propValidators.size.includes(value);
118
+ return propValidators.size.includes(value)
111
119
  },
112
120
  },
113
121
  optionsLayout: {
114
122
  type: String as PropType<string>,
115
- default: 'equal-widths',
123
+ default: "equal-widths",
116
124
  validator(value: string) {
117
- return propValidators.optionsLayout.includes(value);
125
+ return propValidators.optionsLayout.includes(value)
118
126
  },
119
127
  },
120
128
  equalCols: {
@@ -127,33 +135,31 @@ const props = defineProps({
127
135
  },
128
136
  theme: {
129
137
  type: String as PropType<string>,
130
- default: 'primary',
138
+ default: "primary",
131
139
  validator(value: string) {
132
- return propValidators.theme.includes(value);
140
+ return propValidators.theme.includes(value)
133
141
  },
134
142
  },
135
143
  direction: {
136
- type: String as PropType<'row' | 'row-reverse'>,
137
- default: 'row',
144
+ type: String as PropType<"row" | "row-reverse">,
145
+ default: "row",
138
146
  validator(value: string) {
139
- return ['row', 'row-reverse'].includes(value);
147
+ return ["row", "row-reverse"].includes(value)
140
148
  },
141
149
  },
142
- });
150
+ })
143
151
 
144
- const slots = useSlots();
145
- const hasDescriptionSlot = computed(() => slots.description !== undefined);
146
- const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
152
+ const slots = useSlots()
147
153
 
148
- const id = `${props.name}-input-${useId()}`;
149
- const errorId = `${name}-error-message`;
154
+ const id = `${props.name}-input-${useId()}`
155
+ const errorId = `${name}-error-message`
150
156
  const ariaDescribedby = computed(() => {
151
- const ariaDescribedbyId = hasDescriptionSlot.value ? `${id}-description` : undefined;
152
- return props.fieldHasError ? errorId : ariaDescribedbyId;
153
- });
157
+ const ariaDescribedbyId = slots.description ? `${id}-description` : undefined
158
+ return props.fieldHasError ? errorId : ariaDescribedbyId
159
+ })
154
160
 
155
- const modelValue = defineModel();
156
- const fieldData = defineModel('fieldData') as Ref<IFormMultipleOptions>;
161
+ const modelValue = defineModel()
162
+ const fieldData = defineModel("fieldData") as Ref<IFormMultipleOptions>
157
163
  </script>
158
164
 
159
165
  <style lang="css">
@@ -1,11 +1,11 @@
1
1
  <template>
2
2
  <div class="input-range-wrapper" :data-theme="formTheme">
3
- <div v-if="hasLeftContent" class="slot left">
3
+ <div v-if="slots.left" class="slot left">
4
4
  <slot name="left"></slot>
5
5
  </div>
6
6
 
7
7
  <div class="input-range-container">
8
- <slot v-if="hasMarkers" name="markers"></slot>
8
+ <slot v-if="slots.markers" name="markers"></slot>
9
9
 
10
10
  <input
11
11
  type="range"
@@ -15,22 +15,28 @@
15
15
  :min
16
16
  :max
17
17
  :step
18
- :list="hasDataList ? name + '-datalist' : ''"
19
- :class="['input-range-core', `input-range--${size}`, `input-range--${weight}`, styleClassPassthrough, { 'has-markers': hasMarkers }]"
18
+ :list="slots.datalist ? name + '-datalist' : ''"
19
+ :class="[
20
+ 'input-range-core',
21
+ `input-range--${size}`,
22
+ `input-range--${weight}`,
23
+ styleClassPassthrough,
24
+ { 'has-markers': slots.markers },
25
+ ]"
20
26
  v-model="modelValue"
21
27
  ref="inputRange"
22
28
  />
23
29
 
24
- <slot v-if="hasDataList" name="datalist"></slot>
30
+ <slot v-if="slots.datalist" name="datalist"></slot>
25
31
  </div>
26
- <div v-if="hasRightContent" class="slot right">
32
+ <div v-if="slots.right" class="slot right">
27
33
  <slot name="right"></slot>
28
34
  </div>
29
35
  </div>
30
36
  </template>
31
37
 
32
38
  <script setup lang="ts">
33
- import propValidators from '../c12/prop-validators';
39
+ import propValidators from "../c12/prop-validators"
34
40
 
35
41
  const props = defineProps({
36
42
  id: {
@@ -55,7 +61,7 @@ const props = defineProps({
55
61
  },
56
62
  placeholder: {
57
63
  type: String,
58
- default: '',
64
+ default: "",
59
65
  },
60
66
  required: {
61
67
  type: Boolean,
@@ -63,23 +69,23 @@ const props = defineProps({
63
69
  },
64
70
  theme: {
65
71
  type: String as PropType<string>,
66
- default: 'primary',
72
+ default: "primary",
67
73
  validator(value: string) {
68
- return propValidators.theme.includes(value);
74
+ return propValidators.theme.includes(value)
69
75
  },
70
76
  },
71
77
  size: {
72
78
  type: String as PropType<string>,
73
- default: 'medium',
79
+ default: "medium",
74
80
  validator(value: string) {
75
- return propValidators.size.includes(value);
81
+ return propValidators.size.includes(value)
76
82
  },
77
83
  },
78
84
  weight: {
79
85
  type: String as PropType<string>,
80
- default: 'wght-400',
86
+ default: "wght-400",
81
87
  validator(value: string) {
82
- return propValidators.weight.includes(value);
88
+ return propValidators.weight.includes(value)
83
89
  },
84
90
  },
85
91
  fieldHasError: {
@@ -90,28 +96,24 @@ const props = defineProps({
90
96
  type: Array as PropType<string[]>,
91
97
  default: () => [],
92
98
  },
93
- });
99
+ })
94
100
 
95
- const slots = useSlots();
96
- const hasDataList = computed(() => slots.datalist !== undefined);
97
- const hasMarkers = computed(() => slots.markers !== undefined);
98
- const hasLeftContent = computed(() => slots.left !== undefined);
99
- const hasRightContent = computed(() => slots.right !== undefined);
101
+ const slots = useSlots()
100
102
 
101
103
  const formTheme = computed(() => {
102
- return props.fieldHasError ? 'error' : props.theme;
103
- });
104
+ return props.fieldHasError ? "error" : props.theme
105
+ })
104
106
 
105
- const modelValue = defineModel<number | readonly number[]>();
107
+ const modelValue = defineModel<number | readonly number[]>()
106
108
 
107
109
  // @input="changeBackgroundColor"
108
110
  const changeBackgroundColor = () => {
109
- console.log('changeBackgroundColor()');
110
- const inputRange = ref<HTMLInputElement | null>(null);
111
+ console.log("changeBackgroundColor()")
112
+ const inputRange = ref<HTMLInputElement | null>(null)
111
113
  if (inputRange.value !== null) {
112
- inputRange.value.style.accentColor = 'hsl(' + modelValue.value + ', 100%, 50%)';
114
+ inputRange.value.style.accentColor = "hsl(" + modelValue.value + ", 100%, 50%)"
113
115
  }
114
- };
116
+ }
115
117
  </script>
116
118
 
117
119
  <style lang="css">
@@ -137,7 +139,7 @@ const changeBackgroundColor = () => {
137
139
  flex-grow: 1;
138
140
 
139
141
  display: grid;
140
- grid-template-areas: 'element-stack';
142
+ grid-template-areas: "element-stack";
141
143
 
142
144
  .input-range-markers {
143
145
  grid-area: element-stack;