srcdev-nuxt-forms 6.0.1 → 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 (40) hide show
  1. package/README.md +45 -5
  2. package/app/assets/styles/extends-layer/srcdev-forms/components/_form-fieldset.css +1 -1
  3. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-button.css +1 -1
  4. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-checkbox-radio-core.css +1 -1
  5. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-checkbox-radio-options-button.css +1 -1
  6. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-error.css +1 -1
  7. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-label.css +1 -1
  8. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-select.css +1 -1
  9. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-text.css +1 -1
  10. package/app/assets/styles/extends-layer/srcdev-forms/components/_input-textarea.css +1 -1
  11. package/app/assets/styles/setup/_head.css +1 -1
  12. package/app/assets/styles/setup/typography/vars/_reponsive-font-sizes.css +10 -10
  13. package/app/assets/styles/setup/typography/vars/index.css +0 -1
  14. package/app/components/forms/form-fieldset/FormFieldset.vue +19 -10
  15. package/app/components/forms/input-button/InputButtonCore.vue +25 -28
  16. package/app/components/forms/input-checkbox/MultipleCheckboxes.vue +48 -27
  17. package/app/components/forms/input-checkbox/SingleCheckbox.vue +52 -33
  18. package/app/components/forms/input-checkbox-radio/InputCheckboxRadioButton.vue +40 -22
  19. package/app/components/forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +33 -17
  20. package/app/components/forms/input-label/InputLabel.vue +10 -12
  21. package/app/components/forms/input-number/InputNumberCore.vue +26 -22
  22. package/app/components/forms/input-number/variants/InputNumberDefault.vue +50 -27
  23. package/app/components/forms/input-radio/MultipleRadiobuttons.vue +31 -25
  24. package/app/components/forms/input-range/InputRangeCore.vue +30 -28
  25. package/app/components/forms/input-range/variants/InputRangeDefault.vue +45 -28
  26. package/app/components/forms/input-range-fancy/InputRangeFancyWithLabel.vue +31 -18
  27. package/app/components/forms/input-select/variants/InputSelectWithLabel.vue +48 -37
  28. package/app/components/forms/input-text/InputTextCore.vue +56 -52
  29. package/app/components/forms/input-text/variants/InputTextAsNumberWithLabel.vue +42 -33
  30. package/app/components/forms/input-text/variants/InputTextWithLabel.vue +51 -42
  31. package/app/components/forms/input-textarea/InputTextareaCore.vue +29 -24
  32. package/app/components/forms/input-textarea/variants/InputTextareaWithLabel.vue +41 -31
  33. package/app/components/forms/toggle-switch/ToggleSwitchCore.vue +43 -25
  34. package/app/components/forms/toggle-switch/ToggleSwitchCoreOld.vue +36 -22
  35. package/app/components/forms/toggle-switch/variants/ToggleSwitchWithLabel.vue +42 -25
  36. package/app/components/forms/toggle-switch/variants/ToggleSwitchWithLabelInline.vue +30 -26
  37. package/nuxt.config.ts +11 -11
  38. package/package.json +2 -2
  39. package/app/assets/styles/setup/typography/vars/_colors.css +0 -14
  40. package/app/assets/styles/setup/variables/index.css +0 -1
@@ -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;
@@ -1,18 +1,26 @@
1
1
  <template>
2
2
  <div class="input-range-with-label" :data-theme="formTheme" :class="[elementClasses, { error: fieldHasError }]">
3
- <InputLabel :for="id" :id :theme :name input-variant="normal" :field-has-error :style-class-passthrough="['input-number-label', 'body-normal-bold']">
3
+ <InputLabel
4
+ :for="id"
5
+ :id
6
+ :theme
7
+ :name
8
+ input-variant="normal"
9
+ :field-has-error
10
+ :style-class-passthrough="['input-number-label', 'body-normal-bold']"
11
+ >
4
12
  <template #textLabel>{{ label }}</template>
5
13
  </InputLabel>
6
14
 
7
- <template v-if="hasDescription">
15
+ <template v-if="slots.description">
8
16
  <slot name="description"></slot>
9
17
  </template>
10
18
 
11
19
  <InputRangeCore v-model="modelValue" :id :name :min :max :step :theme :required :size :weight :fieldHasError>
12
- <template v-if="hasDataList" #datalist>
20
+ <template v-if="slots.datalist" #datalist>
13
21
  <slot name="datalist"></slot>
14
22
  </template>
15
- <template v-if="hasLeftContent" #left>
23
+ <template v-if="slots.left" #left>
16
24
  <InputButtonCore
