@squiz/resource-browser 1.66.1 → 1.66.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @squiz/resource-browser
2
2
 
3
+ ## 1.66.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 8421756: Selected image assets in the resource browser will now display the actual image instead of just the image asset icon if they have a URL specified
8
+
9
+ ## 1.66.2
10
+
11
+ ### Patch Changes
12
+
13
+ - 6d41052: Added white background to resource picker input to avoid it inheriting the background colour of its parent element.
14
+
3
15
  ## 1.66.1
4
16
 
5
17
  ### Patch Changes
@@ -5,4 +5,4 @@ export type SelectedStateProps = {
5
5
  isDisabled?: boolean;
6
6
  onClear: () => void;
7
7
  };
8
- export declare const SelectedState: ({ resource: { id, type, name, status, squizImage }, isDisabled, onClear, }: SelectedStateProps) => React.JSX.Element;
8
+ export declare const SelectedState: ({ resource: { id, type, name, status, squizImage, url }, isDisabled, onClear, }: SelectedStateProps) => React.JSX.Element;
@@ -8,35 +8,37 @@ const react_1 = __importDefault(require("react"));
8
8
  const pretty_bytes_1 = __importDefault(require("pretty-bytes"));
9
9
  const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
10
10
  const StatusIndicator_1 = __importDefault(require("../../StatusIndicator/StatusIndicator"));
11
- const SelectedState = ({ resource: { id, type, name, status, squizImage }, isDisabled, onClear, }) => {
11
+ const SelectedState = ({ resource: { id, type, name, status, squizImage, url }, isDisabled, onClear, }) => {
12
12
  const fileSize = squizImage?.imageVariations?.original?.byteSize;
13
13
  const fileWidth = squizImage?.imageVariations?.original?.width;
14
14
  const fileHeight = squizImage?.imageVariations?.original?.height;
15
15
  return (react_1.default.createElement(react_1.default.Fragment, null,
16
- react_1.default.createElement(react_1.default.Fragment, null,
17
- react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type.code, resourceSource: "matrix", className: "w-4 h-4 flex self-center" }),
18
- react_1.default.createElement("div", { className: "justify-self-start self-center w-full overflow-hidden break-words" }, name),
19
- react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })),
20
- react_1.default.createElement("dl", { className: "col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm" },
21
- react_1.default.createElement("div", null,
22
- react_1.default.createElement("dt", { className: "hidden" },
23
- "Status: ",
24
- status.name),
25
- react_1.default.createElement("dd", { className: "flex items-center" },
26
- react_1.default.createElement(StatusIndicator_1.default, { status: status }))),
27
- react_1.default.createElement("div", null,
28
- react_1.default.createElement("dt", { className: "hidden" }, "Asset ID"),
29
- react_1.default.createElement("dd", { className: "text-gray-700" },
30
- "#",
31
- id)),
32
- fileSize && (react_1.default.createElement("div", null,
33
- react_1.default.createElement("dt", { className: "hidden" }, "Asset size"),
34
- react_1.default.createElement("dd", { className: "ml-4 text-gray-600" },
35
- (0, pretty_bytes_1.default)(fileSize),
36
- ", ",
37
- fileWidth,
38
- " x ",
39
- fileHeight,
40
- "px"))))));
16
+ type.code === 'image' && url ? (react_1.default.createElement("div", { className: "checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded" },
17
+ react_1.default.createElement("img", { src: url, className: "w-full h-full object-cover object-center", alt: name }))) : (react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type.code, resourceSource: "matrix", className: "w-4 h-4 mt-1 flex self-start" })),
18
+ react_1.default.createElement("div", { className: "justify-self-start self-center w-full overflow-hidden break-words" },
19
+ react_1.default.createElement("span", null, name),
20
+ react_1.default.createElement("dl", { className: "col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm" },
21
+ react_1.default.createElement("div", null,
22
+ react_1.default.createElement("dt", { className: "hidden" },
23
+ "Status: ",
24
+ status.name),
25
+ react_1.default.createElement("dd", { className: "flex items-center" },
26
+ react_1.default.createElement(StatusIndicator_1.default, { status: status }))),
27
+ react_1.default.createElement("div", null,
28
+ react_1.default.createElement("dt", { className: "hidden" }, "Asset ID"),
29
+ react_1.default.createElement("dd", { className: "text-gray-700" },
30
+ "#",
31
+ id))),
32
+ fileSize && (react_1.default.createElement("dl", { className: "col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm" },
33
+ react_1.default.createElement("div", null,
34
+ react_1.default.createElement("dt", { className: "hidden" }, "Asset size"),
35
+ react_1.default.createElement("dd", { className: "text-gray-600" },
36
+ (0, pretty_bytes_1.default)(fileSize),
37
+ ", ",
38
+ fileWidth,
39
+ " x ",
40
+ fileHeight,
41
+ "px"))))),
42
+ react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })));
41
43
  };
