inertia-bootstrap-forms 1.0.33 → 1.0.34
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/inertia-bootstrap-forms.es.js +401 -362
- package/dist/inertia-bootstrap-forms.umd.js +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/CheckboxToggle.vue +4 -1
- package/src/EditorInput.vue +21 -10
- package/src/FormContainer.vue +20 -2
- package/src/Select2Input.vue +18 -2
- package/src/css/from-select.scss +17 -12
package/package.json
CHANGED
package/src/CheckboxToggle.vue
CHANGED
|
@@ -30,6 +30,9 @@ export default {
|
|
|
30
30
|
computed: {
|
|
31
31
|
inputID() {
|
|
32
32
|
return this.form.getID(this) + (this.value || '');
|
|
33
|
+
},
|
|
34
|
+
selectedValue(){
|
|
35
|
+
return (typeof this.modelValue == 'object') ? Object.values(this.modelValue) : (this.modelValue ? [this.modelValue] : null)
|
|
33
36
|
}
|
|
34
37
|
},
|
|
35
38
|
setup(props) {
|
|
@@ -59,7 +62,7 @@ export default {
|
|
|
59
62
|
}
|
|
60
63
|
</script>
|
|
61
64
|
<template>
|
|
62
|
-
<label class="form-check-toggle" :class="{'form-check-toggle--active': (
|
|
65
|
+
<label class="form-check-toggle" :class="{'form-check-toggle--active': (selectedValue || []).includes(value)}" :for="inputID">
|
|
63
66
|
<input
|
|
64
67
|
:name="name + (group ? '_' + group?.name + '-'+group?.groupID : '')"
|
|
65
68
|
:id="inputID"
|
package/src/EditorInput.vue
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import Editor from '@tinymce/tinymce-vue';
|
|
3
|
-
import {inject} from "vue";
|
|
3
|
+
import {computed, inject} from "vue";
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
components: {Editor},
|
|
@@ -27,17 +27,28 @@ export default {
|
|
|
27
27
|
},
|
|
28
28
|
},
|
|
29
29
|
setup(props) {
|
|
30
|
-
|
|
30
|
+
let form = inject('form', {
|
|
31
|
+
errors: {},
|
|
32
|
+
getID(name) {
|
|
33
|
+
return name;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
let group = inject('group', {});
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
const modelValue = computed({
|
|
39
|
+
get() {
|
|
40
|
+
return (group.value && form.value[group.value.name]) ? group.value?.getData(props.name) : form.value[props.name];
|
|
41
|
+
},
|
|
42
|
+
set(value) {
|
|
43
|
+
if (group?.value?.name) {
|
|
44
|
+
group.value.setData(props.name, value);
|
|
45
|
+
} else {
|
|
46
|
+
form.value[props.name] = value;
|
|
47
|
+
}
|
|
38
48
|
}
|
|
49
|
+
});
|
|
39
50
|
|
|
40
|
-
|
|
51
|
+
return {modelValue, form, group};
|
|
41
52
|
},
|
|
42
53
|
emits: ['update:modelValue'],
|
|
43
54
|
}
|
|
@@ -47,7 +58,7 @@ export default {
|
|
|
47
58
|
<Editor
|
|
48
59
|
api-key="tbws10u99swxhai03qolxykukvqw99jd4nw9q8z34aocvc4r"
|
|
49
60
|
tinymce-script-src="/js/tinymce/tinymce.min.js"
|
|
50
|
-
v-model="
|
|
61
|
+
v-model="modelValue"
|
|
51
62
|
:init="{
|
|
52
63
|
base_url: '/js/tinymce/',
|
|
53
64
|
disabled: false,
|
package/src/FormContainer.vue
CHANGED
|
@@ -34,7 +34,11 @@ export default {
|
|
|
34
34
|
setup(props) {
|
|
35
35
|
const formEl = toRef('formEl');
|
|
36
36
|
const formData = reactive(props.modelValue);
|
|
37
|
-
const form = useForm(
|
|
37
|
+
const form = useForm({
|
|
38
|
+
hasMessage: false,
|
|
39
|
+
successMessage: null,
|
|
40
|
+
...formData
|
|
41
|
+
});
|
|
38
42
|
|
|
39
43
|
form.getID = function (el) {
|
|
40
44
|
if (typeof el === String) {
|
|
@@ -58,6 +62,8 @@ export default {
|
|
|
58
62
|
isDirty,
|
|
59
63
|
errors,
|
|
60
64
|
hasErrors,
|
|
65
|
+
hasMessage,
|
|
66
|
+
successMessage,
|
|
61
67
|
processing,
|
|
62
68
|
progress,
|
|
63
69
|
wasSuccessful,
|
|
@@ -101,7 +107,10 @@ export default {
|
|
|
101
107
|
}).submit(this.method.toString(), this.url, {
|
|
102
108
|
only: this.only,
|
|
103
109
|
onStart: () => {
|
|
104
|
-
|
|
110
|
+
this.form.hasMessage = false;
|
|
111
|
+
this.form.successMessage = null;
|
|
112
|
+
|
|
113
|
+
this.$emit('onStart');
|
|
105
114
|
this.form.clearErrors();
|
|
106
115
|
},
|
|
107
116
|
onFinish: (data) => {
|
|
@@ -111,6 +120,12 @@ export default {
|
|
|
111
120
|
},
|
|
112
121
|
onSuccess: (data) => {
|
|
113
122
|
this.reset();
|
|
123
|
+
|
|
124
|
+
if(data?.props?.message){
|
|
125
|
+
this.form.hasMessage = true;
|
|
126
|
+
this.form.successMessage = data?.props?.message;
|
|
127
|
+
}
|
|
128
|
+
|
|
114
129
|
this.$emit('onSuccess', data);
|
|
115
130
|
}
|
|
116
131
|
});
|
|
@@ -137,6 +152,9 @@ export default {
|
|
|
137
152
|
</ul>
|
|
138
153
|
</Alert>
|
|
139
154
|
</slot>
|
|
155
|
+
<slot name="message" v-if="form.hasMessage" :form="form">
|
|
156
|
+
<Alert type="success" v-html="form.successMessage"></Alert>
|
|
157
|
+
</slot>
|
|
140
158
|
<slot :form="form" :submit="submit"/>
|
|
141
159
|
</form>
|
|
142
160
|
</template>
|
package/src/Select2Input.vue
CHANGED
|
@@ -44,6 +44,10 @@ export default {
|
|
|
44
44
|
type: Boolean,
|
|
45
45
|
default: false
|
|
46
46
|
},
|
|
47
|
+
hideDropdown: {
|
|
48
|
+
type: Boolean,
|
|
49
|
+
default: false
|
|
50
|
+
},
|
|
47
51
|
search: {
|
|
48
52
|
type: Object,
|
|
49
53
|
default: {
|
|
@@ -75,6 +79,15 @@ export default {
|
|
|
75
79
|
|
|
76
80
|
return {modelValue, form, group};
|
|
77
81
|
},
|
|
82
|
+
computed: {
|
|
83
|
+
selectedValue() {
|
|
84
|
+
if (!this.multiple) {
|
|
85
|
+
return this.modelValue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return (typeof this.modelValue == 'object') ? Object.values(this.modelValue) : (this.modelValue ? [this.modelValue] : null)
|
|
89
|
+
}
|
|
90
|
+
},
|
|
78
91
|
methods: {
|
|
79
92
|
init() {
|
|
80
93
|
this.choices = new Choices(this.$refs.input, {
|
|
@@ -179,7 +192,8 @@ export default {
|
|
|
179
192
|
</script>
|
|
180
193
|
<template>
|
|
181
194
|
<div class="select2-controller" :class="{
|
|
182
|
-
'is-invalid': form.errors[name]
|
|
195
|
+
'is-invalid': form.errors[name],
|
|
196
|
+
'select2-dropdown-hidden': hideDropdown === true
|
|
183
197
|
}">
|
|
184
198
|
<select
|
|
185
199
|
v-bind="$props"
|
|
@@ -192,7 +206,9 @@ export default {
|
|
|
192
206
|
}"
|
|
193
207
|
:placeholder="placeholder"
|
|
194
208
|
ref="input">
|
|
195
|
-
<option
|
|
209
|
+
<option
|
|
210
|
+
:value="(item.id || item)" v-for="(item, key) in options"
|
|
211
|
+
:selected="multiple ? (selectedValue || []).includes(item.id || item) : (item.id || item) === modelValue">{{ item.name || item }}
|
|
196
212
|
</option>
|
|
197
213
|
</select>
|
|
198
214
|
</div>
|
package/src/css/from-select.scss
CHANGED
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
height: 0;
|
|
85
85
|
width: 0;
|
|
86
86
|
border-style: solid;
|
|
87
|
-
border-color: #333 transparent transparent;
|
|
87
|
+
border-color: var(--bs-secondary-color, #333) transparent transparent;
|
|
88
88
|
border-width: 5px;
|
|
89
89
|
position: absolute;
|
|
90
90
|
right: 11.5px;
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
.choices[data-type*=select-one].is-open::after {
|
|
97
|
-
border-color: transparent transparent #333;
|
|
97
|
+
border-color: transparent transparent var(--bs-secondary-color, #333);
|
|
98
98
|
margin-top: -7.5px
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
width: 100%;
|
|
138
138
|
background-color: var(--bs-body-bg, #ffffff);
|
|
139
139
|
padding: calc(.5rem - 4px) .75rem calc(.5rem - 4px) .75rem;
|
|
140
|
-
border: 1px solid #ddd;
|
|
140
|
+
border: 1px solid var(--bs-border-color, #ddd);
|
|
141
141
|
border-radius: var(--bs-border-radius);
|
|
142
142
|
font-size: var(--bs-body-font-size);
|
|
143
143
|
min-height: 44px;
|
|
@@ -148,15 +148,16 @@
|
|
|
148
148
|
border-color: var(--bs-danger, #de0021);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
.is-focused .choices__inner,
|
|
151
|
+
.is-focused .choices__inner,
|
|
152
|
+
.is-open .choices__inner {
|
|
152
153
|
border-color: #b7b7b7
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
.is-open .choices__inner {
|
|
156
|
+
.select2-controller:not(.select2-dropdown-hidden) .is-open .choices__inner {
|
|
156
157
|
border-radius: var(--bs-border-radius) var(--bs-border-radius) 0 0
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
.is-flipped.is-open .choices__inner {
|
|
160
|
+
.select2-controller:not(.select2-dropdown-hidden) .is-flipped.is-open .choices__inner {
|
|
160
161
|
border-radius: 0 0 var(--bs-border-radius) var(--bs-border-radius)
|
|
161
162
|
}
|
|
162
163
|
|
|
@@ -195,8 +196,8 @@
|
|
|
195
196
|
font-weight: 500;
|
|
196
197
|
margin-right: 3.75px;
|
|
197
198
|
margin-bottom: 3.75px;
|
|
198
|
-
background-color: var(--bs-
|
|
199
|
-
border: 1px solid var(--bs-
|
|
199
|
+
background-color: var(--bs-secondary-bg, #999999);
|
|
200
|
+
border: 1px solid var(--bs-secondary-bg, #999999);
|
|
200
201
|
color: var(--bs-body-color, #ffffff);
|
|
201
202
|
word-break: break-all;
|
|
202
203
|
box-sizing: border-box
|
|
@@ -221,13 +222,17 @@
|
|
|
221
222
|
border: 1px solid var(--bs-secondary, #003642)
|
|
222
223
|
}
|
|
223
224
|
|
|
225
|
+
.select2-dropdown-hidden .choices__list--dropdown{
|
|
226
|
+
display: none !important;
|
|
227
|
+
}
|
|
228
|
+
|
|
224
229
|
.choices__list--dropdown, .choices__list[aria-expanded] {
|
|
225
230
|
display: none;
|
|
226
231
|
z-index: 99999;
|
|
227
232
|
position: absolute;
|
|
228
233
|
width: 100%;
|
|
229
|
-
background-color: var(--bs-
|
|
230
|
-
border: 1px solid var(--bs-
|
|
234
|
+
background-color: var(--bs-body-bg, #ddd);
|
|
235
|
+
border: 1px solid var(--bs-body-bg, #ddd);
|
|
231
236
|
top: 100%;
|
|
232
237
|
margin-top: -1px;
|
|
233
238
|
border-bottom-left-radius: var(--bs-border-radius);
|
|
@@ -295,7 +300,7 @@
|
|
|
295
300
|
}
|
|
296
301
|
|
|
297
302
|
.choices__list--dropdown .choices__item--selectable.is-highlighted, .choices__list[aria-expanded] .choices__item--selectable.is-highlighted {
|
|
298
|
-
background-color: #
|
|
303
|
+
background-color: var(--bs-secondary-bg, #ddd)
|
|
299
304
|
}
|
|
300
305
|
|
|
301
306
|
.choices__list--dropdown .choices__item--selectable.is-highlighted::after, .choices__list[aria-expanded] .choices__item--selectable.is-highlighted::after {
|
|
@@ -348,7 +353,7 @@
|
|
|
348
353
|
.choices__input {
|
|
349
354
|
display: inline-block;
|
|
350
355
|
vertical-align: baseline;
|
|
351
|
-
background-color: #
|
|
356
|
+
background-color: var(--bs-body-bg, #f7f7f7);
|
|
352
357
|
font-size: var(--bs-body-font-size);
|
|
353
358
|
border: 0;
|
|
354
359
|
border-radius: 0;
|