@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.
Files changed (385) hide show
  1. package/ActiveFilter.js +33 -0
  2. package/ActiveFilter.js.map +1 -0
  3. package/ActiveFilters.js +81 -0
  4. package/ActiveFilters.js.map +1 -0
  5. package/AddMedia.js +90 -0
  6. package/AddMedia.js.map +1 -0
  7. package/Advanced.js +66 -0
  8. package/Advanced.js.map +1 -0
  9. package/App.d.ts +4 -2
  10. package/App.js +93 -0
  11. package/App.js.map +1 -0
  12. package/AssetCard.js +172 -0
  13. package/AssetCard.js.map +1 -0
  14. package/AssetCardMetaproperties.js +47 -0
  15. package/AssetCardMetaproperties.js.map +1 -0
  16. package/AssetFilter.js +138 -0
  17. package/AssetFilter.js.map +1 -0
  18. package/AssetFilterContext.js +162 -0
  19. package/AssetFilterContext.js.map +1 -0
  20. package/AssetItem.js +40 -0
  21. package/AssetItem.js.map +1 -0
  22. package/AssetList.js +158 -0
  23. package/AssetList.js.map +1 -0
  24. package/AssetTypeItem.js +34 -0
  25. package/AssetTypeItem.js.map +1 -0
  26. package/AssetsView.js +61 -0
  27. package/AssetsView.js.map +1 -0
  28. package/Autocomplete_new.js +148 -0
  29. package/Autocomplete_new.js.map +1 -0
  30. package/ButtonAction.js +14 -0
  31. package/ButtonAction.js.map +1 -0
  32. package/CardSkeleton.js +31 -0
  33. package/CardSkeleton.js.map +1 -0
  34. package/Checkbox.styles.js +38 -0
  35. package/Checkbox.styles.js.map +1 -0
  36. package/Chip.js +43 -0
  37. package/Chip.js.map +1 -0
  38. package/CollectionCard.js +56 -0
  39. package/CollectionCard.js.map +1 -0
  40. package/CollectionItem.js +41 -0
  41. package/CollectionItem.js.map +1 -0
  42. package/CollectionList.js +53 -0
  43. package/CollectionList.js.map +1 -0
  44. package/CollectionView.js +73 -0
  45. package/CollectionView.js.map +1 -0
  46. package/CollectionsView.js +58 -0
  47. package/CollectionsView.js.map +1 -0
  48. package/ConfigContext.js +18 -0
  49. package/ConfigContext.js.map +1 -0
  50. package/ConnectButton.js +20 -0
  51. package/ConnectButton.js.map +1 -0
  52. package/Container.js +52 -0
  53. package/Container.js.map +1 -0
  54. package/ContextAction.js +42 -0
  55. package/ContextAction.js.map +1 -0
  56. package/Dat/Dat.d.ts +2 -12
  57. package/Dat/DatDropdownItem.d.ts +1 -1
  58. package/Dat/index.d.ts +0 -1
  59. package/Dat.js +90 -0
  60. package/Dat.js.map +1 -0
  61. package/DatDropdownItem.js +47 -0
  62. package/DatDropdownItem.js.map +1 -0
  63. package/DesignSystemContext.js +12 -0
  64. package/DesignSystemContext.js.map +1 -0
  65. package/DirectionSelect.js +43 -0
  66. package/DirectionSelect.js.map +1 -0
  67. package/DocumentIcon.js +69 -0
  68. package/DocumentIcon.js.map +1 -0
  69. package/DomainInput.js +39 -0
  70. package/DomainInput.js.map +1 -0
  71. package/DragSelect.js +144 -0
  72. package/DragSelect.js.map +1 -0
  73. package/Dropdown.js +72 -0
  74. package/Dropdown.js.map +1 -0
  75. package/DropdownContent.js +59 -0
  76. package/DropdownContent.js.map +1 -0
  77. package/DropdownListItem.js +52 -0
  78. package/DropdownListItem.js.map +1 -0
  79. package/ErrorIcon.js +48 -0
  80. package/ErrorIcon.js.map +1 -0
  81. package/ErrorMessage.js +40 -0
  82. package/ErrorMessage.js.map +1 -0
  83. package/FieldSelect.js +74 -0
  84. package/FieldSelect.js.map +1 -0
  85. package/FileSelector.js +266 -0
  86. package/FileSelector.js.map +1 -0
  87. package/Header.js +42 -0
  88. package/Header.js.map +1 -0
  89. package/HorizontalScroll.js +51 -0
  90. package/HorizontalScroll.js.map +1 -0
  91. package/InfiniteScroll.js +26 -0
  92. package/InfiniteScroll.js.map +1 -0
  93. package/LeftArrow.js +31 -0
  94. package/LeftArrow.js.map +1 -0
  95. package/LoginComponent.js +32 -0
  96. package/LoginComponent.js.map +1 -0
  97. package/LoginContext.js +85 -0
  98. package/LoginContext.js.map +1 -0
  99. package/MetapropertyFilterContent.js +25 -0
  100. package/MetapropertyFilterContent.js.map +1 -0
  101. package/MetapropertyOption.js +24 -0
  102. package/MetapropertyOption.js.map +1 -0
  103. package/Modal.js +48 -0
  104. package/Modal.js.map +1 -0
  105. package/NoResults.js +51 -0
  106. package/NoResults.js.map +1 -0
  107. package/Oops.js +54 -0
  108. package/Oops.js.map +1 -0
  109. package/Option_new.js +50 -0
  110. package/Option_new.js.map +1 -0
  111. package/RefreshingSpinner.js +22 -0
  112. package/RefreshingSpinner.js.map +1 -0
  113. package/ReportModal.js +51 -0
  114. package/ReportModal.js.map +1 -0
  115. package/RightArrow.js +31 -0
  116. package/RightArrow.js.map +1 -0
  117. package/RootElementContext.js +12 -0
  118. package/RootElementContext.js.map +1 -0
  119. package/SearchInput.js +76 -0
  120. package/SearchInput.js.map +1 -0
  121. package/SelectedItemContainer.js +44 -0
  122. package/SelectedItemContainer.js.map +1 -0
  123. package/SelectedItems.js +27 -0
  124. package/SelectedItems.js.map +1 -0
  125. package/SelectionContext.js +144 -0
  126. package/SelectionContext.js.map +1 -0
  127. package/SelectionFooter.js +65 -0
  128. package/SelectionFooter.js.map +1 -0
  129. package/ShadowRoot.js +11 -0
  130. package/ShadowRoot.js.map +1 -0
  131. package/ShadowRootInternal.js +78 -0
  132. package/ShadowRootInternal.js.map +1 -0
  133. package/Shield.js +25 -0
  134. package/Shield.js.map +1 -0
  135. package/Skeleton.js +43 -0
  136. package/Skeleton.js.map +1 -0
  137. package/SmartFilterContent.js +11 -0
  138. package/SmartFilterContent.js.map +1 -0
  139. package/SmartFilterSelect_new.js +86 -0
  140. package/SmartFilterSelect_new.js.map +1 -0
  141. package/Smartfilters_new.js +190 -0
  142. package/Smartfilters_new.js.map +1 -0
  143. package/Spinner.js +32 -0
  144. package/Spinner.js.map +1 -0
  145. package/StatefulAssetList.js +100 -0
  146. package/StatefulAssetList.js.map +1 -0
  147. package/Styles.css.js +5 -0
  148. package/Styles.css.js.map +1 -0
  149. package/SwitchNLS.js +80 -0
  150. package/SwitchNLS.js.map +1 -0
  151. package/TagItem.js +38 -0
  152. package/TagItem.js.map +1 -0
  153. package/Tags.js +48 -0
  154. package/Tags.js.map +1 -0
  155. package/Theming.js +30 -0
  156. package/Theming.js.map +1 -0
  157. package/Toolbar.js +53 -0
  158. package/Toolbar.js.map +1 -0
  159. package/Tooltip.js +81 -0
  160. package/Tooltip.js.map +1 -0
  161. package/ViewSwitch.js +45 -0
  162. package/ViewSwitch.js.map +1 -0
  163. package/api/filterAssets.d.ts +1 -1
  164. package/api/getCollections.d.ts +1 -1
  165. package/api/getFilterOptions.d.ts +9 -0
  166. package/api/getFilters.d.ts +2 -2
  167. package/api/getFilters_new.d.ts +7 -0
  168. package/api/getSimilarityAssets.d.ts +1 -1
  169. package/api/index.d.ts +3 -3
  170. package/api/rest/autocomplete.d.ts +1 -1
  171. package/api/rest/getAssetCounts.d.ts +2 -2
  172. package/api/rest/getInitialFilters.d.ts +2 -2
  173. package/api/rest/getMetapropertiesOptions.d.ts +1 -1
  174. package/api/types/getFilters_new.d.ts +56 -0
  175. package/app-config/ConfigContext.d.ts +4 -5
  176. package/app-config/appConfig.type.d.ts +2 -0
  177. package/app-config/appConfig.type.guard.d.ts +1 -1
  178. package/asset.type.js +31 -0
  179. package/asset.type.js.map +1 -0
  180. package/asyncDebounce.js +14 -0
  181. package/asyncDebounce.js.map +1 -0
  182. package/auth.js +35 -0
  183. package/auth.js.map +1 -0
  184. package/autocomplete.js +25 -0
  185. package/autocomplete.js.map +1 -0
  186. package/base64Converter.js +15 -0
  187. package/base64Converter.js.map +1 -0
  188. package/chunk.js +10 -0
  189. package/chunk.js.map +1 -0
  190. package/class.js +7 -0
  191. package/class.js.map +1 -0
  192. package/combineFilters.js +9 -0
  193. package/combineFilters.js.map +1 -0
  194. package/combineMetaproperties.js +25 -0
  195. package/combineMetaproperties.js.map +1 -0
  196. package/common/components/CardSkeleton.d.ts +1 -1
  197. package/common/components/Checkbox.styles.d.ts +4 -4
  198. package/common/components/Chip.d.ts +1 -1
  199. package/common/components/DocumentIcon.d.ts +1 -1
  200. package/common/components/DragSelect.d.ts +1 -1
  201. package/common/components/HorizontalScroll.d.ts +1 -1
  202. package/common/components/InfiniteScroll.d.ts +1 -1
  203. package/common/components/LeftArrow.d.ts +1 -1
  204. package/common/components/Modal.d.ts +1 -1
  205. package/common/components/NoResults.d.ts +1 -1
  206. package/common/components/RightArrow.d.ts +1 -1
  207. package/common/components/Skeleton.d.ts +1 -1
  208. package/common/components/Spinner.d.ts +1 -1
  209. package/common/components/Tooltip.d.ts +1 -1
  210. package/common/components/dropdown/Dropdown.d.ts +1 -1
  211. package/common/components/dropdown/DropdownContent.d.ts +1 -1
  212. package/common/components/dropdown/DropdownListItem.d.ts +1 -1
  213. package/common/hooks/useClickOutside.d.ts +1 -1
  214. package/constants.js +15 -0
  215. package/constants.js.map +1 -0
  216. package/createSelectors.js +11 -0
  217. package/createSelectors.js.map +1 -0
  218. package/crypto.js +21 -0
  219. package/crypto.js.map +1 -0
  220. package/error-handling/ErrorIcon.d.ts +1 -1
  221. package/error-handling/ErrorMessage.d.ts +1 -1
  222. package/error-handling/Oops.d.ts +1 -1
  223. package/error-handling/ReportModal.d.ts +1 -1
  224. package/error-handling/Shield.d.ts +1 -1
  225. package/filter/AssetFilter.d.ts +1 -1
  226. package/filter/AssetFilterContext.d.ts +3 -3
  227. package/filter/active-filters/ActiveFilter.d.ts +1 -1
  228. package/filter/active-filters/ActiveFilters.d.ts +1 -1
  229. package/filter/filters/advanced/Advanced.d.ts +1 -1
  230. package/filter/filters/advanced/AssetTypeItem.d.ts +1 -1
  231. package/filter/filters/metaproperty/Metaproperty.d.ts +1 -1
  232. package/filter/filters/metaproperty/MetapropertyFilterContent.d.ts +1 -1
  233. package/filter/filters/metaproperty/MetapropertyOption.d.ts +1 -1
  234. package/filter/filters/metaproperty/SmartFilterContent.d.ts +1 -1
  235. package/filter/filters/smartfilters/Metaproperties/Autocomplete.d.ts +3 -3
  236. package/filter/filters/smartfilters/Metaproperties/Autocomplete_new.d.ts +15 -0
  237. package/filter/filters/smartfilters/Metaproperties/Option.d.ts +2 -2
  238. package/filter/filters/smartfilters/Metaproperties/Option_new.d.ts +13 -0
  239. package/filter/filters/smartfilters/Metaproperties/SmartFilterSelect.d.ts +2 -2
  240. package/filter/filters/smartfilters/Metaproperties/SmartFilterSelect_new.d.ts +13 -0
  241. package/filter/filters/smartfilters/Smartfilters.d.ts +2 -2
  242. package/filter/filters/smartfilters/Smartfilters_new.d.ts +7 -0
  243. package/filter/filters/tags/TagItem.d.ts +1 -1
  244. package/filter/filters/tags/Tags.d.ts +1 -1
  245. package/filterAssets.js +177 -0
  246. package/filterAssets.js.map +1 -0
  247. package/getAsset.js +70 -0
  248. package/getAsset.js.map +1 -0
  249. package/getAssetCounts.js +27 -0
  250. package/getAssetCounts.js.map +1 -0
  251. package/getAssets.js +137 -0
  252. package/getAssets.js.map +1 -0
  253. package/getCollections.js +79 -0
  254. package/getCollections.js.map +1 -0
  255. package/getFilterOptions.js +57 -0
  256. package/getFilterOptions.js.map +1 -0
  257. package/getFilters.js +85 -0
  258. package/getFilters.js.map +1 -0
  259. package/getFilters_new.js +73 -0
  260. package/getFilters_new.js.map +1 -0
  261. package/getLimitedUseThumbnails.js +26 -0
  262. package/getLimitedUseThumbnails.js.map +1 -0
  263. package/getSimilarityAssets.js +141 -0
  264. package/getSimilarityAssets.js.map +1 -0
  265. package/handlers.js +7 -0
  266. package/handlers.js.map +1 -0
  267. package/helpers.js +7 -0
  268. package/helpers.js.map +1 -0
  269. package/index.js +9 -1162
  270. package/index.js.map +1 -0
  271. package/index2.js +18 -0
  272. package/index2.js.map +1 -0
  273. package/index3.js +56 -0
  274. package/index3.js.map +1 -0
  275. package/index4.js +20 -0
  276. package/index4.js.map +1 -0
  277. package/logger.js +7 -0
  278. package/logger.js.map +1 -0
  279. package/login/LoginComponent.d.ts +1 -1
  280. package/login/LoginContext.d.ts +1 -1
  281. package/login/components/ConnectButton.d.ts +1 -1
  282. package/login/components/Container.d.ts +1 -1
  283. package/login/components/DomainInput.d.ts +1 -1
  284. package/login/components/Header.d.ts +1 -1
  285. package/login/components/RefreshingSpinner.d.ts +1 -1
  286. package/loginwindow.js +84 -0
  287. package/loginwindow.js.map +1 -0
  288. package/normalizeResponse.js +31 -0
  289. package/normalizeResponse.js.map +1 -0
  290. package/oauth2.js +87 -0
  291. package/oauth2.js.map +1 -0
  292. package/order/DirectionSelect.d.ts +1 -1
  293. package/order/FieldSelect.d.ts +2 -2
  294. package/package.json +2 -9
  295. package/result.type.js +25 -0
  296. package/result.type.js.map +1 -0
  297. package/router/RouterContext.d.ts +1 -1
  298. package/search/SearchInput.d.ts +1 -1
  299. package/search/SwitchNLS.d.ts +1 -1
  300. package/search/index.d.ts +0 -2
  301. package/select/FileSelector.d.ts +1 -1
  302. package/select/SelectionContext.d.ts +1 -1
  303. package/select/SelectionFooter.d.ts +1 -1
  304. package/select/add-media/AddMedia.d.ts +1 -1
  305. package/select/add-media/ButtonAction.d.ts +1 -1
  306. package/select/current-selection/AssetItem.d.ts +1 -1
  307. package/select/current-selection/CollectionItem.d.ts +1 -1
  308. package/select/current-selection/SelectedItemContainer.d.ts +1 -1
  309. package/select/current-selection/SelectedItems.d.ts +1 -1
  310. package/store/useDatStore.d.ts +73 -0
  311. package/store/useOrderingStore.d.ts +2 -2
  312. package/store/useRouterStore.d.ts +4 -4
  313. package/store/useSearchStore.d.ts +69 -0
  314. package/store/useSimilaritySearchStore.d.ts +67 -0
  315. package/style/DesignSystemContext.d.ts +1 -1
  316. package/style/RootElementContext.d.ts +1 -1
  317. package/style/Theming.d.ts +1 -1
  318. package/style/shadowroot/ShadowRoot.d.ts +1 -1
  319. package/style/shadowroot/ShadowRootInternal.d.ts +1 -1
  320. package/text.js +9 -0
  321. package/text.js.map +1 -0
  322. package/toolbar/Toolbar.d.ts +1 -1
  323. package/toolbar/ViewSwitch.d.ts +1 -1
  324. package/trimMetapropertyValue.js +6 -0
  325. package/trimMetapropertyValue.js.map +1 -0
  326. package/url.js +7 -0
  327. package/url.js.map +1 -0
  328. package/useAccountDomain.js +33 -0
  329. package/useAccountDomain.js.map +1 -0
  330. package/useAuthInformation.js +42 -0
  331. package/useAuthInformation.js.map +1 -0
  332. package/useClickOutside.js +16 -0
  333. package/useClickOutside.js.map +1 -0
  334. package/useDatStore.js +62 -0
  335. package/useDatStore.js.map +1 -0
  336. package/useDimensions.js +31 -0
  337. package/useDimensions.js.map +1 -0
  338. package/useOrderingStore.js +27 -0
  339. package/useOrderingStore.js.map +1 -0
  340. package/useRouterStore.js +21 -0
  341. package/useRouterStore.js.map +1 -0
  342. package/useSearchStore.js +49 -0
  343. package/useSearchStore.js.map +1 -0
  344. package/useSimilaritySearchStore.js +28 -0
  345. package/useSimilaritySearchStore.js.map +1 -0
  346. package/utils/base64Converter.d.ts +1 -1
  347. package/utils/combineFilters.d.ts +1 -1
  348. package/utils/combineMetaproperties.d.ts +2 -2
  349. package/utils/filterEmptyMetaproperties.d.ts +1 -1
  350. package/utils/getLimitedUseThumbnails.d.ts +2 -0
  351. package/utils/getMetaPropertiesForFilter.d.ts +1 -1
  352. package/utils/normalizeResponse.d.ts +1 -1
  353. package/utils.js +49 -0
  354. package/utils.js.map +1 -0
  355. package/utils2.js +51 -0
  356. package/utils2.js.map +1 -0
  357. package/views/asset/AssetList.d.ts +5 -3
  358. package/views/asset/AssetsView.d.ts +1 -1
  359. package/views/asset/StatefulAssetList.d.ts +2 -2
  360. package/views/asset/asset-card/AssetCard.d.ts +1 -1
  361. package/views/asset/asset-card/AssetCardMetaproperties.d.ts +3 -3
  362. package/views/asset/asset-card/ContextAction.d.ts +1 -1
  363. package/views/collection/CollectionView.d.ts +1 -1
  364. package/views/collections/CollectionCard.d.ts +1 -1
  365. package/views/collections/CollectionList.d.ts +1 -1
  366. package/views/collections/CollectionsView.d.ts +1 -1
  367. package/Dat/DatContext.d.ts +0 -12
  368. package/__tests__/utils/index.d.ts +0 -116
  369. package/api/__tests__/testMocks/mocks.d.ts +0 -14
  370. package/api/__tests__/utils.d.ts +0 -10
  371. package/common/components/__mocks__/Tooltip.d.ts +0 -6
  372. package/common/components/__tests__/utils.d.ts +0 -34
  373. package/error-handling/__tests__/utils.d.ts +0 -56
  374. package/filter/__tests__/utils.d.ts +0 -13
  375. package/index.mjs +0 -1163
  376. package/login/__tests__/mocks.d.ts +0 -1
  377. package/login/__tests__/utils.d.ts +0 -41
  378. package/search/SearchContext.d.ts +0 -25
  379. package/search/SimilaritySearchContext.d.ts +0 -21
  380. package/search/__mocks__/SimilaritySearchContext.d.ts +0 -5
  381. package/select/__tests__/utils.d.ts +0 -11
  382. package/style/shadowroot/__mocks__/ShadowRoot.d.ts +0 -4
  383. package/utils/__mocks__/logger.d.ts +0 -4
  384. package/views/asset/__tests__/utils.d.ts +0 -7
  385. 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;"}
@@ -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
@@ -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