@gitlab/ui 114.1.0 → 114.1.2

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 (141) hide show
  1. package/dist/components/base/breadcrumb/breadcrumb.js +4 -16
  2. package/dist/index.css +1 -1
  3. package/dist/index.css.map +1 -1
  4. package/package.json +7 -26
  5. package/src/components/base/breadcrumb/breadcrumb.scss +18 -2
  6. package/src/components/base/breadcrumb/breadcrumb.vue +4 -17
  7. package/CHANGELOG.md +0 -13139
  8. package/src/vendor/bootstrap/LICENSE +0 -11
  9. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  10. package/src/vendor/bootstrap-vue/package.json +0 -144
  11. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  12. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  13. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  14. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  15. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  21. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  22. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  23. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  24. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  25. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  26. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  27. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  28. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  29. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  30. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  31. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  32. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  33. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  34. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  35. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  36. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  37. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  38. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  39. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  40. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  41. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  42. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  43. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  44. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  45. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  46. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  47. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  48. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  49. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  50. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  51. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  52. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  53. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  54. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  55. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  56. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  57. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  58. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  59. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  60. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  61. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  62. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  63. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  64. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  65. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  66. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  67. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  68. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  69. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  70. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  71. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  72. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  73. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  74. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  75. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  76. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  77. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  78. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  79. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  80. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  81. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  82. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  83. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  84. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  85. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  86. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  87. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  89. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  90. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  91. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  92. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  93. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  94. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  95. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  96. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  97. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  98. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  99. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  100. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  101. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  102. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  103. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  104. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  105. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  106. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  107. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  108. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  109. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  110. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  111. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  112. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  113. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  114. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  115. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  116. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  117. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  118. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  119. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  120. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  121. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  122. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  123. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  124. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  125. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  126. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  127. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  128. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  129. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  130. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  131. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  132. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  133. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  134. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  135. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  136. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  137. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  138. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  139. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  140. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  141. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,365 +0,0 @@
