sanity-plugin-workspace-home 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +0 -18
- package/dist/index.d.ts +11 -15
- package/dist/index.js +138 -258
- package/dist/index.js.map +1 -1
- package/package.json +32 -59
- package/dist/index.d.mts +0 -16
- package/dist/index.esm.js +0 -297
- package/dist/index.esm.js.map +0 -1
- package/dist/index.mjs +0 -297
- package/dist/index.mjs.map +0 -1
- package/sanity.json +0 -8
- package/src/components/WorkspaceHome.tsx +0 -102
- package/src/components/WorkspacePreview.tsx +0 -106
- package/src/index.ts +0 -29
- package/src/tool/index.ts +0 -10
- package/v2-incompatible.js +0 -11
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# sanity-plugin-workspace-home
|
|
2
2
|
|
|
3
|
-
> This is a **Sanity Studio v3** plugin.
|
|
4
|
-
|
|
5
3
|
This plugin adds a "Home" Tool to your Studio with a listing of all available workspaces. Useful as the first page of your Studio to quickly navigate to the workspace of your choice.
|
|
6
4
|
|
|
7
5
|

|
|
@@ -54,19 +52,3 @@ export default defineConfig([{
|
|
|
54
52
|
## License
|
|
55
53
|
|
|
56
54
|
[MIT](LICENSE) © Sanity
|
|
57
|
-
|
|
58
|
-
## Develop & test
|
|
59
|
-
|
|
60
|
-
This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)
|
|
61
|
-
with default configuration for build & watch scripts.
|
|
62
|
-
|
|
63
|
-
See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio)
|
|
64
|
-
on how to run this plugin with hotreload in the studio.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
### Release new version
|
|
68
|
-
|
|
69
|
-
Run ["CI & Release" workflow](TODO/actions/workflows/main.yml).
|
|
70
|
-
Make sure to select the main branch and check "Release new version".
|
|
71
|
-
|
|
72
|
-
Semantic release will only release on configured branches, so it is safe to run release on any branch.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {WorkspaceOptions} from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import * as sanity0 from "sanity";
|
|
2
|
+
import { WorkspaceOptions } from "sanity";
|
|
3
|
+
declare const workspaceHome: sanity0.Plugin<void>;
|
|
4
|
+
type WorkspaceHomeConfigProps = {
|
|
5
|
+
projectId: string;
|
|
6
|
+
dataset: string;
|
|
7
|
+
};
|
|
8
|
+
declare const workspaceHomeConfig: ({
|
|
7
9
|
projectId,
|
|
8
|
-
dataset
|
|
9
|
-
}: WorkspaceHomeConfigProps) => WorkspaceOptions
|
|
10
|
-
|
|
11
|
-
declare type WorkspaceHomeConfigProps = {
|
|
12
|
-
projectId: string
|
|
13
|
-
dataset: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export {}
|
|
10
|
+
dataset
|
|
11
|
+
}: WorkspaceHomeConfigProps) => WorkspaceOptions;
|
|
12
|
+
export { workspaceHome, workspaceHomeConfig };
|
package/dist/index.js
CHANGED
|
@@ -1,196 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the MIT license found in the
|
|
15
|
-
* LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/
|
|
17
|
-
var hasRequiredReactIs_production_min;
|
|
18
|
-
function requireReactIs_production_min() {
|
|
19
|
-
if (hasRequiredReactIs_production_min)
|
|
20
|
-
return reactIs_production_min;
|
|
21
|
-
hasRequiredReactIs_production_min = 1;
|
|
22
|
-
var b = Symbol.for("react.element"), c = Symbol.for("react.portal"), d = Symbol.for("react.fragment"), e = Symbol.for("react.strict_mode"), f = Symbol.for("react.profiler"), g = Symbol.for("react.provider"), h = Symbol.for("react.context"), k = Symbol.for("react.server_context"), l = Symbol.for("react.forward_ref"), m = Symbol.for("react.suspense"), n = Symbol.for("react.suspense_list"), p = Symbol.for("react.memo"), q = Symbol.for("react.lazy"), t = Symbol.for("react.offscreen"), u;
|
|
23
|
-
u = Symbol.for("react.module.reference");
|
|
24
|
-
function v(a) {
|
|
25
|
-
if (typeof a == "object" && a !== null) {
|
|
26
|
-
var r = a.$$typeof;
|
|
27
|
-
switch (r) {
|
|
28
|
-
case b:
|
|
29
|
-
switch (a = a.type, a) {
|
|
30
|
-
case d:
|
|
31
|
-
case f:
|
|
32
|
-
case e:
|
|
33
|
-
case m:
|
|
34
|
-
case n:
|
|
35
|
-
return a;
|
|
36
|
-
default:
|
|
37
|
-
switch (a = a && a.$$typeof, a) {
|
|
38
|
-
case k:
|
|
39
|
-
case h:
|
|
40
|
-
case l:
|
|
41
|
-
case q:
|
|
42
|
-
case p:
|
|
43
|
-
case g:
|
|
44
|
-
return a;
|
|
45
|
-
default:
|
|
46
|
-
return r;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
case c:
|
|
50
|
-
return r;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return reactIs_production_min.ContextConsumer = h, reactIs_production_min.ContextProvider = g, reactIs_production_min.Element = b, reactIs_production_min.ForwardRef = l, reactIs_production_min.Fragment = d, reactIs_production_min.Lazy = q, reactIs_production_min.Memo = p, reactIs_production_min.Portal = c, reactIs_production_min.Profiler = f, reactIs_production_min.StrictMode = e, reactIs_production_min.Suspense = m, reactIs_production_min.SuspenseList = n, reactIs_production_min.isAsyncMode = function() {
|
|
55
|
-
return !1;
|
|
56
|
-
}, reactIs_production_min.isConcurrentMode = function() {
|
|
57
|
-
return !1;
|
|
58
|
-
}, reactIs_production_min.isContextConsumer = function(a) {
|
|
59
|
-
return v(a) === h;
|
|
60
|
-
}, reactIs_production_min.isContextProvider = function(a) {
|
|
61
|
-
return v(a) === g;
|
|
62
|
-
}, reactIs_production_min.isElement = function(a) {
|
|
63
|
-
return typeof a == "object" && a !== null && a.$$typeof === b;
|
|
64
|
-
}, reactIs_production_min.isForwardRef = function(a) {
|
|
65
|
-
return v(a) === l;
|
|
66
|
-
}, reactIs_production_min.isFragment = function(a) {
|
|
67
|
-
return v(a) === d;
|
|
68
|
-
}, reactIs_production_min.isLazy = function(a) {
|
|
69
|
-
return v(a) === q;
|
|
70
|
-
}, reactIs_production_min.isMemo = function(a) {
|
|
71
|
-
return v(a) === p;
|
|
72
|
-
}, reactIs_production_min.isPortal = function(a) {
|
|
73
|
-
return v(a) === c;
|
|
74
|
-
}, reactIs_production_min.isProfiler = function(a) {
|
|
75
|
-
return v(a) === f;
|
|
76
|
-
}, reactIs_production_min.isStrictMode = function(a) {
|
|
77
|
-
return v(a) === e;
|
|
78
|
-
}, reactIs_production_min.isSuspense = function(a) {
|
|
79
|
-
return v(a) === m;
|
|
80
|
-
}, reactIs_production_min.isSuspenseList = function(a) {
|
|
81
|
-
return v(a) === n;
|
|
82
|
-
}, reactIs_production_min.isValidElementType = function(a) {
|
|
83
|
-
return typeof a == "string" || typeof a == "function" || a === d || a === f || a === e || a === m || a === n || a === t || typeof a == "object" && a !== null && (a.$$typeof === q || a.$$typeof === p || a.$$typeof === g || a.$$typeof === h || a.$$typeof === l || a.$$typeof === u || a.getModuleId !== void 0);
|
|
84
|
-
}, reactIs_production_min.typeOf = v, reactIs_production_min;
|
|
85
|
-
}
|
|
86
|
-
var reactIs_development = {};
|
|
87
|
-
/**
|
|
88
|
-
* @license React
|
|
89
|
-
* react-is.development.js
|
|
90
|
-
*
|
|
91
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
92
|
-
*
|
|
93
|
-
* This source code is licensed under the MIT license found in the
|
|
94
|
-
* LICENSE file in the root directory of this source tree.
|
|
95
|
-
*/
|
|
96
|
-
var hasRequiredReactIs_development;
|
|
97
|
-
function requireReactIs_development() {
|
|
98
|
-
return hasRequiredReactIs_development || (hasRequiredReactIs_development = 1, process.env.NODE_ENV !== "production" && function() {
|
|
99
|
-
var REACT_ELEMENT_TYPE = Symbol.for("react.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_PROVIDER_TYPE = Symbol.for("react.provider"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_SERVER_CONTEXT_TYPE = Symbol.for("react.server_context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), enableScopeAPI = !1, enableCacheElement = !1, enableTransitionTracing = !1, enableLegacyHidden = !1, enableDebugTracing = !1, REACT_MODULE_REFERENCE;
|
|
100
|
-
REACT_MODULE_REFERENCE = Symbol.for("react.module.reference");
|
|
101
|
-
function isValidElementType(type) {
|
|
102
|
-
return !!(typeof type == "string" || typeof type == "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing || typeof type == "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
|
|
103
|
-
// types supported by any Flight configuration anywhere since
|
|
104
|
-
// we don't know which Flight build this will end up being used
|
|
105
|
-
// with.
|
|
106
|
-
type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== void 0));
|
|
107
|
-
}
|
|
108
|
-
function typeOf(object) {
|
|
109
|
-
if (typeof object == "object" && object !== null) {
|
|
110
|
-
var $$typeof = object.$$typeof;
|
|
111
|
-
switch ($$typeof) {
|
|
112
|
-
case REACT_ELEMENT_TYPE:
|
|
113
|
-
var type = object.type;
|
|
114
|
-
switch (type) {
|
|
115
|
-
case REACT_FRAGMENT_TYPE:
|
|
116
|
-
case REACT_PROFILER_TYPE:
|
|
117
|
-
case REACT_STRICT_MODE_TYPE:
|
|
118
|
-
case REACT_SUSPENSE_TYPE:
|
|
119
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
120
|
-
return type;
|
|
121
|
-
default:
|
|
122
|
-
var $$typeofType = type && type.$$typeof;
|
|
123
|
-
switch ($$typeofType) {
|
|
124
|
-
case REACT_SERVER_CONTEXT_TYPE:
|
|
125
|
-
case REACT_CONTEXT_TYPE:
|
|
126
|
-
case REACT_FORWARD_REF_TYPE:
|
|
127
|
-
case REACT_LAZY_TYPE:
|
|
128
|
-
case REACT_MEMO_TYPE:
|
|
129
|
-
case REACT_PROVIDER_TYPE:
|
|
130
|
-
return $$typeofType;
|
|
131
|
-
default:
|
|
132
|
-
return $$typeof;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
case REACT_PORTAL_TYPE:
|
|
136
|
-
return $$typeof;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
var ContextConsumer = REACT_CONTEXT_TYPE, ContextProvider = REACT_PROVIDER_TYPE, Element = REACT_ELEMENT_TYPE, ForwardRef = REACT_FORWARD_REF_TYPE, Fragment = REACT_FRAGMENT_TYPE, Lazy = REACT_LAZY_TYPE, Memo = REACT_MEMO_TYPE, Portal = REACT_PORTAL_TYPE, Profiler = REACT_PROFILER_TYPE, StrictMode = REACT_STRICT_MODE_TYPE, Suspense = REACT_SUSPENSE_TYPE, SuspenseList = REACT_SUSPENSE_LIST_TYPE, hasWarnedAboutDeprecatedIsAsyncMode = !1, hasWarnedAboutDeprecatedIsConcurrentMode = !1;
|
|
141
|
-
function isAsyncMode(object) {
|
|
142
|
-
return hasWarnedAboutDeprecatedIsAsyncMode || (hasWarnedAboutDeprecatedIsAsyncMode = !0, console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 18+.")), !1;
|
|
143
|
-
}
|
|
144
|
-
function isConcurrentMode(object) {
|
|
145
|
-
return hasWarnedAboutDeprecatedIsConcurrentMode || (hasWarnedAboutDeprecatedIsConcurrentMode = !0, console.warn("The ReactIs.isConcurrentMode() alias has been deprecated, and will be removed in React 18+.")), !1;
|
|
146
|
-
}
|
|
147
|
-
function isContextConsumer(object) {
|
|
148
|
-
return typeOf(object) === REACT_CONTEXT_TYPE;
|
|
149
|
-
}
|
|
150
|
-
function isContextProvider(object) {
|
|
151
|
-
return typeOf(object) === REACT_PROVIDER_TYPE;
|
|
152
|
-
}
|
|
153
|
-
function isElement(object) {
|
|
154
|
-
return typeof object == "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
155
|
-
}
|
|
156
|
-
function isForwardRef(object) {
|
|
157
|
-
return typeOf(object) === REACT_FORWARD_REF_TYPE;
|
|
158
|
-
}
|
|
159
|
-
function isFragment(object) {
|
|
160
|
-
return typeOf(object) === REACT_FRAGMENT_TYPE;
|
|
161
|
-
}
|
|
162
|
-
function isLazy(object) {
|
|
163
|
-
return typeOf(object) === REACT_LAZY_TYPE;
|
|
164
|
-
}
|
|
165
|
-
function isMemo(object) {
|
|
166
|
-
return typeOf(object) === REACT_MEMO_TYPE;
|
|
167
|
-
}
|
|
168
|
-
function isPortal(object) {
|
|
169
|
-
return typeOf(object) === REACT_PORTAL_TYPE;
|
|
170
|
-
}
|
|
171
|
-
function isProfiler(object) {
|
|
172
|
-
return typeOf(object) === REACT_PROFILER_TYPE;
|
|
173
|
-
}
|
|
174
|
-
function isStrictMode(object) {
|
|
175
|
-
return typeOf(object) === REACT_STRICT_MODE_TYPE;
|
|
176
|
-
}
|
|
177
|
-
function isSuspense(object) {
|
|
178
|
-
return typeOf(object) === REACT_SUSPENSE_TYPE;
|
|
179
|
-
}
|
|
180
|
-
function isSuspenseList(object) {
|
|
181
|
-
return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
|
|
182
|
-
}
|
|
183
|
-
reactIs_development.ContextConsumer = ContextConsumer, reactIs_development.ContextProvider = ContextProvider, reactIs_development.Element = Element, reactIs_development.ForwardRef = ForwardRef, reactIs_development.Fragment = Fragment, reactIs_development.Lazy = Lazy, reactIs_development.Memo = Memo, reactIs_development.Portal = Portal, reactIs_development.Profiler = Profiler, reactIs_development.StrictMode = StrictMode, reactIs_development.Suspense = Suspense, reactIs_development.SuspenseList = SuspenseList, reactIs_development.isAsyncMode = isAsyncMode, reactIs_development.isConcurrentMode = isConcurrentMode, reactIs_development.isContextConsumer = isContextConsumer, reactIs_development.isContextProvider = isContextProvider, reactIs_development.isElement = isElement, reactIs_development.isForwardRef = isForwardRef, reactIs_development.isFragment = isFragment, reactIs_development.isLazy = isLazy, reactIs_development.isMemo = isMemo, reactIs_development.isPortal = isPortal, reactIs_development.isProfiler = isProfiler, reactIs_development.isStrictMode = isStrictMode, reactIs_development.isSuspense = isSuspense, reactIs_development.isSuspenseList = isSuspenseList, reactIs_development.isValidElementType = isValidElementType, reactIs_development.typeOf = typeOf;
|
|
184
|
-
}()), reactIs_development;
|
|
185
|
-
}
|
|
186
|
-
process.env.NODE_ENV === "production" ? reactIs.exports = requireReactIs_production_min() : reactIs.exports = requireReactIs_development();
|
|
187
|
-
var reactIsExports = reactIs.exports;
|
|
188
|
-
const createIcon = (icon) => {
|
|
189
|
-
if (reactIsExports.isValidElementType(icon))
|
|
190
|
-
return react.createElement(icon);
|
|
191
|
-
if (react.isValidElement(icon))
|
|
192
|
-
return icon;
|
|
193
|
-
}, MediaCard = styled__default.default(ui.Card)`
|
|
1
|
+
import { useActiveWorkspace, useWorkspaces, definePlugin } from "sanity";
|
|
2
|
+
import { DatabaseIcon, HomeIcon } from "@sanity/icons";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { c } from "react-compiler-runtime";
|
|
5
|
+
import { isValidElement, useState, useRef, useEffect } from "react";
|
|
6
|
+
import { styled } from "styled-components";
|
|
7
|
+
import { Card, Text, Box, Stack, Flex, Button, Hotkeys, Grid, Container, Heading, TextInput } from "@sanity/ui";
|
|
8
|
+
import { isValidElementType } from "react-is";
|
|
9
|
+
const createIcon = (Icon) => {
|
|
10
|
+
if (isValidElementType(Icon)) return /* @__PURE__ */ jsx(Icon, {});
|
|
11
|
+
if (isValidElement(Icon)) return Icon;
|
|
12
|
+
}, MediaCard = styled(Card)`
|
|
194
13
|
width: 35px;
|
|
195
14
|
height: 35px;
|
|
196
15
|
|
|
@@ -200,41 +19,95 @@ const createIcon = (icon) => {
|
|
|
200
19
|
}
|
|
201
20
|
`;
|
|
202
21
|
function WorkspacePreview(props) {
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
22
|
+
const $ = c(39), {
|
|
23
|
+
workspace,
|
|
24
|
+
index,
|
|
25
|
+
query
|
|
26
|
+
} = props, {
|
|
27
|
+
icon,
|
|
28
|
+
title,
|
|
29
|
+
name,
|
|
30
|
+
subtitle,
|
|
31
|
+
dataset
|
|
32
|
+
} = workspace, {
|
|
33
|
+
setActiveWorkspace
|
|
34
|
+
} = useActiveWorkspace();
|
|
35
|
+
let t0;
|
|
36
|
+
$[0] !== icon ? (t0 = createIcon(icon), $[0] = icon, $[1] = t0) : t0 = $[1];
|
|
37
|
+
const iconComponent = t0, hotKeyIndex = index + 1 === 10 ? 0 : index + 1, t1 = !!index;
|
|
38
|
+
let t2;
|
|
39
|
+
$[2] === Symbol.for("react.memo_cache_sentinel") ? (t2 = [2, 3, 4, 4], $[2] = t2) : t2 = $[2];
|
|
40
|
+
let t3;
|
|
41
|
+
$[3] !== name || $[4] !== setActiveWorkspace ? (t3 = () => setActiveWorkspace(name), $[3] = name, $[4] = setActiveWorkspace, $[5] = t3) : t3 = $[5];
|
|
42
|
+
let t4;
|
|
43
|
+
$[6] === Symbol.for("react.memo_cache_sentinel") ? (t4 = [2, 3, 4, 4], $[6] = t4) : t4 = $[6];
|
|
44
|
+
let t5;
|
|
45
|
+
$[7] !== iconComponent ? (t5 = iconComponent ? /* @__PURE__ */ jsx(MediaCard, { children: createIcon(iconComponent) }) : null, $[7] = iconComponent, $[8] = t5) : t5 = $[8];
|
|
46
|
+
let t6;
|
|
47
|
+
$[9] === Symbol.for("react.memo_cache_sentinel") ? (t6 = [1, 2, 3, 3], $[9] = t6) : t6 = $[9];
|
|
48
|
+
const t7 = title || name;
|
|
49
|
+
let t8;
|
|
50
|
+
$[10] !== t7 ? (t8 = /* @__PURE__ */ jsx(Text, { size: 3, weight: "semibold", textOverflow: "ellipsis", children: t7 }), $[10] = t7, $[11] = t8) : t8 = $[11];
|
|
51
|
+
let t9;
|
|
52
|
+
$[12] !== subtitle ? (t9 = subtitle ? /* @__PURE__ */ jsx(Text, { muted: !0, children: subtitle }) : null, $[12] = subtitle, $[13] = t9) : t9 = $[13];
|
|
53
|
+
let t10;
|
|
54
|
+
$[14] !== t8 || $[15] !== t9 ? (t10 = /* @__PURE__ */ jsx(Box, { flex: 1, children: /* @__PURE__ */ jsxs(Stack, { space: t6, children: [
|
|
55
|
+
t8,
|
|
56
|
+
t9
|
|
57
|
+
] }) }), $[14] = t8, $[15] = t9, $[16] = t10) : t10 = $[16];
|
|
58
|
+
let t11;
|
|
59
|
+
$[17] !== t10 || $[18] !== t5 ? (t11 = /* @__PURE__ */ jsxs(Flex, { align: "center", gap: t4, children: [
|
|
60
|
+
t5,
|
|
61
|
+
t10
|
|
62
|
+
] }), $[17] = t10, $[18] = t5, $[19] = t11) : t11 = $[19];
|
|
63
|
+
let t12;
|
|
64
|
+
$[20] !== t11 || $[21] !== t3 ? (t12 = /* @__PURE__ */ jsx(Card, { columnStart: 1, columnEnd: 4, children: /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(Button, { mode: "bleed", tone: "default", onClick: t3, children: t11 }) }) }), $[20] = t11, $[21] = t3, $[22] = t12) : t12 = $[22];
|
|
65
|
+
let t13;
|
|
66
|
+
$[23] === Symbol.for("react.memo_cache_sentinel") ? (t13 = /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: /* @__PURE__ */ jsx(DatabaseIcon, {}) }), $[23] = t13) : t13 = $[23];
|
|
67
|
+
let t14;
|
|
68
|
+
$[24] !== dataset ? (t14 = /* @__PURE__ */ jsx(Card, { columnStart: 4, columnEnd: 5, children: /* @__PURE__ */ jsxs(Flex, { height: "fill", align: "center", gap: 2, children: [
|
|
69
|
+
t13,
|
|
70
|
+
/* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", textOverflow: "ellipsis", children: dataset })
|
|
71
|
+
] }) }), $[24] = dataset, $[25] = t14) : t14 = $[25];
|
|
72
|
+
let t15;
|
|
73
|
+
$[26] === Symbol.for("react.memo_cache_sentinel") ? (t15 = [2, 3, 3, 3], $[26] = t15) : t15 = $[26];
|
|
74
|
+
let t16;
|
|
75
|
+
$[27] !== hotKeyIndex || $[28] !== query ? (t16 = !query && hotKeyIndex < 10 ? /* @__PURE__ */ jsx(Hotkeys, { keys: [String(hotKeyIndex)], padding: 2 }) : null, $[27] = hotKeyIndex, $[28] = query, $[29] = t16) : t16 = $[29];
|
|
76
|
+
let t17;
|
|
77
|
+
$[30] !== t16 ? (t17 = /* @__PURE__ */ jsx(Card, { paddingRight: t15, children: /* @__PURE__ */ jsx(Flex, { height: "fill", align: "center", justify: "flex-end", children: t16 }) }), $[30] = t16, $[31] = t17) : t17 = $[31];
|
|
78
|
+
let t18;
|
|
79
|
+
$[32] !== t12 || $[33] !== t14 || $[34] !== t17 ? (t18 = /* @__PURE__ */ jsxs(Grid, { columns: 5, gap: t2, paddingY: 1, children: [
|
|
80
|
+
t12,
|
|
81
|
+
t14,
|
|
82
|
+
t17
|
|
83
|
+
] }), $[32] = t12, $[33] = t14, $[34] = t17, $[35] = t18) : t18 = $[35];
|
|
84
|
+
let t19;
|
|
85
|
+
return $[36] !== t1 || $[37] !== t18 ? (t19 = /* @__PURE__ */ jsx(Card, { borderTop: t1, tone: "default", children: t18 }), $[36] = t1, $[37] = t18, $[38] = t19) : t19 = $[38], t19;
|
|
226
86
|
}
|
|
227
|
-
const TallCard =
|
|
87
|
+
const TallCard = styled(Card)`
|
|
228
88
|
min-height: 100%;
|
|
229
89
|
`;
|
|
230
90
|
function WorkspaceHome() {
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
91
|
+
const $ = c(29), t0 = useWorkspaces();
|
|
92
|
+
let workspaces;
|
|
93
|
+
$[0] !== t0 ? ([, ...workspaces] = t0, $[0] = t0, $[1] = workspaces) : workspaces = $[1];
|
|
94
|
+
const {
|
|
95
|
+
setActiveWorkspace
|
|
96
|
+
} = useActiveWorkspace(), [query, setQuery] = useState(""), searchInput = useRef(null);
|
|
97
|
+
let t1;
|
|
98
|
+
$[2] === Symbol.for("react.memo_cache_sentinel") ? (t1 = (e) => {
|
|
99
|
+
setQuery(e.target.value);
|
|
100
|
+
}, $[2] = t1) : t1 = $[2];
|
|
101
|
+
const handleQuery = t1;
|
|
102
|
+
let t2;
|
|
103
|
+
if ($[3] !== query || $[4] !== workspaces) {
|
|
104
|
+
let t32;
|
|
105
|
+
$[6] !== query ? (t32 = (workspace) => workspace.name.toLowerCase().includes(query.toLowerCase()) || workspace.dataset.toLowerCase().includes(query.toLowerCase()) || workspace.title.toLowerCase().includes(query.toLowerCase()), $[6] = query, $[7] = t32) : t32 = $[7], t2 = workspaces.filter(t32), $[3] = query, $[4] = workspaces, $[5] = t2;
|
|
106
|
+
} else
|
|
107
|
+
t2 = $[5];
|
|
108
|
+
const filteredWorkspaces = t2;
|
|
109
|
+
let t3, t4;
|
|
110
|
+
$[8] !== query || $[9] !== setActiveWorkspace || $[10] !== workspaces ? (t3 = () => {
|
|
238
111
|
const handleKeypress = (event) => {
|
|
239
112
|
if (query || searchInput.current === document.activeElement)
|
|
240
113
|
return;
|
|
@@ -244,40 +117,45 @@ function WorkspaceHome() {
|
|
|
244
117
|
return window.addEventListener("keypress", handleKeypress), () => {
|
|
245
118
|
window.removeEventListener("keypress", handleKeypress);
|
|
246
119
|
};
|
|
247
|
-
}, [query, workspaces, setActiveWorkspace]
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
120
|
+
}, t4 = [query, workspaces, setActiveWorkspace], $[8] = query, $[9] = setActiveWorkspace, $[10] = workspaces, $[11] = t3, $[12] = t4) : (t3 = $[11], t4 = $[12]), useEffect(t3, t4);
|
|
121
|
+
let t5;
|
|
122
|
+
$[13] === Symbol.for("react.memo_cache_sentinel") ? (t5 = [4, 5, 6, 6], $[13] = t5) : t5 = $[13];
|
|
123
|
+
let t6;
|
|
124
|
+
$[14] === Symbol.for("react.memo_cache_sentinel") ? (t6 = /* @__PURE__ */ jsx(Heading, { children: "Workspaces" }), $[14] = t6) : t6 = $[14];
|
|
125
|
+
let t7;
|
|
126
|
+
$[15] === Symbol.for("react.memo_cache_sentinel") ? (t7 = [2, 3, 4, 4], $[15] = t7) : t7 = $[15];
|
|
127
|
+
let t8;
|
|
128
|
+
$[16] === Symbol.for("react.memo_cache_sentinel") ? (t8 = /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: "Search" }), $[16] = t8) : t8 = $[16];
|
|
129
|
+
let t9;
|
|
130
|
+
$[17] !== query ? (t9 = /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
|
|
131
|
+
t8,
|
|
132
|
+
/* @__PURE__ */ jsx(TextInput, { ref: searchInput, value: query, onChange: handleQuery })
|
|
133
|
+
] }), $[17] = query, $[18] = t9) : t9 = $[18];
|
|
134
|
+
let t10;
|
|
135
|
+
if ($[19] !== filteredWorkspaces || $[20] !== query) {
|
|
136
|
+
let t112;
|
|
137
|
+
$[22] !== query ? (t112 = (workspace_0, index_0) => /* @__PURE__ */ jsx(WorkspacePreview, { workspace: workspace_0, index: index_0, query }, workspace_0.name), $[22] = query, $[23] = t112) : t112 = $[23], t10 = filteredWorkspaces.map(t112), $[19] = filteredWorkspaces, $[20] = query, $[21] = t10;
|
|
138
|
+
} else
|
|
139
|
+
t10 = $[21];
|
|
140
|
+
let t11;
|
|
141
|
+
$[24] !== t10 ? (t11 = /* @__PURE__ */ jsx(Box, { children: t10 }), $[24] = t10, $[25] = t11) : t11 = $[25];
|
|
142
|
+
let t12;
|
|
143
|
+
return $[26] !== t11 || $[27] !== t9 ? (t12 = /* @__PURE__ */ jsx(TallCard, { tone: "transparent", children: /* @__PURE__ */ jsx(Flex, { direction: "column", padding: t5, children: /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsxs(Stack, { space: 4, children: [
|
|
144
|
+
t6,
|
|
145
|
+
/* @__PURE__ */ jsx(Card, { padding: t7, radius: 3, shadow: 2, children: /* @__PURE__ */ jsxs(Stack, { space: 3, children: [
|
|
146
|
+
t9,
|
|
147
|
+
t11
|
|
270
148
|
] }) })
|
|
271
|
-
] }) }) }) });
|
|
149
|
+
] }) }) }) }), $[26] = t11, $[27] = t9, $[28] = t12) : t12 = $[28], t12;
|
|
272
150
|
}
|
|
273
|
-
const
|
|
274
|
-
title: "Workspace Home",
|
|
275
|
-
name: "workspace-home",
|
|
276
|
-
icon: icons.HomeIcon,
|
|
277
|
-
component: WorkspaceHome
|
|
278
|
-
}, workspaceHome = sanity.definePlugin(() => ({
|
|
151
|
+
const workspaceHome = definePlugin(() => ({
|
|
279
152
|
name: "sanity-plugin-workspace-home",
|
|
280
|
-
tools: [
|
|
153
|
+
tools: [{
|
|
154
|
+
title: "Workspace Home",
|
|
155
|
+
name: "workspace-home",
|
|
156
|
+
icon: HomeIcon,
|
|
157
|
+
component: WorkspaceHome
|
|
158
|
+
}]
|
|
281
159
|
})), workspaceHomeConfig = ({
|
|
282
160
|
projectId = "",
|
|
283
161
|
dataset = ""
|
|
@@ -287,9 +165,11 @@ const workspaceHomeTool = {
|
|
|
287
165
|
basePath: "/home",
|
|
288
166
|
projectId,
|
|
289
167
|
dataset,
|
|
290
|
-
icon:
|
|
168
|
+
icon: HomeIcon,
|
|
291
169
|
plugins: [workspaceHome()]
|
|
292
170
|
});
|
|
293
|
-
|
|
294
|
-
|
|
171
|
+
export {
|
|
172
|
+
workspaceHome,
|
|
173
|
+
workspaceHomeConfig
|
|
174
|
+
};
|
|
295
175
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../src/components/WorkspacePreview.tsx","../src/components/WorkspaceHome.tsx","../src/tool/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import {DatabaseIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Hotkeys, Stack, Text} from '@sanity/ui'\nimport React, {createElement, isValidElement, useMemo} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {useActiveWorkspace, WorkspaceSummary} from 'sanity'\nimport styled from 'styled-components'\n\nconst createIcon = (icon: React.ComponentType | React.ReactNode) => {\n if (isValidElementType(icon)) return createElement(icon)\n if (isValidElement(icon)) return icon\n return undefined\n}\n\nexport const MediaCard = styled(Card)`\n width: 35px;\n height: 35px;\n\n svg {\n width: 100%;\n height: 100%;\n }\n`\n\nexport type WorkspacePreviewProps = {\n workspace: WorkspaceSummary\n index: number\n query: string\n}\n\nexport default function WorkspacePreview(props: WorkspacePreviewProps) {\n const {workspace, index, query} = props\n const {icon, title, name, subtitle, dataset} = workspace\n\n const {setActiveWorkspace} = useActiveWorkspace()\n const iconComponent = useMemo(() => createIcon(icon), [icon])\n\n // TODO: Favorites feature\n // get favorite workspace name from localStorage\n // const favoriteWorkspace = localStorage.getItem('favoriteWorkspace')\n // save local state to force re-render\n // const [isFavourite, setIsFavourite] = React.useState(favoriteWorkspace === name)\n\n // set favorite workspace name to localStorage\n // const setFavoriteWorkspace = useCallback(() => {\n // localStorage.setItem('favoriteWorkspace', name)\n // }, [name])\n\n const hotKeyIndex = index + 1 === 10 ? 0 : index + 1\n\n return (\n <Card borderTop={Boolean(index)} tone=\"default\">\n <Grid columns={5} gap={[2, 3, 4, 4]} paddingY={1}>\n <Card columnStart={1} columnEnd={4}>\n <Stack>\n <Button\n mode=\"bleed\"\n tone=\"default\"\n onClick={() => setActiveWorkspace(name)}\n >\n <Flex align=\"center\" gap={[2, 3, 4, 4]}>\n {iconComponent ? (\n <MediaCard>{createIcon(iconComponent)}</MediaCard>\n ) : null}\n <Box flex={1}>\n <Stack space={[1, 2, 3, 3]}>\n <Text size={3} weight=\"semibold\" textOverflow=\"ellipsis\">\n {title || name}\n </Text>\n {subtitle ? <Text muted>{subtitle}</Text> : null}\n </Stack>\n </Box>\n </Flex>\n </Button>\n </Stack>\n </Card>\n <Card columnStart={4} columnEnd={5}>\n <Flex height=\"fill\" align=\"center\" gap={2}>\n <Text size={1} weight=\"semibold\">\n <DatabaseIcon />\n </Text>\n <Text size={1} weight=\"semibold\" textOverflow=\"ellipsis\">\n {dataset}\n </Text>\n </Flex>\n </Card>\n <Card paddingRight={[2, 3, 3, 3]}>\n <Flex height=\"fill\" align=\"center\" justify=\"flex-end\">\n {!query && hotKeyIndex < 10 ? (\n <Hotkeys keys={[String(hotKeyIndex)]} padding={2} />\n ) : null}\n </Flex>\n </Card>\n {/* <Button\n mode={isFavourite ? 'default' : 'bleed'}\n tone={isFavourite ? 'primary' : 'default'}\n icon={StarIcon}\n title=\"Favorite\"\n onClick={() => {\n setIsFavourite(!isFavourite)\n setFavoriteWorkspace()\n }}\n /> */}\n </Grid>\n </Card>\n )\n}\n","import {\n Box,\n Card,\n Container,\n Flex,\n Heading,\n Stack,\n Text,\n TextInput,\n} from '@sanity/ui'\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useActiveWorkspace, useWorkspaces} from 'sanity'\nimport styled from 'styled-components'\n\nimport WorkspacePreview from './WorkspacePreview'\n\nexport const TallCard = styled(Card)`\n min-height: 100%;\n`\n\nexport default function WorkspaceHome() {\n const [, ...workspaces] = useWorkspaces()\n const {setActiveWorkspace} = useActiveWorkspace()\n\n // Handle search query\n const [query, setQuery] = useState('')\n const searchInput = useRef(null)\n const handleQuery = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value)\n },\n [setQuery]\n )\n\n // filter workspaces if name, dataset or title matches query\n const filteredWorkspaces = useMemo(() => {\n return workspaces.filter((workspace) => {\n return (\n workspace.name.toLowerCase().includes(query.toLowerCase()) ||\n workspace.dataset.toLowerCase().includes(query.toLowerCase()) ||\n workspace.title.toLowerCase().includes(query.toLowerCase())\n )\n })\n }, [workspaces, query])\n\n // Listen to keypress of workspace index\n useEffect(() => {\n const handleKeypress = (event: KeyboardEvent) => {\n // Ignore if search query exists or search input is focused\n if (query || searchInput.current === document.activeElement) {\n return\n }\n\n const index = parseInt(event.key, 10) - 1\n if (index >= 0 && index < workspaces.length) {\n setActiveWorkspace(workspaces[index].name)\n }\n }\n\n window.addEventListener('keypress', handleKeypress)\n\n return () => {\n window.removeEventListener('keypress', handleKeypress)\n }\n }, [query, workspaces, setActiveWorkspace])\n\n return (\n <TallCard tone=\"transparent\">\n <Flex direction=\"column\" padding={[4, 5, 6, 6]}>\n <Container>\n <Stack space={4}>\n <Heading>Workspaces</Heading>\n <Card padding={[2, 3, 4, 4]} radius={3} shadow={2}>\n <Stack space={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Search\n </Text>\n <TextInput\n ref={searchInput}\n value={query}\n onChange={handleQuery}\n />\n </Stack>\n <Box>\n {filteredWorkspaces.map((workspace, index) => (\n <WorkspacePreview\n key={workspace.name}\n workspace={workspace}\n index={index}\n query={query}\n />\n ))}\n </Box>\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Flex>\n </TallCard>\n )\n}\n","import {HomeIcon} from '@sanity/icons'\n\nimport WorkspaceHome from '../components/WorkspaceHome'\n\nexport const workspaceHomeTool = {\n title: 'Workspace Home',\n name: 'workspace-home',\n icon: HomeIcon,\n component: WorkspaceHome,\n}\n","import {HomeIcon} from '@sanity/icons'\nimport {definePlugin, WorkspaceOptions} from 'sanity'\n\nimport {workspaceHomeTool} from './tool'\n\nexport const workspaceHome = definePlugin(() => {\n return {\n name: 'sanity-plugin-workspace-home',\n tools: [workspaceHomeTool],\n }\n})\n\ntype WorkspaceHomeConfigProps = {\n projectId: string\n dataset: string\n}\n\nexport const workspaceHomeConfig = ({\n projectId = ``,\n dataset = ``,\n}: WorkspaceHomeConfigProps): WorkspaceOptions => ({\n name: 'home',\n title: 'Home',\n basePath: '/home',\n projectId,\n dataset,\n icon: HomeIcon,\n plugins: [workspaceHome()],\n})\n"],"names":["reactIsModule","require$$0","require$$1","isValidElementType","createElement","isValidElement","styled","Card","useActiveWorkspace","useMemo","jsxs","Grid","jsx","Stack","Button","Flex","Box","Text","DatabaseIcon","Hotkeys","useWorkspaces","useState","useRef","useCallback","useEffect","Container","Heading","TextInput","HomeIcon","definePlugin"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/WorkspacePreview.tsx","../src/components/WorkspaceHome.tsx","../src/index.ts"],"sourcesContent":["import {isValidElement, useMemo} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {useActiveWorkspace, type WorkspaceSummary} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {DatabaseIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Hotkeys, Stack, Text} from '@sanity/ui'\n\nconst createIcon = (Icon: React.ComponentType | React.ReactNode) => {\n if (isValidElementType(Icon)) return <Icon />\n if (isValidElement(Icon)) return Icon\n return undefined\n}\n\nconst MediaCard = styled(Card)`\n width: 35px;\n height: 35px;\n\n svg {\n width: 100%;\n height: 100%;\n }\n`\n\nexport type WorkspacePreviewProps = {\n workspace: WorkspaceSummary\n index: number\n query: string\n}\n\nexport default function WorkspacePreview(props: WorkspacePreviewProps) {\n const {workspace, index, query} = props\n const {icon, title, name, subtitle, dataset} = workspace\n\n const {setActiveWorkspace} = useActiveWorkspace()\n const iconComponent = useMemo(() => createIcon(icon), [icon])\n\n // TODO: Favorites feature\n // get favorite workspace name from localStorage\n // const favoriteWorkspace = localStorage.getItem('favoriteWorkspace')\n // save local state to force re-render\n // const [isFavourite, setIsFavourite] = React.useState(favoriteWorkspace === name)\n\n // set favorite workspace name to localStorage\n // const setFavoriteWorkspace = useCallback(() => {\n // localStorage.setItem('favoriteWorkspace', name)\n // }, [name])\n\n const hotKeyIndex = index + 1 === 10 ? 0 : index + 1\n\n return (\n <Card borderTop={Boolean(index)} tone=\"default\">\n <Grid columns={5} gap={[2, 3, 4, 4]} paddingY={1}>\n <Card columnStart={1} columnEnd={4}>\n <Stack>\n <Button mode=\"bleed\" tone=\"default\" onClick={() => setActiveWorkspace(name)}>\n <Flex align=\"center\" gap={[2, 3, 4, 4]}>\n {iconComponent ? <MediaCard>{createIcon(iconComponent)}</MediaCard> : null}\n <Box flex={1}>\n <Stack space={[1, 2, 3, 3]}>\n <Text size={3} weight=\"semibold\" textOverflow=\"ellipsis\">\n {title || name}\n </Text>\n {subtitle ? <Text muted>{subtitle}</Text> : null}\n </Stack>\n </Box>\n </Flex>\n </Button>\n </Stack>\n </Card>\n <Card columnStart={4} columnEnd={5}>\n <Flex height=\"fill\" align=\"center\" gap={2}>\n <Text size={1} weight=\"semibold\">\n <DatabaseIcon />\n </Text>\n <Text size={1} weight=\"semibold\" textOverflow=\"ellipsis\">\n {dataset}\n </Text>\n </Flex>\n </Card>\n <Card paddingRight={[2, 3, 3, 3]}>\n <Flex height=\"fill\" align=\"center\" justify=\"flex-end\">\n {!query && hotKeyIndex < 10 ? (\n <Hotkeys keys={[String(hotKeyIndex)]} padding={2} />\n ) : null}\n </Flex>\n </Card>\n {/* <Button\n mode={isFavourite ? 'default' : 'bleed'}\n tone={isFavourite ? 'primary' : 'default'}\n icon={StarIcon}\n title=\"Favorite\"\n onClick={() => {\n setIsFavourite(!isFavourite)\n setFavoriteWorkspace()\n }}\n /> */}\n </Grid>\n </Card>\n )\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useActiveWorkspace, useWorkspaces} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Box, Card, Container, Flex, Heading, Stack, Text, TextInput} from '@sanity/ui'\n\nimport WorkspacePreview from './WorkspacePreview'\n\nconst TallCard = styled(Card)`\n min-height: 100%;\n`\n\nexport default function WorkspaceHome(): React.JSX.Element {\n const [, ...workspaces] = useWorkspaces()\n const {setActiveWorkspace} = useActiveWorkspace()\n\n // Handle search query\n const [query, setQuery] = useState('')\n const searchInput = useRef(null)\n const handleQuery = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value)\n },\n [setQuery],\n )\n\n // filter workspaces if name, dataset or title matches query\n const filteredWorkspaces = useMemo(() => {\n return workspaces.filter((workspace) => {\n return (\n workspace.name.toLowerCase().includes(query.toLowerCase()) ||\n workspace.dataset.toLowerCase().includes(query.toLowerCase()) ||\n workspace.title.toLowerCase().includes(query.toLowerCase())\n )\n })\n }, [workspaces, query])\n\n // Listen to keypress of workspace index\n useEffect(() => {\n const handleKeypress = (event: KeyboardEvent) => {\n // Ignore if search query exists or search input is focused\n if (query || searchInput.current === document.activeElement) {\n return\n }\n\n const index = parseInt(event.key, 10) - 1\n if (index >= 0 && index < workspaces.length) {\n setActiveWorkspace(workspaces[index]!.name)\n }\n }\n\n window.addEventListener('keypress', handleKeypress)\n\n return () => {\n window.removeEventListener('keypress', handleKeypress)\n }\n }, [query, workspaces, setActiveWorkspace])\n\n return (\n <TallCard tone=\"transparent\">\n <Flex direction=\"column\" padding={[4, 5, 6, 6]}>\n <Container>\n <Stack space={4}>\n <Heading>Workspaces</Heading>\n <Card padding={[2, 3, 4, 4]} radius={3} shadow={2}>\n <Stack space={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Search\n </Text>\n <TextInput ref={searchInput} value={query} onChange={handleQuery} />\n </Stack>\n <Box>\n {filteredWorkspaces.map((workspace, index) => (\n <WorkspacePreview\n key={workspace.name}\n workspace={workspace}\n index={index}\n query={query}\n />\n ))}\n </Box>\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Flex>\n </TallCard>\n )\n}\n","import {definePlugin, type WorkspaceOptions} from 'sanity'\n\nimport {HomeIcon} from '@sanity/icons'\n\nimport WorkspaceHome from './components/WorkspaceHome'\n\nexport const workspaceHome = definePlugin(() => {\n return {\n name: 'sanity-plugin-workspace-home',\n tools: [\n {\n title: 'Workspace Home',\n name: 'workspace-home',\n icon: HomeIcon,\n component: WorkspaceHome,\n },\n ],\n }\n})\n\ntype WorkspaceHomeConfigProps = {\n projectId: string\n dataset: string\n}\n\nexport const workspaceHomeConfig = ({\n projectId = ``,\n dataset = ``,\n}: WorkspaceHomeConfigProps): WorkspaceOptions => ({\n name: 'home',\n title: 'Home',\n basePath: '/home',\n projectId,\n dataset,\n icon: HomeIcon,\n plugins: [workspaceHome()],\n})\n"],"names":["createIcon","Icon","isValidElementType","isValidElement","MediaCard","styled","Card","WorkspacePreview","props","$","_c","workspace","index","query","icon","title","name","subtitle","dataset","setActiveWorkspace","useActiveWorkspace","t0","iconComponent","hotKeyIndex","t1","Boolean","t2","Symbol","for","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","String","t17","t18","t19","TallCard","WorkspaceHome","useWorkspaces","workspaces","setQuery","useState","searchInput","useRef","e","target","value","handleQuery","toLowerCase","includes","filter","filteredWorkspaces","handleKeypress","event","current","document","activeElement","parseInt","key","length","window","addEventListener","removeEventListener","useEffect","workspace_0","index_0","map","workspaceHome","definePlugin","tools","HomeIcon","component","workspaceHomeConfig","projectId","basePath","plugins"],"mappings":";;;;;;;;AAQA,MAAMA,aAAcC,CAAAA,SAAgD;AAClE,MAAIC,mBAAmBD,IAAI,EAAG,4BAAQ,MAAA,CAAA,CAAI;AAC1C,MAAIE,eAAeF,IAAI,EAAG,QAAOA;AAEnC,GAEMG,YAAYC,OAAOC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB7B,SAAeC,iBAAAC,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACb;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAkCL,OAClC;AAAA,IAAAM;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAA+CP,WAE/C;AAAA,IAAAQ;AAAAA,EAAAA,IAA6BC,mBAAAA;AAAoB,MAAAC;AAAAZ,WAAAK,QACbO,KAAArB,WAAWc,IAAI,GAACL,OAAAK,MAAAL,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAApD,QAAAa,gBAAoCD,IAapCE,cAAoBX,QAAQ,MAAM,KAAd,IAAuBA,QAAQ,GAGhCY,KAAAC,CAAAA,CAAQb;AAAM,MAAAc;AAAAjB,IAAA,CAAA,MAAAkB,OAAAC,IAAA,2BAAA,KACNF,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACjB,OAAAiB,MAAAA,KAAAjB,EAAA,CAAA;AAAA,MAAAoB;AAAApB,IAAA,CAAA,MAAAO,QAAAP,SAAAU,sBAGgBU,KAAAA,MAAMV,mBAAmBH,IAAI,GAACP,OAAAO,MAAAP,OAAAU,oBAAAV,OAAAoB,MAAAA,KAAApB,EAAA,CAAA;AAAA,MAAAqB;AAAArB,IAAA,CAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAC/CE,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACrB,OAAAqB,MAAAA,KAAArB,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAa,iBACnCS,KAAAT,gBAAgB,oBAAC,WAAA,EAAWtB,UAAAA,WAAWsB,aAAa,EAAA,CAAE,IAAtD,MAAyEb,OAAAa,eAAAb,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,IAAA,CAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAE1DI,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACvB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAErB,QAAAwB,KAAAlB,SAAAC;AAAa,MAAAkB;AAAAzB,YAAAwB,MADhBC,yBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YAAwB,cAAA,YAC3CD,UAAAA,GAAAA,CACH,GAAOxB,QAAAwB,IAAAxB,QAAAyB,MAAAA,KAAAzB,EAAA,EAAA;AAAA,MAAA0B;AAAA1B,YAAAQ,YACNkB,KAAAlB,WAAW,oBAAC,MAAA,EAAK,OAAA,IAAOA,UAAAA,UAAS,IAAjC,MAA+CR,QAAAQ,UAAAR,QAAA0B,MAAAA,KAAA1B,EAAA,EAAA;AAAA,MAAA2B;AAAA3B,IAAA,EAAA,MAAAyB,MAAAzB,UAAA0B,MALpDC,MAAA,oBAAC,OAAU,MAAA,GACT,UAAA,qBAAC,OAAA,EAAa,OAAAJ,IACZE,UAAAA;AAAAA,IAAAA;AAAAA,IAGCC;AAAAA,EAAAA,EAAAA,CACH,GACF,GAAM1B,QAAAyB,IAAAzB,QAAA0B,IAAA1B,QAAA2B,OAAAA,MAAA3B,EAAA,EAAA;AAAA,MAAA4B;AAAA5B,IAAA,EAAA,MAAA2B,OAAA3B,UAAAsB,MATRM,MAAA,qBAAC,MAAA,EAAW,OAAA,UAAc,KAAAP,IACvBC,UAAAA;AAAAA,IAAAA;AAAAA,IACDK;AAAAA,EAAAA,EAAAA,CAQF,GAAO3B,QAAA2B,KAAA3B,QAAAsB,IAAAtB,QAAA4B,OAAAA,MAAA5B,EAAA,EAAA;AAAA,MAAA6B;AAAA7B,IAAA,EAAA,MAAA4B,OAAA5B,UAAAoB,MAbbS,0BAAC,MAAA,EAAkB,aAAA,GAAc,cAC/B,8BAAC,OAAA,EACC,UAAA,oBAAC,UAAY,MAAA,SAAa,MAAA,WAAmB,SAAAT,IAC3CQ,UAAAA,IAAAA,CAWF,GACF,GACF,GAAO5B,QAAA4B,KAAA5B,QAAAoB,IAAApB,QAAA6B,OAAAA,MAAA7B,EAAA,EAAA;AAAA,MAAA8B;AAAA9B,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAGHW,0BAAC,MAAA,EAAW,SAAU,QAAA,YACpB,UAAA,oBAAC,cAAA,CAAA,CAAY,EAAA,CACf,GAAO9B,QAAA8B,OAAAA,MAAA9B,EAAA,EAAA;AAAA,MAAA+B;AAAA/B,YAAAS,WAJXsB,MAAA,oBAAC,QAAkB,gBAAc,WAAA,GAC/B,+BAAC,MAAA,EAAY,QAAA,QAAa,OAAA,UAAc,KAAA,GACtCD,UAAAA;AAAAA,IAAAA;AAAAA,IAGA,oBAAC,QAAW,SAAU,QAAA,YAAwB,cAAA,YAC3CrB,UAAAA,QAAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,GAAOT,QAAAS,SAAAT,QAAA+B,OAAAA,MAAA/B,EAAA,EAAA;AAAA,MAAAgC;AAAAhC,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KACaa,MAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAAChC,QAAAgC,OAAAA,MAAAhC,EAAA,EAAA;AAAA,MAAAiC;AAAAjC,IAAA,EAAA,MAAAc,eAAAd,UAAAI,SAE3B6B,MAAA,CAAC7B,SAASU,cAAc,yBACtB,SAAA,EAAc,OAACoB,OAAOpB,WAAW,CAAC,GAAY,SAAA,EAAA,CAAC,IADjD,MAEOd,QAAAc,aAAAd,QAAAI,OAAAJ,QAAAiC,OAAAA,MAAAjC,EAAA,EAAA;AAAA,MAAAmC;AAAAnC,YAAAiC,OAJZE,MAAA,oBAAC,MAAA,EAAmB,cAAAH,KAClB,UAAA,oBAAC,MAAA,EAAY,QAAA,QAAa,OAAA,UAAiB,SAAA,YACxCC,UAAAA,IAAAA,CAGH,EAAA,CACF,GAAOjC,QAAAiC,KAAAjC,QAAAmC,OAAAA,MAAAnC,EAAA,EAAA;AAAA,MAAAoC;AAAApC,IAAA,EAAA,MAAA6B,OAAA7B,UAAA+B,OAAA/B,EAAA,EAAA,MAAAmC,OAlCTC,2BAAC,MAAA,EAAc,SAAA,GAAQ,KAAAnB,IAAwB,UAAA,GAC7CY,UAAAA;AAAAA,IAAAA;AAAAA,IAiBAE;AAAAA,IAUAI;AAAAA,EAAAA,GAiBF,GAAOnC,QAAA6B,KAAA7B,QAAA+B,KAAA/B,QAAAmC,KAAAnC,QAAAoC,OAAAA,MAAApC,EAAA,EAAA;AAAA,MAAAqC;AAAA,SAAArC,EAAA,EAAA,MAAAe,MAAAf,UAAAoC,OA9CTC,0BAAC,MAAA,EAAgB,WAAAtB,IAAqB,MAAA,WACpCqB,UAAAA,IAAAA,CA8CF,GAAOpC,QAAAe,IAAAf,QAAAoC,KAAApC,QAAAqC,OAAAA,MAAArC,EAAA,EAAA,GA/CPqC;AA+CO;AC1FX,MAAMC,WAAW1C,OAAOC,IAAI;AAAA;AAAA;AAI5B,SAAe0C,gBAAA;AAAA,QAAAvC,IAAAC,EAAA,EAAA,GACaW,KAAA4B,cAAAA;AAAe,MAAAC;AAAAzC,WAAAY,MAAzC,CAAA,EAAA,GAAA6B,UAAA,IAA0B7B,IAAeZ,OAAAY,IAAAZ,OAAAyC,cAAAA,aAAAzC,EAAA,CAAA;AACzC,QAAA;AAAA,IAAAU;AAAAA,EAAAA,IAA6BC,mBAAAA,GAG7B,CAAAP,OAAAsC,QAAA,IAA0BC,SAAS,EAAE,GACrCC,cAAoBC,OAAO,IAAI;AAAC,MAAA9B;AAAAf,IAAA,CAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAE9BJ,KAAA+B,CAAAA,MAAA;AACEJ,aAASI,EAACC,OAAOC,KAAM;AAAA,EAAC,GACzBhD,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAHH,QAAAiD,cAAoBlC;AAKnB,MAAAE;AAAA,MAAAjB,EAAA,CAAA,MAAAI,SAAAJ,SAAAyC,YAAA;AAAA,QAAArB;AAAApB,aAAAI,SAI0BgB,MAAAlB,CAAAA,cAErBA,UAASK,KAAK2C,YAAAA,EAAcC,SAAU/C,MAAK8C,YAAAA,CACiB,KAA5DhD,UAASO,QAAQyC,cAAcC,SAAU/C,MAAK8C,aAAc,KAC5DhD,UAASI,MAAM4C,YAAAA,EAAcC,SAAU/C,MAAK8C,YAAAA,CAAc,GAE7DlD,OAAAI,OAAAJ,OAAAoB,OAAAA,MAAApB,EAAA,CAAA,GANMiB,KAAAwB,WAAUW,OAAQhC,GAMxB,GAACpB,OAAAI,OAAAJ,OAAAyC,YAAAzC,OAAAiB;AAAAA,EAAA;AAAAA,SAAAjB,EAAA,CAAA;AAPJ,QAAAqD,qBACEpC;AAOqB,MAAAG,IAAAC;AAAArB,IAAA,CAAA,MAAAI,SAAAJ,SAAAU,sBAAAV,EAAA,EAAA,MAAAyC,cAGbrB,KAAAA,MAAA;AACR,UAAAkC,iBAAuBC,CAAAA,UAAA;AAErB,UAAInD,SAASwC,YAAWY,YAAaC,SAAQC;AAAc;AAI3D,YAAAvD,QAAcwD,SAASJ,MAAKK,KAAM,EAAE,IAAI;AACpCzD,eAAS,KAAKA,QAAQsC,WAAUoB,UAClCnD,mBAAmB+B,WAAWtC,KAAK,EAACI,IAAM;AAAA,IAC3C;AAGHuD,WAAAA,OAAMC,iBAAkB,YAAYT,cAAc,GAE3C,MAAA;AACLQ,aAAME,oBAAqB,YAAYV,cAAc;AAAA,IAAC;AAAA,EACvD,GACAjC,MAACjB,OAAOqC,YAAY/B,kBAAkB,GAACV,OAAAI,OAAAJ,OAAAU,oBAAAV,QAAAyC,YAAAzC,QAAAoB,IAAApB,QAAAqB,OAAAD,KAAApB,EAAA,EAAA,GAAAqB,KAAArB,EAAA,EAAA,IAlB1CiE,UAAU7C,IAkBPC,EAAuC;AAAC,MAAAC;AAAAtB,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAILG,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACtB,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAAA,MAAAuB;AAAAvB,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAGxCI,yBAAC,SAAA,EAAQ,UAAA,aAAA,CAAU,GAAUvB,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,MAAAwB;AAAAxB,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KACdK,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACxB,QAAAwB,MAAAA,KAAAxB,EAAA,EAAA;AAAA,MAAAyB;AAAAzB,IAAA,EAAA,MAAAkB,OAAAC,IAAA,2BAAA,KAGrBM,KAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YAAW,oBAEjC,GAAOzB,QAAAyB,MAAAA,KAAAzB,EAAA,EAAA;AAAA,MAAA0B;AAAA1B,YAAAI,SAHTsB,KAAA,qBAAC,OAAA,EAAa,OAAA,GACZD,UAAAA;AAAAA,IAAAA;AAAAA,wBAGC,WAAA,EAAemB,KAAAA,aAAoBxC,OAAAA,OAAiB6C,UAAAA,YAAAA,CAAW;AAAA,EAAA,EAAA,CAClE,GAAQjD,QAAAI,OAAAJ,QAAA0B,MAAAA,KAAA1B,EAAA,EAAA;AAAA,MAAA2B;AAAA,MAAA3B,EAAA,EAAA,MAAAqD,sBAAArD,UAAAI,OAAA;AAAA,QAAAwB;AAAA5B,cAAAI,SAEkBwB,OAAAA,CAAAsC,aAAAC,YACtB,oBAAC,kBAAA,EAEYjE,WAAAA,aACJC,OAAAA,SACAC,SAHFF,YAASK,IAGF,GAEfP,QAAAI,OAAAJ,QAAA4B,QAAAA,OAAA5B,EAAA,EAAA,GAPA2B,MAAA0B,mBAAkBe,IAAKxC,IAOvB,GAAC5B,QAAAqD,oBAAArD,QAAAI,OAAAJ,QAAA2B;AAAAA,EAAA;AAAAA,UAAA3B,EAAA,EAAA;AAAA,MAAA4B;AAAA5B,YAAA2B,OARJC,MAAA,oBAAC,OACED,UAAAA,IAAAA,CAQH,GAAM3B,QAAA2B,KAAA3B,QAAA4B,OAAAA,MAAA5B,EAAA,EAAA;AAAA,MAAA6B;AAAA,SAAA7B,EAAA,EAAA,MAAA4B,OAAA5B,UAAA0B,MAtBlBG,0BAAC,UAAA,EAAc,MAAA,eACb,UAAA,oBAAC,MAAA,EAAe,WAAA,UAAkB,SAAAP,IAChC,8BAAC,WAAA,EACC,UAAA,qBAAC,OAAA,EAAa,OAAA,GACZC,UAAAA;AAAAA,IAAAA;AAAAA,IACA,oBAAC,MAAA,EAAc,SAAAC,IAAsB,QAAA,GAAW,QAAA,GAC9C,UAAA,qBAAC,OAAA,EAAa,UACZE,UAAAA;AAAAA,MAAAA;AAAAA,MAMAE;AAAAA,IAAAA,EAAAA,CAUF,EAAA,CACF;AAAA,EAAA,GACF,GACF,EAAA,CACF,EAAA,CACF,GAAW5B,QAAA4B,KAAA5B,QAAA0B,IAAA1B,QAAA6B,OAAAA,MAAA7B,EAAA,EAAA,GA5BX6B;AA4BW;ACjFR,MAAMwC,gBAAgBC,aAAa,OACjC;AAAA,EACL/D,MAAM;AAAA,EACNgE,OAAO,CACL;AAAA,IACEjE,OAAO;AAAA,IACPC,MAAM;AAAA,IACNF,MAAMmE;AAAAA,IACNC,WAAWlC;AAAAA,EAAAA,CACZ;AAEL,EACD,GAOYmC,sBAAsBA,CAAC;AAAA,EAClCC,YAAY;AAAA,EACZlE,UAAU;AACc,OAAyB;AAAA,EACjDF,MAAM;AAAA,EACND,OAAO;AAAA,EACPsE,UAAU;AAAA,EACVD;AAAAA,EACAlE;AAAAA,EACAJ,MAAMmE;AAAAA,EACNK,SAAS,CAACR,cAAAA,CAAe;AAC3B;"}
|