@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
@@ -0,0 +1,40 @@
1
+ import { jsxs as e, Fragment as c, jsx as r } from "react/jsx-runtime";
2
+ import i from "styled-components";
3
+ import { token as n, Button as a } from "@bynder/design-system";
4
+ import { __ as t } from "./index2.js";
5
+ import { ErrorIcon as s } from "./ErrorIcon.js";
6
+ function u(o) {
7
+ return /* @__PURE__ */ e(c, { children: [
8
+ /* @__PURE__ */ r(s, {}),
9
+ /* @__PURE__ */ r(l, { children: t("Oops! Something went wrong") }),
10
+ /* @__PURE__ */ r(p, { children: t("Please try again or get in contact with our customer support.") }),
11
+ /* @__PURE__ */ e(m, { children: [
12
+ /* @__PURE__ */ r(
13
+ a,
14
+ {
15
+ variant: "secondary",
16
+ title: t("Send report"),
17
+ onClick: o.onClickSend,
18
+ isDisabled: o.isReportSent,
19
+ children: o.isReportSent ? t("Report sent") : t("Send report...")
20
+ }
21
+ ),
22
+ /* @__PURE__ */ r(a, { variant: "primary", title: t("Try again"), onClick: o.onClickRetry, children: t("Try again") })
23
+ ] })
24
+ ] });
25
+ }
26
+ const l = i.h1`
27
+ margin-top: ${n.spacing8};
28
+ font-size: ${n.fontSize400};
29
+ `, p = i.span`
30
+ margin-top: ${n.spacing5};
31
+ color: ${n.colorTextDisabled};
32
+ `, m = i.div`
33
+ margin-top: ${n.spacing7};
34
+ display: flex;
35
+ gap: ${n.spacing3};
36
+ `;
37
+ export {
38
+ u as ErrorMessage
39
+ };
40
+ //# sourceMappingURL=ErrorMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorMessage.js","sources":["../../src/error-handling/ErrorMessage.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { Button, token } from '@bynder/design-system';\n\nimport { __ } from '../localization';\nimport { ErrorIcon } from './ErrorIcon';\n\nexport function ErrorMessage(props: {\n\tisReportSent: boolean;\n\tonClickSend: () => void;\n\tonClickRetry: () => void;\n}) {\n\treturn (\n\t\t<>\n\t\t\t<ErrorIcon />\n\n\t\t\t<Title>{__('Oops! Something went wrong')}</Title>\n\n\t\t\t<Text>{__('Please try again or get in contact with our customer support.')}</Text>\n\n\t\t\t<ButtonContainer>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\ttitle={__('Send report')}\n\t\t\t\t\tonClick={props.onClickSend}\n\t\t\t\t\tisDisabled={props.isReportSent}\n\t\t\t\t>\n\t\t\t\t\t{props.isReportSent ? __('Report sent') : __('Send report...')}\n\t\t\t\t</Button>\n\n\t\t\t\t<Button variant=\"primary\" title={__('Try again')} onClick={props.onClickRetry}>\n\t\t\t\t\t{__('Try again')}\n\t\t\t\t</Button>\n\t\t\t</ButtonContainer>\n\t\t</>\n\t);\n}\n\nconst Title = styled.h1`\n\tmargin-top: ${token.spacing8};\n\tfont-size: ${token.fontSize400};\n`;\n\nconst Text = styled.span`\n\tmargin-top: ${token.spacing5};\n\tcolor: ${token.colorTextDisabled};\n`;\n\nconst ButtonContainer = styled.div`\n\tmargin-top: ${token.spacing7};\n\tdisplay: flex;\n\tgap: ${token.spacing3};\n`;\n"],"names":["ErrorMessage","props","jsxs","Fragment","jsx","ErrorIcon","Title","__","Text","ButtonContainer","Button","styled","token"],"mappings":";;;;;AAOO,SAASA,EAAaC,GAI1B;AACF,SACC,gBAAAC,EAAAC,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAU;AAAA,IAEX,gBAAAD,EAACE,GAAA,EAAO,UAAAC,EAAG,4BAA4B,EAAA,CAAE;AAAA,IAEzC,gBAAAH,EAACI,GAAA,EAAM,UAAAD,EAAG,+DAA+D,EAAA,CAAE;AAAA,sBAE1EE,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,SAAQ;AAAA,UACR,OAAOH,EAAG,aAAa;AAAA,UACvB,SAASN,EAAM;AAAA,UACf,YAAYA,EAAM;AAAA,UAEjB,YAAM,eAAeM,EAAG,aAAa,IAAIA,EAAG,gBAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,MAG9D,gBAAAH,EAACM,GAAA,EAAO,SAAQ,WAAU,OAAOH,EAAG,WAAW,GAAG,SAASN,EAAM,cAC/D,UAAAM,EAAG,WAAW,EAAA,CAChB;AAAA,IAAA,EAAA,CACD;AAAA,EAAA,GACD;AAEF;AAEA,MAAMD,IAAQK,EAAO;AAAA,eACNC,EAAM,QAAQ;AAAA,cACfA,EAAM,WAAW;AAAA,GAGzBJ,IAAOG,EAAO;AAAA,eACLC,EAAM,QAAQ;AAAA,UACnBA,EAAM,iBAAiB;AAAA,GAG3BH,IAAkBE,EAAO;AAAA,eAChBC,EAAM,QAAQ;AAAA;AAAA,QAErBA,EAAM,QAAQ;AAAA;"}
package/FieldSelect.js ADDED
@@ -0,0 +1,74 @@
1
+ import { jsx as r, jsxs as m } from "react/jsx-runtime";
2
+ import t from "styled-components";
3
+ import { token as l } from "@bynder/design-system";
4
+ import { Dropdown as f } from "./Dropdown.js";
5
+ import { __ as i } from "./index2.js";
6
+ import { useOrderingByPage as p } from "./useOrderingStore.js";
7
+ import { useRouterSelectors as g } from "./useRouterStore.js";
8
+ import { DropdownListItem as u } from "./DropdownListItem.js";
9
+ function R({ options: e }) {
10
+ const d = g.use.page(), [o, a] = p(d.page), s = {
11
+ CREATED_AT: i("Date added"),
12
+ NAME: i("Name"),
13
+ PUBLISHED_AT: i("Date published"),
14
+ UPDATED_AT: i("Date modified"),
15
+ NL_SEARCH: i("Similarity")
16
+ };
17
+ return /* @__PURE__ */ r(b, { children: /* @__PURE__ */ r(
18
+ f,
19
+ {
20
+ title: /* @__PURE__ */ r(
21
+ D,
22
+ {
23
+ stringOfFieldMap: s,
24
+ orderingField: e[0] === "NL_SEARCH" ? e[0] : o.field
25
+ }
26
+ ),
27
+ alt: i("Order by"),
28
+ isPaddingContent: !0,
29
+ disabled: e[0] === "NL_SEARCH",
30
+ children: (c) => /* @__PURE__ */ r(S, { children: e.map((n) => /* @__PURE__ */ r(
31
+ h,
32
+ {
33
+ selected: o.field === n,
34
+ onClick: () => {
35
+ a({ field: n, direction: o.direction }), c();
36
+ },
37
+ isFieldSelect: !0,
38
+ children: /* @__PURE__ */ r(A, { children: s[n] })
39
+ },
40
+ s[n]
41
+ )) })
42
+ }
43
+ ) });
44
+ }
45
+ function D({ stringOfFieldMap: e, orderingField: d }) {
46
+ return /* @__PURE__ */ m("span", { children: [
47
+ "Order by",
48
+ " ",
49
+ /* @__PURE__ */ r(E, { $isDisabled: d === "NL_SEARCH", children: e[d] })
50
+ ] });
51
+ }
52
+ const S = t.ul`
53
+ margin: 0;
54
+ padding: 0;
55
+ list-style: none;
56
+ `, h = t(u)`
57
+ font-size: ${l.fontSize75};
58
+ `, A = t.span`
59
+ flex-grow: 1;
60
+ min-width: 96px;
61
+ padding: ${l.spacing3} 0;
62
+ font-size: ${l.fontSize75};
63
+ `, b = t.div`
64
+ margin-left: auto;
65
+ border-radius: 5px 0 0 5px;
66
+ border: 1px solid #d9dee1;
67
+ `, E = t.strong`
68
+ font-weight: 600;
69
+ color: ${(e) => e.$isDisabled ? "rgba(0, 34, 51, 0.5)" : "#212c40"};
70
+ `;
71
+ export {
72
+ R as FieldSelect
73
+ };
74
+ //# sourceMappingURL=FieldSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSelect.js","sources":["../../src/order/FieldSelect.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { Dropdown } from '../common/components/dropdown/Dropdown';\nimport { __ } from '../localization';\nimport { Field, useOrderingByPage } from '@src/store/useOrderingStore';\nimport { useRouterSelectors } from '@src/store/useRouterStore';\nimport { DropdownListItem } from '../common/components/dropdown/DropdownListItem';\n\ninterface FieldProps {\n\toptions: Field[];\n}\n\nexport function FieldSelect({ options }: FieldProps) {\n\tconst page = useRouterSelectors.use.page();\n\tconst [ordering, setOrdering] = useOrderingByPage(page.page);\n\n\tconst stringOfFieldMap = {\n\t\tCREATED_AT: __('Date added'),\n\t\tNAME: __('Name'),\n\t\tPUBLISHED_AT: __('Date published'),\n\t\tUPDATED_AT: __('Date modified'),\n\t\tNL_SEARCH: __('Similarity'),\n\t};\n\n\treturn (\n\t\t<Container>\n\t\t\t<Dropdown\n\t\t\t\ttitle={\n\t\t\t\t\t<Title\n\t\t\t\t\t\tstringOfFieldMap={stringOfFieldMap}\n\t\t\t\t\t\torderingField={options[0] === 'NL_SEARCH' ? options[0] : ordering.field}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\talt={__('Order by')}\n\t\t\t\tisPaddingContent\n\t\t\t\tdisabled={options[0] === 'NL_SEARCH'}\n\t\t\t>\n\t\t\t\t{(toggle) => (\n\t\t\t\t\t<UnorderedList>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<DropdownListItems\n\t\t\t\t\t\t\t\tselected={ordering.field === option}\n\t\t\t\t\t\t\t\tkey={stringOfFieldMap[option]}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tsetOrdering({ field: option, direction: ordering.direction });\n\t\t\t\t\t\t\t\t\ttoggle();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tisFieldSelect\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownTitle>{stringOfFieldMap[option]}</DropdownTitle>\n\t\t\t\t\t\t\t</DropdownListItems>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</UnorderedList>\n\t\t\t\t)}\n\t\t\t</Dropdown>\n\t\t</Container>\n\t);\n}\n\ninterface TitleProps {\n\tstringOfFieldMap: Readonly<{ [key: string]: string }>;\n\torderingField: string;\n}\n\n// eslint-disable-next-line react/no-multi-comp\nfunction Title({ stringOfFieldMap, orderingField }: TitleProps) {\n\treturn (\n\t\t<span>\n\t\t\tOrder by{' '}\n\t\t\t<Strong $isDisabled={orderingField === 'NL_SEARCH'}>\n\t\t\t\t{stringOfFieldMap[orderingField]}\n\t\t\t</Strong>\n\t\t</span>\n\t);\n}\n\nconst UnorderedList = styled.ul`\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n`;\n\nconst DropdownListItems = styled(DropdownListItem)`\n\tfont-size: ${token.fontSize75};\n`;\n\nconst DropdownTitle = styled.span`\n\tflex-grow: 1;\n\tmin-width: 96px;\n\tpadding: ${token.spacing3} 0;\n\tfont-size: ${token.fontSize75};\n`;\n\nconst Container = styled.div`\n\tmargin-left: auto;\n\tborder-radius: 5px 0 0 5px;\n\tborder: 1px solid #d9dee1;\n`;\n\nconst Strong = styled.strong<{ $isDisabled?: boolean }>`\n\tfont-weight: 600;\n\tcolor: ${(p) => (p.$isDisabled ? 'rgba(0, 34, 51, 0.5)' : '#212c40')};\n`;\n"],"names":["FieldSelect","options","page","useRouterSelectors","ordering","setOrdering","useOrderingByPage","stringOfFieldMap","__","Container","jsx","Dropdown","Title","toggle","UnorderedList","option","DropdownListItems","DropdownTitle","orderingField","Strong","styled","DropdownListItem","token","p"],"mappings":";;;;;;;;AAaO,SAASA,EAAY,EAAE,SAAAC,KAAuB;AACpD,QAAMC,IAAOC,EAAmB,IAAI,KAAA,GAC9B,CAACC,GAAUC,CAAW,IAAIC,EAAkBJ,EAAK,IAAI,GAErDK,IAAmB;AAAA,IACxB,YAAYC,EAAG,YAAY;AAAA,IAC3B,MAAMA,EAAG,MAAM;AAAA,IACf,cAAcA,EAAG,gBAAgB;AAAA,IACjC,YAAYA,EAAG,eAAe;AAAA,IAC9B,WAAWA,EAAG,YAAY;AAAA,EAAA;AAG3B,2BACEC,GAAA,EACA,UAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,OACC,gBAAAD;AAAA,QAACE;AAAA,QAAA;AAAA,UACA,kBAAAL;AAAA,UACA,eAAeN,EAAQ,CAAC,MAAM,cAAcA,EAAQ,CAAC,IAAIG,EAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAGpE,KAAKI,EAAG,UAAU;AAAA,MAClB,kBAAgB;AAAA,MAChB,UAAUP,EAAQ,CAAC,MAAM;AAAA,MAExB,WAACY,MACD,gBAAAH,EAACI,KACC,UAAAb,EAAQ,IAAI,CAACc,MACb,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,UAAUZ,EAAS,UAAUW;AAAA,UAE7B,SAAS,MAAM;AACd,YAAAV,EAAY,EAAE,OAAOU,GAAQ,WAAWX,EAAS,WAAW,GAC5DS,EAAA;AAAA,UACD;AAAA,UACA,eAAa;AAAA,UAEb,UAAA,gBAAAH,EAACO,GAAA,EAAe,UAAAV,EAAiBQ,CAAM,EAAA,CAAE;AAAA,QAAA;AAAA,QAPpCR,EAAiBQ,CAAM;AAAA,MAAA,CAS7B,EAAA,CACF;AAAA,IAAA;AAAA,EAAA,GAGH;AAEF;AAQA,SAASH,EAAM,EAAE,kBAAAL,GAAkB,eAAAW,KAA6B;AAC/D,2BACE,QAAA,EAAK,UAAA;AAAA,IAAA;AAAA,IACI;AAAA,sBACRC,GAAA,EAAO,aAAaD,MAAkB,aACrC,UAAAX,EAAiBW,CAAa,EAAA,CAChC;AAAA,EAAA,GACD;AAEF;AAEA,MAAMJ,IAAgBM,EAAO;AAAA;AAAA;AAAA;AAAA,GAMvBJ,IAAoBI,EAAOC,CAAgB;AAAA,cACnCC,EAAM,UAAU;AAAA,GAGxBL,IAAgBG,EAAO;AAAA;AAAA;AAAA,YAGjBE,EAAM,QAAQ;AAAA,cACZA,EAAM,UAAU;AAAA,GAGxBb,IAAYW,EAAO;AAAA;AAAA;AAAA;AAAA,GAMnBD,IAASC,EAAO;AAAA;AAAA,UAEZ,CAACG,MAAOA,EAAE,cAAc,yBAAyB,SAAU;AAAA;"}
@@ -0,0 +1,266 @@
1
+ import { jsxs as u, jsx as r, Fragment as B } from "react/jsx-runtime";
2
+ import { useState as $, useRef as U, useEffect as A } from "react";
3
+ import d from "styled-components";
4
+ import { IconAspectRatioOutline as E, IconImage as R, IconCrop as j } from "@bynder/icons";
5
+ import { token as o, Badge as P } from "@bynder/design-system";
6
+ import "./AssetCard.js";
7
+ import "./AssetList.js";
8
+ import "./Chip.js";
9
+ import { Dropdown as V } from "./Dropdown.js";
10
+ import { DropdownListItem as L } from "./DropdownListItem.js";
11
+ import "./MetapropertyFilterContent.js";
12
+ import "./MetapropertyOption.js";
13
+ import "./SmartFilterContent.js";
14
+ import "./HorizontalScroll.js";
15
+ import "./InfiniteScroll.js";
16
+ import "./Modal.js";
17
+ import "./NoResults.js";
18
+ import "./Oops.js";
19
+ import "./ShadowRoot.js";
20
+ import { Skeleton as N } from "./Skeleton.js";
21
+ import "./Spinner.js";
22
+ import { useConfig as Y } from "./ConfigContext.js";
23
+ import { DropdownContent as H } from "./DropdownContent.js";
24
+ import { logger as M } from "./logger.js";
25
+ import { useAuth as q } from "./LoginContext.js";
26
+ import { isErr as G, isOk as J, ok as Q, err as W } from "./result.type.js";
27
+ import { getAsset as X } from "./getAsset.js";
28
+ import { getDefaultKey as Z, getUrlExtension as tt, splitByCamelCase as v, getHumanReadableFileSize as et } from "./utils2.js";
29
+ import { normalizeFilesResponse as it } from "./normalizeResponse.js";
30
+ import "./Dat.js";
31
+ import { DatDropdownItem as nt } from "./DatDropdownItem.js";
32
+ import { convertAssetIdToBase64 as rt } from "./base64Converter.js";
33
+ import { useDat as ot } from "./useDatStore.js";
34
+ import { useSimilaritySearchStore as st } from "./useSimilaritySearchStore.js";
35
+ async function at(s) {
36
+ const { asset: l, auth: e, assetFieldSelection: a, noCache: h, isSimilaritySelected: c } = s, m = await X({
37
+ assetId: c ? rt(l.id) : l.id,
38
+ auth: e,
39
+ assetFieldSelection: a,
40
+ noCache: h
41
+ });
42
+ if (J(m) && m.value.files) {
43
+ const S = it(m.value.files), y = m.value.streamingLinks;
44
+ return Q({ files: S, databaseId: m.value.databaseId || "", streamingLinks: y });
45
+ }
46
+ return W("Error retrieving asset files");
47
+ }
48
+ const b = "Custom transformation", f = "adaptiveVideo";
49
+ function Zt({ asset: s, onChange: l }) {
50
+ const [e, a] = $({ status: "Loading" }), [h, c] = $(!1), m = U(null), S = q(), { isSelected: y, NLSSearchText: O, isNLSSelected: _ } = st(), {
51
+ assetFieldSelection: T,
52
+ noCache: z,
53
+ defaultImageDerivativeName: x,
54
+ defaultVideoDerivativeName: C,
55
+ __shouldAddOriginal__: F
56
+ } = Y(), { transformation: w } = ot();
57
+ A(() => {
58
+ if (w?.url && e.status === "Data") {
59
+ const i = w.url !== e.files?.transformBaseUrl?.url;
60
+ D(i ? b : "transformBaseUrl");
61
+ }
62
+ }, [w]), A(() => {
63
+ e.status === "Data" && e.key !== f && c(!1);
64
+ }, [e]), A(() => {
65
+ s.id && (a({ status: "Loading" }), l(void 0), at({
66
+ asset: s,
67
+ auth: S,
68
+ assetFieldSelection: T,
69
+ noCache: z,
70
+ isSimilaritySelected: y || !!O && _
71
+ }).then((i) => {
72
+ if (G(i)) {
73
+ M.error(i.error), a({ status: "Failure" });
74
+ return;
75
+ }
76
+ const { files: n, streamingLinks: t } = i.value;
77
+ F && !("original" in n) && (n.original = {
78
+ url: i.value.databaseId,
79
+ isFakeOriginal: !0
80
+ }), t && Object.keys(t).length > 0 && (n[f] = {
81
+ url: "Adaptive video"
82
+ });
83
+ const p = Z(n), g = Object.keys(t || {})[0];
84
+ a({
85
+ status: "Data",
86
+ files: n,
87
+ key: p,
88
+ streamingLinks: t,
89
+ selectedAdaptiveKey: g
90
+ }), l(p === f && t ? { url: t[g] } : n[p]);
91
+ }));
92
+ }, [s.id, S, T]);
93
+ function D(i, n) {
94
+ a((t) => {
95
+ if (t.status !== "Data")
96
+ return t;
97
+ const I = { ...t, key: i };
98
+ let p;
99
+ if (i === b && w)
100
+ p = { url: w.url };
101
+ else if (i === f) {
102
+ const g = n || t.selectedAdaptiveKey;
103
+ g && t.streamingLinks && (p = { url: t.streamingLinks[g] }, I.selectedAdaptiveKey = g, c(!n));
104
+ } else
105
+ p = t.files[i];
106
+ return setTimeout(() => l(p)), I;
107
+ });
108
+ }
109
+ const K = (i) => {
110
+ if (e.status === "Data")
111
+ return s.__typename === "Image" && x && x in s.files ? x === i : s.__typename === "Video" && C && C in s.files ? C === i : e.key === i;
112
+ };
113
+ return /* @__PURE__ */ u(dt, { children: [
114
+ /* @__PURE__ */ r(
115
+ V,
116
+ {
117
+ title: /* @__PURE__ */ r(
118
+ lt,
119
+ {
120
+ assetFileType: s.__typename,
121
+ defaultImageDerivativeName: x,
122
+ defaultVideoDerivativeName: C,
123
+ state: e
124
+ }
125
+ ),
126
+ buttonKind: "secondary",
127
+ isPaddingContent: !0,
128
+ direction: "Up",
129
+ disabled: e.status === "Loading",
130
+ children: (i) => e.status === "Data" && /* @__PURE__ */ u(k, { children: [
131
+ Object.entries(e.files).map(([n, t]) => /* @__PURE__ */ u(
132
+ L,
133
+ {
134
+ selected: K(n),
135
+ onClick: () => {
136
+ D(n), n !== f && i();
137
+ },
138
+ children: [
139
+ /* @__PURE__ */ r(mt, { "data-testid": "file-extension", children: n === "transformBaseUrl" ? /* @__PURE__ */ r(pt, {}) : tt(t.url) ?? /* @__PURE__ */ r(ft, {}) }),
140
+ /* @__PURE__ */ u(ut, { children: [
141
+ /* @__PURE__ */ u(gt, { children: [
142
+ v(n),
143
+ n === f && e.selectedAdaptiveKey && /* @__PURE__ */ r(wt, { children: /* @__PURE__ */ r(P, { isSmall: !0, color: "black-alpha", children: e.selectedAdaptiveKey.toUpperCase() }) })
144
+ ] }),
145
+ /* @__PURE__ */ u(ht, { children: [
146
+ t.width && t.height && `${t.width} x ${t.height} px`,
147
+ t.width && t.height && t.fileSize && /* @__PURE__ */ r("span", { children: "•" }),
148
+ t.fileSize && et(t.fileSize)
149
+ ] })
150
+ ] })
151
+ ]
152
+ },
153
+ n
154
+ )),
155
+ /* @__PURE__ */ r(
156
+ nt,
157
+ {
158
+ transformBaseUrl: e.files?.transformBaseUrl?.url,
159
+ toggleDropdown: i,
160
+ asset: s
161
+ }
162
+ )
163
+ ] })
164
+ }
165
+ ),
166
+ e.status === "Data" && e.key === f && /* @__PURE__ */ r(St, { ref: m, children: h && /* @__PURE__ */ r(
167
+ H,
168
+ {
169
+ isPaddingContent: !0,
170
+ onClickOutside: () => c(!1),
171
+ direction: "Up",
172
+ target: m,
173
+ "data-testid": "streaming-links-dropdown",
174
+ id: "streaming-links-dropdown",
175
+ children: /* @__PURE__ */ r(k, { children: Object.keys(e.streamingLinks || {}).map((i) => /* @__PURE__ */ r(
176
+ L,
177
+ {
178
+ selected: e.selectedAdaptiveKey === i,
179
+ onClick: () => D(f, i),
180
+ children: i.toUpperCase()
181
+ },
182
+ i
183
+ )) })
184
+ }
185
+ ) })
186
+ ] });
187
+ }
188
+ function lt({
189
+ assetFileType: s,
190
+ defaultImageDerivativeName: l,
191
+ defaultVideoDerivativeName: e,
192
+ state: a
193
+ }) {
194
+ const h = (c) => {
195
+ if (a.status === "Data")
196
+ return s === "Image" && l && l in a.files ? v(l) : s === "Video" && e && e in a.files ? v(e) : v(c);
197
+ };
198
+ return a.status === "Loading" ? /* @__PURE__ */ r(N, { width: 50 }) : a.status === "Data" ? /* @__PURE__ */ u(ct, { children: [
199
+ a.key === b && /* @__PURE__ */ r(j, {}),
200
+ h(a.key)
201
+ ] }) : /* @__PURE__ */ r(B, { children: "Error" });
202
+ }
203
+ const dt = d.div`
204
+ display: flex;
205
+ gap: ${o.spacing2};
206
+ margin-right: ${o.spacing3};
207
+ text-transform: capitalize;
208
+ position: relative;
209
+ `, ct = d.div`
210
+ display: flex;
211
+ gap: ${o.spacing4};
212
+ align-items: center;
213
+ `, k = d.ul`
214
+ max-height: 400px;
215
+ overflow-y: auto;
216
+ padding: 0 0 ${o.spacing3} 0;
217
+ list-style: none;
218
+ margin: 0;
219
+ `, mt = d.div`
220
+ display: flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ color: rgba(0, 34, 51, 0.5);
224
+ font-size: ${o.fontSize50};
225
+ height: ${o.spacing8};
226
+ width: ${o.spacing8};
227
+ text-transform: uppercase;
228
+ font-weight: 600;
229
+ border-radius: 5px;
230
+ background-color: rgba(0, 34, 51, 0.05);
231
+ margin-right: ${o.spacing4};
232
+ `, pt = d(E)`
233
+ height: ${o.spacing6};
234
+ width: ${o.spacing6};
235
+ `, ft = d(R)`
236
+ height: ${o.spacing6};
237
+ width: ${o.spacing6};
238
+ `, ut = d.div`
239
+ flex-grow: 1;
240
+ width: 160px;
241
+ `, gt = d.div`
242
+ text-transform: capitalize;
243
+ overflow: hidden;
244
+ text-overflow: ellipsis;
245
+ white-space: nowrap;
246
+ color: rgba(0, 34, 51, 0.8);
247
+ `, ht = d.div`
248
+ font-size: ${o.fontSize75};
249
+
250
+ & > span {
251
+ margin: 0 ${o.spacing3};
252
+ }
253
+ `, wt = d.span`
254
+ margin-left: ${o.spacing2};
255
+ display: inline-flex;
256
+ vertical-align: middle;
257
+ `, St = d.div`
258
+ position: absolute;
259
+ left: -280px;
260
+ top: 0;
261
+ z-index: 1000;
262
+ `;
263
+ export {
264
+ Zt as FileSelector
265
+ };
266
+ //# sourceMappingURL=FileSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSelector.js","sources":["../../src/select/FileSelector.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { IconAspectRatioOutline, IconCrop, IconImage } from '@bynder/icons';\nimport { Badge, token } from '@bynder/design-system';\n\nimport { DropdownListItem } from '../Components';\nimport { useConfig } from '../app-config/ConfigContext';\nimport { Dropdown } from '../common/components/dropdown/Dropdown';\nimport { DropdownContent } from '../common/components/dropdown/DropdownContent';\nimport { logger } from '../utils/logger';\nimport { useAuth } from '../login/LoginContext';\nimport { Skeleton } from '../common/components/Skeleton';\nimport { Asset } from '../views/asset/asset.type';\nimport { err, isErr, isOk, ok, Result } from '../auth/result.type';\nimport { File } from './file.type';\nimport { getAsset, StreamingLinks } from '../api/getAsset';\nimport {\n\tgetDefaultKey,\n\tgetHumanReadableFileSize,\n\tgetUrlExtension,\n\tsplitByCamelCase,\n} from './utils';\nimport { normalizeFilesResponse } from '@src/utils/normalizeResponse';\nimport { AuthInformationState } from '../auth/useAuthInformation';\nimport { DatDropdownItem } from '../Dat';\nimport { convertAssetIdToBase64 } from '@src/utils/base64Converter';\nimport { State } from './types';\nimport { useDat } from '@src/store/useDatStore';\nimport { useSimilaritySearchStore } from '@src/store/useSimilaritySearchStore';\n\ntype returnFilesType = {\n\tfiles: Record<string, File>;\n\tdatabaseId: string;\n\tstreamingLinks?: StreamingLinks;\n};\n\nasync function getFiles(options: {\n\tasset: Asset;\n\tauth: AuthInformationState | null;\n\tassetFieldSelection?: string;\n\tisSimilaritySelected: boolean;\n\tnoCache?: boolean;\n}): Promise<Result<returnFilesType, string>> {\n\tconst { asset, auth, assetFieldSelection, noCache, isSimilaritySelected } = options;\n\n\tconst result = await getAsset({\n\t\tassetId: isSimilaritySelected ? convertAssetIdToBase64(asset.id) : asset.id,\n\t\tauth,\n\t\tassetFieldSelection,\n\t\tnoCache,\n\t});\n\n\tif (isOk(result) && result.value.files) {\n\t\tconst files = normalizeFilesResponse(result.value.files);\n\t\tconst streamingLinks = result.value.streamingLinks;\n\n\t\treturn ok({ files, databaseId: result.value.databaseId || '', streamingLinks });\n\t}\n\n\treturn err('Error retrieving asset files');\n}\n\ninterface Props {\n\treadonly asset: Asset;\n\treadonly onChange: (file: File | undefined) => void;\n}\n\nconst TRANSFORMATION_KEY = 'Custom transformation';\nconst ADAPTIVE_VIDEO_KEY = 'adaptiveVideo';\n\nexport function FileSelector({ asset, onChange }: Props) {\n\tconst [state, setState] = useState<State>({ status: 'Loading' });\n\tconst [isStreamingDropdownOpen, setIsStreamingDropdownOpen] = useState(false);\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\tconst auth = useAuth();\n\tconst { isSelected, NLSSearchText, isNLSSelected } = useSimilaritySearchStore();\n\tconst {\n\t\tassetFieldSelection,\n\t\tnoCache,\n\t\tdefaultImageDerivativeName,\n\t\tdefaultVideoDerivativeName,\n\t\t__shouldAddOriginal__,\n\t} = useConfig();\n\tconst { transformation } = useDat();\n\n\tuseEffect(() => {\n\t\tif (transformation?.url && state.status === 'Data') {\n\t\t\tconst isTransformed = transformation.url !== state.files?.transformBaseUrl?.url;\n\t\t\tselectFile(isTransformed ? TRANSFORMATION_KEY : 'transformBaseUrl');\n\t\t}\n\t}, [transformation]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\t// Close dropdown when not on ADAPTIVE_VIDEO_KEY\n\tuseEffect(() => {\n\t\tif (state.status === 'Data' && state.key !== ADAPTIVE_VIDEO_KEY) {\n\t\t\tsetIsStreamingDropdownOpen(false);\n\t\t}\n\t}, [state]);\n\n\tuseEffect(() => {\n\t\tif (!asset.id) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetState({ status: 'Loading' });\n\t\tonChange(undefined);\n\n\t\tgetFiles({\n\t\t\tasset,\n\t\t\tauth,\n\t\t\tassetFieldSelection,\n\t\t\tnoCache,\n\t\t\tisSimilaritySelected: isSelected || (Boolean(NLSSearchText) && isNLSSelected),\n\t\t}).then((result) => {\n\t\t\tif (isErr(result)) {\n\t\t\t\tlogger.error(result.error);\n\t\t\t\tsetState({ status: 'Failure' });\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { files, streamingLinks } = result.value;\n\n\t\t\tif (__shouldAddOriginal__ && !('original' in files)) {\n\t\t\t\tfiles.original = {\n\t\t\t\t\turl: result.value.databaseId,\n\t\t\t\t\tisFakeOriginal: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasStreamingLinks = streamingLinks && Object.keys(streamingLinks).length > 0;\n\n\t\t\tif (hasStreamingLinks) {\n\t\t\t\tfiles[ADAPTIVE_VIDEO_KEY] = {\n\t\t\t\t\turl: 'Adaptive video',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst defaultKey = getDefaultKey(files) as string;\n\n\t\t\tconst selectedAdaptiveKey = Object.keys(streamingLinks || {})[0];\n\n\t\t\tsetState({\n\t\t\t\tstatus: 'Data',\n\t\t\t\tfiles,\n\t\t\t\tkey: defaultKey,\n\t\t\t\tstreamingLinks,\n\t\t\t\tselectedAdaptiveKey,\n\t\t\t});\n\n\t\t\tif (defaultKey === ADAPTIVE_VIDEO_KEY && streamingLinks) {\n\t\t\t\tonChange({ url: streamingLinks[selectedAdaptiveKey] });\n\t\t\t} else {\n\t\t\t\tonChange(files[defaultKey]);\n\t\t\t}\n\t\t});\n\t}, [asset.id, auth, assetFieldSelection]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tfunction selectFile(key: string, adaptiveKey?: string) {\n\t\tsetState((prevState) => {\n\t\t\tif (prevState.status !== 'Data') {\n\t\t\t\treturn prevState;\n\t\t\t}\n\n\t\t\tconst newState: State = { ...prevState, key };\n\t\t\tlet fileToSelect: File | undefined;\n\n\t\t\tif (key === TRANSFORMATION_KEY && transformation) {\n\t\t\t\tfileToSelect = { url: transformation.url };\n\t\t\t} else if (key === ADAPTIVE_VIDEO_KEY) {\n\t\t\t\tconst newAdaptiveKey = adaptiveKey || prevState.selectedAdaptiveKey;\n\n\t\t\t\tif (newAdaptiveKey && prevState.streamingLinks) {\n\t\t\t\t\tfileToSelect = { url: prevState.streamingLinks[newAdaptiveKey] };\n\t\t\t\t\tnewState.selectedAdaptiveKey = newAdaptiveKey;\n\n\t\t\t\t\t// Close the dropdown if an adaptive key was selected\n\t\t\t\t\tif (adaptiveKey) {\n\t\t\t\t\t\tsetIsStreamingDropdownOpen(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Open the dropdown if ADAPTIVE_VIDEO_KEY was selected in the main dropdown\n\t\t\t\t\t\tsetIsStreamingDropdownOpen(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfileToSelect = prevState.files[key];\n\t\t\t}\n\n\t\t\tsetTimeout(() => onChange(fileToSelect));\n\n\t\t\treturn newState;\n\t\t});\n\t}\n\n\tconst handleDropdownSelectedFileType = (key: string) => {\n\t\tif (state.status === 'Data') {\n\t\t\tif (\n\t\t\t\tasset.__typename === 'Image' &&\n\t\t\t\tdefaultImageDerivativeName &&\n\t\t\t\tdefaultImageDerivativeName in asset.files\n\t\t\t) {\n\t\t\t\treturn defaultImageDerivativeName === key;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tasset.__typename === 'Video' &&\n\t\t\t\tdefaultVideoDerivativeName &&\n\t\t\t\tdefaultVideoDerivativeName in asset.files\n\t\t\t) {\n\t\t\t\treturn defaultVideoDerivativeName === key;\n\t\t\t}\n\n\t\t\treturn state.key === key;\n\t\t}\n\t};\n\n\treturn (\n\t\t<Container>\n\t\t\t<Dropdown\n\t\t\t\ttitle={\n\t\t\t\t\t<Title\n\t\t\t\t\t\tassetFileType={asset.__typename}\n\t\t\t\t\t\tdefaultImageDerivativeName={defaultImageDerivativeName}\n\t\t\t\t\t\tdefaultVideoDerivativeName={defaultVideoDerivativeName}\n\t\t\t\t\t\tstate={state}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tbuttonKind=\"secondary\"\n\t\t\t\tisPaddingContent\n\t\t\t\tdirection=\"Up\"\n\t\t\t\tdisabled={state.status === 'Loading'}\n\t\t\t>\n\t\t\t\t{(toggle) =>\n\t\t\t\t\tstate.status === 'Data' && (\n\t\t\t\t\t\t<ListContainer>\n\t\t\t\t\t\t\t{Object.entries(state.files).map(([key, file]) => (\n\t\t\t\t\t\t\t\t<DropdownListItem\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\tselected={handleDropdownSelectedFileType(key)}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tselectFile(key);\n\n\t\t\t\t\t\t\t\t\t\tif (key !== ADAPTIVE_VIDEO_KEY) {\n\t\t\t\t\t\t\t\t\t\t\ttoggle();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<TransformImageContainer data-testid=\"file-extension\">\n\t\t\t\t\t\t\t\t\t\t{key === 'transformBaseUrl' ? (\n\t\t\t\t\t\t\t\t\t\t\t<AspectRatioIcon />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tgetUrlExtension(file.url) ?? <ImageIcon />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</TransformImageContainer>\n\t\t\t\t\t\t\t\t\t<TransformContentContainer>\n\t\t\t\t\t\t\t\t\t\t<TransformContentTitle>\n\t\t\t\t\t\t\t\t\t\t\t{splitByCamelCase(key)}\n\t\t\t\t\t\t\t\t\t\t\t{key === ADAPTIVE_VIDEO_KEY &&\n\t\t\t\t\t\t\t\t\t\t\t\tstate.selectedAdaptiveKey && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<BadgeContainer>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge isSmall color=\"black-alpha\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{state.selectedAdaptiveKey.toUpperCase()}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</BadgeContainer>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TransformContentTitle>\n\t\t\t\t\t\t\t\t\t\t<TransformContentSubtitle>\n\t\t\t\t\t\t\t\t\t\t\t{file.width &&\n\t\t\t\t\t\t\t\t\t\t\t\tfile.height &&\n\t\t\t\t\t\t\t\t\t\t\t\t`${file.width} x ${file.height} px`}\n\n\t\t\t\t\t\t\t\t\t\t\t{file.width && file.height && file.fileSize && (\n\t\t\t\t\t\t\t\t\t\t\t\t<span>•</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t\t{file.fileSize &&\n\t\t\t\t\t\t\t\t\t\t\t\tgetHumanReadableFileSize(file.fileSize)}\n\t\t\t\t\t\t\t\t\t\t</TransformContentSubtitle>\n\t\t\t\t\t\t\t\t\t</TransformContentContainer>\n\t\t\t\t\t\t\t\t</DropdownListItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t<DatDropdownItem\n\t\t\t\t\t\t\t\ttransformBaseUrl={state.files?.transformBaseUrl?.url}\n\t\t\t\t\t\t\t\ttoggleDropdown={toggle}\n\t\t\t\t\t\t\t\tasset={asset}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ListContainer>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t</Dropdown>\n\t\t\t{state.status === 'Data' && state.key === ADAPTIVE_VIDEO_KEY && (\n\t\t\t\t<PositionedAdaptiveDropdown ref={dropdownRef}>\n\t\t\t\t\t{isStreamingDropdownOpen && (\n\t\t\t\t\t\t<DropdownContent\n\t\t\t\t\t\t\tisPaddingContent\n\t\t\t\t\t\t\tonClickOutside={() => setIsStreamingDropdownOpen(false)}\n\t\t\t\t\t\t\tdirection=\"Up\"\n\t\t\t\t\t\t\ttarget={dropdownRef}\n\t\t\t\t\t\t\tdata-testid=\"streaming-links-dropdown\"\n\t\t\t\t\t\t\tid=\"streaming-links-dropdown\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ListContainer>\n\t\t\t\t\t\t\t\t{Object.keys(state.streamingLinks || {}).map((key) => (\n\t\t\t\t\t\t\t\t\t<DropdownListItem\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tselected={state.selectedAdaptiveKey === key}\n\t\t\t\t\t\t\t\t\t\tonClick={() => selectFile(ADAPTIVE_VIDEO_KEY, key)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{key.toUpperCase()}\n\t\t\t\t\t\t\t\t\t</DropdownListItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ListContainer>\n\t\t\t\t\t\t</DropdownContent>\n\t\t\t\t\t)}\n\t\t\t\t</PositionedAdaptiveDropdown>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n\n// eslint-disable-next-line react/no-multi-comp\nfunction Title({\n\tassetFileType,\n\tdefaultImageDerivativeName,\n\tdefaultVideoDerivativeName,\n\tstate,\n}: {\n\tassetFileType: string;\n\treadonly state: State;\n\tdefaultImageDerivativeName?: string;\n\tdefaultVideoDerivativeName?: string;\n}) {\n\tconst handleContentTitleReturn = (key: string) => {\n\t\tif (state.status === 'Data') {\n\t\t\tif (\n\t\t\t\tassetFileType === 'Image' &&\n\t\t\t\tdefaultImageDerivativeName &&\n\t\t\t\tdefaultImageDerivativeName in state.files\n\t\t\t) {\n\t\t\t\treturn splitByCamelCase(defaultImageDerivativeName);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tassetFileType === 'Video' &&\n\t\t\t\tdefaultVideoDerivativeName &&\n\t\t\t\tdefaultVideoDerivativeName in state.files\n\t\t\t) {\n\t\t\t\treturn splitByCamelCase(defaultVideoDerivativeName);\n\t\t\t}\n\n\t\t\treturn splitByCamelCase(key);\n\t\t}\n\t};\n\n\tif (state.status === 'Loading') {\n\t\treturn <Skeleton width={50} />;\n\t} else if (state.status === 'Data') {\n\t\treturn (\n\t\t\t<TitleContainer>\n\t\t\t\t{state.key === TRANSFORMATION_KEY && <IconCrop />}\n\t\t\t\t{handleContentTitleReturn(state.key)}\n\t\t\t</TitleContainer>\n\t\t);\n\t}\n\n\treturn <>Error</>;\n}\n\nconst Container = styled.div`\n\tdisplay: flex;\n\tgap: ${token.spacing2};\n\tmargin-right: ${token.spacing3};\n\ttext-transform: capitalize;\n\tposition: relative;\n`;\n\nconst TitleContainer = styled.div`\n\tdisplay: flex;\n\tgap: ${token.spacing4};\n\talign-items: center;\n`;\n\nconst ListContainer = styled.ul`\n\tmax-height: 400px;\n\toverflow-y: auto;\n\tpadding: 0 0 ${token.spacing3} 0;\n\tlist-style: none;\n\tmargin: 0;\n`;\n\nconst TransformImageContainer = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: rgba(0, 34, 51, 0.5);\n\tfont-size: ${token.fontSize50};\n\theight: ${token.spacing8};\n\twidth: ${token.spacing8};\n\ttext-transform: uppercase;\n\tfont-weight: 600;\n\tborder-radius: 5px;\n\tbackground-color: rgba(0, 34, 51, 0.05);\n\tmargin-right: ${token.spacing4};\n`;\n\nconst AspectRatioIcon = styled(IconAspectRatioOutline)`\n\theight: ${token.spacing6};\n\twidth: ${token.spacing6};\n`;\n\nconst ImageIcon = styled(IconImage)`\n\theight: ${token.spacing6};\n\twidth: ${token.spacing6};\n`;\n\nconst TransformContentContainer = styled.div`\n\tflex-grow: 1;\n\twidth: 160px;\n`;\n\nconst TransformContentTitle = styled.div`\n\ttext-transform: capitalize;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tcolor: rgba(0, 34, 51, 0.8);\n`;\n\nconst TransformContentSubtitle = styled.div`\n\tfont-size: ${token.fontSize75};\n\n\t& > span {\n\t\tmargin: 0 ${token.spacing3};\n\t}\n`;\n\nconst BadgeContainer = styled.span`\n\tmargin-left: ${token.spacing2};\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n`;\n\nconst PositionedAdaptiveDropdown = styled.div`\n\tposition: absolute;\n\tleft: -280px;\n\ttop: 0;\n\tz-index: 1000;\n`;\n"],"names":["getFiles","options","asset","auth","assetFieldSelection","noCache","isSimilaritySelected","result","getAsset","convertAssetIdToBase64","isOk","files","normalizeFilesResponse","streamingLinks","ok","err","TRANSFORMATION_KEY","ADAPTIVE_VIDEO_KEY","FileSelector","onChange","state","setState","useState","isStreamingDropdownOpen","setIsStreamingDropdownOpen","dropdownRef","useRef","useAuth","isSelected","NLSSearchText","isNLSSelected","useSimilaritySearchStore","defaultImageDerivativeName","defaultVideoDerivativeName","__shouldAddOriginal__","useConfig","transformation","useDat","useEffect","isTransformed","selectFile","isErr","logger","defaultKey","getDefaultKey","selectedAdaptiveKey","key","adaptiveKey","prevState","newState","fileToSelect","newAdaptiveKey","handleDropdownSelectedFileType","Container","jsx","Dropdown","Title","toggle","ListContainer","file","jsxs","DropdownListItem","TransformImageContainer","AspectRatioIcon","getUrlExtension","ImageIcon","TransformContentContainer","TransformContentTitle","splitByCamelCase","BadgeContainer","Badge","TransformContentSubtitle","getHumanReadableFileSize","DatDropdownItem","PositionedAdaptiveDropdown","DropdownContent","assetFileType","handleContentTitleReturn","Skeleton","TitleContainer","IconCrop","styled","token","IconAspectRatioOutline","IconImage"],"mappings":"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"}
package/Header.js ADDED
@@ -0,0 +1,42 @@
1
+ import { jsxs as a, Fragment as r, jsx as t } from "react/jsx-runtime";
2
+ import { __ as e } from "./index2.js";
3
+ function n() {
4
+ return /* @__PURE__ */ a(r, { children: [
5
+ /* @__PURE__ */ t(
6
+ "svg",
7
+ {
8
+ viewBox: "0 0 479.438 361.46",
9
+ className: "w-10 mb-8",
10
+ style: { width: 40, marginBottom: 32 },
11
+ children: /* @__PURE__ */ t(
12
+ "path",
13
+ {
14
+ d: `
15
+ M365.18 0a114 114 0 00-85.9 38.93l-153.18 153-43.82-43.84a45.18 45.18
16
+ 0 01-11.54-30.75 46.06 46.06 0 0146.34-46.08 44.81 44.81 0 0130.42
17
+ 11.49c2.73 2.42 10.48 10.43 10.48 10.43l48.5-48.51-14-14C172.19 11.43
18
+ 144.48.03 114.3.03 51.24.03 0 51.03 0 114.1a115.08 115.08 0 0028.09
19
+ 75.46l98.35 98.77 205.53-205.5a44.78 44.78 0 0130.58-11.57 46.07 46.07 0
20
+ 0146.06 46.43 45.07 45.07 0 01-11.52 30.5l-136.6 136.57a28.73 28.73 0
21
+ 01-20.83 8.58 28.29 28.29 0 01-20.51-8.92l-10.27-10.16-48.28 48.28 9.88
22
+ 9.72a97.06 97.06 0 0069.38 29.2h.07a96 96 0
23
+ 0069-29.13l142.35-142.67A114.47 114.47 0 00365.18 0z`,
24
+ fill: "#0af"
25
+ }
26
+ )
27
+ }
28
+ ),
29
+ /* @__PURE__ */ t(
30
+ "h1",
31
+ {
32
+ className: "text-xl mb-2",
33
+ style: { fontSize: 20, margin: 0, marginBottom: 8, fontWeight: 400 },
34
+ children: e("Connect your brand portal")
35
+ }
36
+ )
37
+ ] });
38
+ }
39
+ export {
40
+ n as Header
41
+ };
42
+ //# sourceMappingURL=Header.js.map
package/Header.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sources":["../../src/login/components/Header.tsx"],"sourcesContent":["import React from 'react';\nimport { __ } from '../../localization';\n\nexport function Header() {\n\treturn (\n\t\t<>\n\t\t\t<svg\n\t\t\t\tviewBox=\"0 0 479.438 361.46\"\n\t\t\t\tclassName=\"w-10 mb-8\"\n\t\t\t\tstyle={{ width: 40, marginBottom: 32 }}\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\td={`\n\t\t\t\t\t\tM365.18 0a114 114 0 00-85.9 38.93l-153.18 153-43.82-43.84a45.18 45.18\n\t\t\t\t\t\t0 01-11.54-30.75 46.06 46.06 0 0146.34-46.08 44.81 44.81 0 0130.42\n\t\t\t\t\t\t11.49c2.73 2.42 10.48 10.43 10.48 10.43l48.5-48.51-14-14C172.19 11.43\n\t\t\t\t\t\t144.48.03 114.3.03 51.24.03 0 51.03 0 114.1a115.08 115.08 0 0028.09\n\t\t\t\t\t\t75.46l98.35 98.77 205.53-205.5a44.78 44.78 0 0130.58-11.57 46.07 46.07 0\n\t\t\t\t\t\t0146.06 46.43 45.07 45.07 0 01-11.52 30.5l-136.6 136.57a28.73 28.73 0\n\t\t\t\t\t\t01-20.83 8.58 28.29 28.29 0 01-20.51-8.92l-10.27-10.16-48.28 48.28 9.88\n\t\t\t\t\t\t9.72a97.06 97.06 0 0069.38 29.2h.07a96 96 0\n\t\t\t\t\t\t0069-29.13l142.35-142.67A114.47 114.47 0 00365.18 0z`}\n\t\t\t\t\tfill=\"#0af\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t<h1\n\t\t\t\tclassName=\"text-xl mb-2\"\n\t\t\t\tstyle={{ fontSize: 20, margin: 0, marginBottom: 8, fontWeight: 400 }}\n\t\t\t>\n\t\t\t\t{__('Connect your brand portal')}\n\t\t\t</h1>\n\t\t</>\n\t);\n}\n"],"names":["Header","jsxs","Fragment","jsx"],"mappings":";;AAGO,SAASA,IAAS;AACxB,SACC,gBAAAC,EAAAC,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,IAAI,cAAc,GAAA;AAAA,QAElC,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAUH,MAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,IAGD,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAU;AAAA,QACV,OAAO,EAAE,UAAU,IAAI,QAAQ,GAAG,cAAc,GAAG,YAAY,IAAA;AAAA,QAE9D,YAAG,2BAA2B;AAAA,MAAA;AAAA,IAAA;AAAA,EAChC,GACD;AAEF;"}
@@ -0,0 +1,51 @@
1
+ import { jsxs as x, jsx as n } from "react/jsx-runtime";
2
+ import { useState as g, useRef as b, useEffect as f } from "react";
3
+ import { styled as d } from "styled-components";
4
+ import { token as h } from "@bynder/design-system";
5
+ import { useDimensions as p } from "./useDimensions.js";
6
+ import { RightArrow as A } from "./RightArrow.js";
7
+ import { LeftArrow as $ } from "./LeftArrow.js";
8
+ function W(r) {
9
+ const [e, c] = g(0), t = b(null), { dimensions: s, remeasure: m } = p(t.current), o = t.current !== null ? t.current.scrollWidth - t.current.clientWidth : 0, l = s !== void 0 ? Math.ceil(s.width) < s.scrollWidth : !1;
10
+ f(() => {
11
+ m(t.current);
12
+ }, [r.children, t.current]), f(() => {
13
+ l || c(0);
14
+ }, [l]);
15
+ const u = e === 0, S = o > 5 && e !== o;
16
+ function w() {
17
+ c((a) => {
18
+ const i = Math.max(a - 250, 0);
19
+ return i >= 100 ? i : 0;
20
+ });
21
+ }
22
+ function v() {
23
+ c((a) => {
24
+ const i = Math.min(a + 250, o);
25
+ return i <= o - 100 ? i : o;
26
+ });
27
+ }
28
+ return /* @__PURE__ */ x(z, { $isActiveFilter: r.isActiveFilter, children: [
29
+ /* @__PURE__ */ n(C, { ref: t, children: /* @__PURE__ */ n(D, { "data-testid": "horizontal-scrollable-el", $scroll: e, children: r.children }) }),
30
+ l && /* @__PURE__ */ n($, { isDisabled: u, onClick: w }),
31
+ l && /* @__PURE__ */ n(A, { isDisabled: !S, onClick: v }),
32
+ r.static
33
+ ] });
34
+ }
35
+ const z = d.div`
36
+ display: inline-flex;
37
+ flex-grow: 1;
38
+ overflow: hidden;
39
+ height: ${h.spacing7};
40
+ margin-left: ${(r) => r.$isActiveFilter ? h.spacing3 : 0};
41
+ `, C = d.div`
42
+ overflow: hidden;
43
+ `, D = d.div`
44
+ display: inline-flex;
45
+ transform: translateX(-${(r) => r.$scroll}px);
46
+ transition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);
47
+ `;
48
+ export {
49
+ W as HorizontalScroll
50
+ };
51
+ //# sourceMappingURL=HorizontalScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HorizontalScroll.js","sources":["../../src/common/components/HorizontalScroll.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { useDimensions } from '../hooks/useDimensions';\nimport { RightArrow } from './RightArrow';\nimport { LeftArrow } from './LeftArrow';\n\ninterface Props {\n\tstatic?: React.ReactNode;\n\tchildren: React.ReactNode;\n\tisActiveFilter?: boolean;\n}\n\nexport function HorizontalScroll(props: Props) {\n\tconst [scroll, setScroll] = useState(0);\n\tconst nodeRef = useRef<HTMLDivElement>(null);\n\n\tconst { dimensions, remeasure } = useDimensions(nodeRef.current);\n\n\tconst maxScroll =\n\t\tnodeRef.current !== null ? nodeRef.current.scrollWidth - nodeRef.current.clientWidth : 0;\n\n\tconst showScrollButtons =\n\t\tdimensions !== undefined ? Math.ceil(dimensions.width) < dimensions.scrollWidth : false;\n\n\tuseEffect(() => {\n\t\tremeasure(nodeRef.current);\n\t}, [props.children, nodeRef.current]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tuseEffect(() => {\n\t\tif (!showScrollButtons) {\n\t\t\tsetScroll(0);\n\t\t}\n\t}, [showScrollButtons]);\n\n\tconst isLeftArrowDisabled = scroll === 0;\n\tconst isRightArrowDisabled = maxScroll > 5 && scroll !== maxScroll;\n\n\tfunction handleLeftScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst newScroll = Math.max(prevScroll - 250, 0);\n\n\t\t\treturn newScroll >= 100 ? newScroll : 0;\n\t\t});\n\t}\n\n\tfunction handleRightScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst newScroll = Math.min(prevScroll + 250, maxScroll);\n\n\t\t\treturn newScroll <= maxScroll - 100 ? newScroll : maxScroll;\n\t\t});\n\t}\n\n\treturn (\n\t\t<HorizontalScrollContainer $isActiveFilter={props.isActiveFilter}>\n\t\t\t<HorizontalScrollContentParent ref={nodeRef}>\n\t\t\t\t<HorizontalScrollContent data-testid=\"horizontal-scrollable-el\" $scroll={scroll}>\n\t\t\t\t\t{props.children}\n\t\t\t\t</HorizontalScrollContent>\n\t\t\t</HorizontalScrollContentParent>\n\n\t\t\t{showScrollButtons && (\n\t\t\t\t<LeftArrow isDisabled={isLeftArrowDisabled} onClick={handleLeftScroll} />\n\t\t\t)}\n\t\t\t{showScrollButtons && (\n\t\t\t\t<RightArrow isDisabled={!isRightArrowDisabled} onClick={handleRightScroll} />\n\t\t\t)}\n\n\t\t\t{props.static}\n\t\t</HorizontalScrollContainer>\n\t);\n}\n\nconst HorizontalScrollContainer = styled.div<{ $isActiveFilter?: boolean }>`\n\tdisplay: inline-flex;\n\tflex-grow: 1;\n\toverflow: hidden;\n\theight: ${token.spacing7};\n\tmargin-left: ${(p) => (p.$isActiveFilter ? token.spacing3 : 0)};\n`;\n\nconst HorizontalScrollContentParent = styled.div`\n\toverflow: hidden;\n`;\n\nconst HorizontalScrollContent = styled.div<{ $scroll: number }>`\n\tdisplay: inline-flex;\n\ttransform: translateX(-${(p) => p.$scroll}px);\n\ttransition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);\n`;\n"],"names":["HorizontalScroll","props","scroll","setScroll","useState","nodeRef","useRef","dimensions","remeasure","useDimensions","maxScroll","showScrollButtons","useEffect","isLeftArrowDisabled","isRightArrowDisabled","handleLeftScroll","prevScroll","newScroll","handleRightScroll","jsxs","HorizontalScrollContainer","jsx","HorizontalScrollContentParent","HorizontalScrollContent","LeftArrow","RightArrow","styled","token","p"],"mappings":";;;;;;;AAcO,SAASA,EAAiBC,GAAc;AAC9C,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,CAAC,GAChCC,IAAUC,EAAuB,IAAI,GAErC,EAAE,YAAAC,GAAY,WAAAC,EAAA,IAAcC,EAAcJ,EAAQ,OAAO,GAEzDK,IACLL,EAAQ,YAAY,OAAOA,EAAQ,QAAQ,cAAcA,EAAQ,QAAQ,cAAc,GAElFM,IACLJ,MAAe,SAAY,KAAK,KAAKA,EAAW,KAAK,IAAIA,EAAW,cAAc;AAEnF,EAAAK,EAAU,MAAM;AACf,IAAAJ,EAAUH,EAAQ,OAAO;AAAA,EAC1B,GAAG,CAACJ,EAAM,UAAUI,EAAQ,OAAO,CAAC,GAEpCO,EAAU,MAAM;AACf,IAAKD,KACJR,EAAU,CAAC;AAAA,EAEb,GAAG,CAACQ,CAAiB,CAAC;AAEtB,QAAME,IAAsBX,MAAW,GACjCY,IAAuBJ,IAAY,KAAKR,MAAWQ;AAEzD,WAASK,IAAmB;AAC3B,IAAAZ,EAAU,CAACa,MAAuB;AACjC,YAAMC,IAAY,KAAK,IAAID,IAAa,KAAK,CAAC;AAE9C,aAAOC,KAAa,MAAMA,IAAY;AAAA,IACvC,CAAC;AAAA,EACF;AAEA,WAASC,IAAoB;AAC5B,IAAAf,EAAU,CAACa,MAAuB;AACjC,YAAMC,IAAY,KAAK,IAAID,IAAa,KAAKN,CAAS;AAEtD,aAAOO,KAAaP,IAAY,MAAMO,IAAYP;AAAA,IACnD,CAAC;AAAA,EACF;AAEA,SACC,gBAAAS,EAACC,GAAA,EAA0B,iBAAiBnB,EAAM,gBACjD,UAAA;AAAA,IAAA,gBAAAoB,EAACC,GAAA,EAA8B,KAAKjB,GACnC,UAAA,gBAAAgB,EAACE,GAAA,EAAwB,eAAY,4BAA2B,SAASrB,GACvE,UAAAD,EAAM,SAAA,CACR,GACD;AAAA,IAECU,KACA,gBAAAU,EAACG,GAAA,EAAU,YAAYX,GAAqB,SAASE,GAAkB;AAAA,IAEvEJ,KACA,gBAAAU,EAACI,GAAA,EAAW,YAAY,CAACX,GAAsB,SAASI,GAAmB;AAAA,IAG3EjB,EAAM;AAAA,EAAA,GACR;AAEF;AAEA,MAAMmB,IAA4BM,EAAO;AAAA;AAAA;AAAA;AAAA,WAI9BC,EAAM,QAAQ;AAAA,gBACT,CAACC,MAAOA,EAAE,kBAAkBD,EAAM,WAAW,CAAE;AAAA,GAGzDL,IAAgCI,EAAO;AAAA;AAAA,GAIvCH,IAA0BG,EAAO;AAAA;AAAA,0BAEb,CAACE,MAAMA,EAAE,OAAO;AAAA;AAAA;"}
@@ -0,0 +1,26 @@
1
+ import { jsxs as r, Fragment as o, jsx as t } from "react/jsx-runtime";
2
+ import { useEffect as l } from "react";
3
+ import { useInView as s } from "react-intersection-observer";
4
+ import { styled as a } from "styled-components";
5
+ import { Spinner as f } from "./Spinner.js";
6
+ function u(e) {
7
+ const [n, i] = s();
8
+ return l(() => {
9
+ i && !e.isLoading && e.hasNextPage && e.loadMore();
10
+ }, [i]), /* @__PURE__ */ r(o, { children: [
11
+ e.children,
12
+ e.hasNextPage && /* @__PURE__ */ t(d, { ref: n, "data-testid": "loading-element", children: /* @__PURE__ */ t(f, { isHidden: !i, isRelative: !0 }) })
13
+ ] });
14
+ }
15
+ const d = a.div`
16
+ display: flex;
17
+ justify-content: center;
18
+ align-items: center;
19
+ position: relative;
20
+ height: 128px;
21
+ width: 100%;
22
+ `;
23
+ export {
24
+ u as InfiniteScroll
25
+ };
26
+ //# sourceMappingURL=InfiniteScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfiniteScroll.js","sources":["../../src/common/components/InfiniteScroll.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport { styled } from 'styled-components';\nimport { Spinner } from './Spinner';\n\ninterface Props {\n\tisLoading: boolean;\n\thasNextPage: boolean;\n\tloadMore: () => void;\n\tchildren: React.ReactNode;\n}\n\nexport function InfiniteScroll(props: Props) {\n\tconst [spinnerRef, isInView] = useInView();\n\n\tuseEffect(() => {\n\t\tif (isInView && !props.isLoading && props.hasNextPage) {\n\t\t\tprops.loadMore();\n\t\t}\n\t}, [isInView]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\treturn (\n\t\t<>\n\t\t\t{props.children}\n\n\t\t\t{props.hasNextPage && (\n\t\t\t\t<InfiniteScrollContainer ref={spinnerRef} data-testid=\"loading-element\">\n\t\t\t\t\t<Spinner isHidden={!isInView} isRelative />\n\t\t\t\t</InfiniteScrollContainer>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nconst InfiniteScrollContainer = styled.div`\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: relative;\n\theight: 128px;\n\twidth: 100%;\n`;\n"],"names":["InfiniteScroll","props","spinnerRef","isInView","useInView","useEffect","jsxs","Fragment","jsx","InfiniteScrollContainer","Spinner","styled"],"mappings":";;;;;AAaO,SAASA,EAAeC,GAAc;AAC5C,QAAM,CAACC,GAAYC,CAAQ,IAAIC,EAAA;AAE/B,SAAAC,EAAU,MAAM;AACf,IAAIF,KAAY,CAACF,EAAM,aAAaA,EAAM,eACzCA,EAAM,SAAA;AAAA,EAER,GAAG,CAACE,CAAQ,CAAC,GAGZ,gBAAAG,EAAAC,GAAA,EACE,UAAA;AAAA,IAAAN,EAAM;AAAA,IAENA,EAAM,eACN,gBAAAO,EAACC,GAAA,EAAwB,KAAKP,GAAY,eAAY,mBACrD,UAAA,gBAAAM,EAACE,KAAQ,UAAU,CAACP,GAAU,YAAU,IAAC,EAAA,CAC1C;AAAA,EAAA,GAEF;AAEF;AAEA,MAAMM,IAA0BE,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
package/LeftArrow.js ADDED
@@ -0,0 +1,31 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import t from "styled-components";
3
+ import { IconArrowLeft as i } from "@bynder/icons";
4
+ import { Button as e } from "@bynder/design-system";
5
+ function p(r) {
6
+ return /* @__PURE__ */ o(a, { children: /* @__PURE__ */ o(
7
+ e,
8
+ {
9
+ icon: /* @__PURE__ */ o(i, {}),
10
+ "aria-label": "Previous",
11
+ title: "Previous",
12
+ variant: "clean",
13
+ isSmall: !0,
14
+ onClick: r.onClick,
15
+ "data-testid": "arrow-left",
16
+ isDisabled: r.isDisabled
17
+ }
18
+ ) });
19
+ }
20
+ const a = t.div`
21
+ z-index: 20;
22
+ padding: 0;
23
+ box-shadow: 4px 0 13px 13px #fff;
24
+ &:hover {
25
+ box-shadow: 4px 0 13px 13px #fff;
26
+ }
27
+ `;
28
+ export {
29
+ p as LeftArrow
30
+ };
31
+ //# sourceMappingURL=LeftArrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeftArrow.js","sources":["../../src/common/components/LeftArrow.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { IconArrowLeft } from '@bynder/icons';\nimport { Button } from '@bynder/design-system';\n\nexport function LeftArrow(props: Readonly<{ isDisabled: boolean; onClick: () => void }>) {\n\treturn (\n\t\t<StyledButtonWrapper>\n\t\t\t<Button\n\t\t\t\ticon={<IconArrowLeft />}\n\t\t\t\taria-label=\"Previous\"\n\t\t\t\ttitle=\"Previous\"\n\t\t\t\tvariant=\"clean\"\n\t\t\t\tisSmall\n\t\t\t\tonClick={props.onClick}\n\t\t\t\tdata-testid=\"arrow-left\"\n\t\t\t\tisDisabled={props.isDisabled}\n\t\t\t/>\n\t\t</StyledButtonWrapper>\n\t);\n}\n\nconst StyledButtonWrapper = styled.div`\n\tz-index: 20;\n\tpadding: 0;\n\tbox-shadow: 4px 0 13px 13px #fff;\n\t&:hover {\n\t\tbox-shadow: 4px 0 13px 13px #fff;\n\t}\n`;\n"],"names":["LeftArrow","props","StyledButtonWrapper","jsx","Button","IconArrowLeft","styled"],"mappings":";;;;AAKO,SAASA,EAAUC,GAA+D;AACxF,2BACEC,GAAA,EACA,UAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,wBAAOC,GAAA,EAAc;AAAA,MACrB,cAAW;AAAA,MACX,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,SAAO;AAAA,MACP,SAASJ,EAAM;AAAA,MACf,eAAY;AAAA,MACZ,YAAYA,EAAM;AAAA,IAAA;AAAA,EAAA,GAEpB;AAEF;AAEA,MAAMC,IAAsBI,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}