@ulu/frontend-vue 0.1.1-beta.2 → 0.1.1-beta.21

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 (233) hide show
  1. package/dist/{breakpoints-DfGETUy5.js → breakpoints-BK5cY325.js} +1 -1
  2. package/dist/frontend-vue.css +1 -1
  3. package/dist/frontend-vue.js +78 -74
  4. package/dist/{index-94HkwBnP.js → index-CzaotMwA.js} +2457 -2061
  5. package/lib/components/collapsible/UluAccordion.vue +9 -9
  6. package/lib/components/collapsible/UluCollapsible.vue +9 -24
  7. package/lib/components/elements/UluCard.vue +172 -157
  8. package/lib/components/elements/UluDefinitionList.vue +55 -3
  9. package/lib/components/forms/UluSelectableMenu.vue +8 -1
  10. package/lib/components/index.js +3 -1
  11. package/lib/components/navigation/UluMenu.vue +5 -3
  12. package/lib/components/navigation/UluMenuStack.vue +47 -30
  13. package/lib/components/systems/facets/UluFacetsActiveFilters.vue +104 -0
  14. package/lib/components/systems/facets/UluFacetsFilterAccordions.vue +94 -0
  15. package/lib/components/systems/facets/UluFacetsFilterLists.vue +15 -11
  16. package/lib/components/systems/facets/UluFacetsList.vue +3 -1
  17. package/lib/components/systems/facets/UluFacetsSearch.vue +1 -1
  18. package/lib/components/systems/facets/UluFacetsSidebarLayout.vue +32 -12
  19. package/lib/components/systems/facets/useFacets.js +166 -40
  20. package/lib/components/systems/index.js +2 -0
  21. package/lib/components/systems/slider/UluSlideShow.vue +2 -2
  22. package/lib/components/utils/{UluCondText.vue → UluConditionalText.vue} +1 -1
  23. package/lib/components/utils/UluConditionalWrapper.vue +29 -0
  24. package/lib/components/utils/UluRouteAnnouncer.vue +1 -1
  25. package/lib/components/utils/UluSanityRichText.vue +41 -0
  26. package/lib/components/visualizations/UluProgressCircle.vue +1 -1
  27. package/lib/plugins/core/index.js +3 -2
  28. package/lib/plugins/popovers/UluPopover.vue +1 -1
  29. package/package.json +13 -8
  30. package/types/components/collapsible/UluAccordion.vue.d.ts +41 -0
  31. package/types/components/collapsible/UluAccordion.vue.d.ts.map +1 -0
  32. package/types/components/collapsible/UluAccordionGroup.vue.d.ts +19 -0
  33. package/types/components/collapsible/UluAccordionGroup.vue.d.ts.map +1 -0
  34. package/types/components/collapsible/UluCollapsible.vue.d.ts +39 -0
  35. package/types/components/collapsible/UluCollapsible.vue.d.ts.map +1 -0
  36. package/types/components/collapsible/UluDropdown.vue.d.ts +22 -0
  37. package/types/components/collapsible/UluDropdown.vue.d.ts.map +1 -0
  38. package/types/components/collapsible/UluModal.vue.d.ts +253 -0
  39. package/types/components/collapsible/UluModal.vue.d.ts.map +1 -0
  40. package/types/components/collapsible/UluOverflowPopover.vue.d.ts +18 -0
  41. package/types/components/collapsible/UluOverflowPopover.vue.d.ts.map +1 -0
  42. package/types/components/collapsible/UluTab.vue.d.ts +10 -0
  43. package/types/components/collapsible/UluTab.vue.d.ts.map +1 -0
  44. package/types/components/collapsible/UluTabGroup.vue.d.ts +18 -0
  45. package/types/components/collapsible/UluTabGroup.vue.d.ts.map +1 -0
  46. package/types/components/collapsible/UluTabList.vue.d.ts +10 -0
  47. package/types/components/collapsible/UluTabList.vue.d.ts.map +1 -0
  48. package/types/components/collapsible/UluTabPanel.vue.d.ts +10 -0
  49. package/types/components/collapsible/UluTabPanel.vue.d.ts.map +1 -0
  50. package/types/components/collapsible/UluTabPanels.vue.d.ts +10 -0
  51. package/types/components/collapsible/UluTabPanels.vue.d.ts.map +1 -0
  52. package/types/components/elements/UluAlert.vue.d.ts +147 -0
  53. package/types/components/elements/UluAlert.vue.d.ts.map +1 -0
  54. package/types/components/elements/UluBadge.vue.d.ts +30 -0
  55. package/types/components/elements/UluBadge.vue.d.ts.map +1 -0
  56. package/types/components/elements/UluBadgeStack.vue.d.ts +9 -0
  57. package/types/components/elements/UluBadgeStack.vue.d.ts.map +1 -0
  58. package/types/components/elements/UluButton.vue.d.ts +186 -0
  59. package/types/components/elements/UluButton.vue.d.ts.map +1 -0
  60. package/types/components/elements/UluButtonVerbose.vue.d.ts +126 -0
  61. package/types/components/elements/UluButtonVerbose.vue.d.ts.map +1 -0
  62. package/types/components/elements/UluCallout.vue.d.ts +27 -0
  63. package/types/components/elements/UluCallout.vue.d.ts.map +1 -0
  64. package/types/components/elements/UluCard.vue.d.ts +66 -0
  65. package/types/components/elements/UluCard.vue.d.ts.map +1 -0
  66. package/types/components/elements/UluDefinitionList.vue.d.ts +42 -0
  67. package/types/components/elements/UluDefinitionList.vue.d.ts.map +1 -0
  68. package/types/components/elements/UluExternalLink.vue.d.ts +25 -0
  69. package/types/components/elements/UluExternalLink.vue.d.ts.map +1 -0
  70. package/types/components/elements/UluIcon.vue.d.ts +11 -0
  71. package/types/components/elements/UluIcon.vue.d.ts.map +1 -0
  72. package/types/components/elements/UluList.vue.d.ts +37 -0
  73. package/types/components/elements/UluList.vue.d.ts.map +1 -0
  74. package/types/components/elements/UluMain.vue.d.ts +13 -0
  75. package/types/components/elements/UluMain.vue.d.ts.map +1 -0
  76. package/types/components/elements/UluSpokeSpinner.vue.d.ts +9 -0
  77. package/types/components/elements/UluSpokeSpinner.vue.d.ts.map +1 -0
  78. package/types/components/elements/UluTag.vue.d.ts +26 -0
  79. package/types/components/elements/UluTag.vue.d.ts.map +1 -0
  80. package/types/components/forms/UluFileDisplay.vue.d.ts +23 -0
  81. package/types/components/forms/UluFileDisplay.vue.d.ts.map +1 -0
  82. package/types/components/forms/UluFormFile.vue.d.ts +26 -0
  83. package/types/components/forms/UluFormFile.vue.d.ts.map +1 -0
  84. package/types/components/forms/UluFormMessage.vue.d.ts +18 -0
  85. package/types/components/forms/UluFormMessage.vue.d.ts.map +1 -0
  86. package/types/components/forms/UluFormSelect.vue.d.ts +24 -0
  87. package/types/components/forms/UluFormSelect.vue.d.ts.map +1 -0
  88. package/types/components/forms/UluFormText.vue.d.ts +22 -0
  89. package/types/components/forms/UluFormText.vue.d.ts.map +1 -0
  90. package/types/components/forms/UluSearchForm.vue.d.ts +9 -0
  91. package/types/components/forms/UluSearchForm.vue.d.ts.map +1 -0
  92. package/types/components/forms/UluSelectableMenu.vue.d.ts +30 -0
  93. package/types/components/forms/UluSelectableMenu.vue.d.ts.map +1 -0
  94. package/types/components/index.d.ts +50 -0
  95. package/types/components/layout/UluAdaptiveLayout.vue.d.ts +12 -0
  96. package/types/components/layout/UluAdaptiveLayout.vue.d.ts.map +1 -0
  97. package/types/components/layout/UluDataGrid.vue.d.ts +3 -0
  98. package/types/components/layout/UluDataGrid.vue.d.ts.map +1 -0
  99. package/types/components/layout/UluTitleRail.vue.d.ts +91 -0
  100. package/types/components/layout/UluTitleRail.vue.d.ts.map +1 -0
  101. package/types/components/layout/UluWhenBreakpoint.vue.d.ts +20 -0
  102. package/types/components/layout/UluWhenBreakpoint.vue.d.ts.map +1 -0
  103. package/types/components/navigation/UluBreadcrumb.vue.d.ts +71 -0
  104. package/types/components/navigation/UluBreadcrumb.vue.d.ts.map +1 -0
  105. package/types/components/navigation/UluMenu.vue.d.ts +142 -0
  106. package/types/components/navigation/UluMenu.vue.d.ts.map +1 -0
  107. package/types/components/navigation/UluMenuStack.vue.d.ts +19 -0
  108. package/types/components/navigation/UluMenuStack.vue.d.ts.map +1 -0
  109. package/types/components/navigation/UluNavStrip.vue.d.ts +138 -0
  110. package/types/components/navigation/UluNavStrip.vue.d.ts.map +1 -0
  111. package/types/components/navigation/UluPager.vue.d.ts +15 -0
  112. package/types/components/navigation/UluPager.vue.d.ts.map +1 -0
  113. package/types/components/navigation/UluSkipLink.vue.d.ts +3 -0
  114. package/types/components/navigation/UluSkipLink.vue.d.ts.map +1 -0
  115. package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts +3 -0
  116. package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts.map +1 -0
  117. package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts +24 -0
  118. package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts.map +1 -0
  119. package/types/components/systems/facets/UluFacetsFilterAccordions.vue.d.ts +29 -0
  120. package/types/components/systems/facets/UluFacetsFilterAccordions.vue.d.ts.map +1 -0
  121. package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts +27 -0
  122. package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts.map +1 -0
  123. package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts +25 -0
  124. package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts.map +1 -0
  125. package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts +11 -0
  126. package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts.map +1 -0
  127. package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts +12 -0
  128. package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts.map +1 -0
  129. package/types/components/systems/facets/UluFacetsList.vue.d.ts +21 -0
  130. package/types/components/systems/facets/UluFacetsList.vue.d.ts.map +1 -0
  131. package/types/components/systems/facets/UluFacetsResults.vue.d.ts +27 -0
  132. package/types/components/systems/facets/UluFacetsResults.vue.d.ts.map +1 -0
  133. package/types/components/systems/facets/UluFacetsSearch.vue.d.ts +15 -0
  134. package/types/components/systems/facets/UluFacetsSearch.vue.d.ts.map +1 -0
  135. package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts +22 -0
  136. package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts.map +1 -0
  137. package/types/components/systems/facets/UluFacetsSort.vue.d.ts +22 -0
  138. package/types/components/systems/facets/UluFacetsSort.vue.d.ts.map +1 -0
  139. package/types/components/systems/facets/useFacets.d.ts +30 -12
  140. package/types/components/systems/facets/useFacets.d.ts.map +1 -1
  141. package/types/components/systems/index.d.ts +25 -0
  142. package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts +60 -0
  143. package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts.map +1 -0
  144. package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts +15 -0
  145. package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts.map +1 -0
  146. package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts +32 -0
  147. package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts.map +1 -0
  148. package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts +50 -0
  149. package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts.map +1 -0
  150. package/types/components/systems/scroll-anchors/symbols.d.ts +3 -3
  151. package/types/components/systems/scroll-anchors/symbols.d.ts.map +1 -1
  152. package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts +16 -0
  153. package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts.map +1 -0
  154. package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts +9 -0
  155. package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts.map +1 -0
  156. package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts +3 -0
  157. package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts.map +1 -0
  158. package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts +13 -0
  159. package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts.map +1 -0
  160. package/types/components/systems/slider/UluImageSlideShow.vue.d.ts +130 -0
  161. package/types/components/systems/slider/UluImageSlideShow.vue.d.ts.map +1 -0
  162. package/types/components/systems/slider/UluSlideShow.vue.d.ts +205 -0
  163. package/types/components/systems/slider/UluSlideShow.vue.d.ts.map +1 -0
  164. package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts +17 -0
  165. package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts.map +1 -0
  166. package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts +455 -0
  167. package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts.map +1 -0
  168. package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts +34 -0
  169. package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts.map +1 -0
  170. package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts +151 -0
  171. package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts.map +1 -0
  172. package/types/components/utils/UluCondText.vue.d.ts +29 -0
  173. package/types/components/utils/UluCondText.vue.d.ts.map +1 -0
  174. package/types/components/utils/UluConditionalText.vue.d.ts +29 -0
  175. package/types/components/utils/UluConditionalText.vue.d.ts.map +1 -0
  176. package/types/components/utils/UluConditionalWrapper.vue.d.ts +20 -0
  177. package/types/components/utils/UluConditionalWrapper.vue.d.ts.map +1 -0
  178. package/types/components/utils/UluEmpty.vue.d.ts +3 -0
  179. package/types/components/utils/UluEmpty.vue.d.ts.map +1 -0
  180. package/types/components/utils/UluEmptyView.vue.d.ts +3 -0
  181. package/types/components/utils/UluEmptyView.vue.d.ts.map +1 -0
  182. package/types/components/utils/UluPlaceholderImage.vue.d.ts +61 -0
  183. package/types/components/utils/UluPlaceholderImage.vue.d.ts.map +1 -0
  184. package/types/components/utils/UluPlaceholderText.vue.d.ts +24 -0
  185. package/types/components/utils/UluPlaceholderText.vue.d.ts.map +1 -0
  186. package/types/components/utils/UluRouteAnnouncer.vue.d.ts +63 -0
  187. package/types/components/utils/UluRouteAnnouncer.vue.d.ts.map +1 -0
  188. package/types/components/utils/UluSanityRichText.vue.d.ts +15 -0
  189. package/types/components/utils/UluSanityRichText.vue.d.ts.map +1 -0
  190. package/types/components/visualizations/UluAnimateNumber.vue.d.ts +16 -0
  191. package/types/components/visualizations/UluAnimateNumber.vue.d.ts.map +1 -0
  192. package/types/components/visualizations/UluProgressBar.vue.d.ts +66 -0
  193. package/types/components/visualizations/UluProgressBar.vue.d.ts.map +1 -0
  194. package/types/components/visualizations/UluProgressCircle.vue.d.ts +48 -0
  195. package/types/components/visualizations/UluProgressCircle.vue.d.ts.map +1 -0
  196. package/types/composables/useBreakpointManager.d.ts +1 -1
  197. package/types/composables/useBreakpointManager.d.ts.map +1 -1
  198. package/types/composables/useDocumentTitle.d.ts +4 -4
  199. package/types/composables/useDocumentTitle.d.ts.map +1 -1
  200. package/types/composables/useIcon.d.ts +1 -1
  201. package/types/composables/useIcon.d.ts.map +1 -1
  202. package/types/composables/useModifiers.d.ts +1 -1
  203. package/types/composables/useModifiers.d.ts.map +1 -1
  204. package/types/composables/useWindowResize.d.ts +1 -1
  205. package/types/composables/useWindowResize.d.ts.map +1 -1
  206. package/types/plugins/core/index.d.ts.map +1 -1
  207. package/types/plugins/modals/UluModalsDisplay.vue.d.ts +14 -0
  208. package/types/plugins/modals/UluModalsDisplay.vue.d.ts.map +1 -0
  209. package/types/plugins/modals/api.d.ts +7 -4
  210. package/types/plugins/modals/api.d.ts.map +1 -1
  211. package/types/plugins/popovers/UluPopover.vue.d.ts +53 -0
  212. package/types/plugins/popovers/UluPopover.vue.d.ts.map +1 -0
  213. package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts +3 -0
  214. package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts.map +1 -0
  215. package/types/plugins/popovers/UluTooltipPopover.vue.d.ts +3 -0
  216. package/types/plugins/popovers/UluTooltipPopover.vue.d.ts.map +1 -0
  217. package/types/plugins/popovers/defaults.d.ts +2 -2
  218. package/types/plugins/popovers/defaults.d.ts.map +1 -1
  219. package/types/plugins/popovers/manager.d.ts +50 -6
  220. package/types/plugins/popovers/manager.d.ts.map +1 -1
  221. package/types/plugins/popovers/useFollow.d.ts +4 -4
  222. package/types/plugins/popovers/useFollow.d.ts.map +1 -1
  223. package/types/plugins/toast/UluToast.vue.d.ts +52 -0
  224. package/types/plugins/toast/UluToast.vue.d.ts.map +1 -0
  225. package/types/plugins/toast/UluToastDisplay.vue.d.ts +13 -0
  226. package/types/plugins/toast/UluToastDisplay.vue.d.ts.map +1 -0
  227. package/types/plugins/toast/defaults.d.ts +39 -2
  228. package/types/plugins/toast/store.d.ts +65 -2
  229. package/types/plugins/toast/store.d.ts.map +1 -1
  230. package/types/utils/dom.d.ts +1 -1
  231. package/types/utils/dom.d.ts.map +1 -1
  232. package/types/utils/router.d.ts +15 -15
  233. package/types/utils/router.d.ts.map +1 -1