17
25
  type="button"
18
26
  @click.stop.prevent="updateRange(-step, Number(modelValue) > min)"
@@ -27,7 +35,7 @@
27
35
  </template>
28
36
  </InputButtonCore>
29
37
  </template>
30
- <template v-if="hasRightContent" #right>
38
+ <template v-if="slots.right" #right>
31
39
  <InputButtonCore
32
40
  type="button"
33
41
  @click.stop.prevent="updateRange(step, Number(modelValue) < max)"
@@ -48,9 +56,22 @@
48
56
  </template>
49
57
 
50
58
  <script setup lang="ts">
51
- import propValidators from '../../c12/prop-validators';
59
+ import propValidators from "../../c12/prop-validators"
52
60
 
53
- const { name, label, required, min, max, step, theme, size, weight, styleClassPassthrough, errorMessage, fieldHasError } = defineProps({
61
+ const {
62
+ name,
63
+ label,
64
+ required,
65
+ min,
66
+ max,
67
+ step,
68
+ theme,
69
+ size,
70
+ weight,
71
+ styleClassPassthrough,
72
+ errorMessage,
73
+ fieldHasError,
74
+ } = defineProps({
54
75
  name: {
55
76
  type: String,
56
77
  required: true,
@@ -73,7 +94,7 @@ const { name, label, required, min, max, step, theme, size, weight, styleClassPa
73
94
  },
74
95
  placeholder: {
75
96
  type: String,
76
- default: '',
97
+ default: "",
77
98
  },
78
99
  errorMessage: {
79
100
  type: [Object, String],
@@ -89,23 +110,23 @@ const { name, label, required, min, max, step, theme, size, weight, styleClassPa
89
110
  },
90
111
  theme: {
91
112
  type: String as PropType<string>,
92
- default: 'primary',
113
+ default: "primary",
93
114
  validator(value: string) {
94
- return propValidators.theme.includes(value);
115
+ return propValidators.theme.includes(value)
95
116
  },
96
117
  },
97
118
  size: {
98
119
  type: String as PropType<string>,
99
- default: 'medium',
120
+ default: "medium",
100
121
  validator(value: string) {
101
- return propValidators.size.includes(value);
122
+ return propValidators.size.includes(value)
102
123
  },
103
124
  },
104
125
  weight: {
105
126
  type: String as PropType<string>,
106
- default: 'wght-400',
127
+ default: "wght-400",
107
128
  validator(value: string) {
108
- return propValidators.weight.includes(value);
129
+ return propValidators.weight.includes(value)
109
130
  },
110
131
  },
111
132
  styleClassPassthrough: {
@@ -114,29 +135,25 @@ const { name, label, required, min, max, step, theme, size, weight, styleClassPa
114
135
  },
115
136
  deepCssClassPassthrough: {
116
137
  type: String,
117
- default: '',
138
+ default: "",
118
139
  },
119
- });
140
+ })
120
141
 
121
- const slots = useSlots();
122
- const hasDescription = computed(() => slots.description !== undefined);
123
- const hasDataList = computed(() => slots.datalist !== undefined);
124
- const hasLeftContent = computed(() => slots.left !== undefined);
125
- const hasRightContent = computed(() => slots.right !== undefined);
126
- const { elementClasses, updateElementClasses } = useStyleClassPassthrough(styleClassPassthrough);
142
+ const slots = useSlots()
143
+ const { elementClasses } = useStyleClassPassthrough(styleClassPassthrough)
127
144
 
128
- const id = useId();
145
+ const id = useId()
129
146
  const formTheme = computed(() => {
130
- return fieldHasError ? 'error' : theme;
131
- });
147
+ return fieldHasError ? "error" : theme
148
+ })
132
149
 
133
- const modelValue = defineModel<number | readonly number[]>();
150
+ const modelValue = defineModel<number | readonly number[]>()
134
151
 
135
152
  const updateRange = (step: number, withinRangeLimit: boolean) => {
136
153
  if (withinRangeLimit) {
137
- modelValue.value = (Number(modelValue.value) + step) as number;
154
+ modelValue.value = (Number(modelValue.value) + step) as number
138
155
  }
139
- };
156
+ }
140
157
  </script>
141
158
 
142
159
  <style lang="css">
@@ -1,17 +1,31 @@
1
1
  <template>
2
2
  <div class="input-range-fancy-with-label" :data-theme="formTheme" :class="[elementClasses, { error: fieldHasError }]">
3
3
  <label class="input-range-fancy-label body-normal-bold" :for="id">{{ label }}</label>
