@ulu/frontend-vue 0.1.1-beta.1 → 0.1.1-beta.11

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 (217) hide show
  1. package/dist/{breakpoints-DM-CBTtb.js → breakpoints-CE1jJcpB.js} +1 -1
  2. package/dist/frontend-vue.css +1 -1
  3. package/dist/frontend-vue.js +65 -64
  4. package/dist/{index-BNRZ3Apw.js → index-QwwTSMNO.js} +1955 -1737
  5. package/lib/components/collapsible/UluAccordion.vue +9 -9
  6. package/lib/components/collapsible/UluCollapsible.vue +7 -7
  7. package/lib/components/forms/UluSelectableMenu.vue +8 -1
  8. package/lib/components/navigation/UluMenu.vue +5 -3
  9. package/lib/components/navigation/UluMenuStack.vue +47 -30
  10. package/lib/components/systems/facets/UluFacetsActiveFilters.vue +84 -0
  11. package/lib/components/systems/facets/UluFacetsFilterLists.vue +9 -3
  12. package/lib/components/systems/facets/UluFacetsList.vue +2 -0
  13. package/lib/components/systems/facets/UluFacetsSidebarLayout.vue +32 -12
  14. package/lib/components/systems/facets/useFacets.js +166 -40
  15. package/lib/components/systems/index.js +1 -0
  16. package/lib/components/systems/slider/UluSlideShow.vue +2 -2
  17. package/lib/components/visualizations/UluProgressBar.vue +57 -14
  18. package/lib/components/visualizations/UluProgressCircle.vue +124 -111
  19. package/lib/plugins/core/index.js +2 -2
  20. package/lib/plugins/popovers/UluPopover.vue +1 -1
  21. package/package.json +12 -8
  22. package/types/components/collapsible/UluAccordion.vue.d.ts +41 -0
  23. package/types/components/collapsible/UluAccordion.vue.d.ts.map +1 -0
  24. package/types/components/collapsible/UluAccordionGroup.vue.d.ts +19 -0
  25. package/types/components/collapsible/UluAccordionGroup.vue.d.ts.map +1 -0
  26. package/types/components/collapsible/UluCollapsible.vue.d.ts +39 -0
  27. package/types/components/collapsible/UluCollapsible.vue.d.ts.map +1 -0
  28. package/types/components/collapsible/UluDropdown.vue.d.ts +22 -0
  29. package/types/components/collapsible/UluDropdown.vue.d.ts.map +1 -0
  30. package/types/components/collapsible/UluModal.vue.d.ts +253 -0
  31. package/types/components/collapsible/UluModal.vue.d.ts.map +1 -0
  32. package/types/components/collapsible/UluOverflowPopover.vue.d.ts +18 -0
  33. package/types/components/collapsible/UluOverflowPopover.vue.d.ts.map +1 -0
  34. package/types/components/collapsible/UluTab.vue.d.ts +10 -0
  35. package/types/components/collapsible/UluTab.vue.d.ts.map +1 -0
  36. package/types/components/collapsible/UluTabGroup.vue.d.ts +18 -0
  37. package/types/components/collapsible/UluTabGroup.vue.d.ts.map +1 -0
  38. package/types/components/collapsible/UluTabList.vue.d.ts +10 -0
  39. package/types/components/collapsible/UluTabList.vue.d.ts.map +1 -0
  40. package/types/components/collapsible/UluTabPanel.vue.d.ts +10 -0
  41. package/types/components/collapsible/UluTabPanel.vue.d.ts.map +1 -0
  42. package/types/components/collapsible/UluTabPanels.vue.d.ts +10 -0
  43. package/types/components/collapsible/UluTabPanels.vue.d.ts.map +1 -0
  44. package/types/components/elements/UluAlert.vue.d.ts +147 -0
  45. package/types/components/elements/UluAlert.vue.d.ts.map +1 -0
  46. package/types/components/elements/UluBadge.vue.d.ts +30 -0
  47. package/types/components/elements/UluBadge.vue.d.ts.map +1 -0
  48. package/types/components/elements/UluBadgeStack.vue.d.ts +9 -0
  49. package/types/components/elements/UluBadgeStack.vue.d.ts.map +1 -0
  50. package/types/components/elements/UluButton.vue.d.ts +186 -0
  51. package/types/components/elements/UluButton.vue.d.ts.map +1 -0
  52. package/types/components/elements/UluButtonVerbose.vue.d.ts +126 -0
  53. package/types/components/elements/UluButtonVerbose.vue.d.ts.map +1 -0
  54. package/types/components/elements/UluCallout.vue.d.ts +27 -0
  55. package/types/components/elements/UluCallout.vue.d.ts.map +1 -0
  56. package/types/components/elements/UluCard.vue.d.ts +238 -0
  57. package/types/components/elements/UluCard.vue.d.ts.map +1 -0
  58. package/types/components/elements/UluDefinitionList.vue.d.ts +26 -0
  59. package/types/components/elements/UluDefinitionList.vue.d.ts.map +1 -0
  60. package/types/components/elements/UluExternalLink.vue.d.ts +25 -0
  61. package/types/components/elements/UluExternalLink.vue.d.ts.map +1 -0
  62. package/types/components/elements/UluIcon.vue.d.ts +11 -0
  63. package/types/components/elements/UluIcon.vue.d.ts.map +1 -0
  64. package/types/components/elements/UluList.vue.d.ts +37 -0
  65. package/types/components/elements/UluList.vue.d.ts.map +1 -0
  66. package/types/components/elements/UluMain.vue.d.ts +13 -0
  67. package/types/components/elements/UluMain.vue.d.ts.map +1 -0
  68. package/types/components/elements/UluSpokeSpinner.vue.d.ts +9 -0
  69. package/types/components/elements/UluSpokeSpinner.vue.d.ts.map +1 -0
  70. package/types/components/elements/UluTag.vue.d.ts +26 -0
  71. package/types/components/elements/UluTag.vue.d.ts.map +1 -0
  72. package/types/components/forms/UluFileDisplay.vue.d.ts +23 -0
  73. package/types/components/forms/UluFileDisplay.vue.d.ts.map +1 -0
  74. package/types/components/forms/UluFormFile.vue.d.ts +26 -0
  75. package/types/components/forms/UluFormFile.vue.d.ts.map +1 -0
  76. package/types/components/forms/UluFormMessage.vue.d.ts +18 -0
  77. package/types/components/forms/UluFormMessage.vue.d.ts.map +1 -0
  78. package/types/components/forms/UluFormSelect.vue.d.ts +24 -0
  79. package/types/components/forms/UluFormSelect.vue.d.ts.map +1 -0
  80. package/types/components/forms/UluFormText.vue.d.ts +22 -0
  81. package/types/components/forms/UluFormText.vue.d.ts.map +1 -0
  82. package/types/components/forms/UluSearchForm.vue.d.ts +9 -0
  83. package/types/components/forms/UluSearchForm.vue.d.ts.map +1 -0
  84. package/types/components/forms/UluSelectableMenu.vue.d.ts +30 -0
  85. package/types/components/forms/UluSelectableMenu.vue.d.ts.map +1 -0
  86. package/types/components/index.d.ts +48 -0
  87. package/types/components/layout/UluAdaptiveLayout.vue.d.ts +12 -0
  88. package/types/components/layout/UluAdaptiveLayout.vue.d.ts.map +1 -0
  89. package/types/components/layout/UluDataGrid.vue.d.ts +3 -0
  90. package/types/components/layout/UluDataGrid.vue.d.ts.map +1 -0
  91. package/types/components/layout/UluTitleRail.vue.d.ts +91 -0
  92. package/types/components/layout/UluTitleRail.vue.d.ts.map +1 -0
  93. package/types/components/layout/UluWhenBreakpoint.vue.d.ts +20 -0
  94. package/types/components/layout/UluWhenBreakpoint.vue.d.ts.map +1 -0
  95. package/types/components/navigation/UluBreadcrumb.vue.d.ts +71 -0
  96. package/types/components/navigation/UluBreadcrumb.vue.d.ts.map +1 -0
  97. package/types/components/navigation/UluMenu.vue.d.ts +142 -0
  98. package/types/components/navigation/UluMenu.vue.d.ts.map +1 -0
  99. package/types/components/navigation/UluMenuStack.vue.d.ts +19 -0
  100. package/types/components/navigation/UluMenuStack.vue.d.ts.map +1 -0
  101. package/types/components/navigation/UluNavStrip.vue.d.ts +138 -0
  102. package/types/components/navigation/UluNavStrip.vue.d.ts.map +1 -0
  103. package/types/components/navigation/UluPager.vue.d.ts +15 -0
  104. package/types/components/navigation/UluPager.vue.d.ts.map +1 -0
  105. package/types/components/navigation/UluSkipLink.vue.d.ts +3 -0
  106. package/types/components/navigation/UluSkipLink.vue.d.ts.map +1 -0
  107. package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts +3 -0
  108. package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts.map +1 -0
  109. package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts +18 -0
  110. package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts.map +1 -0
  111. package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts +27 -0
  112. package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts.map +1 -0
  113. package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts +25 -0
  114. package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts.map +1 -0
  115. package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts +11 -0
  116. package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts.map +1 -0
  117. package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts +12 -0
  118. package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts.map +1 -0
  119. package/types/components/systems/facets/UluFacetsList.vue.d.ts +21 -0
  120. package/types/components/systems/facets/UluFacetsList.vue.d.ts.map +1 -0
  121. package/types/components/systems/facets/UluFacetsResults.vue.d.ts +27 -0
  122. package/types/components/systems/facets/UluFacetsResults.vue.d.ts.map +1 -0
  123. package/types/components/systems/facets/UluFacetsSearch.vue.d.ts +15 -0
  124. package/types/components/systems/facets/UluFacetsSearch.vue.d.ts.map +1 -0
  125. package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts +22 -0
  126. package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts.map +1 -0
  127. package/types/components/systems/facets/UluFacetsSort.vue.d.ts +22 -0
  128. package/types/components/systems/facets/UluFacetsSort.vue.d.ts.map +1 -0
  129. package/types/components/systems/facets/useFacets.d.ts +30 -12
  130. package/types/components/systems/facets/useFacets.d.ts.map +1 -1
  131. package/types/components/systems/index.d.ts +24 -0
  132. package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts +60 -0
  133. package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts.map +1 -0
  134. package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts +15 -0
  135. package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts.map +1 -0
  136. package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts +32 -0
  137. package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts.map +1 -0
  138. package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts +50 -0
  139. package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts.map +1 -0
  140. package/types/components/systems/scroll-anchors/symbols.d.ts +3 -3
  141. package/types/components/systems/scroll-anchors/symbols.d.ts.map +1 -1
  142. package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts +16 -0
  143. package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts.map +1 -0
  144. package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts +9 -0
  145. package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts.map +1 -0
  146. package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts +3 -0
  147. package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts.map +1 -0
  148. package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts +13 -0
  149. package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts.map +1 -0
  150. package/types/components/systems/slider/UluImageSlideShow.vue.d.ts +130 -0
  151. package/types/components/systems/slider/UluImageSlideShow.vue.d.ts.map +1 -0
  152. package/types/components/systems/slider/UluSlideShow.vue.d.ts +205 -0
  153. package/types/components/systems/slider/UluSlideShow.vue.d.ts.map +1 -0
  154. package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts +17 -0
  155. package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts.map +1 -0
  156. package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts +455 -0
  157. package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts.map +1 -0
  158. package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts +34 -0
  159. package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts.map +1 -0
  160. package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts +151 -0
  161. package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts.map +1 -0
  162. package/types/components/utils/UluCondText.vue.d.ts +29 -0
  163. package/types/components/utils/UluCondText.vue.d.ts.map +1 -0
  164. package/types/components/utils/UluEmpty.vue.d.ts +3 -0
  165. package/types/components/utils/UluEmpty.vue.d.ts.map +1 -0
  166. package/types/components/utils/UluEmptyView.vue.d.ts +3 -0
  167. package/types/components/utils/UluEmptyView.vue.d.ts.map +1 -0
  168. package/types/components/utils/UluPlaceholderImage.vue.d.ts +61 -0
  169. package/types/components/utils/UluPlaceholderImage.vue.d.ts.map +1 -0
  170. package/types/components/utils/UluPlaceholderText.vue.d.ts +24 -0
  171. package/types/components/utils/UluPlaceholderText.vue.d.ts.map +1 -0
  172. package/types/components/utils/UluRouteAnnouncer.vue.d.ts +63 -0
  173. package/types/components/utils/UluRouteAnnouncer.vue.d.ts.map +1 -0
  174. package/types/components/visualizations/UluAnimateNumber.vue.d.ts +16 -0
  175. package/types/components/visualizations/UluAnimateNumber.vue.d.ts.map +1 -0
  176. package/types/components/visualizations/UluProgressBar.vue.d.ts +66 -0
  177. package/types/components/visualizations/UluProgressBar.vue.d.ts.map +1 -0
  178. package/types/components/visualizations/UluProgressCircle.vue.d.ts +48 -0
  179. package/types/components/visualizations/UluProgressCircle.vue.d.ts.map +1 -0
  180. package/types/composables/useBreakpointManager.d.ts +1 -1
  181. package/types/composables/useBreakpointManager.d.ts.map +1 -1
  182. package/types/composables/useDocumentTitle.d.ts +4 -4
  183. package/types/composables/useDocumentTitle.d.ts.map +1 -1
  184. package/types/composables/useIcon.d.ts +1 -1
  185. package/types/composables/useIcon.d.ts.map +1 -1
  186. package/types/composables/useModifiers.d.ts +1 -1
  187. package/types/composables/useModifiers.d.ts.map +1 -1
  188. package/types/composables/useWindowResize.d.ts +1 -1
  189. package/types/composables/useWindowResize.d.ts.map +1 -1
  190. package/types/plugins/modals/UluModalsDisplay.vue.d.ts +14 -0
  191. package/types/plugins/modals/UluModalsDisplay.vue.d.ts.map +1 -0
  192. package/types/plugins/modals/api.d.ts +7 -4
  193. package/types/plugins/modals/api.d.ts.map +1 -1
  194. package/types/plugins/popovers/UluPopover.vue.d.ts +53 -0
  195. package/types/plugins/popovers/UluPopover.vue.d.ts.map +1 -0
  196. package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts +3 -0
  197. package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts.map +1 -0
  198. package/types/plugins/popovers/UluTooltipPopover.vue.d.ts +3 -0
  199. package/types/plugins/popovers/UluTooltipPopover.vue.d.ts.map +1 -0
  200. package/types/plugins/popovers/defaults.d.ts +2 -2
  201. package/types/plugins/popovers/defaults.d.ts.map +1 -1
  202. package/types/plugins/popovers/manager.d.ts +50 -6
  203. package/types/plugins/popovers/manager.d.ts.map +1 -1
  204. package/types/plugins/popovers/useFollow.d.ts +4 -4
  205. package/types/plugins/popovers/useFollow.d.ts.map +1 -1
  206. package/types/plugins/toast/UluToast.vue.d.ts +52 -0
  207. package/types/plugins/toast/UluToast.vue.d.ts.map +1 -0
  208. package/types/plugins/toast/UluToastDisplay.vue.d.ts +13 -0
  209. package/types/plugins/toast/UluToastDisplay.vue.d.ts.map +1 -0
  210. package/types/plugins/toast/defaults.d.ts +39 -2
  211. package/types/plugins/toast/store.d.ts +65 -2
  212. package/types/plugins/toast/store.d.ts.map +1 -1
  213. package/types/utils/dom.d.ts +1 -1
  214. package/types/utils/dom.d.ts.map +1 -1
  215. package/types/utils/router.d.ts +15 -15
  216. package/types/utils/router.d.ts.map +1 -1
  217. package/lib/components/visualizations/progress-bar-examples.html +0 -175