@@ -1,10 +1,8 @@
1
1
  <template>
2
- <nav
2
+ <component
3
3
  class="menu-stack"
4
- :class="{
5
- 'menu-stack--hanging' : hanging,
6
- 'menu-stack--compact' : compact
7
- }"
4
+ :is="containerElement"
5
+ :class="resolvedModifiers"
8
6
  >
9
7
  <UluMenu
10
8
  :items="items"
@@ -19,33 +17,52 @@
19
17
  }"
20
18
  :noChildren="noChildren"
21
19
  />
22
- </nav>
20
+ </component>
23
21
  </template>
24
22
 
25
- <script>
23
+ <script setup>
24
+ import { computed } from "vue";
26
25
  import UluMenu from "./UluMenu.vue";
27
- export default {
28
- name: "UluMenuStack",
29
- components: {
30
- UluMenu
26
+ import { useModifiers } from "../../composables/useModifiers.js";
27
+
28
+ const props = defineProps({
29
+ /**
30
+ * Menu item (see UluMenu)
31
+ */
32
+ items: Array,
33
+ /**
34
+ * The HTML element to use as the container (e.g., 'nav', 'div', 'aside').
35
+ */
36
+ containerElement: {
37
+ type: String,
38
+ default: "nav"
31
39
  },
32
- props: {
33
- /**
34
- * Menu item (see UluMenu)
35
- */
36
- items: Array,
37
- /**
38
- * Hanging style menu
39
- */
40
- hanging: Boolean,
41
- /**
42
- * Compact style menu
43
- */
44
- compact: Boolean,
45
- /**
46
- * Don't include children of menu
47
- */
48
- noChildren: Boolean
49
- }
50
- };
40
+ /**
41
+ * Hanging style menu
42
+ */
43
+ hanging: Boolean,
44
+ /**
45
+ * Compact style menu
46
+ */
47
+ compact: Boolean,
48
+ /**
49
+ * Don't include children of menu
50
+ */
51
+ noChildren: Boolean,
52
+ /**
53
+ * Class modifiers (ie. 'transparent', 'secondary', etc)
54
+ */
55
+ modifiers: [String, Array]
56
+ });
57
+
58
+ const internalModifiers = computed(() => ({
59
+ "hanging" : props.hanging,
60
+ "compact" : props.compact,
61
+ }));
62
+
63
+ const { resolvedModifiers } = useModifiers({
64
+ props,
65
+ internal: internalModifiers,
66
+ baseClass: "menu-stack"
67
+ });
51
68
  </script>
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <div v-if="activeFilters.length" class="facets-active" :class="classes.container">
3
+ <component :is="labelElement" class="facets-active__label" :class="classes.label">
4
+ <slot name="label">
5
+ Active Filters:
6
+ </slot>
7
+ </component>
8
+ <ul class="facets-active__list" :class="classes.list">
9
+ <li
10
+ class="facets-active__item"
11
+ v-for="filter in activeFilters"
12
+ :key="`${ filter.groupUid }-${ filter.uid }`"
13
+ :class="classes.item"
14
+ >
15
+ <button
16
+ :class="classes.filterButton"
17
+ icon="type:remove"
18
+ @click="removeFilter(filter)"
19
+ >
20
+ <span :class="classes.filterButtonText">
21
+ <span class="hidden-visually">Remove Active Filter:</span>
22
+ {{ filter.label }}
23
+ </span>
24
+ <span :class="classes.filterButtonIcon">
25
+ <UluIcon :icon="removeIcon" />
26
+ </span>
27
+ </button>
28
+ </li>
29
+ </ul>
30
+ <button @click="clearFilters" :class="classes.clearButton">Clear All</button>
31
+ </div>
32
+ </template>
33
+
34
+ <script setup>
35
+ import { computed } from 'vue';
36
+ import UluIcon from '../../elements/UluIcon.vue';
37
+
38
+ const props = defineProps({
39
+ /**
40
+ * The selectedFacets array from the useFacets composable.
41
+ */
42
+ selectedFacets: {
43
+ type: Array,
44
+ default: () => []
45
+ },
46
+ /**
47
+ * Element to use for label
48
+ */
49
+ labelElement: {
50
+ type: String,
51
+ default: "strong"
52
+ },
53
+ /**
54
+ * Icon to use for remove (in button)
55
+ */
56
+ removeIcon: {
57
+ type: String,
58
+ default: "type:close"
59
+ },
60
+ /**
61
+ * Classes for different element { label, list, item, filterButton, filterButtonText, filterButtonIcon, clearButton }
62
+ */
63
+ classes: {
64
+ type: Object,
65
+ default: () => ({
66
+ container: "layout-flex flex-wrap",
67
+ label: "hidden-visually",
68
+ list: "layout-flex flex-wrap",
69
+ item: "margin-right-small-x",
70
+ filterButton: "button button--small button--outline no-min-width",
71
+ filterButtonText: null,
72
+ filterButtonIcon: "button__icon",
73
+ clearButton: "button button--small"
74
+ })
75
+ }
76
+ });
77
+
78
+ const emit = defineEmits(['facet-change', 'clear-filters']);
79
+
80
+ const activeFilters = computed(() => {
81
+ const filters = [];
82
+ props.selectedFacets.forEach(group => {
83
+ group.children.forEach(child => {
84
+ filters.push({
85
+ ...child,
86
+ groupUid: group.uid
87
+ });
88
+ });
89
+ });
90
+ return filters;
91
+ });
92
+
93
+ function removeFilter(filter) {
94
+ emit('facet-change', {
95
+ groupUid: filter.groupUid,
96
+ facetUid: filter.uid,
97
+ selected: false
98
+ });
99
+ }
100
+
101
+ function clearFilters() {
102
+ emit('clear-filters');
103
+ }
104
+ </script>
@@ -0,0 +1,94 @@
1
+ <template>
2
+ <div class="facets-filters">
3
+ <UluAccordion
4
+ v-for="group in facets"
5
+ :key="group.uid"
6
+ :modifiers="accordionModifiers"
7
+ :startOpen="group.open"
8
+ >
9
+ <template #trigger="{ isOpen }">
10
+ <slot name="groupTrigger" :group="group" :isOpen="isOpen">
11
+ {{ group.name }}
12
+ </slot>
13
+ </template>
14
+ <template #default>
15
+ <UluFacetsList
16
+ :children="group.children.slice(0, maxVisible)"
17
+ :groupUid="group.uid"
18
+ :groupName="group.name"
19
+ :type="group.multiple ? 'checkbox' : 'radio'"
20
+ :compact="compact"
21
+ :model-value="selectedUids(group)"
22
+ @facet-change="emit('facet-change', $event)"
23
+ />
24
+ <UluAccordion
25
+ v-if="group.children.length > maxVisible"
26
+ class="facets-filters__more-facets"
27
+ :class="classes.moreFacets"
28
+ :modifiers="accordionModifiers"
29
+ >
30
+ <template #trigger="{ isOpen }">
31
+ {{ isOpen ? "View Less" : "Show More" }}
32
+ </template>
33
+ <template #default>
34
+ <UluFacetsList
35
+ :children="group.children.slice(maxVisible)"
36
+ :groupUid="group.uid"
37
+ :groupName="group.name"
38
+ :type="group.multiple ? 'checkbox' : 'radio'"
39
+ :compact="compact"
40
+ :model-value="selectedUids(group)"
41
+ @facet-change="emit('facet-change', $event)"
42
+ />
43
+ </template>
44
+ </UluAccordion>
45
+ </template>
46
+ </UluAccordion>
47
+ </div>
48
+ </template>
49
+
50
+ <script setup>
51
+ import UluFacetsList from "./UluFacetsList.vue";
52
+ import UluAccordion from "../../collapsible/UluAccordion.vue";
53
+
54
+ defineProps({
55
+ /**
56
+ * An object of classes to apply to the component.
57
+ */
58
+ classes: {
59
+ type: Object,
60
+ default: () => ({})
61
+ },
62
+ /**
63
+ * The maximum number of facets to show before showing the "More" button.
64
+ */
65
+ maxVisible: {
66
+ type: Number,
67
+ default: 5
68
+ },
69
+ /**
70
+ * An array of facet groups to display.
71
+ */
72
+ facets: {
73
+ type: Array,
74
+ default: () => []
75
+ },
76
+ /**
77
+ * Whether to use compact modifier on selectable menu
78
+ */
79
+ compact: Boolean,
80
+ /**
81
+ * Class modifiers for accordion (ie. 'transparent', 'secondary', etc)
82
+ */
83
+ accordionModifiers: [String, Array]
84
+ });
85
+
86
+ const emit = defineEmits(['facet-change']);
87
+
88
+ const selectedUids = (group) => {
89
+ if (group.multiple) {
90
+ return group.children.filter(c => c.selected).map(c => c.uid);
91
+ }
92
+ return group.children.find(c => c.selected)?.uid || '';
93
+ };
94
+ </script>
@@ -1,18 +1,19 @@
1
1
  <template>
2
- <div class="UluFacetsFilters">
2
+ <div class="facets-filters">
3
3
  <UluCollapsible
4
- class="ulu-facets__group"
5
4
  v-for="group in facets"
6
5
  :key="group.uid"
7
6
  :classes="{
8
- container: ['ulu-facets__group', classes.group],
9
- trigger: ['ulu-facets__group-toggle', classes.groupToggle],
10
- content: ['ulu-facets__group-content', classes.groupContent]
7
+ container: ['facets-filters__group', classes.group],
8
+ containerOpen: ['facets-filters__group--open', classes.groupOpen],
9
+ containerClosed: ['facets-filters__group--closed', classes.groupClosed],
10
+ trigger: ['facets-filters__group-trigger', classes.groupTrigger],
11
+ content: ['facets-filters__group-content', classes.groupContent]
11
12
  }"
