@squiz/resource-browser 3.0.0-pre-alpha.0 → 3.0.1-pre-alpha.1

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.
@@ -1,20 +1,45 @@
1
- import React, { useRef, useState } from 'react';
2
- import { Icon, uuid } from '@squiz/generic-browser-lib';
3
- import { useFocusWithin, useKeyboard } from 'react-aria';
4
- import { AdsClickIcon } from '../Icons/AdsClickIcon';
5
- import { ArrowDownIcon } from '../Icons/ArrowDownIcon';
6
- export default function BrowseToSource({ sources, selectedSource, onSourceSelect, className = '', }) {
7
- const [uniqueId] = useState(uuid());
8
- const buttonRef = useRef(null);
9
- const [isOpen, setIsOpen] = useState(false);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const react_1 = __importStar(require("react"));
27
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
28
+ const react_aria_1 = require("react-aria");
29
+ const AdsClickIcon_1 = require("../Icons/AdsClickIcon");
30
+ const ArrowDownIcon_1 = require("../Icons/ArrowDownIcon");
31
+ function BrowseToSource({ sources, selectedSource, onSourceSelect, className = '', }) {
32
+ const [uniqueId] = (0, react_1.useState)((0, generic_browser_lib_1.uuid)());
33
+ const buttonRef = (0, react_1.useRef)(null);
34
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
10
35
  // Watch the focus and blur on the menu and close if focus leaves the control
11
- const { focusWithinProps } = useFocusWithin({
36
+ const { focusWithinProps } = (0, react_aria_1.useFocusWithin)({
12
37
  onBlurWithin: () => {
13
38
  setIsOpen(false);
14
39
  },
15
40
  });
16
41
  // Listen for Esc key within this element
17
- const { keyboardProps } = useKeyboard({
42
+ const { keyboardProps } = (0, react_aria_1.useKeyboard)({
18
43
  onKeyDown: (e) => {
19
44
  if (isOpen && e.key === 'Escape') {
20
45
  setIsOpen(false);
@@ -28,23 +53,24 @@ export default function BrowseToSource({ sources, selectedSource, onSourceSelect
28
53
  onSourceSelect(source);
29
54
  };
30
55
  if (!sources.length) {
31
- return React.createElement(React.Fragment, null);
56
+ return react_1.default.createElement(react_1.default.Fragment, null);
32
57
  }
33
- return (React.createElement("div", { className: `inline-block ${isOpen ? 'flex items-center border-2 border-gray-200 rounded-lg px-1 py-0.5 w-[350px]' : 'p-0'} ${className}` },
34
- isOpen && React.createElement(AdsClickIcon, { "aria-hidden": true, className: "ml-1 mr-2 shrink-0" }),
35
- sources.length > 1 && (React.createElement("div", { ...focusWithinProps, ...keyboardProps, className: `relative w-full ${isOpen && 'border-l border-gray-400 pl-1 '}` },
36
- React.createElement("button", { ref: buttonRef, type: "button", "aria-label": "Source quick select", "aria-expanded": isOpen, "aria-controls": `${uniqueId}-button-menu`, onClick: () => setIsOpen(!isOpen), className: `relative flex items-center p-2 w-full rounded-lg ${!isOpen && 'border-2 border-gray-200 hover:bg-gray-100'}` }, isOpen ? (React.createElement(React.Fragment, null,
37
- React.createElement("span", { className: "text-gray-700 text-md leading-5 mr-2" }, "Browse to ..."),
38
- React.createElement(ArrowDownIcon, { "aria-hidden": true, className: "absolute right-3" }))) : (React.createElement(React.Fragment, null,
39
- React.createElement(AdsClickIcon, { "aria-hidden": true, className: "ml-[6px] mr-2" }),
40
- React.createElement("span", { className: "text-gray-700 text-md font-semibold leading-5 mr-[6px]" }, "Browse")))),
41
- React.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+8px)] left-1 w-[calc(100%-2px)] bg-gray-100 border-1 shadow-md rounded border-gray-300 p-2 pb-0 overflow-y-auto max-h-80 ${!isOpen ? 'hidden' : ''}` }, sources.map((source) => {
58
+ return (react_1.default.createElement("div", { className: `inline-block ${isOpen ? 'flex items-center border-2 border-gray-200 rounded-lg px-1 py-0.5 w-[350px]' : 'p-0'} ${className}` },
59
+ isOpen && react_1.default.createElement(AdsClickIcon_1.AdsClickIcon, { "aria-hidden": true, className: "ml-1 mr-2 shrink-0" }),
60
+ sources.length > 1 && (react_1.default.createElement("div", { ...focusWithinProps, ...keyboardProps, className: `relative w-full ${isOpen && 'border-l border-gray-400 pl-1 '}` },
61
+ react_1.default.createElement("button", { ref: buttonRef, type: "button", "aria-label": "Source quick select", "aria-expanded": isOpen, "aria-controls": `${uniqueId}-button-menu`, onClick: () => setIsOpen(!isOpen), className: `relative flex items-center p-2 w-full rounded-lg ${!isOpen && 'border-2 border-gray-200 hover:bg-gray-100'}` }, isOpen ? (react_1.default.createElement(react_1.default.Fragment, null,
62
+ react_1.default.createElement("span", { className: "text-gray-700 text-md leading-5 mr-2" }, "Browse to ..."),
63
+ react_1.default.createElement(ArrowDownIcon_1.ArrowDownIcon, { "aria-hidden": true, className: "absolute right-3" }))) : (react_1.default.createElement(react_1.default.Fragment, null,
64
+ react_1.default.createElement(AdsClickIcon_1.AdsClickIcon, { "aria-hidden": true, className: "ml-[6px] mr-2" }),
65
+ react_1.default.createElement("span", { className: "text-gray-700 text-md font-semibold leading-5 mr-[6px]" }, "Browse")))),
66
+ react_1.default.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+8px)] left-1 w-[calc(100%-2px)] bg-gray-100 border-1 shadow-md rounded border-gray-300 p-2 pb-0 overflow-y-auto max-h-80 ${!isOpen ? 'hidden' : ''}` }, sources.map((source) => {
42
67
  const { id, name, type } = source;
43
68
  const isSelectedSource = id === selectedSource.id;
44
- return (React.createElement("li", { key: id, className: "flex items-center text-sm font-semibold mb-2 bg-white rounded" },
45
- React.createElement("button", { type: "button", onClick: () => handleSourceClick(source), className: `relative grow flex items-center p-2 border-1 border-white rounded hover:bg-gray-50 hover:border-gray-300 focus:bg-gray-100` },
46
- React.createElement(Icon, { icon: type, "aria-label": type, className: "shrink-0 mr-2.5" }),
47
- React.createElement("span", { className: "text-left mr-7" }, name),
48
- isSelectedSource && (React.createElement(Icon, { icon: 'selected', "aria-label": "selected", className: "absolute right-4" })))));
69
+ return (react_1.default.createElement("li", { key: id, className: "flex items-center text-sm font-semibold mb-2 bg-white rounded" },
70
+ react_1.default.createElement("button", { type: "button", onClick: () => handleSourceClick(source), className: `relative grow flex items-center p-2 border-1 border-white rounded hover:bg-gray-50 hover:border-gray-300 focus:bg-gray-100` },
71
+ react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type, "aria-label": type, className: "shrink-0 mr-2.5" }),
72
+ react_1.default.createElement("span", { className: "text-left mr-7" }, name),
73
+ isSelectedSource && (react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'selected', "aria-label": "selected", className: "absolute right-4" })))));
49
74
  }))))));
50
75
  }
76
+ exports.default = BrowseToSource;
@@ -1,16 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAuth = void 0;
1
4
  /* eslint-disable no-console */
2
- import { useState, useCallback, useEffect } from 'react';
3
- import { getCookieValue, refreshAccessToken as refreshTokenUtil } from '../utils/authUtils';
4
- export const useAuth = (authConfig) => {
5
- const [authToken, setAuthToken] = useState(getCookieValue('authToken'));
6
- const [isAuthenticated, setIsAuthenticated] = useState(!!getCookieValue('authToken'));
7
- const refreshAccessToken = useCallback(async () => {
8
- const newToken = await refreshTokenUtil(authConfig);
5
+ const react_1 = require("react");
6
+ const authUtils_1 = require("../utils/authUtils");
7
+ const useAuth = (authConfig) => {
8
+ const [authToken, setAuthToken] = (0, react_1.useState)((0, authUtils_1.getCookieValue)('authToken'));
9
+ const [isAuthenticated, setIsAuthenticated] = (0, react_1.useState)(!!(0, authUtils_1.getCookieValue)('authToken'));
10
+ const refreshAccessToken = (0, react_1.useCallback)(async () => {
11
+ const newToken = await (0, authUtils_1.refreshAccessToken)(authConfig);
9
12
  setAuthToken(newToken);
10
13
  setIsAuthenticated(!!newToken);
11
14
  return newToken;
12
15
  }, [authConfig]);
13
- const handleLogin = useCallback(() => {
16
+ const handleLogin = (0, react_1.useCallback)(() => {
14
17
  if (!authConfig?.redirectUrl && !authConfig?.authUrl && !authConfig?.scope) {
15
18
  console.error('Auth config is misconfigured');
16
19
  return;
@@ -24,10 +27,10 @@ export const useAuth = (authConfig) => {
24
27
  }
25
28
  const checkPopup = setInterval(() => {
26
29
  try {
27
- if (getCookieValue('authToken') && getCookieValue('refreshToken')) {
30
+ if ((0, authUtils_1.getCookieValue)('authToken') && (0, authUtils_1.getCookieValue)('refreshToken')) {
28
31
  clearInterval(checkPopup);
29
32
  popup.close();
30
- setAuthToken(getCookieValue('authToken'));
33
+ setAuthToken((0, authUtils_1.getCookieValue)('authToken'));
31
34
  setIsAuthenticated(true);
32
35
  }
33
36
  }
@@ -40,7 +43,7 @@ export const useAuth = (authConfig) => {
40
43
  }
41
44
  }, 1000); // Check every second
42
45
  }, [authConfig]);
43
- useEffect(() => {
46
+ (0, react_1.useEffect)(() => {
44
47
  refreshAccessToken().catch(() => {
45
48
  setIsAuthenticated(false);
46
49
  });
@@ -52,3 +55,4 @@ export const useAuth = (authConfig) => {
52
55
  refreshAccessToken,
53
56
  };
54
57
  };
58
+ exports.useAuth = useAuth;
@@ -1,12 +1,16 @@
1
- import { useAsync } from '@squiz/generic-browser-lib';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSelectedState = void 0;
4
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
2
5
  /**
3
6
  * Loads the selected state for the provided resource
4
7
  */
5
- export const useSelectedState = ({ plugin, resource }) => {
8
+ const useSelectedState = ({ plugin, resource }) => {
6
9
  // Find the resolver for this resource
7
10
  const renderSelectedResource = resource && plugin?.renderSelectedResource;
8
- return useAsync({
11
+ return (0, generic_browser_lib_1.useAsync)({
9
12
  callback: () => (resource && renderSelectedResource ? renderSelectedResource(resource) : null),
10
13
  defaultValue: null,
11
14
  }, [resource]);
12
15
  };
16
+ exports.useSelectedState = useSelectedState;
@@ -1,10 +1,13 @@
1
- import { useAsync } from '@squiz/generic-browser-lib';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSources = void 0;
4
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
2
5
  /**
3
6
  * Loads and caches the source list when a component using the hook is mounted.
4
7
  */
5
- export const useSources = ({ onRequestSources, plugins }) => {
8
+ const useSources = ({ onRequestSources, plugins }) => {
6
9
  const pluginsKey = plugins.reduce((acc, plugin) => acc + plugin.type, '');
7
- return useAsync({
10
+ return (0, generic_browser_lib_1.useAsync)({
8
11
  callback: () => {
9
12
  return new Promise((resolve, reject) => {
10
13
  // Get all the sources from the outer context
@@ -42,3 +45,4 @@ export const useSources = ({ onRequestSources, plugins }) => {
42
45
  defaultValue: [],
43
46
  }, [onRequestSources, pluginsKey]);
44
47
  };
48
+ exports.useSources = useSources;
@@ -1,5 +1,12 @@
1
- import React from 'react';
2
- export const AdsClickIcon = (props) => {
3
- return (React.createElement("svg", { fill: "#4f4f4f", height: "24", width: "24", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", ...props },
4
- React.createElement("path", { d: "M11.56 17.845C8.38001 17.695 5.85001 15.075 5.85001 11.855C5.85001 8.54501 8.54001 5.85501 11.85 5.85501C15.07 5.85501 17.69 8.38501 17.84 11.565L15.74 10.935C15.33 9.16501 13.74 7.85501 11.85 7.85501C9.64001 7.85501 7.85001 9.64501 7.85001 11.855C7.85001 13.745 9.16001 15.335 10.93 15.745L11.56 17.845ZM21.85 11.855C21.85 12.155 21.84 12.455 21.81 12.755L19.84 12.165C19.85 12.065 19.85 11.955 19.85 11.855C19.85 7.43501 16.27 3.85501 11.85 3.85501C7.43001 3.85501 3.85001 7.43501 3.85001 11.855C3.85001 16.275 7.43001 19.855 11.85 19.855C11.95 19.855 12.06 19.855 12.16 19.845L12.75 21.815C12.45 21.845 12.15 21.855 11.85 21.855C6.33001 21.855 1.85001 17.375 1.85001 11.855C1.85001 6.33501 6.33001 1.85501 11.85 1.85501C17.37 1.85501 21.85 6.33501 21.85 11.855ZM18.08 16.115L20.35 15.355C20.81 15.205 20.8 14.545 20.34 14.405L12.74 12.125C12.36 12.015 12 12.365 12.12 12.745L14.4 20.345C14.54 20.815 15.2 20.825 15.35 20.355L16.11 18.085L20.02 21.995C20.22 22.195 20.53 22.195 20.73 21.995L22 20.725C22.2 20.525 22.2 20.215 22 20.015L18.08 16.115Z" })));
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AdsClickIcon = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const AdsClickIcon = (props) => {
9
+ return (react_1.default.createElement("svg", { fill: "#4f4f4f", height: "24", width: "24", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", ...props },
10
+ react_1.default.createElement("path", { d: "M11.56 17.845C8.38001 17.695 5.85001 15.075 5.85001 11.855C5.85001 8.54501 8.54001 5.85501 11.85 5.85501C15.07 5.85501 17.69 8.38501 17.84 11.565L15.74 10.935C15.33 9.16501 13.74 7.85501 11.85 7.85501C9.64001 7.85501 7.85001 9.64501 7.85001 11.855C7.85001 13.745 9.16001 15.335 10.93 15.745L11.56 17.845ZM21.85 11.855C21.85 12.155 21.84 12.455 21.81 12.755L19.84 12.165C19.85 12.065 19.85 11.955 19.85 11.855C19.85 7.43501 16.27 3.85501 11.85 3.85501C7.43001 3.85501 3.85001 7.43501 3.85001 11.855C3.85001 16.275 7.43001 19.855 11.85 19.855C11.95 19.855 12.06 19.855 12.16 19.845L12.75 21.815C12.45 21.845 12.15 21.855 11.85 21.855C6.33001 21.855 1.85001 17.375 1.85001 11.855C1.85001 6.33501 6.33001 1.85501 11.85 1.85501C17.37 1.85501 21.85 6.33501 21.85 11.855ZM18.08 16.115L20.35 15.355C20.81 15.205 20.8 14.545 20.34 14.405L12.74 12.125C12.36 12.015 12 12.365 12.12 12.745L14.4 20.345C14.54 20.815 15.2 20.825 15.35 20.355L16.11 18.085L20.02 21.995C20.22 22.195 20.53 22.195 20.73 21.995L22 20.725C22.2 20.525 22.2 20.215 22 20.015L18.08 16.115Z" })));
11
+ };
12
+ exports.AdsClickIcon = AdsClickIcon;
@@ -1,5 +1,12 @@
1
- import React from 'react';
2
- export const ArrowDownIcon = (props) => {
3
- return (React.createElement("svg", { fill: "#4f4f4f", height: "25", width: "24", viewBox: "0 0 24 25", xmlns: "http://www.w3.org/2000/svg", ...props },
4
- React.createElement("path", { d: "M8.12459 9.49953L12.0046 13.3795L15.8846 9.49953C16.2746 9.10953 16.9046 9.10953 17.2946 9.49953C17.6846 9.88953 17.6846 10.5195 17.2946 10.9095L12.7046 15.4995C12.3146 15.8895 11.6846 15.8895 11.2946 15.4995L6.70459 10.9095C6.51734 10.7227 6.41211 10.469 6.41211 10.2045C6.41211 9.94001 6.51734 9.68636 6.70459 9.49953C7.09459 9.11953 7.73459 9.10953 8.12459 9.49953Z" })));
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArrowDownIcon = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ArrowDownIcon = (props) => {
9
+ return (react_1.default.createElement("svg", { fill: "#4f4f4f", height: "25", width: "24", viewBox: "0 0 24 25", xmlns: "http://www.w3.org/2000/svg", ...props },
10
+ react_1.default.createElement("path", { d: "M8.12459 9.49953L12.0046 13.3795L15.8846 9.49953C16.2746 9.10953 16.9046 9.10953 17.2946 9.49953C17.6846 9.88953 17.6846 10.5195 17.2946 10.9095L12.7046 15.4995C12.3146 15.8895 11.6846 15.8895 11.2946 15.4995L6.70459 10.9095C6.51734 10.7227 6.41211 10.469 6.41211 10.2045C6.41211 9.94001 6.51734 9.68636 6.70459 9.49953C7.09459 9.11953 7.73459 9.10953 8.12459 9.49953Z" })));
11
+ };
12
+ exports.ArrowDownIcon = ArrowDownIcon;
@@ -1,5 +1,12 @@
1
- import React from 'react';
2
- export const CircledLoopIcon = (props) => {
3
- return (React.createElement("svg", { fill: "none", height: "16", viewBox: "0 0 16 16", width: "16", xmlns: "http://www.w3.org/2000/svg", ...props },
4
- React.createElement("path", { d: "M8 0.5C3.86 0.5 0.5 3.86 0.5 8C0.5 12.14 3.86 15.5 8 15.5C12.14 15.5 15.5 12.14 15.5 8C15.5 3.86 12.14 0.5 8 0.5ZM8 14C4.6925 14 2 11.3075 2 8C2 4.6925 4.6925 2 8 2C11.3075 2 14 4.6925 14 8C14 11.3075 11.3075 14 8 14ZM11.1275 10.07L10.3025 9.245C10.835 8.2475 10.7 6.9875 9.86 6.1475C9.3425 5.63 8.675 5.375 8 5.375C7.9775 5.375 7.955 5.3825 7.9325 5.3825L8.75 6.2L7.955 6.995L5.8325 4.8725L7.955 2.75L8.75 3.545L8.03 4.265C8.9825 4.2725 9.9275 4.625 10.655 5.345C11.93 6.6275 12.0875 8.615 11.1275 10.07ZM10.1675 11.1275L8.045 13.25L7.25 12.455L7.9625 11.7425C7.0175 11.735 6.0725 11.3675 5.3525 10.6475C4.07 9.365 3.9125 7.385 4.8725 5.93L5.6975 6.755C5.165 7.7525 5.3 9.0125 6.14 9.8525C6.665 10.3775 7.3625 10.6325 8.06 10.61L7.25 9.8L8.045 9.005L10.1675 11.1275Z", fill: "#949494" })));
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CircledLoopIcon = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const CircledLoopIcon = (props) => {
9
+ return (react_1.default.createElement("svg", { fill: "none", height: "16", viewBox: "0 0 16 16", width: "16", xmlns: "http://www.w3.org/2000/svg", ...props },
10
+ react_1.default.createElement("path", { d: "M8 0.5C3.86 0.5 0.5 3.86 0.5 8C0.5 12.14 3.86 15.5 8 15.5C12.14 15.5 15.5 12.14 15.5 8C15.5 3.86 12.14 0.5 8 0.5ZM8 14C4.6925 14 2 11.3075 2 8C2 4.6925 4.6925 2 8 2C11.3075 2 14 4.6925 14 8C14 11.3075 11.3075 14 8 14ZM11.1275 10.07L10.3025 9.245C10.835 8.2475 10.7 6.9875 9.86 6.1475C9.3425 5.63 8.675 5.375 8 5.375C7.9775 5.375 7.955 5.3825 7.9325 5.3825L8.75 6.2L7.955 6.995L5.8325 4.8725L7.955 2.75L8.75 3.545L8.03 4.265C8.9825 4.2725 9.9275 4.625 10.655 5.345C11.93 6.6275 12.0875 8.615 11.1275 10.07ZM10.1675 11.1275L8.045 13.25L7.25 12.455L7.9625 11.7425C7.0175 11.735 6.0725 11.3675 5.3525 10.6475C4.07 9.365 3.9125 7.385 4.8725 5.93L5.6975 6.755C5.165 7.7525 5.3 9.0125 6.14 9.8525C6.665 10.3775 7.3625 10.6325 8.06 10.61L7.25 9.8L8.045 9.005L10.1675 11.1275Z", fill: "#949494" })));
11
+ };
12
+ exports.CircledLoopIcon = CircledLoopIcon;
@@ -1,43 +1,71 @@
1
- import React, { useCallback, useState } from 'react';
2
- import SourceList from '../SourceList/SourceList';
3
- import ResourceLauncher from '../ResourceLauncher/ResourceLauncher';
4
- import SourceDropdownContainer from '../SourceDropdownContainer/SourceDropdownContainer';
5
- import SourceDropdown from '../SourceDropdown/SourceDropdown';
6
- import { PluginLaunchModeType, } from '../types';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const SourceList_1 = __importDefault(require("../SourceList/SourceList"));
31
+ const ResourceLauncher_1 = __importDefault(require("../ResourceLauncher/ResourceLauncher"));
32
+ const SourceDropdownContainer_1 = __importDefault(require("../SourceDropdownContainer/SourceDropdownContainer"));
33
+ const SourceDropdown_1 = __importDefault(require("../SourceDropdown/SourceDropdown"));
34
+ const types_1 = require("../types");
7
35
  function MainContainer({ title, titleAriaProps, allowedTypes, sources, selectedSource, onSourceSelect, onChange, onClose, preselectedResource, plugin, pluginMode, searchEnabled, }) {
8
- const [headerPortal, setHeaderPortal] = useState(null);
9
- const pluginToRender = pluginMode ? pluginMode.type : PluginLaunchModeType.Browse; // Cant default a 'null' property in signature so set it here
36
+ const [headerPortal, setHeaderPortal] = (0, react_1.useState)(null);
37
+ const pluginToRender = pluginMode ? pluginMode.type : types_1.PluginLaunchModeType.Browse; // Cant default a 'null' property in signature so set it here
10
38
  const SourceBrowser = plugin?.sourceBrowserComponent();
11
39
  const SourceSearch = plugin?.sourceSearchComponent();
12
40
  // Can't use a useRef as it wont update on change when a source is selected, so need to use a ref callback to store in state
13
- const setHeaderPortalRef = useCallback((node) => {
41
+ const setHeaderPortalRef = (0, react_1.useCallback)((node) => {
14
42
  if (node !== null) {
15
43
  setHeaderPortal(node);
16
44
  }
17
45
  }, [setHeaderPortal]);
18
46
  // MainContainer will either render the source list view if no source is set or the plugins UI if a source has been selected
19
- return (React.createElement("div", { className: "relative flex flex-col h-full text-gray-800" },
20
- React.createElement("div", { className: "flex items-center py-3 pl-6 pr-10 min-h-[68px]" },
21
- React.createElement("h2", { ...titleAriaProps, className: "text-xl leading-6 text-gray-800 font-semibold mr-6" }, title),
22
- plugin && selectedSource && (React.createElement(React.Fragment, null,
23
- plugin.createHeaderPortal && React.createElement("div", { ref: setHeaderPortalRef, className: "squiz-rb-plugin" }),
24
- !plugin.createHeaderPortal && sources.length > 1 && (React.createElement(SourceDropdownContainer, { isCollapsed: false, onExpand: () => { } },
25
- React.createElement("div", { className: `border-l border-blue-200 pl-1 w-[204px]` },
26
- React.createElement(SourceDropdown, { sources: sources, selectedSource: selectedSource, onSourceSelect: onSourceSelect })))))),
27
- React.createElement("button", { type: "button", "aria-label": `Close ${title} dialog`, onClick: onClose, className: "absolute top-2 right-2 p-2.5 rounded hover:bg-blue-100 focus:bg-blue-100" },
28
- React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
29
- React.createElement("path", { d: "M13.3 0.710017C13.1131 0.522765 12.8595 0.417532 12.595 0.417532C12.3305 0.417532 12.0768 0.522765 11.89 0.710017L6.99997 5.59002L2.10997 0.700017C1.92314 0.512765 1.66949 0.407532 1.40497 0.407532C1.14045 0.407532 0.886802 0.512765 0.699971 0.700017C0.309971 1.09002 0.309971 1.72002 0.699971 2.11002L5.58997 7.00002L0.699971 11.89C0.309971 12.28 0.309971 12.91 0.699971 13.3C1.08997 13.69 1.71997 13.69 2.10997 13.3L6.99997 8.41002L11.89 13.3C12.28 13.69 12.91 13.69 13.3 13.3C13.69 12.91 13.69 12.28 13.3 11.89L8.40997 7.00002L13.3 2.11002C13.68 1.73002 13.68 1.09002 13.3 0.710017Z", fill: "currentColor" })))),
30
- React.createElement("div", { className: "border-t border-gray-300 overflow-y-hidden" },
31
- plugin && selectedSource && (React.createElement("div", { className: `squiz-rb-plugin squiz-rb-plugin--${pluginMode?.type}` },
32
- pluginToRender === PluginLaunchModeType.Browse && SourceBrowser && (React.createElement(SourceBrowser, { source: selectedSource, sources: sources, onSourceSelect: onSourceSelect, allowedTypes: allowedTypes, headerPortal: plugin.createHeaderPortal && headerPortal ? headerPortal : undefined, searchEnabled: searchEnabled, preselectedResource: preselectedResource || undefined, browseTo: pluginMode?.args?.browseTo, onSelected: (resource) => {
47
+ return (react_1.default.createElement("div", { className: "relative flex flex-col h-full text-gray-800" },
48
+ react_1.default.createElement("div", { className: "flex items-center py-3 pl-6 pr-10 min-h-[68px]" },
49
+ react_1.default.createElement("h2", { ...titleAriaProps, className: "text-xl leading-6 text-gray-800 font-semibold mr-6" }, title),
50
+ plugin && selectedSource && (react_1.default.createElement(react_1.default.Fragment, null,
51
+ plugin.createHeaderPortal && react_1.default.createElement("div", { ref: setHeaderPortalRef, className: "squiz-rb-plugin" }),
52
+ !plugin.createHeaderPortal && sources.length > 1 && (react_1.default.createElement(SourceDropdownContainer_1.default, { isCollapsed: false, onExpand: () => { } },
53
+ react_1.default.createElement("div", { className: `border-l border-blue-200 pl-1 w-[204px]` },
54
+ react_1.default.createElement(SourceDropdown_1.default, { sources: sources, selectedSource: selectedSource, onSourceSelect: onSourceSelect })))))),
55
+ react_1.default.createElement("button", { type: "button", "aria-label": `Close ${title} dialog`, onClick: onClose, className: "absolute top-2 right-2 p-2.5 rounded hover:bg-blue-100 focus:bg-blue-100" },
56
+ react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
57
+ react_1.default.createElement("path", { d: "M13.3 0.710017C13.1131 0.522765 12.8595 0.417532 12.595 0.417532C12.3305 0.417532 12.0768 0.522765 11.89 0.710017L6.99997 5.59002L2.10997 0.700017C1.92314 0.512765 1.66949 0.407532 1.40497 0.407532C1.14045 0.407532 0.886802 0.512765 0.699971 0.700017C0.309971 1.09002 0.309971 1.72002 0.699971 2.11002L5.58997 7.00002L0.699971 11.89C0.309971 12.28 0.309971 12.91 0.699971 13.3C1.08997 13.69 1.71997 13.69 2.10997 13.3L6.99997 8.41002L11.89 13.3C12.28 13.69 12.91 13.69 13.3 13.3C13.69 12.91 13.69 12.28 13.3 11.89L8.40997 7.00002L13.3 2.11002C13.68 1.73002 13.68 1.09002 13.3 0.710017Z", fill: "currentColor" })))),
58
+ react_1.default.createElement("div", { className: "border-t border-gray-300 overflow-y-hidden" },
59
+ plugin && selectedSource && (react_1.default.createElement("div", { className: `squiz-rb-plugin squiz-rb-plugin--${pluginMode?.type}` },
60
+ pluginToRender === types_1.PluginLaunchModeType.Browse && SourceBrowser && (react_1.default.createElement(SourceBrowser, { source: selectedSource, sources: sources, onSourceSelect: onSourceSelect, allowedTypes: allowedTypes, headerPortal: plugin.createHeaderPortal && headerPortal ? headerPortal : undefined, searchEnabled: searchEnabled, preselectedResource: preselectedResource || undefined, browseTo: pluginMode?.args?.browseTo, onSelected: (resource) => {
33
61
  onChange(resource);
34
62
  onClose();
35
63
  } })),
36
- pluginToRender === PluginLaunchModeType.Search && SourceSearch && (React.createElement(SourceSearch, { source: selectedSource, sources: sources, onSourceSelect: onSourceSelect, allowedTypes: allowedTypes, headerPortal: plugin.createHeaderPortal && headerPortal ? headerPortal : undefined, searchEnabled: searchEnabled, query: pluginMode?.args?.query, onSelected: (resource) => {
64
+ pluginToRender === types_1.PluginLaunchModeType.Search && SourceSearch && (react_1.default.createElement(SourceSearch, { source: selectedSource, sources: sources, onSourceSelect: onSourceSelect, allowedTypes: allowedTypes, headerPortal: plugin.createHeaderPortal && headerPortal ? headerPortal : undefined, searchEnabled: searchEnabled, query: pluginMode?.args?.query, onSelected: (resource) => {
37
65
  onChange(resource);
38
66
  onClose();
39
67
  } })))),
40
- !selectedSource && searchEnabled && React.createElement(ResourceLauncher, { sources: sources, onSourceSelect: onSourceSelect }),
41
- !selectedSource && !searchEnabled && React.createElement(SourceList, { sources: sources, onSourceSelect: onSourceSelect }))));
68
+ !selectedSource && searchEnabled && react_1.default.createElement(ResourceLauncher_1.default, { sources: sources, onSourceSelect: onSourceSelect }),
69
+ !selectedSource && !searchEnabled && react_1.default.createElement(SourceList_1.default, { sources: sources, onSourceSelect: onSourceSelect }))));
42
70
  }
43
- export default MainContainer;
71
+ exports.default = MainContainer;
@@ -1,12 +1,19 @@
1
- import React from 'react';
2
- import { ResourceBrowserInput } from '../ResourceBrowserInput/ResourceBrowserInput';
3
- import { AuthProvider } from '../ResourceBrowserContext/AuthProvider';
4
- export const PluginRender = ({ render, ...props }) => {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PluginRender = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ResourceBrowserInput_1 = require("../ResourceBrowserInput/ResourceBrowserInput");
9
+ const AuthProvider_1 = require("../ResourceBrowserContext/AuthProvider");
10
+ const PluginRender = ({ render, ...props }) => {
5
11
  if (render) {
6
- return (React.createElement(AuthProvider, { authConfig: props.source },
7
- React.createElement(ResourceBrowserInput, { ...props })));
12
+ return (react_1.default.createElement(AuthProvider_1.AuthProvider, { authConfig: props.source },
13
+ react_1.default.createElement(ResourceBrowserInput_1.ResourceBrowserInput, { ...props })));
8
14
  }
9
15
  else {
10
- return React.createElement(React.Fragment, null);
16
+ return react_1.default.createElement(react_1.default.Fragment, null);
11
17
  }
12
18
  };
19
+ exports.PluginRender = PluginRender;
@@ -1,18 +1,46 @@
1
- import React, { createContext, useContext } from 'react';
2
- import { useAuth } from '../Hooks/useAuth';
3
- export const AuthContext = createContext(undefined);
4
- export const useAuthContext = () => {
5
- const context = useContext(AuthContext);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.AuthProvider = exports.useAuthContext = exports.AuthContext = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const useAuth_1 = require("../Hooks/useAuth");
29
+ exports.AuthContext = (0, react_1.createContext)(undefined);
30
+ const useAuthContext = () => {
31
+ const context = (0, react_1.useContext)(exports.AuthContext);
6
32
  if (!context) {
7
33
  throw new Error('useAuthContext must be used within an AuthProvider');
8
34
  }
9
35
  return context;
10
36
  };
11
- export const AuthProvider = ({ children, authConfig }) => {
37
+ exports.useAuthContext = useAuthContext;
38
+ const AuthProvider = ({ children, authConfig }) => {
12
39
  const authConfiguration = authConfig;
13
- const auth = useAuth(authConfiguration?.configuration);
40
+ const auth = (0, useAuth_1.useAuth)(authConfiguration?.configuration);
14
41
  if (!authConfiguration?.configuration) {
15
- return React.createElement(React.Fragment, null, children);
42
+ return react_1.default.createElement(react_1.default.Fragment, null, children);
16
43
  }
17
- return React.createElement(AuthContext.Provider, { value: auth }, children);
44
+ return react_1.default.createElement(exports.AuthContext.Provider, { value: auth }, children);
18
45
  };
46
+ exports.AuthProvider = AuthProvider;
@@ -1,26 +1,56 @@
1
- import React, { useMemo } from 'react';
2
- import pMemoize from 'p-memoize';
3
- import ExpiryMap from 'expiry-map';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ResourceBrowserContextProvider = exports.ResourceBrowserContext = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const p_memoize_1 = __importDefault(require("p-memoize"));
32
+ const expiry_map_1 = __importDefault(require("expiry-map"));
4
33
  /**
5
34
  * @internal Direct usage of this object is discouraged. It will be privated in a future major version.
6
35
  * Please use ResourceBrowserContextProvider instead.
7
36
  */
8
- export const ResourceBrowserContext = React.createContext({
37
+ exports.ResourceBrowserContext = react_1.default.createContext({
9
38
  onRequestSources: () => {
10
39
  throw new Error('onRequestSources has not been configured.');
11
40
  },
12
41
  searchEnabled: false,
13
42
  plugins: [],
14
43
  });
15
- export const ResourceBrowserContextProvider = (props) => {
44
+ const ResourceBrowserContextProvider = (props) => {
16
45
  const CACHE_DURATION = 30000; // 30 seconds
17
46
  const { value: { onRequestSources, ...other }, children, } = props;
18
- const cache = new ExpiryMap(CACHE_DURATION);
19
- const memoized = useMemo(() => ({
20
- onRequestSources: pMemoize(onRequestSources, {
47
+ const cache = new expiry_map_1.default(CACHE_DURATION);
48
+ const memoized = (0, react_1.useMemo)(() => ({
49
+ onRequestSources: (0, p_memoize_1.default)(onRequestSources, {
21
50
  cache,
22
51
  cacheKey: () => 'onRequestSources',
23
52
  }),
24
53
  }), [onRequestSources]);
25
- return React.createElement(ResourceBrowserContext.Provider, { value: { ...memoized, ...other } }, children);
54
+ return react_1.default.createElement(exports.ResourceBrowserContext.Provider, { value: { ...memoized, ...other } }, children);
26
55
  };
56
+ exports.ResourceBrowserContextProvider = ResourceBrowserContextProvider;
@@ -1,9 +1,16 @@
1
- import React from 'react';
2
- import MainContainer from '../MainContainer/MainContainer';
3
- import { ResourcePicker } from '../ResourcePicker/ResourcePicker';
4
- export const ResourceBrowserInput = ({ modalTitle, allowedTypes, onChange, value, useResource, isDisabled, onClear, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }) => {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ResourceBrowserInput = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const MainContainer_1 = __importDefault(require("../MainContainer/MainContainer"));
9
+ const ResourcePicker_1 = require("../ResourcePicker/ResourcePicker");
10
+ const ResourceBrowserInput = ({ modalTitle, allowedTypes, onChange, value, useResource, isDisabled, onClear, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }) => {
5
11
  const { data: resource, error: resourceError, isLoading: isResourceLoading } = useResource(value?.resourceId || null, source);
6
12
  const defaultOnClear = () => onChange(null);
7
13
  const onClearFunction = onClear ?? defaultOnClear;
8
- return (React.createElement(ResourcePicker, { resource: resource, plugin: plugin, allowedTypes: allowedTypes, error: resourceError || error, isLoading: isResourceLoading || isLoading, isDisabled: isDisabled, onClear: onClearFunction, isModalOpen: isModalOpen, onModalStateChange: onModalStateChange }, (onClose, titleProps) => (React.createElement(MainContainer, { selectedSource: source, sources: sources, preselectedResource: resource, plugin: plugin, pluginMode: pluginMode, searchEnabled: searchEnabled, title: modalTitle, titleAriaProps: titleProps, allowedTypes: allowedTypes, onSourceSelect: setSource, onClose: onClose, onChange: onChange }))));
14
+ return (react_1.default.createElement(ResourcePicker_1.ResourcePicker, { resource: resource, plugin: plugin, allowedTypes: allowedTypes, error: resourceError || error, isLoading: isResourceLoading || isLoading, isDisabled: isDisabled, onClear: onClearFunction, isModalOpen: isModalOpen, onModalStateChange: onModalStateChange }, (onClose, titleProps) => (react_1.default.createElement(MainContainer_1.default, { selectedSource: source, sources: sources, preselectedResource: resource, plugin: plugin, pluginMode: pluginMode, searchEnabled: searchEnabled, title: modalTitle, titleAriaProps: titleProps, allowedTypes: allowedTypes, onSourceSelect: setSource, onClose: onClose, onChange: onChange }))));
9
15
  };
16
+ exports.ResourceBrowserInput = ResourceBrowserInput;
@@ -1,11 +1,17 @@
1
- import React from 'react';
2
- import { PluginLaunchModeType } from '../types';
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const types_1 = require("../types");
3
8
  function ResourceLauncher({ sources, onSourceSelect }) {
4
- return (React.createElement("div", { className: "overflow-y-scroll w-screen max-w-[400px] min-h-[290px] flex-1 grow-[3] border-r border-gray-300 bg-gray-100 pl-6 pr-6 pb-6 pt-4" },
5
- React.createElement("ul", { tabIndex: -1, "aria-label": `sources list`, className: "flex flex-col bg-gray-100 min-h-full focus-visible:outline-0" }, sources.map((source, index) => {
9
+ return (react_1.default.createElement("div", { className: "overflow-y-scroll w-screen max-w-[400px] min-h-[290px] flex-1 grow-[3] border-r border-gray-300 bg-gray-100 pl-6 pr-6 pb-6 pt-4" },
10
+ react_1.default.createElement("ul", { tabIndex: -1, "aria-label": `sources list`, className: "flex flex-col bg-gray-100 min-h-full focus-visible:outline-0" }, sources.map((source, index) => {
6
11
  const SourceLauncher = source.plugin.renderResourceLauncher();
7
- return (React.createElement("li", { key: index, className: "flex items-stretch relative" },
8
- React.createElement(SourceLauncher, { source: source, onSearch: (query) => onSourceSelect(source, { type: PluginLaunchModeType.Search, args: { query } }), onBrowse: (browseTo) => onSourceSelect(source, { type: PluginLaunchModeType.Browse, args: { browseTo } }) })));
12
+ return (react_1.default.createElement("li", { key: index, className: "flex items-stretch relative" },
13
+ react_1.default.createElement("div", { className: `squiz-rb-plugin squiz-rb-plugin--${source.plugin?.type} w-full` },
14
+ react_1.default.createElement(SourceLauncher, { source: source, onSearch: (query) => onSourceSelect(source, { type: types_1.PluginLaunchModeType.Search, args: { query } }), onBrowse: (browseTo) => onSourceSelect(source, { type: types_1.PluginLaunchModeType.Browse, args: { browseTo } }) }))));
9
15
  }))));
10
16
  }
11
- export default ResourceLauncher;
17
+ exports.default = ResourceLauncher;
@@ -1,25 +1,32 @@
1
- import React from 'react';
2
- import AdsClickRoundedIcon from '@mui/icons-material/AdsClickRounded';
3
- import AddCircleOutlineRoundedIcon from '@mui/icons-material/AddCircleOutlineRounded';
4
- import PhotoLibraryRoundedIcon from '@mui/icons-material/PhotoLibraryRounded';
5
- import { ModalTrigger } from '@squiz/resource-browser-ui-lib';
6
- import { ErrorState } from './States/Error';
7
- import { LoadingState } from './States/Loading';
8
- import { SelectedState } from './States/Selected';
9
- import { useSelectedState } from '../Hooks/useSelectedState';
10
- import clsx from 'clsx';
11
- export const ResourcePicker = ({ resource, plugin, allowedTypes, error: externalError, isLoading: isExternalLoading, isDisabled, children, onClear, isModalOpen, onModalStateChange, }) => {
12
- const { data: selectedState, error, isLoading } = useSelectedState({ resource, plugin });
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ResourcePicker = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const AdsClickRounded_1 = __importDefault(require("@mui/icons-material/AdsClickRounded"));
9
+ const AddCircleOutlineRounded_1 = __importDefault(require("@mui/icons-material/AddCircleOutlineRounded"));
10
+ const PhotoLibraryRounded_1 = __importDefault(require("@mui/icons-material/PhotoLibraryRounded"));
11
+ const resource_browser_ui_lib_1 = require("@squiz/resource-browser-ui-lib");
12
+ const Error_1 = require("./States/Error");
13
+ const Loading_1 = require("./States/Loading");
14
+ const Selected_1 = require("./States/Selected");
15
+ const useSelectedState_1 = require("../Hooks/useSelectedState");
16
+ const clsx_1 = __importDefault(require("clsx"));
17
+ const ResourcePicker = ({ resource, plugin, allowedTypes, error: externalError, isLoading: isExternalLoading, isDisabled, children, onClear, isModalOpen, onModalStateChange, }) => {
18
+ const { data: selectedState, error, isLoading } = (0, useSelectedState_1.useSelectedState)({ resource, plugin });
13
19
  const isImagePicker = allowedTypes && allowedTypes.length === 1 && allowedTypes.includes('image');
14
20
  const isEmpty = resource === null && !isExternalLoading && !externalError;
15
- return (React.createElement("div", { className: clsx('resource-picker', isDisabled && 'resource-picker--disabled') },
16
- isImagePicker ? (React.createElement(PhotoLibraryRoundedIcon, { "aria-hidden": true, className: "w-6 h-6" })) : (React.createElement(AdsClickRoundedIcon, { "aria-hidden": true, className: "w-6 h-6" })),
17
- isEmpty ? (React.createElement(ModalTrigger, { overlayTriggerState: {
21
+ return (react_1.default.createElement("div", { className: (0, clsx_1.default)('resource-picker', isDisabled && 'resource-picker--disabled') },
22
+ isImagePicker ? (react_1.default.createElement(PhotoLibraryRounded_1.default, { "aria-hidden": true, className: "w-6 h-6" })) : (react_1.default.createElement(AdsClickRounded_1.default, { "aria-hidden": true, className: "w-6 h-6" })),
23
+ isEmpty ? (react_1.default.createElement(resource_browser_ui_lib_1.ModalTrigger, { overlayTriggerState: {
18
24
  isOpen: isModalOpen,
19
25
  onOpenChange: onModalStateChange,
20
- }, showLabel: true, label: isImagePicker ? `Choose image` : `Choose asset`, icon: React.createElement(AddCircleOutlineRoundedIcon, { "aria-hidden": true, className: `!w-4 !h-4 text-blue-300 ${isDisabled ? 'text-gray-600' : ''}` }), isDisabled: isDisabled, scope: "squiz-rb-scope" }, children)) : (React.createElement("div", { className: "resource-picker-info" },
21
- React.createElement("div", { className: "resource-picker-info__layout" },
22
- (isExternalLoading || isLoading) && React.createElement(LoadingState, null),
23
- (externalError || error) && (React.createElement(ErrorState, { error: externalError || error, isDisabled: isDisabled, onClear: onClear })),
24
- !isExternalLoading && resource && selectedState && (React.createElement(SelectedState, { isModalOpen: isModalOpen, onModalStateChange: onModalStateChange, resource: resource, showThumbnail: selectedState?.showThumbnail || false, icon: selectedState?.icon, label: selectedState?.label, description: selectedState?.description, isDisabled: isDisabled, onClear: onClear, resourcePickerContainer: children })))))));
26
+ }, showLabel: true, label: isImagePicker ? `Choose image` : `Choose asset`, icon: react_1.default.createElement(AddCircleOutlineRounded_1.default, { "aria-hidden": true, className: `!w-4 !h-4 text-blue-300 ${isDisabled ? 'text-gray-600' : ''}` }), isDisabled: isDisabled, scope: "squiz-rb-scope" }, children)) : (react_1.default.createElement("div", { className: "resource-picker-info" },
27
+ react_1.default.createElement("div", { className: "resource-picker-info__layout" },
28
+ (isExternalLoading || isLoading) && react_1.default.createElement(Loading_1.LoadingState, null),
29
+ (externalError || error) && (react_1.default.createElement(Error_1.ErrorState, { error: externalError || error, isDisabled: isDisabled, onClear: onClear })),
30
+ !isExternalLoading && resource && selectedState && (react_1.default.createElement(Selected_1.SelectedState, { isModalOpen: isModalOpen, onModalStateChange: onModalStateChange, resource: resource, showThumbnail: selectedState?.showThumbnail || false, icon: selectedState?.icon, label: selectedState?.label, description: selectedState?.description, isDisabled: isDisabled, onClear: onClear, resourcePickerContainer: children })))))));
25
31
  };
32
+ exports.ResourcePicker = ResourcePicker;
@@ -1,6 +1,13 @@
1
- import React from 'react';
2
- import { Icon, ResetButton } from '@squiz/generic-browser-lib';
3
- export const ErrorState = ({ error, isDisabled, onClear }) => (React.createElement(React.Fragment, null,
4
- React.createElement(Icon, { icon: 'error', "aria-hidden": true, className: "w-6 h-6 text-red-300" }),
5
- React.createElement("div", { className: "text-red-300 w-full" }, error.message),
6
- React.createElement(ResetButton, { isDisabled: isDisabled, onClick: onClear })));
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ErrorState = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
9
+ const ErrorState = ({ error, isDisabled, onClear }) => (react_1.default.createElement(react_1.default.Fragment, null,
10
+ react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'error', "aria-hidden": true, className: "w-6 h-6 text-red-300" }),
11
+ react_1.default.createElement("div", { className: "text-red-300 w-full" }, error.message),
12
+ react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })));
13
+ exports.ErrorState = ErrorState;
@@ -1,4 +1,11 @@
1
- import React from 'react';
2
- import { Spinner } from '@squiz/generic-browser-lib';
3
- export const LoadingState = () => (React.createElement("div", { className: "col-start-2 col-end-2" },
4
- React.createElement(Spinner, { label: "Loading selection", className: "m-2" })));
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LoadingState = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
9
+ const LoadingState = () => (react_1.default.createElement("div", { className: "col-start-2 col-end-2" },
10
+ react_1.default.createElement(generic_browser_lib_1.Spinner, { label: "Loading selection", className: "m-2" })));
11
+ exports.LoadingState = LoadingState;
@@ -1,20 +1,27 @@
1
- import React from 'react';
2
- import { ResetButton } from '@squiz/generic-browser-lib';
3
- import { ModalTrigger } from '@squiz/resource-browser-ui-lib';
4
- import { CircledLoopIcon } from '../../Icons/CircledLoopIcon';
5
- export const SelectedState = ({ resource, showThumbnail, icon, label, description, isDisabled, onClear, resourcePickerContainer, isModalOpen, onModalStateChange, }) => {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SelectedState = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
9
+ const resource_browser_ui_lib_1 = require("@squiz/resource-browser-ui-lib");
10
+ const CircledLoopIcon_1 = require("../../Icons/CircledLoopIcon");
11
+ const SelectedState = ({ resource, showThumbnail, icon, label, description, isDisabled, onClear, resourcePickerContainer, isModalOpen, onModalStateChange, }) => {
6
12
  const modalController = {
7
13
  isOpen: isModalOpen,
8
14
  onOpenChange: onModalStateChange,
9
15
  };
10
- const replaceAsset = (React.createElement(ModalTrigger, { overlayTriggerState: isModalOpen && onModalStateChange ? modalController : undefined, showLabel: false, label: "Replace selection", containerClasses: "text-gray-500 hover:text-gray-800 focus:text-gray-800 disabled:text-gray-500 disabled:cursor-not-allowed", icon: React.createElement(CircledLoopIcon, { "aria-hidden": true, className: "m-1" }), isDisabled: isDisabled, scope: "squiz-rb-scope" }, resourcePickerContainer));
11
- return (React.createElement(React.Fragment, null,
12
- showThumbnail && resource.squizImage ? (React.createElement("div", { className: "checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded" },
13
- React.createElement("img", { src: resource.squizImage.imageVariations.original.url || resource.url, className: "w-full h-full object-cover object-center", alt: resource.squizImage.name || resource.name }))) : (React.createElement("div", { className: "w-4 h-4 mt-1 flex self-start overflow-hidden" }, icon)),
14
- React.createElement("div", { className: "justify-self-start self-center w-full overflow-hidden break-words" },
16
+ const replaceAsset = (react_1.default.createElement(resource_browser_ui_lib_1.ModalTrigger, { overlayTriggerState: isModalOpen && onModalStateChange ? modalController : undefined, showLabel: false, label: "Replace selection", containerClasses: "text-gray-500 hover:text-gray-800 focus:text-gray-800 disabled:text-gray-500 disabled:cursor-not-allowed", icon: react_1.default.createElement(CircledLoopIcon_1.CircledLoopIcon, { "aria-hidden": true, className: "m-1" }), isDisabled: isDisabled, scope: "squiz-rb-scope" }, resourcePickerContainer));
17
+ return (react_1.default.createElement(react_1.default.Fragment, null,
18
+ showThumbnail && resource.squizImage ? (react_1.default.createElement("div", { className: "checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded" },
19
+ react_1.default.createElement("img", { src: resource.squizImage.imageVariations.original.url || resource.url, className: "w-full h-full object-cover object-center", alt: resource.squizImage.name || resource.name }))) : (react_1.default.createElement("div", { className: "w-4 h-4 mt-1 flex self-start overflow-hidden" }, icon)),
20
+ react_1.default.createElement("div", { className: "justify-self-start self-center w-full overflow-hidden break-words" },
15
21
  label,
16
22
  description),
17
- React.createElement("div", { className: "flex" },
23
+ react_1.default.createElement("div", { className: "flex" },
18
24
  replaceAsset,
19
- React.createElement(ResetButton, { isDisabled: isDisabled, onClick: onClear }))));
25
+ react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear }))));
20
26
  };
27
+ exports.SelectedState = SelectedState;
@@ -1,19 +1,44 @@
1
- import React, { useRef, useState } from 'react';
2
- import { Icon, uuid } from '@squiz/generic-browser-lib';
3
- import { useFocusWithin, useKeyboard } from 'react-aria';
4
- import { ArrowDownIcon } from '../Icons/ArrowDownIcon';
5
- export default function SourceDropdown({ sources, selectedSource, onSourceSelect, }) {
6
- const [uniqueId] = useState(uuid());
7
- const buttonRef = useRef(null);
8
- const [isOpen, setIsOpen] = useState(false);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const react_1 = __importStar(require("react"));
27
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
28
+ const react_aria_1 = require("react-aria");
29
+ const ArrowDownIcon_1 = require("../Icons/ArrowDownIcon");
30
+ function SourceDropdown({ sources, selectedSource, onSourceSelect, }) {
31
+ const [uniqueId] = (0, react_1.useState)((0, generic_browser_lib_1.uuid)());
32
+ const buttonRef = (0, react_1.useRef)(null);
33
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
9
34
  // Watch the focus and blur on the menu and close if focus leaves the control
10
- const { focusWithinProps } = useFocusWithin({
35
+ const { focusWithinProps } = (0, react_aria_1.useFocusWithin)({
11
36
  onBlurWithin: () => {
12
37
  setIsOpen(false);
13
38
  },
14
39
  });
15
40
  // Listen for Esc key within this element
16
- const { keyboardProps } = useKeyboard({
41
+ const { keyboardProps } = (0, react_aria_1.useKeyboard)({
17
42
  onKeyDown: (e) => {
18
43
  if (isOpen && e.key === 'Escape') {
19
44
  setIsOpen(false);
@@ -27,20 +52,21 @@ export default function SourceDropdown({ sources, selectedSource, onSourceSelect
27
52
  onSourceSelect(source);
28
53
  };
29
54
  if (!sources.length) {
30
- return React.createElement(React.Fragment, null);
55
+ return react_1.default.createElement(react_1.default.Fragment, null);
31
56
  }
32
- return (React.createElement("div", { ...focusWithinProps, ...keyboardProps, className: "relative w-full " },
33
- React.createElement("button", { ref: buttonRef, type: "button", "aria-label": "Source quick select", "aria-expanded": isOpen, "aria-controls": `${uniqueId}-button-menu`, onClick: () => setIsOpen(!isOpen), className: "relative flex items-center p-2 w-full rounded bg-blue-100 hover:bg-blue-150" },
34
- React.createElement("span", { className: "sr-only" }, "current source "),
35
- React.createElement("div", { className: "truncate max-w-[200px] text-md font-semibold text-blue-400" }, selectedSource.name),
36
- React.createElement(ArrowDownIcon, { "aria-hidden": true, className: "absolute right-2 fill-blue-300" })),
37
- React.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+8px)] w-[100%] bg-gray-100 border-1 shadow-md rounded border-gray-300 p-2 pb-0 overflow-y-scroll max-h-80 ${!isOpen ? 'hidden' : ''}` }, sources.map((source) => {
57
+ return (react_1.default.createElement("div", { ...focusWithinProps, ...keyboardProps, className: "relative w-full " },
58
+ react_1.default.createElement("button", { ref: buttonRef, type: "button", "aria-label": "Source quick select", "aria-expanded": isOpen, "aria-controls": `${uniqueId}-button-menu`, onClick: () => setIsOpen(!isOpen), className: "relative flex items-center p-2 w-full rounded bg-blue-100 hover:bg-blue-150" },
59
+ react_1.default.createElement("span", { className: "sr-only" }, "current source "),
60
+ react_1.default.createElement("div", { className: "truncate max-w-[200px] text-md font-semibold text-blue-400" }, selectedSource.name),
61
+ react_1.default.createElement(ArrowDownIcon_1.ArrowDownIcon, { "aria-hidden": true, className: "absolute right-2 fill-blue-300" })),
62
+ react_1.default.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+8px)] w-[100%] bg-gray-100 border-1 shadow-md rounded border-gray-300 p-2 pb-0 overflow-y-scroll max-h-80 ${!isOpen ? 'hidden' : ''}` }, sources.map((source) => {
38
63
  const { id, name, type } = source;
39
64
  const isSelectedSource = id === selectedSource.id;
40
- return (React.createElement("li", { key: id, className: "flex items-center text-sm font-semibold mb-2 bg-white rounded" },
41
- React.createElement("button", { type: "button", onClick: () => handleSourceClick(source), className: `relative grow flex items-center p-2 border-1 border-white rounded hover:bg-gray-50 hover:border-gray-300 focus:bg-gray-100` },
42
- React.createElement(Icon, { icon: type, "aria-label": type, className: "shrink-0 mr-2.5" }),
43
- React.createElement("span", { className: "text-left mr-7" }, name),
44
- isSelectedSource && (React.createElement(Icon, { icon: 'selected', "aria-label": "selected", className: "absolute right-4" })))));
65
+ return (react_1.default.createElement("li", { key: id, className: "flex items-center text-sm font-semibold mb-2 bg-white rounded" },
66
+ react_1.default.createElement("button", { type: "button", onClick: () => handleSourceClick(source), className: `relative grow flex items-center p-2 border-1 border-white rounded hover:bg-gray-50 hover:border-gray-300 focus:bg-gray-100` },
67
+ react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type, "aria-label": type, className: "shrink-0 mr-2.5" }),
68
+ react_1.default.createElement("span", { className: "text-left mr-7" }, name),
69
+ isSelectedSource && (react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'selected', "aria-label": "selected", className: "absolute right-4" })))));
45
70
  }))));
46
71
  }
72
+ exports.default = SourceDropdown;
@@ -1,12 +1,18 @@
1
- import React from 'react';
2
- import { AdsClickIcon } from '../Icons/AdsClickIcon';
3
- export default function SourceDropdownContainer({ children, isCollapsed, onExpand, }) {
4
- return (React.createElement("div", { className: "inline-flex rounded-lg p-1 bg-blue-100 min-h-[44px]" },
5
- isCollapsed && (React.createElement("button", { "aria-label": "Expand browse options", onClick: onExpand, className: "flex items-center" },
6
- React.createElement(AdsClickIcon, { "aria-hidden": true, className: "mx-2 fill-blue-300" }))),
7
- !isCollapsed && (React.createElement(React.Fragment, null,
8
- React.createElement("div", { className: "flex items-center pr-1" },
9
- React.createElement(AdsClickIcon, { "aria-hidden": true, className: "mx-2 fill-blue-300" }),
10
- React.createElement("span", { className: "sr-only" }, "Browse")),
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const AdsClickIcon_1 = require("../Icons/AdsClickIcon");
8
+ function SourceDropdownContainer({ children, isCollapsed, onExpand, }) {
9
+ return (react_1.default.createElement("div", { className: "inline-flex rounded-lg p-1 bg-blue-100 min-h-[44px]" },
10
+ isCollapsed && (react_1.default.createElement("button", { "aria-label": "Expand browse options", onClick: onExpand, className: "flex items-center" },
11
+ react_1.default.createElement(AdsClickIcon_1.AdsClickIcon, { "aria-hidden": true, className: "mx-2 fill-blue-300" }))),
12
+ !isCollapsed && (react_1.default.createElement(react_1.default.Fragment, null,
13
+ react_1.default.createElement("div", { className: "flex items-center pr-1" },
14
+ react_1.default.createElement(AdsClickIcon_1.AdsClickIcon, { "aria-hidden": true, className: "mx-2 fill-blue-300" }),
15
+ react_1.default.createElement("span", { className: "sr-only" }, "Browse")),
11
16
  children))));
12
17
  }
18
+ exports.default = SourceDropdownContainer;
@@ -1,16 +1,21 @@
1
- import React from 'react';
2
- import { Icon } from '@squiz/generic-browser-lib';
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
3
8
  function SourceList({ sources, onSourceSelect }) {
4
- return (React.createElement("div", { className: "overflow-y-scroll w-screen max-w-[400px] flex-1 grow-[3] border-r border-gray-300 bg-gray-100 pl-4.5 pr-4.5 pb-4.5 pt-3" },
5
- React.createElement("div", { className: "text-md font-semibold" }, "Select an environment to use"),
6
- React.createElement("ul", { tabIndex: -1, "aria-label": `environment list`, className: "flex flex-col bg-gray-100 min-h-full focus-visible:outline-0" }, sources.map((source, index) => {
7
- return (React.createElement("li", { key: index, className: "flex items-stretch relative" },
8
- React.createElement("button", { onClick: () => {
9
+ return (react_1.default.createElement("div", { className: "overflow-y-scroll w-screen max-w-[400px] flex-1 grow-[3] border-r border-gray-300 bg-gray-100 pl-4.5 pr-4.5 pb-4.5 pt-3" },
10
+ react_1.default.createElement("div", { className: "text-md font-semibold" }, "Select an environment to use"),
11
+ react_1.default.createElement("ul", { tabIndex: -1, "aria-label": `environment list`, className: "flex flex-col bg-gray-100 min-h-full focus-visible:outline-0" }, sources.map((source, index) => {
12
+ return (react_1.default.createElement("li", { key: index, className: "flex items-stretch relative" },
13
+ react_1.default.createElement("button", { onClick: () => {
9
14
  onSourceSelect(source);
10
15
  }, className: "w-full p-1 mt-3 bg-white border-1 border-grey-200 min-h-[64px] rounded-lg flex items-center text-md font-semibold" },
11
- React.createElement(Icon, { icon: source.type, className: "ml-4" }),
12
- React.createElement("span", { className: "line-clamp-2 text-left break-word ml-4" }, source.name || source.id),
13
- React.createElement(Icon, { icon: 'arrow-right', className: "absolute ml-1 right-4" }))));
16
+ react_1.default.createElement(generic_browser_lib_1.Icon, { icon: source.type, className: "ml-4" }),
17
+ react_1.default.createElement("span", { className: "line-clamp-2 text-left break-word ml-4" }, source.name || source.id),
18
+ react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'arrow-right', className: "absolute ml-1 right-4" }))));
14
19
  }))));
15
20
  }
16
- export default SourceList;
21
+ exports.default = SourceList;
package/lib/index.js CHANGED
@@ -1,29 +1,68 @@
1
- import React, { useState, useContext, useEffect, useCallback } from 'react';
2
- import { ResourceBrowserContext, ResourceBrowserContextProvider } from './ResourceBrowserContext/ResourceBrowserContext';
3
- import { useSources } from './Hooks/useSources';
4
- import { PluginRender } from './Plugin/Plugin';
5
- import { AuthProvider, useAuthContext, AuthContext } from './ResourceBrowserContext/AuthProvider';
6
- import BrowseToSource from './BrowseToSource/BrowseToSource';
7
- import SourceDropdown from './SourceDropdown/SourceDropdown';
8
- import SourceDropdownContainer from './SourceDropdownContainer/SourceDropdownContainer';
9
- export { ResourceBrowserContext, ResourceBrowserContextProvider, useAuthContext, AuthProvider, AuthContext, BrowseToSource, SourceDropdown, SourceDropdownContainer, };
10
- export * from './types';
11
- export const ResourceBrowser = (props) => {
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.ResourceBrowser = exports.SourceDropdownContainer = exports.SourceDropdown = exports.BrowseToSource = exports.AuthContext = exports.AuthProvider = exports.useAuthContext = exports.ResourceBrowserContextProvider = exports.ResourceBrowserContext = void 0;
33
+ const react_1 = __importStar(require("react"));
34
+ const ResourceBrowserContext_1 = require("./ResourceBrowserContext/ResourceBrowserContext");
35
+ Object.defineProperty(exports, "ResourceBrowserContext", { enumerable: true, get: function () { return ResourceBrowserContext_1.ResourceBrowserContext; } });
36
+ Object.defineProperty(exports, "ResourceBrowserContextProvider", { enumerable: true, get: function () { return ResourceBrowserContext_1.ResourceBrowserContextProvider; } });
37
+ const useSources_1 = require("./Hooks/useSources");
38
+ const Plugin_1 = require("./Plugin/Plugin");
39
+ const AuthProvider_1 = require("./ResourceBrowserContext/AuthProvider");
40
+ Object.defineProperty(exports, "AuthProvider", { enumerable: true, get: function () { return AuthProvider_1.AuthProvider; } });
41
+ Object.defineProperty(exports, "useAuthContext", { enumerable: true, get: function () { return AuthProvider_1.useAuthContext; } });
42
+ Object.defineProperty(exports, "AuthContext", { enumerable: true, get: function () { return AuthProvider_1.AuthContext; } });
43
+ const BrowseToSource_1 = __importDefault(require("./BrowseToSource/BrowseToSource"));
44
+ exports.BrowseToSource = BrowseToSource_1.default;
45
+ const SourceDropdown_1 = __importDefault(require("./SourceDropdown/SourceDropdown"));
46
+ exports.SourceDropdown = SourceDropdown_1.default;
47
+ const SourceDropdownContainer_1 = __importDefault(require("./SourceDropdownContainer/SourceDropdownContainer"));
48
+ exports.SourceDropdownContainer = SourceDropdownContainer_1.default;
49
+ __exportStar(require("./types"), exports);
50
+ const ResourceBrowser = (props) => {
12
51
  const { value } = props;
13
- const [error, setError] = useState(null);
14
- const { onRequestSources, searchEnabled, plugins } = useContext(ResourceBrowserContext);
15
- const [isModalOpen, setIsModalOpen] = useState(false);
16
- const [source, setSource] = useState(null);
17
- const [mode, setMode] = useState(null);
18
- const { data: sources, isLoading, error: sourcesError } = useSources({ onRequestSources, plugins });
19
- const [plugin, setPlugin] = useState(null);
52
+ const [error, setError] = (0, react_1.useState)(null);
53
+ const { onRequestSources, searchEnabled, plugins } = (0, react_1.useContext)(ResourceBrowserContext_1.ResourceBrowserContext);
54
+ const [isModalOpen, setIsModalOpen] = (0, react_1.useState)(false);
55
+ const [source, setSource] = (0, react_1.useState)(null);
56
+ const [mode, setMode] = (0, react_1.useState)(null);
57
+ const { data: sources, isLoading, error: sourcesError } = (0, useSources_1.useSources)({ onRequestSources, plugins });
58
+ const [plugin, setPlugin] = (0, react_1.useState)(null);
20
59
  // MainContainer will render a list of sources of one is not provided to it, callback to allow it to set the source once a user selects
21
- const handleSourceSelect = useCallback((source, mode) => {
60
+ const handleSourceSelect = (0, react_1.useCallback)((source, mode) => {
22
61
  setSource(source);
23
62
  setMode(mode || null);
24
63
  }, [setSource, setMode]);
25
64
  // If an existing resource is passed in auto select its source
26
- useEffect(() => {
65
+ (0, react_1.useEffect)(() => {
27
66
  let source = null;
28
67
  setError(null);
29
68
  // If there is a provided value try to use its source
@@ -45,7 +84,7 @@ export const ResourceBrowser = (props) => {
45
84
  }, [value, isLoading, sources, setSource, setError]);
46
85
  // When a source is selected update our plugin reference to match (legacy support)
47
86
  // the plugin is now attached to the source directly when fetched from the context so use that instead when possible
48
- useEffect(() => {
87
+ (0, react_1.useEffect)(() => {
49
88
  if (source?.plugin) {
50
89
  setPlugin(source.plugin);
51
90
  }
@@ -54,19 +93,19 @@ export const ResourceBrowser = (props) => {
54
93
  }
55
94
  }, [plugins, source]);
56
95
  // The modal has some control over it own open/closed state (for WCAG reasons) so keep this in sync with our state
57
- const handleModalStateChange = useCallback((isOpen) => {
96
+ const handleModalStateChange = (0, react_1.useCallback)((isOpen) => {
58
97
  setIsModalOpen(isOpen);
59
98
  }, [setIsModalOpen]);
60
99
  // If the modal closes and we dont have a value clear the source state so it goes back to the launcher on re-open
61
- useEffect(() => {
100
+ (0, react_1.useEffect)(() => {
62
101
  if (!isModalOpen && !value && (sources?.length > 1 || searchEnabled)) {
63
102
  setSource(null);
64
103
  setMode(null);
65
104
  }
66
105
  }, [sources, isModalOpen]);
67
106
  // Render a default "plugin" and one for each item in the plugins array. They are conditionally rendered based on what is selected
68
- return (React.createElement("div", { className: "squiz-rb-scope" },
69
- React.createElement(PluginRender, { key: "default", render: plugin === null, ...props, source: source, sources: sources, setSource: handleSourceSelect, isLoading: isLoading, error: sourcesError || error, plugin: plugin, pluginMode: mode, searchEnabled: searchEnabled, useResource: () => {
107
+ return (react_1.default.createElement("div", { className: "squiz-rb-scope" },
108
+ react_1.default.createElement(Plugin_1.PluginRender, { key: "default", render: plugin === null, ...props, source: source, sources: sources, setSource: handleSourceSelect, isLoading: isLoading, error: sourcesError || error, plugin: plugin, pluginMode: mode, searchEnabled: searchEnabled, useResource: () => {
70
109
  return {
71
110
  data: null,
72
111
  error: null,
@@ -74,6 +113,7 @@ export const ResourceBrowser = (props) => {
74
113
  };
75
114
  }, isModalOpen: isModalOpen, onModalStateChange: handleModalStateChange }),
76
115
  plugins.map((thisPlugin) => {
77
- return (React.createElement(PluginRender, { key: thisPlugin.type, render: thisPlugin === plugin, ...props, source: source, sources: sources, setSource: handleSourceSelect, isLoading: isLoading, error: error, plugin: plugin, pluginMode: mode, searchEnabled: searchEnabled, useResource: thisPlugin.useResolveResource, isModalOpen: isModalOpen, onModalStateChange: handleModalStateChange }));
116
+ return (react_1.default.createElement(Plugin_1.PluginRender, { key: thisPlugin.type, render: thisPlugin === plugin, ...props, source: source, sources: sources, setSource: handleSourceSelect, isLoading: isLoading, error: error, plugin: plugin, pluginMode: mode, searchEnabled: searchEnabled, useResource: thisPlugin.useResolveResource, isModalOpen: isModalOpen, onModalStateChange: handleModalStateChange }));
78
117
  })));
79
118
  };
119
+ exports.ResourceBrowser = ResourceBrowser;
package/lib/types.js CHANGED
@@ -1,5 +1,8 @@
1
- export var PluginLaunchModeType;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginLaunchModeType = void 0;
4
+ var PluginLaunchModeType;
2
5
  (function (PluginLaunchModeType) {
3
6
  PluginLaunchModeType["Browse"] = "browse";
4
7
  PluginLaunchModeType["Search"] = "search";
5
- })(PluginLaunchModeType || (PluginLaunchModeType = {}));
8
+ })(PluginLaunchModeType = exports.PluginLaunchModeType || (exports.PluginLaunchModeType = {}));
@@ -1,19 +1,25 @@
1
- export const getCookieValue = (name) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refreshAccessToken = exports.logout = exports.setCookieValue = exports.getCookieValue = void 0;
4
+ const getCookieValue = (name) => {
2
5
  const match = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
3
6
  return match ? match.pop() : null;
4
7
  };
5
- export const setCookieValue = (name, value) => {
8
+ exports.getCookieValue = getCookieValue;
9
+ const setCookieValue = (name, value) => {
6
10
  document.cookie = `${name}=${value}; Path=/;`;
7
11
  };
8
- export const logout = () => {
9
- setCookieValue('authToken', '');
10
- setCookieValue('refreshToken', '');
12
+ exports.setCookieValue = setCookieValue;
13
+ const logout = () => {
14
+ (0, exports.setCookieValue)('authToken', '');
15
+ (0, exports.setCookieValue)('refreshToken', '');
11
16
  };
12
- export const refreshAccessToken = async (authConfig) => {
17
+ exports.logout = logout;
18
+ const refreshAccessToken = async (authConfig) => {
13
19
  if (!authConfig) {
14
20
  throw new Error('No auth configuration available');
15
21
  }
16
- const refreshToken = getCookieValue('refreshToken');
22
+ const refreshToken = (0, exports.getCookieValue)('refreshToken');
17
23
  if (!refreshToken) {
18
24
  throw new Error('You are not logged in');
19
25
  }
@@ -22,10 +28,11 @@ export const refreshAccessToken = async (authConfig) => {
22
28
  credentials: 'include',
23
29
  });
24
30
  if (!response.ok) {
25
- logout();
31
+ (0, exports.logout)();
26
32
  throw new Error('Failed to refresh token');
27
33
  }
28
34
  const data = await response.json();
29
- setCookieValue('authToken', data.access_token);
35
+ (0, exports.setCookieValue)('authToken', data.access_token);
30
36
  return data.access_token;
31
37
  };
38
+ exports.refreshAccessToken = refreshAccessToken;
@@ -5,7 +5,8 @@ function ResourceLauncher({ sources, onSourceSelect }) {
5
5
  React.createElement("ul", { tabIndex: -1, "aria-label": `sources list`, className: "flex flex-col bg-gray-100 min-h-full focus-visible:outline-0" }, sources.map((source, index) => {
6
6
  const SourceLauncher = source.plugin.renderResourceLauncher();
7
7
  return (React.createElement("li", { key: index, className: "flex items-stretch relative" },
8
- React.createElement(SourceLauncher, { source: source, onSearch: (query) => onSourceSelect(source, { type: PluginLaunchModeType.Search, args: { query } }), onBrowse: (browseTo) => onSourceSelect(source, { type: PluginLaunchModeType.Browse, args: { browseTo } }) })));
8
+ React.createElement("div", { className: `squiz-rb-plugin squiz-rb-plugin--${source.plugin?.type} w-full` },
9
+ React.createElement(SourceLauncher, { source: source, onSearch: (query) => onSourceSelect(source, { type: PluginLaunchModeType.Search, args: { query } }), onBrowse: (browseTo) => onSourceSelect(source, { type: PluginLaunchModeType.Browse, args: { browseTo } }) }))));
9
10
  }))));
10
11
  }
11
12
  export default ResourceLauncher;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/resource-browser",
3
- "version": "3.0.0-pre-alpha.0",
3
+ "version": "3.0.1-pre-alpha.1",
4
4
  "types": "lib/index.d.ts",
5
5
  "files": [
6
6
  "lib/*",
@@ -15,11 +15,15 @@ function ResourceLauncher({ sources, onSourceSelect }: ResourceLauncherProps) {
15
15
 
16
16
  return (
17
17
  <li key={index} className="flex items-stretch relative">
18
- <SourceLauncher
19
- source={source}
20
- onSearch={(query) => onSourceSelect(source, { type: PluginLaunchModeType.Search, args: { query } })}
21
- onBrowse={(browseTo) => onSourceSelect(source, { type: PluginLaunchModeType.Browse, args: { browseTo } })}
22
- />
18
+ <div className={`squiz-rb-plugin squiz-rb-plugin--${source.plugin?.type} w-full`}>
19
+ <SourceLauncher
20
+ source={source}
21
+ onSearch={(query) => onSourceSelect(source, { type: PluginLaunchModeType.Search, args: { query } })}
22
+ onBrowse={(browseTo) =>
23
+ onSourceSelect(source, { type: PluginLaunchModeType.Browse, args: { browseTo } })
24
+ }
25
+ />
26
+ </div>
23
27
  </li>
24
28
  );
25
29
  })}