@@ -7,24 +7,24 @@
7
7
  :animate="animate"
8
8
  @update:model-value="$emit('update:modelValue', $event)"
9
9
  >
10
- <template #trigger="{ isOpen: open, toggle }">
11
- <slot name="trigger" :open="open" :toggle="toggle">
10
+ <template #trigger="{ isOpen }">
11
+ <slot name="trigger" :isOpen="isOpen">
12
12
  <component :is="triggerTextElement">
13
13
  {{ triggerText }}
14
14
  </component>
15
15
  </slot>
16
- <slot name="icon" :open="open">
16
+ <slot name="icon" :isOpen="isOpen">
17
17
  <span class="accordion__icon" :class="classes.icon">
18
18
  <UluIcon
19
- :icon="open ? 'type:collapse' : 'type:expand'"
19
+ :icon="isOpen ? 'type:collapse' : 'type:expand'"
20
20
  style="display: inline;"
21
21
  />
22
22
  </span>
23
23
  </slot>
24
24
  </template>
25
25
 
26
- <template #default="{ isOpen: open, toggle }">
27
- <slot :open="open" :toggle="toggle"/>
26
+ <template #default="{ isOpen, toggle }">
27
+ <slot :isOpen="isOpen" :toggle="toggle"/>
28
28
  </template>