42
44
  exports.SelectedState = SelectedState;
package/lib/index.css CHANGED
@@ -469,9 +469,6 @@
469
469
  .squiz-rb-scope .ml-1 {
470
470
  margin-left: 0.25rem;
471
471
  }
472
- .squiz-rb-scope .ml-4 {
473
- margin-left: 1rem;
474
- }
475
472
  .squiz-rb-scope .ml-auto {
476
473
  margin-left: auto;
477
474
  }
@@ -502,6 +499,9 @@
502
499
  .squiz-rb-scope .mr-auto {
503
500
  margin-right: auto;
504
501
  }
502
+ .squiz-rb-scope .mt-1 {
503
+ margin-top: 0.25rem;
504
+ }
505
505
  .squiz-rb-scope .mt-2 {
506
506
  margin-top: 0.5rem;
507
507
  }
@@ -574,6 +574,9 @@
574
574
  .squiz-rb-scope .h-\[50vh\] {
575
575
  height: 50vh;
576
576
  }
577
+ .squiz-rb-scope .h-\[56px\] {
578
+ height: 56px;
579
+ }
577
580
  .squiz-rb-scope .h-\[calc\(100\%-72px\)\] {
578
581
  height: calc(100% - 72px);
579
582
  }
@@ -631,6 +634,9 @@
631
634
  .squiz-rb-scope .w-\[400px\] {
632
635
  width: 400px;
633
636
  }
637
+ .squiz-rb-scope .w-\[56px\] {
638
+ width: 56px;
639
+ }
634
640
  .squiz-rb-scope .w-\[60px\] {
635
641
  width: 60px;
636
642
  }
@@ -708,6 +714,9 @@
708
714
  .squiz-rb-scope .gap-3 {
709
715
  gap: 0.75rem;
710
716
  }
717
+ .squiz-rb-scope .self-start {
718
+ align-self: flex-start;
719
+ }
711
720
  .squiz-rb-scope .self-center {
712
721
  align-self: center;
713
722
  }
@@ -808,6 +817,14 @@
808
817
  .squiz-rb-scope .bg-opacity-10 {
809
818
  --tw-bg-opacity: 0.1;
810
819
  }
820
+ .squiz-rb-scope .object-cover {
821
+ -o-object-fit: cover;
822
+ object-fit: cover;
823
+ }
824
+ .squiz-rb-scope .object-center {
825
+ -o-object-position: center;
826
+ object-position: center;
827
+ }
811
828
  .squiz-rb-scope .p-1 {
812
829
  padding: 0.25rem;
813
830
  }
@@ -997,6 +1014,8 @@
997
1014
  display: grid;
998
1015
  grid-template-columns: 24px 1fr;
999
1016
  gap: 0.5rem;
1017
+ --tw-bg-opacity: 1;
1018
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1000
1019
  border-width: 2px;
1001
1020
  --tw-border-opacity: 1;
1002
1021
  border-color: rgb(224 224 224 / var(--tw-border-opacity));
@@ -1018,7 +1037,7 @@
1018
1037
  }
