@leaflink/stash 42.5.0 → 42.5.2
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/README.md +24 -3
- package/dist/ActionsDropdown.js +15 -20
- package/dist/ActionsDropdown.js.map +1 -1
- package/dist/AddressSelect.js +34 -45
- package/dist/AddressSelect.js.map +1 -1
- package/dist/Alert.js +11 -13
- package/dist/Alert.js.map +1 -1
- package/dist/AppNavigationItem.js +4 -6
- package/dist/AppNavigationItem.js.map +1 -1
- package/dist/AppTopbar.js +13 -15
- package/dist/AppTopbar.js.map +1 -1
- package/dist/ButtonGroup.js +12 -14
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/CardMedia.js +9 -11
- package/dist/CardMedia.js.map +1 -1
- package/dist/Carousel.js +41 -44
- package/dist/Carousel.js.map +1 -1
- package/dist/Checkbox.js +9 -11
- package/dist/Checkbox.js.map +1 -1
- package/dist/ChevronToggle.js +2 -4
- package/dist/ChevronToggle.js.map +1 -1
- package/dist/Chip.js +4 -6
- package/dist/Chip.js.map +1 -1
- package/dist/ContextSwitcher.js +12 -17
- package/dist/ContextSwitcher.js.map +1 -1
- package/dist/Copy.js +19 -24
- package/dist/Copy.js.map +1 -1
- package/dist/CurrencyInput.js +8 -13
- package/dist/CurrencyInput.js.map +1 -1
- package/dist/DataView.js +48 -59
- package/dist/DataView.js.map +1 -1
- package/dist/DataViewFilters.js +87 -97
- package/dist/DataViewFilters.js.map +1 -1
- package/dist/DataViewSortButton.js +14 -18
- package/dist/DataViewSortButton.js.map +1 -1
- package/dist/DataViewToolbar.js +12 -14
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DatePicker.js +8 -18
- package/dist/DatePicker.js.map +1 -1
- package/dist/Dialog.js +6 -9
- package/dist/Dialog.js.map +1 -1
- package/dist/Dropdown.js +15 -20
- package/dist/Dropdown.js.map +1 -1
- package/dist/EmptyState.js +10 -13
- package/dist/EmptyState.js.map +1 -1
- package/dist/Field.js +3 -6
- package/dist/Field.js.map +1 -1
- package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js → Field.vue_vue_type_script_setup_true_lang-475832fe.js} +2 -2
- package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js.map → Field.vue_vue_type_script_setup_true_lang-475832fe.js.map} +1 -1
- package/dist/FileUpload.js +27 -30
- package/dist/FileUpload.js.map +1 -1
- package/dist/FilterChip.js +10 -13
- package/dist/FilterChip.js.map +1 -1
- package/dist/FilterDrawerItem.js +5 -8
- package/dist/FilterDrawerItem.js.map +1 -1
- package/dist/FilterDropdown.js +73 -88
- package/dist/FilterDropdown.js.map +1 -1
- package/dist/FilterSelect.js +15 -18
- package/dist/FilterSelect.js.map +1 -1
- package/dist/Filters.js +67 -78
- package/dist/Filters.js.map +1 -1
- package/dist/HttpError.js +4 -7
- package/dist/HttpError.js.map +1 -1
- package/dist/Icon.js +236 -14
- package/dist/Icon.js.map +1 -1
- package/dist/Icon.vue.d.ts +2 -2
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js +11 -0
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js.map +1 -0
- package/dist/IconLabel.js +4 -6
- package/dist/IconLabel.js.map +1 -1
- package/dist/Illustration.js +6 -8
- package/dist/Illustration.js.map +1 -1
- package/dist/Image.js +39 -49
- package/dist/Image.js.map +1 -1
- package/dist/InlineEdit.js +10 -12
- package/dist/InlineEdit.js.map +1 -1
- package/dist/Input.js +50 -55
- package/dist/Input.js.map +1 -1
- package/dist/InputOptions.js +20 -29
- package/dist/InputOptions.js.map +1 -1
- package/dist/Label.js +1 -4
- package/dist/Label.js.map +1 -1
- package/dist/LicenseChip.js +7 -9
- package/dist/LicenseChip.js.map +1 -1
- package/dist/ListItem.js +11 -13
- package/dist/ListItem.js.map +1 -1
- package/dist/ListView.js +47 -58
- package/dist/ListView.js.map +1 -1
- package/dist/Metric.js +6 -8
- package/dist/Metric.js.map +1 -1
- package/dist/Modal.js +16 -19
- package/dist/Modal.js.map +1 -1
- package/dist/Modals.js +16 -26
- package/dist/Modals.js.map +1 -1
- package/dist/ModalsPlugin.js +12 -22
- package/dist/ModalsPlugin.js.map +1 -1
- package/dist/ObfuscateText.js +7 -9
- package/dist/ObfuscateText.js.map +1 -1
- package/dist/PageNavigation.js +25 -29
- package/dist/PageNavigation.js.map +1 -1
- package/dist/Paginate.js +29 -31
- package/dist/Paginate.js.map +1 -1
- package/dist/QuickAction.js +13 -15
- package/dist/QuickAction.js.map +1 -1
- package/dist/RadioGroup.js +86 -89
- package/dist/RadioGroup.js.map +1 -1
- package/dist/SearchBar.js +18 -20
- package/dist/SearchBar.js.map +1 -1
- package/dist/Select.js +13 -23
- package/dist/Select.js.map +1 -1
- package/dist/SelectStatus.js +26 -36
- package/dist/SelectStatus.js.map +1 -1
- package/dist/Step.js +19 -21
- package/dist/Step.js.map +1 -1
- package/dist/Switch.js +8 -10
- package/dist/Switch.js.map +1 -1
- package/dist/Tab.js +25 -30
- package/dist/Tab.js.map +1 -1
- package/dist/Table.js +19 -21
- package/dist/Table.js.map +1 -1
- package/dist/TableCell.js +21 -22
- package/dist/TableCell.js.map +1 -1
- package/dist/TableHeaderCell.js +4 -4
- package/dist/TableHeaderRow.js +7 -9
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableRow.js +22 -24
- package/dist/TableRow.js.map +1 -1
- package/dist/Tabs.js +11 -16
- package/dist/Tabs.js.map +1 -1
- package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js} +3 -3
- package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js.map → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js.map} +1 -1
- package/dist/Textarea.js +10 -13
- package/dist/Textarea.js.map +1 -1
- package/dist/Toast.js +8 -10
- package/dist/Toast.js.map +1 -1
- package/dist/Toasts.js +14 -25
- package/dist/Toasts.js.map +1 -1
- package/dist/ToastsPlugin.js +14 -25
- package/dist/ToastsPlugin.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/index.js +53 -62
- package/dist/index.js.map +1 -1
- package/dist/locale.js +12 -15
- package/dist/locale.js.map +1 -1
- package/dist/{searchFuzzy-13c124f8.js → searchFuzzy-74a7de1c.js} +2 -2
- package/dist/{searchFuzzy-13c124f8.js.map → searchFuzzy-74a7de1c.js.map} +1 -1
- package/dist/storage.js +6 -11
- package/dist/storage.js.map +1 -1
- package/dist/tailwind-base.d.ts +1 -0
- package/dist/tailwind-base.js +1 -0
- package/dist/tailwind-base.js.map +1 -1
- package/dist/tooltip.js +21 -26
- package/dist/tooltip.js.map +1 -1
- package/dist/useGoogleMaps.js +91 -226
- package/dist/useGoogleMaps.js.map +1 -1
- package/dist/useModals.js +21 -31
- package/dist/useModals.js.map +1 -1
- package/dist/useSearch.js +17 -22
- package/dist/useSearch.js.map +1 -1
- package/dist/useToasts.js +25 -36
- package/dist/useToasts.js.map +1 -1
- package/dist/useValidation.js +79 -108
- package/dist/useValidation.js.map +1 -1
- package/dist/utils/calculateElementOverflow.js +9 -14
- package/dist/utils/calculateElementOverflow.js.map +1 -1
- package/dist/utils/createQueryString.js +9 -15
- package/dist/utils/createQueryString.js.map +1 -1
- package/dist/utils/helpers.js +46 -59
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/i18n.js +17 -20
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/searchFuzzy.js +7 -12
- package/dist/utils/searchFuzzy.js.map +1 -1
- package/dist/utils/storage.js +10 -15
- package/dist/utils/storage.js.map +1 -1
- package/dist/viewable.js +26 -34
- package/dist/viewable.js.map +1 -1
- package/package.json +2 -4
- package/tailwind-base.ts +1 -0
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js +0 -243
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js.map +0 -1
- package/dist/_MapCache-65811284.js +0 -188
- package/dist/_MapCache-65811284.js.map +0 -1
- package/dist/_Uint8Array-06e4d083.js +0 -66
- package/dist/_Uint8Array-06e4d083.js.map +0 -1
- package/dist/_baseAssignValue-dd1499b4.js +0 -22
- package/dist/_baseAssignValue-dd1499b4.js.map +0 -1
- package/dist/_baseIsEqual-d594c87f.js +0 -171
- package/dist/_baseIsEqual-d594c87f.js.map +0 -1
- package/dist/_createCompounder-ae01a723.js +0 -245
- package/dist/_createCompounder-ae01a723.js.map +0 -1
- package/dist/_getAllKeys-5e735d41.js +0 -44
- package/dist/_getAllKeys-5e735d41.js.map +0 -1
- package/dist/_getPrototype-3e6fccd6.js +0 -7
- package/dist/_getPrototype-3e6fccd6.js.map +0 -1
- package/dist/_getTag-4db47fa6.js +0 -47
- package/dist/_getTag-4db47fa6.js.map +0 -1
- package/dist/_initCloneObject-161353b9.js +0 -88
- package/dist/_initCloneObject-161353b9.js.map +0 -1
- package/dist/_overArg-6d920d99.js +0 -9
- package/dist/_overArg-6d920d99.js.map +0 -1
- package/dist/capitalize-667d9f60.js +0 -42
- package/dist/capitalize-667d9f60.js.map +0 -1
- package/dist/cloneDeep-5bc375b0.js +0 -146
- package/dist/cloneDeep-5bc375b0.js.map +0 -1
- package/dist/debounce-6aca1ca9.js +0 -86
- package/dist/debounce-6aca1ca9.js.map +0 -1
- package/dist/get-27d90892.js +0 -66
- package/dist/get-27d90892.js.map +0 -1
- package/dist/identity-452d03fd.js +0 -20
- package/dist/identity-452d03fd.js.map +0 -1
- package/dist/isArrayLike-09233e52.js +0 -61
- package/dist/isArrayLike-09233e52.js.map +0 -1
- package/dist/isEmpty-2fbad344.js +0 -23
- package/dist/isEmpty-2fbad344.js.map +0 -1
- package/dist/isEqual-fca467fb.js +0 -8
- package/dist/isEqual-fca467fb.js.map +0 -1
- package/dist/isObjectLike-54341556.js +0 -39
- package/dist/isObjectLike-54341556.js.map +0 -1
- package/dist/isPlainObject-55c7f916.js +0 -16
- package/dist/isPlainObject-55c7f916.js.map +0 -1
- package/dist/merge-b14fad9d.js +0 -124
- package/dist/merge-b14fad9d.js.map +0 -1
- package/dist/toString-7d5bf363.js +0 -29
- package/dist/toString-7d5bf363.js.map +0 -1
- package/dist/uniqueId-847efe53.js +0 -10
- package/dist/uniqueId-847efe53.js.map +0 -1
package/dist/FilterChip.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { defineComponent as u, useCssModule as f, computed as h, openBlock as s, createBlock as w, normalizeClass as r, unref as t, withCtx as v, createElementVNode as b, renderSlot as C, createElementBlock as
|
|
1
|
+
import { defineComponent as u, useCssModule as f, computed as h, openBlock as s, createBlock as w, normalizeClass as r, unref as t, withCtx as v, createElementVNode as b, renderSlot as C, createElementBlock as n, toDisplayString as k, createCommentVNode as i, createVNode as y } from "vue";
|
|
2
2
|
import { t as c } from "./locale.js";
|
|
3
3
|
import D from "./Chip.js";
|
|
4
4
|
import x from "./Icon.js";
|
|
5
5
|
import { _ as B } from "./_plugin-vue_export-helper-dad06003.js";
|
|
6
|
-
import "
|
|
7
|
-
import "./isObjectLike-54341556.js";
|
|
8
|
-
import "./toString-7d5bf363.js";
|
|
9
|
-
import "./_MapCache-65811284.js";
|
|
6
|
+
import "lodash-es/get";
|
|
10
7
|
import "./colors-13e95ebf.js";
|
|
11
8
|
import "./utils/colorScheme.js";
|
|
12
|
-
import "
|
|
13
|
-
import "./uniqueId-847efe53.js";
|
|
9
|
+
import "lodash-es/uniqueId";
|
|
14
10
|
import "./index-79ce320f.js";
|
|
11
|
+
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
15
12
|
const F = { class: "tw-flex tw-items-center" }, O = ["aria-label", "title"], R = { key: 1 }, S = /* @__PURE__ */ u({
|
|
16
13
|
__name: "FilterChip",
|
|
17
14
|
props: {
|
|
@@ -51,14 +48,14 @@ const F = { class: "tw-flex tw-items-center" }, O = ["aria-label", "title"], R =
|
|
|
51
48
|
default: v(() => [
|
|
52
49
|
b("div", F, [
|
|
53
50
|
C(_.$slots, "default"),
|
|
54
|
-
a.value ? (s(),
|
|
51
|
+
a.value ? (s(), n("span", {
|
|
55
52
|
key: 0,
|
|
56
53
|
"data-test": "span|filter-count",
|
|
57
54
|
class: r(t(o)["filter-count"]),
|
|
58
55
|
"aria-label": t(c)("ll.numberOfActiveFilters"),
|
|
59
56
|
title: t(c)("ll.numberOfActiveFilters")
|
|
60
|
-
}, k(e.filterCount), 11, O)) :
|
|
61
|
-
e.hasDropdown ? (s(),
|
|
57
|
+
}, k(e.filterCount), 11, O)) : i("", !0),
|
|
58
|
+
e.hasDropdown ? (s(), n("span", R, [
|
|
62
59
|
y(x, {
|
|
63
60
|
"data-test": "icon|caret",
|
|
64
61
|
name: "caret-down",
|
|
@@ -69,7 +66,7 @@ const F = { class: "tw-flex tw-items-center" }, O = ["aria-label", "title"], R =
|
|
|
69
66
|
}
|
|
70
67
|
])
|
|
71
68
|
}, null, 8, ["class"])
|
|
72
|
-
])) :
|
|
69
|
+
])) : i("", !0)
|
|
73
70
|
])
|
|
74
71
|
]),
|
|
75
72
|
_: 3
|
|
@@ -86,8 +83,8 @@ const F = { class: "tw-flex tw-items-center" }, O = ["aria-label", "title"], R =
|
|
|
86
83
|
"caret-rotate": "_caret-rotate_1o49d_105"
|
|
87
84
|
}, g = {
|
|
88
85
|
$style: V
|
|
89
|
-
},
|
|
86
|
+
}, P = /* @__PURE__ */ B(S, [["__cssModules", g]]);
|
|
90
87
|
export {
|
|
91
|
-
|
|
88
|
+
P as default
|
|
92
89
|
};
|
|
93
90
|
//# sourceMappingURL=FilterChip.js.map
|
package/dist/FilterChip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterChip.js","sources":["../src/components/FilterChip/FilterChip.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Chip from '../Chip/Chip.vue';\n import Icon from '../Icon/Icon.vue';\n\n export interface FilterChipProps {\n /**\n * Used for conditionally rendering filter count chip\n */\n filterCount?: number;\n\n /**\n * Use for conditionally rendering caret\n */\n hasDropdown?: boolean;\n\n /**\n * Used for styling when `hasDropdown` is true\n */\n isDropdownOpen?: boolean;\n\n /**\n * Used for conditionally rendering close icon and exposing remove event\n */\n isRemovable?: boolean;\n\n /**\n * Used for conditionally applying styles\n */\n isSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<FilterChipProps>(), {\n filterCount: undefined,\n hasDropdown: false,\n isDropdownOpen: false,\n isRemovable: false,\n isSelected: false,\n });\n\n const emit =\n defineEmits<{\n (e: 'click'): void;\n (e: 'remove'): void;\n }>();\n\n const classes = useCssModule();\n const hasFilterCount = computed(() => Number(props.filterCount) > 0);\n\n function handleClick() {\n emit('click');\n }\n\n function handleRemove() {\n emit('remove');\n }\n</script>\n\n<template>\n <Chip\n should-override-colors\n tabindex=\"0\"\n class=\"stash-filter-chip tw-leading-5 tw-text-sm tw-font-normal tw-text-ice-900 tw-normal-case\"\n radius=\"pill\"\n :class=\"[\n classes.root,\n {\n [classes['is-selected']]: props.isSelected,\n [classes['is-removable']]: props.isRemovable,\n [classes['is-dropdown-open']]: props.isDropdownOpen,\n [classes['has-dropdown']]: props.hasDropdown,\n [classes['has-filter-count']]: hasFilterCount,\n },\n ]\"\n :is-removable=\"props.isSelected && props.isRemovable && !props.hasDropdown\"\n @click=\"handleClick\"\n @remove=\"handleRemove\"\n >\n <div class=\"tw-flex tw-items-center\">\n <!-- @slot default -->\n <slot></slot>\n\n <span\n v-if=\"hasFilterCount\"\n data-test=\"span|filter-count\"\n :class=\"classes['filter-count']\"\n :aria-label=\"t('ll.numberOfActiveFilters')\"\n :title=\"t('ll.numberOfActiveFilters')\"\n >\n {{ props.filterCount }}\n </span>\n\n <span v-if=\"props.hasDropdown\">\n <Icon\n data-test=\"icon|caret\"\n name=\"caret-down\"\n :class=\"[\n classes.caret,\n {\n [classes['caret-rotate']]: props.isDropdownOpen,\n },\n ]\"\n />\n </span>\n </div>\n </Chip>\n</template>\n\n<style module>\n /**\n many styles declared here are overriding styles defined in Chip\n */\n .root {\n background-color: var(--color-white);\n border: 1px solid var(--color-ice);\n cursor: pointer;\n height: var(--ll-space-4);\n padding-left: var(--ll-space-2);\n padding-right: var(--ll-space-2);\n }\n\n .root:focus {\n box-shadow: 0 0 0 4px rgb(0 123 255 / 15%);\n outline: none;\n }\n\n .root:hover {\n background-color: var(--color-blue-100);\n border: 1px solid var(--color-blue-500);\n }\n\n .root.is-selected {\n color: var(--color-white);\n background-color: var(--color-blue-500);\n border: 1px solid var(--color-blue-500);\n }\n\n .root.is-selected:hover {\n color: var(--color-white);\n background-color: var(--color-blue-700);\n border: 1px solid var(--color-blue-700);\n }\n\n .root.is-selected.is-removable {\n background-color: var(--color-blue-500);\n }\n\n .root.is-selected.is-removable :global(.stash-chip__remove-button) {\n margin-right: -1px;\n padding-right: var(--ll-space-2);\n }\n\n .root.is-selected.is-removable :global(.stash-chip__remove-button):hover {\n background-color: var(--color-blue-700);\n }\n\n .root.is-selected.has-filter-count:hover {\n background-color: var(--color-blue-700);\n color: var(--color-white);\n }\n\n .root.has-dropdown {\n padding-right: var(--ll-space-1);\n }\n\n .root.has-filter-count:hover {\n background-color: var(--color-blue-100);\n color: var(--color-ice-900);\n }\n\n .root label {\n cursor: pointer;\n }\n\n .filter-count {\n display: inline-flex;\n align-items: center;\n border-radius: 5em;\n height: 16px;\n padding: 0 8px;\n margin-left: var(--ll-space-1);\n font-size: 10px;\n font-weight: bold;\n background-color: var(--color-blue-500);\n color: var(--color-white);\n }\n\n .is-selected .filter-count {\n background-color: var(--color-blue-700);\n }\n\n .is-selected:hover .filter-count {\n background-color: var(--color-white);\n color: var(--color-blue-700);\n }\n\n .is-selected.is-removable .filter-count {\n background-color: var(--color-blue-700);\n color: var(--color-white);\n }\n\n .caret {\n color: var(--color-ice-700);\n margin-left: var(--ll-space-1);\n transform: rotate(0);\n transition: all 0.5s;\n }\n\n .is-selected .caret {\n color: var(--color-white);\n }\n\n .caret-rotate {\n transform: rotate(-180deg);\n }\n</style>\n"],"names":["classes","useCssModule","hasFilterCount","computed","props","handleClick","emit","handleRemove"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterChip.js","sources":["../src/components/FilterChip/FilterChip.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Chip from '../Chip/Chip.vue';\n import Icon from '../Icon/Icon.vue';\n\n export interface FilterChipProps {\n /**\n * Used for conditionally rendering filter count chip\n */\n filterCount?: number;\n\n /**\n * Use for conditionally rendering caret\n */\n hasDropdown?: boolean;\n\n /**\n * Used for styling when `hasDropdown` is true\n */\n isDropdownOpen?: boolean;\n\n /**\n * Used for conditionally rendering close icon and exposing remove event\n */\n isRemovable?: boolean;\n\n /**\n * Used for conditionally applying styles\n */\n isSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<FilterChipProps>(), {\n filterCount: undefined,\n hasDropdown: false,\n isDropdownOpen: false,\n isRemovable: false,\n isSelected: false,\n });\n\n const emit =\n defineEmits<{\n (e: 'click'): void;\n (e: 'remove'): void;\n }>();\n\n const classes = useCssModule();\n const hasFilterCount = computed(() => Number(props.filterCount) > 0);\n\n function handleClick() {\n emit('click');\n }\n\n function handleRemove() {\n emit('remove');\n }\n</script>\n\n<template>\n <Chip\n should-override-colors\n tabindex=\"0\"\n class=\"stash-filter-chip tw-leading-5 tw-text-sm tw-font-normal tw-text-ice-900 tw-normal-case\"\n radius=\"pill\"\n :class=\"[\n classes.root,\n {\n [classes['is-selected']]: props.isSelected,\n [classes['is-removable']]: props.isRemovable,\n [classes['is-dropdown-open']]: props.isDropdownOpen,\n [classes['has-dropdown']]: props.hasDropdown,\n [classes['has-filter-count']]: hasFilterCount,\n },\n ]\"\n :is-removable=\"props.isSelected && props.isRemovable && !props.hasDropdown\"\n @click=\"handleClick\"\n @remove=\"handleRemove\"\n >\n <div class=\"tw-flex tw-items-center\">\n <!-- @slot default -->\n <slot></slot>\n\n <span\n v-if=\"hasFilterCount\"\n data-test=\"span|filter-count\"\n :class=\"classes['filter-count']\"\n :aria-label=\"t('ll.numberOfActiveFilters')\"\n :title=\"t('ll.numberOfActiveFilters')\"\n >\n {{ props.filterCount }}\n </span>\n\n <span v-if=\"props.hasDropdown\">\n <Icon\n data-test=\"icon|caret\"\n name=\"caret-down\"\n :class=\"[\n classes.caret,\n {\n [classes['caret-rotate']]: props.isDropdownOpen,\n },\n ]\"\n />\n </span>\n </div>\n </Chip>\n</template>\n\n<style module>\n /**\n many styles declared here are overriding styles defined in Chip\n */\n .root {\n background-color: var(--color-white);\n border: 1px solid var(--color-ice);\n cursor: pointer;\n height: var(--ll-space-4);\n padding-left: var(--ll-space-2);\n padding-right: var(--ll-space-2);\n }\n\n .root:focus {\n box-shadow: 0 0 0 4px rgb(0 123 255 / 15%);\n outline: none;\n }\n\n .root:hover {\n background-color: var(--color-blue-100);\n border: 1px solid var(--color-blue-500);\n }\n\n .root.is-selected {\n color: var(--color-white);\n background-color: var(--color-blue-500);\n border: 1px solid var(--color-blue-500);\n }\n\n .root.is-selected:hover {\n color: var(--color-white);\n background-color: var(--color-blue-700);\n border: 1px solid var(--color-blue-700);\n }\n\n .root.is-selected.is-removable {\n background-color: var(--color-blue-500);\n }\n\n .root.is-selected.is-removable :global(.stash-chip__remove-button) {\n margin-right: -1px;\n padding-right: var(--ll-space-2);\n }\n\n .root.is-selected.is-removable :global(.stash-chip__remove-button):hover {\n background-color: var(--color-blue-700);\n }\n\n .root.is-selected.has-filter-count:hover {\n background-color: var(--color-blue-700);\n color: var(--color-white);\n }\n\n .root.has-dropdown {\n padding-right: var(--ll-space-1);\n }\n\n .root.has-filter-count:hover {\n background-color: var(--color-blue-100);\n color: var(--color-ice-900);\n }\n\n .root label {\n cursor: pointer;\n }\n\n .filter-count {\n display: inline-flex;\n align-items: center;\n border-radius: 5em;\n height: 16px;\n padding: 0 8px;\n margin-left: var(--ll-space-1);\n font-size: 10px;\n font-weight: bold;\n background-color: var(--color-blue-500);\n color: var(--color-white);\n }\n\n .is-selected .filter-count {\n background-color: var(--color-blue-700);\n }\n\n .is-selected:hover .filter-count {\n background-color: var(--color-white);\n color: var(--color-blue-700);\n }\n\n .is-selected.is-removable .filter-count {\n background-color: var(--color-blue-700);\n color: var(--color-white);\n }\n\n .caret {\n color: var(--color-ice-700);\n margin-left: var(--ll-space-1);\n transform: rotate(0);\n transition: all 0.5s;\n }\n\n .is-selected .caret {\n color: var(--color-white);\n }\n\n .caret-rotate {\n transform: rotate(-180deg);\n }\n</style>\n"],"names":["classes","useCssModule","hasFilterCount","computed","props","handleClick","emit","handleRemove"],"mappings":";;;;;;;;;;;;;;;;;;;;;;iBAgDQA,IAAUC,KACVC,IAAiBC,EAAS,MAAM,OAAOC,EAAM,WAAW,IAAI,CAAC;AAEnE,aAASC,IAAc;AACrB,MAAAC,EAAK,OAAO;AAAA,IACd;AAEA,aAASC,IAAe;AACtB,MAAAD,EAAK,QAAQ;AAAA,IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/FilterDrawerItem.js
CHANGED
|
@@ -3,21 +3,18 @@ import { t as m } from "./locale.js";
|
|
|
3
3
|
import F from "./Chip.js";
|
|
4
4
|
import { D as I } from "./DataViewFilters.keys-c80ffabe.js";
|
|
5
5
|
import C from "./Icon.js";
|
|
6
|
-
import "
|
|
7
|
-
import "./isObjectLike-54341556.js";
|
|
8
|
-
import "./toString-7d5bf363.js";
|
|
9
|
-
import "./_MapCache-65811284.js";
|
|
6
|
+
import "lodash-es/get";
|
|
10
7
|
import "./colors-13e95ebf.js";
|
|
11
8
|
import "./utils/colorScheme.js";
|
|
12
9
|
import "./_plugin-vue_export-helper-dad06003.js";
|
|
13
|
-
import "
|
|
14
|
-
import "./uniqueId-847efe53.js";
|
|
10
|
+
import "lodash-es/uniqueId";
|
|
15
11
|
import "./index-79ce320f.js";
|
|
12
|
+
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
16
13
|
const g = { class: "tw-py-4" }, k = { class: "tw-flex tw-justify-between tw-items-center tw-self-stretch" }, y = { class: "tw-flex tw-flex-col tw-items-start" }, D = {
|
|
17
14
|
key: 0,
|
|
18
15
|
class: "tw-text-xs",
|
|
19
16
|
"data-test": "description"
|
|
20
|
-
}, E = { class: "tw-inline-flex tw-items-center tw-gap-6" },
|
|
17
|
+
}, E = { class: "tw-inline-flex tw-items-center tw-gap-6" }, z = /* @__PURE__ */ w({
|
|
21
18
|
__name: "FilterDrawerItem",
|
|
22
19
|
props: {
|
|
23
20
|
group: {},
|
|
@@ -64,6 +61,6 @@ const g = { class: "tw-py-4" }, k = { class: "tw-flex tw-justify-between tw-item
|
|
|
64
61
|
}
|
|
65
62
|
});
|
|
66
63
|
export {
|
|
67
|
-
|
|
64
|
+
z as default
|
|
68
65
|
};
|
|
69
66
|
//# sourceMappingURL=FilterDrawerItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterDrawerItem.js","sources":["../src/components/FilterDrawerItem/FilterDrawerItem.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, inject } from 'vue';\n\n import { t } from '../../locale';\n import Chip from '../Chip/Chip.vue';\n import { DATA_VIEW_FILTERS_UTILS_INJECTION } from '../DataViewFilters/DataViewFilters.keys';\n import Icon from '../Icon/Icon.vue';\n\n export interface FilterDrawerItemProps {\n /** The name of a filter group */\n group: string;\n title: string;\n description?: string;\n }\n const props = defineProps<FilterDrawerItemProps>();\n\n export interface FilterDrawerItemEmits {\n (e: 'navigate');\n }\n const emit = defineEmits<FilterDrawerItemEmits>();\n\n const dataViewFiltersUtils = inject(DATA_VIEW_FILTERS_UTILS_INJECTION.key);\n\n if (!dataViewFiltersUtils?.useFiltersInstance) {\n throw new Error(\n 'FilterDropdown must be used within a <DataViewFilters> that receives an instance of useFilters().',\n );\n }\n\n const { activeFiltersCounts } = dataViewFiltersUtils.useFiltersInstance;\n\n const activeCount = computed(() => activeFiltersCounts.value[props.group]);\n</script>\n\n<template>\n <div class=\"tw-py-4\">\n <button\n class=\"tw-w-full tw-outline-none focus:tw-outline-blue-500 tw-border-b tw-border-ice-500\"\n @click=\"emit('navigate')\"\n >\n <div class=\"tw-flex tw-justify-between tw-items-center tw-self-stretch\">\n <div class=\"tw-flex tw-flex-col tw-items-start\">\n <h4>{{ props.title }}</h4>\n <div v-if=\"props.description\" class=\"tw-text-xs\" data-test=\"description\">\n {{ props.description }}\n </div>\n </div>\n <div class=\"tw-inline-flex tw-items-center tw-gap-6\">\n <Chip\n v-if=\"activeCount\"\n color=\"blue\"\n radius=\"pill\"\n shade=\"main\"\n :aria-label=\"t('ll.numberOfActiveFilters')\"\n :title=\"t('ll.numberOfActiveFilters')\"\n >\n {{ activeCount }}\n </Chip>\n <Icon name=\"chevron-right\" />\n </div>\n </div>\n </button>\n </div>\n</template>\n"],"names":["dataViewFiltersUtils","inject","DATA_VIEW_FILTERS_UTILS_INJECTION","activeFiltersCounts","activeCount","computed","props"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterDrawerItem.js","sources":["../src/components/FilterDrawerItem/FilterDrawerItem.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, inject } from 'vue';\n\n import { t } from '../../locale';\n import Chip from '../Chip/Chip.vue';\n import { DATA_VIEW_FILTERS_UTILS_INJECTION } from '../DataViewFilters/DataViewFilters.keys';\n import Icon from '../Icon/Icon.vue';\n\n export interface FilterDrawerItemProps {\n /** The name of a filter group */\n group: string;\n title: string;\n description?: string;\n }\n const props = defineProps<FilterDrawerItemProps>();\n\n export interface FilterDrawerItemEmits {\n (e: 'navigate');\n }\n const emit = defineEmits<FilterDrawerItemEmits>();\n\n const dataViewFiltersUtils = inject(DATA_VIEW_FILTERS_UTILS_INJECTION.key);\n\n if (!dataViewFiltersUtils?.useFiltersInstance) {\n throw new Error(\n 'FilterDropdown must be used within a <DataViewFilters> that receives an instance of useFilters().',\n );\n }\n\n const { activeFiltersCounts } = dataViewFiltersUtils.useFiltersInstance;\n\n const activeCount = computed(() => activeFiltersCounts.value[props.group]);\n</script>\n\n<template>\n <div class=\"tw-py-4\">\n <button\n class=\"tw-w-full tw-outline-none focus:tw-outline-blue-500 tw-border-b tw-border-ice-500\"\n @click=\"emit('navigate')\"\n >\n <div class=\"tw-flex tw-justify-between tw-items-center tw-self-stretch\">\n <div class=\"tw-flex tw-flex-col tw-items-start\">\n <h4>{{ props.title }}</h4>\n <div v-if=\"props.description\" class=\"tw-text-xs\" data-test=\"description\">\n {{ props.description }}\n </div>\n </div>\n <div class=\"tw-inline-flex tw-items-center tw-gap-6\">\n <Chip\n v-if=\"activeCount\"\n color=\"blue\"\n radius=\"pill\"\n shade=\"main\"\n :aria-label=\"t('ll.numberOfActiveFilters')\"\n :title=\"t('ll.numberOfActiveFilters')\"\n >\n {{ activeCount }}\n </Chip>\n <Icon name=\"chevron-right\" />\n </div>\n </div>\n </button>\n </div>\n</template>\n"],"names":["dataViewFiltersUtils","inject","DATA_VIEW_FILTERS_UTILS_INJECTION","activeFiltersCounts","activeCount","computed","props"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;iBAqBQA,IAAuBC,EAAOC,EAAkC,GAAG;AAErE,QAAA,EAACF,KAAA,QAAAA,EAAsB;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAIE,UAAA,EAAE,qBAAAG,EAAoB,IAAIH,EAAqB,oBAE/CI,IAAcC,EAAS,MAAMF,EAAoB,MAAMG,EAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/FilterDropdown.js
CHANGED
|
@@ -1,49 +1,34 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import "
|
|
1
|
+
import { defineComponent as L, inject as b, ref as y, computed as O, openBlock as u, createBlock as k, withCtx as s, createVNode as w, unref as o, createTextVNode as f, toDisplayString as m, createElementVNode as d, renderSlot as R, Transition as W, createElementBlock as j, createCommentVNode as x } from "vue";
|
|
2
|
+
import J from "lodash-es/throttle";
|
|
3
|
+
import { t as C } from "./locale.js";
|
|
4
|
+
import D from "./Button.js";
|
|
5
|
+
import "lodash-es/cloneDeep";
|
|
6
|
+
import "lodash-es/uniqueId";
|
|
7
|
+
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
7
8
|
import "./Paginate.vue_used_vue_type_style_index_0_lang.module-e579235f.js";
|
|
8
9
|
import { D as F } from "./DataView.vue_used_vue_type_style_index_0_lang.module-d878ca9a.js";
|
|
9
|
-
import { D as
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import "
|
|
13
|
-
import "./toString-7d5bf363.js";
|
|
14
|
-
import "./get-27d90892.js";
|
|
10
|
+
import { D as z } from "./DataViewFilters.keys-c80ffabe.js";
|
|
11
|
+
import G from "./Dropdown.js";
|
|
12
|
+
import $ from "./FilterChip.js";
|
|
13
|
+
import "lodash-es/get";
|
|
15
14
|
import "./Button.vue_used_vue_type_style_index_0_lang.module-b77978d6.js";
|
|
16
15
|
import "./_plugin-vue_export-helper-dad06003.js";
|
|
17
|
-
import "./uniqueId-847efe53.js";
|
|
18
|
-
import "./index-79ce320f.js";
|
|
19
16
|
import "./constants.js";
|
|
20
17
|
import "./clickoutside.js";
|
|
21
18
|
import "./utils/calculateElementOverflow.js";
|
|
22
19
|
import "./utils/helpers.js";
|
|
23
|
-
import "
|
|
24
|
-
import "
|
|
25
|
-
import "
|
|
26
|
-
import "./_getPrototype-3e6fccd6.js";
|
|
27
|
-
import "./_overArg-6d920d99.js";
|
|
20
|
+
import "lodash-es/camelCase";
|
|
21
|
+
import "lodash-es/isFinite";
|
|
22
|
+
import "lodash-es/isPlainObject";
|
|
28
23
|
import "./Icon.js";
|
|
24
|
+
import "./index-79ce320f.js";
|
|
29
25
|
import "./Chip.js";
|
|
30
26
|
import "./colors-13e95ebf.js";
|
|
31
27
|
import "./utils/colorScheme.js";
|
|
32
|
-
|
|
33
|
-
function q(d, l, e) {
|
|
34
|
-
var s = !0, o = !0;
|
|
35
|
-
if (typeof d != "function")
|
|
36
|
-
throw new TypeError($);
|
|
37
|
-
return z(e) && (s = "leading" in e ? !!e.leading : s, o = "trailing" in e ? !!e.trailing : o), J(d, l, {
|
|
38
|
-
leading: s,
|
|
39
|
-
maxWait: l,
|
|
40
|
-
trailing: o
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
const H = { class: "tw-flex tw-flex-col tw-rounded tw-h-full" }, K = { class: "tw-grow tw-rounded-t tw-relative tw-overflow-hidden" }, M = {
|
|
28
|
+
const q = { class: "tw-flex tw-flex-col tw-rounded tw-h-full" }, H = { class: "tw-grow tw-rounded-t tw-relative tw-overflow-hidden" }, K = {
|
|
44
29
|
key: 0,
|
|
45
30
|
class: "tw-absolute tw-bottom-0 tw-left-0 tw-right-0 tw-z-10 tw-h-[20px] tw-bg-scroll-shadow tw-pointer-events-none"
|
|
46
|
-
},
|
|
31
|
+
}, M = { class: "tw-bg-ice-100 tw-border-t-ice-200 tw-border-b-ice-100 tw-border-x-ice-100 tw-border-solid tw-border tw-p-3.5 tw-flex tw-justify-end tw-rounded-b tw-gap-6" }, yt = /* @__PURE__ */ L({
|
|
47
32
|
__name: "FilterDropdown",
|
|
48
33
|
props: {
|
|
49
34
|
label: {},
|
|
@@ -52,44 +37,44 @@ const H = { class: "tw-flex tw-flex-col tw-rounded tw-h-full" }, K = { class: "t
|
|
|
52
37
|
} }
|
|
53
38
|
},
|
|
54
39
|
emits: ["reset", "dismiss"],
|
|
55
|
-
setup(
|
|
56
|
-
const
|
|
57
|
-
if (!(
|
|
40
|
+
setup(T, { emit: p }) {
|
|
41
|
+
const r = T, { isLoading: h } = b(F.key, F.defaults), l = b(z.key);
|
|
42
|
+
if (!(l != null && l.useFiltersInstance))
|
|
58
43
|
throw new Error(
|
|
59
44
|
"FilterDropdown must be used within a <DataViewFilters> that receives an instance of useFilters()."
|
|
60
45
|
);
|
|
61
|
-
const { applyFilters:
|
|
46
|
+
const { applyFilters: I, resetFilterGroup: E, activeFiltersCounts: v, undoWorkingFilters: _ } = l.useFiltersInstance, i = y(), c = O(() => {
|
|
62
47
|
var t;
|
|
63
|
-
return (t =
|
|
48
|
+
return (t = i.value) == null ? void 0 : t.isActive;
|
|
64
49
|
});
|
|
65
|
-
function N() {
|
|
66
|
-
var r;
|
|
67
|
-
const t = f.value;
|
|
68
|
-
(r = a.value) == null || r.toggle(), t && (_(), l("dismiss"));
|
|
69
|
-
}
|
|
70
50
|
function S() {
|
|
51
|
+
var e;
|
|
52
|
+
const t = c.value;
|
|
53
|
+
(e = i.value) == null || e.toggle(), t && (_(), p("dismiss"));
|
|
54
|
+
}
|
|
55
|
+
function A() {
|
|
71
56
|
var t;
|
|
72
|
-
|
|
57
|
+
E(r.group), p("reset"), (t = i.value) == null || t.dismiss();
|
|
73
58
|
}
|
|
74
|
-
async function
|
|
75
|
-
var
|
|
76
|
-
const { preventDismiss: t } = await ((
|
|
77
|
-
t || (
|
|
59
|
+
async function N() {
|
|
60
|
+
var e, a;
|
|
61
|
+
const { preventDismiss: t } = await ((e = r.onApply) == null ? void 0 : e.call(r)) || I() || {};
|
|
62
|
+
t || (a = i.value) == null || a.dismiss();
|
|
78
63
|
}
|
|
79
|
-
function
|
|
80
|
-
_(),
|
|
64
|
+
function V() {
|
|
65
|
+
_(), p("dismiss");
|
|
81
66
|
}
|
|
82
|
-
const
|
|
83
|
-
t.target && (t.target.scrollTop > 0 ?
|
|
67
|
+
const n = y(!1), g = J((t) => {
|
|
68
|
+
t.target && (t.target.scrollTop > 0 ? n.value = !0 : n.value = !1);
|
|
84
69
|
}, 500);
|
|
85
|
-
function
|
|
70
|
+
function B() {
|
|
86
71
|
setTimeout(() => {
|
|
87
|
-
|
|
72
|
+
n.value = !1;
|
|
88
73
|
}, 2e3);
|
|
89
74
|
}
|
|
90
|
-
return (t,
|
|
75
|
+
return (t, e) => (u(), k(G, {
|
|
91
76
|
ref_key: "dropdownRef",
|
|
92
|
-
ref:
|
|
77
|
+
ref: i,
|
|
93
78
|
align: "left",
|
|
94
79
|
class: "stash-filter-dropdown",
|
|
95
80
|
"data-test": "stash-filter-dropdown",
|
|
@@ -97,61 +82,61 @@ const H = { class: "tw-flex tw-flex-col tw-rounded tw-h-full" }, K = { class: "t
|
|
|
97
82
|
"close-manually": "",
|
|
98
83
|
"content-class": "tw-w-full tw-max-w-[600px] tw-h-full tw-max-h-[400px]",
|
|
99
84
|
offset: { y: 6 },
|
|
100
|
-
onDismiss:
|
|
85
|
+
onDismiss: V
|
|
101
86
|
}, {
|
|
102
|
-
toggle:
|
|
103
|
-
|
|
87
|
+
toggle: s(() => [
|
|
88
|
+
w($, {
|
|
104
89
|
class: "tw-rounded-full",
|
|
105
90
|
"has-dropdown": "",
|
|
106
|
-
"is-dropdown-open":
|
|
107
|
-
"filter-count":
|
|
108
|
-
"is-selected":
|
|
109
|
-
onClick:
|
|
91
|
+
"is-dropdown-open": c.value,
|
|
92
|
+
"filter-count": o(v)[r.group],
|
|
93
|
+
"is-selected": c.value,
|
|
94
|
+
onClick: S
|
|
110
95
|
}, {
|
|
111
|
-
default:
|
|
112
|
-
|
|
96
|
+
default: s(() => [
|
|
97
|
+
f(m(r.label), 1)
|
|
113
98
|
]),
|
|
114
99
|
_: 1
|
|
115
100
|
}, 8, ["is-dropdown-open", "filter-count", "is-selected"])
|
|
116
101
|
]),
|
|
117
|
-
default:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
102
|
+
default: s(() => [
|
|
103
|
+
d("div", q, [
|
|
104
|
+
d("div", H, [
|
|
105
|
+
d("div", {
|
|
121
106
|
class: "tw-p-3.5 tw-h-full tw-overflow-auto",
|
|
122
|
-
onScroll:
|
|
123
|
-
(...
|
|
124
|
-
onScrollend:
|
|
107
|
+
onScroll: e[0] || (e[0] = //@ts-ignore
|
|
108
|
+
(...a) => o(g) && o(g)(...a)),
|
|
109
|
+
onScrollend: B
|
|
125
110
|
}, [
|
|
126
|
-
|
|
111
|
+
R(t.$slots, "default")
|
|
127
112
|
], 32),
|
|
128
|
-
|
|
129
|
-
default:
|
|
130
|
-
|
|
113
|
+
w(W, { name: "fade" }, {
|
|
114
|
+
default: s(() => [
|
|
115
|
+
n.value ? (u(), j("div", K)) : x("", !0)
|
|
131
116
|
]),
|
|
132
117
|
_: 1
|
|
133
118
|
})
|
|
134
119
|
]),
|
|
135
|
-
|
|
136
|
-
|
|
120
|
+
d("footer", M, [
|
|
121
|
+
o(v)[r.group] ? (u(), k(D, {
|
|
137
122
|
key: 0,
|
|
138
123
|
secondary: "",
|
|
139
124
|
class: "tw-min-w-[100px]",
|
|
140
|
-
disabled:
|
|
141
|
-
onClick:
|
|
125
|
+
disabled: o(h),
|
|
126
|
+
onClick: A
|
|
142
127
|
}, {
|
|
143
|
-
default:
|
|
144
|
-
|
|
128
|
+
default: s(() => [
|
|
129
|
+
f(m(o(C)("ll.reset")), 1)
|
|
145
130
|
]),
|
|
146
131
|
_: 1
|
|
147
|
-
}, 8, ["disabled"])) :
|
|
148
|
-
|
|
132
|
+
}, 8, ["disabled"])) : x("", !0),
|
|
133
|
+
w(D, {
|
|
149
134
|
class: "tw-min-w-[100px]",
|
|
150
|
-
disabled:
|
|
151
|
-
onClick:
|
|
135
|
+
disabled: o(h),
|
|
136
|
+
onClick: N
|
|
152
137
|
}, {
|
|
153
|
-
default:
|
|
154
|
-
|
|
138
|
+
default: s(() => [
|
|
139
|
+
f(m(o(C)("ll.apply")), 1)
|
|
155
140
|
]),
|
|
156
141
|
_: 1
|
|
157
142
|
}, 8, ["disabled"])
|
|
@@ -163,6 +148,6 @@ const H = { class: "tw-flex tw-flex-col tw-rounded tw-h-full" }, K = { class: "t
|
|
|
163
148
|
}
|
|
164
149
|
});
|
|
165
150
|
export {
|
|
166
|
-
|
|
151
|
+
yt as default
|
|
167
152
|
};
|
|
168
153
|
//# sourceMappingURL=FilterDropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterDropdown.js","sources":["../
|
|
1
|
+
{"version":3,"file":"FilterDropdown.js","sources":["../src/components/FilterDropdown/FilterDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import throttle from 'lodash-es/throttle';\n import { computed, inject, ref } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import { DATA_VIEW_FILTERS_UTILS_INJECTION } from '../DataViewFilters/DataViewFilters.keys';\n import type { OnApplyFilters } from '../DataViewFilters/DataViewFilters.types';\n import Dropdown from '../Dropdown/Dropdown.vue';\n import FilterChip from '../FilterChip/FilterChip.vue';\n\n export interface FilterDropdownProps {\n label: string;\n /** The name of a filter group */\n group: string;\n onApply?: OnApplyFilters;\n }\n const props = withDefaults(defineProps<FilterDropdownProps>(), {\n activeFilterCount: 0,\n onApply: () => undefined,\n });\n\n const emit =\n defineEmits<{\n (e: 'reset'): void;\n (e: 'dismiss'): void;\n }>();\n\n const { isLoading: isDataViewLoading } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const dataViewFiltersUtils = inject(DATA_VIEW_FILTERS_UTILS_INJECTION.key);\n\n if (!dataViewFiltersUtils?.useFiltersInstance) {\n throw new Error(\n 'FilterDropdown must be used within a <DataViewFilters> that receives an instance of useFilters().',\n );\n }\n\n const { applyFilters, resetFilterGroup, activeFiltersCounts, undoWorkingFilters } =\n dataViewFiltersUtils.useFiltersInstance;\n\n const dropdownRef = ref<InstanceType<typeof Dropdown>>();\n const isOpen = computed(() => dropdownRef.value?.isActive);\n\n function onToggleButtonClick() {\n const wasOpen = isOpen.value;\n\n dropdownRef.value?.toggle();\n\n if (wasOpen) {\n undoWorkingFilters();\n emit('dismiss');\n }\n }\n\n function handleResetClick() {\n resetFilterGroup(props.group);\n emit('reset');\n dropdownRef.value?.dismiss();\n }\n\n async function handleApplyClick() {\n const { preventDismiss } = (await props.onApply?.()) || applyFilters() || {};\n\n if (!preventDismiss) {\n dropdownRef.value?.dismiss();\n }\n }\n\n function onDismiss() {\n undoWorkingFilters();\n emit('dismiss');\n }\n\n const showShadow = ref(false);\n const onScroll = throttle((event: Event) => {\n if (!event.target) return;\n\n if ((event.target as HTMLElement).scrollTop > 0) {\n showShadow.value = true;\n } else {\n showShadow.value = false;\n }\n }, 500);\n\n function onScrollEnd() {\n setTimeout(() => {\n showShadow.value = false;\n }, 2000);\n }\n</script>\n\n<template>\n <Dropdown\n ref=\"dropdownRef\"\n align=\"left\"\n class=\"stash-filter-dropdown\"\n data-test=\"stash-filter-dropdown\"\n fluid-content\n close-manually\n content-class=\"tw-w-full tw-max-w-[600px] tw-h-full tw-max-h-[400px]\"\n :offset=\"{ y: 6 }\"\n @dismiss=\"onDismiss\"\n >\n <template #toggle>\n <FilterChip\n class=\"tw-rounded-full\"\n has-dropdown\n :is-dropdown-open=\"isOpen\"\n :filter-count=\"activeFiltersCounts[props.group]\"\n :is-selected=\"isOpen\"\n @click=\"onToggleButtonClick\"\n >\n {{ props.label }}\n </FilterChip>\n </template>\n <template #default>\n <div class=\"tw-flex tw-flex-col tw-rounded tw-h-full\">\n <div class=\"tw-grow tw-rounded-t tw-relative tw-overflow-hidden\">\n <div class=\"tw-p-3.5 tw-h-full tw-overflow-auto\" @scroll=\"onScroll\" @scrollend=\"onScrollEnd\">\n <slot></slot>\n </div>\n <Transition name=\"fade\">\n <div\n v-if=\"showShadow\"\n class=\"\n tw-absolute\n tw-bottom-0\n tw-left-0\n tw-right-0\n tw-z-10\n tw-h-[20px]\n tw-bg-scroll-shadow\n tw-pointer-events-none\n \"\n ></div>\n </Transition>\n </div>\n\n <footer\n class=\"\n tw-bg-ice-100\n tw-border-t-ice-200\n tw-border-b-ice-100\n tw-border-x-ice-100\n tw-border-solid\n tw-border\n tw-p-3.5\n tw-flex\n tw-justify-end\n tw-rounded-b\n tw-gap-6\n \"\n >\n <Button\n v-if=\"activeFiltersCounts[props.group]\"\n secondary\n class=\"tw-min-w-[100px]\"\n :disabled=\"isDataViewLoading\"\n @click=\"handleResetClick\"\n >\n {{ t('ll.reset') }}\n </Button>\n <Button class=\"tw-min-w-[100px]\" :disabled=\"isDataViewLoading\" @click=\"handleApplyClick\">\n {{ t('ll.apply') }}\n </Button>\n </footer>\n </div>\n </template>\n </Dropdown>\n</template>\n"],"names":["isDataViewLoading","inject","DATA_VIEW_INJECTION","dataViewFiltersUtils","DATA_VIEW_FILTERS_UTILS_INJECTION","applyFilters","resetFilterGroup","activeFiltersCounts","undoWorkingFilters","dropdownRef","ref","isOpen","computed","_a","onToggleButtonClick","wasOpen","emit","handleResetClick","props","handleApplyClick","preventDismiss","_b","onDismiss","showShadow","onScroll","throttle","event","onScrollEnd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BQ,EAAE,WAAWA,MAAsBC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ,GAE/FC,IAAuBF,EAAOG,EAAkC,GAAG;AAErE,QAAA,EAACD,KAAA,QAAAA,EAAsB;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAIJ,UAAM,EAAE,cAAAE,GAAc,kBAAAC,GAAkB,qBAAAC,GAAqB,oBAAAC,MAC3DL,EAAqB,oBAEjBM,IAAcC,KACdC,IAASC,EAAS,MAAA;;AAAM,cAAAC,IAAAJ,EAAY,UAAZ,gBAAAI,EAAmB;AAAA,KAAQ;AAEzD,aAASC,IAAsB;;AAC7B,YAAMC,IAAUJ,EAAO;AAEvB,OAAAE,IAAAJ,EAAY,UAAZ,QAAAI,EAAmB,UAEfE,MACiBP,KACnBQ,EAAK,SAAS;AAAA,IAElB;AAEA,aAASC,IAAmB;;AAC1B,MAAAX,EAAiBY,EAAM,KAAK,GAC5BF,EAAK,OAAO,IACZH,IAAAJ,EAAY,UAAZ,QAAAI,EAAmB;AAAA,IACrB;AAEA,mBAAeM,IAAmB;;AAC1B,YAAA,EAAE,gBAAAC,MAAoB,QAAMP,IAAAK,EAAM,YAAN,gBAAAL,EAAA,KAAAK,OAAsBb,EAAa,KAAK;AAE1E,MAAKe,MACHC,IAAAZ,EAAY,UAAZ,QAAAY,EAAmB;AAAA,IAEvB;AAEA,aAASC,IAAY;AACA,MAAAd,KACnBQ,EAAK,SAAS;AAAA,IAChB;AAEM,UAAAO,IAAab,EAAI,EAAK,GACtBc,IAAWC,EAAS,CAACC,MAAiB;AAC1C,MAAKA,EAAM,WAENA,EAAM,OAAuB,YAAY,IAC5CH,EAAW,QAAQ,KAEnBA,EAAW,QAAQ;AAAA,OAEpB,GAAG;AAEN,aAASI,IAAc;AACrB,iBAAW,MAAM;AACf,QAAAJ,EAAW,QAAQ;AAAA,SAClB,GAAI;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/FilterSelect.js
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
import { defineComponent as S, computed as p, openBlock as
|
|
1
|
+
import { defineComponent as S, computed as p, openBlock as r, createBlock as $, withCtx as u, createElementVNode as s, createElementBlock as d, withDirectives as f, vModelCheckbox as v, createVNode as _, withKeys as h, createTextVNode as b, toDisplayString as x, unref as C, createCommentVNode as K, Fragment as A, renderList as B } from "vue";
|
|
2
2
|
import { t as E } from "./locale.js";
|
|
3
|
-
import { _ as N } from "./Field.vue_vue_type_script_setup_true_lang-
|
|
3
|
+
import { _ as N } from "./Field.vue_vue_type_script_setup_true_lang-475832fe.js";
|
|
4
4
|
import y from "./FilterChip.js";
|
|
5
|
-
import "
|
|
6
|
-
import "
|
|
7
|
-
import "./toString-7d5bf363.js";
|
|
8
|
-
import "./_MapCache-65811284.js";
|
|
9
|
-
import "./uniqueId-847efe53.js";
|
|
5
|
+
import "lodash-es/get";
|
|
6
|
+
import "lodash-es/uniqueId";
|
|
10
7
|
import "./Label.vue_vue_type_script_setup_true_lang-1d29d98a.js";
|
|
11
8
|
import "./Chip.js";
|
|
12
9
|
import "./colors-13e95ebf.js";
|
|
13
10
|
import "./utils/colorScheme.js";
|
|
14
11
|
import "./Icon.js";
|
|
15
|
-
import "./Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js";
|
|
16
12
|
import "./index-79ce320f.js";
|
|
13
|
+
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
17
14
|
import "./_plugin-vue_export-helper-dad06003.js";
|
|
18
|
-
const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"], U = ["id", "value"], I = ["for"],
|
|
15
|
+
const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"], U = ["id", "value"], I = ["for"], Y = /* @__PURE__ */ S({
|
|
19
16
|
__name: "FilterSelect",
|
|
20
17
|
props: {
|
|
21
18
|
name: {},
|
|
@@ -54,17 +51,17 @@ const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"],
|
|
|
54
51
|
function w() {
|
|
55
52
|
n.value = !n.value;
|
|
56
53
|
}
|
|
57
|
-
return (t, o) => (
|
|
54
|
+
return (t, o) => (r(), $(N, {
|
|
58
55
|
class: "stash-filter-select",
|
|
59
56
|
fieldset: "",
|
|
60
57
|
label: e.label
|
|
61
58
|
}, {
|
|
62
59
|
default: u(() => [
|
|
63
|
-
|
|
64
|
-
e.canSelectAll ? (
|
|
60
|
+
s("div", F, [
|
|
61
|
+
e.canSelectAll ? (r(), d("div", {
|
|
65
62
|
key: `${e.name}--all`
|
|
66
63
|
}, [
|
|
67
|
-
f(
|
|
64
|
+
f(s("input", {
|
|
68
65
|
id: `${e.name}--all`,
|
|
69
66
|
"onUpdate:modelValue": o[0] || (o[0] = (l) => n.value = l),
|
|
70
67
|
class: "sr-only",
|
|
@@ -74,7 +71,7 @@ const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"],
|
|
|
74
71
|
}, null, 8, D), [
|
|
75
72
|
[v, n.value]
|
|
76
73
|
]),
|
|
77
|
-
|
|
74
|
+
s("label", {
|
|
78
75
|
for: `${e.name}--all`
|
|
79
76
|
}, [
|
|
80
77
|
_(y, {
|
|
@@ -89,10 +86,10 @@ const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"],
|
|
|
89
86
|
}, 8, ["is-selected", "onKeypress"])
|
|
90
87
|
], 8, O)
|
|
91
88
|
])) : K("", !0),
|
|
92
|
-
(
|
|
89
|
+
(r(!0), d(A, null, B(e.options, (l) => (r(), d("div", {
|
|
93
90
|
key: i(l)
|
|
94
91
|
}, [
|
|
95
|
-
f(
|
|
92
|
+
f(s("input", {
|
|
96
93
|
id: i(l),
|
|
97
94
|
"onUpdate:modelValue": o[1] || (o[1] = (m) => a.value = m),
|
|
98
95
|
class: "sr-only",
|
|
@@ -102,7 +99,7 @@ const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"],
|
|
|
102
99
|
}, null, 8, U), [
|
|
103
100
|
[v, a.value]
|
|
104
101
|
]),
|
|
105
|
-
|
|
102
|
+
s("label", {
|
|
106
103
|
for: i(l)
|
|
107
104
|
}, [
|
|
108
105
|
_(y, {
|
|
@@ -124,6 +121,6 @@ const F = { class: "tw-flex tw-flex-wrap tw-gap-1.5" }, D = ["id"], O = ["for"],
|
|
|
124
121
|
}
|
|
125
122
|
});
|
|
126
123
|
export {
|
|
127
|
-
|
|
124
|
+
Y as default
|
|
128
125
|
};
|
|
129
126
|
//# sourceMappingURL=FilterSelect.js.map
|
package/dist/FilterSelect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSelect.js","sources":["../src/components/FilterSelect/FilterSelect.vue"],"sourcesContent":["<script lang=\"ts\">\n export * from './FilterSelect.types';\n</script>\n\n<script lang=\"ts\" setup>\n import { computed } from 'vue';\n\n import { t } from '../../locale';\n import Field from '../Field/Field.vue';\n import FilterChip from '../FilterChip/FilterChip.vue';\n import { FilterSelectModelValue, FilterSelectOption } from './FilterSelect.types';\n\n export interface FilterSelectProps {\n /**\n * The name attribute for the `<input>` elements. It is also used as a unique field to differentiate FilterSelect instances.\n */\n name: string;\n\n label: string;\n\n options: FilterSelectOption[];\n\n modelValue: FilterSelectModelValue;\n\n /**\n * When true, this prop adds an \"All\" option for selecting all options.\n */\n canSelectAll?: boolean;\n }\n\n const props = withDefaults(defineProps<FilterSelectProps>(), {\n canSelectAll: false,\n });\n\n const emit =\n defineEmits<{\n (e: 'update:modelValue', value: FilterSelectModelValue): void;\n }>();\n\n /**\n * @see: https://vuejs.org/guide/components/v-model.html#component-v-model\n */\n const selected = computed({\n get() {\n return props.modelValue;\n },\n set(value) {\n emit('update:modelValue', value);\n },\n });\n\n const isAllSelected = computed({\n get() {\n return props.options.length === props.modelValue.length;\n },\n set(isChecked) {\n emit('update:modelValue', isChecked ? props.options.map((option) => option.value) : []);\n },\n });\n\n function getOptionId(option: FilterSelectOption) {\n return `${props.name}--${option.value}`;\n }\n\n function isOptionSelected(option: FilterSelectOption) {\n return props.modelValue.includes(option.value);\n }\n\n function onEnter(enteredValue: FilterSelectOption['value']) {\n const newSelected = selected.value.filter((value) => value !== enteredValue);\n\n if (newSelected.length === selected.value.length) {\n newSelected.push(enteredValue);\n }\n\n selected.value = newSelected;\n }\n\n function onEnterAll() {\n isAllSelected.value = !isAllSelected.value;\n }\n</script>\n\n<template>\n <Field class=\"stash-filter-select\" fieldset :label=\"props.label\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1.5\">\n <div v-if=\"props.canSelectAll\" :key=\"`${props.name}--all`\">\n <input\n :id=\"`${props.name}--all`\"\n v-model=\"isAllSelected\"\n class=\"sr-only\"\n tabindex=\"-1\"\n type=\"checkbox\"\n value=\"all\"\n />\n <label :for=\"`${props.name}--all`\">\n <FilterChip :is-selected=\"isAllSelected\" tabindex=\"0\" @keypress.enter=\"onEnterAll\">\n {{ t('ll.all') }}\n </FilterChip>\n </label>\n </div>\n <div v-for=\"option in props.options\" :key=\"getOptionId(option)\">\n <input\n :id=\"getOptionId(option)\"\n v-model=\"selected\"\n class=\"sr-only\"\n tabindex=\"-1\"\n type=\"checkbox\"\n :value=\"option.value\"\n />\n <label :for=\"getOptionId(option)\">\n <FilterChip :is-selected=\"isOptionSelected(option)\" tabindex=\"0\" @keypress.enter=\"onEnter(option.value)\">\n {{ option.label }}\n </FilterChip>\n </label>\n </div>\n </div>\n </Field>\n</template>\n"],"names":["selected","computed","props","value","emit","isAllSelected","isChecked","option","getOptionId","isOptionSelected","onEnter","enteredValue","newSelected","onEnterAll"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterSelect.js","sources":["../src/components/FilterSelect/FilterSelect.vue"],"sourcesContent":["<script lang=\"ts\">\n export * from './FilterSelect.types';\n</script>\n\n<script lang=\"ts\" setup>\n import { computed } from 'vue';\n\n import { t } from '../../locale';\n import Field from '../Field/Field.vue';\n import FilterChip from '../FilterChip/FilterChip.vue';\n import { FilterSelectModelValue, FilterSelectOption } from './FilterSelect.types';\n\n export interface FilterSelectProps {\n /**\n * The name attribute for the `<input>` elements. It is also used as a unique field to differentiate FilterSelect instances.\n */\n name: string;\n\n label: string;\n\n options: FilterSelectOption[];\n\n modelValue: FilterSelectModelValue;\n\n /**\n * When true, this prop adds an \"All\" option for selecting all options.\n */\n canSelectAll?: boolean;\n }\n\n const props = withDefaults(defineProps<FilterSelectProps>(), {\n canSelectAll: false,\n });\n\n const emit =\n defineEmits<{\n (e: 'update:modelValue', value: FilterSelectModelValue): void;\n }>();\n\n /**\n * @see: https://vuejs.org/guide/components/v-model.html#component-v-model\n */\n const selected = computed({\n get() {\n return props.modelValue;\n },\n set(value) {\n emit('update:modelValue', value);\n },\n });\n\n const isAllSelected = computed({\n get() {\n return props.options.length === props.modelValue.length;\n },\n set(isChecked) {\n emit('update:modelValue', isChecked ? props.options.map((option) => option.value) : []);\n },\n });\n\n function getOptionId(option: FilterSelectOption) {\n return `${props.name}--${option.value}`;\n }\n\n function isOptionSelected(option: FilterSelectOption) {\n return props.modelValue.includes(option.value);\n }\n\n function onEnter(enteredValue: FilterSelectOption['value']) {\n const newSelected = selected.value.filter((value) => value !== enteredValue);\n\n if (newSelected.length === selected.value.length) {\n newSelected.push(enteredValue);\n }\n\n selected.value = newSelected;\n }\n\n function onEnterAll() {\n isAllSelected.value = !isAllSelected.value;\n }\n</script>\n\n<template>\n <Field class=\"stash-filter-select\" fieldset :label=\"props.label\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1.5\">\n <div v-if=\"props.canSelectAll\" :key=\"`${props.name}--all`\">\n <input\n :id=\"`${props.name}--all`\"\n v-model=\"isAllSelected\"\n class=\"sr-only\"\n tabindex=\"-1\"\n type=\"checkbox\"\n value=\"all\"\n />\n <label :for=\"`${props.name}--all`\">\n <FilterChip :is-selected=\"isAllSelected\" tabindex=\"0\" @keypress.enter=\"onEnterAll\">\n {{ t('ll.all') }}\n </FilterChip>\n </label>\n </div>\n <div v-for=\"option in props.options\" :key=\"getOptionId(option)\">\n <input\n :id=\"getOptionId(option)\"\n v-model=\"selected\"\n class=\"sr-only\"\n tabindex=\"-1\"\n type=\"checkbox\"\n :value=\"option.value\"\n />\n <label :for=\"getOptionId(option)\">\n <FilterChip :is-selected=\"isOptionSelected(option)\" tabindex=\"0\" @keypress.enter=\"onEnter(option.value)\">\n {{ option.label }}\n </FilterChip>\n </label>\n </div>\n </div>\n </Field>\n</template>\n"],"names":["selected","computed","props","value","emit","isAllSelected","isChecked","option","getOptionId","isOptionSelected","onEnter","enteredValue","newSelected","onEnterAll"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;iBA0CQA,IAAWC,EAAS;AAAA,MACxB,MAAM;AACJ,eAAOC,EAAM;AAAA,MACf;AAAA,MACA,IAAIC,GAAO;AACT,QAAAC,EAAK,qBAAqBD,CAAK;AAAA,MACjC;AAAA,IAAA,CACD,GAEKE,IAAgBJ,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOC,EAAM,QAAQ,WAAWA,EAAM,WAAW;AAAA,MACnD;AAAA,MACA,IAAII,GAAW;AACR,QAAAF,EAAA,qBAAqBE,IAAYJ,EAAM,QAAQ,IAAI,CAACK,MAAWA,EAAO,KAAK,IAAI,CAAE,CAAA;AAAA,MACxF;AAAA,IAAA,CACD;AAED,aAASC,EAAYD,GAA4B;AAC/C,aAAO,GAAGL,EAAM,IAAI,KAAKK,EAAO,KAAK;AAAA,IACvC;AAEA,aAASE,EAAiBF,GAA4B;AACpD,aAAOL,EAAM,WAAW,SAASK,EAAO,KAAK;AAAA,IAC/C;AAEA,aAASG,EAAQC,GAA2C;AAC1D,YAAMC,IAAcZ,EAAS,MAAM,OAAO,CAACG,MAAUA,MAAUQ,CAAY;AAE3E,MAAIC,EAAY,WAAWZ,EAAS,MAAM,UACxCY,EAAY,KAAKD,CAAY,GAG/BX,EAAS,QAAQY;AAAA,IACnB;AAEA,aAASC,IAAa;AACN,MAAAR,EAAA,QAAQ,CAACA,EAAc;AAAA,IACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|