29
29
  </UluCollapsible>
30
30
  </template>
@@ -55,7 +55,7 @@
55
55
  */
56
56
  animate: {
57
57
  type: [Boolean, Object],
58
- default: false
58
+ default: true
59
59
  },
60
60
  /**
61
61
  * Text to use for accordion, alternatively use #trigger slot
@@ -69,7 +69,7 @@
69
69
  default: "strong"
70
70
  },
71
71
  /**
72
- * Classes for elements. See UluCollapsible for all available class keys (toggle, content, etc).
72
+ * Classes for elements. See UluCollapsible for all available class keys (trigger, content, etc).
73
73
  * The 'icon' key is also available for the icon span.
74
74
  * - Any valid class binding value per element
75
75
  */
@@ -77,7 +77,7 @@
77
77
  type: Object,
78
78
  default: () => ({
79
79
  container: 'accordion',
80
- toggle: 'accordion__summary',
80
+ trigger: 'accordion__summary',
81
81
  content: 'accordion__content',
82
82
  containerOpen: 'is-active'
83
83
  })
@@ -5,13 +5,13 @@
5
5
  :class="[classes.container, containerStateClasses]"
6
6
  >
7
7
  <button
8
- :class="classes.toggle"
9
- :id="toggleId"
8
+ :class="classes.trigger"
9
+ :id="triggerId"
10
10
  :aria-controls="contentId"