1019
1038
  .squiz-rb-scope .resource-picker-info__layout {
1020
1039
  display: grid;
1021
- grid-template-columns: 24px 1fr 24px;
1040
+ grid-template-columns: auto 1fr 24px;
1022
1041
  gap: 0.5rem;
1023
1042
  justify-items: center;
1024
1043
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/resource-browser",
3
- "version": "1.66.1",
3
+ "version": "1.66.3",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "private": false,
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import ResourcePicker from './ResourcePicker';
4
4
  import mockResource from './mock-resource.json';
5
+ import mockImageResource from './mock-image-resource.json';
5
6
 
6
7
  const defaultProps: any = {
7
8
  resource: null,
@@ -54,6 +55,13 @@ describe('Resource picker', () => {
54
55
  expect(resourceName).toBeInTheDocument();
55
56
  });
56
57
 
58
+ it('should render the selected image if there is an image resource returned', () => {
59
+ render(<ResourcePicker {...defaultProps} resource={mockImageResource} />);
60
+
61
+ const resourceImage = screen.getByAltText(mockImageResource.name);
62
+ expect(resourceImage.getAttribute('src')).toBe(mockImageResource.url);
63
+ });
64
+
57
65
  it('should display the reset button in selected state', () => {
58
66
  render(<ResourcePicker {...defaultProps} resource={mockResource} />);
59
67
  const resourceName = screen.queryByText('Products');
@@ -12,7 +12,7 @@ export type SelectedStateProps = {
12
12
  };
13
13
 
14
14
  export const SelectedState = ({
15
- resource: { id, type, name, status, squizImage },
15
+ resource: { id, type, name, status, squizImage, url },
16
16
  isDisabled,
17
17
  onClear,
18
18
  }: SelectedStateProps) => {
@@ -21,35 +21,44 @@ export const SelectedState = ({
21
21
  const fileHeight = squizImage?.imageVariations?.original?.height;
22
22
  return (
23
23
  <>
24
- <>
25
- {/* Left column */}
26
- <Icon icon={type.code as IconOptions} resourceSource="matrix" className="w-4 h-4 flex self-center" />
27
- {/* Center column */}
28
- <div className="justify-self-start self-center w-full overflow-hidden break-words">{name}</div>
29
- {/* End column */}
30
- <ResetButton isDisabled={isDisabled} onClick={onClear} />
31
- </>
32
- <dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
33
- <div>
34
- <dt className="hidden">Status: {status.name}</dt>
35
- <dd className="flex items-center">
36
- <StatusIndicator status={status} />
37
- </dd>
24
+ {/* Left column */}
25
+ {type.code === 'image' && url ? (
26
+ <div className="checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded">
27
+ <img src={url} className="w-full h-full object-cover object-center" alt={name} />
38
28
  </div>
39
-
40
- <div>
41
- <dt className="hidden">Asset ID</dt>
42
- <dd className="text-gray-700">#{id}</dd>
43
- </div>
44
- {fileSize && (
29
+ ) : (
30
+ <Icon icon={type.code as IconOptions} resourceSource="matrix" className="w-4 h-4 mt-1 flex self-start" />
31
+ )}
32
+ {/* Center column */}
33
+ <div className="justify-self-start self-center w-full overflow-hidden break-words">
34
+ <span>{name}</span>
35
+ <dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
45
36
  <div>
46
- <dt className="hidden">Asset size</dt>
47
- <dd className="ml-4 text-gray-600">
48
- {prettyBytes(fileSize)}, {fileWidth} x {fileHeight}px
37
+ <dt className="hidden">Status: {status.name}</dt>
38
+ <dd className="flex items-center">
39
+ <StatusIndicator status={status} />
49
40
  </dd>
50
41
  </div>
42
+
43
+ <div>
44
+ <dt className="hidden">Asset ID</dt>
45
+ <dd className="text-gray-700">#{id}</dd>
46
+ </div>
47
+ </dl>
48
+
49
+ {fileSize && (
50
+ <dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
51
+ <div>
52
+ <dt className="hidden">Asset size</dt>
53
+ <dd className="text-gray-600">
54
+ {prettyBytes(fileSize)}, {fileWidth} x {fileHeight}px
55
+ </dd>
56
+ </div>
57
+ </dl>
51
58
  )}
52
- </dl>
59
+ </div>
60
+ {/* End column */}
61
+ <ResetButton isDisabled={isDisabled} onClick={onClear} />
53
62
  </>
54
63
  );
55
64
  };
@@ -1,12 +1,12 @@
1
1
  .resource-picker {
2
- @apply grid grid-cols-[24px_1fr] gap-2;
2
+ @apply grid grid-cols-[24px_1fr] gap-2 bg-white;
3
3
  @apply border-2 border-gray-300;
4
4
  @apply text-gray-500 rounded p-2;
5
5
  &-info {
6
6
  @apply w-full p-2 bg-gray-100 rounded-md;
7
7
  @apply text-gray-900 text-base text-md font-semibold;
8
8
  &__layout {
9
- @apply grid grid-cols-[24px_1fr_24px] gap-2;
9
+ @apply grid grid-cols-[auto_1fr_24px] gap-2;
10
10
  @apply justify-items-center;
11
11
  }
12
12
  }