@bynder/compact-view 5.1.3 → 5.2.0
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/ActiveFilter.js +33 -0
- package/ActiveFilter.js.map +1 -0
- package/ActiveFilters.js +81 -0
- package/ActiveFilters.js.map +1 -0
- package/AddMedia.js +90 -0
- package/AddMedia.js.map +1 -0
- package/Advanced.js +66 -0
- package/Advanced.js.map +1 -0
- package/App.d.ts +4 -2
- package/App.js +93 -0
- package/App.js.map +1 -0
- package/AssetCard.js +172 -0
- package/AssetCard.js.map +1 -0
- package/AssetCardMetaproperties.js +47 -0
- package/AssetCardMetaproperties.js.map +1 -0
- package/AssetFilter.js +138 -0
- package/AssetFilter.js.map +1 -0
- package/AssetFilterContext.js +162 -0
- package/AssetFilterContext.js.map +1 -0
- package/AssetItem.js +40 -0
- package/AssetItem.js.map +1 -0
- package/AssetList.js +158 -0
- package/AssetList.js.map +1 -0
- package/AssetTypeItem.js +34 -0
- package/AssetTypeItem.js.map +1 -0
- package/AssetsView.js +61 -0
- package/AssetsView.js.map +1 -0
- package/Autocomplete_new.js +148 -0
- package/Autocomplete_new.js.map +1 -0
- package/ButtonAction.js +14 -0
- package/ButtonAction.js.map +1 -0
- package/CardSkeleton.js +31 -0
- package/CardSkeleton.js.map +1 -0
- package/Checkbox.styles.js +38 -0
- package/Checkbox.styles.js.map +1 -0
- package/Chip.js +43 -0
- package/Chip.js.map +1 -0
- package/CollectionCard.js +56 -0
- package/CollectionCard.js.map +1 -0
- package/CollectionItem.js +41 -0
- package/CollectionItem.js.map +1 -0
- package/CollectionList.js +53 -0
- package/CollectionList.js.map +1 -0
- package/CollectionView.js +73 -0
- package/CollectionView.js.map +1 -0
- package/CollectionsView.js +58 -0
- package/CollectionsView.js.map +1 -0
- package/ConfigContext.js +18 -0
- package/ConfigContext.js.map +1 -0
- package/ConnectButton.js +20 -0
- package/ConnectButton.js.map +1 -0
- package/Container.js +52 -0
- package/Container.js.map +1 -0
- package/ContextAction.js +42 -0
- package/ContextAction.js.map +1 -0
- package/Dat/Dat.d.ts +2 -12
- package/Dat/DatDropdownItem.d.ts +1 -1
- package/Dat/index.d.ts +0 -1
- package/Dat.js +90 -0
- package/Dat.js.map +1 -0
- package/DatDropdownItem.js +47 -0
- package/DatDropdownItem.js.map +1 -0
- package/DesignSystemContext.js +12 -0
- package/DesignSystemContext.js.map +1 -0
- package/DirectionSelect.js +43 -0
- package/DirectionSelect.js.map +1 -0
- package/DocumentIcon.js +69 -0
- package/DocumentIcon.js.map +1 -0
- package/DomainInput.js +39 -0
- package/DomainInput.js.map +1 -0
- package/DragSelect.js +144 -0
- package/DragSelect.js.map +1 -0
- package/Dropdown.js +72 -0
- package/Dropdown.js.map +1 -0
- package/DropdownContent.js +59 -0
- package/DropdownContent.js.map +1 -0
- package/DropdownListItem.js +52 -0
- package/DropdownListItem.js.map +1 -0
- package/ErrorIcon.js +48 -0
- package/ErrorIcon.js.map +1 -0
- package/ErrorMessage.js +40 -0
- package/ErrorMessage.js.map +1 -0
- package/FieldSelect.js +74 -0
- package/FieldSelect.js.map +1 -0
- package/FileSelector.js +266 -0
- package/FileSelector.js.map +1 -0
- package/Header.js +42 -0
- package/Header.js.map +1 -0
- package/HorizontalScroll.js +51 -0
- package/HorizontalScroll.js.map +1 -0
- package/InfiniteScroll.js +26 -0
- package/InfiniteScroll.js.map +1 -0
- package/LeftArrow.js +31 -0
- package/LeftArrow.js.map +1 -0
- package/LoginComponent.js +32 -0
- package/LoginComponent.js.map +1 -0
- package/LoginContext.js +85 -0
- package/LoginContext.js.map +1 -0
- package/MetapropertyFilterContent.js +25 -0
- package/MetapropertyFilterContent.js.map +1 -0
- package/MetapropertyOption.js +24 -0
- package/MetapropertyOption.js.map +1 -0
- package/Modal.js +48 -0
- package/Modal.js.map +1 -0
- package/NoResults.js +51 -0
- package/NoResults.js.map +1 -0
- package/Oops.js +54 -0
- package/Oops.js.map +1 -0
- package/Option_new.js +50 -0
- package/Option_new.js.map +1 -0
- package/RefreshingSpinner.js +22 -0
- package/RefreshingSpinner.js.map +1 -0
- package/ReportModal.js +51 -0
- package/ReportModal.js.map +1 -0
- package/RightArrow.js +31 -0
- package/RightArrow.js.map +1 -0
- package/RootElementContext.js +12 -0
- package/RootElementContext.js.map +1 -0
- package/SearchInput.js +76 -0
- package/SearchInput.js.map +1 -0
- package/SelectedItemContainer.js +44 -0
- package/SelectedItemContainer.js.map +1 -0
- package/SelectedItems.js +27 -0
- package/SelectedItems.js.map +1 -0
- package/SelectionContext.js +144 -0
- package/SelectionContext.js.map +1 -0
- package/SelectionFooter.js +65 -0
- package/SelectionFooter.js.map +1 -0
- package/ShadowRoot.js +11 -0
- package/ShadowRoot.js.map +1 -0
- package/ShadowRootInternal.js +78 -0
- package/ShadowRootInternal.js.map +1 -0
- package/Shield.js +25 -0
- package/Shield.js.map +1 -0
- package/Skeleton.js +43 -0
- package/Skeleton.js.map +1 -0
- package/SmartFilterContent.js +11 -0
- package/SmartFilterContent.js.map +1 -0
- package/SmartFilterSelect_new.js +86 -0
- package/SmartFilterSelect_new.js.map +1 -0
- package/Smartfilters_new.js +190 -0
- package/Smartfilters_new.js.map +1 -0
- package/Spinner.js +32 -0
- package/Spinner.js.map +1 -0
- package/StatefulAssetList.js +100 -0
- package/StatefulAssetList.js.map +1 -0
- package/Styles.css.js +5 -0
- package/Styles.css.js.map +1 -0
- package/SwitchNLS.js +80 -0
- package/SwitchNLS.js.map +1 -0
- package/TagItem.js +38 -0
- package/TagItem.js.map +1 -0
- package/Tags.js +48 -0
- package/Tags.js.map +1 -0
- package/Theming.js +30 -0
- package/Theming.js.map +1 -0
- package/Toolbar.js +53 -0
- package/Toolbar.js.map +1 -0
- package/Tooltip.js +81 -0
- package/Tooltip.js.map +1 -0
- package/ViewSwitch.js +45 -0
- package/ViewSwitch.js.map +1 -0
- package/api/filterAssets.d.ts +1 -1
- package/api/getCollections.d.ts +1 -1
- package/api/getFilterOptions.d.ts +9 -0
- package/api/getFilters.d.ts +2 -2
- package/api/getFilters_new.d.ts +7 -0
- package/api/getSimilarityAssets.d.ts +1 -1
- package/api/index.d.ts +3 -3
- package/api/rest/autocomplete.d.ts +1 -1
- package/api/rest/getAssetCounts.d.ts +2 -2
- package/api/rest/getInitialFilters.d.ts +2 -2
- package/api/rest/getMetapropertiesOptions.d.ts +1 -1
- package/api/types/getFilters_new.d.ts +56 -0
- package/app-config/ConfigContext.d.ts +4 -5
- package/app-config/appConfig.type.d.ts +2 -0
- package/app-config/appConfig.type.guard.d.ts +1 -1
- package/asset.type.js +31 -0
- package/asset.type.js.map +1 -0
- package/asyncDebounce.js +14 -0
- package/asyncDebounce.js.map +1 -0
- package/auth.js +35 -0
- package/auth.js.map +1 -0
- package/autocomplete.js +25 -0
- package/autocomplete.js.map +1 -0
- package/base64Converter.js +15 -0
- package/base64Converter.js.map +1 -0
- package/chunk.js +10 -0
- package/chunk.js.map +1 -0
- package/class.js +7 -0
- package/class.js.map +1 -0
- package/combineFilters.js +9 -0
- package/combineFilters.js.map +1 -0
- package/combineMetaproperties.js +25 -0
- package/combineMetaproperties.js.map +1 -0
- package/common/components/CardSkeleton.d.ts +1 -1
- package/common/components/Checkbox.styles.d.ts +4 -4
- package/common/components/Chip.d.ts +1 -1
- package/common/components/DocumentIcon.d.ts +1 -1
- package/common/components/DragSelect.d.ts +1 -1
- package/common/components/HorizontalScroll.d.ts +1 -1
- package/common/components/InfiniteScroll.d.ts +1 -1
- package/common/components/LeftArrow.d.ts +1 -1
- package/common/components/Modal.d.ts +1 -1
- package/common/components/NoResults.d.ts +1 -1
- package/common/components/RightArrow.d.ts +1 -1
- package/common/components/Skeleton.d.ts +1 -1
- package/common/components/Spinner.d.ts +1 -1
- package/common/components/Tooltip.d.ts +1 -1
- package/common/components/dropdown/Dropdown.d.ts +1 -1
- package/common/components/dropdown/DropdownContent.d.ts +1 -1
- package/common/components/dropdown/DropdownListItem.d.ts +1 -1
- package/common/hooks/useClickOutside.d.ts +1 -1
- package/constants.js +15 -0
- package/constants.js.map +1 -0
- package/createSelectors.js +11 -0
- package/createSelectors.js.map +1 -0
- package/crypto.js +21 -0
- package/crypto.js.map +1 -0
- package/error-handling/ErrorIcon.d.ts +1 -1
- package/error-handling/ErrorMessage.d.ts +1 -1
- package/error-handling/Oops.d.ts +1 -1
- package/error-handling/ReportModal.d.ts +1 -1
- package/error-handling/Shield.d.ts +1 -1
- package/filter/AssetFilter.d.ts +1 -1
- package/filter/AssetFilterContext.d.ts +3 -3
- package/filter/active-filters/ActiveFilter.d.ts +1 -1
- package/filter/active-filters/ActiveFilters.d.ts +1 -1
- package/filter/filters/advanced/Advanced.d.ts +1 -1
- package/filter/filters/advanced/AssetTypeItem.d.ts +1 -1
- package/filter/filters/metaproperty/Metaproperty.d.ts +1 -1
- package/filter/filters/metaproperty/MetapropertyFilterContent.d.ts +1 -1
- package/filter/filters/metaproperty/MetapropertyOption.d.ts +1 -1
- package/filter/filters/metaproperty/SmartFilterContent.d.ts +1 -1
- package/filter/filters/smartfilters/Metaproperties/Autocomplete.d.ts +3 -3
- package/filter/filters/smartfilters/Metaproperties/Autocomplete_new.d.ts +15 -0
- package/filter/filters/smartfilters/Metaproperties/Option.d.ts +2 -2
- package/filter/filters/smartfilters/Metaproperties/Option_new.d.ts +13 -0
- package/filter/filters/smartfilters/Metaproperties/SmartFilterSelect.d.ts +2 -2
- package/filter/filters/smartfilters/Metaproperties/SmartFilterSelect_new.d.ts +13 -0
- package/filter/filters/smartfilters/Smartfilters.d.ts +2 -2
- package/filter/filters/smartfilters/Smartfilters_new.d.ts +7 -0
- package/filter/filters/tags/TagItem.d.ts +1 -1
- package/filter/filters/tags/Tags.d.ts +1 -1
- package/filterAssets.js +177 -0
- package/filterAssets.js.map +1 -0
- package/getAsset.js +70 -0
- package/getAsset.js.map +1 -0
- package/getAssetCounts.js +27 -0
- package/getAssetCounts.js.map +1 -0
- package/getAssets.js +137 -0
- package/getAssets.js.map +1 -0
- package/getCollections.js +79 -0
- package/getCollections.js.map +1 -0
- package/getFilterOptions.js +57 -0
- package/getFilterOptions.js.map +1 -0
- package/getFilters.js +85 -0
- package/getFilters.js.map +1 -0
- package/getFilters_new.js +73 -0
- package/getFilters_new.js.map +1 -0
- package/getLimitedUseThumbnails.js +26 -0
- package/getLimitedUseThumbnails.js.map +1 -0
- package/getSimilarityAssets.js +141 -0
- package/getSimilarityAssets.js.map +1 -0
- package/handlers.js +7 -0
- package/handlers.js.map +1 -0
- package/helpers.js +7 -0
- package/helpers.js.map +1 -0
- package/index.js +9 -1162
- package/index.js.map +1 -0
- package/index2.js +18 -0
- package/index2.js.map +1 -0
- package/index3.js +56 -0
- package/index3.js.map +1 -0
- package/index4.js +20 -0
- package/index4.js.map +1 -0
- package/logger.js +7 -0
- package/logger.js.map +1 -0
- package/login/LoginComponent.d.ts +1 -1
- package/login/LoginContext.d.ts +1 -1
- package/login/components/ConnectButton.d.ts +1 -1
- package/login/components/Container.d.ts +1 -1
- package/login/components/DomainInput.d.ts +1 -1
- package/login/components/Header.d.ts +1 -1
- package/login/components/RefreshingSpinner.d.ts +1 -1
- package/loginwindow.js +84 -0
- package/loginwindow.js.map +1 -0
- package/normalizeResponse.js +31 -0
- package/normalizeResponse.js.map +1 -0
- package/oauth2.js +87 -0
- package/oauth2.js.map +1 -0
- package/order/DirectionSelect.d.ts +1 -1
- package/order/FieldSelect.d.ts +2 -2
- package/package.json +2 -9
- package/result.type.js +25 -0
- package/result.type.js.map +1 -0
- package/router/RouterContext.d.ts +1 -1
- package/search/SearchInput.d.ts +1 -1
- package/search/SwitchNLS.d.ts +1 -1
- package/search/index.d.ts +0 -2
- package/select/FileSelector.d.ts +1 -1
- package/select/SelectionContext.d.ts +1 -1
- package/select/SelectionFooter.d.ts +1 -1
- package/select/add-media/AddMedia.d.ts +1 -1
- package/select/add-media/ButtonAction.d.ts +1 -1
- package/select/current-selection/AssetItem.d.ts +1 -1
- package/select/current-selection/CollectionItem.d.ts +1 -1
- package/select/current-selection/SelectedItemContainer.d.ts +1 -1
- package/select/current-selection/SelectedItems.d.ts +1 -1
- package/store/useDatStore.d.ts +73 -0
- package/store/useOrderingStore.d.ts +2 -2
- package/store/useRouterStore.d.ts +4 -4
- package/store/useSearchStore.d.ts +69 -0
- package/store/useSimilaritySearchStore.d.ts +67 -0
- package/style/DesignSystemContext.d.ts +1 -1
- package/style/RootElementContext.d.ts +1 -1
- package/style/Theming.d.ts +1 -1
- package/style/shadowroot/ShadowRoot.d.ts +1 -1
- package/style/shadowroot/ShadowRootInternal.d.ts +1 -1
- package/text.js +9 -0
- package/text.js.map +1 -0
- package/toolbar/Toolbar.d.ts +1 -1
- package/toolbar/ViewSwitch.d.ts +1 -1
- package/trimMetapropertyValue.js +6 -0
- package/trimMetapropertyValue.js.map +1 -0
- package/url.js +7 -0
- package/url.js.map +1 -0
- package/useAccountDomain.js +33 -0
- package/useAccountDomain.js.map +1 -0
- package/useAuthInformation.js +42 -0
- package/useAuthInformation.js.map +1 -0
- package/useClickOutside.js +16 -0
- package/useClickOutside.js.map +1 -0
- package/useDatStore.js +62 -0
- package/useDatStore.js.map +1 -0
- package/useDimensions.js +31 -0
- package/useDimensions.js.map +1 -0
- package/useOrderingStore.js +27 -0
- package/useOrderingStore.js.map +1 -0
- package/useRouterStore.js +21 -0
- package/useRouterStore.js.map +1 -0
- package/useSearchStore.js +49 -0
- package/useSearchStore.js.map +1 -0
- package/useSimilaritySearchStore.js +28 -0
- package/useSimilaritySearchStore.js.map +1 -0
- package/utils/base64Converter.d.ts +1 -1
- package/utils/combineFilters.d.ts +1 -1
- package/utils/combineMetaproperties.d.ts +2 -2
- package/utils/filterEmptyMetaproperties.d.ts +1 -1
- package/utils/getLimitedUseThumbnails.d.ts +2 -0
- package/utils/getMetaPropertiesForFilter.d.ts +1 -1
- package/utils/normalizeResponse.d.ts +1 -1
- package/utils.js +49 -0
- package/utils.js.map +1 -0
- package/utils2.js +51 -0
- package/utils2.js.map +1 -0
- package/views/asset/AssetList.d.ts +5 -3
- package/views/asset/AssetsView.d.ts +1 -1
- package/views/asset/StatefulAssetList.d.ts +2 -2
- package/views/asset/asset-card/AssetCard.d.ts +1 -1
- package/views/asset/asset-card/AssetCardMetaproperties.d.ts +3 -3
- package/views/asset/asset-card/ContextAction.d.ts +1 -1
- package/views/collection/CollectionView.d.ts +1 -1
- package/views/collections/CollectionCard.d.ts +1 -1
- package/views/collections/CollectionList.d.ts +1 -1
- package/views/collections/CollectionsView.d.ts +1 -1
- package/Dat/DatContext.d.ts +0 -12
- package/__tests__/utils/index.d.ts +0 -116
- package/api/__tests__/testMocks/mocks.d.ts +0 -14
- package/api/__tests__/utils.d.ts +0 -10
- package/common/components/__mocks__/Tooltip.d.ts +0 -6
- package/common/components/__tests__/utils.d.ts +0 -34
- package/error-handling/__tests__/utils.d.ts +0 -56
- package/filter/__tests__/utils.d.ts +0 -13
- package/index.mjs +0 -1163
- package/login/__tests__/mocks.d.ts +0 -1
- package/login/__tests__/utils.d.ts +0 -41
- package/search/SearchContext.d.ts +0 -25
- package/search/SimilaritySearchContext.d.ts +0 -21
- package/search/__mocks__/SimilaritySearchContext.d.ts +0 -5
- package/select/__tests__/utils.d.ts +0 -11
- package/style/shadowroot/__mocks__/ShadowRoot.d.ts +0 -4
- package/utils/__mocks__/logger.d.ts +0 -4
- package/views/asset/__tests__/utils.d.ts +0 -7
- package/views/collections/__tests__/utils.d.ts +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartFilterContent.js","sources":["../../src/filter/filters/metaproperty/SmartFilterContent.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { token } from '@bynder/design-system';\n\nimport { MetaPropertyFilterContent, MetapropertyType } from './MetapropertyFilterContent';\nimport { MetapropertyOptionType } from './MetapropertyOption';\n\nexport interface SmartfilterType {\n\t__typename: 'Smartfilter';\n\tid: string;\n\tlabel: string;\n\tmetaproperties: MetapropertyType[];\n\ticon?: string;\n\tzIndex: number;\n}\n\ninterface SmartfilterProps {\n\tsmartfilter: SmartfilterType;\n\tselectedOptionIds: string[];\n\tisLoading: boolean;\n\tonAddOption: (metapropertyOption: MetapropertyOptionType) => void;\n\tonRemoveOption: (metapropertyOption: MetapropertyOptionType) => void;\n}\n\nexport function SmartFilterContent(props: SmartfilterProps) {\n\treturn (\n\t\t<Container>\n\t\t\t{props.smartfilter.metaproperties.map((metaproperty) => (\n\t\t\t\t<MetaPropertyFilterContent\n\t\t\t\t\tkey={metaproperty.id}\n\t\t\t\t\tmetaproperty={metaproperty}\n\t\t\t\t\tselectedOptionIds={props.selectedOptionIds}\n\t\t\t\t\tisLoading={props.isLoading}\n\t\t\t\t\tonAddOption={props.onAddOption}\n\t\t\t\t\tonRemoveOption={props.onRemoveOption}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Container>\n\t);\n}\n\nconst Container = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: ${token.spacing4};\n\toverflow: auto;\n`;\n"],"names":["styled","token"],"mappings":";;;;AAyCkBA,EAAO;AAAA;AAAA;AAAA,QAGjBC,EAAM,QAAQ;AAAA;AAAA;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsxs as O, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useState as a } from "react";
|
|
3
|
+
import n from "styled-components";
|
|
4
|
+
import { token as i } from "@bynder/design-system";
|
|
5
|
+
import { useGetFilterOptions as F } from "./getFilterOptions.js";
|
|
6
|
+
import { InfiniteScroll as S } from "./InfiniteScroll.js";
|
|
7
|
+
import { OptionComponent as v } from "./Option_new.js";
|
|
8
|
+
const G = ({
|
|
9
|
+
metaproperty: t,
|
|
10
|
+
smartfilterId: d,
|
|
11
|
+
onOptionSelect: c,
|
|
12
|
+
selectedOptions: m,
|
|
13
|
+
filteredMetaproperty: r,
|
|
14
|
+
metapropertyCursor: p
|
|
15
|
+
}) => {
|
|
16
|
+
const [x, h] = a(t.options), [s, l] = a(p), { isLoading: f, fetchFilterOptions: u } = F({
|
|
17
|
+
smartfilterId: d,
|
|
18
|
+
metapropertyId: t.id
|
|
19
|
+
}), g = async () => {
|
|
20
|
+
const e = await u(s || "");
|
|
21
|
+
if (!e) {
|
|
22
|
+
l(void 0);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const w = e.filterOptions.metadata.nextCursorMark;
|
|
26
|
+
l(w);
|
|
27
|
+
const b = e.filterOptions.metaproperty.options;
|
|
28
|
+
h((C) => [...C, ...b]);
|
|
29
|
+
};
|
|
30
|
+
return /* @__PURE__ */ O(M, { "data-testid": "metaproperty-filter-content", children: [
|
|
31
|
+
/* @__PURE__ */ o(
|
|
32
|
+
$,
|
|
33
|
+
{
|
|
34
|
+
"data-testid": "metaproperty-title",
|
|
35
|
+
title: t.label || t.name,
|
|
36
|
+
children: t.label || t.name
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
/* @__PURE__ */ o(k, { children: /* @__PURE__ */ o(
|
|
40
|
+
S,
|
|
41
|
+
{
|
|
42
|
+
isLoading: f,
|
|
43
|
+
hasNextPage: !!s,
|
|
44
|
+
loadMore: g,
|
|
45
|
+
children: x.map((e) => r[e?.name] ? /* @__PURE__ */ o(
|
|
46
|
+
v,
|
|
47
|
+
{
|
|
48
|
+
option: e,
|
|
49
|
+
onClick: c,
|
|
50
|
+
metapropertyName: t.name,
|
|
51
|
+
isSelected: !!m[t.name]?.[e.id],
|
|
52
|
+
metapropertyMultifilter: !!t.isMultifilter,
|
|
53
|
+
count: r[e.name],
|
|
54
|
+
showCount: t.showCounter
|
|
55
|
+
},
|
|
56
|
+
e.id
|
|
57
|
+
) : null)
|
|
58
|
+
}
|
|
59
|
+
) })
|
|
60
|
+
] });
|
|
61
|
+
}, M = n.div`
|
|
62
|
+
color: ${i.colorText};
|
|
63
|
+
width: 282px;
|
|
64
|
+
`, $ = n.h3`
|
|
65
|
+
padding: ${i.spacing5};
|
|
66
|
+
margin: 0;
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
text-overflow: ellipsis;
|
|
69
|
+
white-space: nowrap;
|
|
70
|
+
font-size: ${i.fontSize100};
|
|
71
|
+
line-height: ${i.lineHeightText};
|
|
72
|
+
border-bottom: 1px solid rgba(3, 16, 38, 0.1);
|
|
73
|
+
box-shadow: 0px 0px 1px 0px rgba(3, 16, 38, 0.1), 0px 1px 4px -1px rgba(3, 16, 38, 0.1);
|
|
74
|
+
`, k = n.ul`
|
|
75
|
+
max-height: 400px;
|
|
76
|
+
overflow-y: auto;
|
|
77
|
+
padding: 0;
|
|
78
|
+
width: 100%;
|
|
79
|
+
list-style: none;
|
|
80
|
+
margin: 0;
|
|
81
|
+
scrollbar-width: none;
|
|
82
|
+
`;
|
|
83
|
+
export {
|
|
84
|
+
G as SmartFilterSelect
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=SmartFilterSelect_new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartFilterSelect_new.js","sources":["../../src/filter/filters/smartfilters/Metaproperties/SmartFilterSelect_new.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { token } from '@bynder/design-system';\n\nimport { Metaproperty, MetapropertyOption } from '@src/api/types/getFilters_new';\nimport { useGetFilterOptions } from '@src/api/getFilterOptions';\nimport { SmartfilterSelectedOptionType } from '@src/api/rest/types';\nimport { InfiniteScroll } from '@src/common/components/InfiniteScroll';\nimport { OptionComponent } from './Option_new';\n\ntype Props = {\n\tmetaproperty: Metaproperty;\n\tsmartfilterId: string;\n\tonOptionSelect: (\n\t\tmetapropertyName: string,\n\t\toption: MetapropertyOption,\n\t\tisMultifilter: boolean,\n\t) => void;\n\tselectedOptions: Record<string, Record<string, SmartfilterSelectedOptionType>>;\n\tfilteredMetaproperty: Record<string, number>;\n\tmetapropertyCursor?: string;\n};\n\nconst SmartFilterSelect = ({\n\tmetaproperty,\n\tsmartfilterId,\n\tonOptionSelect,\n\tselectedOptions,\n\tfilteredMetaproperty,\n\tmetapropertyCursor,\n}: Props) => {\n\tconst [options, setOptions] = useState(metaproperty.options);\n\tconst [cursor, setCursor] = useState<string | undefined>(metapropertyCursor);\n\n\tconst { isLoading, fetchFilterOptions } = useGetFilterOptions({\n\t\tsmartfilterId,\n\t\tmetapropertyId: metaproperty.id,\n\t});\n\n\tconst handleLoadMore = async () => {\n\t\tconst response = await fetchFilterOptions(cursor || '');\n\n\t\tif (!response) {\n\t\t\tsetCursor(undefined);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextCursor = response.filterOptions.metadata.nextCursorMark;\n\t\tsetCursor(nextCursor);\n\n\t\tconst newOptions = response.filterOptions.metaproperty.options;\n\t\tsetOptions((prevOptions) => [...prevOptions, ...newOptions]);\n\t};\n\n\treturn (\n\t\t<FilterContent data-testid=\"metaproperty-filter-content\">\n\t\t\t<FilterHead\n\t\t\t\tdata-testid=\"metaproperty-title\"\n\t\t\t\ttitle={metaproperty.label || metaproperty.name}\n\t\t\t>\n\t\t\t\t{metaproperty.label || metaproperty.name}\n\t\t\t</FilterHead>\n\t\t\t<FilterList>\n\t\t\t\t<InfiniteScroll\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\thasNextPage={!!cursor}\n\t\t\t\t\tloadMore={handleLoadMore}\n\t\t\t\t>\n\t\t\t\t\t{options.map((option) => {\n\t\t\t\t\t\tif (!filteredMetaproperty[option?.name]) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<OptionComponent\n\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\toption={option}\n\t\t\t\t\t\t\t\tonClick={onOptionSelect}\n\t\t\t\t\t\t\t\tmetapropertyName={metaproperty.name}\n\t\t\t\t\t\t\t\tisSelected={!!selectedOptions[metaproperty.name]?.[option.id]}\n\t\t\t\t\t\t\t\tmetapropertyMultifilter={!!metaproperty.isMultifilter}\n\t\t\t\t\t\t\t\tcount={filteredMetaproperty[option.name]}\n\t\t\t\t\t\t\t\tshowCount={metaproperty.showCounter}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</InfiniteScroll>\n\t\t\t</FilterList>\n\t\t</FilterContent>\n\t);\n};\n\nexport { SmartFilterSelect };\n\nconst FilterContent = styled.div`\n\tcolor: ${token.colorText};\n\twidth: 282px;\n`;\n\nconst FilterHead = styled.h3`\n\tpadding: ${token.spacing5};\n\tmargin: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: ${token.fontSize100};\n\tline-height: ${token.lineHeightText};\n\tborder-bottom: 1px solid rgba(3, 16, 38, 0.1);\n\tbox-shadow: 0px 0px 1px 0px rgba(3, 16, 38, 0.1), 0px 1px 4px -1px rgba(3, 16, 38, 0.1);\n`;\n\nconst FilterList = styled.ul`\n\tmax-height: 400px;\n\toverflow-y: auto;\n\tpadding: 0;\n\twidth: 100%;\n\tlist-style: none;\n\tmargin: 0;\n\tscrollbar-width: none;\n`;\n"],"names":["SmartFilterSelect","metaproperty","smartfilterId","onOptionSelect","selectedOptions","filteredMetaproperty","metapropertyCursor","options","setOptions","useState","cursor","setCursor","isLoading","fetchFilterOptions","useGetFilterOptions","handleLoadMore","response","nextCursor","newOptions","prevOptions","jsxs","FilterContent","jsx","FilterHead","FilterList","InfiniteScroll","option","OptionComponent","styled","token"],"mappings":";;;;;;;AAuBA,MAAMA,IAAoB,CAAC;AAAA,EAC1B,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,oBAAAC;AACD,MAAa;AACZ,QAAM,CAACC,GAASC,CAAU,IAAIC,EAASR,EAAa,OAAO,GACrD,CAACS,GAAQC,CAAS,IAAIF,EAA6BH,CAAkB,GAErE,EAAE,WAAAM,GAAW,oBAAAC,EAAA,IAAuBC,EAAoB;AAAA,IAC7D,eAAAZ;AAAA,IACA,gBAAgBD,EAAa;AAAA,EAAA,CAC7B,GAEKc,IAAiB,YAAY;AAClC,UAAMC,IAAW,MAAMH,EAAmBH,KAAU,EAAE;AAEtD,QAAI,CAACM,GAAU;AACd,MAAAL,EAAU,MAAS;AAEnB;AAAA,IACD;AAEA,UAAMM,IAAaD,EAAS,cAAc,SAAS;AACnD,IAAAL,EAAUM,CAAU;AAEpB,UAAMC,IAAaF,EAAS,cAAc,aAAa;AACvD,IAAAR,EAAW,CAACW,MAAgB,CAAC,GAAGA,GAAa,GAAGD,CAAU,CAAC;AAAA,EAC5D;AAEA,SACC,gBAAAE,EAACC,GAAA,EAAc,eAAY,+BAC1B,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,eAAY;AAAA,QACZ,OAAOtB,EAAa,SAASA,EAAa;AAAA,QAEzC,UAAAA,EAAa,SAASA,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEpCuB,GAAA,EACA,UAAA,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACA,WAAAb;AAAA,QACA,aAAa,CAAC,CAACF;AAAA,QACf,UAAUK;AAAA,QAET,UAAAR,EAAQ,IAAI,CAACmB,MACRrB,EAAqBqB,GAAQ,IAAI,IAKrC,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YAEA,QAAAD;AAAA,YACA,SAASvB;AAAA,YACT,kBAAkBF,EAAa;AAAA,YAC/B,YAAY,CAAC,CAACG,EAAgBH,EAAa,IAAI,IAAIyB,EAAO,EAAE;AAAA,YAC5D,yBAAyB,CAAC,CAACzB,EAAa;AAAA,YACxC,OAAOI,EAAqBqB,EAAO,IAAI;AAAA,YACvC,WAAWzB,EAAa;AAAA,UAAA;AAAA,UAPnByB,EAAO;AAAA,QAAA,IALN,IAeR;AAAA,MAAA;AAAA,IAAA,EACF,CACD;AAAA,EAAA,GACD;AAEF,GAIML,IAAgBO,EAAO;AAAA,UACnBC,EAAM,SAAS;AAAA;AAAA,GAInBN,IAAaK,EAAO;AAAA,YACdC,EAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,cAKZA,EAAM,WAAW;AAAA,gBACfA,EAAM,cAAc;AAAA;AAAA;AAAA,GAK9BL,IAAaI,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsx as i, Fragment as T, jsxs as O } from "react/jsx-runtime";
|
|
2
|
+
import { useState as p, useRef as f, useEffect as q } from "react";
|
|
3
|
+
import { styled as m } from "styled-components";
|
|
4
|
+
import { Box as G, token as w, Flex as J, Button as K } from "@bynder/design-system";
|
|
5
|
+
import { IconArrowLeft as Q, IconArrowRight as Y } from "@bynder/icons";
|
|
6
|
+
import { useConfig as Z } from "./ConfigContext.js";
|
|
7
|
+
import { useAssetFilter as tt } from "./AssetFilterContext.js";
|
|
8
|
+
import { Dropdown as et } from "./Dropdown.js";
|
|
9
|
+
import { Autocomplete as rt } from "./Autocomplete_new.js";
|
|
10
|
+
import { SmartFilterSelect as nt } from "./SmartFilterSelect_new.js";
|
|
11
|
+
import { getAutocompleteOptions as ot } from "./autocomplete.js";
|
|
12
|
+
import { useAuth as it } from "./LoginContext.js";
|
|
13
|
+
import { debounceAsync as st } from "./asyncDebounce.js";
|
|
14
|
+
const vt = ({ filterData: l }) => {
|
|
15
|
+
const s = tt(), b = it(), { language: D } = Z(), $ = lt(l), [L, y] = p({}), [X, A] = p(), [I, M] = p({}), [g, d] = p(0), [c, P] = p(0), [v, F] = p(!1), a = f(null), x = f(!1), u = f(null), h = f(null), S = f({});
|
|
16
|
+
q(() => {
|
|
17
|
+
a.current && P(a.current.scrollWidth - a.current.clientWidth), s.isDropdownActive || (y({}), A({}));
|
|
18
|
+
}, [l, a, s]);
|
|
19
|
+
const R = g === 0, U = c > 5 && g !== c;
|
|
20
|
+
function z() {
|
|
21
|
+
d((e) => {
|
|
22
|
+
const t = Math.max(e - 250, 0);
|
|
23
|
+
return t >= 100 ? t : 0;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function E() {
|
|
27
|
+
d((e) => {
|
|
28
|
+
const t = Math.min(e + 250, c);
|
|
29
|
+
return t <= c - 100 ? t : c;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const N = async (e, t) => {
|
|
33
|
+
let n;
|
|
34
|
+
M((o) => ({
|
|
35
|
+
...o,
|
|
36
|
+
[t]: !0
|
|
37
|
+
})), e.length >= 2 && (n = await ot({
|
|
38
|
+
metapropertyId: t,
|
|
39
|
+
auth: b,
|
|
40
|
+
searchTerm: e
|
|
41
|
+
})), A((o) => ({
|
|
42
|
+
...o,
|
|
43
|
+
[t]: n || null
|
|
44
|
+
})), M((o) => ({
|
|
45
|
+
...o,
|
|
46
|
+
[t]: !1
|
|
47
|
+
}));
|
|
48
|
+
}, W = (e) => (S.current[e] || (S.current[e] = st(N, 500)), S.current[e]), C = (e, t, n) => {
|
|
49
|
+
s.selectSmartfilterOption(e, t, n);
|
|
50
|
+
}, j = (e, t) => {
|
|
51
|
+
y((o) => ({
|
|
52
|
+
...o,
|
|
53
|
+
[e]: t
|
|
54
|
+
})), W(e)(t, e);
|
|
55
|
+
}, B = (e) => {
|
|
56
|
+
u.current = e.clientX, x.current = !1, F(!0);
|
|
57
|
+
}, H = (e) => {
|
|
58
|
+
if (x.current) {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
const t = (n) => {
|
|
61
|
+
n.stopPropagation(), document.removeEventListener("click", t, !0);
|
|
62
|
+
};
|
|
63
|
+
document.addEventListener("click", t, {
|
|
64
|
+
capture: !0,
|
|
65
|
+
once: !0
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
u.current = null, h.current = null, F(!1);
|
|
69
|
+
}, V = (e) => {
|
|
70
|
+
if (!v || !a.current || !u.current) return;
|
|
71
|
+
e.preventDefault(), h.current === null && (h.current = g), u.current && Math.abs(e.clientX - u.current) > 5 && (x.current = !0);
|
|
72
|
+
const t = (e.clientX - u.current) * -1 + h.current;
|
|
73
|
+
return t <= 16 ? d(0) : t + 16 < c ? d(t) : d(c);
|
|
74
|
+
};
|
|
75
|
+
return /* @__PURE__ */ i(T, { children: $.map((e) => {
|
|
76
|
+
const t = e.smartfilter, n = e.metapropertyFilters;
|
|
77
|
+
return /* @__PURE__ */ i(
|
|
78
|
+
et,
|
|
79
|
+
{
|
|
80
|
+
title: t.labels[D] || t.labels.en_US,
|
|
81
|
+
alt: t.labels[D] || t.labels.en_US,
|
|
82
|
+
isSmall: !0,
|
|
83
|
+
fadeIn: !0,
|
|
84
|
+
isMetapropertyDropdown: !0,
|
|
85
|
+
children: () => /* @__PURE__ */ O(
|
|
86
|
+
ct,
|
|
87
|
+
{
|
|
88
|
+
ref: a,
|
|
89
|
+
onMouseDown: B,
|
|
90
|
+
onMouseUp: H,
|
|
91
|
+
onMouseMove: V,
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ i(
|
|
94
|
+
at,
|
|
95
|
+
{
|
|
96
|
+
$scroll: g,
|
|
97
|
+
"data-testid": "metaproperty-dropdown-content",
|
|
98
|
+
$isDragging: v,
|
|
99
|
+
children: n.map((o) => {
|
|
100
|
+
const r = o.metaproperty;
|
|
101
|
+
if (!s.existingFilters?.[r.name] || r.type !== "autocomplete" && (r.type !== "smart-single" && r.type !== "select" || r.options.length === 0))
|
|
102
|
+
return null;
|
|
103
|
+
const _ = r.type === "autocomplete" ? /* @__PURE__ */ i(
|
|
104
|
+
rt,
|
|
105
|
+
{
|
|
106
|
+
metaproperty: r,
|
|
107
|
+
value: L[r.id] || "",
|
|
108
|
+
onChange: j,
|
|
109
|
+
onOptionSelect: C,
|
|
110
|
+
autocompleteOptions: X || {},
|
|
111
|
+
isLoading: I[r.id] || !1,
|
|
112
|
+
selectedOptions: s.selectedSmartfilterOptions || {}
|
|
113
|
+
}
|
|
114
|
+
) : /* @__PURE__ */ i(
|
|
115
|
+
nt,
|
|
116
|
+
{
|
|
117
|
+
metaproperty: r,
|
|
118
|
+
smartfilterId: t.id,
|
|
119
|
+
onOptionSelect: C,
|
|
120
|
+
selectedOptions: s.selectedSmartfilterOptions || {},
|
|
121
|
+
filteredMetaproperty: s.existingFilters?.[r.name],
|
|
122
|
+
metapropertyCursor: o.metadata.nextCursorMark
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
return /* @__PURE__ */ i(ut, { children: _ }, r.id);
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
),
|
|
129
|
+
/* @__PURE__ */ O(pt, { direction: "row", justifyContent: "flex-end", children: [
|
|
130
|
+
/* @__PURE__ */ i(
|
|
131
|
+
k,
|
|
132
|
+
{
|
|
133
|
+
title: "Previous",
|
|
134
|
+
icon: /* @__PURE__ */ i(Q, {}),
|
|
135
|
+
onClick: z,
|
|
136
|
+
"data-testid": "left-arrow",
|
|
137
|
+
isDisabled: R
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
/* @__PURE__ */ i(
|
|
141
|
+
k,
|
|
142
|
+
{
|
|
143
|
+
title: "Next",
|
|
144
|
+
icon: /* @__PURE__ */ i(Y, {}),
|
|
145
|
+
onClick: E,
|
|
146
|
+
"data-testid": "right-arrow",
|
|
147
|
+
isDisabled: !U
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] })
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
},
|
|
155
|
+
t.id
|
|
156
|
+
);
|
|
157
|
+
}) });
|
|
158
|
+
};
|
|
159
|
+
function lt(l) {
|
|
160
|
+
return [...l.filters].sort((s, b) => s.smartfilter.zindex - b.smartfilter.zindex);
|
|
161
|
+
}
|
|
162
|
+
const ct = m.div`
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-direction: column;
|
|
165
|
+
overflow: hidden;
|
|
166
|
+
`, at = m.div`
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-direction: row;
|
|
169
|
+
transform: translateX(-${(l) => l.$scroll}px);
|
|
170
|
+
transition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);
|
|
171
|
+
width: fit-content;
|
|
172
|
+
cursor: ${(l) => l.$isDragging ? "grabbing" : "default"};
|
|
173
|
+
`, ut = m(G)`
|
|
174
|
+
border-right: 1px solid rgba(3, 16, 38, 0.1);
|
|
175
|
+
max-width: 300px;
|
|
176
|
+
`, pt = m(J)`
|
|
177
|
+
padding: ${w.spacing3};
|
|
178
|
+
border-top: 1px solid rgba(3, 16, 38, 0.1);
|
|
179
|
+
gap: ${w.spacing3};
|
|
180
|
+
`, k = m(K)`
|
|
181
|
+
padding: ${w.spacing3};
|
|
182
|
+
border-radius: 6px;
|
|
183
|
+
border: 1px solid rgba(3, 16, 38, 0.1);
|
|
184
|
+
background: rgba(3, 16, 38, 0.03);
|
|
185
|
+
cursor: pointer;
|
|
186
|
+
`;
|
|
187
|
+
export {
|
|
188
|
+
vt as Smartfilter
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=Smartfilters_new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Smartfilters_new.js","sources":["../../src/filter/filters/smartfilters/Smartfilters_new.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { styled } from 'styled-components';\nimport { Box, Button, Flex, token } from '@bynder/design-system';\nimport { IconArrowLeft, IconArrowRight } from '@bynder/icons';\nimport { FilterData, MetapropertyOption } from '@src/api/types/getFilters_new';\nimport { useConfig } from '@src/app-config/ConfigContext';\nimport { useAssetFilter } from '../../AssetFilterContext';\nimport { Dropdown } from '@src/common/components/dropdown/Dropdown';\nimport { Autocomplete } from './Metaproperties/Autocomplete_new';\nimport { SmartFilterSelect } from './Metaproperties/SmartFilterSelect_new';\nimport { getAutocompleteOptions, AutocompleteOptions } from '@src/api/rest/autocomplete';\nimport { useAuth } from '@src/login/LoginContext';\nimport { debounceAsync } from '@src/utils/asyncDebounce';\nimport { AutocompleteOption } from '@src/api/rest/types';\n\ntype Props = {\n\tfilterData: FilterData;\n};\n\nconst Smartfilter = ({ filterData }: Props) => {\n\tconst assetFilterState = useAssetFilter();\n\tconst auth = useAuth();\n\tconst { language } = useConfig();\n\n\tconst sortedFilters = sortFilters(filterData);\n\n\tconst [inputValue, setInputValue] = useState<{ [key: string]: string }>({});\n\tconst [autocompleteOptions, setAutocompleteOptions] = useState<\n\t\tAutocompleteOptions | undefined\n\t>();\n\tconst [isLoading, setIsLoading] = useState<{ [key: string]: boolean }>({});\n\n\tconst [scroll, setScroll] = useState(0);\n\tconst [maxScroll, setMaxScroll] = useState(0);\n\n\tconst [isDragging, setIsDragging] = useState(false);\n\n\tconst nodeRef = useRef<HTMLDivElement>(null);\n\tconst hasMoved = useRef(false);\n\tconst initialX = useRef<number | null>(null);\n\tconst initialScrollPos = useRef<number | null>(null);\n\n\t// useRef to track inputs so we can debounce them individually\n\tconst debouncedFunctions = useRef<{\n\t\t[key: string]: (search: string, id: string) => Promise<void>;\n\t}>({});\n\n\tuseEffect(() => {\n\t\tif (nodeRef.current) {\n\t\t\tsetMaxScroll(nodeRef.current.scrollWidth - nodeRef.current.clientWidth);\n\t\t}\n\n\t\tif (!assetFilterState.isDropdownActive) {\n\t\t\tsetInputValue({});\n\t\t\tsetAutocompleteOptions({});\n\t\t}\n\t}, [filterData, nodeRef, assetFilterState]);\n\n\tconst isLeftArrowDisabled = scroll === 0;\n\tconst isRightArrowDisabled = maxScroll > 5 && scroll !== maxScroll;\n\n\tfunction handleLeftScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst leftScroll = Math.max(prevScroll - 250, 0);\n\n\t\t\treturn leftScroll >= 100 ? leftScroll : 0;\n\t\t});\n\t}\n\n\tfunction handleRightScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst rightScroll = Math.min(prevScroll + 250, maxScroll);\n\n\t\t\treturn rightScroll <= maxScroll - 100 ? rightScroll : maxScroll;\n\t\t});\n\t}\n\n\tconst handleApi = async (search: string, id: string) => {\n\t\tlet callAutocomplete;\n\t\t// set the loading state for the specific search as we can have more than 1\n\t\tsetIsLoading((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: true,\n\t\t}));\n\n\t\t// api searches of 1 character break the api returning a 500\n\t\tif (search.length >= 2) {\n\t\t\tcallAutocomplete = await getAutocompleteOptions({\n\t\t\t\tmetapropertyId: id,\n\t\t\t\tauth,\n\t\t\t\tsearchTerm: search,\n\t\t\t});\n\t\t}\n\n\t\tsetAutocompleteOptions((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: callAutocomplete ? callAutocomplete : null,\n\t\t}));\n\n\t\tsetIsLoading((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: false,\n\t\t}));\n\t};\n\n\tconst getDebouncedFunction = (id: string) => {\n\t\t// Create a debounced function for the specific input if it doesn't exist\n\t\tif (!debouncedFunctions.current[id]) {\n\t\t\tdebouncedFunctions.current[id] = debounceAsync(handleApi, 500) as (\n\t\t\t\tsearch: string,\n\t\t\t\tid: string,\n\t\t\t) => Promise<void>;\n\t\t}\n\n\t\treturn debouncedFunctions.current[id];\n\t};\n\n\tconst handleSmartfilterOptionSelections = (\n\t\tmetapropertyName: string,\n\t\toption: AutocompleteOption | MetapropertyOption,\n\t\tisMultifilter: boolean,\n\t) => {\n\t\tassetFilterState.selectSmartfilterOption(metapropertyName, option, isMultifilter);\n\t};\n\n\tconst handleAutocompleteInputChange = (metapropertyId: string, value: string) => {\n\t\tsetInputValue((prev) => ({\n\t\t\t...prev,\n\t\t\t[metapropertyId]: value,\n\t\t}));\n\t\tconst debouncedHandleApi = getDebouncedFunction(metapropertyId);\n\t\tdebouncedHandleApi(value, metapropertyId);\n\t};\n\n\tconst handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\t// Save the initial position for movement detection\n\t\tinitialX.current = event.clientX;\n\t\thasMoved.current = false;\n\t\tsetIsDragging(true);\n\t};\n\n\tconst handleMouseUp = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (hasMoved.current) {\n\t\t\tevent.preventDefault();\n\t\t\tconst preventClickPropagation = (e: MouseEvent) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tdocument.removeEventListener('click', preventClickPropagation, true);\n\t\t\t};\n\n\t\t\t// Add a one-time click handler that will fire before any other click handlers\n\t\t\tdocument.addEventListener('click', preventClickPropagation, {\n\t\t\t\tcapture: true,\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\n\t\tinitialX.current = null;\n\t\tinitialScrollPos.current = null;\n\n\t\tsetIsDragging(false);\n\t};\n\n\tconst handleDrag = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!isDragging || !nodeRef.current || !initialX.current) return;\n\n\t\tevent.preventDefault();\n\n\t\t// This tracks the initial scroll position when the drag starts so it doesn't reset\n\t\t// to 0 when the user starts dragging again.\n\t\tif (initialScrollPos.current === null) {\n\t\t\tinitialScrollPos.current = scroll;\n\t\t}\n\n\t\t// Check if we've moved enough to consider this a drag operation\n\t\tif (initialX.current) {\n\t\t\tconst deltaX = Math.abs(event.clientX - initialX.current);\n\n\t\t\t// If moved more than the threshold in either direction, mark as moved\n\t\t\tif (deltaX > 5) {\n\t\t\t\thasMoved.current = true;\n\t\t\t}\n\t\t}\n\n\t\tconst walkX = (event.clientX - initialX.current) * -1 + initialScrollPos.current;\n\n\t\t// 16 is to make the scroll a bit smoother in case of coming up short (Padding width offset)\n\t\tif (walkX <= 16) {\n\t\t\treturn setScroll(0);\n\t\t}\n\n\t\tif (walkX + 16 < maxScroll) {\n\t\t\treturn setScroll(walkX);\n\t\t}\n\n\t\treturn setScroll(maxScroll);\n\t};\n\n\t/* Note that it is important for the Dropdown component *not* to be rerendered when\n\t * the reference value of the filter object changes, only when it is actually a\n\t * different filter (i.e. when the ID changes). When a GraphQL request is made, the\n\t * same filter will be represented by a new object. If this causes a rerender of the\n\t * Dropdown component, the dropdown will close after every filter selection. Instead,\n\t * the dropdown should stay open after a filter is selected.\n\t */\n\treturn (\n\t\t<>\n\t\t\t{sortedFilters.map((filter) => {\n\t\t\t\tconst smartfilter = filter.smartfilter;\n\t\t\t\tconst metaproperties = filter.metapropertyFilters;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Dropdown\n\t\t\t\t\t\tkey={smartfilter.id}\n\t\t\t\t\t\ttitle={smartfilter.labels[language] || smartfilter.labels.en_US}\n\t\t\t\t\t\talt={smartfilter.labels[language] || smartfilter.labels.en_US}\n\t\t\t\t\t\tisSmall\n\t\t\t\t\t\tfadeIn\n\t\t\t\t\t\tisMetapropertyDropdown\n\t\t\t\t\t>\n\t\t\t\t\t\t{() => (\n\t\t\t\t\t\t\t<MetaPropertyFilterParent\n\t\t\t\t\t\t\t\tref={nodeRef}\n\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\t\t\t\t\tonMouseMove={handleDrag}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\t\t\t\t\t$scroll={scroll}\n\t\t\t\t\t\t\t\t\tdata-testid=\"metaproperty-dropdown-content\"\n\t\t\t\t\t\t\t\t\t$isDragging={isDragging}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{metaproperties.map((metapropertObject) => {\n\t\t\t\t\t\t\t\t\t\tconst metaproperty = metapropertObject.metaproperty;\n\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t!assetFilterState.existingFilters?.[metaproperty.name]\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type !== 'autocomplete' &&\n\t\t\t\t\t\t\t\t\t\t\t((metaproperty.type !== 'smart-single' &&\n\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type !== 'select') ||\n\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.options.length === 0)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst content =\n\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type === 'autocomplete' ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty={metaproperty}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={inputValue[metaproperty.id] || ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleAutocompleteInputChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonOptionSelect={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSmartfilterOptionSelections\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tautocompleteOptions={autocompleteOptions || {}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisLoading={isLoading[metaproperty.id] || false}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedOptions={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.selectedSmartfilterOptions ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<SmartFilterSelect\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty={metaproperty}\n\t\t\t\t\t\t\t\t\t\t\t\t\tsmartfilterId={smartfilter.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonOptionSelect={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSmartfilterOptionSelections\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedOptions={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.selectedSmartfilterOptions ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilteredMetaproperty={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.existingFilters?.[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetapropertyCursor={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmetapropertObject.metadata.nextCursorMark\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<DropdownContentContainer key={metaproperty.id}>\n\t\t\t\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t\t\t\t</DropdownContentContainer>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</DropdownContentWrapper>\n\n\t\t\t\t\t\t\t\t<NavigationParent direction=\"row\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t\t\t<NavigationArrow\n\t\t\t\t\t\t\t\t\t\ttitle=\"Previous\"\n\t\t\t\t\t\t\t\t\t\ticon={<IconArrowLeft />}\n\t\t\t\t\t\t\t\t\t\tonClick={handleLeftScroll}\n\t\t\t\t\t\t\t\t\t\tdata-testid=\"left-arrow\"\n\t\t\t\t\t\t\t\t\t\tisDisabled={isLeftArrowDisabled}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<NavigationArrow\n\t\t\t\t\t\t\t\t\t\ttitle=\"Next\"\n\t\t\t\t\t\t\t\t\t\ticon={<IconArrowRight />}\n\t\t\t\t\t\t\t\t\t\tonClick={handleRightScroll}\n\t\t\t\t\t\t\t\t\t\tdata-testid=\"right-arrow\"\n\t\t\t\t\t\t\t\t\t\tisDisabled={!isRightArrowDisabled}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</NavigationParent>\n\t\t\t\t\t\t\t</MetaPropertyFilterParent>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Dropdown>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nfunction sortFilters(filterData: FilterData) {\n\treturn [...filterData.filters].sort((a, b) => a.smartfilter.zindex - b.smartfilter.zindex);\n}\n\nexport { Smartfilter };\n\nconst MetaPropertyFilterParent = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n`;\n\nconst DropdownContentWrapper = styled.div<{ $scroll: number; $isDragging?: boolean }>`\n\tdisplay: flex;\n\tflex-direction: row;\n\ttransform: translateX(-${(p) => p.$scroll}px);\n\ttransition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);\n\twidth: fit-content;\n\tcursor: ${(p) => (p.$isDragging ? 'grabbing' : 'default')};\n`;\n\nconst DropdownContentContainer = styled(Box)`\n\tborder-right: 1px solid rgba(3, 16, 38, 0.1);\n\tmax-width: 300px;\n`;\n\nconst NavigationParent = styled(Flex)`\n\tpadding: ${token.spacing3};\n\tborder-top: 1px solid rgba(3, 16, 38, 0.1);\n\tgap: ${token.spacing3};\n`;\n\nconst NavigationArrow = styled(Button)`\n\tpadding: ${token.spacing3};\n\tborder-radius: 6px;\n\tborder: 1px solid rgba(3, 16, 38, 0.1);\n\tbackground: rgba(3, 16, 38, 0.03);\n\tcursor: pointer;\n`;\n"],"names":["Smartfilter","filterData","assetFilterState","useAssetFilter","auth","useAuth","language","useConfig","sortedFilters","sortFilters","inputValue","setInputValue","useState","autocompleteOptions","setAutocompleteOptions","isLoading","setIsLoading","scroll","setScroll","maxScroll","setMaxScroll","isDragging","setIsDragging","nodeRef","useRef","hasMoved","initialX","initialScrollPos","debouncedFunctions","useEffect","isLeftArrowDisabled","isRightArrowDisabled","handleLeftScroll","prevScroll","leftScroll","handleRightScroll","rightScroll","handleApi","search","id","callAutocomplete","prev","getAutocompleteOptions","getDebouncedFunction","debounceAsync","handleSmartfilterOptionSelections","metapropertyName","option","isMultifilter","handleAutocompleteInputChange","metapropertyId","value","handleMouseDown","event","handleMouseUp","preventClickPropagation","e","handleDrag","walkX","jsx","Fragment","filter","smartfilter","metaproperties","Dropdown","jsxs","MetaPropertyFilterParent","DropdownContentWrapper","metapropertObject","metaproperty","content","Autocomplete","SmartFilterSelect","DropdownContentContainer","NavigationParent","NavigationArrow","IconArrowLeft","IconArrowRight","a","styled","p","Box","Flex","token","Button"],"mappings":"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"}
|
package/Spinner.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { styled as r } from "styled-components";
|
|
3
|
+
import { token as n } from "@bynder/design-system";
|
|
4
|
+
function g(i) {
|
|
5
|
+
return /* @__PURE__ */ e(
|
|
6
|
+
s,
|
|
7
|
+
{
|
|
8
|
+
"data-testid": "spinner",
|
|
9
|
+
$isRelative: i.isRelative,
|
|
10
|
+
$isHidden: i.isHidden,
|
|
11
|
+
$isRefreshingSpinner: i.isRefreshingSpinner,
|
|
12
|
+
$isNotUsingMargin: i.isNotUsingMargin,
|
|
13
|
+
children: /* @__PURE__ */ e("svg", { className: "spinner", viewBox: "0 0 20 20", children: /* @__PURE__ */ e("circle", { cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "3" }) })
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
const s = r.div`
|
|
18
|
+
display: ${(i) => i.$isHidden ? "none" : "initial"};
|
|
19
|
+
position: ${(i) => i.$isRelative ? "relative" : "absolute"};
|
|
20
|
+
top: ${(i) => i.$isRefreshingSpinner ? "initial" : "0"};
|
|
21
|
+
right: ${(i) => i.$isRefreshingSpinner ? "initial" : "0"};
|
|
22
|
+
width: ${n.spacing6};
|
|
23
|
+
height: ${n.spacing6};
|
|
24
|
+
margin-right: ${(i) => i.$isNotUsingMargin ? "0" : n.spacing3};
|
|
25
|
+
margin-top: ${(i) => i.$isNotUsingMargin ? "0" : n.spacing4};
|
|
26
|
+
background-color: #fff;
|
|
27
|
+
color: rgba(0, 34, 51, 0.3);
|
|
28
|
+
`;
|
|
29
|
+
export {
|
|
30
|
+
g as Spinner
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=Spinner.js.map
|
package/Spinner.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../src/common/components/Spinner.tsx"],"sourcesContent":["import React from 'react';\n\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\n\ninterface Props {\n\tisRelative?: boolean;\n\tisHidden?: boolean;\n\tisRefreshingSpinner?: boolean;\n\tisNotUsingMargin?: boolean;\n}\n\nexport function Spinner(props: Props) {\n\treturn (\n\t\t<SpinnerContainer\n\t\t\tdata-testid=\"spinner\"\n\t\t\t$isRelative={props.isRelative}\n\t\t\t$isHidden={props.isHidden}\n\t\t\t$isRefreshingSpinner={props.isRefreshingSpinner}\n\t\t\t$isNotUsingMargin={props.isNotUsingMargin}\n\t\t>\n\t\t\t<svg className=\"spinner\" viewBox=\"0 0 20 20\">\n\t\t\t\t<circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"3\" />\n\t\t\t</svg>\n\t\t</SpinnerContainer>\n\t);\n}\n\nconst SpinnerContainer = styled.div<{\n\t$isRelative?: boolean;\n\t$isHidden?: boolean;\n\t$isRefreshingSpinner?: boolean;\n\t$isNotUsingMargin?: boolean;\n}>`\n\tdisplay: ${(props) => (props.$isHidden ? 'none' : 'initial')};\n\tposition: ${(props) => (props.$isRelative ? 'relative' : 'absolute')};\n\ttop: ${(props) => (props.$isRefreshingSpinner ? 'initial' : '0')};\n\tright: ${(props) => (props.$isRefreshingSpinner ? 'initial' : '0')};\n\twidth: ${token.spacing6};\n\theight: ${token.spacing6};\n\tmargin-right: ${(props) => (props.$isNotUsingMargin ? '0' : token.spacing3)};\n\tmargin-top: ${(props) => (props.$isNotUsingMargin ? '0' : token.spacing4)};\n\tbackground-color: #fff;\n\tcolor: rgba(0, 34, 51, 0.3);\n`;\n"],"names":["Spinner","props","jsx","SpinnerContainer","styled","token"],"mappings":";;;AAYO,SAASA,EAAQC,GAAc;AACrC,SACC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,aAAaF,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,sBAAsBA,EAAM;AAAA,MAC5B,mBAAmBA,EAAM;AAAA,MAEzB,4BAAC,OAAA,EAAI,WAAU,WAAU,SAAQ,aAChC,4BAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,QAAO,aAAY,KAAI,EAAA,CAC3D;AAAA,IAAA;AAAA,EAAA;AAGH;AAEA,MAAME,IAAmBC,EAAO;AAAA,YAMpB,CAACH,MAAWA,EAAM,YAAY,SAAS,SAAU;AAAA,aAChD,CAACA,MAAWA,EAAM,cAAc,aAAa,UAAW;AAAA,QAC7D,CAACA,MAAWA,EAAM,uBAAuB,YAAY,GAAI;AAAA,UACvD,CAACA,MAAWA,EAAM,uBAAuB,YAAY,GAAI;AAAA,UACzDI,EAAM,QAAQ;AAAA,WACbA,EAAM,QAAQ;AAAA,iBACR,CAACJ,MAAWA,EAAM,oBAAoB,MAAMI,EAAM,QAAS;AAAA,eAC7D,CAACJ,MAAWA,EAAM,oBAAoB,MAAMI,EAAM,QAAS;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as t, jsxs as F } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as c } from "react";
|
|
3
|
+
import { styled as f } from "styled-components";
|
|
4
|
+
import { token as i } from "@bynder/design-system";
|
|
5
|
+
import { IconErrorOutline as N } from "@bynder/icons";
|
|
6
|
+
import { __ as m } from "./index2.js";
|
|
7
|
+
import { NoResults as I } from "./NoResults.js";
|
|
8
|
+
import { useAssetFilter as _ } from "./AssetFilterContext.js";
|
|
9
|
+
import { useConfig as w } from "./ConfigContext.js";
|
|
10
|
+
import { useSelectedAssetIds as D, useSelection as R } from "./SelectionContext.js";
|
|
11
|
+
import { Oops as M } from "./Oops.js";
|
|
12
|
+
import { ActiveFilters as P } from "./ActiveFilters.js";
|
|
13
|
+
import { pluralize as $ } from "./text.js";
|
|
14
|
+
import { AssetList as b } from "./AssetList.js";
|
|
15
|
+
import { DirectionSelect as j } from "./DirectionSelect.js";
|
|
16
|
+
import { FieldSelect as k } from "./FieldSelect.js";
|
|
17
|
+
import { Tooltip as z } from "./Tooltip.js";
|
|
18
|
+
import { useSearchStore as B } from "./useSearchStore.js";
|
|
19
|
+
import { useSimilaritySearchStore as H } from "./useSimilaritySearchStore.js";
|
|
20
|
+
function ce(e) {
|
|
21
|
+
const { data: s, isLoading: r, loadMore: g, hasNextPage: p, executeQuery: d } = e.connection, { setIsLoading: S, setSearch: a } = B(), l = w(), A = D(), { selectAssets: h, toggleAssets: v, setAllAssets: L } = R(), x = _(), {
|
|
22
|
+
isNLSSelected: E,
|
|
23
|
+
NLSSearchText: y,
|
|
24
|
+
isSelected: C
|
|
25
|
+
} = H();
|
|
26
|
+
if (c(() => {
|
|
27
|
+
r || S(!1);
|
|
28
|
+
}, [r]), c(() => {
|
|
29
|
+
s.tag !== "Failure" && L(u(s));
|
|
30
|
+
}, [s]), s.tag === "Failure")
|
|
31
|
+
return /* @__PURE__ */ t(M, { error: new Error(s.value), onRetry: d });
|
|
32
|
+
const o = s.value?.searchAssets?.assets?.totalCount ?? e.totalCount, T = () => {
|
|
33
|
+
x.clear(), a("assets", ""), a("collection", "");
|
|
34
|
+
}, n = !!(C || E && y);
|
|
35
|
+
return /* @__PURE__ */ t(
|
|
36
|
+
b,
|
|
37
|
+
{
|
|
38
|
+
assets: u(s),
|
|
39
|
+
count: o,
|
|
40
|
+
isLoading: r,
|
|
41
|
+
loadMore: g,
|
|
42
|
+
hasNextPage: p,
|
|
43
|
+
theme: l.theme,
|
|
44
|
+
selectionMode: l.selectionMode,
|
|
45
|
+
selectedAssetIds: A,
|
|
46
|
+
onSelect: h,
|
|
47
|
+
onToggle: v,
|
|
48
|
+
emptyStateElement: /* @__PURE__ */ t(I, { onReset: T }),
|
|
49
|
+
children: /* @__PURE__ */ F(O, { children: [
|
|
50
|
+
o !== void 0 && /* @__PURE__ */ t(U, { "data-testid": "assets-amount", children: $(o, m("{} asset"), m("{} assets")) }, o),
|
|
51
|
+
e.showActiveFilters && /* @__PURE__ */ t(P, {}),
|
|
52
|
+
/* @__PURE__ */ t(
|
|
53
|
+
k,
|
|
54
|
+
{
|
|
55
|
+
options: n ? ["NL_SEARCH"] : ["CREATED_AT", "PUBLISHED_AT", "UPDATED_AT", "NAME"]
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ t(j, { nlSearch: n }),
|
|
59
|
+
n && /* @__PURE__ */ t(
|
|
60
|
+
z,
|
|
61
|
+
{
|
|
62
|
+
text: `You cannot change the sorting criteria while a Visual Similarity filter
|
|
63
|
+
is being applied`,
|
|
64
|
+
position: "left",
|
|
65
|
+
margin: "left",
|
|
66
|
+
marginAmount: "spacing3",
|
|
67
|
+
children: /* @__PURE__ */ t(N, {})
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] })
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function u(e) {
|
|
75
|
+
return e.tag === "Loading" && !e.value ? {
|
|
76
|
+
tag: "Loading",
|
|
77
|
+
value: void 0
|
|
78
|
+
} : e.tag === "Loading" ? {
|
|
79
|
+
tag: e.tag,
|
|
80
|
+
value: e.value?.searchAssets.assets.nodes
|
|
81
|
+
} : {
|
|
82
|
+
tag: e.tag,
|
|
83
|
+
value: e.value.searchAssets.assets.nodes
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const O = f.div`
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: space-between;
|
|
89
|
+
align-items: center;
|
|
90
|
+
z-index: 10;
|
|
91
|
+
padding: ${i.spacing5} ${i.spacing5} ${i.spacing3} ${i.spacing5};
|
|
92
|
+
`, U = f.span`
|
|
93
|
+
color: rgba(0, 34, 51, 0.5);
|
|
94
|
+
flex-shrink: 0;
|
|
95
|
+
animation: fade-in-down 0.15s ease-out;
|
|
96
|
+
`;
|
|
97
|
+
export {
|
|
98
|
+
ce as StatefulAssetList
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=StatefulAssetList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatefulAssetList.js","sources":["../../src/views/asset/StatefulAssetList.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { IconErrorOutline } from '@bynder/icons';\nimport { __ } from '@src/localization';\nimport { NoResults } from '@src/common/components/NoResults';\nimport { useAssetFilter } from '@src/filter/AssetFilterContext';\nimport { Connection } from '@src/api/graphql.types';\nimport { useConfig } from '@src/app-config/ConfigContext';\nimport { useSelectedAssetIds, useSelection } from '@src/select/SelectionContext';\nimport { Oops } from '@src/error-handling/Oops';\nimport { ActiveFilters } from '@src/filter/active-filters/ActiveFilters';\nimport { pluralize } from '@src/utils/text';\nimport { Asset } from './asset.type';\nimport { AssetList } from './AssetList';\nimport { DirectionSelect } from '@src/order/DirectionSelect';\nimport { FieldSelect } from '@src/order/FieldSelect';\nimport { Tooltip } from '@src/common/components/Tooltip';\nimport { useSearchStore } from '@src/store/useSearchStore';\nimport { useSimilaritySearchStore } from '@src/store/useSimilaritySearchStore';\n\ninterface DataValue {\n\tsearchAssets: {\n\t\tassets: {\n\t\t\ttotalCount: number;\n\t\t\tnodes: Asset[];\n\t\t};\n\t};\n}\n\ninterface Props {\n\tconnection: Connection<DataValue>;\n\ttotalCount?: number;\n\tshowActiveFilters?: boolean;\n}\n\nexport function StatefulAssetList(props: Props) {\n\tconst { data, isLoading, loadMore, hasNextPage, executeQuery } = props.connection;\n\tconst { setIsLoading, setSearch } = useSearchStore();\n\tconst config = useConfig();\n\tconst selectedAssetIds = useSelectedAssetIds();\n\tconst { selectAssets, toggleAssets, setAllAssets } = useSelection();\n\tconst assetFilterState = useAssetFilter();\n\tconst {\n\t\tisNLSSelected,\n\t\tNLSSearchText,\n\t\tisSelected: isSimilaritySearchSelected,\n\t} = useSimilaritySearchStore();\n\n\tuseEffect(() => {\n\t\tif (!isLoading) {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}, [isLoading]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tuseEffect(() => {\n\t\tif (data.tag !== 'Failure') {\n\t\t\tsetAllAssets(getAssetNodes(data));\n\t\t}\n\t}, [data]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tif (data.tag === 'Failure') {\n\t\treturn <Oops error={new Error(data.value)} onRetry={executeQuery} />;\n\t}\n\n\tconst totalCount = data.value?.searchAssets?.assets?.totalCount ?? props.totalCount;\n\n\tconst onReset = () => {\n\t\tassetFilterState.clear();\n\t\tsetSearch('assets', '');\n\t\tsetSearch('collection', '');\n\t};\n\n\tconst isAISearchPerformed = Boolean(\n\t\tisSimilaritySearchSelected || (isNLSSelected && NLSSearchText),\n\t);\n\n\treturn (\n\t\t<AssetList\n\t\t\tassets={getAssetNodes(data)}\n\t\t\tcount={totalCount}\n\t\t\tisLoading={isLoading}\n\t\t\tloadMore={loadMore}\n\t\t\thasNextPage={hasNextPage}\n\t\t\ttheme={config.theme}\n\t\t\tselectionMode={config.selectionMode}\n\t\t\tselectedAssetIds={selectedAssetIds}\n\t\t\tonSelect={selectAssets}\n\t\t\tonToggle={toggleAssets}\n\t\t\temptyStateElement={<NoResults onReset={onReset} />}\n\t\t>\n\t\t\t<StatefulAssetListContainer>\n\t\t\t\t{totalCount !== undefined && (\n\t\t\t\t\t<StatefulAssetListCount data-testid=\"assets-amount\" key={totalCount}>\n\t\t\t\t\t\t{pluralize(totalCount, __('{} asset'), __('{} assets'))}\n\t\t\t\t\t</StatefulAssetListCount>\n\t\t\t\t)}\n\n\t\t\t\t{props.showActiveFilters && <ActiveFilters />}\n\n\t\t\t\t<FieldSelect\n\t\t\t\t\toptions={\n\t\t\t\t\t\tisAISearchPerformed\n\t\t\t\t\t\t\t? ['NL_SEARCH']\n\t\t\t\t\t\t\t: ['CREATED_AT', 'PUBLISHED_AT', 'UPDATED_AT', 'NAME']\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<DirectionSelect nlSearch={isAISearchPerformed} />\n\t\t\t\t{isAISearchPerformed && (\n\t\t\t\t\t<Tooltip\n\t\t\t\t\t\ttext=\"You cannot change the sorting criteria while a Visual Similarity filter\n\t\t\t\t\t\t\tis being applied\"\n\t\t\t\t\t\tposition=\"left\"\n\t\t\t\t\t\tmargin=\"left\"\n\t\t\t\t\t\tmarginAmount=\"spacing3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconErrorOutline />\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t</StatefulAssetListContainer>\n\t\t</AssetList>\n\t);\n}\n\nfunction getAssetNodes(\n\tdata:\n\t\t| { tag: 'Loading'; value: undefined | null | DataValue }\n\t\t| { tag: 'Loaded'; value: DataValue },\n): { tag: 'Loading'; value: undefined | Asset[] } | { tag: 'Loaded'; value: Asset[] } {\n\tif (data.tag === 'Loading' && !data.value) {\n\t\treturn {\n\t\t\ttag: 'Loading',\n\t\t\tvalue: undefined,\n\t\t};\n\t} else if (data.tag === 'Loading') {\n\t\treturn {\n\t\t\ttag: data.tag,\n\t\t\tvalue: data.value?.searchAssets.assets.nodes,\n\t\t};\n\t}\n\n\treturn {\n\t\ttag: data.tag,\n\t\tvalue: data.value.searchAssets.assets.nodes,\n\t};\n}\n\nconst StatefulAssetListContainer = styled.div`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tz-index: 10;\n\tpadding: ${token.spacing5} ${token.spacing5} ${token.spacing3} ${token.spacing5};\n`;\n\nconst StatefulAssetListCount = styled.span`\n\tcolor: rgba(0, 34, 51, 0.5);\n\tflex-shrink: 0;\n\tanimation: fade-in-down 0.15s ease-out;\n`;\n"],"names":["StatefulAssetList","props","data","isLoading","loadMore","hasNextPage","executeQuery","setIsLoading","setSearch","useSearchStore","config","useConfig","selectedAssetIds","useSelectedAssetIds","selectAssets","toggleAssets","setAllAssets","useSelection","assetFilterState","useAssetFilter","isNLSSelected","NLSSearchText","isSimilaritySearchSelected","useSimilaritySearchStore","useEffect","getAssetNodes","jsx","Oops","totalCount","onReset","isAISearchPerformed","AssetList","NoResults","StatefulAssetListContainer","StatefulAssetListCount","pluralize","__","ActiveFilters","FieldSelect","DirectionSelect","Tooltip","IconErrorOutline","styled","token"],"mappings":"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"}
|
package/Styles.css.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const e = ':host{font-family:SourceSansPro,Source Sans Pro,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";--fade-in-down: fade-in-down .15s ease-out}.translate-y-2\\/4{-webkit-transform:translateY(-50%);transform:translateY(-50%)}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fade-in-down{0%{opacity:0;-webkit-transform:translateY(-2px);transform:translateY(-2px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fade-in-down{0%{opacity:0;-webkit-transform:translateY(-2px);transform:translateY(-2px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes border-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes border-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes border-dash{0%{stroke-dasharray:1,100;stroke-dashoffset:0}50%{stroke-dasharray:80,100;stroke-dashoffset:-20}to{stroke-dasharray:80,100;stroke-dashoffset:-48}}@keyframes border-dash{0%{stroke-dasharray:1,100;stroke-dashoffset:0}50%{stroke-dasharray:80,100;stroke-dashoffset:-20}to{stroke-dasharray:80,100;stroke-dashoffset:-48}}.transition-shadow{-webkit-transition:-webkit-box-shadow .1s linear;transition:-webkit-box-shadow .1s linear;transition:box-shadow .1s linear;transition:box-shadow .1s linear,-webkit-box-shadow .1s linear}.transition-transform{-webkit-transition:-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15);transition:-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15);transition:transform .6s cubic-bezier(.175,.885,.32,1.15);transition:transform .6s cubic-bezier(.175,.885,.32,1.15),-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15)}.cv-root{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;background-color:#fff;font-family:SourceSansPro,Source Sans Pro,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;font-size:16px;color:#023c}.cv-root *,.cv-root *:before,.cv-root *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.cv-container{overflow:hidden;width:100%;height:100%}.cv-container nav:last-of-type{-webkit-box-shadow:0 1px 0 0 rgba(0,34,51,.1),0 1px 6px 0 rgba(0,34,51,.1);box-shadow:0 1px #0022331a,0 1px 6px #0022331a}.cv-dropdown{position:fixed;border-width:1px;border-color:#0022331a;-webkit-animation:fade-in-down .15s ease-out;animation:fade-in-down .15s ease-out;margin-top:16px;border-radius:5px;-webkit-box-shadow:0 4px 10px 0 rgba(0,34,51,.1);box-shadow:0 4px 10px #0022331a;z-index:9999999;overflow-y:hidden;-webkit-transition:left .1s ease-out;transition:left .1s ease-out}.card-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-positive:1;flex-grow:1;-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-pack:center;justify-content:center;position:relative;padding-left:8px;padding-right:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.max-h-400{max-height:400px}.max-w-600{max-width:600px}.flip-y{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.spinner{-webkit-animation:border-rotate 1s linear infinite;animation:border-rotate 1s linear infinite;z-index:2;position:absolute;top:50%;left:50%;margin:-10px 0 0 -10px;width:20px;height:20px}.spinner circle{stroke:currentColor;stroke-linecap:round;-webkit-animation:border-dash 1.5s ease-in-out infinite;animation:border-dash 1.5s ease-in-out infinite}::-ms-clear{display:none}.fa-lg{line-height:1.05em}.z-a-lot{z-index:999999}.z-a-lot-more{z-index:9999999}button:focus{outline:revert}';
|
|
2
|
+
export {
|
|
3
|
+
e as default
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=Styles.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Styles.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/SwitchNLS.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsxs as l, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import r from "styled-components";
|
|
3
|
+
import { token as e, textStyles as s, TruncatedText as c, Switch as f } from "@bynder/design-system";
|
|
4
|
+
import { IconSmart as m } from "@bynder/icons";
|
|
5
|
+
import { __ as d } from "./index2.js";
|
|
6
|
+
const C = ({ isNLSSearchOn: n, setIsNLSSearchOn: o }) => {
|
|
7
|
+
const a = (t) => {
|
|
8
|
+
t && t.currentTarget !== t.target || (t?.stopPropagation(), o(!n));
|
|
9
|
+
}, g = () => {
|
|
10
|
+
o(!n);
|
|
11
|
+
};
|
|
12
|
+
return /* @__PURE__ */ l(
|
|
13
|
+
p,
|
|
14
|
+
{
|
|
15
|
+
onClick: a,
|
|
16
|
+
onKeyDown: (t) => {
|
|
17
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), a(t));
|
|
18
|
+
},
|
|
19
|
+
tabIndex: 0,
|
|
20
|
+
"data-testid": "switch-nls-container",
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ i(h, { children: /* @__PURE__ */ i(m, {}) }),
|
|
23
|
+
/* @__PURE__ */ l(u, { id: "labelId", children: [
|
|
24
|
+
/* @__PURE__ */ i(c, { children: d("Use natural language search") }),
|
|
25
|
+
/* @__PURE__ */ i(x, { children: /* @__PURE__ */ i(c, { children: d("Find images by describing them") }) })
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ i(b, { children: /* @__PURE__ */ i(
|
|
28
|
+
f,
|
|
29
|
+
{
|
|
30
|
+
isChecked: n,
|
|
31
|
+
"aria-labelledby": "labelId",
|
|
32
|
+
onChange: g
|
|
33
|
+
}
|
|
34
|
+
) })
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}, p = r.div`
|
|
39
|
+
display: flex;
|
|
40
|
+
|
|
41
|
+
align-items: flex-start;
|
|
42
|
+
margin: ${e.spacing3};
|
|
43
|
+
padding: ${e.spacing3};
|
|
44
|
+
background-color: #f3f2fd;
|
|
45
|
+
border-radius: ${e.radiusLarge};
|
|
46
|
+
|
|
47
|
+
&:hover {
|
|
48
|
+
background-color: #eeedfc;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:active {
|
|
53
|
+
background-color: #f3f2fd;
|
|
54
|
+
}
|
|
55
|
+
`, h = r.div`
|
|
56
|
+
flex: none;
|
|
57
|
+
margin-right: ${e.spacing4};
|
|
58
|
+
color: ${e.purple500};
|
|
59
|
+
`, u = r.div`
|
|
60
|
+
${s.uiTextM}
|
|
61
|
+
|
|
62
|
+
flex: 1;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
font-weight: 400;
|
|
65
|
+
color: #031026;
|
|
66
|
+
`, x = r.div`
|
|
67
|
+
${s.uiTextS}
|
|
68
|
+
|
|
69
|
+
color: ${e.colorTextMuted};
|
|
70
|
+
`, b = r.div`
|
|
71
|
+
display: flex;
|
|
72
|
+
flex: none;
|
|
73
|
+
gap: ${e.spacing3};
|
|
74
|
+
align-items: center;
|
|
75
|
+
margin-left: ${e.spacing4};
|
|
76
|
+
`;
|
|
77
|
+
export {
|
|
78
|
+
C as SwitchNLS
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=SwitchNLS.js.map
|
package/SwitchNLS.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchNLS.js","sources":["../../src/search/SwitchNLS.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { Switch, textStyles, token, TruncatedText } from '@bynder/design-system';\nimport { IconSmart } from '@bynder/icons';\nimport { __ } from '@src/localization';\n\ninterface Props {\n\tisNLSSearchOn: boolean;\n\tsetIsNLSSearchOn: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const SwitchNLS = ({ isNLSSearchOn, setIsNLSSearchOn }: Props) => {\n\tconst toggleNLSAndFocusSpotlight = (event?: React.MouseEvent | React.KeyboardEvent) => {\n\t\t// Only proceed if the click was directly on the container, not on its children (especially the Switch)\n\t\tif (event && event.currentTarget !== event.target) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent?.stopPropagation();\n\t\tsetIsNLSSearchOn(!isNLSSearchOn);\n\t};\n\n\tconst handleSwitchChange = () => {\n\t\tsetIsNLSSearchOn(!isNLSSearchOn);\n\t};\n\n\treturn (\n\t\t<ItemStyled\n\t\t\tonClick={toggleNLSAndFocusSpotlight}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\ttoggleNLSAndFocusSpotlight(event);\n\t\t\t\t}\n\t\t\t}}\n\t\t\ttabIndex={0}\n\t\t\tdata-testid=\"switch-nls-container\"\n\t\t>\n\t\t\t<ThumbnailContainer>\n\t\t\t\t<IconSmart />\n\t\t\t</ThumbnailContainer>\n\n\t\t\t<Content id=\"labelId\">\n\t\t\t\t<TruncatedText>{__('Use natural language search')}</TruncatedText>\n\t\t\t\t<Subtext>\n\t\t\t\t\t<TruncatedText>{__('Find images by describing them')}</TruncatedText>\n\t\t\t\t</Subtext>\n\t\t\t</Content>\n\n\t\t\t<RightElements>\n\t\t\t\t<Switch\n\t\t\t\t\tisChecked={isNLSSearchOn}\n\t\t\t\t\taria-labelledby=\"labelId\"\n\t\t\t\t\tonChange={handleSwitchChange}\n\t\t\t\t/>\n\t\t\t</RightElements>\n\t\t</ItemStyled>\n\t);\n};\n\nconst ItemStyled = styled.div`\n\tdisplay: flex;\n\n\talign-items: flex-start;\n\tmargin: ${token.spacing3};\n\tpadding: ${token.spacing3};\n\tbackground-color: #f3f2fd;\n\tborder-radius: ${token.radiusLarge};\n\n\t&:hover {\n\t\tbackground-color: #eeedfc;\n\t\tcursor: pointer;\n\t}\n\n\t&:active {\n\t\tbackground-color: #f3f2fd;\n\t}\n`;\n\nconst ThumbnailContainer = styled.div`\n\tflex: none;\n\tmargin-right: ${token.spacing4};\n\tcolor: ${token.purple500};\n`;\n\nconst Content = styled.div`\n\t${textStyles.uiTextM}\n\n\tflex: 1;\n\tmin-width: 0;\n\tfont-weight: 400;\n\tcolor: #031026;\n`;\n\nconst Subtext = styled.div<{ $isDisabled?: boolean }>`\n\t${textStyles.uiTextS}\n\n\tcolor: ${token.colorTextMuted};\n`;\n\nconst RightElements = styled.div`\n\tdisplay: flex;\n\tflex: none;\n\tgap: ${token.spacing3};\n\talign-items: center;\n\tmargin-left: ${token.spacing4};\n`;\n"],"names":["SwitchNLS","isNLSSearchOn","setIsNLSSearchOn","toggleNLSAndFocusSpotlight","event","handleSwitchChange","jsxs","ItemStyled","jsx","ThumbnailContainer","IconSmart","Content","TruncatedText","__","Subtext","RightElements","Switch","styled","token","textStyles"],"mappings":";;;;;AAWO,MAAMA,IAAY,CAAC,EAAE,eAAAC,GAAe,kBAAAC,QAA8B;AACxE,QAAMC,IAA6B,CAACC,MAAmD;AAEtF,IAAIA,KAASA,EAAM,kBAAkBA,EAAM,WAI3CA,GAAO,gBAAA,GACPF,EAAiB,CAACD,CAAa;AAAA,EAChC,GAEMI,IAAqB,MAAM;AAChC,IAAAH,EAAiB,CAACD,CAAa;AAAA,EAChC;AAEA,SACC,gBAAAK;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,SAASJ;AAAA,MACT,WAAW,CAACC,MAAU;AACrB,SAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SAC1CA,EAAM,eAAA,GACND,EAA2BC,CAAK;AAAA,MAElC;AAAA,MACA,UAAU;AAAA,MACV,eAAY;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAI,EAACC,GAAA,EACA,UAAA,gBAAAD,EAACE,GAAA,CAAA,CAAU,GACZ;AAAA,QAEA,gBAAAJ,EAACK,GAAA,EAAQ,IAAG,WACX,UAAA;AAAA,UAAA,gBAAAH,EAACI,GAAA,EAAe,UAAAC,EAAG,6BAA6B,EAAA,CAAE;AAAA,4BACjDC,GAAA,EACA,UAAA,gBAAAN,EAACI,KAAe,UAAAC,EAAG,gCAAgC,GAAE,EAAA,CACtD;AAAA,QAAA,GACD;AAAA,0BAECE,GAAA,EACA,UAAA,gBAAAP;AAAA,UAACQ;AAAA,UAAA;AAAA,YACA,WAAWf;AAAA,YACX,mBAAgB;AAAA,YAChB,UAAUI;AAAA,UAAA;AAAA,QAAA,EACX,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGH,GAEME,IAAaU,EAAO;AAAA;AAAA;AAAA;AAAA,WAIfC,EAAM,QAAQ;AAAA,YACbA,EAAM,QAAQ;AAAA;AAAA,kBAERA,EAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAY7BT,IAAqBQ,EAAO;AAAA;AAAA,iBAEjBC,EAAM,QAAQ;AAAA,UACrBA,EAAM,SAAS;AAAA,GAGnBP,IAAUM,EAAO;AAAA,GACpBE,EAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQfL,IAAUG,EAAO;AAAA,GACpBE,EAAW,OAAO;AAAA;AAAA,UAEXD,EAAM,cAAc;AAAA,GAGxBH,IAAgBE,EAAO;AAAA;AAAA;AAAA,QAGrBC,EAAM,QAAQ;AAAA;AAAA,gBAENA,EAAM,QAAQ;AAAA;"}
|
package/TagItem.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsxs as m, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { styled as n } from "styled-components";
|
|
3
|
+
import { token as s } from "@bynder/design-system";
|
|
4
|
+
import { Chip as l } from "./Chip.js";
|
|
5
|
+
import { useAssetFilter as r } from "./AssetFilterContext.js";
|
|
6
|
+
function x(t) {
|
|
7
|
+
const e = r(), i = e.tags.includes(t.tag.name);
|
|
8
|
+
function o() {
|
|
9
|
+
i ? e.removeTag(t.tag.name) : t.isLoading || e.addTag(t.tag.name);
|
|
10
|
+
}
|
|
11
|
+
return /* @__PURE__ */ m(
|
|
12
|
+
l,
|
|
13
|
+
{
|
|
14
|
+
loading: t.isLoading,
|
|
15
|
+
active: i,
|
|
16
|
+
onClick: o,
|
|
17
|
+
"data-testid": "tag-item",
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ a(g, { children: t.tag.name }),
|
|
20
|
+
/* @__PURE__ */ a(c, { children: t.tag.assetCount })
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
t.tag.id
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
const g = n.span`
|
|
27
|
+
max-with: 128px;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
`, c = n.span`
|
|
32
|
+
color: rgba(0, 34, 51, 0.5);
|
|
33
|
+
margin-left: ${s.spacing3};
|
|
34
|
+
`;
|
|
35
|
+
export {
|
|
36
|
+
x as TagItem
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=TagItem.js.map
|