@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.
- package/dist/{breakpoints-DfGETUy5.js → breakpoints-BK5cY325.js} +1 -1
- package/dist/frontend-vue.css +1 -1
- package/dist/frontend-vue.js +78 -74
- package/dist/{index-94HkwBnP.js → index-CzaotMwA.js} +2457 -2061
- package/lib/components/collapsible/UluAccordion.vue +9 -9
- package/lib/components/collapsible/UluCollapsible.vue +9 -24
- package/lib/components/elements/UluCard.vue +172 -157
- package/lib/components/elements/UluDefinitionList.vue +55 -3
- package/lib/components/forms/UluSelectableMenu.vue +8 -1
- package/lib/components/index.js +3 -1
- package/lib/components/navigation/UluMenu.vue +5 -3
- package/lib/components/navigation/UluMenuStack.vue +47 -30
- package/lib/components/systems/facets/UluFacetsActiveFilters.vue +104 -0
- package/lib/components/systems/facets/UluFacetsFilterAccordions.vue +94 -0
- package/lib/components/systems/facets/UluFacetsFilterLists.vue +15 -11
- package/lib/components/systems/facets/UluFacetsList.vue +3 -1
- package/lib/components/systems/facets/UluFacetsSearch.vue +1 -1
- package/lib/components/systems/facets/UluFacetsSidebarLayout.vue +32 -12
- package/lib/components/systems/facets/useFacets.js +166 -40
- package/lib/components/systems/index.js +2 -0
- package/lib/components/systems/slider/UluSlideShow.vue +2 -2
- package/lib/components/utils/{UluCondText.vue → UluConditionalText.vue} +1 -1
- package/lib/components/utils/UluConditionalWrapper.vue +29 -0
- package/lib/components/utils/UluRouteAnnouncer.vue +1 -1
- package/lib/components/utils/UluSanityRichText.vue +41 -0
- package/lib/components/visualizations/UluProgressCircle.vue +1 -1
- package/lib/plugins/core/index.js +3 -2
- package/lib/plugins/popovers/UluPopover.vue +1 -1
- package/package.json +13 -8
- package/types/components/collapsible/UluAccordion.vue.d.ts +41 -0
- package/types/components/collapsible/UluAccordion.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluAccordionGroup.vue.d.ts +19 -0
- package/types/components/collapsible/UluAccordionGroup.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluCollapsible.vue.d.ts +39 -0
- package/types/components/collapsible/UluCollapsible.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluDropdown.vue.d.ts +22 -0
- package/types/components/collapsible/UluDropdown.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluModal.vue.d.ts +253 -0
- package/types/components/collapsible/UluModal.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluOverflowPopover.vue.d.ts +18 -0
- package/types/components/collapsible/UluOverflowPopover.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluTab.vue.d.ts +10 -0
- package/types/components/collapsible/UluTab.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluTabGroup.vue.d.ts +18 -0
- package/types/components/collapsible/UluTabGroup.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluTabList.vue.d.ts +10 -0
- package/types/components/collapsible/UluTabList.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluTabPanel.vue.d.ts +10 -0
- package/types/components/collapsible/UluTabPanel.vue.d.ts.map +1 -0
- package/types/components/collapsible/UluTabPanels.vue.d.ts +10 -0
- package/types/components/collapsible/UluTabPanels.vue.d.ts.map +1 -0
- package/types/components/elements/UluAlert.vue.d.ts +147 -0
- package/types/components/elements/UluAlert.vue.d.ts.map +1 -0
- package/types/components/elements/UluBadge.vue.d.ts +30 -0
- package/types/components/elements/UluBadge.vue.d.ts.map +1 -0
- package/types/components/elements/UluBadgeStack.vue.d.ts +9 -0
- package/types/components/elements/UluBadgeStack.vue.d.ts.map +1 -0
- package/types/components/elements/UluButton.vue.d.ts +186 -0
- package/types/components/elements/UluButton.vue.d.ts.map +1 -0
- package/types/components/elements/UluButtonVerbose.vue.d.ts +126 -0
- package/types/components/elements/UluButtonVerbose.vue.d.ts.map +1 -0
- package/types/components/elements/UluCallout.vue.d.ts +27 -0
- package/types/components/elements/UluCallout.vue.d.ts.map +1 -0
- package/types/components/elements/UluCard.vue.d.ts +66 -0
- package/types/components/elements/UluCard.vue.d.ts.map +1 -0
- package/types/components/elements/UluDefinitionList.vue.d.ts +42 -0
- package/types/components/elements/UluDefinitionList.vue.d.ts.map +1 -0
- package/types/components/elements/UluExternalLink.vue.d.ts +25 -0
- package/types/components/elements/UluExternalLink.vue.d.ts.map +1 -0
- package/types/components/elements/UluIcon.vue.d.ts +11 -0
- package/types/components/elements/UluIcon.vue.d.ts.map +1 -0
- package/types/components/elements/UluList.vue.d.ts +37 -0
- package/types/components/elements/UluList.vue.d.ts.map +1 -0
- package/types/components/elements/UluMain.vue.d.ts +13 -0
- package/types/components/elements/UluMain.vue.d.ts.map +1 -0
- package/types/components/elements/UluSpokeSpinner.vue.d.ts +9 -0
- package/types/components/elements/UluSpokeSpinner.vue.d.ts.map +1 -0
- package/types/components/elements/UluTag.vue.d.ts +26 -0
- package/types/components/elements/UluTag.vue.d.ts.map +1 -0
- package/types/components/forms/UluFileDisplay.vue.d.ts +23 -0
- package/types/components/forms/UluFileDisplay.vue.d.ts.map +1 -0
- package/types/components/forms/UluFormFile.vue.d.ts +26 -0
- package/types/components/forms/UluFormFile.vue.d.ts.map +1 -0
- package/types/components/forms/UluFormMessage.vue.d.ts +18 -0
- package/types/components/forms/UluFormMessage.vue.d.ts.map +1 -0
- package/types/components/forms/UluFormSelect.vue.d.ts +24 -0
- package/types/components/forms/UluFormSelect.vue.d.ts.map +1 -0
- package/types/components/forms/UluFormText.vue.d.ts +22 -0
- package/types/components/forms/UluFormText.vue.d.ts.map +1 -0
- package/types/components/forms/UluSearchForm.vue.d.ts +9 -0
- package/types/components/forms/UluSearchForm.vue.d.ts.map +1 -0
- package/types/components/forms/UluSelectableMenu.vue.d.ts +30 -0
- package/types/components/forms/UluSelectableMenu.vue.d.ts.map +1 -0
- package/types/components/index.d.ts +50 -0
- package/types/components/layout/UluAdaptiveLayout.vue.d.ts +12 -0
- package/types/components/layout/UluAdaptiveLayout.vue.d.ts.map +1 -0
- package/types/components/layout/UluDataGrid.vue.d.ts +3 -0
- package/types/components/layout/UluDataGrid.vue.d.ts.map +1 -0
- package/types/components/layout/UluTitleRail.vue.d.ts +91 -0
- package/types/components/layout/UluTitleRail.vue.d.ts.map +1 -0
- package/types/components/layout/UluWhenBreakpoint.vue.d.ts +20 -0
- package/types/components/layout/UluWhenBreakpoint.vue.d.ts.map +1 -0
- package/types/components/navigation/UluBreadcrumb.vue.d.ts +71 -0
- package/types/components/navigation/UluBreadcrumb.vue.d.ts.map +1 -0
- package/types/components/navigation/UluMenu.vue.d.ts +142 -0
- package/types/components/navigation/UluMenu.vue.d.ts.map +1 -0
- package/types/components/navigation/UluMenuStack.vue.d.ts +19 -0
- package/types/components/navigation/UluMenuStack.vue.d.ts.map +1 -0
- package/types/components/navigation/UluNavStrip.vue.d.ts +138 -0
- package/types/components/navigation/UluNavStrip.vue.d.ts.map +1 -0
- package/types/components/navigation/UluPager.vue.d.ts +15 -0
- package/types/components/navigation/UluPager.vue.d.ts.map +1 -0
- package/types/components/navigation/UluSkipLink.vue.d.ts +3 -0
- package/types/components/navigation/UluSkipLink.vue.d.ts.map +1 -0
- package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts +3 -0
- package/types/components/systems/facets/ExampleFacetsWithPagination.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts +24 -0
- package/types/components/systems/facets/UluFacetsActiveFilters.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsFilterAccordions.vue.d.ts +29 -0
- package/types/components/systems/facets/UluFacetsFilterAccordions.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts +27 -0
- package/types/components/systems/facets/UluFacetsFilterLists.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts +25 -0
- package/types/components/systems/facets/UluFacetsFilterPopovers.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts +11 -0
- package/types/components/systems/facets/UluFacetsFilterSelects.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts +12 -0
- package/types/components/systems/facets/UluFacetsHeaderLayout.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsList.vue.d.ts +21 -0
- package/types/components/systems/facets/UluFacetsList.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsResults.vue.d.ts +27 -0
- package/types/components/systems/facets/UluFacetsResults.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsSearch.vue.d.ts +15 -0
- package/types/components/systems/facets/UluFacetsSearch.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts +22 -0
- package/types/components/systems/facets/UluFacetsSidebarLayout.vue.d.ts.map +1 -0
- package/types/components/systems/facets/UluFacetsSort.vue.d.ts +22 -0
- package/types/components/systems/facets/UluFacetsSort.vue.d.ts.map +1 -0
- package/types/components/systems/facets/useFacets.d.ts +30 -12
- package/types/components/systems/facets/useFacets.d.ts.map +1 -1
- package/types/components/systems/index.d.ts +25 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts +60 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchors.vue.d.ts.map +1 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts +15 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsNav.vue.d.ts.map +1 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts +32 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsNavAnimated.vue.d.ts.map +1 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts +50 -0
- package/types/components/systems/scroll-anchors/UluScrollAnchorsSection.vue.d.ts.map +1 -0
- package/types/components/systems/scroll-anchors/symbols.d.ts +3 -3
- package/types/components/systems/scroll-anchors/symbols.d.ts.map +1 -1
- package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts +16 -0
- package/types/components/systems/skeleton/UluShowSkeleton.vue.d.ts.map +1 -0
- package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts +9 -0
- package/types/components/systems/skeleton/UluSkeletonContent.vue.d.ts.map +1 -0
- package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts +3 -0
- package/types/components/systems/skeleton/UluSkeletonMedia.vue.d.ts.map +1 -0
- package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts +13 -0
- package/types/components/systems/skeleton/UluSkeletonText.vue.d.ts.map +1 -0
- package/types/components/systems/slider/UluImageSlideShow.vue.d.ts +130 -0
- package/types/components/systems/slider/UluImageSlideShow.vue.d.ts.map +1 -0
- package/types/components/systems/slider/UluSlideShow.vue.d.ts +205 -0
- package/types/components/systems/slider/UluSlideShow.vue.d.ts.map +1 -0
- package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts +17 -0
- package/types/components/systems/slider/UluSlideShowSlide.vue.d.ts.map +1 -0
- package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts +455 -0
- package/types/components/systems/table-sticky/UluTableSticky.vue.d.ts.map +1 -0
- package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts +34 -0
- package/types/components/systems/table-sticky/UluTableStickyRows.vue.d.ts.map +1 -0
- package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts +151 -0
- package/types/components/systems/table-sticky/UluTableStickyTable.vue.d.ts.map +1 -0
- package/types/components/utils/UluCondText.vue.d.ts +29 -0
- package/types/components/utils/UluCondText.vue.d.ts.map +1 -0
- package/types/components/utils/UluConditionalText.vue.d.ts +29 -0
- package/types/components/utils/UluConditionalText.vue.d.ts.map +1 -0
- package/types/components/utils/UluConditionalWrapper.vue.d.ts +20 -0
- package/types/components/utils/UluConditionalWrapper.vue.d.ts.map +1 -0
- package/types/components/utils/UluEmpty.vue.d.ts +3 -0
- package/types/components/utils/UluEmpty.vue.d.ts.map +1 -0
- package/types/components/utils/UluEmptyView.vue.d.ts +3 -0
- package/types/components/utils/UluEmptyView.vue.d.ts.map +1 -0
- package/types/components/utils/UluPlaceholderImage.vue.d.ts +61 -0
- package/types/components/utils/UluPlaceholderImage.vue.d.ts.map +1 -0
- package/types/components/utils/UluPlaceholderText.vue.d.ts +24 -0
- package/types/components/utils/UluPlaceholderText.vue.d.ts.map +1 -0
- package/types/components/utils/UluRouteAnnouncer.vue.d.ts +63 -0
- package/types/components/utils/UluRouteAnnouncer.vue.d.ts.map +1 -0
- package/types/components/utils/UluSanityRichText.vue.d.ts +15 -0
- package/types/components/utils/UluSanityRichText.vue.d.ts.map +1 -0
- package/types/components/visualizations/UluAnimateNumber.vue.d.ts +16 -0
- package/types/components/visualizations/UluAnimateNumber.vue.d.ts.map +1 -0
- package/types/components/visualizations/UluProgressBar.vue.d.ts +66 -0
- package/types/components/visualizations/UluProgressBar.vue.d.ts.map +1 -0
- package/types/components/visualizations/UluProgressCircle.vue.d.ts +48 -0
- package/types/components/visualizations/UluProgressCircle.vue.d.ts.map +1 -0
- package/types/composables/useBreakpointManager.d.ts +1 -1
- package/types/composables/useBreakpointManager.d.ts.map +1 -1
- package/types/composables/useDocumentTitle.d.ts +4 -4
- package/types/composables/useDocumentTitle.d.ts.map +1 -1
- package/types/composables/useIcon.d.ts +1 -1
- package/types/composables/useIcon.d.ts.map +1 -1
- package/types/composables/useModifiers.d.ts +1 -1
- package/types/composables/useModifiers.d.ts.map +1 -1
- package/types/composables/useWindowResize.d.ts +1 -1
- package/types/composables/useWindowResize.d.ts.map +1 -1
- package/types/plugins/core/index.d.ts.map +1 -1
- package/types/plugins/modals/UluModalsDisplay.vue.d.ts +14 -0
- package/types/plugins/modals/UluModalsDisplay.vue.d.ts.map +1 -0
- package/types/plugins/modals/api.d.ts +7 -4
- package/types/plugins/modals/api.d.ts.map +1 -1
- package/types/plugins/popovers/UluPopover.vue.d.ts +53 -0
- package/types/plugins/popovers/UluPopover.vue.d.ts.map +1 -0
- package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts +3 -0
- package/types/plugins/popovers/UluTooltipDisplay.vue.d.ts.map +1 -0
- package/types/plugins/popovers/UluTooltipPopover.vue.d.ts +3 -0
- package/types/plugins/popovers/UluTooltipPopover.vue.d.ts.map +1 -0
- package/types/plugins/popovers/defaults.d.ts +2 -2
- package/types/plugins/popovers/defaults.d.ts.map +1 -1
- package/types/plugins/popovers/manager.d.ts +50 -6
- package/types/plugins/popovers/manager.d.ts.map +1 -1
- package/types/plugins/popovers/useFollow.d.ts +4 -4
- package/types/plugins/popovers/useFollow.d.ts.map +1 -1
- package/types/plugins/toast/UluToast.vue.d.ts +52 -0
- package/types/plugins/toast/UluToast.vue.d.ts.map +1 -0
- package/types/plugins/toast/UluToastDisplay.vue.d.ts +13 -0
- package/types/plugins/toast/UluToastDisplay.vue.d.ts.map +1 -0
- package/types/plugins/toast/defaults.d.ts +39 -2
- package/types/plugins/toast/store.d.ts +65 -2
- package/types/plugins/toast/store.d.ts.map +1 -1
- package/types/utils/dom.d.ts +1 -1
- package/types/utils/dom.d.ts.map +1 -1
- package/types/utils/router.d.ts +15 -15
- package/types/utils/router.d.ts.map +1 -1
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<component
|
|
3
3
|
class="menu-stack"
|
|
4
|
-
:
|
|
5
|
-
|
|
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
|
-
</
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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="
|
|
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: ['
|
|
9
|
-
|
|
10
|
-
|
|
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="
|
|
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="
|
|
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="
|
|
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,21 +1,23 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
class="facets-sidebar
|
|
4
|
-
:class="{ 'facets-sidebar
|
|
3
|
+
class="facets-sidebar"
|
|
4
|
+
:class="{ 'facets-sidebar--filters-hidden' : isMobile }"
|
|
5
5
|
>
|
|
6
|
-
<div class="facets-
|
|
6
|
+
<div class="facets-sidebar__header">
|
|
7
7
|
<slot name="header"></slot>
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
|
-
<div v-show="isMobile" class="facets-
|
|
11
|
-
<button class="
|
|
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-
|
|
16
|
+
<div class="facets-sidebar__body">
|
|
15
17
|
<!-- Desktop container for the sidebar -->
|
|
16
|
-
<div v-show="!isMobile" class="facets-
|
|
18
|
+
<div v-show="!isMobile" class="facets-sidebar__sidebar" ref="desktopTarget"></div>
|
|
17
19
|
|
|
18
|
-
<div class="facets-
|
|
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-
|
|
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-
|
|
80
|
+
.facets-sidebar__body {
|
|
61
81
|
display: grid;
|
|
62
82
|
grid-template-columns: 250px 1fr;
|
|
63
83
|
gap: 2rem;
|
|
64
84
|
}
|
|
65
|
-
.facets-sidebar
|
|
66
|
-
.facets-
|
|
85
|
+
.facets-sidebar--filters-hidden {
|
|
86
|
+
.facets-sidebar__body {
|
|
67
87
|
grid-template-columns: 1fr;
|
|
68
88
|
}
|
|
69
89
|
}
|