@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
package/SearchInput.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsxs as F, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useState as n, useEffect as p } from "react";
|
|
3
|
+
import g from "styled-components";
|
|
4
|
+
import { useDebouncedCallback as m } from "use-debounce";
|
|
5
|
+
import { IconImage as H, IconSearch as R } from "@bynder/icons";
|
|
6
|
+
import { Input as $ } from "@bynder/design-system";
|
|
7
|
+
import { Spinner as j } from "./Spinner.js";
|
|
8
|
+
import { __ as f } from "./index2.js";
|
|
9
|
+
import { useRouterSelectors as A } from "./useRouterStore.js";
|
|
10
|
+
import { useHideSwitch as E } from "./ConfigContext.js";
|
|
11
|
+
import { SwitchNLS as O } from "./SwitchNLS.js";
|
|
12
|
+
import { useSearchStateByPage as T } from "./useSearchStore.js";
|
|
13
|
+
import { useSimilaritySearchStore as U } from "./useSimilaritySearchStore.js";
|
|
14
|
+
import { useSimilarityAssets as V } from "./getSimilarityAssets.js";
|
|
15
|
+
function re() {
|
|
16
|
+
const t = A.use.page(), w = E(), { value: i, isLoading: a, setSearch: I } = T(t.page), { isEnabled: v, isNLSSelected: c, setIsNLSSelected: b, setNLSSearchText: x, setIsSelected: C } = U(), { search: L, resetData: N } = V(), s = m(L, 500), [l, h] = n(i), [y, u] = n(!1), [D, S] = n(!1);
|
|
17
|
+
p(() => {
|
|
18
|
+
h(i);
|
|
19
|
+
}, [t, i]);
|
|
20
|
+
const r = m((e) => {
|
|
21
|
+
C(!1), I(e);
|
|
22
|
+
}, 500);
|
|
23
|
+
p(() => () => {
|
|
24
|
+
r.flush(), s.flush();
|
|
25
|
+
}, [t, r, s]);
|
|
26
|
+
const M = (e) => (h(e), c ? (x(e), e.length === 0 && N(), s(void 0, e)) : r(e)), k = () => {
|
|
27
|
+
S(!0);
|
|
28
|
+
}, B = () => {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
S(!1);
|
|
31
|
+
}, 0);
|
|
32
|
+
}, d = t.page === "collections" ? f("Search for collections") : f("Search for assets");
|
|
33
|
+
return /* @__PURE__ */ F(_, { $hideSwitch: w, children: [
|
|
34
|
+
/* @__PURE__ */ o(
|
|
35
|
+
$,
|
|
36
|
+
{
|
|
37
|
+
value: l,
|
|
38
|
+
placeholder: d,
|
|
39
|
+
"aria-label": d,
|
|
40
|
+
onChange: (e) => M(e),
|
|
41
|
+
"data-testid": "search-input",
|
|
42
|
+
icon: /* @__PURE__ */ o(R, {}),
|
|
43
|
+
iconRight: a ? /* @__PURE__ */ o("div", { role: "alert", "aria-live": "polite", children: /* @__PURE__ */ o(j, { isRelative: !0 }) }) : /* @__PURE__ */ o(H, {}),
|
|
44
|
+
hasClearButton: !a && (!!i || !!l),
|
|
45
|
+
onFocus: () => u(!0),
|
|
46
|
+
onBlur: () => {
|
|
47
|
+
D || u(!1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
v && y && t.page === "assets" && /* @__PURE__ */ o(
|
|
52
|
+
z,
|
|
53
|
+
{
|
|
54
|
+
onMouseDown: k,
|
|
55
|
+
onMouseUp: B,
|
|
56
|
+
children: /* @__PURE__ */ o(O, { isNLSSearchOn: c, setIsNLSSearchOn: b })
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
const _ = g.div`
|
|
62
|
+
width: 100%;
|
|
63
|
+
max-width: 440px;
|
|
64
|
+
margin-left: ${(t) => t.$hideSwitch ? "auto" : "none"};
|
|
65
|
+
position: relative;
|
|
66
|
+
`, z = g.div`
|
|
67
|
+
position: absolute;
|
|
68
|
+
right: 0;
|
|
69
|
+
top: 100%;
|
|
70
|
+
z-index: 10;
|
|
71
|
+
width: 100%;
|
|
72
|
+
`;
|
|
73
|
+
export {
|
|
74
|
+
re as SearchInput
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=SearchInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInput.js","sources":["../../src/search/SearchInput.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { IconImage, IconSearch } from '@bynder/icons';\nimport { Input } from '@bynder/design-system';\n\nimport { Spinner } from '../common/components/Spinner';\nimport { __ } from '../localization';\nimport { useRouterSelectors } from '@src/store/useRouterStore';\nimport { useHideSwitch } from '@src/app-config/ConfigContext';\nimport { SwitchNLS } from './SwitchNLS';\nimport { useSearchStateByPage } from '@src/store/useSearchStore';\nimport { useSimilaritySearchStore } from '@src/store/useSimilaritySearchStore';\nimport { useSimilarityAssets } from '@src/api/getSimilarityAssets';\n\nexport function SearchInput() {\n\tconst page = useRouterSelectors.use.page();\n\tconst hideSwitch = useHideSwitch();\n\tconst { value, isLoading, setSearch } = useSearchStateByPage(page.page);\n\n\tconst { isEnabled, isNLSSelected, setIsNLSSelected, setNLSSearchText, setIsSelected } =\n\t\tuseSimilaritySearchStore();\n\tconst { search: aiSearch, resetData } = useSimilarityAssets();\n\n\tconst debouncedAISearch = useDebouncedCallback(aiSearch, 500);\n\n\tconst [inputValue, setInputValue] = useState(value);\n\tconst [isFocused, setIsFocused] = useState(false);\n\n\tconst [isHandlingSwitchClick, setIsHandlingSwitchClick] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t}, [page, value]);\n\n\tconst handleSetSearch = (search: string) => {\n\t\tsetIsSelected(false);\n\t\tsetSearch(search);\n\t};\n\tconst debouncedSetSearch = useDebouncedCallback(handleSetSearch, 500);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tdebouncedSetSearch.flush();\n\t\t\tdebouncedAISearch.flush();\n\t\t};\n\t}, [page, debouncedSetSearch, debouncedAISearch]);\n\n\tconst handleChange = (search: string) => {\n\t\tsetInputValue(search);\n\n\t\tif (isNLSSelected) {\n\t\t\tsetNLSSearchText(search);\n\n\t\t\tif (search.length === 0) {\n\t\t\t\tresetData();\n\t\t\t}\n\n\t\t\treturn debouncedAISearch(undefined, search);\n\t\t}\n\n\t\treturn debouncedSetSearch(search);\n\t};\n\n\tconst handleSwitchMouseDown = () => {\n\t\tsetIsHandlingSwitchClick(true);\n\t};\n\n\tconst handleSwitchMouseUp = () => {\n\t\tsetTimeout(() => {\n\t\t\tsetIsHandlingSwitchClick(false);\n\t\t}, 0);\n\t};\n\n\tconst placeholder =\n\t\tpage.page === 'collections' ? __('Search for collections') : __('Search for assets');\n\n\treturn (\n\t\t<StyledInputWrapper $hideSwitch={hideSwitch}>\n\t\t\t<Input\n\t\t\t\tvalue={inputValue}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\taria-label={placeholder}\n\t\t\t\tonChange={(val) => handleChange(val)}\n\t\t\t\tdata-testid=\"search-input\"\n\t\t\t\ticon={<IconSearch />}\n\t\t\t\ticonRight={\n\t\t\t\t\tisLoading ? (\n\t\t\t\t\t\t<div role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t\t\t<Spinner isRelative />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<IconImage />\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\thasClearButton={!isLoading && (!!value || !!inputValue)}\n\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\tonBlur={() => {\n\t\t\t\t\tif (!isHandlingSwitchClick) {\n\t\t\t\t\t\tsetIsFocused(false);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{isEnabled && isFocused && page.page === 'assets' && (\n\t\t\t\t<SwitchContainer\n\t\t\t\t\tonMouseDown={handleSwitchMouseDown}\n\t\t\t\t\tonMouseUp={handleSwitchMouseUp}\n\t\t\t\t>\n\t\t\t\t\t<SwitchNLS isNLSSearchOn={isNLSSelected} setIsNLSSearchOn={setIsNLSSelected} />\n\t\t\t\t</SwitchContainer>\n\t\t\t)}\n\t\t</StyledInputWrapper>\n\t);\n}\n\nconst StyledInputWrapper = styled.div<{ $hideSwitch?: boolean }>`\n\twidth: 100%;\n\tmax-width: 440px;\n\tmargin-left: ${(p) => (p.$hideSwitch ? 'auto' : 'none')};\n\tposition: relative;\n`;\n\nconst SwitchContainer = styled.div`\n\tposition: absolute;\n\tright: 0;\n\ttop: 100%;\n\tz-index: 10;\n\twidth: 100%;\n`;\n"],"names":["SearchInput","page","useRouterSelectors","hideSwitch","useHideSwitch","value","isLoading","setSearch","useSearchStateByPage","isEnabled","isNLSSelected","setIsNLSSelected","setNLSSearchText","setIsSelected","useSimilaritySearchStore","aiSearch","resetData","useSimilarityAssets","debouncedAISearch","useDebouncedCallback","inputValue","setInputValue","useState","isFocused","setIsFocused","isHandlingSwitchClick","setIsHandlingSwitchClick","useEffect","debouncedSetSearch","search","handleChange","handleSwitchMouseDown","handleSwitchMouseUp","placeholder","__","jsxs","StyledInputWrapper","jsx","Input","val","IconSearch","Spinner","IconImage","SwitchContainer","SwitchNLS","styled","p"],"mappings":";;;;;;;;;;;;;;AAeO,SAASA,KAAc;AAC7B,QAAMC,IAAOC,EAAmB,IAAI,KAAA,GAC9BC,IAAaC,EAAA,GACb,EAAE,OAAAC,GAAO,WAAAC,GAAW,WAAAC,MAAcC,EAAqBP,EAAK,IAAI,GAEhE,EAAE,WAAAQ,GAAW,eAAAC,GAAe,kBAAAC,GAAkB,kBAAAC,GAAkB,eAAAC,EAAA,IACrEC,EAAA,GACK,EAAE,QAAQC,GAAU,WAAAC,EAAA,IAAcC,EAAA,GAElCC,IAAoBC,EAAqBJ,GAAU,GAAG,GAEtD,CAACK,GAAYC,CAAa,IAAIC,EAASjB,CAAK,GAC5C,CAACkB,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAE1C,CAACG,GAAuBC,CAAwB,IAAIJ,EAAS,EAAK;AAExE,EAAAK,EAAU,MAAM;AACf,IAAAN,EAAchB,CAAK;AAAA,EACpB,GAAG,CAACJ,GAAMI,CAAK,CAAC;AAMhB,QAAMuB,IAAqBT,EAJH,CAACU,MAAmB;AAC3C,IAAAhB,EAAc,EAAK,GACnBN,EAAUsB,CAAM;AAAA,EACjB,GACiE,GAAG;AAEpE,EAAAF,EAAU,MACF,MAAM;AACZ,IAAAC,EAAmB,MAAA,GACnBV,EAAkB,MAAA;AAAA,EACnB,GACE,CAACjB,GAAM2B,GAAoBV,CAAiB,CAAC;AAEhD,QAAMY,IAAe,CAACD,OACrBR,EAAcQ,CAAM,GAEhBnB,KACHE,EAAiBiB,CAAM,GAEnBA,EAAO,WAAW,KACrBb,EAAA,GAGME,EAAkB,QAAWW,CAAM,KAGpCD,EAAmBC,CAAM,IAG3BE,IAAwB,MAAM;AACnC,IAAAL,EAAyB,EAAI;AAAA,EAC9B,GAEMM,IAAsB,MAAM;AACjC,eAAW,MAAM;AAChB,MAAAN,EAAyB,EAAK;AAAA,IAC/B,GAAG,CAAC;AAAA,EACL,GAEMO,IACLhC,EAAK,SAAS,gBAAgBiC,EAAG,wBAAwB,IAAIA,EAAG,mBAAmB;AAEpF,SACC,gBAAAC,EAACC,GAAA,EAAmB,aAAajC,GAChC,UAAA;AAAA,IAAA,gBAAAkC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,OAAOlB;AAAA,QACP,aAAAa;AAAA,QACA,cAAYA;AAAA,QACZ,UAAU,CAACM,MAAQT,EAAaS,CAAG;AAAA,QACnC,eAAY;AAAA,QACZ,wBAAOC,GAAA,EAAW;AAAA,QAClB,WACClC,IACC,gBAAA+B,EAAC,OAAA,EAAI,MAAK,SAAQ,aAAU,UAC3B,UAAA,gBAAAA,EAACI,KAAQ,YAAU,GAAA,CAAC,EAAA,CACrB,sBAECC,GAAA,EAAU;AAAA,QAGb,gBAAgB,CAACpC,MAAc,CAAC,CAACD,KAAS,CAAC,CAACe;AAAA,QAC5C,SAAS,MAAMI,EAAa,EAAI;AAAA,QAChC,QAAQ,MAAM;AACb,UAAKC,KACJD,EAAa,EAAK;AAAA,QAEpB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEAf,KAAac,KAAatB,EAAK,SAAS,YACxC,gBAAAoC;AAAA,MAACM;AAAA,MAAA;AAAA,QACA,aAAaZ;AAAA,QACb,WAAWC;AAAA,QAEX,UAAA,gBAAAK,EAACO,GAAA,EAAU,eAAelC,GAAe,kBAAkBC,EAAA,CAAkB;AAAA,MAAA;AAAA,IAAA;AAAA,EAC9E,GAEF;AAEF;AAEA,MAAMyB,IAAqBS,EAAO;AAAA;AAAA;AAAA,gBAGlB,CAACC,MAAOA,EAAE,cAAc,SAAS,MAAO;AAAA;AAAA,GAIlDH,IAAkBE,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as i, jsxs as s } from "react/jsx-runtime";
|
|
2
|
+
import o from "styled-components";
|
|
3
|
+
import { token as e, Checkbox as a } from "@bynder/design-system";
|
|
4
|
+
import { StyledCheckboxWrapper as c } from "./Checkbox.styles.js";
|
|
5
|
+
import { __ as l } from "./index2.js";
|
|
6
|
+
function $({
|
|
7
|
+
title: t,
|
|
8
|
+
onRemove: r,
|
|
9
|
+
children: n
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ i(p, { title: t, children: /* @__PURE__ */ s(c, { $isChecked: !0, $isFlex: !0, children: [
|
|
12
|
+
/* @__PURE__ */ i(
|
|
13
|
+
a,
|
|
14
|
+
{
|
|
15
|
+
"aria-label": l("Deselect"),
|
|
16
|
+
id: `deselect-${t}`,
|
|
17
|
+
isChecked: !0,
|
|
18
|
+
onChange: r,
|
|
19
|
+
"data-testid": "metaproperty-option"
|
|
20
|
+
}
|
|
21
|
+
),
|
|
22
|
+
/* @__PURE__ */ i(d, { htmlFor: `deselect-${t}`, children: n })
|
|
23
|
+
] }) });
|
|
24
|
+
}
|
|
25
|
+
const p = o.li`
|
|
26
|
+
display: flex;
|
|
27
|
+
flex: 1 1 0%;
|
|
28
|
+
align-items: center;
|
|
29
|
+
position: relative;
|
|
30
|
+
padding: ${e.spacing2} calc(${e.spacing6} - 4px) ${e.spacing2} ${e.spacing4};
|
|
31
|
+
height: 48px;
|
|
32
|
+
border-bottom: 1px solid rgba(0, 34, 51, 0.1);
|
|
33
|
+
`, d = o.label`
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: space-between;
|
|
37
|
+
font-size: ${e.fontSize100};
|
|
38
|
+
margin-left: ${e.spacing3};
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
`;
|
|
41
|
+
export {
|
|
42
|
+
$ as SelectedItemContainer
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=SelectedItemContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectedItemContainer.js","sources":["../../src/select/current-selection/SelectedItemContainer.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { Checkbox, token } from '@bynder/design-system';\n\nimport { StyledCheckboxWrapper } from '@src/common/components/Checkbox.styles';\nimport { __ } from '@src/localization';\n\nexport function SelectedItemContainer({\n\ttitle,\n\tonRemove,\n\tchildren,\n}: {\n\ttitle: string;\n\tonRemove: () => void;\n\tchildren: React.ReactNode;\n}) {\n\treturn (\n\t\t<SelectedItemListContainer title={title}>\n\t\t\t<StyledCheckboxWrapper $isChecked $isFlex>\n\t\t\t\t<Checkbox\n\t\t\t\t\taria-label={__('Deselect')}\n\t\t\t\t\tid={`deselect-${title}`}\n\t\t\t\t\tisChecked\n\t\t\t\t\tonChange={onRemove}\n\t\t\t\t\tdata-testid=\"metaproperty-option\"\n\t\t\t\t/>\n\t\t\t\t<Content htmlFor={`deselect-${title}`}>{children}</Content>\n\t\t\t</StyledCheckboxWrapper>\n\t\t</SelectedItemListContainer>\n\t);\n}\n\nconst SelectedItemListContainer = styled.li`\n\tdisplay: flex;\n\tflex: 1 1 0%;\n\talign-items: center;\n\tposition: relative;\n\tpadding: ${token.spacing2} calc(${token.spacing6} - 4px) ${token.spacing2} ${token.spacing4};\n\theight: 48px;\n\tborder-bottom: 1px solid rgba(0, 34, 51, 0.1);\n`;\nconst Content = styled.label`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tfont-size: ${token.fontSize100};\n\tmargin-left: ${token.spacing3};\n\tcursor: pointer;\n`;\n"],"names":["SelectedItemContainer","title","onRemove","children","jsx","SelectedItemListContainer","jsxs","StyledCheckboxWrapper","Checkbox","__","Content","styled","token"],"mappings":";;;;;AAOO,SAASA,EAAsB;AAAA,EACrC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACD,GAIG;AACF,SACC,gBAAAC,EAACC,KAA0B,OAAAJ,GAC1B,UAAA,gBAAAK,EAACC,KAAsB,YAAU,IAAC,SAAO,IACxC,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI;AAAA,MAAA;AAAA,QACA,cAAYC,EAAG,UAAU;AAAA,QACzB,IAAI,YAAYR,CAAK;AAAA,QACrB,WAAS;AAAA,QACT,UAAUC;AAAA,QACV,eAAY;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEZQ,GAAA,EAAQ,SAAS,YAAYT,CAAK,IAAK,UAAAE,EAAA,CAAS;AAAA,EAAA,EAAA,CAClD,EAAA,CACD;AAEF;AAEA,MAAME,IAA4BM,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAK7BC,EAAM,QAAQ,SAASA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,IAAIA,EAAM,QAAQ;AAAA;AAAA;AAAA,GAItFF,IAAUC,EAAO;AAAA;AAAA;AAAA;AAAA,cAITC,EAAM,WAAW;AAAA,gBACfA,EAAM,QAAQ;AAAA;AAAA;"}
|
package/SelectedItems.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { styled as e } from "styled-components";
|
|
3
|
+
import { token as l } from "@bynder/design-system";
|
|
4
|
+
import { AssetItem as r } from "./AssetItem.js";
|
|
5
|
+
import { CollectionItem as a } from "./CollectionItem.js";
|
|
6
|
+
function f({ selection: i }) {
|
|
7
|
+
return /* @__PURE__ */ o(n, { "data-testid": "selected-items-list", children: i.map(
|
|
8
|
+
(t) => t.type === "asset" ? /* @__PURE__ */ o(r, { asset: t.value }, t.value.id) : /* @__PURE__ */ o(a, { collection: t.value }, t.value.id)
|
|
9
|
+
) });
|
|
10
|
+
}
|
|
11
|
+
const n = e.ul`
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
padding: ${l.spacing3} 0;
|
|
15
|
+
overflow-y: auto;
|
|
16
|
+
max-height: 400px;
|
|
17
|
+
list-style: none;
|
|
18
|
+
margin: 0;
|
|
19
|
+
|
|
20
|
+
li:last-child {
|
|
21
|
+
border-bottom-width: 0;
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
export {
|
|
25
|
+
f as SelectedItems
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=SelectedItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectedItems.js","sources":["../../src/select/current-selection/SelectedItems.tsx"],"sourcesContent":["import React from 'react';\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { SelectedItem } from '../SelectionContext';\nimport { AssetItem } from './AssetItem';\nimport { CollectionItem } from './CollectionItem';\n\nexport function SelectedItems({ selection }: { selection: SelectedItem[] }) {\n\treturn (\n\t\t<SelectedItemsListContainer data-testid=\"selected-items-list\">\n\t\t\t{selection.map((selectedItem) =>\n\t\t\t\tselectedItem.type === 'asset' ? (\n\t\t\t\t\t<AssetItem key={selectedItem.value.id} asset={selectedItem.value} />\n\t\t\t\t) : (\n\t\t\t\t\t<CollectionItem key={selectedItem.value.id} collection={selectedItem.value} />\n\t\t\t\t),\n\t\t\t)}\n\t\t</SelectedItemsListContainer>\n\t);\n}\n\nconst SelectedItemsListContainer = styled.ul`\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: ${token.spacing3} 0;\n\toverflow-y: auto;\n\tmax-height: 400px;\n\tlist-style: none;\n\tmargin: 0;\n\n\tli:last-child {\n\t\tborder-bottom-width: 0;\n\t}\n`;\n"],"names":["SelectedItems","selection","jsx","SelectedItemsListContainer","selectedItem","AssetItem","CollectionItem","styled","token"],"mappings":";;;;;AAOO,SAASA,EAAc,EAAE,WAAAC,KAA4C;AAC3E,SACC,gBAAAC,EAACC,GAAA,EAA2B,eAAY,uBACtC,UAAAF,EAAU;AAAA,IAAI,CAACG,MACfA,EAAa,SAAS,UACrB,gBAAAF,EAACG,GAAA,EAAsC,OAAOD,EAAa,SAA3CA,EAAa,MAAM,EAA+B,IAElE,gBAAAF,EAACI,GAAA,EAA2C,YAAYF,EAAa,MAAA,GAAhDA,EAAa,MAAM,EAAoC;AAAA,EAAA,GAG/E;AAEF;AAEA,MAAMD,IAA6BI,EAAO;AAAA;AAAA;AAAA,YAG9BC,EAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { jsx as O } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as j, useState as v, useEffect as p, useMemo as k, useContext as q } from "react";
|
|
3
|
+
import { getAssetsByMediaId as B } from "./filterAssets.js";
|
|
4
|
+
import { isErr as I } from "./result.type.js";
|
|
5
|
+
import { useSelectionMode as L, useConfig as T } from "./ConfigContext.js";
|
|
6
|
+
import { useAuth as V } from "./LoginContext.js";
|
|
7
|
+
import { useDat as _ } from "./useDatStore.js";
|
|
8
|
+
const C = j(null);
|
|
9
|
+
function W(t) {
|
|
10
|
+
const [s, i] = v([]), [f, g] = v([]), [a, S] = v(), u = z(a), h = L(), { transformation: o } = _();
|
|
11
|
+
p(() => {
|
|
12
|
+
S(
|
|
13
|
+
(t.preselectedAssetIds ?? []).filter((e) => !!e).map((e) => window.btoa("(Asset_id " + e + ")"))
|
|
14
|
+
);
|
|
15
|
+
}, [t.preselectedAssetIds]), p(() => {
|
|
16
|
+
u.length && x(u);
|
|
17
|
+
}, [u]), p(() => {
|
|
18
|
+
o && Object.keys(o).length && (m(), x([o?.asset]));
|
|
19
|
+
}, [o]);
|
|
20
|
+
function d(e) {
|
|
21
|
+
e.tag === "Loaded" && e.value && g(e.value);
|
|
22
|
+
}
|
|
23
|
+
function y() {
|
|
24
|
+
i((e) => {
|
|
25
|
+
const n = f.filter(
|
|
26
|
+
(l) => !e.some((c) => c.value.id === l.id)
|
|
27
|
+
);
|
|
28
|
+
return [
|
|
29
|
+
...e,
|
|
30
|
+
...n.map((l) => ({
|
|
31
|
+
type: "asset",
|
|
32
|
+
value: l
|
|
33
|
+
}))
|
|
34
|
+
];
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function m() {
|
|
38
|
+
i([]);
|
|
39
|
+
}
|
|
40
|
+
function x(e) {
|
|
41
|
+
i((n) => {
|
|
42
|
+
const l = e.filter((c) => !A(n, c));
|
|
43
|
+
return [
|
|
44
|
+
...n,
|
|
45
|
+
...l.map((c) => ({
|
|
46
|
+
type: "asset",
|
|
47
|
+
value: c
|
|
48
|
+
}))
|
|
49
|
+
];
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function M(e) {
|
|
53
|
+
s.some((n) => n.value.id === e.id) ? i([]) : i([{ type: "asset", value: e }]);
|
|
54
|
+
}
|
|
55
|
+
function P(e) {
|
|
56
|
+
h !== "MultiSelect" ? M(e[0]) : i((n) => {
|
|
57
|
+
const l = e.filter(
|
|
58
|
+
(r) => !A(n, r)
|
|
59
|
+
), c = e.filter(
|
|
60
|
+
(r) => A(n, r)
|
|
61
|
+
);
|
|
62
|
+
return [
|
|
63
|
+
...n.filter(
|
|
64
|
+
(r) => !c.some(
|
|
65
|
+
(b) => b.id === r.value.id
|
|
66
|
+
)
|
|
67
|
+
),
|
|
68
|
+
...l.map((r) => ({
|
|
69
|
+
type: "asset",
|
|
70
|
+
value: r
|
|
71
|
+
}))
|
|
72
|
+
];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function E(e) {
|
|
76
|
+
i((n) => A(n, e) ? n.filter(
|
|
77
|
+
(l) => l.value.id !== e.id
|
|
78
|
+
) : [
|
|
79
|
+
...n,
|
|
80
|
+
{
|
|
81
|
+
type: "collection",
|
|
82
|
+
value: e
|
|
83
|
+
}
|
|
84
|
+
]);
|
|
85
|
+
}
|
|
86
|
+
const R = k(
|
|
87
|
+
() => ({
|
|
88
|
+
selection: s,
|
|
89
|
+
preselectedAssetIds: a,
|
|
90
|
+
clear: m,
|
|
91
|
+
selectAssets: x,
|
|
92
|
+
toggleAssets: P,
|
|
93
|
+
toggleCollection: E,
|
|
94
|
+
selectAll: y,
|
|
95
|
+
setAllAssets: d
|
|
96
|
+
}),
|
|
97
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
98
|
+
[s, f]
|
|
99
|
+
);
|
|
100
|
+
return /* @__PURE__ */ O(C.Provider, { value: R, children: t.children });
|
|
101
|
+
}
|
|
102
|
+
function A(t, s) {
|
|
103
|
+
return t.some((i) => i.value.id === s.id);
|
|
104
|
+
}
|
|
105
|
+
function w() {
|
|
106
|
+
const t = q(C);
|
|
107
|
+
if (t === null)
|
|
108
|
+
throw new Error("useSelection must be used with a SelectionProvider");
|
|
109
|
+
return t;
|
|
110
|
+
}
|
|
111
|
+
function X() {
|
|
112
|
+
const { selection: t } = w();
|
|
113
|
+
return t.filter((s) => s.type === "asset").map((s) => s.value.id);
|
|
114
|
+
}
|
|
115
|
+
function Y() {
|
|
116
|
+
const { selection: t } = w();
|
|
117
|
+
return t.filter((s) => s.type === "collection").map((s) => s.value.id);
|
|
118
|
+
}
|
|
119
|
+
function z(t) {
|
|
120
|
+
const [s, i] = v([]), { selectionMode: f, language: g, noCache: a } = T(), S = V();
|
|
121
|
+
let u = !1;
|
|
122
|
+
const h = async (o) => {
|
|
123
|
+
if (o.length) {
|
|
124
|
+
const d = await B({ ids: o, auth: S, language: g, noCache: a });
|
|
125
|
+
u || I(d) || (d.value?.sort((y, m) => o.indexOf(y.id) - o.indexOf(m.id)), i(d.value ?? []));
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return p(() => {
|
|
129
|
+
if (t) {
|
|
130
|
+
let o = t ?? [];
|
|
131
|
+
f !== "MultiSelect" && (o = o[0] ? [o[0]] : []), h(o);
|
|
132
|
+
}
|
|
133
|
+
return () => {
|
|
134
|
+
u = !0;
|
|
135
|
+
};
|
|
136
|
+
}, [t]), s;
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
W as SelectionProvider,
|
|
140
|
+
X as useSelectedAssetIds,
|
|
141
|
+
Y as useSelectedCollectionIds,
|
|
142
|
+
w as useSelection
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=SelectionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionContext.js","sources":["../../src/select/SelectionContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { getAssetsByMediaId } from '../api/filterAssets';\n\nimport { Asset, AssetData } from '../views/asset/asset.type';\nimport { Collection } from '../views/collection/collection.types';\nimport { isErr } from '../auth/result.type';\nimport { useSelectionMode, useConfig } from '../app-config/ConfigContext';\nimport { useAuth } from '../login/LoginContext';\nimport { useDat } from '@src/store/useDatStore';\n\nexport type SelectedAsset = { type: 'asset'; value: Asset };\nexport type SelectedCollection = { type: 'collection'; value: Collection };\n\nexport type SelectedItem = SelectedAsset | SelectedCollection;\n\ninterface Context {\n\tselection: SelectedItem[];\n\tpreselectedAssetIds?: string[];\n\tclear: () => void;\n\tselectAll: () => void;\n\tselectAssets: (assets: Asset[]) => void;\n\ttoggleAssets: (assets: Asset[]) => void;\n\ttoggleCollection: (collection: Collection) => void;\n\tsetAllAssets: (assetData: AssetData) => void;\n}\n\nconst SelectionContext = createContext<Context | null>(null);\n\n/* NOTE: I have assumed in the logic here that IDs are unique, even between\n * assets and collections, as would be the case with UUIDs. */\nexport function SelectionProvider(props: {\n\tpreselectedAssetIds: string[];\n\tchildren: React.ReactNode;\n}) {\n\tconst [selection, setSelection] = useState<SelectedItem[]>([]);\n\tconst [allAssetsStore, setAllAssetsStore] = useState<Asset[]>([]);\n\tconst [preselectedEncodedIds, setPreselectedEncodedIds] = useState<string[]>();\n\tconst preselectedAssets = usePreselectedAssets(preselectedEncodedIds);\n\tconst selectionMode = useSelectionMode();\n\tconst { transformation } = useDat();\n\n\tuseEffect(() => {\n\t\tsetPreselectedEncodedIds(\n\t\t\t(props.preselectedAssetIds ?? [])\n\t\t\t\t.filter((id) => !!id)\n\t\t\t\t.map((id) => window.btoa('(Asset_id ' + id + ')')),\n\t\t);\n\t}, [props.preselectedAssetIds]);\n\n\tuseEffect(() => {\n\t\tif (preselectedAssets.length) {\n\t\t\tselectAssets(preselectedAssets);\n\t\t}\n\t}, [preselectedAssets]);\n\n\tuseEffect(() => {\n\t\t// If we do a new DAT transformation, automatically select that asset\n\t\tif (transformation && Object.keys(transformation).length) {\n\t\t\tclear();\n\t\t\tselectAssets([transformation?.asset]);\n\t\t}\n\t}, [transformation]);\n\n\tfunction setAllAssets(assetData: AssetData) {\n\t\tif (assetData.tag === 'Loaded' && assetData.value) {\n\t\t\tsetAllAssetsStore(assetData.value);\n\t\t}\n\t}\n\n\tfunction selectAll() {\n\t\tsetSelection((prevState) => {\n\t\t\tconst newAssets = allAssetsStore.filter(\n\t\t\t\t(asset) => !prevState.some((selectedItem) => selectedItem.value.id === asset.id),\n\t\t\t);\n\n\t\t\treturn [\n\t\t\t\t...prevState,\n\t\t\t\t...newAssets.map<SelectedItem>((asset) => ({\n\t\t\t\t\ttype: 'asset',\n\t\t\t\t\tvalue: asset,\n\t\t\t\t})),\n\t\t\t];\n\t\t});\n\t}\n\n\tfunction clear() {\n\t\tsetSelection([]);\n\t}\n\n\tfunction selectAssets(assets: Asset[]) {\n\t\tsetSelection((prevSelectedItems) => {\n\t\t\tconst assetstoAdd = assets.filter((asset) => !isInSelection(prevSelectedItems, asset));\n\n\t\t\treturn [\n\t\t\t\t...prevSelectedItems,\n\t\t\t\t...assetstoAdd.map<SelectedItem>((asset) => ({\n\t\t\t\t\ttype: 'asset',\n\t\t\t\t\tvalue: asset,\n\t\t\t\t})),\n\t\t\t];\n\t\t});\n\t}\n\n\tfunction toggleAsset(asset: Asset) {\n\t\tif (selection.some((item) => item.value.id === asset.id)) {\n\t\t\tsetSelection([]);\n\t\t} else {\n\t\t\tsetSelection([{ type: 'asset', value: asset }]);\n\t\t}\n\t}\n\n\tfunction toggleAssets(assets: Asset[]) {\n\t\tif (selectionMode !== 'MultiSelect') {\n\t\t\ttoggleAsset(assets[0]);\n\t\t} else {\n\t\t\tsetSelection((prevSelectedItems) => {\n\t\t\t\tconst assetstoAdd = assets.filter(\n\t\t\t\t\t(asset) => !isInSelection(prevSelectedItems, asset),\n\t\t\t\t);\n\t\t\t\tconst assetsToRemove = assets.filter((asset) =>\n\t\t\t\t\tisInSelection(prevSelectedItems, asset),\n\t\t\t\t);\n\n\t\t\t\tconst prevSelectedItemsAfterRemoval = prevSelectedItems.filter(\n\t\t\t\t\t(selectedItem) =>\n\t\t\t\t\t\t!assetsToRemove.some(\n\t\t\t\t\t\t\t(assetToRemove) => assetToRemove.id === selectedItem.value.id,\n\t\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\treturn [\n\t\t\t\t\t...prevSelectedItemsAfterRemoval,\n\t\t\t\t\t...assetstoAdd.map<SelectedItem>((asset) => ({\n\t\t\t\t\t\ttype: 'asset',\n\t\t\t\t\t\tvalue: asset,\n\t\t\t\t\t})),\n\t\t\t\t];\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction toggleCollection(collection: Collection) {\n\t\tsetSelection((prevSelectedItems) => {\n\t\t\tif (isInSelection(prevSelectedItems, collection)) {\n\t\t\t\treturn prevSelectedItems.filter(\n\t\t\t\t\t(selectedItem) => selectedItem.value.id !== collection.id,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t...prevSelectedItems,\n\t\t\t\t{\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t\tvalue: collection,\n\t\t\t\t},\n\t\t\t];\n\t\t});\n\t}\n\n\tconst selectionContextValue = useMemo(\n\t\t() => ({\n\t\t\tselection,\n\t\t\tpreselectedAssetIds: preselectedEncodedIds,\n\t\t\tclear,\n\t\t\tselectAssets,\n\t\t\ttoggleAssets,\n\t\t\ttoggleCollection,\n\t\t\tselectAll,\n\t\t\tsetAllAssets,\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[selection, allAssetsStore],\n\t);\n\n\treturn (\n\t\t<SelectionContext.Provider value={selectionContextValue}>\n\t\t\t{props.children}\n\t\t</SelectionContext.Provider>\n\t);\n}\n\nfunction isInSelection(selection: SelectedItem[], item: Asset | Collection) {\n\treturn selection.some((selectedItem) => selectedItem.value.id === item.id);\n}\n\nexport function useSelection() {\n\tconst context = useContext(SelectionContext);\n\n\tif (context === null) {\n\t\tthrow new Error('useSelection must be used with a SelectionProvider');\n\t}\n\n\treturn context;\n}\n\nexport function useSelectedAssetIds() {\n\tconst { selection } = useSelection();\n\n\treturn selection\n\t\t.filter((selectedItem) => selectedItem.type === 'asset')\n\t\t.map((asset) => asset.value.id);\n}\n\nexport function useSelectedCollectionIds() {\n\tconst { selection } = useSelection();\n\n\treturn selection\n\t\t.filter((selectedItem) => selectedItem.type === 'collection')\n\t\t.map((asset) => asset.value.id);\n}\n\nfunction usePreselectedAssets(preselectedAssetIds?: string[]): Asset[] {\n\tconst [preselectedAssets, setPreselectedAssets] = useState<Asset[]>([]);\n\tconst { selectionMode, language, noCache } = useConfig();\n\tconst auth = useAuth();\n\tlet cancelRequestActions = false;\n\n\tconst getPreselectedAssets = async (assetIds: string[]) => {\n\t\tif (assetIds.length) {\n\t\t\tconst assets = await getAssetsByMediaId({ ids: assetIds, auth, language, noCache });\n\n\t\t\tif (!cancelRequestActions) {\n\t\t\t\tif (!isErr(assets)) {\n\t\t\t\t\tassets.value?.sort((a, b) => assetIds.indexOf(a.id) - assetIds.indexOf(b.id));\n\t\t\t\t\tsetPreselectedAssets(assets.value ?? []);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (preselectedAssetIds) {\n\t\t\tlet preselected = preselectedAssetIds ?? [];\n\n\t\t\tif (selectionMode !== 'MultiSelect') {\n\t\t\t\tpreselected = preselected[0] ? [preselected[0]] : [];\n\t\t\t}\n\n\t\t\tgetPreselectedAssets(preselected);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// eslint-disable-next-line\n\t\t\tcancelRequestActions = true;\n\t\t};\n\t}, [preselectedAssetIds]);\n\n\treturn preselectedAssets;\n}\n"],"names":["SelectionContext","createContext","SelectionProvider","props","selection","setSelection","useState","allAssetsStore","setAllAssetsStore","preselectedEncodedIds","setPreselectedEncodedIds","preselectedAssets","usePreselectedAssets","selectionMode","useSelectionMode","transformation","useDat","useEffect","id","selectAssets","clear","setAllAssets","assetData","selectAll","prevState","newAssets","asset","selectedItem","assets","prevSelectedItems","assetstoAdd","isInSelection","toggleAsset","item","toggleAssets","assetsToRemove","assetToRemove","toggleCollection","collection","selectionContextValue","useMemo","useSelection","context","useContext","useSelectedAssetIds","useSelectedCollectionIds","preselectedAssetIds","setPreselectedAssets","language","noCache","useConfig","auth","useAuth","cancelRequestActions","getPreselectedAssets","assetIds","getAssetsByMediaId","isErr","a","b","preselected"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsxs as m, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import d from "styled-components";
|
|
3
|
+
import { token as n, Button as r } from "@bynder/design-system";
|
|
4
|
+
import { IconSteps as b } from "@bynder/icons";
|
|
5
|
+
import { Dropdown as v } from "./Dropdown.js";
|
|
6
|
+
import { __ as o } from "./index2.js";
|
|
7
|
+
import { useSelection as w } from "./SelectionContext.js";
|
|
8
|
+
import { AddMedia as C } from "./AddMedia.js";
|
|
9
|
+
import { SelectedItems as A } from "./SelectedItems.js";
|
|
10
|
+
import { useConfig as I } from "./ConfigContext.js";
|
|
11
|
+
import { useRouterSelectors as k } from "./useRouterStore.js";
|
|
12
|
+
import { Tooltip as M } from "./Tooltip.js";
|
|
13
|
+
import { useSimilaritySearchStore as _ } from "./useSimilaritySearchStore.js";
|
|
14
|
+
import { useSimilarityAssets as $ } from "./getSimilarityAssets.js";
|
|
15
|
+
function L() {
|
|
16
|
+
const { selection: i, clear: a, selectAll: p } = w(), { selectionMode: l, selectAllOption: f } = I(), g = k.use.page(), { setIsSelected: S, isEnabled: u } = _(), { search: h, resetData: x } = $(), s = i.length >= 1 ? i.filter(
|
|
17
|
+
(t) => t.type === "asset" && t.value.__typename === "Image"
|
|
18
|
+
).map((t) => t.value.databaseId ? t.value.databaseId : t.value.id) : [], y = () => {
|
|
19
|
+
x(), S(!0), h(s), a();
|
|
20
|
+
}, c = i.length;
|
|
21
|
+
return c === 0 ? null : /* @__PURE__ */ m(j, { "data-testid": "selection-footer", children: [
|
|
22
|
+
/* @__PURE__ */ m(D, { children: [
|
|
23
|
+
/* @__PURE__ */ e(
|
|
24
|
+
v,
|
|
25
|
+
{
|
|
26
|
+
buttonKind: "secondary",
|
|
27
|
+
direction: "Up",
|
|
28
|
+
title: o("View {} selected").replace("{}", c.toString()),
|
|
29
|
+
children: () => /* @__PURE__ */ e(A, { selection: i })
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
l === "MultiSelect" && f && g.page === "assets" && /* @__PURE__ */ e(r, { variant: "secondary", onClick: p, children: o("Select all") }),
|
|
33
|
+
/* @__PURE__ */ e(r, { variant: "clean", onClick: a, children: o("Clear selection") })
|
|
34
|
+
] }),
|
|
35
|
+
l === "MultiSelect" && u && s.length > 0 && /* @__PURE__ */ e(M, { text: o("Show similar"), margin: "right", marginAmount: "spacing3", children: /* @__PURE__ */ e(
|
|
36
|
+
r,
|
|
37
|
+
{
|
|
38
|
+
variant: "clean",
|
|
39
|
+
icon: /* @__PURE__ */ e(b, {}),
|
|
40
|
+
"aria-label": o("Show similar"),
|
|
41
|
+
onClick: y
|
|
42
|
+
}
|
|
43
|
+
) }),
|
|
44
|
+
/* @__PURE__ */ e(C, { selection: i })
|
|
45
|
+
] });
|
|
46
|
+
}
|
|
47
|
+
const j = d.div`
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-shrink: 0;
|
|
50
|
+
z-index: 10;
|
|
51
|
+
height: ${n.layoutSpacing5};
|
|
52
|
+
padding: ${n.spacing6};
|
|
53
|
+
align-items: center;
|
|
54
|
+
box-shadow: 0 -1px 0 0 rgba(0, 34, 51, 0.1), 0 -1px 6px 0 rgba(0, 34, 51, 0.1);
|
|
55
|
+
animation: var(--fade-in-down);
|
|
56
|
+
`, D = d.span`
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-grow: 1;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: ${n.spacing2};
|
|
61
|
+
`;
|
|
62
|
+
export {
|
|
63
|
+
L as SelectionFooter
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=SelectionFooter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionFooter.js","sources":["../../src/select/SelectionFooter.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { Button, token } from '@bynder/design-system';\n\nimport { IconSteps } from '@bynder/icons';\nimport { Dropdown } from '../common/components/dropdown/Dropdown';\nimport { __ } from '../localization';\nimport { useSelection, SelectedAsset } from './SelectionContext';\nimport { AddMedia } from './add-media/AddMedia';\nimport { SelectedItems } from './current-selection/SelectedItems';\nimport { useConfig } from '../app-config/ConfigContext';\nimport { useRouterSelectors } from '@src/store/useRouterStore';\nimport { Tooltip } from '@src/common/components/Tooltip';\nimport { useSimilaritySearchStore } from '@src/store/useSimilaritySearchStore';\nimport { useSimilarityAssets } from '@src/api/getSimilarityAssets';\n\nexport function SelectionFooter() {\n\tconst { selection, clear: clearSelection, selectAll } = useSelection();\n\tconst { selectionMode, selectAllOption } = useConfig();\n\tconst page = useRouterSelectors.use.page();\n\tconst { setIsSelected, isEnabled: isSimilaritySearchEnabled } = useSimilaritySearchStore();\n\tconst { search, resetData } = useSimilarityAssets();\n\n\tconst selectionForSearch =\n\t\tselection.length >= 1\n\t\t\t? selection\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(item): item is SelectedAsset =>\n\t\t\t\t\t\t\titem.type === 'asset' && item.value.__typename === 'Image',\n\t\t\t\t\t)\n\t\t\t\t\t.map((item) => (item.value.databaseId ? item.value.databaseId : item.value.id))\n\t\t\t: [];\n\n\tconst handleSimilaritySearch = () => {\n\t\tresetData();\n\t\tsetIsSelected(true);\n\t\tsearch(selectionForSearch);\n\t\tclearSelection();\n\t};\n\n\tconst count = selection.length;\n\n\tif (count === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Container data-testid=\"selection-footer\">\n\t\t\t<SelectedAssetsContainer>\n\t\t\t\t<Dropdown\n\t\t\t\t\tbuttonKind=\"secondary\"\n\t\t\t\t\tdirection=\"Up\"\n\t\t\t\t\ttitle={__('View {} selected').replace('{}', count.toString())}\n\t\t\t\t>\n\t\t\t\t\t{() => <SelectedItems selection={selection} />}\n\t\t\t\t</Dropdown>\n\n\t\t\t\t{selectionMode === 'MultiSelect' && selectAllOption && page.page === 'assets' && (\n\t\t\t\t\t<Button variant=\"secondary\" onClick={selectAll}>\n\t\t\t\t\t\t{__('Select all')}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\n\t\t\t\t<Button variant=\"clean\" onClick={clearSelection}>\n\t\t\t\t\t{__('Clear selection')}\n\t\t\t\t</Button>\n\t\t\t</SelectedAssetsContainer>\n\n\t\t\t{selectionMode === 'MultiSelect' &&\n\t\t\t\tisSimilaritySearchEnabled &&\n\t\t\t\tselectionForSearch.length > 0 && (\n\t\t\t\t\t<Tooltip text={__('Show similar')} margin=\"right\" marginAmount=\"spacing3\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\ticon={<IconSteps />}\n\t\t\t\t\t\t\taria-label={__('Show similar')}\n\t\t\t\t\t\t\tonClick={handleSimilaritySearch}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\n\t\t\t<AddMedia selection={selection} />\n\t\t</Container>\n\t);\n}\n\nconst Container = styled.div`\n\tdisplay: flex;\n\tflex-shrink: 0;\n\tz-index: 10;\n\theight: ${token.layoutSpacing5};\n\tpadding: ${token.spacing6};\n\talign-items: center;\n\tbox-shadow: 0 -1px 0 0 rgba(0, 34, 51, 0.1), 0 -1px 6px 0 rgba(0, 34, 51, 0.1);\n\tanimation: var(--fade-in-down);\n`;\n\nconst SelectedAssetsContainer = styled.span`\n\tdisplay: flex;\n\tflex-grow: 1;\n\talign-items: center;\n\tgap: ${token.spacing2};\n`;\n"],"names":["SelectionFooter","selection","clearSelection","selectAll","useSelection","selectionMode","selectAllOption","useConfig","page","useRouterSelectors","setIsSelected","isSimilaritySearchEnabled","useSimilaritySearchStore","search","resetData","useSimilarityAssets","selectionForSearch","item","handleSimilaritySearch","count","jsxs","Container","SelectedAssetsContainer","jsx","Dropdown","__","SelectedItems","Button","Tooltip","IconSteps","AddMedia","styled","token"],"mappings":";;;;;;;;;;;;;;AAgBO,SAASA,IAAkB;AACjC,QAAM,EAAE,WAAAC,GAAW,OAAOC,GAAgB,WAAAC,EAAA,IAAcC,EAAA,GAClD,EAAE,eAAAC,GAAe,iBAAAC,EAAA,IAAoBC,EAAA,GACrCC,IAAOC,EAAmB,IAAI,KAAA,GAC9B,EAAE,eAAAC,GAAe,WAAWC,EAAA,IAA8BC,EAAA,GAC1D,EAAE,QAAAC,GAAQ,WAAAC,EAAA,IAAcC,EAAA,GAExBC,IACLf,EAAU,UAAU,IACjBA,EACC;AAAA,IACA,CAACgB,MACAA,EAAK,SAAS,WAAWA,EAAK,MAAM,eAAe;AAAA,EAAA,EAEpD,IAAI,CAACA,MAAUA,EAAK,MAAM,aAAaA,EAAK,MAAM,aAAaA,EAAK,MAAM,EAAG,IAC9E,CAAA,GAEEC,IAAyB,MAAM;AACpC,IAAAJ,EAAA,GACAJ,EAAc,EAAI,GAClBG,EAAOG,CAAkB,GACzBd,EAAA;AAAA,EACD,GAEMiB,IAAQlB,EAAU;AAExB,SAAIkB,MAAU,IACN,OAIP,gBAAAC,EAACC,GAAA,EAAU,eAAY,oBACtB,UAAA;AAAA,IAAA,gBAAAD,EAACE,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACA,YAAW;AAAA,UACX,WAAU;AAAA,UACV,OAAOC,EAAG,kBAAkB,EAAE,QAAQ,MAAMN,EAAM,UAAU;AAAA,UAE3D,UAAA,MAAM,gBAAAI,EAACG,GAAA,EAAc,WAAAzB,EAAA,CAAsB;AAAA,QAAA;AAAA,MAAA;AAAA,MAG5CI,MAAkB,iBAAiBC,KAAmBE,EAAK,SAAS,YACpE,gBAAAe,EAACI,GAAA,EAAO,SAAQ,aAAY,SAASxB,GACnC,UAAAsB,EAAG,YAAY,GACjB;AAAA,MAGD,gBAAAF,EAACI,KAAO,SAAQ,SAAQ,SAASzB,GAC/B,UAAAuB,EAAG,iBAAiB,EAAA,CACtB;AAAA,IAAA,GACD;AAAA,IAECpB,MAAkB,iBAClBM,KACAK,EAAmB,SAAS,KAC3B,gBAAAO,EAACK,GAAA,EAAQ,MAAMH,EAAG,cAAc,GAAG,QAAO,SAAQ,cAAa,YAC9D,UAAA,gBAAAF;AAAA,MAACI;AAAA,MAAA;AAAA,QACA,SAAQ;AAAA,QACR,wBAAOE,GAAA,EAAU;AAAA,QACjB,cAAYJ,EAAG,cAAc;AAAA,QAC7B,SAASP;AAAA,MAAA;AAAA,IAAA,GAEX;AAAA,IAGF,gBAAAK,EAACO,KAAS,WAAA7B,EAAA,CAAsB;AAAA,EAAA,GACjC;AAEF;AAEA,MAAMoB,IAAYU,EAAO;AAAA;AAAA;AAAA;AAAA,WAIdC,EAAM,cAAc;AAAA,YACnBA,EAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,GAMpBV,IAA0BS,EAAO;AAAA;AAAA;AAAA;AAAA,QAI/BC,EAAM,QAAQ;AAAA;"}
|
package/ShadowRoot.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as t, Fragment as n } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as a, useContext as c } from "react";
|
|
3
|
+
import { ShadowRootInternal as i } from "./ShadowRootInternal.js";
|
|
4
|
+
const e = a("parent");
|
|
5
|
+
function d({ children: o, isContainerMode: r = !1 }) {
|
|
6
|
+
return c(e) === "parent" ? /* @__PURE__ */ t(e.Provider, { value: "child", children: /* @__PURE__ */ t(i, { isContainerMode: r, children: o }) }) : /* @__PURE__ */ t(n, { children: o });
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
d as ShadowRoot
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ShadowRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadowRoot.js","sources":["../../src/style/shadowroot/ShadowRoot.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nimport { ShadowRootInternal } from './ShadowRootInternal';\n\nconst ShadowRootContext = createContext<'parent' | 'child'>('parent');\n\ninterface ShadowRootProps {\n\tchildren: React.ReactNode;\n\tisContainerMode?: boolean;\n}\n\n/**\n * This component will create a shadow root if it is the first ShadowRoot in the tree.\n * Otherwise, it will just render it's children. This is useful as we don't always know\n * which component will be first in the tree, especially when the components are used\n * externally from the npm package.\n */\nexport function ShadowRoot({ children, isContainerMode = false }: ShadowRootProps) {\n\tconst context = useContext(ShadowRootContext);\n\n\tif (context === 'parent') {\n\t\treturn (\n\t\t\t<ShadowRootContext.Provider value=\"child\">\n\t\t\t\t<ShadowRootInternal isContainerMode={isContainerMode}>\n\t\t\t\t\t{children}\n\t\t\t\t</ShadowRootInternal>\n\t\t\t</ShadowRootContext.Provider>\n\t\t);\n\t}\n\n\treturn <>{children}</>; // eslint-disable-line\n}\n"],"names":["ShadowRootContext","createContext","ShadowRoot","children","isContainerMode","useContext","jsx","ShadowRootInternal"],"mappings":";;;AAIA,MAAMA,IAAoBC,EAAkC,QAAQ;AAa7D,SAASC,EAAW,EAAE,UAAAC,GAAU,iBAAAC,IAAkB,MAA0B;AAGlF,SAFgBC,EAAWL,CAAiB,MAE5B,WAEd,gBAAAM,EAACN,EAAkB,UAAlB,EAA2B,OAAM,SACjC,UAAA,gBAAAM,EAACC,GAAA,EAAmB,iBAAAH,GAClB,UAAAD,EAAA,CACF,EAAA,CACD,2BAIQ,UAAAA,GAAS;AACpB;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import l, { useState as c, useEffect as d } from "react";
|
|
3
|
+
import { createPortal as u } from "react-dom";
|
|
4
|
+
import i from "styled-components";
|
|
5
|
+
import { RootElementProvider as m } from "./RootElementContext.js";
|
|
6
|
+
import p from "./Styles.css.js";
|
|
7
|
+
import { DesignSystemProvider as h } from "./DesignSystemContext.js";
|
|
8
|
+
function S(o) {
|
|
9
|
+
try {
|
|
10
|
+
return o.attachShadow({ mode: "open" });
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function x({ children: o, isContainerMode: e = !1 }) {
|
|
16
|
+
const t = l.useRef(null), [n, a] = c(null);
|
|
17
|
+
return d(() => {
|
|
18
|
+
if (t.current === null)
|
|
19
|
+
return;
|
|
20
|
+
const s = S(t.current);
|
|
21
|
+
w(s), s && f(document.head, y), a(s ?? t.current);
|
|
22
|
+
}, []), /* @__PURE__ */ r(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
ref: t,
|
|
26
|
+
style: {
|
|
27
|
+
display: "flex",
|
|
28
|
+
height: "100%"
|
|
29
|
+
},
|
|
30
|
+
"data-testid": "root",
|
|
31
|
+
children: n && /* @__PURE__ */ r(m, { value: n, children: /* @__PURE__ */ r(h, { children: u(
|
|
32
|
+
/* @__PURE__ */ r(
|
|
33
|
+
v,
|
|
34
|
+
{
|
|
35
|
+
$isContainerMode: e,
|
|
36
|
+
"data-testid": "ShadowRootInternalContainer",
|
|
37
|
+
children: o
|
|
38
|
+
}
|
|
39
|
+
),
|
|
40
|
+
n
|
|
41
|
+
) }) })
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
function w(o) {
|
|
46
|
+
const t = "@import url(https://d8ejoa1fys2rk.cloudfront.net/5.0.5/includes/css/vendor/font-awesome.min.css);" + p;
|
|
47
|
+
f(o ?? document.head, t);
|
|
48
|
+
}
|
|
49
|
+
function f(o, e) {
|
|
50
|
+
const t = document.createElement("style"), n = document.createTextNode(e);
|
|
51
|
+
t.appendChild(n), o.appendChild(t);
|
|
52
|
+
}
|
|
53
|
+
const y = `
|
|
54
|
+
@font-face {
|
|
55
|
+
font-family: 'Source Sans Pro';
|
|
56
|
+
font-style: normal;
|
|
57
|
+
font-weight: 400;
|
|
58
|
+
src: local('Source Sans Pro Regular'),
|
|
59
|
+
local('SourceSansPro-Regular'),
|
|
60
|
+
url('https://d8ejoa1fys2rk.cloudfront.net/5.0.5/includes/fonts/SourceSans/sourcesanspro-regular.woff2') format('woff2'),
|
|
61
|
+
url('https://d8ejoa1fys2rk.cloudfront.net/5.0.5/includes/fonts/SourceSans/sourcesanspro-regular.woff') format('woff');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@font-face {
|
|
65
|
+
font-family: "FontAwesome";
|
|
66
|
+
src: url("https://d8ejoa1fys2rk.cloudfront.net/5.0.5/includes/fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),
|
|
67
|
+
url("https://d8ejoa1fys2rk.cloudfront.net/5.0.5/includes/fonts/fontawesome-webfont.woff?v=4.7.0") format("woff");
|
|
68
|
+
font-weight: 400;
|
|
69
|
+
font-style: normal;
|
|
70
|
+
}
|
|
71
|
+
`, v = i.div`
|
|
72
|
+
width: ${(o) => o.$isContainerMode ? "100%" : "auto"};
|
|
73
|
+
font-family: 'Source Sans Pro';
|
|
74
|
+
`;
|
|
75
|
+
export {
|
|
76
|
+
x as ShadowRootInternal
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=ShadowRootInternal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadowRootInternal.js","sources":["../../src/style/shadowroot/ShadowRootInternal.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport styled from 'styled-components';\n\nimport { RootElementProvider } from '../RootElementContext';\n// eslint-disable-next-line\nimport styles from './Styles.css?inline';\nimport { DesignSystemProvider } from '../DesignSystemContext';\n\ninterface Props {\n\tchildren: React.ReactNode;\n\tisContainerMode?: boolean;\n}\n\ninterface ContainerProps {\n\t$isContainerMode: boolean;\n}\n\nfunction createShadowRoot(node: Element): ShadowRoot | null {\n\ttry {\n\t\treturn node.attachShadow({ mode: 'open' });\n\t} catch (e) {\n\t\treturn null;\n\t}\n}\n\n/**\n * This component creates a shadow root and injects styling so that outside\n * styling do not interfere with compactview and compactview styling does\n * not interfere with the DOM it's rendered in.\n */\nexport function ShadowRootInternal({ children, isContainerMode = false }: Props) {\n\tconst node = React.useRef<HTMLDivElement | null>(null);\n\tconst [root, setRoot] = useState<ShadowRoot | HTMLElement | null>(null);\n\n\tuseEffect(() => {\n\t\tif (node.current === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newRoot = createShadowRoot(node.current);\n\n\t\tinjectStyleSheet(newRoot);\n\n\t\tif (newRoot) {\n\t\t\t/**\n\t\t\t * If we're creating a Shadow Root, web-fonts still need to be loaded\n\t\t\t * outside of it by creating a style tag, otherwise the browser won't\n\t\t\t * load them.\n\t\t\t */\n\t\t\tinjectStyleElement(document.head, fontFaceStyles);\n\t\t}\n\n\t\tsetRoot(newRoot ?? node.current);\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tref={node}\n\t\t\tstyle={{\n\t\t\t\tdisplay: 'flex',\n\t\t\t\theight: '100%',\n\t\t\t}}\n\t\t\tdata-testid=\"root\"\n\t\t>\n\t\t\t{root && (\n\t\t\t\t<RootElementProvider value={root as HTMLElement}>\n\t\t\t\t\t<DesignSystemProvider>\n\t\t\t\t\t\t{createPortal(\n\t\t\t\t\t\t\t<Container\n\t\t\t\t\t\t\t\t$isContainerMode={isContainerMode}\n\t\t\t\t\t\t\t\tdata-testid=\"ShadowRootInternalContainer\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</Container>,\n\t\t\t\t\t\t\troot as Element,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DesignSystemProvider>\n\t\t\t\t</RootElementProvider>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction injectStyleSheet(shadowRoot: ShadowRoot | null) {\n\tconst envBasedImport = `@import url(${process.env.BYNDER_THEMES_CLOUDFRONT_URL}/5.0.5/includes/css/vendor/font-awesome.min.css);`;\n\tconst completeStyles = envBasedImport + styles;\n\tinjectStyleElement(shadowRoot ?? document.head, completeStyles);\n}\n\nfunction injectStyleElement(root: ShadowRoot | Element, styling: string) {\n\t/**\n\t * CSSStyleSheet API could be used here, however at this it is moment only\n\t * supported in Chromium-based browsers. In this particular use case the\n\t * benefits (e.g. being able to share styles accross different element/shadowroots,\n\t * or updating stylesheets programtically) do not warrant having a different\n\t * implementation for different browsers.\n\t */\n\tconst styleElement = document.createElement('style');\n\tconst textNode = document.createTextNode(styling);\n\tstyleElement.appendChild(textNode);\n\troot.appendChild(styleElement);\n}\n\nconst fontFaceStyles = `\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local('Source Sans Pro Regular'),\n local('SourceSansPro-Regular'),\n url('${process.env.BYNDER_THEMES_CLOUDFRONT_URL}/5.0.5/includes/fonts/SourceSans/sourcesanspro-regular.woff2') format('woff2'),\n url('${process.env.BYNDER_THEMES_CLOUDFRONT_URL}/5.0.5/includes/fonts/SourceSans/sourcesanspro-regular.woff') format('woff');\n }\n \n @font-face {\n font-family: \"FontAwesome\";\n src: url(\"${process.env.BYNDER_THEMES_CLOUDFRONT_URL}/5.0.5/includes/fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"),\n url(\"${process.env.BYNDER_THEMES_CLOUDFRONT_URL}/5.0.5/includes/fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\");\n font-weight: 400;\n font-style: normal;\n }\n`;\n\nconst Container = styled.div<ContainerProps>`\n\twidth: ${(props) => (props.$isContainerMode ? '100%' : 'auto')};\n\tfont-family: 'Source Sans Pro';\n`;\n"],"names":["createShadowRoot","node","ShadowRootInternal","children","isContainerMode","React","root","setRoot","useState","useEffect","newRoot","injectStyleSheet","injectStyleElement","fontFaceStyles","jsx","RootElementProvider","DesignSystemProvider","createPortal","Container","shadowRoot","completeStyles","styles","styling","styleElement","textNode","styled","props"],"mappings":";;;;;;;AAkBA,SAASA,EAAiBC,GAAkC;AAC3D,MAAI;AACH,WAAOA,EAAK,aAAa,EAAE,MAAM,QAAQ;AAAA,EAC1C,QAAY;AACX,WAAO;AAAA,EACR;AACD;AAOO,SAASC,EAAmB,EAAE,UAAAC,GAAU,iBAAAC,IAAkB,MAAgB;AAChF,QAAMH,IAAOI,EAAM,OAA8B,IAAI,GAC/C,CAACC,GAAMC,CAAO,IAAIC,EAA0C,IAAI;AAEtE,SAAAC,EAAU,MAAM;AACf,QAAIR,EAAK,YAAY;AACpB;AAGD,UAAMS,IAAUV,EAAiBC,EAAK,OAAO;AAE7C,IAAAU,EAAiBD,CAAO,GAEpBA,KAMHE,EAAmB,SAAS,MAAMC,CAAc,GAGjDN,EAAQG,KAAWT,EAAK,OAAO;AAAA,EAChC,GAAG,CAAA,CAAE,GAGJ,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,KAAKb;AAAA,MACL,OAAO;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,MAAA;AAAA,MAET,eAAY;AAAA,MAEX,eACA,gBAAAa,EAACC,GAAA,EAAoB,OAAOT,GAC3B,4BAACU,GAAA,EACC,UAAAC;AAAA,QACA,gBAAAH;AAAA,UAACI;AAAA,UAAA;AAAA,YACA,kBAAkBd;AAAA,YAClB,eAAY;AAAA,YAEX,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,QAEFG;AAAA,MAAA,EACD,CACD,EAAA,CACD;AAAA,IAAA;AAAA,EAAA;AAIJ;AAEA,SAASK,EAAiBQ,GAA+B;AAExD,QAAMC,IADiB,sGACiBC;AACxC,EAAAT,EAAmBO,KAAc,SAAS,MAAMC,CAAc;AAC/D;AAEA,SAASR,EAAmBN,GAA4BgB,GAAiB;AAQxE,QAAMC,IAAe,SAAS,cAAc,OAAO,GAC7CC,IAAW,SAAS,eAAeF,CAAO;AAChD,EAAAC,EAAa,YAAYC,CAAQ,GACjClB,EAAK,YAAYiB,CAAY;AAC9B;AAEA,MAAMV,IAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBjBK,IAAYO,EAAO;AAAA,UACf,CAACC,MAAWA,EAAM,mBAAmB,SAAS,MAAO;AAAA;AAAA;"}
|
package/Shield.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import e from "react";
|
|
3
|
+
import { Oops as o } from "./Oops.js";
|
|
4
|
+
class l extends e.Component {
|
|
5
|
+
constructor(r) {
|
|
6
|
+
super(r), this.state = { error: null };
|
|
7
|
+
}
|
|
8
|
+
static getDerivedStateFromError(r) {
|
|
9
|
+
return { error: r };
|
|
10
|
+
}
|
|
11
|
+
render() {
|
|
12
|
+
return this.state.error ? /* @__PURE__ */ t(
|
|
13
|
+
o,
|
|
14
|
+
{
|
|
15
|
+
error: this.state.error,
|
|
16
|
+
sentryClient: this.props.sentryClient,
|
|
17
|
+
onRetry: () => this.setState({ error: null })
|
|
18
|
+
}
|
|
19
|
+
) : this.props.children;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
l as Shield
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=Shield.js.map
|
package/Shield.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shield.js","sources":["../../src/error-handling/Shield.tsx"],"sourcesContent":["import React from 'react';\nimport { BrowserClient } from '@sentry/browser';\n\nimport { Oops } from './Oops';\n\ninterface Props {\n\tchildren: React.ReactNode;\n\tsentryClient?: BrowserClient;\n}\n\ninterface State {\n\terror: Error | null;\n}\n\nexport class Shield extends React.Component<Props, State> {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = { error: null };\n\t}\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn { error };\n\t}\n\n\trender() {\n\t\tif (this.state.error) {\n\t\t\treturn (\n\t\t\t\t<Oops\n\t\t\t\t\terror={this.state.error}\n\t\t\t\t\tsentryClient={this.props.sentryClient}\n\t\t\t\t\tonRetry={() => this.setState({ error: null })}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n"],"names":["Shield","React","props","error","jsx","Oops"],"mappings":";;;AAcO,MAAMA,UAAeC,EAAM,UAAwB;AAAA,EACzD,YAAYC,GAAc;AACzB,UAAMA,CAAK,GACX,KAAK,QAAQ,EAAE,OAAO,KAAA;AAAA,EACvB;AAAA,EAEA,OAAO,yBAAyBC,GAAc;AAC7C,WAAO,EAAE,OAAAA,EAAA;AAAA,EACV;AAAA,EAEA,SAAS;AACR,WAAI,KAAK,MAAM,QAEb,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,OAAO,KAAK,MAAM;AAAA,QAClB,cAAc,KAAK,MAAM;AAAA,QACzB,SAAS,MAAM,KAAK,SAAS,EAAE,OAAO,MAAM;AAAA,MAAA;AAAA,IAAA,IAKxC,KAAK,MAAM;AAAA,EACnB;AACD;"}
|
package/Skeleton.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { keyframes as n, styled as o } from "styled-components";
|
|
3
|
+
import { token as e } from "@bynder/design-system";
|
|
4
|
+
function g({ width: t = 100 }) {
|
|
5
|
+
return /* @__PURE__ */ i(a, { width: t, "data-testid": "skeleton", children: "" });
|
|
6
|
+
}
|
|
7
|
+
const r = n`
|
|
8
|
+
0% {
|
|
9
|
+
left: -500px;
|
|
10
|
+
}
|
|
11
|
+
100% {
|
|
12
|
+
left: 100%;
|
|
13
|
+
}
|
|
14
|
+
`, a = o.span`
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
display: inline-block;
|
|
17
|
+
position: relative;
|
|
18
|
+
width: ${({ width: t }) => t}px;
|
|
19
|
+
margin: ${e.spacing3} ${e.spacing3};
|
|
20
|
+
height: ${e.spacing5};
|
|
21
|
+
background-color: ${e.gray50};
|
|
22
|
+
border-radius: ${e.brandRadiusBase};
|
|
23
|
+
|
|
24
|
+
&before {
|
|
25
|
+
position: absolute;
|
|
26
|
+
top: 0;
|
|
27
|
+
height: 100%;
|
|
28
|
+
animation: ${r} 1.5s ease-in-out infinite;
|
|
29
|
+
content: '';
|
|
30
|
+
width: 500px;
|
|
31
|
+
left: -500px;
|
|
32
|
+
background-image: linear-gradient(
|
|
33
|
+
90deg,
|
|
34
|
+
rgba(255, 255, 255, 0),
|
|
35
|
+
rgba(255, 255, 255, 0.6),
|
|
36
|
+
rgba(255, 255, 255, 0)
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
export {
|
|
41
|
+
g as Skeleton
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=Skeleton.js.map
|
package/Skeleton.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../src/common/components/Skeleton.tsx"],"sourcesContent":["import React from 'react';\nimport { keyframes, styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\n\ninterface Props {\n\twidth?: number;\n}\n\nexport function Skeleton({ width = 100 }: Props) {\n\treturn (\n\t\t<SkeletonContainer width={width} data-testid=\"skeleton\">\n\t\t\t{'\\u200c'}\n\t\t</SkeletonContainer>\n\t);\n}\n\nconst CvSkeletonProgress = keyframes`\n\t0% {\n\t\tleft: -500px;\n\t}\n\t100% {\n\t\tleft: 100%;\n\t}\n`;\n\nconst SkeletonContainer = styled.span<{ width: number }>`\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tposition: relative;\n\twidth: ${({ width }) => width}px;\n\tmargin: ${token.spacing3} ${token.spacing3};\n\theight: ${token.spacing5};\n\tbackground-color: ${token.gray50};\n\tborder-radius: ${token.brandRadiusBase};\n\n\t&before {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\theight: 100%;\n\t\tanimation: ${CvSkeletonProgress} 1.5s ease-in-out infinite;\n\t\tcontent: '';\n\t\twidth: 500px;\n\t\tleft: -500px;\n\t\tbackground-image: linear-gradient(\n\t\t\t90deg,\n\t\t\trgba(255, 255, 255, 0),\n\t\t\trgba(255, 255, 255, 0.6),\n\t\t\trgba(255, 255, 255, 0)\n\t\t);\n\t}\n`;\n"],"names":["Skeleton","width","jsx","SkeletonContainer","CvSkeletonProgress","keyframes","styled","token"],"mappings":";;;AAQO,SAASA,EAAS,EAAE,OAAAC,IAAQ,OAAc;AAChD,SACC,gBAAAC,EAACC,GAAA,EAAkB,OAAAF,GAAc,eAAY,YAC3C,UAAA,KACF;AAEF;AAEA,MAAMG,IAAqBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASrBF,IAAoBG,EAAO;AAAA;AAAA;AAAA;AAAA,UAIvB,CAAC,EAAE,OAAAL,EAAA,MAAYA,CAAK;AAAA,WACnBM,EAAM,QAAQ,IAAIA,EAAM,QAAQ;AAAA,WAChCA,EAAM,QAAQ;AAAA,qBACJA,EAAM,MAAM;AAAA,kBACfA,EAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMxBH,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "react/jsx-runtime";
|
|
2
|
+
import o from "styled-components";
|
|
3
|
+
import { token as p } from "@bynder/design-system";
|
|
4
|
+
import "./MetapropertyFilterContent.js";
|
|
5
|
+
o.div`
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-wrap: wrap;
|
|
8
|
+
gap: ${p.spacing4};
|
|
9
|
+
overflow: auto;
|
|
10
|
+
`;
|
|
11
|
+
//# sourceMappingURL=SmartFilterContent.js.map
|