12
13
  :startOpen="group.open"
13
14
  >
14
15
  <template #trigger="{ isOpen }">
15
- <slot name="groupToggle" :group="group" :isOpen="isOpen">
16
+ <slot name="groupTrigger" :group="group" :isOpen="isOpen">
16
17
  {{ group.name }}
17
18
  </slot>
18
19
  </template>
@@ -22,16 +23,14 @@
22
23
  :groupUid="group.uid"
23
24
  :groupName="group.name"
24
25
  :type="group.multiple ? 'checkbox' : 'radio'"
26
+ :compact="compact"
25
27
  :model-value="selectedUids(group)"
26
28
  @facet-change="emit('facet-change', $event)"
27
29
  />
28
30
  <UluCollapsible
29
31
  v-if="group.children.length > maxVisible"
30
- class="ulu-facets__more-facets"
32
+ class="facets-filters__more-facets"
31
33
  :class="classes.moreFacets"
32
- :clickOutsideCloses="false"
33
- :closeOnEscape="false"
34
- :transitionHeight="true"
35
34
  >
36
35
  <template #trigger="{ isOpen }">
37
36
  {{ isOpen ? "View Less" : "Show More" }}
@@ -42,6 +41,7 @@
42
41
  :groupUid="group.uid"
43
42
  :groupName="group.name"
