@ulu/frontend-vue 0.1.2-beta.8 → 0.1.3-beta.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 (48) hide show
  1. package/dist/frontend-vue.js +1604 -1596
  2. package/dist/types/components/collapsible/UluModal.vue.d.ts.map +1 -1
  3. package/dist/types/components/forms/UluForm.vue.d.ts +24 -0
  4. package/dist/types/components/forms/UluForm.vue.d.ts.map +1 -0
  5. package/dist/types/components/forms/UluFormActions.vue.d.ts +10 -0
  6. package/dist/types/components/forms/UluFormActions.vue.d.ts.map +1 -0
  7. package/dist/types/components/forms/UluFormCheckbox.vue.d.ts +22 -0
  8. package/dist/types/components/forms/UluFormCheckbox.vue.d.ts.map +1 -0
  9. package/dist/types/components/forms/UluFormFieldset.vue.d.ts +16 -0
  10. package/dist/types/components/forms/UluFormFieldset.vue.d.ts.map +1 -0
  11. package/dist/types/components/forms/UluFormFile.vue.d.ts +2 -0
  12. package/dist/types/components/forms/UluFormFile.vue.d.ts.map +1 -1
  13. package/dist/types/components/forms/UluFormItem.vue.d.ts +28 -0
  14. package/dist/types/components/forms/UluFormItem.vue.d.ts.map +1 -0
  15. package/dist/types/components/forms/UluFormItemsInline.vue.d.ts +10 -0
  16. package/dist/types/components/forms/UluFormItemsInline.vue.d.ts.map +1 -0
  17. package/dist/types/components/forms/UluFormRadio.vue.d.ts +26 -0
  18. package/dist/types/components/forms/UluFormRadio.vue.d.ts.map +1 -0
  19. package/dist/types/components/forms/UluFormRequiredChar.vue.d.ts +3 -0
  20. package/dist/types/components/forms/UluFormRequiredChar.vue.d.ts.map +1 -0
  21. package/dist/types/components/forms/UluFormSelect.vue.d.ts +3 -1
  22. package/dist/types/components/forms/UluFormSelect.vue.d.ts.map +1 -1
  23. package/dist/types/components/forms/UluFormText.vue.d.ts +3 -1
  24. package/dist/types/components/forms/UluFormText.vue.d.ts.map +1 -1
  25. package/dist/types/components/forms/UluFormTextarea.vue.d.ts +24 -0
  26. package/dist/types/components/forms/UluFormTextarea.vue.d.ts.map +1 -0
  27. package/dist/types/components/navigation/UluPager.vue.d.ts.map +1 -1
  28. package/dist/types/components/systems/facets/UluFacetsSearch.vue.d.ts.map +1 -1
  29. package/dist/types/components/systems/facets/UluFacetsSort.vue.d.ts.map +1 -1
  30. package/lib/components/collapsible/UluModal.vue +2 -4
  31. package/lib/components/forms/UluForm.vue +42 -0
  32. package/lib/components/forms/UluFormActions.vue +9 -0
  33. package/lib/components/forms/UluFormCheckbox.vue +38 -0
  34. package/lib/components/forms/UluFormFieldset.vue +15 -0
  35. package/lib/components/forms/UluFormFile.vue +24 -23
  36. package/lib/components/forms/UluFormItem.vue +49 -0
  37. package/lib/components/forms/UluFormItemsInline.vue +9 -0
  38. package/lib/components/forms/UluFormMessage.vue +3 -3
  39. package/lib/components/forms/UluFormRadio.vue +48 -0
  40. package/lib/components/forms/UluFormRequiredChar.vue +7 -0
  41. package/lib/components/forms/UluFormSelect.vue +24 -23
  42. package/lib/components/forms/UluFormText.vue +20 -19
  43. package/lib/components/forms/UluFormTextarea.vue +41 -0
  44. package/lib/components/navigation/UluPager.vue +2 -3
  45. package/lib/components/systems/facets/UluFacetsSearch.vue +2 -2
  46. package/lib/components/systems/facets/UluFacetsSort.vue +2 -4
  47. package/lib/components/systems/facets/useFacets.js +4 -4
  48. package/package.json +1 -1
