@ndla/image-search 11.0.111-alpha.0 → 11.0.113-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/{ImageMeta.js → ImageMeta.mjs} +1 -1
- package/es/ImageMeta.mjs.map +1 -0
- package/es/{ImageSearch.js → ImageSearch.mjs} +2 -2
- package/es/ImageSearch.mjs.map +1 -0
- package/es/{ImageSearchResult.js → ImageSearchResult.mjs} +3 -3
- package/es/ImageSearchResult.mjs.map +1 -0
- package/es/{PreviewImage.js → PreviewImage.mjs} +3 -3
- package/es/PreviewImage.mjs.map +1 -0
- package/es/index.mjs +4 -0
- package/es/util/{imageUtil.js → imageUtil.mjs} +1 -1
- package/es/util/imageUtil.mjs.map +1 -0
- package/package.json +14 -11
- package/es/ImageMeta.js.map +0 -1
- package/es/ImageSearch.js.map +0 -1
- package/es/ImageSearchResult.js.map +0 -1
- package/es/PreviewImage.js.map +0 -1
- package/es/index.js +0 -4
- package/es/util/imageUtil.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageMeta.mjs","names":[],"sources":["../src/ImageMeta.tsx"],"sourcesContent":["/**\n * Copyright (c) 2022-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useMemo } from \"react\";\nimport { Text } from \"@ndla/primitives\";\nimport type { IImageDimensionsDTO } from \"@ndla/types-backend/image-api\";\nimport { humanFileSize } from \"@ndla/util\";\n\ninterface Props {\n contentType: string;\n fileSize: number;\n imageDimensions?: IImageDimensionsDTO;\n locale: string;\n}\n\nconst ImageMeta = ({ contentType, fileSize, imageDimensions, locale }: Props) => {\n const prettySize = useMemo(() => {\n return humanFileSize(fileSize, locale);\n }, [fileSize, locale]);\n\n const dimensions = imageDimensions ? ` - ${imageDimensions.width}x${imageDimensions.height} px` : \"\";\n return <Text>{`${contentType} - ${prettySize}${dimensions}`}</Text>;\n};\n\nexport default ImageMeta;\n"],"mappings":";;;;;;AAoBA,MAAM,YAAY,CAAC,EAAE,aAAa,UAAU,iBAAiB,QAAe,KAAK;CAC/E,MAAM,aAAa,QAAQ,MAAM;AAC/B,SAAO,cAAc,UAAU,OAAO;CACvC,GAAE,CAAC,UAAU,MAAO,EAAC;CAEtB,MAAM,aAAa,mBAAmB,KAAK,gBAAgB,MAAM,GAAG,gBAAgB,OAAO,OAAO;AAClG,wBAAO,IAAC,mBAAO,EAAE,YAAY,KAAK,WAAW,EAAE,WAAW,IAAS;AACpE;AAED,wBAAe"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ImageSearchResult } from "./ImageSearchResult.
|
|
1
|
+
import { ImageSearchResult } from "./ImageSearchResult.mjs";
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
3
|
import { Button, IconButton, Input, PaginationContext, PaginationEllipsis, PaginationItem, PaginationNextTrigger, PaginationPrevTrigger, PaginationRoot, Text } from "@ndla/primitives";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -158,4 +158,4 @@ var ImageSearch_default = ImageSearch;
|
|
|
158
158
|
|
|
159
159
|
//#endregion
|
|
160
160
|
export { ImageSearch_default };
|
|
161
|
-
//# sourceMappingURL=ImageSearch.
|
|
161
|
+
//# sourceMappingURL=ImageSearch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSearch.mjs","names":["image: IImageMetaInformationV3DTO | undefined","saveAsMetaImage?: boolean","queryObject: ISearchParamsDTO","queryObject","e: KeyboardEvent<HTMLInputElement | HTMLButtonElement>","image","page"],"sources":["../src/ImageSearch.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { type ChangeEvent, type ReactNode, type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ArrowLeftShortLine, ArrowRightShortLine, SearchLine } from \"@ndla/icons\";\nimport {\n Button,\n IconButton,\n Input,\n PaginationContext,\n PaginationEllipsis,\n PaginationItem,\n PaginationNextTrigger,\n PaginationPrevTrigger,\n PaginationRoot,\n Text,\n type PaginationRootProps,\n} from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO, ISearchResultV3DTO, ISearchParamsDTO } from \"@ndla/types-backend/image-api\";\nimport ImageSearchResult from \"./ImageSearchResult\";\n\nconst ImageSearchWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"small\",\n },\n});\n\nconst StyledSearchResults = styled(\"div\", {\n base: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n gridGap: \"xsmall\",\n gridAutoFlow: \"dense\",\n },\n});\n\nconst InputWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"xsmall\",\n },\n});\n\nconst StyledPaginationRoot = styled(PaginationRoot, {\n base: {\n flexWrap: \"wrap\",\n },\n});\n\nconst StyledButton = styled(Button, {\n base: {\n tabletWideDown: {\n paddingInline: \"xsmall\",\n \"& span\": {\n display: \"none\",\n },\n },\n },\n});\n\nconst StyledPaginationItem = styled(PaginationItem, {\n base: {\n tabletWideDown: {\n \"&:nth-child(2)\": {\n display: \"none\",\n },\n \"&:nth-last-child(2)\": {\n display: \"none\",\n },\n },\n },\n});\n\nexport interface PreviewTranslations {\n creatorsLabel: string;\n license: string;\n caption: string;\n altText: string;\n modelRelease: string;\n tags: string;\n close: string;\n checkboxLabel?: string;\n missingTitleFallback?: string;\n useImageTitle: string;\n}\n\nexport interface ImageSearchTranslations {\n searchPlaceholder: string;\n searchButtonTitle: string;\n imagePreview: PreviewTranslations;\n paginationTranslations: PaginationRootProps[\"translations\"];\n}\n\nexport interface ImageSearchProps {\n onImageSelect: (image: IImageMetaInformationV3DTO) => void;\n searchImages: (query: string | undefined, page: number | undefined) => Promise<ISearchResultV3DTO>;\n onError?: (err: any) => void;\n locale: string;\n noResults?: ReactNode;\n checkboxAction?: (image: IImageMetaInformationV3DTO) => void;\n showCheckbox?: boolean;\n translations: ImageSearchTranslations;\n}\n\nconst ImageSearch = ({\n onImageSelect,\n searchImages: search,\n onError,\n locale,\n noResults,\n checkboxAction,\n showCheckbox,\n translations,\n}: ImageSearchProps) => {\n const [queryObject, setQueryObject] = useState<ISearchParamsDTO>({\n query: undefined,\n page: 1,\n pageSize: 16,\n });\n const [selectedImage, setSelectedImage] = useState<IImageMetaInformationV3DTO | undefined>();\n const [searching, setSearching] = useState<boolean>(false);\n const [searchResult, setSearchResult] = useState<ISearchResultV3DTO | undefined>();\n\n const { page } = queryObject;\n const noResultsFound = !searching && searchResult?.results.length === 0;\n\n const onSelectImage = (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => {\n setSelectedImage(undefined);\n if (!image) return;\n onImageSelect(image);\n if (saveAsMetaImage) {\n checkboxAction?.(image);\n }\n };\n\n const searchImages = (queryObject: ISearchParamsDTO) => {\n setSearching(true);\n search(queryObject.query, queryObject.page)\n .then((result) => {\n setQueryObject({\n query: queryObject.query,\n pageSize: result.pageSize,\n page: queryObject.page,\n });\n setSearchResult(result);\n setSearching(false);\n })\n .catch((err) => {\n onError?.(err);\n setSearching(false);\n });\n };\n\n const handleQueryChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n setQueryObject((prevState) => ({\n ...prevState,\n query: value,\n }));\n };\n\n const onEnter = (e: KeyboardEvent<HTMLInputElement | HTMLButtonElement>) => {\n if (e.key === \"Enter\") {\n searchImages(queryObject);\n }\n };\n\n useEffect(() => {\n searchImages(queryObject);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <ImageSearchWrapper>\n <InputWrapper role=\"search\">\n <Input\n type=\"search\"\n placeholder={translations.searchPlaceholder}\n value={queryObject?.query ?? \"\"}\n onChange={handleQueryChange}\n onKeyDown={onEnter}\n />\n <IconButton\n variant=\"primary\"\n aria-label={translations.searchButtonTitle}\n title={translations.searchButtonTitle}\n onKeyDown={onEnter}\n onClick={() => searchImages(queryObject)}\n >\n <SearchLine />\n </IconButton>\n </InputWrapper>\n {!!noResultsFound && noResults}\n <StyledSearchResults>\n {searchResult?.results.map((image) => (\n <ImageSearchResult\n key={image.id}\n image={image}\n onImageClick={(image) => setSelectedImage(image)}\n selectedImage={selectedImage}\n onSelectImage={onSelectImage}\n showCheckbox={!!showCheckbox}\n translations={translations.imagePreview}\n locale={locale}\n />\n ))}\n </StyledSearchResults>\n <StyledPaginationRoot\n page={page ?? 1}\n onPageChange={(details) => searchImages({ ...queryObject, page: details.page })}\n translations={translations.paginationTranslations}\n count={searchResult?.totalCount ?? 0}\n pageSize={searchResult?.pageSize}\n hidden={noResultsFound}\n >\n <PaginationPrevTrigger asChild>\n <StyledButton\n variant=\"tertiary\"\n aria-label={translations.paginationTranslations?.prevTriggerLabel}\n title={translations.paginationTranslations?.prevTriggerLabel}\n >\n <ArrowLeftShortLine />\n <span>{translations.paginationTranslations?.prevTriggerLabel}</span>\n </StyledButton>\n </PaginationPrevTrigger>\n <PaginationContext>\n {(pagination) =>\n pagination.pages.map((page, index, full) => {\n // Hide last page to not trigger RESULT_WINDOW_TOO_LARGE error\n if (index === full.length - 1) return null;\n return page.type === \"page\" ? (\n <StyledPaginationItem key={index} {...page} asChild>\n <Button variant={page.value === pagination.page ? \"primary\" : \"tertiary\"}>{page.value}</Button>\n </StyledPaginationItem>\n ) : (\n <PaginationEllipsis key={index} index={index} asChild>\n <Text asChild consumeCss>\n <div>…</div>\n </Text>\n </PaginationEllipsis>\n );\n })\n }\n </PaginationContext>\n <PaginationNextTrigger asChild>\n <StyledButton\n variant=\"tertiary\"\n aria-label={translations.paginationTranslations?.nextTriggerLabel}\n title={translations.paginationTranslations?.nextTriggerLabel}\n >\n <span>{translations.paginationTranslations?.nextTriggerLabel}</span>\n <ArrowRightShortLine />\n </StyledButton>\n </PaginationNextTrigger>\n </StyledPaginationRoot>\n </ImageSearchWrapper>\n );\n};\n\nexport default ImageSearch;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getPreviewSrcSets } from "./util/imageUtil.
|
|
2
|
-
import { PreviewImage_default } from "./PreviewImage.
|
|
1
|
+
import { getPreviewSrcSets } from "./util/imageUtil.mjs";
|
|
2
|
+
import { PreviewImage_default } from "./PreviewImage.mjs";
|
|
3
3
|
import { Button, Image, Text } from "@ndla/primitives";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { styled } from "@ndla/styled-system/jsx";
|
|
@@ -47,4 +47,4 @@ function ImageSearchResult({ image, onImageClick, selectedImage, onSelectImage,
|
|
|
47
47
|
|
|
48
48
|
//#endregion
|
|
49
49
|
export { ImageSearchResult };
|
|
50
|
-
//# sourceMappingURL=ImageSearchResult.
|
|
50
|
+
//# sourceMappingURL=ImageSearchResult.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSearchResult.mjs","names":["PreviewImage"],"sources":["../src/ImageSearchResult.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { Text, Image, Button } from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO } from \"@ndla/types-backend/image-api\";\nimport type { PreviewTranslations } from \"./ImageSearch\";\nimport PreviewImage from \"./PreviewImage\";\nimport { getPreviewSrcSets } from \"./util/imageUtil\";\n\nconst StyledButton = styled(Button, {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n borderColor: \"stroke.subtle\",\n },\n});\n\nconst StyledImage = styled(Image, {\n base: {\n maxHeight: \"135px\",\n width: \"100%\",\n height: \"100%\",\n },\n});\n\nconst StyledText = styled(Text, {\n base: {\n lineClamp: \"3\",\n },\n});\n\ninterface Props {\n image: IImageMetaInformationV3DTO;\n onImageClick: (image: IImageMetaInformationV3DTO) => void;\n selectedImage?: IImageMetaInformationV3DTO;\n onSelectImage: (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => void;\n showCheckbox: boolean;\n translations: PreviewTranslations;\n locale: string;\n}\n\nexport default function ImageSearchResult({\n image,\n onImageClick,\n selectedImage,\n onSelectImage,\n showCheckbox,\n translations,\n locale,\n}: Props) {\n const isSelectedImage = selectedImage?.id === image.id;\n return (\n <>\n <StyledButton\n variant={isSelectedImage ? \"secondary\" : \"tertiary\"}\n data-testid=\"select-image-from-list\"\n onClick={() => onImageClick(image)}\n aria-expanded={isSelectedImage}\n aria-controls={`image-preview-${image.id}`}\n >\n <StyledImage\n alt=\"\"\n srcSet={getPreviewSrcSets(image.image.imageUrl)}\n src={image.image.imageUrl}\n variant=\"rounded\"\n />\n <StyledText textStyle=\"label.medium\" asChild consumeCss>\n <span>\n {image.title.title.trim() ? image.title.title : (translations.missingTitleFallback ?? `ID: ${image.id}`)}\n </span>\n </StyledText>\n </StyledButton>\n {isSelectedImage ? (\n <PreviewImage\n id={`image-preview-${image.id}`}\n image={selectedImage}\n onSelectImage={onSelectImage}\n translations={translations}\n showCheckbox={showCheckbox}\n locale={locale}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,eAAe,OAAO,QAAQ,EAClC,MAAM;CACJ,SAAS;CACT,eAAe;CACf,aAAa;AACd,EACF,EAAC;AAEF,MAAM,cAAc,OAAO,OAAO,EAChC,MAAM;CACJ,WAAW;CACX,OAAO;CACP,QAAQ;AACT,EACF,EAAC;AAEF,MAAM,aAAa,OAAO,MAAM,EAC9B,MAAM,EACJ,WAAW,IACZ,EACF,EAAC;AAYF,SAAwB,kBAAkB,EACxC,OACA,cACA,eACA,eACA,cACA,cACA,QACM,EAAE;CACR,MAAM,kBAAkB,eAAe,OAAO,MAAM;AACpD,wBACE,4CACE,KAAC;EACC,SAAS,kBAAkB,cAAc;EACzC,eAAY;EACZ,SAAS,MAAM,aAAa,MAAM;EAClC,iBAAe;EACf,kBAAgB,gBAAgB,MAAM,GAAG;6BAEzC,IAAC;GACC,KAAI;GACJ,QAAQ,kBAAkB,MAAM,MAAM,SAAS;GAC/C,KAAK,MAAM,MAAM;GACjB,SAAQ;IACR,kBACF,IAAC;GAAW,WAAU;GAAe;GAAQ;6BAC3C,IAAC,oBACE,MAAM,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,QAAS,aAAa,yBAAyB,MAAM,MAAM,GAAG,IACjG;IACI;GACA,EACd,kCACC,IAACA;EACC,KAAK,gBAAgB,MAAM,GAAG;EAC9B,OAAO;EACQ;EACD;EACA;EACN;GACR,GACA,QACH;AAEN"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ImageMeta_default } from "./ImageMeta.
|
|
2
|
-
import { getSrcSets } from "./util/imageUtil.
|
|
1
|
+
import { ImageMeta_default } from "./ImageMeta.mjs";
|
|
2
|
+
import { getSrcSets } from "./util/imageUtil.mjs";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Button, CheckboxControl, CheckboxHiddenInput, CheckboxIndicator, CheckboxLabel, CheckboxRoot, FieldRoot, IconButton, Image, Text } from "@ndla/primitives";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -122,4 +122,4 @@ var PreviewImage_default = PreviewImage;
|
|
|
122
122
|
|
|
123
123
|
//#endregion
|
|
124
124
|
export { PreviewImage_default };
|
|
125
|
-
//# sourceMappingURL=PreviewImage.
|
|
125
|
+
//# sourceMappingURL=PreviewImage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewImage.mjs","names":["ImageMeta"],"sources":["../src/PreviewImage.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useState } from \"react\";\nimport { CloseLine, HashTag, CheckLine } from \"@ndla/icons\";\nimport { getModelReleaseValue } from \"@ndla/licenses\";\nimport {\n Button,\n CheckboxControl,\n CheckboxHiddenInput,\n CheckboxIndicator,\n CheckboxLabel,\n CheckboxRoot,\n Text,\n Image,\n IconButton,\n FieldRoot,\n} from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO } from \"@ndla/types-backend/image-api\";\nimport ImageMeta from \"./ImageMeta\";\nimport type { PreviewTranslations } from \"./ImageSearch\";\nimport { getSrcSets } from \"./util/imageUtil\";\n\nconst ImageContainer = styled(\"div\", {\n base: {\n flexShrink: \"0\",\n },\n});\n\nconst StyledImage = styled(Image, {\n base: {\n maxHeight: \"surface.xsmall\",\n },\n});\n\nconst StyledImageMetadata = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"xxsmall\",\n },\n});\n\nconst HashTagWrapper = styled(\"ul\", {\n base: {\n display: \"flex\",\n gap: \"xxsmall\",\n flexWrap: \"wrap\",\n },\n});\n\nconst HashTagGroup = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"xxsmall\",\n flexWrap: \"wrap\",\n },\n});\n\nconst StyledTagItem = styled(\"li\", {\n base: {\n display: \"flex\",\n alignItems: \"center\",\n },\n});\n\nconst StyledPreview = styled(\"div\", {\n base: {\n display: \"flex\",\n gridColumn: \"1 / -1\",\n borderColor: \"stroke.default\",\n border: \"1px solid\",\n borderRadius: \"xsmall\",\n gap: \"small\",\n padding: \"small\",\n flexWrap: \"wrap\",\n overflow: \"hidden\",\n },\n});\n\nconst StyledTopRow = styled(\"div\", {\n base: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n});\n\nconst ContentWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"medium\",\n flex: \"2\",\n },\n});\n\nconst ActionsWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"small\",\n marginBlockEnd: \"medium\",\n },\n});\n\nconst StyledFieldRoot = styled(FieldRoot, {\n base: { alignSelf: \"center\" },\n});\n\ninterface Props {\n id: string;\n image: IImageMetaInformationV3DTO;\n onSelectImage: (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => void;\n showCheckbox: boolean;\n translations: PreviewTranslations;\n locale: string;\n}\n\nconst PreviewImage = ({ id, image, onSelectImage, showCheckbox, translations, locale }: Props) => {\n const [saveAsMetaImage, setSaveAsMetaImage] = useState(false);\n\n return (\n <StyledPreview id={id}>\n <ImageContainer>\n <StyledImage\n alt=\"\"\n srcSet={getSrcSets(image.image.imageUrl)}\n sizes=\"(min-width: 800px) 360px, (min-width: 400px) 300px, 100vw\"\n src={image.image.imageUrl}\n aria-label={image.title.title}\n variant=\"rounded\"\n />\n </ImageContainer>\n <ContentWrapper>\n <StyledImageMetadata>\n <StyledTopRow>\n <Text textStyle=\"title.medium\">\n {image.title.title.trim() ? image.title.title : (translations.missingTitleFallback ?? `ID: ${image.id}`)}\n </Text>\n <IconButton\n variant=\"tertiary\"\n onClick={() => onSelectImage(undefined)}\n aria-label={translations.close}\n title={translations.close}\n >\n <CloseLine />\n </IconButton>\n </StyledTopRow>\n {!!image.copyright.creators.length && (\n <Text>\n <b>{`${translations.creatorsLabel}: `}</b>\n {image.copyright.creators.map((creator) => creator.name).join(\", \")}\n </Text>\n )}\n {!!image.copyright.license.description?.trim() && (\n <Text>\n <b>{`${translations.license}: `}</b>\n {image.copyright.license.description}\n </Text>\n )}\n {!!image.caption.caption.trim() && (\n <Text>\n <b>{`${translations.caption}: `}</b>\n {image.caption.caption}\n </Text>\n )}\n {!!image.alttext.alttext.trim() && (\n <Text>\n <b>{`${translations.altText}:`}</b> {image.alttext.alttext}\n </Text>\n )}\n {!!image.modelRelease.trim() && (\n <Text>\n <b>{`${translations.modelRelease}: `}</b>\n {getModelReleaseValue(image.modelRelease, locale)}\n </Text>\n )}\n <ImageMeta\n contentType={image.image.contentType}\n fileSize={image.image.size}\n imageDimensions={image.image.dimensions}\n locale={locale}\n />\n {!!image.tags.tags.length && (\n <HashTagGroup>\n <Text id=\"tags-title\">\n <b>{`${translations.tags}: `}</b>\n </Text>\n <HashTagWrapper aria-describedby=\"tags-title\">\n {image.tags.tags.map((tag) => (\n <StyledTagItem key={tag}>\n <HashTag size=\"small\" />\n {tag}\n </StyledTagItem>\n ))}\n </HashTagWrapper>\n </HashTagGroup>\n )}\n </StyledImageMetadata>\n <ActionsWrapper>\n <Button data-testid=\"use-image\" onClick={() => onSelectImage(image, saveAsMetaImage)}>\n {translations.useImageTitle}\n </Button>\n {!!showCheckbox && (\n <StyledFieldRoot>\n <CheckboxRoot checked={saveAsMetaImage} onCheckedChange={() => setSaveAsMetaImage((prev) => !prev)}>\n <CheckboxControl>\n <CheckboxIndicator asChild>\n <CheckLine />\n </CheckboxIndicator>\n </CheckboxControl>\n <CheckboxLabel>{translations.checkboxLabel}</CheckboxLabel>\n <CheckboxHiddenInput />\n </CheckboxRoot>\n </StyledFieldRoot>\n )}\n </ActionsWrapper>\n </ContentWrapper>\n </StyledPreview>\n );\n};\n\nexport default PreviewImage;\n"],"mappings":"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"}
|
package/es/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtil.mjs","names":["imageUrl: string"],"sources":["../../src/util/imageUtil.ts"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/* - Source sets for gallery search is retina-display optimized\n - Based on: https://www.smashingmagazine.com/2014/05/responsive-images-done-right-guide-picture-srcset/ */\n\nexport const getSrcSets = (imageUrl: string) =>\n [\n `${imageUrl}?width=1440 1440w`,\n `${imageUrl}?width=1120 1120w`,\n `${imageUrl}?width=1000 1000w`,\n `${imageUrl}?width=960 960w`,\n `${imageUrl}?width=800 800w`,\n `${imageUrl}?width=640 640w`,\n `${imageUrl}?width=480 480w`,\n `${imageUrl}?width=320 320w`,\n ].join(\", \");\n\nexport const getPreviewSrcSets = (imageUrl: string) =>\n [`${imageUrl}?width=480 3x`, `${imageUrl}?width=320 2x`, `${imageUrl}?width=160 1x`].join(\", \");\n"],"mappings":";;;;;;;;AAWA,MAAa,aAAa,CAACA,aACzB;EACG,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;AACb,EAAC,KAAK,KAAK;AAEd,MAAa,oBAAoB,CAACA,aAChC;EAAE,EAAE,SAAS;EAAiB,EAAE,SAAS;EAAiB,EAAE,SAAS;AAAe,EAAC,KAAK,KAAK"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ndla/image-search",
|
|
3
|
-
"
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "11.0.113-alpha.0",
|
|
4
5
|
"description": "A simple library for searching images from NDLA",
|
|
5
6
|
"license": "GPL-3.0",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
"exports": {
|
|
8
|
+
"types": "./lib/index.d.ts",
|
|
9
|
+
"import": "./es/index.mjs",
|
|
10
|
+
"require": "./lib/index.js"
|
|
11
|
+
},
|
|
9
12
|
"scripts": {
|
|
10
13
|
"build": "tsdown",
|
|
11
14
|
"dev": "tsdown --watch ./src",
|
|
@@ -27,14 +30,14 @@
|
|
|
27
30
|
"es"
|
|
28
31
|
],
|
|
29
32
|
"dependencies": {
|
|
30
|
-
"@ndla/icons": "^8.0.
|
|
31
|
-
"@ndla/licenses": "^9.0.
|
|
32
|
-
"@ndla/primitives": "^1.0.
|
|
33
|
-
"@ndla/styled-system": "^0.0.
|
|
34
|
-
"@ndla/util": "^5.0.
|
|
33
|
+
"@ndla/icons": "^8.0.63-alpha.0",
|
|
34
|
+
"@ndla/licenses": "^9.0.7",
|
|
35
|
+
"@ndla/primitives": "^1.0.96-alpha.0",
|
|
36
|
+
"@ndla/styled-system": "^0.0.37",
|
|
37
|
+
"@ndla/util": "^5.0.11-alpha.0"
|
|
35
38
|
},
|
|
36
39
|
"devDependencies": {
|
|
37
|
-
"@ndla/preset-panda": "^0.0.
|
|
40
|
+
"@ndla/preset-panda": "^0.0.58",
|
|
38
41
|
"@ndla/types-backend": "^1.0.50",
|
|
39
42
|
"@pandacss/dev": "^0.53.6"
|
|
40
43
|
},
|
|
@@ -45,5 +48,5 @@
|
|
|
45
48
|
"publishConfig": {
|
|
46
49
|
"access": "public"
|
|
47
50
|
},
|
|
48
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "b9a3643909ea7b1b5c5d6799ae4b74914099d7bb"
|
|
49
52
|
}
|
package/es/ImageMeta.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageMeta.js","names":[],"sources":["../src/ImageMeta.tsx"],"sourcesContent":["/**\n * Copyright (c) 2022-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useMemo } from \"react\";\nimport { Text } from \"@ndla/primitives\";\nimport type { IImageDimensionsDTO } from \"@ndla/types-backend/image-api\";\nimport { humanFileSize } from \"@ndla/util\";\n\ninterface Props {\n contentType: string;\n fileSize: number;\n imageDimensions?: IImageDimensionsDTO;\n locale: string;\n}\n\nconst ImageMeta = ({ contentType, fileSize, imageDimensions, locale }: Props) => {\n const prettySize = useMemo(() => {\n return humanFileSize(fileSize, locale);\n }, [fileSize, locale]);\n\n const dimensions = imageDimensions ? ` - ${imageDimensions.width}x${imageDimensions.height} px` : \"\";\n return <Text>{`${contentType} - ${prettySize}${dimensions}`}</Text>;\n};\n\nexport default ImageMeta;\n"],"mappings":";;;;;;AAoBA,MAAM,YAAY,CAAC,EAAE,aAAa,UAAU,iBAAiB,QAAe,KAAK;CAC/E,MAAM,aAAa,QAAQ,MAAM;AAC/B,SAAO,cAAc,UAAU,OAAO;CACvC,GAAE,CAAC,UAAU,MAAO,EAAC;CAEtB,MAAM,aAAa,mBAAmB,KAAK,gBAAgB,MAAM,GAAG,gBAAgB,OAAO,OAAO;AAClG,wBAAO,IAAC,mBAAO,EAAE,YAAY,KAAK,WAAW,EAAE,WAAW,IAAS;AACpE;AAED,wBAAe"}
|
package/es/ImageSearch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageSearch.js","names":["image: IImageMetaInformationV3DTO | undefined","saveAsMetaImage?: boolean","queryObject: ISearchParamsDTO","queryObject","e: KeyboardEvent<HTMLInputElement | HTMLButtonElement>","image","page"],"sources":["../src/ImageSearch.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { type ChangeEvent, type ReactNode, type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ArrowLeftShortLine, ArrowRightShortLine, SearchLine } from \"@ndla/icons\";\nimport {\n Button,\n IconButton,\n Input,\n PaginationContext,\n PaginationEllipsis,\n PaginationItem,\n PaginationNextTrigger,\n PaginationPrevTrigger,\n PaginationRoot,\n Text,\n type PaginationRootProps,\n} from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO, ISearchResultV3DTO, ISearchParamsDTO } from \"@ndla/types-backend/image-api\";\nimport ImageSearchResult from \"./ImageSearchResult\";\n\nconst ImageSearchWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"small\",\n },\n});\n\nconst StyledSearchResults = styled(\"div\", {\n base: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n gridGap: \"xsmall\",\n gridAutoFlow: \"dense\",\n },\n});\n\nconst InputWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"xsmall\",\n },\n});\n\nconst StyledPaginationRoot = styled(PaginationRoot, {\n base: {\n flexWrap: \"wrap\",\n },\n});\n\nconst StyledButton = styled(Button, {\n base: {\n tabletWideDown: {\n paddingInline: \"xsmall\",\n \"& span\": {\n display: \"none\",\n },\n },\n },\n});\n\nconst StyledPaginationItem = styled(PaginationItem, {\n base: {\n tabletWideDown: {\n \"&:nth-child(2)\": {\n display: \"none\",\n },\n \"&:nth-last-child(2)\": {\n display: \"none\",\n },\n },\n },\n});\n\nexport interface PreviewTranslations {\n creatorsLabel: string;\n license: string;\n caption: string;\n altText: string;\n modelRelease: string;\n tags: string;\n close: string;\n checkboxLabel?: string;\n missingTitleFallback?: string;\n useImageTitle: string;\n}\n\nexport interface ImageSearchTranslations {\n searchPlaceholder: string;\n searchButtonTitle: string;\n imagePreview: PreviewTranslations;\n paginationTranslations: PaginationRootProps[\"translations\"];\n}\n\nexport interface ImageSearchProps {\n onImageSelect: (image: IImageMetaInformationV3DTO) => void;\n searchImages: (query: string | undefined, page: number | undefined) => Promise<ISearchResultV3DTO>;\n onError?: (err: any) => void;\n locale: string;\n noResults?: ReactNode;\n checkboxAction?: (image: IImageMetaInformationV3DTO) => void;\n showCheckbox?: boolean;\n translations: ImageSearchTranslations;\n}\n\nconst ImageSearch = ({\n onImageSelect,\n searchImages: search,\n onError,\n locale,\n noResults,\n checkboxAction,\n showCheckbox,\n translations,\n}: ImageSearchProps) => {\n const [queryObject, setQueryObject] = useState<ISearchParamsDTO>({\n query: undefined,\n page: 1,\n pageSize: 16,\n });\n const [selectedImage, setSelectedImage] = useState<IImageMetaInformationV3DTO | undefined>();\n const [searching, setSearching] = useState<boolean>(false);\n const [searchResult, setSearchResult] = useState<ISearchResultV3DTO | undefined>();\n\n const { page } = queryObject;\n const noResultsFound = !searching && searchResult?.results.length === 0;\n\n const onSelectImage = (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => {\n setSelectedImage(undefined);\n if (!image) return;\n onImageSelect(image);\n if (saveAsMetaImage) {\n checkboxAction?.(image);\n }\n };\n\n const searchImages = (queryObject: ISearchParamsDTO) => {\n setSearching(true);\n search(queryObject.query, queryObject.page)\n .then((result) => {\n setQueryObject({\n query: queryObject.query,\n pageSize: result.pageSize,\n page: queryObject.page,\n });\n setSearchResult(result);\n setSearching(false);\n })\n .catch((err) => {\n onError?.(err);\n setSearching(false);\n });\n };\n\n const handleQueryChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n setQueryObject((prevState) => ({\n ...prevState,\n query: value,\n }));\n };\n\n const onEnter = (e: KeyboardEvent<HTMLInputElement | HTMLButtonElement>) => {\n if (e.key === \"Enter\") {\n searchImages(queryObject);\n }\n };\n\n useEffect(() => {\n searchImages(queryObject);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <ImageSearchWrapper>\n <InputWrapper role=\"search\">\n <Input\n type=\"search\"\n placeholder={translations.searchPlaceholder}\n value={queryObject?.query ?? \"\"}\n onChange={handleQueryChange}\n onKeyDown={onEnter}\n />\n <IconButton\n variant=\"primary\"\n aria-label={translations.searchButtonTitle}\n title={translations.searchButtonTitle}\n onKeyDown={onEnter}\n onClick={() => searchImages(queryObject)}\n >\n <SearchLine />\n </IconButton>\n </InputWrapper>\n {!!noResultsFound && noResults}\n <StyledSearchResults>\n {searchResult?.results.map((image) => (\n <ImageSearchResult\n key={image.id}\n image={image}\n onImageClick={(image) => setSelectedImage(image)}\n selectedImage={selectedImage}\n onSelectImage={onSelectImage}\n showCheckbox={!!showCheckbox}\n translations={translations.imagePreview}\n locale={locale}\n />\n ))}\n </StyledSearchResults>\n <StyledPaginationRoot\n page={page ?? 1}\n onPageChange={(details) => searchImages({ ...queryObject, page: details.page })}\n translations={translations.paginationTranslations}\n count={searchResult?.totalCount ?? 0}\n pageSize={searchResult?.pageSize}\n hidden={noResultsFound}\n >\n <PaginationPrevTrigger asChild>\n <StyledButton\n variant=\"tertiary\"\n aria-label={translations.paginationTranslations?.prevTriggerLabel}\n title={translations.paginationTranslations?.prevTriggerLabel}\n >\n <ArrowLeftShortLine />\n <span>{translations.paginationTranslations?.prevTriggerLabel}</span>\n </StyledButton>\n </PaginationPrevTrigger>\n <PaginationContext>\n {(pagination) =>\n pagination.pages.map((page, index, full) => {\n // Hide last page to not trigger RESULT_WINDOW_TOO_LARGE error\n if (index === full.length - 1) return null;\n return page.type === \"page\" ? (\n <StyledPaginationItem key={index} {...page} asChild>\n <Button variant={page.value === pagination.page ? \"primary\" : \"tertiary\"}>{page.value}</Button>\n </StyledPaginationItem>\n ) : (\n <PaginationEllipsis key={index} index={index} asChild>\n <Text asChild consumeCss>\n <div>…</div>\n </Text>\n </PaginationEllipsis>\n );\n })\n }\n </PaginationContext>\n <PaginationNextTrigger asChild>\n <StyledButton\n variant=\"tertiary\"\n aria-label={translations.paginationTranslations?.nextTriggerLabel}\n title={translations.paginationTranslations?.nextTriggerLabel}\n >\n <span>{translations.paginationTranslations?.nextTriggerLabel}</span>\n <ArrowRightShortLine />\n </StyledButton>\n </PaginationNextTrigger>\n </StyledPaginationRoot>\n </ImageSearchWrapper>\n );\n};\n\nexport default ImageSearch;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageSearchResult.js","names":["PreviewImage"],"sources":["../src/ImageSearchResult.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { Text, Image, Button } from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO } from \"@ndla/types-backend/image-api\";\nimport type { PreviewTranslations } from \"./ImageSearch\";\nimport PreviewImage from \"./PreviewImage\";\nimport { getPreviewSrcSets } from \"./util/imageUtil\";\n\nconst StyledButton = styled(Button, {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n borderColor: \"stroke.subtle\",\n },\n});\n\nconst StyledImage = styled(Image, {\n base: {\n maxHeight: \"135px\",\n width: \"100%\",\n height: \"100%\",\n },\n});\n\nconst StyledText = styled(Text, {\n base: {\n lineClamp: \"3\",\n },\n});\n\ninterface Props {\n image: IImageMetaInformationV3DTO;\n onImageClick: (image: IImageMetaInformationV3DTO) => void;\n selectedImage?: IImageMetaInformationV3DTO;\n onSelectImage: (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => void;\n showCheckbox: boolean;\n translations: PreviewTranslations;\n locale: string;\n}\n\nexport default function ImageSearchResult({\n image,\n onImageClick,\n selectedImage,\n onSelectImage,\n showCheckbox,\n translations,\n locale,\n}: Props) {\n const isSelectedImage = selectedImage?.id === image.id;\n return (\n <>\n <StyledButton\n variant={isSelectedImage ? \"secondary\" : \"tertiary\"}\n data-testid=\"select-image-from-list\"\n onClick={() => onImageClick(image)}\n aria-expanded={isSelectedImage}\n aria-controls={`image-preview-${image.id}`}\n >\n <StyledImage\n alt=\"\"\n srcSet={getPreviewSrcSets(image.image.imageUrl)}\n src={image.image.imageUrl}\n variant=\"rounded\"\n />\n <StyledText textStyle=\"label.medium\" asChild consumeCss>\n <span>\n {image.title.title.trim() ? image.title.title : (translations.missingTitleFallback ?? `ID: ${image.id}`)}\n </span>\n </StyledText>\n </StyledButton>\n {isSelectedImage ? (\n <PreviewImage\n id={`image-preview-${image.id}`}\n image={selectedImage}\n onSelectImage={onSelectImage}\n translations={translations}\n showCheckbox={showCheckbox}\n locale={locale}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,eAAe,OAAO,QAAQ,EAClC,MAAM;CACJ,SAAS;CACT,eAAe;CACf,aAAa;AACd,EACF,EAAC;AAEF,MAAM,cAAc,OAAO,OAAO,EAChC,MAAM;CACJ,WAAW;CACX,OAAO;CACP,QAAQ;AACT,EACF,EAAC;AAEF,MAAM,aAAa,OAAO,MAAM,EAC9B,MAAM,EACJ,WAAW,IACZ,EACF,EAAC;AAYF,SAAwB,kBAAkB,EACxC,OACA,cACA,eACA,eACA,cACA,cACA,QACM,EAAE;CACR,MAAM,kBAAkB,eAAe,OAAO,MAAM;AACpD,wBACE,4CACE,KAAC;EACC,SAAS,kBAAkB,cAAc;EACzC,eAAY;EACZ,SAAS,MAAM,aAAa,MAAM;EAClC,iBAAe;EACf,kBAAgB,gBAAgB,MAAM,GAAG;6BAEzC,IAAC;GACC,KAAI;GACJ,QAAQ,kBAAkB,MAAM,MAAM,SAAS;GAC/C,KAAK,MAAM,MAAM;GACjB,SAAQ;IACR,kBACF,IAAC;GAAW,WAAU;GAAe;GAAQ;6BAC3C,IAAC,oBACE,MAAM,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,QAAS,aAAa,yBAAyB,MAAM,MAAM,GAAG,IACjG;IACI;GACA,EACd,kCACC,IAACA;EACC,KAAK,gBAAgB,MAAM,GAAG;EAC9B,OAAO;EACQ;EACD;EACA;EACN;GACR,GACA,QACH;AAEN"}
|
package/es/PreviewImage.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewImage.js","names":["ImageMeta"],"sources":["../src/PreviewImage.tsx"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { useState } from \"react\";\nimport { CloseLine, HashTag, CheckLine } from \"@ndla/icons\";\nimport { getModelReleaseValue } from \"@ndla/licenses\";\nimport {\n Button,\n CheckboxControl,\n CheckboxHiddenInput,\n CheckboxIndicator,\n CheckboxLabel,\n CheckboxRoot,\n Text,\n Image,\n IconButton,\n FieldRoot,\n} from \"@ndla/primitives\";\nimport { styled } from \"@ndla/styled-system/jsx\";\nimport type { IImageMetaInformationV3DTO } from \"@ndla/types-backend/image-api\";\nimport ImageMeta from \"./ImageMeta\";\nimport type { PreviewTranslations } from \"./ImageSearch\";\nimport { getSrcSets } from \"./util/imageUtil\";\n\nconst ImageContainer = styled(\"div\", {\n base: {\n flexShrink: \"0\",\n },\n});\n\nconst StyledImage = styled(Image, {\n base: {\n maxHeight: \"surface.xsmall\",\n },\n});\n\nconst StyledImageMetadata = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"xxsmall\",\n },\n});\n\nconst HashTagWrapper = styled(\"ul\", {\n base: {\n display: \"flex\",\n gap: \"xxsmall\",\n flexWrap: \"wrap\",\n },\n});\n\nconst HashTagGroup = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"xxsmall\",\n flexWrap: \"wrap\",\n },\n});\n\nconst StyledTagItem = styled(\"li\", {\n base: {\n display: \"flex\",\n alignItems: \"center\",\n },\n});\n\nconst StyledPreview = styled(\"div\", {\n base: {\n display: \"flex\",\n gridColumn: \"1 / -1\",\n borderColor: \"stroke.default\",\n border: \"1px solid\",\n borderRadius: \"xsmall\",\n gap: \"small\",\n padding: \"small\",\n flexWrap: \"wrap\",\n overflow: \"hidden\",\n },\n});\n\nconst StyledTopRow = styled(\"div\", {\n base: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n});\n\nconst ContentWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"medium\",\n flex: \"2\",\n },\n});\n\nconst ActionsWrapper = styled(\"div\", {\n base: {\n display: \"flex\",\n gap: \"small\",\n marginBlockEnd: \"medium\",\n },\n});\n\nconst StyledFieldRoot = styled(FieldRoot, {\n base: { alignSelf: \"center\" },\n});\n\ninterface Props {\n id: string;\n image: IImageMetaInformationV3DTO;\n onSelectImage: (image: IImageMetaInformationV3DTO | undefined, saveAsMetaImage?: boolean) => void;\n showCheckbox: boolean;\n translations: PreviewTranslations;\n locale: string;\n}\n\nconst PreviewImage = ({ id, image, onSelectImage, showCheckbox, translations, locale }: Props) => {\n const [saveAsMetaImage, setSaveAsMetaImage] = useState(false);\n\n return (\n <StyledPreview id={id}>\n <ImageContainer>\n <StyledImage\n alt=\"\"\n srcSet={getSrcSets(image.image.imageUrl)}\n sizes=\"(min-width: 800px) 360px, (min-width: 400px) 300px, 100vw\"\n src={image.image.imageUrl}\n aria-label={image.title.title}\n variant=\"rounded\"\n />\n </ImageContainer>\n <ContentWrapper>\n <StyledImageMetadata>\n <StyledTopRow>\n <Text textStyle=\"title.medium\">\n {image.title.title.trim() ? image.title.title : (translations.missingTitleFallback ?? `ID: ${image.id}`)}\n </Text>\n <IconButton\n variant=\"tertiary\"\n onClick={() => onSelectImage(undefined)}\n aria-label={translations.close}\n title={translations.close}\n >\n <CloseLine />\n </IconButton>\n </StyledTopRow>\n {!!image.copyright.creators.length && (\n <Text>\n <b>{`${translations.creatorsLabel}: `}</b>\n {image.copyright.creators.map((creator) => creator.name).join(\", \")}\n </Text>\n )}\n {!!image.copyright.license.description?.trim() && (\n <Text>\n <b>{`${translations.license}: `}</b>\n {image.copyright.license.description}\n </Text>\n )}\n {!!image.caption.caption.trim() && (\n <Text>\n <b>{`${translations.caption}: `}</b>\n {image.caption.caption}\n </Text>\n )}\n {!!image.alttext.alttext.trim() && (\n <Text>\n <b>{`${translations.altText}:`}</b> {image.alttext.alttext}\n </Text>\n )}\n {!!image.modelRelease.trim() && (\n <Text>\n <b>{`${translations.modelRelease}: `}</b>\n {getModelReleaseValue(image.modelRelease, locale)}\n </Text>\n )}\n <ImageMeta\n contentType={image.image.contentType}\n fileSize={image.image.size}\n imageDimensions={image.image.dimensions}\n locale={locale}\n />\n {!!image.tags.tags.length && (\n <HashTagGroup>\n <Text id=\"tags-title\">\n <b>{`${translations.tags}: `}</b>\n </Text>\n <HashTagWrapper aria-describedby=\"tags-title\">\n {image.tags.tags.map((tag) => (\n <StyledTagItem key={tag}>\n <HashTag size=\"small\" />\n {tag}\n </StyledTagItem>\n ))}\n </HashTagWrapper>\n </HashTagGroup>\n )}\n </StyledImageMetadata>\n <ActionsWrapper>\n <Button data-testid=\"use-image\" onClick={() => onSelectImage(image, saveAsMetaImage)}>\n {translations.useImageTitle}\n </Button>\n {!!showCheckbox && (\n <StyledFieldRoot>\n <CheckboxRoot checked={saveAsMetaImage} onCheckedChange={() => setSaveAsMetaImage((prev) => !prev)}>\n <CheckboxControl>\n <CheckboxIndicator asChild>\n <CheckLine />\n </CheckboxIndicator>\n </CheckboxControl>\n <CheckboxLabel>{translations.checkboxLabel}</CheckboxLabel>\n <CheckboxHiddenInput />\n </CheckboxRoot>\n </StyledFieldRoot>\n )}\n </ActionsWrapper>\n </ContentWrapper>\n </StyledPreview>\n );\n};\n\nexport default PreviewImage;\n"],"mappings":";;;;;;;;;;AA6BA,MAAM,iBAAiB,OAAO,OAAO,EACnC,MAAM,EACJ,YAAY,IACb,EACF,EAAC;AAEF,MAAM,cAAc,OAAO,OAAO,EAChC,MAAM,EACJ,WAAW,iBACZ,EACF,EAAC;AAEF,MAAM,sBAAsB,OAAO,OAAO,EACxC,MAAM;CACJ,SAAS;CACT,eAAe;CACf,KAAK;AACN,EACF,EAAC;AAEF,MAAM,iBAAiB,OAAO,MAAM,EAClC,MAAM;CACJ,SAAS;CACT,KAAK;CACL,UAAU;AACX,EACF,EAAC;AAEF,MAAM,eAAe,OAAO,OAAO,EACjC,MAAM;CACJ,SAAS;CACT,KAAK;CACL,UAAU;AACX,EACF,EAAC;AAEF,MAAM,gBAAgB,OAAO,MAAM,EACjC,MAAM;CACJ,SAAS;CACT,YAAY;AACb,EACF,EAAC;AAEF,MAAM,gBAAgB,OAAO,OAAO,EAClC,MAAM;CACJ,SAAS;CACT,YAAY;CACZ,aAAa;CACb,QAAQ;CACR,cAAc;CACd,KAAK;CACL,SAAS;CACT,UAAU;CACV,UAAU;AACX,EACF,EAAC;AAEF,MAAM,eAAe,OAAO,OAAO,EACjC,MAAM;CACJ,SAAS;CACT,gBAAgB;AACjB,EACF,EAAC;AAEF,MAAM,iBAAiB,OAAO,OAAO,EACnC,MAAM;CACJ,SAAS;CACT,eAAe;CACf,KAAK;CACL,MAAM;AACP,EACF,EAAC;AAEF,MAAM,iBAAiB,OAAO,OAAO,EACnC,MAAM;CACJ,SAAS;CACT,KAAK;CACL,gBAAgB;AACjB,EACF,EAAC;AAEF,MAAM,kBAAkB,OAAO,WAAW,EACxC,MAAM,EAAE,WAAW,SAAU,EAC9B,EAAC;AAWF,MAAM,eAAe,CAAC,EAAE,IAAI,OAAO,eAAe,cAAc,cAAc,QAAe,KAAK;CAChG,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,SAAS,MAAM;AAE7D,wBACE,KAAC;EAAkB;6BACjB,IAAC,4CACC,IAAC;GACC,KAAI;GACJ,QAAQ,WAAW,MAAM,MAAM,SAAS;GACxC,OAAM;GACN,KAAK,MAAM,MAAM;GACjB,cAAY,MAAM,MAAM;GACxB,SAAQ;IACR,GACa,kBACjB,KAAC,6CACC,KAAC;mBACC,KAAC,2CACC,IAAC;IAAK,WAAU;cACb,MAAM,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,QAAS,aAAa,yBAAyB,MAAM,MAAM,GAAG;KACjG,kBACP,IAAC;IACC,SAAQ;IACR,SAAS,MAAM,qBAAwB;IACvC,cAAY,aAAa;IACzB,OAAO,aAAa;8BAEpB,IAAC,cAAY;KACF,IACA;KACZ,MAAM,UAAU,SAAS,0BAC1B,KAAC,mCACC,IAAC,kBAAI,EAAE,aAAa,cAAc,MAAQ,EACzC,MAAM,UAAU,SAAS,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC,KAAK,KAAK,IAC9D;KAEN,MAAM,UAAU,QAAQ,aAAa,MAAM,oBAC5C,KAAC,mCACC,IAAC,kBAAI,EAAE,aAAa,QAAQ,MAAQ,EACnC,MAAM,UAAU,QAAQ,eACpB;KAEN,MAAM,QAAQ,QAAQ,MAAM,oBAC7B,KAAC,mCACC,IAAC,kBAAI,EAAE,aAAa,QAAQ,MAAQ,EACnC,MAAM,QAAQ,WACV;KAEN,MAAM,QAAQ,QAAQ,MAAM,oBAC7B,KAAC;oBACC,IAAC,kBAAI,EAAE,aAAa,QAAQ,KAAO;;IAAE,MAAM,QAAQ;OAC9C;KAEN,MAAM,aAAa,MAAM,oBAC1B,KAAC,mCACC,IAAC,kBAAI,EAAE,aAAa,aAAa,MAAQ,EACxC,qBAAqB,MAAM,cAAc,OAAO,IAC5C;mBAET,IAACA;IACC,aAAa,MAAM,MAAM;IACzB,UAAU,MAAM,MAAM;IACtB,iBAAiB,MAAM,MAAM;IACrB;KACR;KACC,MAAM,KAAK,KAAK,0BACjB,KAAC,2CACC,IAAC;IAAK,IAAG;8BACP,IAAC,kBAAI,EAAE,aAAa,KAAK,MAAQ;KAC5B,kBACP,IAAC;IAAe,oBAAiB;cAC9B,MAAM,KAAK,KAAK,IAAI,CAAC,wBACpB,KAAC,4CACC,IAAC,WAAQ,MAAK,UAAU,EACvB,QAFiB,IAGJ,CAChB;KACa,IACJ;MAEG,kBACtB,KAAC,6CACC,IAAC;GAAO,eAAY;GAAY,SAAS,MAAM,cAAc,OAAO,gBAAgB;aACjF,aAAa;IACP,IACN,gCACD,IAAC,6CACC,KAAC;GAAa,SAAS;GAAiB,iBAAiB,MAAM,mBAAmB,CAAC,UAAU,KAAK;;oBAChG,IAAC,6CACC,IAAC;KAAkB;+BACjB,IAAC,cAAY;MACK,GACJ;oBAClB,IAAC,2BAAe,aAAa,gBAA8B;oBAC3D,IAAC,wBAAsB;;IACV,GACC,IAEL,IACF;GACH;AAEnB;AAED,2BAAe"}
|
package/es/index.js
DELETED
package/es/util/imageUtil.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imageUtil.js","names":["imageUrl: string"],"sources":["../../src/util/imageUtil.ts"],"sourcesContent":["/**\n * Copyright (c) 2017-present, NDLA.\n *\n * This source code is licensed under the GPLv3 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/* - Source sets for gallery search is retina-display optimized\n - Based on: https://www.smashingmagazine.com/2014/05/responsive-images-done-right-guide-picture-srcset/ */\n\nexport const getSrcSets = (imageUrl: string) =>\n [\n `${imageUrl}?width=1440 1440w`,\n `${imageUrl}?width=1120 1120w`,\n `${imageUrl}?width=1000 1000w`,\n `${imageUrl}?width=960 960w`,\n `${imageUrl}?width=800 800w`,\n `${imageUrl}?width=640 640w`,\n `${imageUrl}?width=480 480w`,\n `${imageUrl}?width=320 320w`,\n ].join(\", \");\n\nexport const getPreviewSrcSets = (imageUrl: string) =>\n [`${imageUrl}?width=480 3x`, `${imageUrl}?width=320 2x`, `${imageUrl}?width=160 1x`].join(\", \");\n"],"mappings":";;;;;;;;AAWA,MAAa,aAAa,CAACA,aACzB;EACG,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;EACX,EAAE,SAAS;AACb,EAAC,KAAK,KAAK;AAEd,MAAa,oBAAoB,CAACA,aAChC;EAAE,EAAE,SAAS;EAAiB,EAAE,SAAS;EAAiB,EAAE,SAAS;AAAe,EAAC,KAAK,KAAK"}
|