11
11
  :aria-expanded="isOpen"
12
12
  @click="toggle"
13
13
  >
14
- <slot name="trigger" :isOpen="isOpen" :toggle="toggle">
14
+ <slot name="trigger" :isOpen="isOpen">
15
15
  {{ triggerText }}
16
16
  </slot>
17
17
  </button>
@@ -21,7 +21,7 @@
21
21
  tabindex="-1"
22
22
  :id="contentId"
23
23
  :aria-hidden="!isOpen"
24
- :aria-labelledby="toggleId"
24
+ :aria-labelledby="triggerId"
25
25
  >
26
26
  <div :class="classes.contentInner">
27
27
  <slot :isOpen="isOpen" :toggle="toggle" />
@@ -66,14 +66,14 @@
66
66
  default: true
67
67
  },
68
68
  /**
69
- * Classes for elements ({ container, toggle, content, contentInner })
69
+ * Classes for elements ({ container, trigger, content, contentInner })
70
70
  * - Any valid class binding value per element
71
71
  */
72
72
  classes: {
73
73
  type: Object,
74
74
  default: () => ({
75
75
  container: 'ulu-collapsible',
76
- toggle: 'ulu-collapsible__toggle',
76
+ trigger: 'ulu-collapsible__trigger',
77
77
  content: 'ulu-collapsible__content',
78
78
  contentInner: 'ulu-collapsible__content-inner',
79
79
  containerOpen: 'ulu-collapsible--open',
@@ -114,7 +114,7 @@
114
114
  }
115
115
  });