@@ -1,28 +1,25 @@
1
1
  <template>
2
- <div class="site-form__item site-form__item--select">
3
- <label :class="{ 'hidden-visually' : labelHidden }" :for="id">
4
- <slot>
5
- {{ label }}
6
- </slot>
7
- </label>
8
- <select
9
- :id="id"
10
- :value="modelValue"
11
- @input="$emit('update:modelValue', $event.target.value)"
12
- >
13
- <option disabled value="">Please select one</option>
14
- <option v-for="(option, index) in options" :key="index" :value="option.value">
15
- {{ option.text }}
16
- </option>
17
- </select>
18
- </div>
2
+ <label :class="{ 'hidden-visually' : labelHidden }" :for="id">
3
+ <slot name="label">
4
+ {{ label }}<UluFormRequiredChar v-if="required" />
5
+ </slot>
6
+ </label>
7
+ <select
8
+ :id="id"
9
+ :value="modelValue"
10
+ @input="$emit('update:modelValue', $event.target.value)"
11
+ :required="required"
12
+ >
13
+ <option disabled value="">Please select one</option>
14
+ <option v-for="(option, index) in options" :key="index" :value="option.value">
15
+ {{ option.text }}
16
+ </option>
17
+ </select>
19
18
  </template>
20
19
 
21
20
  <script setup>
22
- const getNextId = (() => {
23
- let count = 0;
24
- return () => `select-id-${++count}`;
25
- })();
21
+ import { newId } from "../../utils/dom.js";
22
+ import UluFormRequiredChar from "./UluFormRequiredChar.vue";
26
23
 
27
24
  defineProps({
28
25
  /**
@@ -40,10 +37,14 @@
40
37
  /**
41
38
  * If true, the label will be visually hidden.
42
39
  */
43
- labelHidden: Boolean
40
+ labelHidden: Boolean,
41
+ /**
42
+ * If true, the field will be required.
43
+ */
44
+ required: Boolean
44
45
  });
45
46
 
46
47
  defineEmits(['update:modelValue']);
47
48
 
48
- const id = getNextId();
49
+ const id = newId();
49
50
  </script>
@@ -1,24 +1,21 @@
1
1
  <template>
2
- <div class="site-form__item site-form__item--text">
3
- <label :class="{ 'hidden-visually' : labelHidden }" :for="id">
4
- <slot>
5
- {{ label }}
6
- </slot>
7
- </label>
8
- <input
9
- type="text"
10
- :value="modelValue"
11
- @input="$emit('update:modelValue', $event.target.value)"
12
- :id="id"
13
- >
14
- </div>
2
+ <label :class="{ 'hidden-visually' : labelHidden }" :for="id">
3
+ <slot name="label">
4
+ {{ label }}<UluFormRequiredChar v-if="required" />
5
+ </slot>
6
+ </label>
7
+ <input
8
+ type="text"
9
+ :value="modelValue"
10
+ @input="$emit('update:modelValue', $event.target.value)"
11
+ :id="id"
12
+ :required="required"
13
+ >
15
14
  </template>
16
15
 
17
16
  <script setup>
18
- const getNextId = (() => {
19
- let count = 0;
20
- return () => `text-input-id-${++count}`;
21
- })();
17
+ import { newId } from "../../utils/dom.js";
18
+ import UluFormRequiredChar from "./UluFormRequiredChar.vue";
22
19
 
23
20
  defineProps({
24
21
  /**
@@ -32,10 +29,14 @@
32
29
  /**
33
30
  * If true, the label will be visually hidden.
34
31
  */
35
- labelHidden: Boolean
32
+ labelHidden: Boolean,
33
+ /**
34
+ * If true, the field will be required.
35
+ */
36
+ required: Boolean
36
37
  });
37
38
 
38
39
  defineEmits(['update:modelValue']);
39
40
 
40
- const id = getNextId();
41
+ const id = newId();
41
42
  </script>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <label :class="{ 'hidden-visually' : labelHidden }" :for="id">
