srcdev-nuxt-forms 2.4.8 → 2.4.10
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.
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<script setup lang="ts">
|
|
31
31
|
import propValidators from '../../forms/c12/prop-validators';
|
|
32
32
|
|
|
33
|
-
defineProps({
|
|
33
|
+
const props = defineProps({
|
|
34
34
|
name: {
|
|
35
35
|
type: String,
|
|
36
36
|
defaul: 'colour-scheme-select',
|
|
@@ -49,21 +49,25 @@ defineProps({
|
|
|
49
49
|
return propValidators.theme.includes(value);
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
|
+
stepAnimationDuration: {
|
|
53
|
+
type: Number as PropType<number>,
|
|
54
|
+
default: 100,
|
|
55
|
+
},
|
|
52
56
|
styleClassPassthrough: {
|
|
53
57
|
type: Array as PropType<string[]>,
|
|
54
58
|
default: () => [],
|
|
55
59
|
},
|
|
56
60
|
});
|
|
57
61
|
|
|
62
|
+
const duration = ref(props.stepAnimationDuration);
|
|
63
|
+
|
|
58
64
|
const { currentColourScheme } = useColourScheme();
|
|
59
65
|
|
|
60
66
|
const colourSchemeWrapper = ref<HTMLFormElement | null>(null);
|
|
61
|
-
const
|
|
67
|
+
const colourSchemeGroupElements = ref<HTMLDivElement[]>([]);
|
|
68
|
+
const colourSchemeInputElements = ref<HTMLInputElement[]>([]);
|
|
62
69
|
const showMarker = ref(false);
|
|
63
70
|
|
|
64
|
-
// console.log('colourSchemeInputElements');
|
|
65
|
-
// console.log(colourSchemeInputElements);
|
|
66
|
-
|
|
67
71
|
const findIndexOfInputValueFromCurrentColourScheme = () => {
|
|
68
72
|
if (currentColourScheme.value === 'auto') return 1;
|
|
69
73
|
if (currentColourScheme.value === 'light') return 2;
|
|
@@ -71,41 +75,60 @@ const findIndexOfInputValueFromCurrentColourScheme = () => {
|
|
|
71
75
|
return undefined;
|
|
72
76
|
};
|
|
73
77
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// console.log(`findLeftOffsetOfInputValueFromCurrentColourScheme: ${normalisedIndex}`);
|
|
78
|
-
// console.log(colourSchemeInputElements.value[normalisedIndex].offsetLeft);
|
|
78
|
+
const findIndexOfCheckedInput = () => {
|
|
79
|
+
return colourSchemeInputElements.value.findIndex((input) => input.checked);
|
|
80
|
+
};
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
// };
|
|
82
|
+
const currentActiveIndex = ref(findIndexOfCheckedInput());
|
|
82
83
|
|
|
83
|
-
const setColourSchemeAttr = () => {
|
|
84
|
+
const setColourSchemeAttr = async () => {
|
|
84
85
|
const index = findIndexOfInputValueFromCurrentColourScheme() ?? 0;
|
|
86
|
+
|
|
87
|
+
await nextTick();
|
|
88
|
+
currentActiveIndex.value = findIndexOfCheckedInput();
|
|
89
|
+
|
|
85
90
|
const wrapperLeftPosition = colourSchemeWrapper.value?.getBoundingClientRect().left ?? 0;
|
|
86
91
|
const parentLeftPosition = colourSchemeWrapper.value?.parentElement?.getBoundingClientRect().left ?? 0;
|
|
87
92
|
const relativeLeftPosition = wrapperLeftPosition - parentLeftPosition;
|
|
88
|
-
|
|
93
|
+
|
|
94
|
+
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-step-animation-duration', colourSchemeGroupElements.value?.length * duration.value + 'ms');
|
|
89
95
|
|
|
90
96
|
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-position', index !== undefined ? index.toString() : '0');
|
|
91
|
-
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-left-offset',
|
|
92
|
-
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-width',
|
|
97
|
+
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-left-offset', colourSchemeGroupElements.value?.[index - 1]?.offsetLeft - relativeLeftPosition + 'px');
|
|
98
|
+
colourSchemeWrapper.value?.style.setProperty('--_select-scheme-marker-width', colourSchemeGroupElements.value?.[index - 1]?.getBoundingClientRect().width + 'px');
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const handleInputActiveClass = () => {
|
|
102
|
+
console.log(`handleInputActiveClass`, currentActiveIndex.value);
|
|
103
|
+
colourSchemeInputElements.value.forEach((element) => {
|
|
104
|
+
element.classList.remove('active');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
colourSchemeInputElements.value?.[currentActiveIndex.value].classList.add('active');
|
|
109
|
+
}, duration.value);
|
|
93
110
|
};
|
|
94
111
|
|
|
95
112
|
onMounted(() => {
|
|
96
|
-
|
|
113
|
+
colourSchemeGroupElements.value = Array.from(colourSchemeWrapper.value?.querySelectorAll('.select-scheme-group') || []) as HTMLInputElement[];
|
|
114
|
+
colourSchemeInputElements.value = Array.from(colourSchemeWrapper.value?.querySelectorAll('.scheme-input') || []) as HTMLInputElement[];
|
|
97
115
|
|
|
98
116
|
if (colourSchemeWrapper.value !== null) {
|
|
99
117
|
setColourSchemeAttr();
|
|
100
118
|
setTimeout(() => {
|
|
101
119
|
showMarker.value = true;
|
|
102
|
-
|
|
120
|
+
handleInputActiveClass();
|
|
121
|
+
}, duration.value);
|
|
103
122
|
}
|
|
104
123
|
});
|
|
105
124
|
|
|
106
125
|
watch(currentColourScheme, () => {
|
|
107
126
|
setColourSchemeAttr();
|
|
108
127
|
});
|
|
128
|
+
|
|
129
|
+
watch(currentActiveIndex, () => {
|
|
130
|
+
handleInputActiveClass();
|
|
131
|
+
});
|
|
109
132
|
</script>
|
|
110
133
|
|
|
111
134
|
<style lang="css">
|
|
@@ -125,9 +148,7 @@ watch(currentColourScheme, () => {
|
|
|
125
148
|
--_form-items-gap: 1rem;
|
|
126
149
|
--_form-padding: 0.6rem;
|
|
127
150
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
--_select-scheme-group-background-color: red;
|
|
151
|
+
--_select-scheme-group-background-color: var(--theme-form-checkbox-bg);
|
|
131
152
|
--_select-scheme-group-padding: 0.5rem;
|
|
132
153
|
--_select-scheme-group-border-width: 0.2rem;
|
|
133
154
|
--_select-scheme-group-border-colour: transparent;
|
|
@@ -138,7 +159,7 @@ watch(currentColourScheme, () => {
|
|
|
138
159
|
);
|
|
139
160
|
|
|
140
161
|
--_scheme-icon-font-size: 2rem;
|
|
141
|
-
--_scheme-icon-colour:
|
|
162
|
+
--_scheme-icon-colour: black;
|
|
142
163
|
|
|
143
164
|
.colour-scheme-select-form {
|
|
144
165
|
display: inline-grid;
|
|
@@ -153,37 +174,20 @@ watch(currentColourScheme, () => {
|
|
|
153
174
|
|
|
154
175
|
.select-scheme-marker-wrapper {
|
|
155
176
|
grid-area: select-stack;
|
|
156
|
-
/* display: grid; */
|
|
157
|
-
/* grid-template-columns: repeat(3, 1fr); */
|
|
158
177
|
z-index: 1;
|
|
159
|
-
/* grid-area: select-stack; */
|
|
160
|
-
/* gap: var(--_form-items-gap); */
|
|
161
|
-
/* transition: all 200ms; */
|
|
162
|
-
/* transition-behavior: allow-discrete; */
|
|
163
|
-
|
|
164
|
-
/* display: none; */
|
|
165
|
-
|
|
166
178
|
display: flex;
|
|
167
179
|
align-items: center;
|
|
168
180
|
position: relative;
|
|
169
181
|
|
|
170
182
|
.select-scheme-marker {
|
|
171
|
-
/* grid-column: var(--_select-scheme-marker-position); */
|
|
172
183
|
aspect-ratio: 1;
|
|
173
|
-
/* width: calc(var(--_select-scheme-group-width) + (var(--_form-outline-width) * 2)); */
|
|
174
|
-
/* translate: -1px 0; */
|
|
175
184
|
width: var(--_select-scheme-group-width);
|
|
176
|
-
|
|
177
|
-
/* translate: calc(var(--_select-scheme-marker-left-offset) - (var(--_select-scheme-group-outline-width) * 1) - (var(--_select-scheme-group-border-width) * 1)) 0; */
|
|
178
|
-
transition: all 300ms ease-in-out;
|
|
185
|
+
transition: all var(--_select-scheme-marker-step-animation-duration) ease-in-out;
|
|
179
186
|
background-color: var(--theme-form-radio-border);
|
|
180
187
|
border-radius: 50%;
|
|
181
188
|
|
|
182
189
|
position: absolute;
|
|
183
|
-
|
|
184
|
-
/* left: calc(var(--_select-scheme-marker-left-offset) - calc(var(--_select-scheme-group-border-width) * 1.5) - var(--_scheme-icon-font-size)); */
|
|
185
|
-
/* left: calc(var(--_select-scheme-marker-left-offset) - var(--_form-items-gap) - var(--_scheme-icon-font-size) + var(--_select-scheme-group-border-width) - 1px); */
|
|
186
|
-
left: calc(var(--_select-scheme-marker-left-offset) - 29px);
|
|
190
|
+
left: calc(var(--_select-scheme-marker-left-offset) - var(--_select-scheme-group-border-width));
|
|
187
191
|
|
|
188
192
|
opacity: 0;
|
|
189
193
|
|
|
@@ -199,27 +203,32 @@ watch(currentColourScheme, () => {
|
|
|
199
203
|
grid-template-columns: repeat(3, 1fr);
|
|
200
204
|
align-items: center;
|
|
201
205
|
width: fit-content;
|
|
202
|
-
/* padding: var(--_form-padding); */
|
|
203
206
|
z-index: 2;
|
|
204
207
|
gap: var(--_form-items-gap);
|
|
208
|
+
position: relative;
|
|
205
209
|
|
|
206
210
|
.select-scheme-group {
|
|
207
211
|
aspect-ratio: 1;
|
|
208
212
|
display: grid;
|
|
209
213
|
grid-template-areas: 'icon-stack';
|
|
210
|
-
/* width: var(--_select-scheme-marker-width); */
|
|
211
214
|
place-content: center;
|
|
212
|
-
background
|
|
215
|
+
background: var(--_select-scheme-group-background-color);
|
|
213
216
|
border: var(--_select-scheme-group-border-width) solid var(--_select-scheme-group-border-colour);
|
|
214
217
|
outline: var(--_select-scheme-group-outline-width) solid var(--_select-scheme-group-outline-colour);
|
|
215
218
|
border-radius: 50%;
|
|
216
219
|
padding: var(--_select-scheme-group-padding);
|
|
217
220
|
|
|
221
|
+
transition: background calc(var(--_select-scheme-marker-step-animation-duration) / 3);
|
|
222
|
+
|
|
218
223
|
.scheme-icon {
|
|
219
224
|
grid-area: icon-stack;
|
|
220
225
|
display: block;
|
|
221
226
|
color: var(--_scheme-icon-colour);
|
|
222
227
|
font-size: var(--_scheme-icon-font-size);
|
|
228
|
+
|
|
229
|
+
&:hover {
|
|
230
|
+
cursor: pointer;
|
|
231
|
+
}
|
|
223
232
|
}
|
|
224
233
|
|
|
225
234
|
.scheme-input {
|
|
@@ -232,32 +241,27 @@ watch(currentColourScheme, () => {
|
|
|
232
241
|
}
|
|
233
242
|
|
|
234
243
|
&:has(input[value='auto']) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
/* --_select-scheme-marker-position: 1; */
|
|
239
|
-
/* --_select-scheme-group-border-colour: var(--theme-form-radio-border); */
|
|
240
|
-
/* --_select-scheme-group-outline-colour: var(--theme-form-radio-outline); */
|
|
244
|
+
&:has(.active) {
|
|
245
|
+
--_select-scheme-group-background-color: green;
|
|
246
|
+
--_scheme-icon-colour: white;
|
|
241
247
|
}
|
|
242
248
|
}
|
|
243
249
|
|
|
244
250
|
&:has(input[value='light']) {
|
|
245
|
-
|
|
251
|
+
&:has(.active) {
|
|
252
|
+
/* background: rgb(180, 58, 91);
|
|
253
|
+
background: linear-gradient(90deg, rgba(180, 58, 91, 1) 0%, rgba(253, 29, 29, 1) 50%, rgba(252, 176, 69, 1) 100%); */
|
|
254
|
+
--_select-scheme-group-background-color: radial-gradient(circle, rgba(180, 58, 91, 1) 0%, rgba(253, 29, 29, 1) 27%, rgba(252, 176, 69, 1) 100%);
|
|
255
|
+
/* --_select-scheme-group-background-color: radial-gradient(circle, rgba(63, 94, 251, 1) 70%, rgba(63, 94, 251, 0.5550814075630253) 90%, rgba(255, 255, 255, 0.42622986694677867) 100%); */
|
|
246
256
|
|
|
247
|
-
|
|
248
|
-
/* --_select-scheme-marker-position: 2; */
|
|
249
|
-
/* --_select-scheme-group-border-colour: var(--theme-form-radio-border); */
|
|
250
|
-
/* --_select-scheme-group-outline-colour: var(--theme-form-radio-outline); */
|
|
257
|
+
--_scheme-icon-colour: white;
|
|
251
258
|
}
|
|
252
259
|
}
|
|
253
260
|
|
|
254
261
|
&:has(input[value='dark']) {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
/* --_select-scheme-marker-position: 3; */
|
|
259
|
-
/* --_select-scheme-group-border-colour: var(--theme-form-radio-border); */
|
|
260
|
-
/* --_select-scheme-group-outline-colour: var(--theme-form-radio-outline); */
|
|
262
|
+
&:has(.active) {
|
|
263
|
+
--_select-scheme-group-background-color: black;
|
|
264
|
+
--_scheme-icon-colour: white;
|
|
261
265
|
}
|
|
262
266
|
}
|
|
263
267
|
}
|
package/package.json
CHANGED