4
- <template v-if="hasDescription">
4
+ <template v-if="slots.description">
5
5
  <slot name="description"></slot>
6
6
  </template>
7
7
 
8
- <InputRangeFancyCore v-model="modelValue" :id :name :rangeLowLabel :rangeHighLabel :min :max :step :theme :required :size :weight :fieldHasError />
8
+ <InputRangeFancyCore
9
+ v-model="modelValue"
10
+ :id
11
+ :name
12
+ :rangeLowLabel
13
+ :rangeHighLabel
14
+ :min
15
+ :max
16
+ :step
17
+ :theme
18
+ :required
19
+ :size
20
+ :weight
21
+ :fieldHasError
22
+ />
9
23
  <InputError :errorMessage :showError="fieldHasError" :id :isDetached="true" :styleClassPassthrough="['mbe-20']" />
10
24
  </div>
11
25
  </template>
12
26
 
13
27
  <script setup lang="ts">
14
- import propValidators from '../c12/prop-validators';
28
+ import propValidators from "../c12/prop-validators"
15
29
 
16
30
  const props = defineProps({
17
31
  id: {
@@ -48,7 +62,7 @@ const props = defineProps({
48
62
  },
49
63
  placeholder: {
50
64
  type: String,
51
- default: '',
65
+ default: "",
52
66
  },
53
67
  errorMessage: {
54
68
  type: [Object, String],
@@ -64,23 +78,23 @@ const props = defineProps({
64
78
  },
65
79
  theme: {
66
80
  type: String as PropType<string>,
67
- default: 'primary',
81
+ default: "primary",
68
82
  validator(value: string) {
69
- return propValidators.theme.includes(value);
83
+ return propValidators.theme.includes(value)
70
84
  },
71
85
  },
72
86
  size: {
73
87
  type: String as PropType<string>,
74
- default: 'medium',
88
+ default: "medium",
75
89
  validator(value: string) {
76
- return propValidators.size.includes(value);
90
+ return propValidators.size.includes(value)
77
91
  },
78
92
  },
79
93
  weight: {
80
94
  type: String as PropType<string>,
81
- default: 'wght-400',
95
+ default: "wght-400",
82
96
  validator(value: string) {
83
- return propValidators.weight.includes(value);
97
+ return propValidators.weight.includes(value)
84
98
  },
85
99
  },
86
100
  styleClassPassthrough: {
@@ -89,19 +103,18 @@ const props = defineProps({
89
103
  },
90
104
  deepCssClassPassthrough: {
91
105
  type: String,
92
- default: '',
106
+ default: "",
93
107
  },
94
- });
108
+ })
95
109
 
96
- const slots = useSlots();
97
- const hasDescription = computed(() => slots.description !== undefined);
98
- const { elementClasses, updateElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
110
+ const slots = useSlots()
111
+ const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough)
99
112
 
100
113
  const formTheme = computed(() => {
101
- return props.fieldHasError ? 'error' : props.theme;
102
- });
114
+ return props.fieldHasError ? "error" : props.theme
115
+ })
103
116
 
104
- const modelValue = defineModel<number | readonly number[]>();
117
+ const modelValue = defineModel<number | readonly number[]>()
105
118
  </script>
106
119
 
107
120
  <style lang="css">
@@ -1,11 +1,25 @@
1
1
  <template>
2
2
  <div>
3
- <div class="input-select-with-label" :class="[inputVariant, { dirty: isDirty }, { active: isActive }, { error: fieldHasError }]" :data-testid :data-theme="formTheme" :data-size="size">
4
- <InputLabel :for="id" :id :theme :name :input-variant :field-has-error :style-class-passthrough="['input-select-label']">
3
+ <div
4
+ class="input-select-with-label"
5
+ :class="[inputVariant, { dirty: isDirty }, { active: isActive }, { error: fieldHasError }]"
6
+ :data-testid
7
+ :data-theme="formTheme"
8
+ :data-size="size"
9
+ >
10
+ <InputLabel
11
+ :for="id"
12
+ :id
13
+ :theme
14
+ :name
15
+ :input-variant
16
+ :field-has-error
17
+ :style-class-passthrough="['input-select-label']"
18
+ >
5
19
  <template #textLabel>{{ label }}</template>
6
20
  </InputLabel>
7
21
 
8
- <div v-if="inputVariant === 'normal' && hasDescriptionSlot" :id="`${id}-description`">
22
+ <div v-if="inputVariant === 'normal' && slots.description" :id="`${id}-description`">
9
23
  <slot name="description"></slot>
10
24
  </div>
11
25
 
@@ -26,22 +40,28 @@
26
40
  :inputVariant
27
41
  />
28
42
 
29
- <InputError :errorMessage="errorMessage" :showError="fieldHasError" :id="errorId" :isDetached="false" :inputVariant />
43
+ <InputError
44
+ :errorMessage="errorMessage"
45
+ :showError="fieldHasError"
46
+ :id="errorId"
47
+ :isDetached="false"
48
+ :inputVariant
49
+ />
30
50
  </div>
31
- <div v-if="inputVariant !== 'normal' && hasDescriptionSlot" :id="`${id}-description`">
51
+ <div v-if="inputVariant !== 'normal' && slots.description" :id="`${id}-description`">
32
52
  <slot name="description"></slot>
33
53
  </div>
34
54
  </div>
35
55
  </template>
36
56
 
37
57
  <script setup lang="ts">
38
- import propValidators from '../../c12/prop-validators';
39
- import type { IFormMultipleOptions } from '../../../../../shared/types/types.forms';
58
+ import propValidators from "../../c12/prop-validators"
59
+ import type { IFormMultipleOptions } from "../../../../../shared/types/types.forms"
40
60
 
41
61
  const props = defineProps({
42
62
  dataTestid: {
43
63
  type: String,
44
- default: 'input-select-with-label',
64
+ default: "input-select-with-label",
45
65
  },
46
66
  name: {
47
67
  type: String,
@@ -53,7 +73,7 @@ const props = defineProps({
53
73
  },
54
74
  placeholder: {
55
75
  type: String,
56
- default: '',
76
+ default: "",
57
77
  },
58
78
  errorMessage: {
59
79
  type: [Object, String],
@@ -69,9 +89,9 @@ const props = defineProps({
69
89
  },
70
90
  size: {
71
91
  type: String as PropType<string>,
72
- default: 'medium',
92
+ default: "medium",
73
93
  validator(value: string) {
74
- return propValidators.size.includes(value);
94
+ return propValidators.size.includes(value)
75
95
  },
76
96
  },
77
97
  styleClassPassthrough: {
@@ -80,44 +100,35 @@ const props = defineProps({
80
100
  },
81
101
  theme: {
82
102
  type: String as PropType<string>,
83
- default: 'primary',
103
+ default: "primary",
84
104
  validator(value: string) {
85
- return propValidators.theme.includes(value);
105
+ return propValidators.theme.includes(value)
86
106
  },
87
107
  },
88
108
  inputVariant: {
89
109
  type: String as PropType<string>,
90
- default: 'normal',
110
+ default: "normal",
91
111
  validator(value: string) {
92
- return propValidators.inputVariant.includes(value);
112
+ return propValidators.inputVariant.includes(value)
93
113
  },
94
114
  },
95
- });
115
+ })
96
116
 
97
- const slots = useSlots();
98
- const hasDescriptionSlot = computed(() => slots.description !== undefined);
99
- const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
117
+ const slots = useSlots()
100
118
 
101
119
  const formTheme = computed(() => {
102
- return props.fieldHasError ? 'error' : props.theme;
103
- });
120
+ return props.fieldHasError ? "error" : props.theme
121
+ })
104
122
 
105
- const id = `${props.name}-${useId()}`;
106
- const errorId = `${name}-error-message`;
123
+ const id = `${props.name}-${useId()}`
124
+ const errorId = `${name}-error-message`
107
125
  const ariaDescribedby = computed(() => {
108
- const ariaDescribedbyId = hasDescriptionSlot.value ? `${id}-description` : undefined;
109
- return props.fieldHasError ? errorId : ariaDescribedbyId;
110
- });
126
+ const ariaDescribedbyId = slots.description ? `${id}-description` : undefined
127
+ return props.fieldHasError ? errorId : ariaDescribedbyId
128
+ })
111
129
 
112
- const modelValue = defineModel({ required: true });
113
- const isDirty = defineModel('isDirty');
114
- const isActive = defineModel('isActive');
115
- const fieldData = defineModel('fieldData') as Ref<IFormMultipleOptions>;
130
+ const modelValue = defineModel({ required: true })
131
+ const isDirty = defineModel("isDirty")
132
+ const isActive = defineModel("isActive")
133
+ const fieldData = defineModel("fieldData") as Ref<IFormMultipleOptions>
116
134
  </script>
117
-
118
- <style lang="css">
119
- .input-select-with-label {
120
- .input-select-label {
121
- }
122
- }
123
- </style>