44
43
  :type="group.multiple ? 'checkbox' : 'radio'"
44
+ :compact="compact"
45
45
  :model-value="selectedUids(group)"
46
46
  @facet-change="emit('facet-change', $event)"
47
47
  />
@@ -77,7 +77,11 @@
77
77
  facets: {
78
78
  type: Array,
79
79
  default: () => []
80
- }
80
+ },
81
+ /**
82
+ * Whether to use compact modifier on selectable menu
83
+ */
84
+ compact: Boolean,
81
85
  });
82
86
 
83
87
  const emit = defineEmits(['facet-change']);
@@ -1,9 +1,10 @@
1
1
  <template>
2
2
  <UluSelectableMenu
3
- class="ulu-facets__facet-list"
3
+ class="facets-list"
4
4
  :legend="groupUid"
5
5
  :type="type"
6
6
  :options="menuOptions"
7
+ :compact="compact"
7
8
  :model-value="modelValue"
8
9
  @update:model-value="handleChange"
9
10
  >
@@ -25,6 +26,7 @@ const props = defineProps({
25
26
  type: String,
26
27
  default: 'checkbox',
27
28
  },
29
+ compact: Boolean,
28
30
  modelValue: [String, Array],
29
31
  });
30
32
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="ulu-facets__keyword-search">
2
+ <div class="facets-search">
3
3
  <label :class="classes.searchLabel" :for="id">