116
116
 
117
- const toggleId = ref(newId('ulu-collapsible-toggle'));
117
+ const triggerId = ref(newId('ulu-collapsible-trigger'));
118
118
  const contentId = ref(newId('ulu-collapsible-content'));
119
119
 
120
120
  const containerStateClasses = computed(() => {
@@ -1,7 +1,10 @@
1
1
  <template>
2
2
  <div
3
3
  class="menu-stack form-theme"
4
- :class="{ 'menu-stack--hide-inputs' : hideInputs }"
4
+ :class="{
5
+ 'menu-stack--hide-inputs' : hideInputs,
6
+ 'menu-stack--compact' : compact
7
+ }"
5
8
  :role="groupRole"
6
9
  :aria-labelledby="legendId"
7
10
  >
@@ -40,6 +43,10 @@ const props = defineProps({
40
43
  * An array of options for the menu.
41
44
  */
42
45
  options: Array,
46
+ /**
47
+ * Use compact modifier on menu stack
48
+ */
49
+ compact: Boolean,
43
50
  /**
44
51
  * The type of input to use ('checkbox' or 'radio').
45
52
  */
@@ -17,13 +17,15 @@
17
17
  <component
18
18
  :is="item.to || item.path ? 'router-link' : item.click ? 'button' : 'a'"
19
19
  v-bind="{
20
- ...(item.to || item.path ? { to: item.to || item.path } : {}),
20
+ ...(item.to || item.path ? {
21
+ to: item.to || item.path,
22
+ activeClass: classes.linkActive || null,
23
+ exactActiveClass: classes.linkExactActive || null
24
+ } : {}),
21
25
  ...(item.href ? { 'href' : item.href || '#' } : {}),
22
26
  }"
23
27
  @click="(event) => { handleItemClick(event, item) }"
24
28
  :class="[classes.link, item?.classes?.link]"
25
- :activeClass="classes.linkActive"
26
- :exactActiveClass="classes.linkExactActive"
27
29
  :aria-label="iconOnly ? item.title : null"
28
30
  :id="item.id"
29
31
  v-ulu-tooltip="iconOnly ? item.title : item.tooltip || null"
@@ -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,84 @@
1
+ <template>
2
+ <div v-if="activeFilters.length" class="ulu-facets-active-filters">
3
+ <slot name="label">
4
+ <strong class="ulu-facets-active-filters__label">Active Filters:</strong>
5
+ </slot>
6
+ <div class="ulu-facets-active-filters__items">
7
+ <UluButton
8
+ v-for="filter in activeFilters"
9
+ :key="`${filter.groupUid}-${filter.uid}`"
10
+ class="button--sm"
11
+ @click="removeFilter(filter)"
12
+ >
13
+ {{ filter.label }}
14
+ <UluIcon icon="type:close" />
15
+ </UluButton>
16
+ </div>
17
+ <button @click="clearFilters" class="button button--link">Clear All</button>
18
+ </div>
19
+ </template>
20
+
21
+ <script setup>
22
+ import { computed } from 'vue';
23
+ import UluButton from '../../elements/UluButton.vue';
24
+ import UluIcon from '../../elements/UluIcon.vue';
25
+
26
+ const props = defineProps({
27
+ /**
28
+ * The selectedFacets array from the useFacets composable.
29
+ */
30
+ selectedFacets: {
31
+ type: Array,
32
+ default: () => []
33
+ }
34
+ });
35
+
36
+ const emit = defineEmits(['facet-change', 'clear-filters']);
37
+
38
+ const activeFilters = computed(() => {
39
+ const filters = [];
40
+ props.selectedFacets.forEach(group => {
41
+ group.children.forEach(child => {
42
+ filters.push({
43
+ ...child,
44
+ groupUid: group.uid
45
+ });
46
+ });
47
+ });
48
+ return filters;
49
+ });
50
+
51
+ function removeFilter(filter) {
52
+ emit('facet-change', {
53
+ groupUid: filter.groupUid,
54
+ facetUid: filter.uid,
55
+ selected: false
56
+ });
57
+ }
58
+
59
+ function clearFilters() {
60
+ emit('clear-filters');
61
+ }
62
+ </script>
63
+
64
+ <style lang="scss">
65
+ .ulu-facets-active-filters {
66
+ display: flex;
67
+ align-items: center;
68
+ flex-wrap: wrap;
69
+ gap: 1rem;
70
+ margin-bottom: 1.5rem;
71
+ padding-bottom: 1.5rem;
72
+ border-bottom: 1px solid #eee;
73
+
74
+ &__label {
75
+ margin-right: 0.5rem;
76
+ }
77
+
78
+ &__items {
79
+ display: flex;
80
+ flex-wrap: wrap;
81
+ gap: 0.5rem;
82
+ }
83
+ }
84
+ </style>
@@ -6,13 +6,13 @@
6
6
  :key="group.uid"
7
7
  :classes="{
8
8
  container: ['ulu-facets__group', classes.group],
9
- trigger: ['ulu-facets__group-toggle', classes.groupToggle],
9
+ trigger: ['ulu-facets__group-trigger', classes.groupTrigger],
10
10
  content: ['ulu-facets__group-content', classes.groupContent]
11
11
  }"
12
12
  :startOpen="group.open"
13
13
  >
14
14
  <template #trigger="{ isOpen }">
15
- <slot name="groupToggle" :group="group" :isOpen="isOpen">
15
+ <slot name="groupTrigger" :group="group" :isOpen="isOpen">
16
16
  {{ group.name }}
17
17
  </slot>
18
18
  </template>
@@ -22,6 +22,7 @@
22
22
  :groupUid="group.uid"
23
23
  :groupName="group.name"
24
24
  :type="group.multiple ? 'checkbox' : 'radio'"
25
+ :compact="compact"
25
26
  :model-value="selectedUids(group)"
26
27
  @facet-change="emit('facet-change', $event)"
27
28
  />
@@ -42,6 +43,7 @@
42
43
  :groupUid="group.uid"
43
44
  :groupName="group.name"
44
45
  :type="group.multiple ? 'checkbox' : 'radio'"
46
+ :compact="compact"
45
47
  :model-value="selectedUids(group)"
46
48
  @facet-change="emit('facet-change', $event)"
47
49
  />
@@ -77,7 +79,11 @@
77
79
  facets: {
78
80
  type: Array,
79
81
  default: () => []
80
- }
82
+ },
83
+ /**
84
+ * Whether to use compact modifier on selectable menu
85
+ */
86
+ compact: Boolean,
81
87
  });
82
88
 
83
89
  const emit = defineEmits(['facet-change']);
@@ -4,6 +4,7 @@
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,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
  }