1
- # Form
2
-
3
- > BootstrapVue form component and helper components that optionally support inline form styles and
4
- > validation states. Pair them up with other BootstrapVue form control components for an easy
5
- > customized, and responsive, layout with a consistent look and feel.
6
-
7
- ## Introduction to forms and controls
8
-
9
- Be sure to use an appropriate `type` on all inputs (e.g., `email` for email address or `number` for
10
- numerical information) to take advantage of newer input controls like email verification, number
11
- selection, and more.
12
-
13
- Here's a quick example to demonstrate BootstrapVue's form styles. Keep reading for documentation on
14
- supported components, form layout, and more.
15
-
16
- ```html
17
- <template>
18
- <div>
19
- <b-form @submit="onSubmit" @reset="onReset" v-if="show">
20
- <b-form-group
21
- id="input-group-1"
22
- label="Email address:"
23
- label-for="input-1"
24
- description="We'll never share your email with anyone else."
25
- >
26
- <b-form-input
27
- id="input-1"
28
- v-model="form.email"
29
- type="email"
30
- placeholder="Enter email"
31
- required
32
- ></b-form-input>
33
- </b-form-group>
34
-
35
- <b-form-group id="input-group-2" label="Your Name:" label-for="input-2">
36
- <b-form-input
37
- id="input-2"
38
- v-model="form.name"
39
- placeholder="Enter name"
40
- required
41
- ></b-form-input>
42
- </b-form-group>
43
-
44
- <b-form-group id="input-group-3" label="Food:" label-for="input-3">
45
- <b-form-select
46
- id="input-3"
47
- v-model="form.food"
48
- :options="foods"
49
- required
50
- ></b-form-select>
51
- </b-form-group>
52
-
53
- <b-form-group id="input-group-4" v-slot="{ ariaDescribedby }">
54
- <b-form-checkbox-group
55
- v-model="form.checked"
56
- id="checkboxes-4"
57
- :aria-describedby="ariaDescribedby"
58
- >
59
- <b-form-checkbox value="me">Check me out</b-form-checkbox>
60
- <b-form-checkbox value="that">Check that out</b-form-checkbox>
61
- </b-form-checkbox-group>
62
- </b-form-group>
63
-
64
- <b-button type="submit" variant="primary">Submit</b-button>
65
- <b-button type="reset" variant="danger">Reset</b-button>
66
- </b-form>
67
- <b-card class="mt-3" header="Form Data Result">
68
- <pre class="m-0">{{ form }}</pre>
69
- </b-card>
70
- </div>
71
- </template>
72
-
73
- <script>
74
- export default {
75
- data() {
76
- return {
77
- form: {
78
- email: '',
79
- name: '',
80
- food: null,
81
- checked: []
82
- },
83
- foods: [{ text: 'Select One', value: null }, 'Carrots', 'Beans', 'Tomatoes', 'Corn'],
84
- show: true
85
- }
86
- },
87
- methods: {
88
- onSubmit(event) {
89
- event.preventDefault()
90
- alert(JSON.stringify(this.form))
91
- },
92
- onReset(event) {
93
- event.preventDefault()
94
- // Reset our form values
95
- this.form.email = ''
96
- this.form.name = ''
97
- this.form.food = null
98
- this.form.checked = []
99
- // Trick to reset/clear native browser form validation state
100
- this.show = false
101
- this.$nextTick(() => {
102
- this.show = true
103
- })
104
- }
105
- }
106
- }
107
- </script>
108
-
109
- <!-- b-form.vue -->
110
- ```
111
-
112
- ## Inline form
113
-
114
- Use the `inline` prop on `<b-form>` to display a series of labels, form controls, and buttons on a
115
- single horizontal row. Form controls within inline forms vary slightly from their default states.
116
-
117
- - Controls are `display: flex`, collapsing any HTML white space and allowing you to provide
118
- alignment control with spacing and flexbox utilities.
119
- - Controls and input groups receive `width: auto` to override the Bootstrap default width: 100%.
120
- - Controls **only appear inline in viewports that are at least 576px wide** to account for narrow
121
- viewports on mobile devices.
122
-
123
- You may need to manually address the width and alignment of individual form controls with
124
- [spacing utilities](/docs/reference/spacing-classes) (as shown below). Lastly, be sure to always
125
- include a `<label>` with each form control, even if you need to hide it from non-screenreader
126
- visitors with class `.sr-only`.
127
-
128
- ```html
129
- <div>
130
- <b-form inline>
131
- <label class="sr-only" for="inline-form-input-name">Name</label>
132
- <b-form-input
133
- id="inline-form-input-name"
134
- class="mb-2 mr-sm-2 mb-sm-0"
135
- placeholder="Jane Doe"
136
- ></b-form-input>
137
-
138
- <label class="sr-only" for="inline-form-input-username">Username</label>
139
- <b-input-group prepend="@" class="mb-2 mr-sm-2 mb-sm-0">
140
- <b-form-input id="inline-form-input-username" placeholder="Username"></b-form-input>
141
- </b-input-group>
142
-
143
- <b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember me</b-form-checkbox>
144
-
145
- <b-button variant="primary">Save</b-button>
146
- </b-form>
147
- </div>
148
-
149
- <!-- b-form-inline.vue -->
150
- ```
151
-
152
- Custom form controls and selects are also supported.
153
-
154
- ```html
155
- <div>
156
- <b-form inline>
157
- <label class="mr-sm-2" for="inline-form-custom-select-pref">Preference</label>
158
- <b-form-select
159
- id="inline-form-custom-select-pref"
160
- class="mb-2 mr-sm-2 mb-sm-0"
161
- :options="[{ text: 'Choose...', value: null }, 'One', 'Two', 'Three']"
162
- :value="null"
163
- ></b-form-select>
164
-
165
- <b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember my preference</b-form-checkbox>
166
-
167
- <b-button variant="primary">Save</b-button>
168
- </b-form>
169
- </div>
170
-
171
- <!-- b-form-inline-custom.vue -->
172
- ```
173
-
174
- **Note:** _`<b-form-group>` is not supported in `inline` forms due to layout conflicts._
175
-
176
- ### Alternatives to hidden labels
177
-
178
- Assistive technologies such as screen readers will have trouble with your forms if you don't include
179
- a label for every input. For these inline forms, you can hide the labels using the `.sr-only` class.
180
- There are further alternative methods of providing a label for assistive technologies, such as the
181
- `aria-label`, `aria-labelledby` or `title` attributes. If none of these are present, assistive
182
- technologies may resort to using the `placeholder` attribute, if present, but note that use of
183
- `placeholder` as a replacement for other labelling methods is not advised.
184
-
185
- ## Related form control and layout components
186
-
187
- See also:
188
-
189
- - [form-input](?path=/docs/base-form-form-input--docs) Textual and text-like inputs
190
- - [form-textarea](?path=/docs/base-form-form-textarea--docs) Text area inputs
191
- - [form-select](?path=/docs/base-form-form-select--docs) Select input
192
- - [form-radio](?path=/docs/base-form-form-radio--docs) Radio Inputs
193
- - [form-checkbox](?path=/docs/base-form-form-checkbox--docs) Checkbox Inputs
194
- - [form-date](?path=/docs/base-form-form-date--docs) Date input
195
- - [button](?path=/docs/base-button--docs) Buttons
196
- - [form-group](/?path=/docs/base-form-form-group--docs) Form Input wrapper to generate form-groups
197
- that support labels, help text and feedback
198
- - [form-input-group](/?path=/docs/base-form-form-input-group--docs) Form Inputs with add-ons
199
- - [form-row](?path=/docs/base-form-form-group--docs#rows-b-row-and-b-form-row) Create grid rows and
200
- columns with tighter margins (available via the
201
- [Layout and grid components](?path=/docs/base-form-form-group--docs#layout-and-grid-system))
202
-
203
- ## Form helper components
204
-
205
- The following helper components are available with the `Form` plugin:
206
-
207
- - `<b-form-text>` Help text blocks for inputs
208
- - `<b-form-invalid-feedback>` Invalid feedback text blocks for input `invalid` states
209
- - `<b-form-valid-feedback>` Valid feedback text blocks for input `valid` states
210
- - `<b-form-datalist>` Easily create a `<datalist>` for use with `<b-form-input>` or plain `<input>`
211
-
212
- ### Form text helper
213
-
214
- Display a block of help text below an input with the `<b-form-text>` helper component. text is
215
- displayed with a muted color and slightly smaller font-size.
216
-
217
- **Tip:** Help text should be explicitly associated with the form control it relates to using the
218
- `aria-describedby` attribute. This will ensure that assistive technologies, such as screen readers,
219
- will announce this help text when the user focuses or enters the control.
220
-
221
- ```html
222
- <div>
223
- <b-form @submit.stop.prevent>
224
- <label for="text-password">Password</label>
225
- <b-form-input type="password" id="text-password" aria-describedby="password-help-block"></b-form-input>
226
- <b-form-text id="password-help-block">
227
- Your password must be 8-20 characters long, contain letters and numbers, and must not
228
- contain spaces, special characters, or emoji.
229
- </b-form-text>
230
- </b-form>
231
- </div>
232
-
233
- <!-- b-form-help-text.vue -->
234
- ```
235
-
236
- ### Feedback helpers
237
-
238
- The `<b-form-valid-feedback>` and `<b-form-invalid-feedback>` helper components will display
239
- feedback (based on input state) as a block of colored text. They rely on being placed after an input
240
- (sibling) and will show based on the browser native validation state of the input. To force them to
241
- show, set the prop `force-show` to `true`, or bind the controls `state` to the `state` prop of the
242
- feedback helper, or set the `was-validated` class on a parent element (such as a form). See the
243
- **Validation** section below for additional details.
244
-
245
- Use the optional Boolean prop `tooltip` to change the display from a block to a static tooltip
246
- style. The feedback will typically appear below the form control. When this mode is enabled, it is
247
- important that the parent container have a `position: relative:` css style (or `position-relative`
248
- class). Note that tooltip style feedback may, since its positioning is static, obscure other inputs,
249
- labels, etc.
250
-
251
- **Note:** Some form controls, such as
252
- [`<gl-form-radio>`](?path=/docs/base-form-form-radio--docs#contextual-states) and
253
- [`<gl-form-checkbox>`](?path=/docs/base-form-form-checkbox--docs#contextual-states) have wrapper
254
- elements which will prevent the feedback text from automatically showing (as the feedback component
255
- is not a direct sibling of the form control's input). Use the feedback component's `state` prop
256
- (bound to the state of the form control) or the `force-show` prop to display the feedback.
257
-
258
- ```html
259
- <template>
260
- <div>
261
- <b-form @submit.stop.prevent>
262
- <label for="feedback-user">User ID</label>
263
- <b-form-input v-model="userId" :state="validation" id="feedback-user"></b-form-input>
264
- <b-form-invalid-feedback :state="validation">
265
- Your user ID must be 5-12 characters long.
266
- </b-form-invalid-feedback>
267
- <b-form-valid-feedback :state="validation">
268
- Looks Good.
269
- </b-form-valid-feedback>
270
- </b-form>
271
- </div>
272
- </template>
273
-
274
- <script>
275
- export default {
276
- data() {
277
- return {
278
- userId: ''
279
- }
280
- },
281
- computed: {
282
- validation() {
283
- return this.userId.length > 4 && this.userId.length < 13
284
- }
285
- }
286
- }
287
- </script>
288
-
289
- <!-- b-form-feedback-example.vue -->
290
- ```
291
-
292
- ### Datalist helper
293
-
294
- For browsers that support
295
- [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist) elements, the
296
- `<b-form-datalist>` helper component will allow you to quickly create a `<datalist>` and child
297
- `<option>` elements via an array passed to the `options` prop.
298
-
299
- You may also manually provide `<option>` elements inside `<b-form-datalist>`. They will appear below
300
- any `<option>` elements generated from the `options` prop.
301
-
302
- ```html
303
- <template>
304
- <div>
305
- <label for="input-with-list">Input with datalist</label>
306
- <b-form-input list="input-list" id="input-with-list"></b-form-input>
307
- <b-form-datalist id="input-list" :options="options"></b-form-datalist>
308
- </div>
309
- </template>
310
-
311
- <script>
312
- export default {
313
- data() {
314
- return {
315
- options: ['Apple', 'Banana', 'Grape', 'Kiwi', 'Orange']
316
- }
317
- }
318
- }
319
- </script>
320
-
321
- <!-- b-form-datalist-example.vue -->
322
- ```
323
-
324
- `<b-form-datalist>` is also available via the shorter alias of `<b-datalist>`.
325
-
326
- See also:
327
-
328
- - [form-input datalist](?path=/docs/base-form-form-input--docs#datalist-support) for datalist usage.
329
- - [form-select `options` prop](?path=/docs/base-form-form-select--docs#options-property) docs for
330
- details on the formats and helper props associated with `options`.
331
-
332
- ## Validation
333
-
334
- Disable browser native HTML5 validation by setting the `novalidate` prop to true on `<b-form>`.
335
-
336
- Set the `validated` prop, on `<b-form>`, to `true` to add the Bootstrap v4 `.was-validated` class to
337
- the form to trigger validation states
338
-
339
- All of the form controls support a `state` prop, which can be used to set the form control into one
340
- of three contextual states:
341
-
342
- - `false` (denotes invalid state) is great for when there's a blocking or required field. A user
343
- must fill in this field properly to submit the form.
344
- - `true` (denotes valid state) is ideal for situations when you have per-field validation throughout
345
- a form and want to encourage a user through the rest of the fields.
346
- - `null` Displays no validation state (neither valid nor invalid)
347
-
348
- Refer to the
349
- [Bootstrap v4 Form Validation Documentation](https://getbootstrap.com/docs/4.5/components/forms/#validation)
350
- for details on the new Bootstrap v4 validation states.
351
-
352
- ### Validation mechanisms
353
-
354
- Using 3<sup>rd</sup> party Vue-based validation libraries with BootstrapVue:
355
-
356
- - BootstrapVue [Form validation reference section](/docs/reference/validation)
357
-
358
- Additional resources:
359
-
360
- - [Bootstrap v4: Form Validation Documentation](https://getbootstrap.com/docs/4.5/components/forms/#validation)
361
- - [MDN: Learn Form Validation - Using JavaScript API](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation#Validating_forms_using_JavaScript)
362
- - [MDN: HTML5 Constraint Validation](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation)
363
- - [MDN: Validity State API](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState)
364
-
365
- <!-- Component reference added automatically from component package.json -->
@@ -1,170 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { BFormInvalidFeedback } from './form-invalid-feedback'
3
-
4
- describe('form-invalid-feedback', () => {
5
- it('default should have tag div', async () => {
6
- const wrapper = mount(BFormInvalidFeedback)
7
-
8
- expect(wrapper.element.tagName).toBe('DIV')
9
-
10
- wrapper.destroy()
11
- })
12
-
13
- it('default should contain base class', async () => {
14
- const wrapper = mount(BFormInvalidFeedback)
15
-
16
- expect(wrapper.classes()).toContain('invalid-feedback')
17
-
18
- wrapper.destroy()
19
- })
20
-
21
- it('default should not have class !gl-block', async () => {
22
- const wrapper = mount(BFormInvalidFeedback)
23
-
24
- expect(wrapper.classes()).not.toContain('!gl-block')
25
-
26
- wrapper.destroy()
27
- })
28
-
29
- it('default should not have class invalid-tooltip', async () => {
30
- const wrapper = mount(BFormInvalidFeedback)
31
-
32
- expect(wrapper.classes()).not.toContain('invalid-tooltip')
33
-
34
- wrapper.destroy()
35
- })
36
-
37
- it('default should not have id', async () => {
38
- const wrapper = mount(BFormInvalidFeedback)
39
-
40
- expect(wrapper.attributes('id')).toBeUndefined()
41
-
42
- wrapper.destroy()
43
- })
44
-
45
- it('default should have user supplied id', async () => {
46
- const wrapper = mount(BFormInvalidFeedback, {
47
- context: {
48
- props: {
49
- id: 'foobar'
50
- }
51
- }
52
- })
53
-
54
- expect(wrapper.attributes('id')).toBe('foobar')
55
-
56
- wrapper.destroy()
57
- })
58
-
59
- it('should have tag small when tag=small', async () => {
60
- const wrapper = mount(BFormInvalidFeedback, {
61
- context: {
62
- props: {
63
- tag: 'small'
64
- }
65
- }
66
- })
67
-
68
- expect(wrapper.element.tagName).toBe('SMALL')
69
-
70
- wrapper.destroy()
71
- })
72
-
73
- it('should contain class !gl-block when force-show is set', async () => {
74
- const wrapper = mount(BFormInvalidFeedback, {
75
- context: {
76
- props: {
77
- forceShow: true
78
- }
79
- }
80
- })
81
-
82
- expect(wrapper.classes()).toContain('!gl-block')
83
-
84
- wrapper.destroy()
85
- })
86
-
87
- it('should contain class !gl-block when state is false', async () => {
88
- const wrapper = mount(BFormInvalidFeedback, {
89
- context: {
90
- props: {
91
- state: false
92
- }
93
- }
94
- })
95
-
96
- expect(wrapper.classes()).toContain('!gl-block')
97
-
98
- wrapper.destroy()
99
- })
100
-
101
- it('should not contain class !gl-block when state is true', async () => {
102
- const wrapper = mount(BFormInvalidFeedback, {
103
- context: {
104
- props: {
105
- state: true
106
- }
107
- }
108
- })
109
-
110
- expect(wrapper.classes()).not.toContain('!gl-block')
111
-
112
- wrapper.destroy()
113
- })
114
-
115
- it('should contain class !gl-block when force-show is true and state is true', async () => {
116
- const wrapper = mount(BFormInvalidFeedback, {
117
- context: {
118
- props: {
119
- forceShow: true,
120
- state: true
121
- }
122
- }
123
- })
124
-
125
- expect(wrapper.classes()).toContain('!gl-block')
126
-
127
- wrapper.destroy()
128
- })
129
-
130
- it('should contain class invalid-tooltip when tooltip is set', async () => {
131
- const wrapper = mount(BFormInvalidFeedback, {
132
- context: {
133
- props: {
134
- tooltip: true
135
- }
136
- }
137
- })
138
-
139
- expect(wrapper.classes()).toContain('invalid-tooltip')
140
-
141
- wrapper.destroy()
142
- })
143
-
144
- it('should not contain class invalid-feedback when tooltip is set', async () => {
145
- const wrapper = mount(BFormInvalidFeedback, {
146
- context: {
147
- props: {
148
- tooltip: true
149
- }
150
- }
151
- })
152
-
153
- expect(wrapper.classes()).not.toContain('invalid-feedback')
154
-
155
- wrapper.destroy()
156
- })
157
-
158
- it('should have children in the default slot when supplied', async () => {
159
- const wrapper = mount(BFormInvalidFeedback, {
160
- context: {
161
- children: ['foo', '<span>bar</span>']
162
- }
163
- })
164
-
165
- expect(wrapper.text()).toContain('foo')
166
- expect(wrapper.text()).toContain('bar')
167
-
168
- wrapper.destroy()
169
- })
170
- })
@@ -1,93 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { BFormText } from './form-text'
3
-
4
- describe('form > form-text', () => {
5
- it('has expected default structure', async () => {
6
- const wrapper = mount(BFormText)
7
-
8
- expect(wrapper.element.tagName).toBe('SMALL')
9
- expect(wrapper.classes()).toContain('form-text')
10
- expect(wrapper.classes()).toContain('text-muted')
11
- expect(wrapper.classes().length).toBe(2)
12
- expect(wrapper.text()).toEqual('')
13
-
14
- wrapper.destroy()
15
- })
16
-
17
- it('renders default slot content', async () => {
18
- const wrapper = mount(BFormText, {
19
- slots: {
20
- default: 'foobar'
21
- }
22
- })
23
-
24
- expect(wrapper.element.tagName).toBe('SMALL')
25
- expect(wrapper.classes()).toContain('form-text')
26
- expect(wrapper.classes()).toContain('text-muted')
27
- expect(wrapper.classes().length).toBe(2)
28
- expect(wrapper.text()).toEqual('foobar')
29
-
30
- wrapper.destroy()
31
- })
32
-
33
- it('renders custom root element when prop tag set', async () => {
34
- const wrapper = mount(BFormText, {
35
- propsData: {
36
- tag: 'p'
37
- }
38
- })
39
-
40
- expect(wrapper.element.tagName).toBe('P')
41
- expect(wrapper.classes()).toContain('form-text')
42
- expect(wrapper.classes()).toContain('text-muted')
43
- expect(wrapper.classes().length).toBe(2)
44
- expect(wrapper.text()).toEqual('')
45
-
46
- wrapper.destroy()
47
- })
48
-
49
- it('has user supplied ID', async () => {
50
- const wrapper = mount(BFormText, {
51
- propsData: {
52
- id: 'foo'
53
- }
54
- })
55
-
56
- expect(wrapper.element.tagName).toBe('SMALL')
57
- expect(wrapper.attributes('id')).toBeDefined()
58
- expect(wrapper.attributes('id')).toEqual('foo')
59
-
60
- wrapper.destroy()
61
- })
62
-
63
- it('does not have class form-text when prop inline set', async () => {
64
- const wrapper = mount(BFormText, {
65
- propsData: {
66
- inline: true
67
- }
68
- })
69
-
70
- expect(wrapper.element.tagName).toBe('SMALL')
71
- expect(wrapper.classes()).not.toContain('form-text')
72
- expect(wrapper.classes()).toContain('text-muted')
73
- expect(wrapper.classes().length).toBe(1)
74
-
75
- wrapper.destroy()
76
- })
77
-
78
- it('has variant class applied when prop text-variant is set', async () => {
79
- const wrapper = mount(BFormText, {
80
- propsData: {
81
- textVariant: 'info'
82
- }
83
- })
84
-
85
- expect(wrapper.element.tagName).toBe('SMALL')
86
- expect(wrapper.classes()).toContain('form-text')
87
- expect(wrapper.classes()).toContain('text-info')
88
- expect(wrapper.classes().length).toBe(2)
89
- expect(wrapper.text()).toEqual('')
90
-
91
- wrapper.destroy()
92
- })
93
- })