4
4
  <strong>Search</strong>
5
5
  </label>
@@ -1,21 +1,23 @@
1
1
  <template>
2
2
  <div
3
- class="facets-sidebar-layout"
4
- :class="{ 'facets-sidebar-layout--filters-hidden' : isMobile }"
3
+ class="facets-sidebar"
4
+ :class="{ 'facets-sidebar--filters-hidden' : isMobile }"
5
5
  >
6
- <div class="facets-sidebar-layout__header">
6
+ <div class="facets-sidebar__header">
7
7
  <slot name="header"></slot>
8
8
  </div>
9
9
 
10
- <div v-show="isMobile" class="facets-sidebar-layout__mobile-controls">
11
- <button class="button" @click="showMobileFilters = true">Filters & Sort</button>
10
+ <div v-show="isMobile" class="facets-sidebar__mobile-controls">
11
+ <button :class="classes.mobileButton" @click="showMobileFilters = true">
12
+ {{ mobileButtonText }}
13
+ </button>
12
14
  </div>
13
15
 
14
- <div class="facets-sidebar-layout__body">
16
+ <div class="facets-sidebar__body">
15
17
  <!-- Desktop container for the sidebar -->
16
- <div v-show="!isMobile" class="facets-sidebar-layout__sidebar" ref="desktopTarget"></div>
18
+ <div v-show="!isMobile" class="facets-sidebar__sidebar" ref="desktopTarget"></div>
17
19
 
