@ulu/frontend-vue 0.1.0-beta.9 → 0.1.1-beta.10
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-BbkGNxxt.js → breakpoints-BYSYcx8V.js} +1 -1
- package/dist/frontend-vue.css +1 -1
- package/dist/frontend-vue.js +82 -70
- package/dist/index-A7weElM_.js +7766 -0
- package/lib/components/collapsible/UluAccordion.vue +71 -53
- package/lib/components/collapsible/UluAccordionGroup.vue +54 -0
- package/lib/components/collapsible/UluCollapsible.vue +144 -0
- package/lib/components/collapsible/UluDropdown.vue +29 -29
- package/lib/components/collapsible/UluOverflowPopover.vue +1 -1
- package/lib/components/elements/UluBadge.vue +51 -28
- package/lib/components/elements/UluBadgeStack.vue +8 -13
- package/lib/components/elements/UluButtonVerbose.vue +119 -0
- package/lib/components/elements/UluCard.vue +1 -1
- package/lib/components/elements/UluDefinitionList.vue +14 -17
- package/lib/components/elements/UluExternalLink.vue +21 -27
- package/lib/components/elements/UluIcon.vue +11 -1
- package/lib/components/elements/UluList.vue +53 -55
- package/lib/components/elements/UluSpokeSpinner.vue +12 -18
- package/lib/components/elements/UluTag.vue +35 -35
- package/lib/components/forms/UluFileDisplay.vue +49 -31
- package/lib/components/forms/UluFormFile.vue +37 -24
- package/lib/components/forms/UluFormMessage.vue +13 -10
- package/lib/components/forms/UluFormSelect.vue +28 -16
- package/lib/components/forms/UluFormText.vue +24 -15
- package/lib/components/forms/UluSearchForm.vue +11 -10
- package/lib/components/forms/UluSelectableMenu.vue +106 -0
- package/lib/components/index.js +4 -3
- package/lib/components/layout/UluTitleRail.vue +18 -0
- package/lib/components/layout/UluWhenBreakpoint.vue +9 -0
- package/lib/components/navigation/UluBreadcrumb.vue +9 -2
- package/lib/components/navigation/UluMenu.vue +13 -6
- package/lib/components/navigation/UluMenuStack.vue +50 -31
- package/lib/components/navigation/UluPager.vue +102 -0
- package/lib/components/systems/facets/ExampleFacetsWithPagination.vue +119 -0
- package/lib/components/systems/facets/UluFacetsActiveFilters.vue +84 -0
- package/lib/components/systems/facets/UluFacetsFilterLists.vue +97 -0
- package/lib/components/systems/facets/UluFacetsFilterPopovers.vue +125 -0
- package/lib/components/systems/facets/UluFacetsFilterSelects.vue +71 -0
- package/lib/components/systems/facets/UluFacetsHeaderLayout.vue +24 -0
- package/lib/components/systems/facets/UluFacetsList.vue +64 -34
- package/lib/components/systems/facets/UluFacetsResults.vue +63 -0
- package/lib/components/systems/facets/UluFacetsSearch.vue +27 -50
- package/lib/components/systems/facets/UluFacetsSidebarLayout.vue +90 -0
- package/lib/components/systems/facets/UluFacetsSort.vue +45 -0
- package/lib/components/systems/facets/_facets.scss +2 -3
- package/lib/components/systems/facets/_mock-data.js +40 -0
- package/lib/components/systems/facets/useFacets.js +394 -0
- package/lib/components/systems/index.js +14 -2
- package/lib/components/systems/scroll-anchors/UluScrollAnchors.vue +2 -1
- package/lib/components/systems/skeleton/UluShowSkeleton.vue +9 -8
- package/lib/components/systems/skeleton/UluSkeletonContent.vue +39 -43
- package/lib/components/systems/skeleton/UluSkeletonMedia.vue +4 -6
- package/lib/components/systems/skeleton/UluSkeletonText.vue +27 -0
- package/lib/components/systems/slider/UluImageSlideShow.vue +1 -1
- package/lib/components/systems/slider/UluSlideShow.vue +8 -3
- package/lib/components/systems/table-sticky/UluTableSticky.vue +7 -7
- package/lib/components/systems/table-sticky/UluTableStickyTable.vue +3 -3
- package/lib/components/visualizations/UluAnimateNumber.vue +7 -1
- package/lib/components/visualizations/UluProgressBar.vue +148 -74
- package/lib/components/visualizations/UluProgressCircle.vue +159 -0
- package/lib/composables/index.js +3 -1
- package/lib/composables/useDocumentTitle.js +61 -0
- package/lib/composables/usePagination.js +122 -0
- package/lib/index.js +1 -0
- package/lib/plugins/core/index.js +6 -1
- package/lib/plugins/popovers/UluPopover.vue +8 -3
- package/lib/plugins/toast/UluToast.vue +1 -1
- package/lib/plugins/toast/UluToastDisplay.vue +19 -2
- package/lib/utils/dom.js +12 -0
- package/lib/utils/index.js +2 -0
- package/lib/utils/{vue-router.js → router.js} +114 -30
- package/package.json +22 -12
- package/types/components/collapsible/UluAccordion.vue.d.ts +42 -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 +40 -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/_mock-data.d.ts +18 -0
- package/types/components/systems/facets/_mock-data.d.ts.map +1 -0
- package/types/components/systems/facets/useFacets.d.ts +57 -0
- package/types/components/systems/facets/useFacets.d.ts.map +1 -0
- package/types/components/systems/index.d.ts +25 -1
- 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/index.d.ts +2 -0
- package/types/composables/useBreakpointManager.d.ts +1 -1
- package/types/composables/useBreakpointManager.d.ts.map +1 -1
- package/types/composables/useDocumentTitle.d.ts +22 -0
- package/types/composables/useDocumentTitle.d.ts.map +1 -0
- 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/usePageTitle.d.ts +19 -0
- package/types/composables/usePageTitle.d.ts.map +1 -0
- package/types/composables/usePagination.d.ts +25 -0
- package/types/composables/usePagination.d.ts.map +1 -0
- package/types/composables/useWindowResize.d.ts +1 -1
- package/types/composables/useWindowResize.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- 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 +54 -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 +2 -1
- package/types/utils/dom.d.ts.map +1 -1
- package/types/utils/index.d.ts +3 -0
- package/types/utils/index.d.ts.map +1 -0
- package/types/utils/router.d.ts +144 -0
- package/types/utils/router.d.ts.map +1 -0
- package/dist/index-D3Uc6T5M.js +0 -6469
- package/lib/components/collapsible/UluCollapsibleRegion.vue +0 -278
- package/lib/components/forms/UluCheckboxMenu.vue +0 -36
- package/lib/components/systems/facets/UluFacets.vue +0 -380
- package/lib/components/systems/skeleton/UluSkeletonTextInline.vue +0 -9
- package/lib/components/visualizations/UluProgressDonut.vue +0 -97
- package/lib/utils/placeholder.js +0 -6
|
@@ -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>
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="UluFacetsFilters">
|
|
3
|
+
<UluCollapsible
|
|
4
|
+
class="ulu-facets__group"
|
|
5
|
+
v-for="group in facets"
|
|
6
|
+
:key="group.uid"
|
|
7
|
+
:classes="{
|
|
8
|
+
container: ['ulu-facets__group', classes.group],
|
|
9
|
+
trigger: ['ulu-facets__group-toggle', classes.groupToggle],
|
|
10
|
+
content: ['ulu-facets__group-content', classes.groupContent]
|
|
11
|
+
}"
|
|
12
|
+
:startOpen="group.open"
|
|
13
|
+
>
|
|
14
|
+
<template #trigger="{ isOpen }">
|
|
15
|
+
<slot name="groupToggle" :group="group" :isOpen="isOpen">
|
|
16
|
+
{{ group.name }}
|
|
17
|
+
</slot>
|
|
18
|
+
</template>
|
|
19
|
+
<template #default>
|
|
20
|
+
<UluFacetsList
|
|
21
|
+
:children="group.children.slice(0, maxVisible)"
|
|
22
|
+
:groupUid="group.uid"
|
|
23
|
+
:groupName="group.name"
|
|
24
|
+
:type="group.multiple ? 'checkbox' : 'radio'"
|
|
25
|
+
:compact="compact"
|
|
26
|
+
:model-value="selectedUids(group)"
|
|
27
|
+
@facet-change="emit('facet-change', $event)"
|
|
28
|
+
/>
|
|
29
|
+
<UluCollapsible
|
|
30
|
+
v-if="group.children.length > maxVisible"
|
|
31
|
+
class="ulu-facets__more-facets"
|
|
32
|
+
:class="classes.moreFacets"
|
|
33
|
+
:clickOutsideCloses="false"
|
|
34
|
+
:closeOnEscape="false"
|
|
35
|
+
:transitionHeight="true"
|
|
36
|
+
>
|
|
37
|
+
<template #trigger="{ isOpen }">
|
|
38
|
+
{{ isOpen ? "View Less" : "Show More" }}
|
|
39
|
+
</template>
|
|
40
|
+
<template #default>
|
|
41
|
+
<UluFacetsList
|
|
42
|
+
:children="group.children.slice(maxVisible)"
|
|
43
|
+
:groupUid="group.uid"
|
|
44
|
+
:groupName="group.name"
|
|
45
|
+
:type="group.multiple ? 'checkbox' : 'radio'"
|
|
46
|
+
:compact="compact"
|
|
47
|
+
:model-value="selectedUids(group)"
|
|
48
|
+
@facet-change="emit('facet-change', $event)"
|
|
49
|
+
/>
|
|
50
|
+
</template>
|
|
51
|
+
</UluCollapsible>
|
|
52
|
+
</template>
|
|
53
|
+
</UluCollapsible>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<script setup>
|
|
58
|
+
import UluFacetsList from "./UluFacetsList.vue";
|
|
59
|
+
import UluCollapsible from "../../collapsible/UluCollapsible.vue";
|
|
60
|
+
|
|
61
|
+
defineProps({
|
|
62
|
+
/**
|
|
63
|
+
* An object of classes to apply to the component.
|
|
64
|
+
*/
|
|
65
|
+
classes: {
|
|
66
|
+
type: Object,
|
|
67
|
+
default: () => ({})
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* The maximum number of facets to show before showing the "More" button.
|
|
71
|
+
*/
|
|
72
|
+
maxVisible: {
|
|
73
|
+
type: Number,
|
|
74
|
+
default: 5
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* An array of facet groups to display.
|
|
78
|
+
*/
|
|
79
|
+
facets: {
|
|
80
|
+
type: Array,
|
|
81
|
+
default: () => []
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* Whether to use compact modifier on selectable menu
|
|
85
|
+
*/
|
|
86
|
+
compact: Boolean,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const emit = defineEmits(['facet-change']);
|
|
90
|
+
|
|
91
|
+
const selectedUids = (group) => {
|
|
92
|
+
if (group.multiple) {
|
|
93
|
+
return group.children.filter(c => c.selected).map(c => c.uid);
|
|
94
|
+
}
|
|
95
|
+
return group.children.find(c => c.selected)?.uid || '';
|
|
96
|
+
};
|
|
97
|
+
</script>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="classes.container">
|
|
3
|
+
<div v-for="group in facets" :key="group.uid" :class="classes.group">
|
|
4
|
+
<UluPopover
|
|
5
|
+
:classes="{
|
|
6
|
+
trigger: classes.trigger,
|
|
7
|
+
content: classes.content
|
|
8
|
+
}
|
|
9
|
+
">
|
|
10
|
+
<template #trigger>
|
|
11
|
+
<slot name="trigger" :group="group" :label="selectedLabel(group)">
|
|
12
|
+
<span>{{ group.name }}: <strong>{{ selectedLabel(group) }}</strong></span>
|
|
13
|
+
</slot>
|
|
14
|
+
<UluIcon :class="classes.triggerIcon" icon="fas fa-chevron-down" />
|
|
15
|
+
</template>
|
|
16
|
+
<template #default="{ close }">
|
|
17
|
+
<UluSelectableMenu
|
|
18
|
+
:legend="group.name"
|
|
19
|
+
:type="group.multiple ? 'checkbox' : 'radio'"
|
|
20
|
+
:options="getMenuOptions(group)"
|
|
21
|
+
:model-value="selectedUids(group)"
|
|
22
|
+
@update:model-value="onFilterChange(group, $event, close)"
|
|
23
|
+
:hideInputs="hideInputs"
|
|
24
|
+
/>
|
|
25
|
+
</template>
|
|
26
|
+
</UluPopover>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script setup>
|
|
32
|
+
import UluPopover from '../../../plugins/popovers/UluPopover.vue';
|
|
33
|
+
import UluSelectableMenu from '../../forms/UluSelectableMenu.vue';
|
|
34
|
+
import UluIcon from '../../elements/UluIcon.vue';
|
|
35
|
+
|
|
36
|
+
const props = defineProps({
|
|
37
|
+
/**
|
|
38
|
+
* An array of facet groups to display.
|
|
39
|
+
*/
|
|
40
|
+
facets: {
|
|
41
|
+
type: Array,
|
|
42
|
+
default: () => []
|
|
43
|
+
},
|
|
44
|
+
/**
|
|
45
|
+
* An object of classes to apply to the component.
|
|
46
|
+
*/
|
|
47
|
+
classes: {
|
|
48
|
+
type: Object,
|
|
49
|
+
default: () => ({
|
|
50
|
+
trigger: "button",
|
|
51
|
+
triggerIcon: "button__icon"
|
|
52
|
+
// content: null,
|
|
53
|
+
// container: null,
|
|
54
|
+
// group: null
|
|
55
|
+
})
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* If true, the input elements will be visually hidden.
|
|
59
|
+
*/
|
|
60
|
+
hideInputs: Boolean
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const emit = defineEmits(['facet-change']);
|
|
64
|
+
|
|
65
|
+
const getMenuOptions = (group) => {
|
|
66
|
+
if (group.multiple) {
|
|
67
|
+
return group.children;
|
|
68
|
+
}
|
|
69
|
+
return [{ label: `All ${group.name}s`, uid: '' }, ...group.children];
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const selectedUids = (group) => {
|
|
73
|
+
if (group.multiple) {
|
|
74
|
+
return group.children.filter(c => c.selected).map(c => c.uid);
|
|
75
|
+
}
|
|
76
|
+
return group.children.find(c => c.selected)?.uid || '';
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const selectedLabel = (group) => {
|
|
80
|
+
const selectedItems = group.children.filter(c => c.selected);
|
|
81
|
+
const count = selectedItems.length;
|
|
82
|
+
|
|
83
|
+
if (count === 0) {
|
|
84
|
+
return 'All';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (group.multiple) {
|
|
88
|
+
if (count === 1) {
|
|
89
|
+
return selectedItems[0].label;
|
|
90
|
+
}
|
|
91
|
+
return `${count} selected`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return selectedItems[0].label;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
function onFilterChange(group, value, closePopover) {
|
|
98
|
+
if (group.multiple) {
|
|
99
|
+
const selectedUids = new Set(value);
|
|
100
|
+
group.children.forEach(facet => {
|
|
101
|
+
const shouldBeSelected = selectedUids.has(facet.uid);
|
|
102
|
+
if (facet.selected !== shouldBeSelected) {
|
|
103
|
+
emit('facet-change', {
|
|
104
|
+
groupUid: group.uid,
|
|
105
|
+
facetUid: facet.uid,
|
|
106
|
+
selected: shouldBeSelected
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
} else {
|
|
111
|
+
const selectedUid = value;
|
|
112
|
+
group.children.forEach(facet => {
|
|
113
|
+
const shouldBeSelected = facet.uid === selectedUid;
|
|
114
|
+
if (facet.selected !== shouldBeSelected) {
|
|
115
|
+
emit('facet-change', {
|
|
116
|
+
groupUid: group.uid,
|
|
117
|
+
facetUid: facet.uid,
|
|
118
|
+
selected: shouldBeSelected
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
closePopover();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
</script>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="facets-dropdown-filters">
|
|
3
|
+
<div
|
|
4
|
+
class="facets-dropdown-filters__group"
|
|
5
|
+
v-for="group in facets"
|
|
6
|
+
:key="group.uid"
|
|
7
|
+
>
|
|
8
|
+
<label :for="`facet-dropdown-${group.uid}`" class="facets-dropdown-filters__label">
|
|
9
|
+
{{ group.name }}
|
|
10
|
+
</label>
|
|
11
|
+
<select
|
|
12
|
+
:id="`facet-dropdown-${group.uid}`"
|
|
13
|
+
class="facets-dropdown-filters__select"
|
|
14
|
+
@change="onFilterChange(group, $event)"
|
|
15
|
+
>
|
|
16
|
+
<option value="">All {{ group.name }}s</option>
|
|
17
|
+
<option
|
|
18
|
+
v-for="option in group.children"
|
|
19
|
+
:key="option.uid"
|
|
20
|
+
:value="option.uid"
|
|
21
|
+
:selected="option.selected"
|
|
22
|
+
>
|
|
23
|
+
{{ option.label }}
|
|
24
|
+
</option>
|
|
25
|
+
</select>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script setup>
|
|
31
|
+
const props = defineProps({
|
|
32
|
+
facets: {
|
|
33
|
+
type: Array,
|
|
34
|
+
default: () => []
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const emit = defineEmits(['facet-change']);
|
|
39
|
+
|
|
40
|
+
function onFilterChange(group, event) {
|
|
41
|
+
const selectedUid = event.target.value;
|
|
42
|
+
|
|
43
|
+
const currentlySelected = group.children.find(c => c.selected);
|
|
44
|
+
if (currentlySelected?.uid === selectedUid) return;
|
|
45
|
+
|
|
46
|
+
group.children.forEach(facet => {
|
|
47
|
+
const shouldBeSelected = facet.uid === selectedUid;
|
|
48
|
+
if (facet.selected !== shouldBeSelected) {
|
|
49
|
+
emit('facet-change', {
|
|
50
|
+
groupUid: group.uid,
|
|
51
|
+
facetUid: facet.uid,
|
|
52
|
+
selected: shouldBeSelected
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
</script>
|
|
58
|
+
|
|
59
|
+
<style lang="scss">
|
|
60
|
+
.facets-dropdown-filters {
|
|
61
|
+
display: flex;
|
|
62
|
+
gap: 1rem;
|
|
63
|
+
align-items: center;
|
|
64
|
+
flex-wrap: wrap;
|
|
65
|
+
}
|
|
66
|
+
.facets-dropdown-filters__group {
|
|
67
|
+
display: flex;
|
|
68
|
+
gap: 0.5rem;
|
|
69
|
+
align-items: center;
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="facets-header-layout">
|
|
3
|
+
<div class="facets-header-layout__header">
|
|
4
|
+
<slot name="header"></slot>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="facets-header-layout__main">
|
|
7
|
+
<slot name="main"></slot>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup>
|
|
13
|
+
// This component is purely for layout, no logic needed.
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<style lang="scss">
|
|
17
|
+
.facets-header-layout__header {
|
|
18
|
+
display: flex;
|
|
19
|
+
gap: 1rem;
|
|
20
|
+
align-items: center;
|
|
21
|
+
margin-bottom: 1.5rem;
|
|
22
|
+
flex-wrap: wrap;
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
@@ -1,39 +1,69 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<label
|
|
16
|
-
class="UluFacets__facet-label"
|
|
17
|
-
:for="facetCheckboxId(facet)"
|
|
18
|
-
>
|
|
19
|
-
{{ facet.label }}
|
|
20
|
-
</label>
|
|
21
|
-
</li>
|
|
22
|
-
</ul>
|
|
2
|
+
<UluSelectableMenu
|
|
3
|
+
class="ulu-facets__facet-list"
|
|
4
|
+
:legend="groupUid"
|
|
5
|
+
:type="type"
|
|
6
|
+
:options="menuOptions"
|
|
7
|
+
:compact="compact"
|
|
8
|
+
:model-value="modelValue"
|
|
9
|
+
@update:model-value="handleChange"
|
|
10
|
+
>
|
|
11
|
+
<template #default="{ option }">
|
|
12
|
+
{{ option.label }} <span v-if="option.count !== undefined">({{ option.count }})</span>
|
|
13
|
+
</template>
|
|
14
|
+
</UluSelectableMenu>
|
|
23
15
|
</template>
|
|
24
16
|
|
|
25
|
-
<script>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
<script setup>
|
|
18
|
+
import { computed } from 'vue';
|
|
19
|
+
import UluSelectableMenu from '../../forms/UluSelectableMenu.vue';
|
|
20
|
+
|
|
21
|
+
const props = defineProps({
|
|
22
|
+
groupUid: String,
|
|
23
|
+
groupName: String,
|
|
24
|
+
children: Array,
|
|
25
|
+
type: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: 'checkbox',
|
|
28
|
+
},
|
|
29
|
+
compact: Boolean,
|
|
30
|
+
modelValue: [String, Array],
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const emit = defineEmits(['facet-change']);
|
|
34
|
+
|
|
35
|
+
const menuOptions = computed(() => {
|
|
36
|
+
if (props.type === 'radio') {
|
|
37
|
+
return [{ label: `All ${props.groupName}s`, uid: '' }, ...props.children];
|
|
38
|
+
}
|
|
39
|
+
return props.children;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
function handleChange(value) {
|
|
43
|
+
if (props.type === 'radio') {
|
|
44
|
+
const selectedUid = value;
|
|
45
|
+
props.children.forEach(facet => {
|
|
46
|
+
const shouldBeSelected = facet.uid === selectedUid;
|
|
47
|
+
if (facet.selected !== shouldBeSelected) {
|
|
48
|
+
emit('facet-change', {
|
|
49
|
+
groupUid: props.groupUid,
|
|
50
|
+
facetUid: facet.uid,
|
|
51
|
+
selected: shouldBeSelected
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
const selectedUids = new Set(value);
|
|
57
|
+
props.children.forEach(facet => {
|
|
58
|
+
const shouldBeSelected = selectedUids.has(facet.uid);
|
|
59
|
+
if (facet.selected !== shouldBeSelected) {
|
|
60
|
+
emit('facet-change', {
|
|
61
|
+
groupUid: props.groupUid,
|
|
62
|
+
facetUid: facet.uid,
|
|
63
|
+
selected: shouldBeSelected
|
|
64
|
+
});
|
|
36
65
|
}
|
|
37
|
-
}
|
|
66
|
+
});
|
|
38
67
|
}
|
|
39
|
-
|
|
68
|
+
}
|
|
69
|
+
</script>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="facets-results">
|
|
3
|
+
<transition-group
|
|
4
|
+
v-if="items.length"
|
|
5
|
+
:tag="tag"
|
|
6
|
+
:name="transitionName"
|
|
7
|
+
class="facets-results__list"
|
|
8
|
+
:class="classes.list"
|
|
9
|
+
>
|
|
10
|
+
<li
|
|
11
|
+
class="facets-results__item"
|
|
12
|
+
:class="classes.item"
|
|
13
|
+
v-for="(item, index) in items"
|
|
14
|
+
:key="item.id || index"
|
|
15
|
+
>
|
|
16
|
+
<slot name="item" :item="item" :index="index"></slot>
|
|
17
|
+
</li>
|
|
18
|
+
</transition-group>
|
|
19
|
+
<div v-else class="facets-results__empty">
|
|
20
|
+
<slot name="empty">
|
|
21
|
+
<p>No matching items found.</p>
|
|
22
|
+
</slot>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script setup>
|
|
28
|
+
defineProps({
|
|
29
|
+
items: {
|
|
30
|
+
type: Array,
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
tag: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: 'ul'
|
|
36
|
+
},
|
|
37
|
+
transitionName: {
|
|
38
|
+
type: String,
|
|
39
|
+
default: 'facets-fade'
|
|
40
|
+
},
|
|
41
|
+
classes: {
|
|
42
|
+
type: Object,
|
|
43
|
+
default: () => ({})
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<style lang="scss">
|
|
49
|
+
.facets-results__list {
|
|
50
|
+
list-style: none;
|
|
51
|
+
padding: 0;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.facets-fade-enter-active,
|
|
55
|
+
.facets-fade-leave-active {
|
|
56
|
+
transition: opacity 0.25s ease;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.facets-fade-enter-from,
|
|
60
|
+
.facets-fade-leave-to {
|
|
61
|
+
opacity: 0;
|
|
62
|
+
}
|
|
63
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="
|
|
2
|
+
<div class="ulu-facets__keyword-search">
|
|
3
3
|
<label :class="classes.searchLabel" :for="id">
|
|
4
4
|
<strong>Search</strong>
|
|
5
5
|
</label>
|
|
@@ -10,58 +10,35 @@
|
|
|
10
10
|
type="text"
|
|
11
11
|
:placeholder="placeholder"
|
|
12
12
|
>
|
|
13
|
-
<!-- <button
|
|
14
|
-
v-if="value"
|
|
15
|
-
:class="classes.searchClear"
|
|
16
|
-
@click="clear"
|
|
17
|
-
:aria-label="classes.searchClearIcon ? 'Clear Search' : false"
|
|
18
|
-
type="button"
|
|
19
|
-
>
|
|
20
|
-
<span
|
|
21
|
-
v-if="classes.searchClearIcon"
|
|
22
|
-
:class="classes.searchClearIcon"
|
|
23
|
-
aria-hidden="true"
|
|
24
|
-
></span>
|
|
25
|
-
<span v-else>
|
|
26
|
-
Clear
|
|
27
|
-
</span>
|
|
28
|
-
</button> -->
|
|
29
13
|
</div>
|
|
30
14
|
</template>
|
|
31
15
|
|
|
32
|
-
<script>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
placeholder: {
|
|
40
|
-
type: String,
|
|
41
|
-
default: "Keywords…"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
data() {
|
|
45
|
-
return {
|
|
46
|
-
id: `facet-view-keyword-${ ++uid }`
|
|
47
|
-
}
|
|
16
|
+
<script setup>
|
|
17
|
+
import { computed } from 'vue';
|
|
18
|
+
|
|
19
|
+
const props = defineProps({
|
|
20
|
+
classes: {
|
|
21
|
+
type: Object,
|
|
22
|
+
default: () => ({})
|
|
48
23
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
24
|
+
modelValue: String,
|
|
25
|
+
placeholder: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: "Keywords…"
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const emit = defineEmits(['update:modelValue']);
|
|
32
|
+
|
|
33
|
+
let uid = 0;
|
|
34
|
+
const id = `facet-view-keyword-${++uid}`;
|
|
35
|
+
|
|
36
|
+
const localValue = computed({
|
|
37
|
+
get() {
|
|
38
|
+
return props.modelValue;
|
|
58
39
|
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// this.value = null;
|
|
62
|
-
// this.applied = false;
|
|
63
|
-
// this.$emit("search", null);
|
|
64
|
-
}
|
|
40
|
+
set(val) {
|
|
41
|
+
emit('update:modelValue', val);
|
|
65
42
|
}
|
|
66
|
-
}
|
|
67
|
-
</script>
|
|
43
|
+
});
|
|
44
|
+
</script>
|