3
+ <slot name="label">
4
+ {{ label }}<UluFormRequiredChar v-if="required" />
5
+ </slot>
6
+ </label>
7
+ <textarea
8
+ :value="modelValue"
9
+ @input="$emit('update:modelValue', $event.target.value)"
10
+ :id="id"
11
+ :required="required"
12
+ ></textarea>
13
+ </template>
14
+
15
+ <script setup>
16
+ import { newId } from "../../utils/dom.js";
17
+ import UluFormRequiredChar from "./UluFormRequiredChar.vue";
18
+
19
+ defineProps({
20
+ /**
21
+ * The label for the textarea.
22
+ */
23
+ label: String,
24
+ /**
25
+ * The value of the textarea (for v-model).
26
+ */
27
+ modelValue: String,
28
+ /**
29
+ * If true, the label will be visually hidden.
30
+ */
31
+ labelHidden: Boolean,
32
+ /**
33
+ * If true, the field will be required.
34
+ */
35
+ required: Boolean
36
+ });
37
+
38
+ defineEmits(['update:modelValue']);
39
+
40
+ const id = newId();
41
+ </script>
@@ -55,8 +55,7 @@
55
55
 
56
56
  <script setup>
57
57
  import UluIcon from '../elements/UluIcon.vue';
58
-
59
- let pagerCounter = 0;
58
+ import { newId } from '../../utils/dom.js';
60
59
 
61
60
  const props = defineProps({
62
61
  /**
@@ -89,7 +88,7 @@ const props = defineProps({
89
88
  }
90
89
  });
91
90
 
92
- const headingId = `ulu-pager-${ pagerCounter++ }`;
91
+ const headingId = newId('ulu-pager');
93
92
 
94
93
  /**
95
94
  * Generates the title for a page link.
@@ -15,6 +15,7 @@
15
15
 
16
16
  <script setup>
17
17
  import { computed } from 'vue';
18
+ import { newId } from '../../../utils/dom.js';
18
19
 
19
20
  const props = defineProps({
20
21
  classes: {
@@ -30,8 +31,7 @@
30
31
 
31
32
  const emit = defineEmits(['update:modelValue']);
32
33
 
33
- let uid = 0;
34
- const id = `facet-view-keyword-${++uid}`;
34
+ const id = newId('facet-view-keyword');
35
35
 
36
36
  const localValue = computed({
37
37
  get() {
@@ -20,9 +20,7 @@
20
20
  </template>
21
21
 
22
22
  <script setup>
23
- import { ref } from 'vue';
24
-
25
- let idCounter = 0;
23
+ import { newId } from '../../../utils/dom.js';
26
24
 
27
25
  defineProps({
28
26
  classes: {
@@ -41,5 +39,5 @@
41
39
 
42
40
  const emit = defineEmits(['update:modelValue']);
43
41
 
44
- const sortId = ref(`ulu-facet-sort-${++idCounter}`);
42
+ const sortId = newId('ulu-facet-sort');
45
43
  </script>
@@ -1,4 +1,4 @@
1
- import { ref, computed, watch, nextTick } from 'vue';
1
+ import { ref, computed, watch, nextTick, watchPostEffect } from 'vue';
2
2
  import Fuse from 'fuse.js';
3
3
 
4
4
  /**
@@ -455,12 +455,12 @@ export function useFacets(allItems, options = {}) {
455
455
  };
456
456
 
457
457
  // Initial sync from URL
458
- const stopInitWatcher = watch(facets, (newFacets) => {
459
- if (newFacets && newFacets.length > 0) {
458
+ const stopInitWatcher = watchPostEffect(() => {
459
+ if (facets.value && facets.value.length > 0) {
460
460
  updateStateFromUrl();
461
461
  stopInitWatcher();
462
462
  }
463
- }, { deep: true, immediate: true });
463
+ });
464
464
 
465
465
  // Sync state changes TO the URL
466
466
  watch([selectedSort, searchValue, selectedFacets], updateUrlFromState, { deep: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ulu/frontend-vue",
3
- "version": "0.1.2-beta.8",
3
+ "version": "0.1.3-beta.1",
4
4
  "description": "A modular and tree-shakeable Vue 3 component library for the Ulu frontend",
5
5
  "type": "module",
6
6
  "files": [