18
- <div class="facets-sidebar-layout__main">
20
+ <div class="facets-sidebar__main">
19
21
  <slot name="main"></slot>
20
22
  </div>
21
23
  </div>
@@ -28,7 +30,7 @@
28
30
  allowResize
29
31
  >
30
32
  <!-- Mobile container for the sidebar -->
31
- <div class="facets-sidebar-layout__sidebar" ref="mobileTarget"></div>
33
+ <div class="facets-sidebar__sidebar" ref="mobileTarget"></div>
32
34
  </UluModal>
33
35
 
34
36
  <teleport :to="teleportTarget" v-if="teleportTarget">
@@ -41,6 +43,24 @@
41
43
  import { ref, inject, computed } from 'vue';
42
44
  import UluModal from '../../collapsible/UluModal.vue';
43
45
 
46
+ defineProps({
47
+ mobileButtonText: {
48
+ type: String,
49
+ default: "Filters & Sort"
50
+ },
51
+ /**
52
+ * Classes for elements. See UluCollapsible for all available class keys (trigger, content, etc).
53
+ * The 'icon' key is also available for the icon span.
54
+ * - Any valid class binding value per element
55
+ */
56
+ classes: {
57
+ type: Object,
58
+ default: () => ({
59
+ mobileButton: 'button'
60
+ })
61
+ }
62
+ })
63
+
44
64
  const showMobileFilters = ref(false);
45
65
  const isMobile = inject("uluIsMobile");
46
66
 
@@ -57,13 +77,13 @@
57
77
  </script>
58
78
 
59
79
  <style lang="scss">
60
- .facets-sidebar-layout__body {
80
+ .facets-sidebar__body {
61
81
  display: grid;
62
82
  grid-template-columns: 250px 1fr;
63
83
  gap: 2rem;
64
84
  }
65
- .facets-sidebar-layout--filters-hidden {
66
- .facets-sidebar-layout__body {
85
+ .facets-sidebar--filters-hidden {
86
+ .facets-sidebar__body {
67
87
  grid-template-columns: 1fr;
68
88
  }
69
89
  }