@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.
- package/dist/{breakpoints-DM-CBTtb.js → breakpoints-CE1jJcpB.js} +1 -1
- package/dist/frontend-vue.css +1 -1
- package/dist/frontend-vue.js +65 -64
- package/dist/{index-BNRZ3Apw.js → index-QwwTSMNO.js} +1955 -1737
- package/lib/components/collapsible/UluAccordion.vue +9 -9
- package/lib/components/collapsible/UluCollapsible.vue +7 -7
- package/lib/components/forms/UluSelectableMenu.vue +8 -1
- package/lib/components/navigation/UluMenu.vue +5 -3
- package/lib/components/navigation/UluMenuStack.vue +47 -30
- package/lib/components/systems/facets/UluFacetsActiveFilters.vue +84 -0
- package/lib/components/systems/facets/UluFacetsFilterLists.vue +9 -3
- package/lib/components/systems/facets/UluFacetsList.vue +2 -0
- package/lib/components/systems/facets/UluFacetsSidebarLayout.vue +32 -12
- package/lib/components/systems/facets/useFacets.js +166 -40
- package/lib/components/systems/index.js +1 -0
- package/lib/components/systems/slider/UluSlideShow.vue +2 -2
- package/lib/components/visualizations/UluProgressBar.vue +57 -14
- package/lib/components/visualizations/UluProgressCircle.vue +124 -111
- package/lib/plugins/core/index.js +2 -2
- package/lib/plugins/popovers/UluPopover.vue +1 -1
- package/package.json +12 -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 +238 -0
- package/types/components/elements/UluCard.vue.d.ts.map +1 -0
- package/types/components/elements/UluDefinitionList.vue.d.ts +26 -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 +48 -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 +18 -0
- package/types/components/systems/facets/UluFacetsActiveFilters.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 +24 -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/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/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/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
- 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
|
|
11
|
-
<slot name="trigger" :
|
|
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" :
|
|
16
|
+
<slot name="icon" :isOpen="isOpen">
|
|
17
17
|
<span class="accordion__icon" :class="classes.icon">
|
|
18
18
|
<UluIcon
|
|
19
|
-
:icon="
|
|
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
|
|
27
|
-
<slot :
|
|
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:
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
9
|
-
:id="
|
|
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"
|
|
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="
|
|
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,
|
|
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
|
-
|
|
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
|
|
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="{
|
|
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 ? {
|
|
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
|
-
<
|
|
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,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-
|
|
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="
|
|
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
|
|
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
|
}
|