@leaflink/stash 53.4.5 → 53.4.7
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/AppSidebar.js +43 -41
- package/dist/AppSidebar.js.map +1 -1
- package/dist/AppTopbar.js +1 -1
- package/dist/Copy.js +1 -1
- package/dist/DataTable/index.js +2400 -0
- package/dist/DataTable/index.js.map +1 -0
- package/dist/DataViewFilters.js +1 -1
- package/dist/DataViewFilters.js.map +1 -1
- package/dist/DataViewToolbar.js +139 -125
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DatePicker.js +1114 -1113
- package/dist/DatePicker.js.map +1 -1
- package/dist/Modal.js +104 -90
- package/dist/Modal.js.map +1 -1
- package/dist/MoreActions.js +294 -288
- package/dist/MoreActions.js.map +1 -1
- package/dist/PageNavigation.js +1 -1
- package/dist/RadioGroup.js +69 -62
- package/dist/RadioGroup.js.map +1 -1
- package/dist/Select.js +90 -90
- package/dist/Select.js.map +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +36 -36
- package/dist/Table.js.map +1 -1
- package/dist/Table.vue.d.ts +12 -0
- package/dist/TableCell.js +17 -17
- package/dist/TableCell.js.map +1 -1
- package/dist/TableHeaderCell.js +44 -38
- package/dist/TableHeaderCell.js.map +1 -1
- package/dist/TableHeaderCell.vue.d.ts +10 -0
- package/dist/TableHeaderRow.js +32 -32
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableRow.js +82 -74
- package/dist/TableRow.js.map +1 -1
- package/dist/TableRow.vue.d.ts +9 -2
- package/dist/Tabs.js +2 -2
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js +131 -0
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js.map +1 -0
- package/dist/Thumbnail.js +42 -42
- package/dist/Thumbnail.js.map +1 -1
- package/dist/Toast.vue.d.ts +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js} +2 -2
- package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js.map → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js.map} +1 -1
- package/dist/components.css +1 -1
- package/dist/getContrastingTextColor.d.ts +8 -0
- package/dist/index-t9tXBnql.js +469 -0
- package/dist/{index-DA70nQCT.js.map → index-t9tXBnql.js.map} +1 -1
- package/dist/templateRefNarrowing-CeANDylX.js +22 -0
- package/dist/templateRefNarrowing-CeANDylX.js.map +1 -0
- package/dist/useMediaQuery.d.ts +12 -10
- package/dist/useMediaQuery.js +7 -29
- package/dist/useMediaQuery.js.map +1 -1
- package/dist/useSortable.js +1 -1
- package/dist/utils/getContrastingTextColor.js +36 -24
- package/dist/utils/getContrastingTextColor.js.map +1 -1
- package/package.json +7 -1
- package/types/tanstack-vue-table.d.ts +18 -0
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js +0 -130
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js.map +0 -1
- package/dist/index-DA70nQCT.js +0 -424
package/dist/DataViewFilters.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as B, computed as C, defineComponent as j, useSlots as O, inject as z, provide as J, watch as Q, createBlock as m, openBlock as f, normalizeClass as U, unref as t, withCtx as u, createCommentVNode as p, createElementBlock as Z, mergeProps as $, createElementVNode as A, renderSlot as G, createVNode as I, createTextVNode as k, toDisplayString as w } from "vue";
|
|
2
|
-
import q from "./
|
|
2
|
+
import { a as q } from "./index-t9tXBnql.js";
|
|
3
3
|
import { SCREEN_SIZES as H } from "./constants.js";
|
|
4
4
|
import { t as d } from "./locale.js";
|
|
5
5
|
import { _ as K } from "./Box.vue_vue_type_script_setup_true_lang-dFFZN40_.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataViewFilters.js","sources":["../src/components/DataViewFilters/DataViewFilters.types.ts","../src/components/DataViewFilters/useFilters.ts","../src/components/DataViewFilters/DataViewFilters.vue"],"sourcesContent":["import { UseFiltersReturnType } from './useFilters';\n\n/**\n * A function that is called when the user clicks one of the \"Apply\" buttons in DataViewFilters.\n *\n * A return value of `{ preventDismiss: true }` can be used to prevent the DataViewFilters drawer or a FilterDropdown from closing, such as when some filters have invalid values.\n */\nexport type OnApplyFilters = () => Promise<{ preventDismiss?: boolean } | void> | { preventDismiss?: boolean } | void;\n\nexport enum DrawerStyle {\n /** Displays all groups and their fields without the need for navigating submenus. */\n Cascade = 'cascade',\n /** Displays only group names or fields; navigation between the group names and a submenu of fields is required. */\n Nested = 'nested',\n}\n\nexport type DrawerStyles = `${DrawerStyle}`;\n\nexport interface DataViewFiltersUtilsInjection {\n useFiltersInstance?: UseFiltersReturnType;\n drawerStyle?: DrawerStyles;\n}\n","import cloneDeep from 'lodash-es/cloneDeep';\nimport { computed, ComputedRef, Ref, ref } from 'vue';\n\nimport isDefined from '../../composables/useValidation/utils/isDefined';\nimport DataView from '../DataView/DataView.vue';\n\ntype DataViewInstance = InstanceType<typeof DataView>;\n\n/**\n * Contains metadata and configuration for the filters.\n * @see https://www.typescriptlang.org/docs/handbook/2/mapped-types.html\n */\nexport type UseFiltersSchema<Values extends object, Groups extends string> = {\n [Property in keyof Values]: {\n defaultValue?: Values[Property];\n group?: Groups;\n isActive?: (value: Values[Property]) => boolean;\n };\n};\n\nexport interface UseFiltersArgs<Values extends object, Groups extends string> {\n schema: UseFiltersSchema<Values, Groups>;\n /** A ref for an instance of DataView */\n dataViewRef: Ref<unknown>; // Note: using `Ref<InstanceType<typeof DataView>>` here causes type errors when providing a value for this argument\n}\n\nexport interface UseFiltersReturnType<Values = object, Groups extends string = string> {\n applyFilters: () => void;\n resetAllFilters: () => void;\n resetFilterGroup: (group: string) => void; // Note: group is intentionally not typed as `Groups` since there is no way to pass in a Groups type to UseFiltersReturnType within DataViewFilters.vue\n undoWorkingFilters: () => void;\n activeFiltersCounts: ComputedRef<Record<Groups, number>>;\n totalActiveFiltersCount: ComputedRef<number>;\n appliedFilters: Ref<Values>;\n workingFilters: Ref<Values>;\n}\n\n/**\n * Provides utility functions for working with `DataViewFilters`.\n */\nexport function useFilters<Values extends object, Groups extends string>({\n schema,\n dataViewRef,\n}: UseFiltersArgs<Values, Groups>): UseFiltersReturnType<Values, Groups> {\n const appliedFilters = ref({}) as Ref<Values>;\n const workingFilters = ref({}) as Ref<Values>;\n\n for (const filterName in schema) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n\n const dvRef = dataViewRef as Ref<DataViewInstance>;\n\n /**\n * For when an \"Apply\" button is clicked. It does the following:\n * 1) applies the working filter state\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function applyFilters() {\n appliedFilters.value = cloneDeep(workingFilters.value);\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * For when a \"Reset all\" button is clicked. It does the following:\n * 1) applies the defaultValue filter values to all filters\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function resetAllFilters() {\n for (const filterName in schema) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * For when a \"Reset\" button is clicked. It does the following:\n * 1) applies the defaultValue filter values to the given filter group\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function resetFilterGroup(group: Groups) {\n for (const filterName in schema) {\n if (schema[filterName].group === group) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n }\n\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * Resets the `workingFilters` to match the `appliedFilters`. This can be used when the FilterDrawer or a FilterDropdown is dismissed without clicking \"Reset\" or \"Apply\".\n */\n function undoWorkingFilters() {\n workingFilters.value = cloneDeep(appliedFilters.value);\n }\n\n const activeFiltersCounts = computed(() => {\n const counts = {} as Record<Groups, number>;\n\n for (const filterName in schema) {\n const config = schema[filterName];\n const value = appliedFilters.value[filterName];\n const isActive = config.isActive?.(value) || isDefined(value);\n\n if (isActive && config.group) {\n counts[config.group] = (counts[config.group] ?? 0) + 1;\n }\n }\n\n return counts;\n });\n\n const totalActiveFiltersCount = computed(() => {\n let count = 0;\n\n for (const filterName in schema) {\n const config = schema[filterName];\n const value = appliedFilters.value[filterName];\n const isActive = config.isActive?.(value) || isDefined(value);\n\n if (isActive) {\n count += 1;\n }\n }\n\n return count;\n });\n\n return {\n applyFilters,\n resetAllFilters,\n // @ts-expect-error \"could be instantiated with a different subtype\": TODO: figure out how to resolve the types\n resetFilterGroup,\n undoWorkingFilters,\n activeFiltersCounts,\n totalActiveFiltersCount,\n appliedFilters,\n workingFilters,\n };\n}\n\nexport default useFilters;\n","<script lang=\"ts\">\n export * from './DataViewFilters.keys';\n export * from './DataViewFilters.types';\n export * from './useFilters';\n</script>\n\n<script setup lang=\"ts\">\n import { computed, inject, provide, ref, watch } from 'vue';\n\n import useMediaQuery from '../../composables/useMediaQuery/useMediaQuery';\n import { SCREEN_SIZES } from '../../constants';\n import { t } from '../../locale';\n import Box from '../Box/Box.vue';\n import Button from '../Button/Button.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import FilterChip from '../FilterChip/FilterChip.vue';\n import Icon from '../Icon/Icon.vue';\n import Label from '../Label/Label.vue';\n import Modal, { type ModalProps } from '../Modal/Modal.vue';\n import SearchBar, { SearchBarProps } from '../SearchBar/SearchBar.vue';\n import { DATA_VIEW_FILTERS_UTILS_INJECTION } from './DataViewFilters.keys';\n import type { DrawerStyles, OnApplyFilters } from './DataViewFilters.types';\n import type { UseFiltersReturnType } from './useFilters';\n\n export interface DataViewFiltersProps {\n filtersLabelText?: string;\n /**\n * Props to pass to the `SearchBar` component.\n */\n searchBarProps?: SearchBarProps;\n showSearch?: boolean;\n /** 'cascade' displays all fields within every filter group; 'nested' displays only the group names and requires clicking a group to view its fields. */\n drawerStyle?: DrawerStyles;\n drawerProps?: ModalProps;\n /**\n * @deprecated The `activeGroup` prop is a sufficient replacement for this prop. A falsy `activeGroup` will hide the button and a truthy `activeGroup` will show it (when the `drawerStyle` is 'nested').\n *\n * **Note:** This prop has no effect when using a \"cascade\" `drawerStyle`.\n */\n showDrawerPreviousButton?: boolean;\n /**\n * Required when using filters. This prop should contain the return value of the `useFilters()` composable.\n */\n useFiltersInstance?: UseFiltersReturnType;\n onApply?: OnApplyFilters;\n /**\n * The name of the active filter group. The active filter group is determined by which instance of FilterDropdown or FilterDrawerItem is open.\n *\n * **Note:** This prop is required when using a \"nested\" `drawerStyle`, but has no effect when using a \"cascade\" `drawerStyle`.\n */\n activeGroup?: string;\n }\n\n export interface DataViewFiltersSlots {\n default?: () => unknown;\n drawer?: () => unknown;\n 'filters-label'?: () => unknown;\n }\n\n const props = withDefaults(defineProps<DataViewFiltersProps>(), {\n filtersLabelText: t('ll.filterBy'),\n isLoading: false,\n drawerStyle: 'cascade',\n drawerProps: undefined,\n searchBarProps: undefined,\n showDrawerPreviousButton: false,\n showSearch: true,\n useFiltersInstance: undefined,\n onApply: undefined,\n activeGroup: undefined,\n });\n\n const emit = defineEmits<{\n /** When the drawer is opened */\n (e: 'open-drawer'): void;\n /** When the drawer is dismissed */\n (e: 'dismiss'): void;\n /** When the \"Previous\" button in the header is clicked */\n (e: 'previous'): void;\n /** When the \"Reset\" button is clicked while viewing a filter group */\n (e: 'reset-group'): void;\n /** When one of the \"Reset All\" buttons is clicked */\n (e: 'reset-all'): void;\n }>();\n\n const slots = defineSlots<DataViewFiltersSlots>();\n\n const isDesktop = useMediaQuery(`(min-width: ${SCREEN_SIZES.lg})`);\n const isViewingGroupsMenu = computed(() => props.drawerStyle === 'nested' && !props.activeGroup);\n const isViewingSingleGroup = computed(() => props.drawerStyle === 'nested' && props.activeGroup);\n\n const {\n density,\n isLoading: isDataViewLoading,\n isWithinModule,\n currentSearch,\n updateCurrentSearch,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n provide(DATA_VIEW_FILTERS_UTILS_INJECTION.key, {\n useFiltersInstance: props.useFiltersInstance,\n drawerStyle: props.drawerStyle,\n });\n\n const totalActiveFiltersCount = computed(() => props.useFiltersInstance?.totalActiveFiltersCount.value ?? 0);\n /** The number of active filters in the currently active group. This is only used when the drawerStyle is 'nested'. */\n const activeGroupActiveFiltersCount = computed(\n () => Number(props.activeGroup && props.useFiltersInstance?.activeFiltersCounts.value[props.activeGroup]) || 0,\n );\n const isDrawerOpen = ref(false);\n\n async function handleApplyClick() {\n const { preventDismiss } = (await props.onApply?.()) || props.useFiltersInstance?.applyFilters() || {};\n\n if (!preventDismiss) {\n isDrawerOpen.value = false;\n }\n }\n\n function handleResetGroupClick() {\n if (!props.activeGroup) {\n return;\n }\n\n props.useFiltersInstance?.resetFilterGroup(props.activeGroup);\n emit('reset-group');\n isDrawerOpen.value = false;\n }\n\n function handleResetAllClick() {\n props.useFiltersInstance?.resetAllFilters();\n emit('reset-all');\n isDrawerOpen.value = false;\n }\n\n function onDismiss() {\n props.useFiltersInstance?.undoWorkingFilters();\n isDrawerOpen.value = false;\n emit('dismiss');\n }\n\n watch(isDrawerOpen, () => {\n if (isDrawerOpen.value) {\n emit('open-drawer');\n }\n });\n</script>\n\n<template>\n <Box\n class=\"stash-data-view-filters grid grid-cols-12 gap-6 p-3\"\n :class=\"{ 'lg:p-6': density === 'comfortable', 'mb-3': !isWithinModule }\"\n :radius=\"isWithinModule ? 'none' : 'rounded'\"\n data-test=\"stash-data-view-filters\"\n disable-padding\n >\n <SearchBar\n v-if=\"props.showSearch\"\n class=\"col-span-12 md:col-span-6 lg:col-span-4\"\n data-test=\"stash-data-view-filters|search-bar\"\n :is-loading=\"isDataViewLoading\"\n :label=\"t('ll.search')\"\n :model-value=\"currentSearch\"\n v-bind=\"props.searchBarProps\"\n @search=\"(searchTerm) => updateCurrentSearch(searchTerm, { shouldEmit: true })\"\n />\n <div\n v-if=\"slots.default\"\n class=\"col-span-12 row-start-2 md:col-start-7 md:row-start-1 lg:col-span-8 lg:col-start-5\"\n >\n <div class=\"hidden md:block\">\n <slot name=\"filters-label\">\n <Label>{{ props.filtersLabelText }}</Label>\n </slot>\n </div>\n <div class=\"flex gap-4\">\n <FilterChip\n secondary\n class=\"!md:inline-flex !flex w-full justify-center gap-4 md:w-auto\"\n data-test=\"stash-data-view-filters|drawer-toggle-button\"\n :filter-count=\"totalActiveFiltersCount\"\n @click=\"isDrawerOpen = true\"\n >\n <span class=\"inline-flex items-center gap-3\">\n <Icon name=\"filter-line\" class=\"text-ice-700\" />\n <span>{{ t('ll.filters') }}</span>\n </span>\n </FilterChip>\n <slot v-if=\"isDesktop\"></slot>\n <Button v-if=\"totalActiveFiltersCount > 0 && isDesktop\" inline @click=\"handleResetAllClick\">\n {{ t('ll.resetAll') }}\n </Button>\n </div>\n </div>\n <Modal\n v-if=\"slots.drawer\"\n data-test=\"stash-data-view-filters|drawer\"\n disable-body-padding\n position=\"right\"\n size=\"narrow\"\n :is-open=\"isDrawerOpen\"\n :title=\"t('ll.allFilters')\"\n v-bind=\"props.drawerProps\"\n @dismiss=\"onDismiss\"\n >\n <template #headerAction>\n <Button\n v-if=\"isViewingSingleGroup\"\n icon\n class=\"text-ice-100\"\n data-test=\"stash-data-view-filters|drawer-previous-button\"\n :aria-label=\"t('ll.previous')\"\n :title=\"t('ll.previous')\"\n @click=\"emit('previous')\"\n >\n <Icon name=\"chevron-left\" />\n </Button>\n </template>\n\n <slot name=\"drawer\"></slot>\n\n <template #footer>\n <div class=\"flex justify-end gap-gutter\">\n <Button v-if=\"totalActiveFiltersCount === 0\" secondary @click=\"onDismiss\">\n {{ t('ll.cancel') }}\n </Button>\n <Button\n v-if=\"(isViewingGroupsMenu || props.drawerStyle === 'cascade') && totalActiveFiltersCount > 0\"\n secondary\n :disabled=\"isDataViewLoading\"\n @click=\"handleResetAllClick\"\n >\n {{ t('ll.resetAll') }}\n </Button>\n <Button\n v-if=\"isViewingSingleGroup && activeGroupActiveFiltersCount > 0\"\n secondary\n :disabled=\"isDataViewLoading\"\n @click=\"handleResetGroupClick\"\n >\n {{ t('ll.reset') }}\n </Button>\n <Button\n v-if=\"isViewingSingleGroup || props.drawerStyle === 'cascade'\"\n :disabled=\"isDataViewLoading\"\n @click=\"handleApplyClick\"\n >\n {{ t('ll.apply') }}\n </Button>\n </div>\n </template>\n </Modal>\n </Box>\n</template>\n"],"names":["DrawerStyle","useFilters","schema","dataViewRef","appliedFilters","ref","workingFilters","filterName","dvRef","applyFilters","cloneDeep","resetAllFilters","resetFilterGroup","group","undoWorkingFilters","activeFiltersCounts","computed","counts","config","value","_a","isDefined","totalActiveFiltersCount","count","props","__props","emit","__emit","slots","_useSlots","isDesktop","useMediaQuery","SCREEN_SIZES","isViewingGroupsMenu","isViewingSingleGroup","density","isDataViewLoading","isWithinModule","currentSearch","updateCurrentSearch","inject","DATA_VIEW_INJECTION","provide","DATA_VIEW_FILTERS_UTILS_INJECTION","activeGroupActiveFiltersCount","isDrawerOpen","handleApplyClick","preventDismiss","_b","handleResetGroupClick","handleResetAllClick","onDismiss","watch","_createBlock","Box","_normalizeClass","_unref","_openBlock","SearchBar","_mergeProps","t","_cache","searchTerm","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_createVNode","Label","_createTextVNode","_toDisplayString","_hoisted_3","FilterChip","_hoisted_4","Icon","Button","Modal","_hoisted_5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataViewFilters.js","sources":["../src/components/DataViewFilters/DataViewFilters.types.ts","../src/components/DataViewFilters/useFilters.ts","../src/components/DataViewFilters/DataViewFilters.vue"],"sourcesContent":["import { UseFiltersReturnType } from './useFilters';\n\n/**\n * A function that is called when the user clicks one of the \"Apply\" buttons in DataViewFilters.\n *\n * A return value of `{ preventDismiss: true }` can be used to prevent the DataViewFilters drawer or a FilterDropdown from closing, such as when some filters have invalid values.\n */\nexport type OnApplyFilters = () => Promise<{ preventDismiss?: boolean } | void> | { preventDismiss?: boolean } | void;\n\nexport enum DrawerStyle {\n /** Displays all groups and their fields without the need for navigating submenus. */\n Cascade = 'cascade',\n /** Displays only group names or fields; navigation between the group names and a submenu of fields is required. */\n Nested = 'nested',\n}\n\nexport type DrawerStyles = `${DrawerStyle}`;\n\nexport interface DataViewFiltersUtilsInjection {\n useFiltersInstance?: UseFiltersReturnType;\n drawerStyle?: DrawerStyles;\n}\n","import cloneDeep from 'lodash-es/cloneDeep';\nimport { computed, ComputedRef, Ref, ref } from 'vue';\n\nimport isDefined from '../../composables/useValidation/utils/isDefined';\nimport DataView from '../DataView/DataView.vue';\n\ntype DataViewInstance = InstanceType<typeof DataView>;\n\n/**\n * Contains metadata and configuration for the filters.\n * @see https://www.typescriptlang.org/docs/handbook/2/mapped-types.html\n */\nexport type UseFiltersSchema<Values extends object, Groups extends string> = {\n [Property in keyof Values]: {\n defaultValue?: Values[Property];\n group?: Groups;\n isActive?: (value: Values[Property]) => boolean;\n };\n};\n\nexport interface UseFiltersArgs<Values extends object, Groups extends string> {\n schema: UseFiltersSchema<Values, Groups>;\n /** A ref for an instance of DataView */\n dataViewRef: Ref<unknown>; // Note: using `Ref<InstanceType<typeof DataView>>` here causes type errors when providing a value for this argument\n}\n\nexport interface UseFiltersReturnType<Values = object, Groups extends string = string> {\n applyFilters: () => void;\n resetAllFilters: () => void;\n resetFilterGroup: (group: string) => void; // Note: group is intentionally not typed as `Groups` since there is no way to pass in a Groups type to UseFiltersReturnType within DataViewFilters.vue\n undoWorkingFilters: () => void;\n activeFiltersCounts: ComputedRef<Record<Groups, number>>;\n totalActiveFiltersCount: ComputedRef<number>;\n appliedFilters: Ref<Values>;\n workingFilters: Ref<Values>;\n}\n\n/**\n * Provides utility functions for working with `DataViewFilters`.\n */\nexport function useFilters<Values extends object, Groups extends string>({\n schema,\n dataViewRef,\n}: UseFiltersArgs<Values, Groups>): UseFiltersReturnType<Values, Groups> {\n const appliedFilters = ref({}) as Ref<Values>;\n const workingFilters = ref({}) as Ref<Values>;\n\n for (const filterName in schema) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n\n const dvRef = dataViewRef as Ref<DataViewInstance>;\n\n /**\n * For when an \"Apply\" button is clicked. It does the following:\n * 1) applies the working filter state\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function applyFilters() {\n appliedFilters.value = cloneDeep(workingFilters.value);\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * For when a \"Reset all\" button is clicked. It does the following:\n * 1) applies the defaultValue filter values to all filters\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function resetAllFilters() {\n for (const filterName in schema) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * For when a \"Reset\" button is clicked. It does the following:\n * 1) applies the defaultValue filter values to the given filter group\n * 2) sets the current page to 1\n * 3) emits the \"update\" event from DataView\n */\n function resetFilterGroup(group: Groups) {\n for (const filterName in schema) {\n if (schema[filterName].group === group) {\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n appliedFilters.value[filterName] = schema[filterName].defaultValue;\n // @ts-expect-error \"could be instantiated with an arbitrary type\"; TODO: figure out how to resolve the types\n workingFilters.value[filterName] = schema[filterName].defaultValue;\n }\n }\n\n dvRef.value.updateCurrentFilters(appliedFilters.value, { shouldEmit: true });\n }\n\n /**\n * Resets the `workingFilters` to match the `appliedFilters`. This can be used when the FilterDrawer or a FilterDropdown is dismissed without clicking \"Reset\" or \"Apply\".\n */\n function undoWorkingFilters() {\n workingFilters.value = cloneDeep(appliedFilters.value);\n }\n\n const activeFiltersCounts = computed(() => {\n const counts = {} as Record<Groups, number>;\n\n for (const filterName in schema) {\n const config = schema[filterName];\n const value = appliedFilters.value[filterName];\n const isActive = config.isActive?.(value) || isDefined(value);\n\n if (isActive && config.group) {\n counts[config.group] = (counts[config.group] ?? 0) + 1;\n }\n }\n\n return counts;\n });\n\n const totalActiveFiltersCount = computed(() => {\n let count = 0;\n\n for (const filterName in schema) {\n const config = schema[filterName];\n const value = appliedFilters.value[filterName];\n const isActive = config.isActive?.(value) || isDefined(value);\n\n if (isActive) {\n count += 1;\n }\n }\n\n return count;\n });\n\n return {\n applyFilters,\n resetAllFilters,\n // @ts-expect-error \"could be instantiated with a different subtype\": TODO: figure out how to resolve the types\n resetFilterGroup,\n undoWorkingFilters,\n activeFiltersCounts,\n totalActiveFiltersCount,\n appliedFilters,\n workingFilters,\n };\n}\n\nexport default useFilters;\n","<script lang=\"ts\">\n export * from './DataViewFilters.keys';\n export * from './DataViewFilters.types';\n export * from './useFilters';\n</script>\n\n<script setup lang=\"ts\">\n import { computed, inject, provide, ref, watch } from 'vue';\n\n import useMediaQuery from '../../composables/useMediaQuery/useMediaQuery';\n import { SCREEN_SIZES } from '../../constants';\n import { t } from '../../locale';\n import Box from '../Box/Box.vue';\n import Button from '../Button/Button.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import FilterChip from '../FilterChip/FilterChip.vue';\n import Icon from '../Icon/Icon.vue';\n import Label from '../Label/Label.vue';\n import Modal, { type ModalProps } from '../Modal/Modal.vue';\n import SearchBar, { SearchBarProps } from '../SearchBar/SearchBar.vue';\n import { DATA_VIEW_FILTERS_UTILS_INJECTION } from './DataViewFilters.keys';\n import type { DrawerStyles, OnApplyFilters } from './DataViewFilters.types';\n import type { UseFiltersReturnType } from './useFilters';\n\n export interface DataViewFiltersProps {\n filtersLabelText?: string;\n /**\n * Props to pass to the `SearchBar` component.\n */\n searchBarProps?: SearchBarProps;\n showSearch?: boolean;\n /** 'cascade' displays all fields within every filter group; 'nested' displays only the group names and requires clicking a group to view its fields. */\n drawerStyle?: DrawerStyles;\n drawerProps?: ModalProps;\n /**\n * @deprecated The `activeGroup` prop is a sufficient replacement for this prop. A falsy `activeGroup` will hide the button and a truthy `activeGroup` will show it (when the `drawerStyle` is 'nested').\n *\n * **Note:** This prop has no effect when using a \"cascade\" `drawerStyle`.\n */\n showDrawerPreviousButton?: boolean;\n /**\n * Required when using filters. This prop should contain the return value of the `useFilters()` composable.\n */\n useFiltersInstance?: UseFiltersReturnType;\n onApply?: OnApplyFilters;\n /**\n * The name of the active filter group. The active filter group is determined by which instance of FilterDropdown or FilterDrawerItem is open.\n *\n * **Note:** This prop is required when using a \"nested\" `drawerStyle`, but has no effect when using a \"cascade\" `drawerStyle`.\n */\n activeGroup?: string;\n }\n\n export interface DataViewFiltersSlots {\n default?: () => unknown;\n drawer?: () => unknown;\n 'filters-label'?: () => unknown;\n }\n\n const props = withDefaults(defineProps<DataViewFiltersProps>(), {\n filtersLabelText: t('ll.filterBy'),\n isLoading: false,\n drawerStyle: 'cascade',\n drawerProps: undefined,\n searchBarProps: undefined,\n showDrawerPreviousButton: false,\n showSearch: true,\n useFiltersInstance: undefined,\n onApply: undefined,\n activeGroup: undefined,\n });\n\n const emit = defineEmits<{\n /** When the drawer is opened */\n (e: 'open-drawer'): void;\n /** When the drawer is dismissed */\n (e: 'dismiss'): void;\n /** When the \"Previous\" button in the header is clicked */\n (e: 'previous'): void;\n /** When the \"Reset\" button is clicked while viewing a filter group */\n (e: 'reset-group'): void;\n /** When one of the \"Reset All\" buttons is clicked */\n (e: 'reset-all'): void;\n }>();\n\n const slots = defineSlots<DataViewFiltersSlots>();\n\n const isDesktop = useMediaQuery(`(min-width: ${SCREEN_SIZES.lg})`);\n const isViewingGroupsMenu = computed(() => props.drawerStyle === 'nested' && !props.activeGroup);\n const isViewingSingleGroup = computed(() => props.drawerStyle === 'nested' && props.activeGroup);\n\n const {\n density,\n isLoading: isDataViewLoading,\n isWithinModule,\n currentSearch,\n updateCurrentSearch,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n provide(DATA_VIEW_FILTERS_UTILS_INJECTION.key, {\n useFiltersInstance: props.useFiltersInstance,\n drawerStyle: props.drawerStyle,\n });\n\n const totalActiveFiltersCount = computed(() => props.useFiltersInstance?.totalActiveFiltersCount.value ?? 0);\n /** The number of active filters in the currently active group. This is only used when the drawerStyle is 'nested'. */\n const activeGroupActiveFiltersCount = computed(\n () => Number(props.activeGroup && props.useFiltersInstance?.activeFiltersCounts.value[props.activeGroup]) || 0,\n );\n const isDrawerOpen = ref(false);\n\n async function handleApplyClick() {\n const { preventDismiss } = (await props.onApply?.()) || props.useFiltersInstance?.applyFilters() || {};\n\n if (!preventDismiss) {\n isDrawerOpen.value = false;\n }\n }\n\n function handleResetGroupClick() {\n if (!props.activeGroup) {\n return;\n }\n\n props.useFiltersInstance?.resetFilterGroup(props.activeGroup);\n emit('reset-group');\n isDrawerOpen.value = false;\n }\n\n function handleResetAllClick() {\n props.useFiltersInstance?.resetAllFilters();\n emit('reset-all');\n isDrawerOpen.value = false;\n }\n\n function onDismiss() {\n props.useFiltersInstance?.undoWorkingFilters();\n isDrawerOpen.value = false;\n emit('dismiss');\n }\n\n watch(isDrawerOpen, () => {\n if (isDrawerOpen.value) {\n emit('open-drawer');\n }\n });\n</script>\n\n<template>\n <Box\n class=\"stash-data-view-filters grid grid-cols-12 gap-6 p-3\"\n :class=\"{ 'lg:p-6': density === 'comfortable', 'mb-3': !isWithinModule }\"\n :radius=\"isWithinModule ? 'none' : 'rounded'\"\n data-test=\"stash-data-view-filters\"\n disable-padding\n >\n <SearchBar\n v-if=\"props.showSearch\"\n class=\"col-span-12 md:col-span-6 lg:col-span-4\"\n data-test=\"stash-data-view-filters|search-bar\"\n :is-loading=\"isDataViewLoading\"\n :label=\"t('ll.search')\"\n :model-value=\"currentSearch\"\n v-bind=\"props.searchBarProps\"\n @search=\"(searchTerm) => updateCurrentSearch(searchTerm, { shouldEmit: true })\"\n />\n <div\n v-if=\"slots.default\"\n class=\"col-span-12 row-start-2 md:col-start-7 md:row-start-1 lg:col-span-8 lg:col-start-5\"\n >\n <div class=\"hidden md:block\">\n <slot name=\"filters-label\">\n <Label>{{ props.filtersLabelText }}</Label>\n </slot>\n </div>\n <div class=\"flex gap-4\">\n <FilterChip\n secondary\n class=\"!md:inline-flex !flex w-full justify-center gap-4 md:w-auto\"\n data-test=\"stash-data-view-filters|drawer-toggle-button\"\n :filter-count=\"totalActiveFiltersCount\"\n @click=\"isDrawerOpen = true\"\n >\n <span class=\"inline-flex items-center gap-3\">\n <Icon name=\"filter-line\" class=\"text-ice-700\" />\n <span>{{ t('ll.filters') }}</span>\n </span>\n </FilterChip>\n <slot v-if=\"isDesktop\"></slot>\n <Button v-if=\"totalActiveFiltersCount > 0 && isDesktop\" inline @click=\"handleResetAllClick\">\n {{ t('ll.resetAll') }}\n </Button>\n </div>\n </div>\n <Modal\n v-if=\"slots.drawer\"\n data-test=\"stash-data-view-filters|drawer\"\n disable-body-padding\n position=\"right\"\n size=\"narrow\"\n :is-open=\"isDrawerOpen\"\n :title=\"t('ll.allFilters')\"\n v-bind=\"props.drawerProps\"\n @dismiss=\"onDismiss\"\n >\n <template #headerAction>\n <Button\n v-if=\"isViewingSingleGroup\"\n icon\n class=\"text-ice-100\"\n data-test=\"stash-data-view-filters|drawer-previous-button\"\n :aria-label=\"t('ll.previous')\"\n :title=\"t('ll.previous')\"\n @click=\"emit('previous')\"\n >\n <Icon name=\"chevron-left\" />\n </Button>\n </template>\n\n <slot name=\"drawer\"></slot>\n\n <template #footer>\n <div class=\"flex justify-end gap-gutter\">\n <Button v-if=\"totalActiveFiltersCount === 0\" secondary @click=\"onDismiss\">\n {{ t('ll.cancel') }}\n </Button>\n <Button\n v-if=\"(isViewingGroupsMenu || props.drawerStyle === 'cascade') && totalActiveFiltersCount > 0\"\n secondary\n :disabled=\"isDataViewLoading\"\n @click=\"handleResetAllClick\"\n >\n {{ t('ll.resetAll') }}\n </Button>\n <Button\n v-if=\"isViewingSingleGroup && activeGroupActiveFiltersCount > 0\"\n secondary\n :disabled=\"isDataViewLoading\"\n @click=\"handleResetGroupClick\"\n >\n {{ t('ll.reset') }}\n </Button>\n <Button\n v-if=\"isViewingSingleGroup || props.drawerStyle === 'cascade'\"\n :disabled=\"isDataViewLoading\"\n @click=\"handleApplyClick\"\n >\n {{ t('ll.apply') }}\n </Button>\n </div>\n </template>\n </Modal>\n </Box>\n</template>\n"],"names":["DrawerStyle","useFilters","schema","dataViewRef","appliedFilters","ref","workingFilters","filterName","dvRef","applyFilters","cloneDeep","resetAllFilters","resetFilterGroup","group","undoWorkingFilters","activeFiltersCounts","computed","counts","config","value","_a","isDefined","totalActiveFiltersCount","count","props","__props","emit","__emit","slots","_useSlots","isDesktop","useMediaQuery","SCREEN_SIZES","isViewingGroupsMenu","isViewingSingleGroup","density","isDataViewLoading","isWithinModule","currentSearch","updateCurrentSearch","inject","DATA_VIEW_INJECTION","provide","DATA_VIEW_FILTERS_UTILS_INJECTION","activeGroupActiveFiltersCount","isDrawerOpen","handleApplyClick","preventDismiss","_b","handleResetGroupClick","handleResetAllClick","onDismiss","watch","_createBlock","Box","_normalizeClass","_unref","_openBlock","SearchBar","_mergeProps","t","_cache","searchTerm","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_createVNode","Label","_createTextVNode","_toDisplayString","_hoisted_3","FilterChip","_hoisted_4","Icon","Button","Modal","_hoisted_5"],"mappings":"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"}
|
package/dist/DataViewToolbar.js
CHANGED
|
@@ -1,71 +1,85 @@
|
|
|
1
|
-
import { ref as
|
|
2
|
-
import { u as
|
|
3
|
-
import { t as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { ref as K, onMounted as Q, nextTick as w, onBeforeUnmount as X, watch as D, defineComponent as Y, useTemplateRef as O, inject as Z, useCssModule as ee, computed as te, onBeforeMount as oe, createElementBlock as g, openBlock as r, normalizeClass as L, unref as e, createElementVNode as ae, createCommentVNode as x, createBlock as F, withCtx as d, renderSlot as E, createVNode as h, createTextVNode as se, toDisplayString as U, Fragment as le } from "vue";
|
|
2
|
+
import { u as ne } from "./usePaginationStats-d_q39naC.js";
|
|
3
|
+
import { t as R } from "./locale.js";
|
|
4
|
+
import A from "./Button.js";
|
|
5
|
+
import ie from "./Checkbox.js";
|
|
6
6
|
import "lodash-es/cloneDeep";
|
|
7
7
|
import "./Module.keys-DcqBbvvT.js";
|
|
8
|
-
import
|
|
9
|
-
import { D as
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
import j from "./Icon.js";
|
|
9
|
+
import { D as J } from "./DataView.keys-aSOnA4AD.js";
|
|
10
|
+
import re from "./IconLabel.js";
|
|
11
|
+
import de from "./MoreActions.js";
|
|
12
|
+
import { t as y, a as ce } from "./templateRefNarrowing-CeANDylX.js";
|
|
13
|
+
import { _ as ue } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
14
|
+
function pe(z) {
|
|
15
|
+
const { toolbarEl: C, paginationEl: t, checkboxEl: B, isPaginationEnabled: c, isSelectable: u, isEmpty: p } = z, m = K(null);
|
|
16
|
+
let i = null, o = null;
|
|
17
|
+
const s = () => {
|
|
18
|
+
const a = y(C.value);
|
|
19
|
+
if (!a) return;
|
|
20
|
+
const l = a.getBoundingClientRect().width;
|
|
21
|
+
let v = 0, S = 0;
|
|
22
|
+
if (c != null && c.value) {
|
|
23
|
+
const n = y(t.value);
|
|
24
|
+
n && (v = n.getBoundingClientRect().width);
|
|
25
|
+
}
|
|
26
|
+
if (u != null && u.value && !(p != null && p.value)) {
|
|
27
|
+
const n = ce(B.value);
|
|
28
|
+
n && (S = n.getBoundingClientRect().width);
|
|
29
|
+
}
|
|
30
|
+
const k = window.getComputedStyle(a), W = parseFloat(k.paddingLeft) || 0, $ = parseFloat(k.paddingRight) || 0, V = Math.max(0, l - v - S - W - $);
|
|
31
|
+
m.value = `${V}px`;
|
|
32
|
+
}, _ = () => {
|
|
33
|
+
const a = y(C.value);
|
|
34
|
+
if (!a) return;
|
|
35
|
+
i = new ResizeObserver(() => {
|
|
26
36
|
w(() => {
|
|
27
|
-
|
|
37
|
+
s();
|
|
28
38
|
});
|
|
29
|
-
}),
|
|
39
|
+
}), i.observe(a);
|
|
40
|
+
const l = y(t.value);
|
|
41
|
+
l && (o = new ResizeObserver(() => {
|
|
30
42
|
w(() => {
|
|
31
|
-
|
|
43
|
+
s();
|
|
32
44
|
});
|
|
33
|
-
}), o.observe(
|
|
34
|
-
},
|
|
35
|
-
|
|
45
|
+
}), o.observe(l));
|
|
46
|
+
}, T = () => {
|
|
47
|
+
i && (i.disconnect(), i = null), o && (o.disconnect(), o = null);
|
|
36
48
|
};
|
|
37
|
-
return
|
|
49
|
+
return Q(() => {
|
|
38
50
|
w(() => {
|
|
39
|
-
|
|
51
|
+
s(), _();
|
|
40
52
|
});
|
|
41
|
-
}),
|
|
42
|
-
|
|
43
|
-
}), D([
|
|
53
|
+
}), X(() => {
|
|
54
|
+
T();
|
|
55
|
+
}), D([c, u, p], () => {
|
|
44
56
|
w(() => {
|
|
45
|
-
|
|
57
|
+
s();
|
|
46
58
|
});
|
|
47
|
-
}), D(t, (
|
|
48
|
-
o && (o.disconnect(), o = null)
|
|
59
|
+
}), D(t, (a) => {
|
|
60
|
+
o && (o.disconnect(), o = null);
|
|
61
|
+
const l = y(a);
|
|
62
|
+
l && (o = new ResizeObserver(() => {
|
|
49
63
|
w(() => {
|
|
50
|
-
|
|
64
|
+
s();
|
|
51
65
|
});
|
|
52
|
-
}), o.observe(
|
|
66
|
+
}), o.observe(l));
|
|
53
67
|
}), {
|
|
54
|
-
actionsWidth:
|
|
55
|
-
updateActionsWidth:
|
|
68
|
+
actionsWidth: m,
|
|
69
|
+
updateActionsWidth: s
|
|
56
70
|
};
|
|
57
71
|
}
|
|
58
|
-
const
|
|
72
|
+
const me = { class: "flex place-items-center" }, fe = {
|
|
59
73
|
key: 0,
|
|
60
74
|
ref: "paginationEl",
|
|
61
75
|
class: "stash-data-view-toolbar__pagination flex shrink-0 items-center"
|
|
62
|
-
},
|
|
76
|
+
}, be = {
|
|
63
77
|
key: 0,
|
|
64
78
|
class: "mx-1.5"
|
|
65
|
-
},
|
|
79
|
+
}, ge = {
|
|
66
80
|
key: 0,
|
|
67
81
|
class: "mx-1.5 hidden md:block"
|
|
68
|
-
},
|
|
82
|
+
}, he = /* @__PURE__ */ Y({
|
|
69
83
|
__name: "DataViewToolbar",
|
|
70
84
|
props: {
|
|
71
85
|
allRowsSelected: { type: Boolean, default: !1 },
|
|
@@ -76,80 +90,80 @@ const ue = { class: "flex place-items-center" }, pe = {
|
|
|
76
90
|
hasTabsAbove: { type: Boolean, default: !1 }
|
|
77
91
|
},
|
|
78
92
|
emits: ["select"],
|
|
79
|
-
setup(z, { emit:
|
|
80
|
-
const t = z,
|
|
81
|
-
isWithinModule:
|
|
82
|
-
variant:
|
|
93
|
+
setup(z, { emit: C }) {
|
|
94
|
+
const t = z, B = C, c = O("toolbarEl"), u = O("paginationEl"), p = O("checkboxEl"), {
|
|
95
|
+
isWithinModule: m,
|
|
96
|
+
variant: i,
|
|
83
97
|
density: o,
|
|
84
|
-
currentPage:
|
|
85
|
-
hasToolbar:
|
|
86
|
-
isPaginateNextDisabled:
|
|
87
|
-
isPaginationEnabled:
|
|
88
|
-
isSelectable:
|
|
89
|
-
pageCount:
|
|
98
|
+
currentPage: s,
|
|
99
|
+
hasToolbar: _,
|
|
100
|
+
isPaginateNextDisabled: T,
|
|
101
|
+
isPaginationEnabled: a,
|
|
102
|
+
isSelectable: l,
|
|
103
|
+
pageCount: v,
|
|
90
104
|
pageSize: S,
|
|
91
|
-
totalDataCount:
|
|
92
|
-
goPrevPage:
|
|
93
|
-
goNextPage:
|
|
94
|
-
isEmpty:
|
|
95
|
-
isLoading:
|
|
96
|
-
} =
|
|
97
|
-
toolbarEl:
|
|
98
|
-
paginationEl:
|
|
99
|
-
checkboxEl:
|
|
100
|
-
isPaginationEnabled:
|
|
101
|
-
isSelectable:
|
|
102
|
-
isEmpty:
|
|
103
|
-
}),
|
|
104
|
-
function
|
|
105
|
-
|
|
105
|
+
totalDataCount: k,
|
|
106
|
+
goPrevPage: W,
|
|
107
|
+
goNextPage: $,
|
|
108
|
+
isEmpty: V,
|
|
109
|
+
isLoading: n
|
|
110
|
+
} = Z(J.key, J.defaults), N = K(0), q = ee(), { actionsWidth: G } = pe({
|
|
111
|
+
toolbarEl: c,
|
|
112
|
+
paginationEl: u,
|
|
113
|
+
checkboxEl: p,
|
|
114
|
+
isPaginationEnabled: a,
|
|
115
|
+
isSelectable: l,
|
|
116
|
+
isEmpty: V
|
|
117
|
+
}), I = te(() => t.radius ? t.radius : m.value ? "none" : i.value === "table" ? t.hasTabsAbove ? "rounded-top-right" : "rounded-top" : "rounded"), H = ne({ currentPage: s, pageSize: S, totalItems: k });
|
|
118
|
+
function P() {
|
|
119
|
+
B("select"), N.value++;
|
|
106
120
|
}
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
}), (
|
|
121
|
+
return oe(() => {
|
|
122
|
+
_ && (_.value = !0);
|
|
123
|
+
}), (f, b) => (r(), g("div", {
|
|
110
124
|
ref: "toolbarEl",
|
|
111
|
-
class:
|
|
112
|
-
"border-t border-ice-200": e(
|
|
113
|
-
"rounded-tr":
|
|
114
|
-
rounded:
|
|
115
|
-
"rounded-t":
|
|
116
|
-
"mb-3": e(
|
|
125
|
+
class: L(["stash-data-view-toolbar flex min-h-15 items-center justify-between bg-white py-1.5 shadow", {
|
|
126
|
+
"border-t border-ice-200": e(m),
|
|
127
|
+
"rounded-tr": I.value === "rounded-top-right",
|
|
128
|
+
rounded: I.value === "rounded",
|
|
129
|
+
"rounded-t": I.value === "rounded-top",
|
|
130
|
+
"mb-3": e(i) !== "table" && !e(m),
|
|
117
131
|
"px-3": e(o) === "compact",
|
|
118
132
|
"px-3 lg:px-6": e(o) === "comfortable"
|
|
119
133
|
}]),
|
|
120
134
|
"data-test": "stash-data-view-toolbar"
|
|
121
135
|
}, [
|
|
122
|
-
|
|
123
|
-
e(
|
|
136
|
+
ae("div", me, [
|
|
137
|
+
e(l) && !e(V) ? (r(), F(ie, {
|
|
124
138
|
ref: "checkboxEl",
|
|
125
|
-
key:
|
|
139
|
+
key: N.value,
|
|
126
140
|
checked: t.allRowsSelected,
|
|
127
141
|
indeterminate: t.someRowsSelected && !t.allRowsSelected,
|
|
128
|
-
title: e(
|
|
129
|
-
disabled: e(
|
|
130
|
-
"onUpdate:indeterminate":
|
|
131
|
-
"onUpdate:checked":
|
|
142
|
+
title: e(R)("ll.selectAll"),
|
|
143
|
+
disabled: e(n),
|
|
144
|
+
"onUpdate:indeterminate": P,
|
|
145
|
+
"onUpdate:checked": P
|
|
132
146
|
}, null, 8, ["checked", "indeterminate", "title", "disabled"])) : x("", !0),
|
|
133
|
-
|
|
147
|
+
f.$slots["more-actions"] ? (r(), F(de, {
|
|
134
148
|
key: 1,
|
|
135
149
|
"more-button-align": "together",
|
|
136
|
-
width: e(
|
|
150
|
+
width: e(G) || void 0,
|
|
137
151
|
"actions-container-class": "flex items-center gap-x-2 lg:mr-6 lg:gap-x-6"
|
|
138
152
|
}, {
|
|
139
|
-
toggle:
|
|
140
|
-
|
|
153
|
+
toggle: d(({ toggle: M }) => [
|
|
154
|
+
h(A, {
|
|
141
155
|
"icon-label": "",
|
|
142
156
|
class: "text-blue-500",
|
|
143
157
|
"data-test": "stash-data-view-sort-button|sort-menu-button",
|
|
144
|
-
onClick:
|
|
158
|
+
onClick: M
|
|
145
159
|
}, {
|
|
146
|
-
default:
|
|
147
|
-
|
|
160
|
+
default: d(() => [
|
|
161
|
+
h(re, {
|
|
148
162
|
icon: "ellipsis",
|
|
149
163
|
stacked: ""
|
|
150
164
|
}, {
|
|
151
|
-
default:
|
|
152
|
-
|
|
165
|
+
default: d(() => [...b[2] || (b[2] = [
|
|
166
|
+
se(" More ", -1)
|
|
153
167
|
])]),
|
|
154
168
|
_: 1
|
|
155
169
|
})
|
|
@@ -157,54 +171,54 @@ const ue = { class: "flex place-items-center" }, pe = {
|
|
|
157
171
|
_: 1
|
|
158
172
|
}, 8, ["onClick"])
|
|
159
173
|
]),
|
|
160
|
-
"more-actions":
|
|
161
|
-
|
|
174
|
+
"more-actions": d(() => [
|
|
175
|
+
E(f.$slots, "more-actions")
|
|
162
176
|
]),
|
|
163
|
-
default:
|
|
164
|
-
|
|
177
|
+
default: d(() => [
|
|
178
|
+
E(f.$slots, "default")
|
|
165
179
|
]),
|
|
166
180
|
_: 3
|
|
167
|
-
}, 8, ["width"])) : (
|
|
181
|
+
}, 8, ["width"])) : (r(), g("div", {
|
|
168
182
|
key: 2,
|
|
169
|
-
class:
|
|
183
|
+
class: L([e(q).actions, "stash-data-view-toolbar__actions flex items-center gap-x-2 lg:gap-x-4"])
|
|
170
184
|
}, [
|
|
171
|
-
|
|
185
|
+
E(f.$slots, "default")
|
|
172
186
|
], 2))
|
|
173
187
|
]),
|
|
174
|
-
e(
|
|
175
|
-
|
|
176
|
-
t.someRowsSelected && t.selectedItemsCount !== void 0 ? (
|
|
188
|
+
e(a) ? (r(), g("div", fe, [
|
|
189
|
+
E(f.$slots, "selected-stats", {}, () => [
|
|
190
|
+
t.someRowsSelected && t.selectedItemsCount !== void 0 ? (r(), g("span", be, U(e(R)("ll.listView.numberOfTotalSelected", { num: t.selectedItemsCount, total: e(k) })), 1)) : x("", !0)
|
|
177
191
|
]),
|
|
178
|
-
|
|
179
|
-
t.hidePageStats ? x("", !0) : (
|
|
192
|
+
E(f.$slots, "page-stats", {}, () => [
|
|
193
|
+
t.hidePageStats ? x("", !0) : (r(), g("span", ge, U(e(R)("ll.pageStats", e(H))), 1))
|
|
180
194
|
]),
|
|
181
|
-
e(
|
|
182
|
-
|
|
195
|
+
e(v) > 1 ? (r(), g(le, { key: 0 }, [
|
|
196
|
+
h(A, {
|
|
183
197
|
icon: "",
|
|
184
|
-
"aria-label": e(
|
|
198
|
+
"aria-label": e(R)("ll.previous"),
|
|
185
199
|
class: "size-9 p-1.5",
|
|
186
200
|
"data-test": "button|prev-page",
|
|
187
|
-
disabled: e(
|
|
188
|
-
onClick:
|
|
201
|
+
disabled: e(n) || e(s) === 1,
|
|
202
|
+
onClick: b[0] || (b[0] = (M) => e(W)({ shouldEmit: !0 }))
|
|
189
203
|
}, {
|
|
190
|
-
default:
|
|
191
|
-
|
|
204
|
+
default: d(() => [
|
|
205
|
+
h(j, {
|
|
192
206
|
name: "chevron-left",
|
|
193
207
|
size: "dense"
|
|
194
208
|
})
|
|
195
209
|
]),
|
|
196
210
|
_: 1
|
|
197
211
|
}, 8, ["aria-label", "disabled"]),
|
|
198
|
-
|
|
212
|
+
h(A, {
|
|
199
213
|
icon: "",
|
|
200
|
-
"aria-label": e(
|
|
214
|
+
"aria-label": e(R)("ll.next"),
|
|
201
215
|
class: "size-9 p-1.5",
|
|
202
216
|
"data-test": "button|next-page",
|
|
203
|
-
disabled: e(
|
|
204
|
-
onClick:
|
|
217
|
+
disabled: e(n) || e(T) || e(s) === e(v),
|
|
218
|
+
onClick: b[1] || (b[1] = (M) => e($)({ shouldEmit: !0 }))
|
|
205
219
|
}, {
|
|
206
|
-
default:
|
|
207
|
-
|
|
220
|
+
default: d(() => [
|
|
221
|
+
h(j, {
|
|
208
222
|
name: "chevron-right",
|
|
209
223
|
size: "dense"
|
|
210
224
|
})
|
|
@@ -215,12 +229,12 @@ const ue = { class: "flex place-items-center" }, pe = {
|
|
|
215
229
|
], 512)) : x("", !0)
|
|
216
230
|
], 2));
|
|
217
231
|
}
|
|
218
|
-
}), ve = "_actions_1i7a8_3",
|
|
232
|
+
}), ve = "_actions_1i7a8_3", ke = {
|
|
219
233
|
actions: ve
|
|
220
|
-
},
|
|
221
|
-
$style:
|
|
222
|
-
},
|
|
234
|
+
}, we = {
|
|
235
|
+
$style: ke
|
|
236
|
+
}, Ie = /* @__PURE__ */ ue(he, [["__cssModules", we]]);
|
|
223
237
|
export {
|
|
224
|
-
|
|
238
|
+
Ie as default
|
|
225
239
|
};
|
|
226
240
|
//# sourceMappingURL=DataViewToolbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataViewToolbar.js","sources":["../src/components/DataViewToolbar/useActionsWidth.ts","../src/components/DataViewToolbar/DataViewToolbar.vue"],"sourcesContent":["import { ComputedRef, nextTick, onBeforeUnmount, onMounted, Ref, ref, ShallowRef, watch } from 'vue';\n\nexport interface UseActionsWidthOptions {\n toolbarEl: ShallowRef<HTMLElement | null>;\n paginationEl: ShallowRef<HTMLElement | null>;\n checkboxEl: ShallowRef<{ $el: HTMLElement } | null>;\n isPaginationEnabled: ComputedRef<boolean> | undefined;\n isSelectable: Ref<boolean> | undefined;\n isEmpty: ComputedRef<boolean> | undefined;\n}\n\nexport function useActionsWidth(options: UseActionsWidthOptions) {\n const { toolbarEl, paginationEl, checkboxEl, isPaginationEnabled, isSelectable, isEmpty } = options;\n\n const actionsWidth = ref<string | null>(null);\n let toolbarResizeObserver: ResizeObserver | null = null;\n let paginationResizeObserver: ResizeObserver | null = null;\n\n const updateActionsWidth = () => {\n if (!toolbarEl.value) return;\n\n const toolbarWidth = toolbarEl.value.getBoundingClientRect().width;\n let paginationWidth = 0;\n let checkboxWidth = 0;\n\n // Calculate pagination width if pagination is enabled\n if (isPaginationEnabled?.value && paginationEl.value) {\n paginationWidth = paginationEl.value.getBoundingClientRect().width;\n }\n\n // Calculate checkbox width if selectable and not empty\n if (isSelectable?.value && !isEmpty?.value && checkboxEl.value?.$el) {\n checkboxWidth = checkboxEl.value.$el.getBoundingClientRect().width;\n }\n\n // Get computed styles to calculate padding\n const computedStyle = window.getComputedStyle(toolbarEl.value);\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n\n const availableWidth = Math.max(0, toolbarWidth - paginationWidth - checkboxWidth - paddingLeft - paddingRight);\n actionsWidth.value = `${availableWidth}px`;\n };\n\n const setupResizeObserver = () => {\n if (!toolbarEl.value) return;\n\n // Observe toolbar element\n toolbarResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n toolbarResizeObserver.observe(toolbarEl.value);\n\n // Observe pagination element if it exists\n if (paginationEl.value) {\n paginationResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n paginationResizeObserver.observe(paginationEl.value);\n }\n };\n\n const cleanupResizeObserver = () => {\n if (toolbarResizeObserver) {\n toolbarResizeObserver.disconnect();\n toolbarResizeObserver = null;\n }\n if (paginationResizeObserver) {\n paginationResizeObserver.disconnect();\n paginationResizeObserver = null;\n }\n };\n\n onMounted(() => {\n nextTick(() => {\n updateActionsWidth();\n setupResizeObserver();\n });\n });\n\n onBeforeUnmount(() => {\n cleanupResizeObserver();\n });\n\n // Watch for changes in conditions that affect element visibility\n watch([isPaginationEnabled, isSelectable, isEmpty], () => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n\n // Watch for pagination element changes to setup/cleanup observer\n watch(paginationEl, (newPaginationEl) => {\n // Cleanup old observer if it exists\n if (paginationResizeObserver) {\n paginationResizeObserver.disconnect();\n paginationResizeObserver = null;\n }\n\n // Setup new observer if pagination element exists\n if (newPaginationEl) {\n paginationResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n paginationResizeObserver.observe(newPaginationEl);\n }\n });\n\n return {\n actionsWidth,\n updateActionsWidth,\n };\n}\n","<script setup lang=\"ts\">\n import { computed, inject, onBeforeMount, ref, useCssModule, useTemplateRef } from 'vue';\n\n import usePaginationStats from '../../composables/usePaginationStats/usePaginationStats';\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import IconLabel from '../IconLabel/IconLabel.vue';\n import MoreActions from '../MoreActions/MoreActions.vue';\n import { ToolbarRadiuses } from './DataViewToolbar.types';\n import { useActionsWidth } from './useActionsWidth';\n\n export interface DataViewToolbarProps {\n /**\n * When DataView has `variant=\"table\"` and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever all rows are selected, just like the standalone version on TableHeaderRow.\n */\n allRowsSelected?: boolean;\n\n /**\n * Hides the page statistics (ex: \"1 - 12 of 20\") in the toolbar\n */\n hidePageStats?: boolean;\n\n /**\n * Controls the corners of DataViewToolbar with the \"border-radius\" CSS property. The default value is \"rounded\".\n */\n radius?: ToolbarRadiuses;\n\n /**\n * When DataView has variant=\"table\" and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever one or more, but not all rows are selected, just like the standalone\n * version on TableHeaderRow.\n */\n someRowsSelected?: boolean;\n\n /**\n * The number of selected items. Used to display selected items count in the toolbar.\n */\n selectedItemsCount?: number;\n\n /**\n * When DataView has tabs above it, we need to remove the top left rounded corner\n */\n hasTabsAbove?: boolean;\n }\n\n const props = withDefaults(defineProps<DataViewToolbarProps>(), {\n allRowsSelected: false,\n hidePageStats: false,\n radius: undefined,\n someRowsSelected: false,\n selectedItemsCount: undefined,\n hasTabsAbove: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n // Refs for width calculation\n const toolbarRef = useTemplateRef('toolbarEl');\n const paginationRef = useTemplateRef('paginationEl');\n const checkboxRef = useTemplateRef('checkboxEl');\n\n const {\n isWithinModule,\n variant: dataViewVariant,\n density,\n currentPage,\n hasToolbar,\n isPaginateNextDisabled,\n isPaginationEnabled,\n isSelectable,\n pageCount,\n pageSize,\n totalDataCount,\n goPrevPage,\n goNextPage,\n isEmpty,\n isLoading,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n const classes = useCssModule();\n\n const { actionsWidth } = useActionsWidth({\n toolbarEl: toolbarRef,\n paginationEl: paginationRef,\n checkboxEl: checkboxRef,\n isPaginationEnabled,\n isSelectable,\n isEmpty,\n });\n\n const computedRadius = computed<ToolbarRadiuses>(() => {\n if (props.radius) {\n return props.radius;\n }\n\n if (isWithinModule.value) {\n return 'none';\n }\n\n if (dataViewVariant.value === 'table') {\n if (props.hasTabsAbove) {\n return 'rounded-top-right';\n }\n\n return 'rounded-top';\n }\n\n return 'rounded';\n });\n\n const pageStats = usePaginationStats({ currentPage, pageSize, totalItems: totalDataCount });\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n\n onBeforeMount(() => {\n if (hasToolbar) {\n hasToolbar.value = true;\n }\n });\n</script>\n\n<template>\n <div\n ref=\"toolbarEl\"\n class=\"stash-data-view-toolbar flex min-h-15 items-center justify-between bg-white py-1.5 shadow\"\n :class=\"{\n 'border-t border-ice-200': isWithinModule,\n 'rounded-tr': computedRadius === 'rounded-top-right',\n rounded: computedRadius === 'rounded',\n 'rounded-t': computedRadius === 'rounded-top',\n 'mb-3': dataViewVariant !== 'table' && !isWithinModule,\n 'px-3': density === 'compact',\n 'px-3 lg:px-6': density === 'comfortable',\n }\"\n data-test=\"stash-data-view-toolbar\"\n >\n <div class=\"flex place-items-center\">\n <Checkbox\n v-if=\"isSelectable && !isEmpty\"\n ref=\"checkboxEl\"\n :key=\"checkboxKey\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n :disabled=\"isLoading\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n <template v-if=\"$slots['more-actions']\">\n <MoreActions\n more-button-align=\"together\"\n :width=\"actionsWidth || undefined\"\n actions-container-class=\"flex items-center gap-x-2 lg:mr-6 lg:gap-x-6\"\n >\n <template #toggle=\"{ toggle }\">\n <Button\n icon-label\n class=\"text-blue-500\"\n data-test=\"stash-data-view-sort-button|sort-menu-button\"\n @click=\"toggle\"\n >\n <IconLabel icon=\"ellipsis\" stacked> More </IconLabel>\n </Button>\n </template>\n <slot></slot>\n <template #more-actions>\n <slot name=\"more-actions\"></slot>\n </template>\n </MoreActions>\n </template>\n <template v-else>\n <div :class=\"classes.actions\" class=\"stash-data-view-toolbar__actions flex items-center gap-x-2 lg:gap-x-4\">\n <slot></slot>\n </div>\n </template>\n </div>\n\n <!-- Pagination -->\n <div\n v-if=\"isPaginationEnabled\"\n ref=\"paginationEl\"\n class=\"stash-data-view-toolbar__pagination flex shrink-0 items-center\"\n >\n <slot name=\"selected-stats\">\n <span v-if=\"props.someRowsSelected && props.selectedItemsCount !== undefined\" class=\"mx-1.5\">\n {{ t('ll.listView.numberOfTotalSelected', { num: props.selectedItemsCount, total: totalDataCount }) }}\n </span>\n </slot>\n <slot name=\"page-stats\">\n <span v-if=\"!props.hidePageStats\" class=\"mx-1.5 hidden md:block\">\n {{ t('ll.pageStats', pageStats) }}\n </span>\n </slot>\n <template v-if=\"pageCount > 1\">\n <Button\n icon\n :aria-label=\"t('ll.previous')\"\n class=\"size-9 p-1.5\"\n data-test=\"button|prev-page\"\n :disabled=\"isLoading || currentPage === 1\"\n @click=\"goPrevPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-left\" size=\"dense\" />\n </Button>\n <Button\n icon\n :aria-label=\"t('ll.next')\"\n class=\"size-9 p-1.5\"\n data-test=\"button|next-page\"\n :disabled=\"isLoading || isPaginateNextDisabled || currentPage === pageCount\"\n @click=\"goNextPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-right\" size=\"dense\" />\n </Button>\n </template>\n </div>\n </div>\n</template>\n\n<style module>\n @layer utilities {\n .actions :global(.stash-button) {\n min-width: auto;\n padding: 0 0.5rem;\n\n &:first-child {\n margin-left: -0.5rem;\n }\n }\n }\n</style>\n"],"names":["useActionsWidth","options","toolbarEl","paginationEl","checkboxEl","isPaginationEnabled","isSelectable","isEmpty","actionsWidth","ref","toolbarResizeObserver","paginationResizeObserver","updateActionsWidth","toolbarWidth","paginationWidth","checkboxWidth","_a","computedStyle","paddingLeft","paddingRight","availableWidth","setupResizeObserver","nextTick","cleanupResizeObserver","onMounted","onBeforeUnmount","watch","newPaginationEl","props","__props","emit","__emit","toolbarRef","useTemplateRef","paginationRef","checkboxRef","isWithinModule","dataViewVariant","density","currentPage","hasToolbar","isPaginateNextDisabled","pageCount","pageSize","totalDataCount","goPrevPage","goNextPage","isLoading","inject","DATA_VIEW_INJECTION","checkboxKey","classes","useCssModule","computedRadius","computed","pageStats","usePaginationStats","onSelect","onBeforeMount","_createElementBlock","_unref","_createElementVNode","_hoisted_1","_createBlock","Checkbox","t","$slots","MoreActions","_withCtx","toggle","_createVNode","Button","IconLabel","_cache","_renderSlot","_ctx","_normalizeClass","_openBlock","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_Fragment","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataViewToolbar.js","sources":["../src/components/DataViewToolbar/useActionsWidth.ts","../src/components/DataViewToolbar/DataViewToolbar.vue"],"sourcesContent":["import { ComputedRef, nextTick, onBeforeUnmount, onMounted, Ref, ref, ShallowRef, watch } from 'vue';\n\nimport { toComponentEl, toElement } from '../../utils/templateRefNarrowing';\n\nexport interface UseActionsWidthOptions {\n toolbarEl: ShallowRef<unknown>;\n paginationEl: ShallowRef<unknown>;\n checkboxEl: ShallowRef<unknown>;\n isPaginationEnabled: ComputedRef<boolean> | undefined;\n isSelectable: Ref<boolean> | undefined;\n isEmpty: ComputedRef<boolean> | undefined;\n}\n\nexport function useActionsWidth(options: UseActionsWidthOptions) {\n const { toolbarEl, paginationEl, checkboxEl, isPaginationEnabled, isSelectable, isEmpty } = options;\n\n const actionsWidth = ref<string | null>(null);\n let toolbarResizeObserver: ResizeObserver | null = null;\n let paginationResizeObserver: ResizeObserver | null = null;\n\n const updateActionsWidth = () => {\n const toolbarElVal = toElement(toolbarEl.value);\n if (!toolbarElVal) return;\n\n const toolbarWidth = toolbarElVal.getBoundingClientRect().width;\n let paginationWidth = 0;\n let checkboxWidth = 0;\n\n // Calculate pagination width if pagination is enabled\n if (isPaginationEnabled?.value) {\n const paginationElVal = toElement(paginationEl.value);\n if (paginationElVal) paginationWidth = paginationElVal.getBoundingClientRect().width;\n }\n\n // Calculate checkbox width if selectable and not empty\n if (isSelectable?.value && !isEmpty?.value) {\n const checkboxElVal = toComponentEl(checkboxEl.value);\n if (checkboxElVal) checkboxWidth = checkboxElVal.getBoundingClientRect().width;\n }\n\n // Get computed styles to calculate padding\n const computedStyle = window.getComputedStyle(toolbarElVal);\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n\n const availableWidth = Math.max(0, toolbarWidth - paginationWidth - checkboxWidth - paddingLeft - paddingRight);\n actionsWidth.value = `${availableWidth}px`;\n };\n\n const setupResizeObserver = () => {\n const toolbarElVal = toElement(toolbarEl.value);\n if (!toolbarElVal) return;\n\n // Observe toolbar element\n toolbarResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n toolbarResizeObserver.observe(toolbarElVal);\n\n // Observe pagination element if it exists\n const paginationElVal = toElement(paginationEl.value);\n if (paginationElVal) {\n paginationResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n paginationResizeObserver.observe(paginationElVal);\n }\n };\n\n const cleanupResizeObserver = () => {\n if (toolbarResizeObserver) {\n toolbarResizeObserver.disconnect();\n toolbarResizeObserver = null;\n }\n if (paginationResizeObserver) {\n paginationResizeObserver.disconnect();\n paginationResizeObserver = null;\n }\n };\n\n onMounted(() => {\n nextTick(() => {\n updateActionsWidth();\n setupResizeObserver();\n });\n });\n\n onBeforeUnmount(() => {\n cleanupResizeObserver();\n });\n\n // Watch for changes in conditions that affect element visibility\n watch([isPaginationEnabled, isSelectable, isEmpty], () => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n\n // Watch for pagination element changes to setup/cleanup observer\n watch(paginationEl, (newPaginationEl) => {\n // Cleanup old observer if it exists\n if (paginationResizeObserver) {\n paginationResizeObserver.disconnect();\n paginationResizeObserver = null;\n }\n\n // Setup new observer if pagination element exists\n const el = toElement(newPaginationEl);\n if (el) {\n paginationResizeObserver = new ResizeObserver(() => {\n nextTick(() => {\n updateActionsWidth();\n });\n });\n paginationResizeObserver.observe(el);\n }\n });\n\n return {\n actionsWidth,\n updateActionsWidth,\n };\n}\n","<script setup lang=\"ts\">\n import { computed, inject, onBeforeMount, ref, useCssModule, useTemplateRef } from 'vue';\n\n import usePaginationStats from '../../composables/usePaginationStats/usePaginationStats';\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import IconLabel from '../IconLabel/IconLabel.vue';\n import MoreActions from '../MoreActions/MoreActions.vue';\n import { ToolbarRadiuses } from './DataViewToolbar.types';\n import { useActionsWidth } from './useActionsWidth';\n\n export interface DataViewToolbarProps {\n /**\n * When DataView has `variant=\"table\"` and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever all rows are selected, just like the standalone version on TableHeaderRow.\n */\n allRowsSelected?: boolean;\n\n /**\n * Hides the page statistics (ex: \"1 - 12 of 20\") in the toolbar\n */\n hidePageStats?: boolean;\n\n /**\n * Controls the corners of DataViewToolbar with the \"border-radius\" CSS property. The default value is \"rounded\".\n */\n radius?: ToolbarRadiuses;\n\n /**\n * When DataView has variant=\"table\" and Table has `is-selectable` enabled, it provides a way to flag\n * a checkbox whenever one or more, but not all rows are selected, just like the standalone\n * version on TableHeaderRow.\n */\n someRowsSelected?: boolean;\n\n /**\n * The number of selected items. Used to display selected items count in the toolbar.\n */\n selectedItemsCount?: number;\n\n /**\n * When DataView has tabs above it, we need to remove the top left rounded corner\n */\n hasTabsAbove?: boolean;\n }\n\n const props = withDefaults(defineProps<DataViewToolbarProps>(), {\n allRowsSelected: false,\n hidePageStats: false,\n radius: undefined,\n someRowsSelected: false,\n selectedItemsCount: undefined,\n hasTabsAbove: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n // Refs for width calculation\n const toolbarRef = useTemplateRef('toolbarEl');\n const paginationRef = useTemplateRef('paginationEl');\n const checkboxRef = useTemplateRef('checkboxEl');\n\n const {\n isWithinModule,\n variant: dataViewVariant,\n density,\n currentPage,\n hasToolbar,\n isPaginateNextDisabled,\n isPaginationEnabled,\n isSelectable,\n pageCount,\n pageSize,\n totalDataCount,\n goPrevPage,\n goNextPage,\n isEmpty,\n isLoading,\n } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n const classes = useCssModule();\n\n const { actionsWidth } = useActionsWidth({\n toolbarEl: toolbarRef,\n paginationEl: paginationRef,\n checkboxEl: checkboxRef,\n isPaginationEnabled,\n isSelectable,\n isEmpty,\n });\n\n const computedRadius = computed<ToolbarRadiuses>(() => {\n if (props.radius) {\n return props.radius;\n }\n\n if (isWithinModule.value) {\n return 'none';\n }\n\n if (dataViewVariant.value === 'table') {\n if (props.hasTabsAbove) {\n return 'rounded-top-right';\n }\n\n return 'rounded-top';\n }\n\n return 'rounded';\n });\n\n const pageStats = usePaginationStats({ currentPage, pageSize, totalItems: totalDataCount });\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n\n onBeforeMount(() => {\n if (hasToolbar) {\n hasToolbar.value = true;\n }\n });\n</script>\n\n<template>\n <div\n ref=\"toolbarEl\"\n class=\"stash-data-view-toolbar flex min-h-15 items-center justify-between bg-white py-1.5 shadow\"\n :class=\"{\n 'border-t border-ice-200': isWithinModule,\n 'rounded-tr': computedRadius === 'rounded-top-right',\n rounded: computedRadius === 'rounded',\n 'rounded-t': computedRadius === 'rounded-top',\n 'mb-3': dataViewVariant !== 'table' && !isWithinModule,\n 'px-3': density === 'compact',\n 'px-3 lg:px-6': density === 'comfortable',\n }\"\n data-test=\"stash-data-view-toolbar\"\n >\n <div class=\"flex place-items-center\">\n <Checkbox\n v-if=\"isSelectable && !isEmpty\"\n ref=\"checkboxEl\"\n :key=\"checkboxKey\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n :disabled=\"isLoading\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n <template v-if=\"$slots['more-actions']\">\n <MoreActions\n more-button-align=\"together\"\n :width=\"actionsWidth || undefined\"\n actions-container-class=\"flex items-center gap-x-2 lg:mr-6 lg:gap-x-6\"\n >\n <template #toggle=\"{ toggle }\">\n <Button\n icon-label\n class=\"text-blue-500\"\n data-test=\"stash-data-view-sort-button|sort-menu-button\"\n @click=\"toggle\"\n >\n <IconLabel icon=\"ellipsis\" stacked> More </IconLabel>\n </Button>\n </template>\n <slot></slot>\n <template #more-actions>\n <slot name=\"more-actions\"></slot>\n </template>\n </MoreActions>\n </template>\n <template v-else>\n <div :class=\"classes.actions\" class=\"stash-data-view-toolbar__actions flex items-center gap-x-2 lg:gap-x-4\">\n <slot></slot>\n </div>\n </template>\n </div>\n\n <!-- Pagination -->\n <div\n v-if=\"isPaginationEnabled\"\n ref=\"paginationEl\"\n class=\"stash-data-view-toolbar__pagination flex shrink-0 items-center\"\n >\n <slot name=\"selected-stats\">\n <span v-if=\"props.someRowsSelected && props.selectedItemsCount !== undefined\" class=\"mx-1.5\">\n {{ t('ll.listView.numberOfTotalSelected', { num: props.selectedItemsCount, total: totalDataCount }) }}\n </span>\n </slot>\n <slot name=\"page-stats\">\n <span v-if=\"!props.hidePageStats\" class=\"mx-1.5 hidden md:block\">\n {{ t('ll.pageStats', pageStats) }}\n </span>\n </slot>\n <template v-if=\"pageCount > 1\">\n <Button\n icon\n :aria-label=\"t('ll.previous')\"\n class=\"size-9 p-1.5\"\n data-test=\"button|prev-page\"\n :disabled=\"isLoading || currentPage === 1\"\n @click=\"goPrevPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-left\" size=\"dense\" />\n </Button>\n <Button\n icon\n :aria-label=\"t('ll.next')\"\n class=\"size-9 p-1.5\"\n data-test=\"button|next-page\"\n :disabled=\"isLoading || isPaginateNextDisabled || currentPage === pageCount\"\n @click=\"goNextPage({ shouldEmit: true })\"\n >\n <Icon name=\"chevron-right\" size=\"dense\" />\n </Button>\n </template>\n </div>\n </div>\n</template>\n\n<style module>\n @layer utilities {\n .actions :global(.stash-button) {\n min-width: auto;\n padding: 0 0.5rem;\n\n &:first-child {\n margin-left: -0.5rem;\n }\n }\n }\n</style>\n"],"names":["useActionsWidth","options","toolbarEl","paginationEl","checkboxEl","isPaginationEnabled","isSelectable","isEmpty","actionsWidth","ref","toolbarResizeObserver","paginationResizeObserver","updateActionsWidth","toolbarElVal","toElement","toolbarWidth","paginationWidth","checkboxWidth","paginationElVal","checkboxElVal","toComponentEl","computedStyle","paddingLeft","paddingRight","availableWidth","setupResizeObserver","nextTick","cleanupResizeObserver","onMounted","onBeforeUnmount","watch","newPaginationEl","el","props","__props","emit","__emit","toolbarRef","useTemplateRef","paginationRef","checkboxRef","isWithinModule","dataViewVariant","density","currentPage","hasToolbar","isPaginateNextDisabled","pageCount","pageSize","totalDataCount","goPrevPage","goNextPage","isLoading","inject","DATA_VIEW_INJECTION","checkboxKey","classes","useCssModule","computedRadius","computed","pageStats","usePaginationStats","onSelect","onBeforeMount","_createElementBlock","_unref","_createElementVNode","_hoisted_1","_createBlock","Checkbox","t","$slots","MoreActions","_withCtx","toggle","_createVNode","Button","IconLabel","_cache","_renderSlot","_ctx","_normalizeClass","_openBlock","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_Fragment","Icon"],"mappings":"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"}
|