sanity-plugin-workspace-home 1.1.3 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Sanity
3
+ Copyright (c) 2025 Sanity.io
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -52,19 +52,3 @@ export default defineConfig([{
52
52
  ## License
53
53
 
54
54
  [MIT](LICENSE) © Sanity
55
-
56
- ## Develop & test
57
-
58
- This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)
59
- with default configuration for build & watch scripts.
60
-
61
- See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio)
62
- on how to run this plugin with hotreload in the studio.
63
-
64
-
65
- ### Release new version
66
-
67
- Run ["CI & Release" workflow](TODO/actions/workflows/main.yml).
68
- Make sure to select the main branch and check "Release new version".
69
-
70
- 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 {Plugin as Plugin_2} from 'sanity'
2
- import {WorkspaceOptions} from 'sanity'
3
-
4
- export declare const workspaceHome: Plugin_2<void>
5
-
6
- export declare const workspaceHomeConfig: ({
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,192 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: !0 });
3
- var icons = require("@sanity/icons"), sanity = require("sanity"), jsxRuntime = require("react/jsx-runtime"), ui = require("@sanity/ui"), react = require("react"), styledComponents = require("styled-components"), reactIs = { exports: {} }, reactIs_production_min = {};
4
- /**
5
- * @license React
6
- * react-is.production.min.js
7
- *
8
- * Copyright (c) Facebook, Inc. and its affiliates.
9
- *
10
- * This source code is licensed under the MIT license found in the
11
- * LICENSE file in the root directory of this source tree.
12
- */
13
- var hasRequiredReactIs_production_min;
14
- function requireReactIs_production_min() {
15
- if (hasRequiredReactIs_production_min)
16
- return reactIs_production_min;
17
- hasRequiredReactIs_production_min = 1;
18
- 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;
19
- u = Symbol.for("react.module.reference");
20
- function v(a) {
21
- if (typeof a == "object" && a !== null) {
22
- var r = a.$$typeof;
23
- switch (r) {
24
- case b:
25
- switch (a = a.type, a) {
26
- case d:
27
- case f:
28
- case e:
29
- case m:
30
- case n:
31
- return a;
32
- default:
33
- switch (a = a && a.$$typeof, a) {
34
- case k:
35
- case h:
36
- case l:
37
- case q:
38
- case p:
39
- case g:
40
- return a;
41
- default:
42
- return r;
43
- }
44
- }
45
- case c:
46
- return r;
47
- }
48
- }
49
- }
50
- 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() {
51
- return !1;
52
- }, reactIs_production_min.isConcurrentMode = function() {
53
- return !1;
54
- }, reactIs_production_min.isContextConsumer = function(a) {
55
- return v(a) === h;
56
- }, reactIs_production_min.isContextProvider = function(a) {
57
- return v(a) === g;
58
- }, reactIs_production_min.isElement = function(a) {
59
- return typeof a == "object" && a !== null && a.$$typeof === b;
60
- }, reactIs_production_min.isForwardRef = function(a) {
61
- return v(a) === l;
62
- }, reactIs_production_min.isFragment = function(a) {
63
- return v(a) === d;
64
- }, reactIs_production_min.isLazy = function(a) {
65
- return v(a) === q;
66
- }, reactIs_production_min.isMemo = function(a) {
67
- return v(a) === p;
68
- }, reactIs_production_min.isPortal = function(a) {
69
- return v(a) === c;
70
- }, reactIs_production_min.isProfiler = function(a) {
71
- return v(a) === f;
72
- }, reactIs_production_min.isStrictMode = function(a) {
73
- return v(a) === e;
74
- }, reactIs_production_min.isSuspense = function(a) {
75
- return v(a) === m;
76
- }, reactIs_production_min.isSuspenseList = function(a) {
77
- return v(a) === n;
78
- }, reactIs_production_min.isValidElementType = function(a) {
79
- 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);
80
- }, reactIs_production_min.typeOf = v, reactIs_production_min;
81
- }
82
- var reactIs_development = {};
83
- /**
84
- * @license React
85
- * react-is.development.js
86
- *
87
- * Copyright (c) Facebook, Inc. and its affiliates.
88
- *
89
- * This source code is licensed under the MIT license found in the
90
- * LICENSE file in the root directory of this source tree.
91
- */
92
- var hasRequiredReactIs_development;
93
- function requireReactIs_development() {
94
- return hasRequiredReactIs_development || (hasRequiredReactIs_development = 1, process.env.NODE_ENV !== "production" && function() {
95
- 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;
96
- REACT_MODULE_REFERENCE = Symbol.for("react.module.reference");
97
- function isValidElementType(type) {
98
- 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
99
- // types supported by any Flight configuration anywhere since
100
- // we don't know which Flight build this will end up being used
101
- // with.
102
- type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== void 0));
103
- }
104
- function typeOf(object) {
105
- if (typeof object == "object" && object !== null) {
106
- var $$typeof = object.$$typeof;
107
- switch ($$typeof) {
108
- case REACT_ELEMENT_TYPE:
109
- var type = object.type;
110
- switch (type) {
111
- case REACT_FRAGMENT_TYPE:
112
- case REACT_PROFILER_TYPE:
113
- case REACT_STRICT_MODE_TYPE:
114
- case REACT_SUSPENSE_TYPE:
115
- case REACT_SUSPENSE_LIST_TYPE:
116
- return type;
117
- default:
118
- var $$typeofType = type && type.$$typeof;
119
- switch ($$typeofType) {
120
- case REACT_SERVER_CONTEXT_TYPE:
121
- case REACT_CONTEXT_TYPE:
122
- case REACT_FORWARD_REF_TYPE:
123
- case REACT_LAZY_TYPE:
124
- case REACT_MEMO_TYPE:
125
- case REACT_PROVIDER_TYPE:
126
- return $$typeofType;
127
- default:
128
- return $$typeof;
129
- }
130
- }
131
- case REACT_PORTAL_TYPE:
132
- return $$typeof;
133
- }
134
- }
135
- }
136
- 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;
137
- function isAsyncMode(object) {
138
- return hasWarnedAboutDeprecatedIsAsyncMode || (hasWarnedAboutDeprecatedIsAsyncMode = !0, console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 18+.")), !1;
139
- }
140
- function isConcurrentMode(object) {
141
- return hasWarnedAboutDeprecatedIsConcurrentMode || (hasWarnedAboutDeprecatedIsConcurrentMode = !0, console.warn("The ReactIs.isConcurrentMode() alias has been deprecated, and will be removed in React 18+.")), !1;
142
- }
143
- function isContextConsumer(object) {
144
- return typeOf(object) === REACT_CONTEXT_TYPE;
145
- }
146
- function isContextProvider(object) {
147
- return typeOf(object) === REACT_PROVIDER_TYPE;
148
- }
149
- function isElement(object) {
150
- return typeof object == "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
151
- }
152
- function isForwardRef(object) {
153
- return typeOf(object) === REACT_FORWARD_REF_TYPE;
154
- }
155
- function isFragment(object) {
156
- return typeOf(object) === REACT_FRAGMENT_TYPE;
157
- }
158
- function isLazy(object) {
159
- return typeOf(object) === REACT_LAZY_TYPE;
160
- }
161
- function isMemo(object) {
162
- return typeOf(object) === REACT_MEMO_TYPE;
163
- }
164
- function isPortal(object) {
165
- return typeOf(object) === REACT_PORTAL_TYPE;
166
- }
167
- function isProfiler(object) {
168
- return typeOf(object) === REACT_PROFILER_TYPE;
169
- }
170
- function isStrictMode(object) {
171
- return typeOf(object) === REACT_STRICT_MODE_TYPE;
172
- }
173
- function isSuspense(object) {
174
- return typeOf(object) === REACT_SUSPENSE_TYPE;
175
- }
176
- function isSuspenseList(object) {
177
- return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
178
- }
179
- 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;
180
- }()), reactIs_development;
181
- }
182
- process.env.NODE_ENV === "production" ? reactIs.exports = requireReactIs_production_min() : reactIs.exports = requireReactIs_development();
183
- var reactIsExports = reactIs.exports;
184
- const createIcon = (icon) => {
185
- if (reactIsExports.isValidElementType(icon))
186
- return react.createElement(icon);
187
- if (react.isValidElement(icon))
188
- return icon;
189
- }, MediaCard = styledComponents.styled(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)`
190
13
  width: 35px;
191
14
  height: 35px;
192
15
 
@@ -196,41 +19,95 @@ const createIcon = (icon) => {
196
19
  }
197
20
  `;
198
21
  function WorkspacePreview(props) {
199
- const { workspace, index, query } = props, { icon, title, name, subtitle, dataset } = workspace, { setActiveWorkspace } = sanity.useActiveWorkspace(), iconComponent = react.useMemo(() => createIcon(icon), [icon]), hotKeyIndex = index + 1 === 10 ? 0 : index + 1;
200
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { borderTop: !!index, tone: "default", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Grid, { columns: 5, gap: [2, 3, 4, 4], paddingY: 1, children: [
201
- /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { columnStart: 1, columnEnd: 4, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Stack, { children: /* @__PURE__ */ jsxRuntime.jsx(
202
- ui.Button,
203
- {
204
- mode: "bleed",
205
- tone: "default",
206
- onClick: () => setActiveWorkspace(name),
207
- children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { align: "center", gap: [2, 3, 4, 4], children: [
208
- iconComponent ? /* @__PURE__ */ jsxRuntime.jsx(MediaCard, { children: createIcon(iconComponent) }) : null,
209
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { flex: 1, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: [1, 2, 3, 3], children: [
210
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 3, weight: "semibold", textOverflow: "ellipsis", children: title || name }),
211
- subtitle ? /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { muted: !0, children: subtitle }) : null
212
- ] }) })
213
- ] })
214
- }
215
- ) }) }),
216
- /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { columnStart: 4, columnEnd: 5, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { height: "fill", align: "center", gap: 2, children: [
217
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 1, weight: "semibold", children: /* @__PURE__ */ jsxRuntime.jsx(icons.DatabaseIcon, {}) }),
218
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 1, weight: "semibold", textOverflow: "ellipsis", children: dataset })
219
- ] }) }),
220
- /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { paddingRight: [2, 3, 3, 3], children: /* @__PURE__ */ jsxRuntime.jsx(ui.Flex, { height: "fill", align: "center", justify: "flex-end", children: !query && hotKeyIndex < 10 ? /* @__PURE__ */ jsxRuntime.jsx(ui.Hotkeys, { keys: [String(hotKeyIndex)], padding: 2 }) : null }) })
221
- ] }) });
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;
222
86
  }
223
- const TallCard = styledComponents.styled(ui.Card)`
87
+ const TallCard = styled(Card)`
224
88
  min-height: 100%;
225
89
  `;
226
90
  function WorkspaceHome() {
227
- const [, ...workspaces] = sanity.useWorkspaces(), { setActiveWorkspace } = sanity.useActiveWorkspace(), [query, setQuery] = react.useState(""), searchInput = react.useRef(null), handleQuery = react.useCallback(
228
- (e) => {
229
- setQuery(e.target.value);
230
- },
231
- [setQuery]
232
- ), filteredWorkspaces = react.useMemo(() => workspaces.filter((workspace) => workspace.name.toLowerCase().includes(query.toLowerCase()) || workspace.dataset.toLowerCase().includes(query.toLowerCase()) || workspace.title.toLowerCase().includes(query.toLowerCase())), [workspaces, query]);
233
- return react.useEffect(() => {
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 = () => {
234
111
  const handleKeypress = (event) => {
235
112
  if (query || searchInput.current === document.activeElement)
236
113
  return;
@@ -240,40 +117,45 @@ function WorkspaceHome() {
240
117
  return window.addEventListener("keypress", handleKeypress), () => {
241
118
  window.removeEventListener("keypress", handleKeypress);
242
119
  };
243
- }, [query, workspaces, setActiveWorkspace]), /* @__PURE__ */ jsxRuntime.jsx(TallCard, { tone: "transparent", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Flex, { direction: "column", padding: [4, 5, 6, 6], children: /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: 4, children: [
244
- /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: "Workspaces" }),
245
- /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { padding: [2, 3, 4, 4], radius: 3, shadow: 2, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: 3, children: [
246
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: 2, children: [
247
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 1, weight: "semibold", children: "Search" }),
248
- /* @__PURE__ */ jsxRuntime.jsx(
249
- ui.TextInput,
250
- {
251
- ref: searchInput,
252
- value: query,
253
- onChange: handleQuery
254
- }
255
- )
256
- ] }),
257
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { children: filteredWorkspaces.map((workspace, index) => /* @__PURE__ */ jsxRuntime.jsx(
258
- WorkspacePreview,
259
- {
260
- workspace,
261
- index,
262
- query
263
- },
264
- workspace.name
265
- )) })
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
266
148
  ] }) })
267
- ] }) }) }) });
149
+ ] }) }) }) }), $[26] = t11, $[27] = t9, $[28] = t12) : t12 = $[28], t12;
268
150
  }
269
- const workspaceHomeTool = {
270
- title: "Workspace Home",
271
- name: "workspace-home",
272
- icon: icons.HomeIcon,
273
- component: WorkspaceHome
274
- }, workspaceHome = sanity.definePlugin(() => ({
151
+ const workspaceHome = definePlugin(() => ({
275
152
  name: "sanity-plugin-workspace-home",
276
- tools: [workspaceHomeTool]
153
+ tools: [{
154
+ title: "Workspace Home",
155
+ name: "workspace-home",
156
+ icon: HomeIcon,
157
+ component: WorkspaceHome
158
+ }]
277
159
  })), workspaceHomeConfig = ({
278
160
  projectId = "",
279
161
  dataset = ""
@@ -283,9 +165,11 @@ const workspaceHomeTool = {
283
165
  basePath: "/home",
284
166
  projectId,
285
167
  dataset,
286
- icon: icons.HomeIcon,
168
+ icon: HomeIcon,
287
169
  plugins: [workspaceHome()]
288
170
  });
289
- exports.workspaceHome = workspaceHome;
290
- exports.workspaceHomeConfig = workspaceHomeConfig;
171
+ export {
172
+ workspaceHome,
173
+ workspaceHomeConfig
174
+ };
291
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":";;;;;;;;;;;;;;;;;AASa,MAAI,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,cAAc,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,mBAAmB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,sBAAsB,GAAE,IAAE,OAAO,IAAI,mBAAmB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,qBAAqB,GAAE,IAAE,OAAO,IAAI,YAAY,GAAE,IAAE,OAAO,IAAI,YAAY,GAAE,IAAE,OAAO,IAAI,iBAAiB,GAAE;AAAE,MAAE,OAAO,IAAI,wBAAwB;AAChf,WAAS,EAAE,GAAE;AAAC,QAAc,OAAO,KAAlB,YAA4B,MAAP,MAAS;AAAC,UAAI,IAAE,EAAE;AAAS,cAAO,GAAC;AAAA,QAAE,KAAK;AAAE,kBAAO,IAAE,EAAE,MAAK;YAAG,KAAK;AAAA,YAAE,KAAK;AAAA,YAAE,KAAK;AAAA,YAAE,KAAK;AAAA,YAAE,KAAK;AAAE,qBAAO;AAAA,YAAE;AAAQ,sBAAO,IAAE,KAAG,EAAE,UAAS,GAAG;AAAA,gBAAA,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAE,yBAAO;AAAA,gBAAE;AAAQ,yBAAO;AAAA,cAAC;AAAA,UAAC;AAAA,QAAC,KAAK;AAAE,iBAAO;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,gCAAuB,kBAAC,GAAE,yCAAwB,GAAE,uBAAA,UAAgB,GAAE,uBAAA,aAAmB,GAAE,uBAAgB,WAAC,GAAE,uBAAY,OAAC,GAAE,uBAAA,OAAa,GAAE,uBAAA,SAAe,GAAE,uBAAgB,WAAC,GAAE,oCAAmB,GAAE,uBAAA,WAAiB,GAChe,uBAAA,eAAqB,GAAE,uBAAA,cAAoB,WAAU;AAAC,WAAM;AAAA,EAAE,GAAE,0CAAyB,WAAU;AAAC,WAAM;AAAA,EAAE,GAAE,uBAAyB,oBAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAyB,oBAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAiB,YAAC,SAAS,GAAE;AAAC,WAAiB,OAAO,KAAlB,YAA4B,MAAP,QAAU,EAAE,aAAW;AAAA,EAAC,GAAE,uBAAoB,eAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAkB,aAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAc,SAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAc,SAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GACve,uBAAA,WAAiB,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,oCAAmB,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAoB,eAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAA,aAAmB,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GAAE,uBAAsB,iBAAC,SAAS,GAAE;AAAC,WAAO,EAAE,CAAC,MAAI;AAAA,EAAC,GACxN,uBAAA,qBAAC,SAAS,GAAE;AAAC,WAAiB,OAAO,KAAlB,YAAkC,OAAO,KAApB,cAAuB,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAc,OAAO,KAAlB,YAA4B,MAAP,SAAW,EAAE,aAAW,KAAG,EAAE,aAAW,KAAG,EAAE,aAAW,KAAG,EAAE,aAAW,KAAG,EAAE,aAAW,KAAG,EAAE,aAAW,KAAY,EAAE,gBAAX;AAAA,EAA6B,GAAE,uBAAc,SAAC;;;;;;;;;;;;;;gFCD7S,QAAQ,IAAI,aAAa,gBAC1B,WAAW;AAOd,QAAI,qBAAqB,OAAO,IAAI,eAAe,GAC/C,oBAAoB,OAAO,IAAI,cAAc,GAC7C,sBAAsB,OAAO,IAAI,gBAAgB,GACjD,yBAAyB,OAAO,IAAI,mBAAmB,GACvD,sBAAsB,OAAO,IAAI,gBAAgB,GACjD,sBAAsB,OAAO,IAAI,gBAAgB,GACjD,qBAAqB,OAAO,IAAI,eAAe,GAC/C,4BAA4B,OAAO,IAAI,sBAAsB,GAC7D,yBAAyB,OAAO,IAAI,mBAAmB,GACvD,sBAAsB,OAAO,IAAI,gBAAgB,GACjD,2BAA2B,OAAO,IAAI,qBAAqB,GAC3D,kBAAkB,OAAO,IAAI,YAAY,GACzC,kBAAkB,OAAO,IAAI,YAAY,GACzC,uBAAuB,OAAO,IAAI,iBAAiB,GAInD,iBAAiB,IACjB,qBAAqB,IACrB,0BAA0B,IAE1B,qBAAqB,IAIrB,qBAAqB,IAErB;AAGF,6BAAyB,OAAO,IAAI,wBAAwB;AAG9D,aAAS,mBAAmB,MAAM;AAUhC,aATI,UAAO,QAAS,YAAY,OAAO,QAAS,cAK5C,SAAS,uBAAuB,SAAS,uBAAuB,sBAAuB,SAAS,0BAA0B,SAAS,uBAAuB,SAAS,4BAA4B,sBAAuB,SAAS,wBAAwB,kBAAmB,sBAAuB,2BAIjS,OAAO,QAAS,YAAY,SAAS,SACnC,KAAK,aAAa,mBAAmB,KAAK,aAAa,mBAAmB,KAAK,aAAa,uBAAuB,KAAK,aAAa,sBAAsB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,MAIjL,KAAK,aAAa,0BAA0B,KAAK,gBAAgB;AAAA,IAMrE;AAEA,aAAS,OAAO,QAAQ;AACtB,UAAI,OAAO,UAAW,YAAY,WAAW,MAAM;AACjD,YAAI,WAAW,OAAO;AAEtB,gBAAQ,UAAQ;AAAA,UACd,KAAK;AACH,gBAAI,OAAO,OAAO;AAElB,oBAAQ,MAAI;AAAA,cACV,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AACH,uBAAO;AAAA,cAET;AACE,oBAAI,eAAe,QAAQ,KAAK;AAEhC,wBAAQ,cAAY;AAAA,kBAClB,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AACH,2BAAO;AAAA,kBAET;AACE,2BAAO;AAAA,gBACvB;AAAA,YAEA;AAAA,UAEM,KAAK;AACH,mBAAO;AAAA,QACf;AAAA,MACA;AAAA,IAGA;AACA,QAAI,kBAAkB,oBAClB,kBAAkB,qBAClB,UAAU,oBACV,aAAa,wBACb,WAAW,qBACX,OAAO,iBACP,OAAO,iBACP,SAAS,mBACT,WAAW,qBACX,aAAa,wBACb,WAAW,qBACX,eAAe,0BACf,sCAAsC,IACtC,2CAA2C;AAE/C,aAAS,YAAY,QAAQ;AAEzB,aAAK,wCACH,sCAAsC,IAEtC,QAAQ,KAAQ,wFAA6F,IAI1G;AAAA,IACT;AACA,aAAS,iBAAiB,QAAQ;AAE9B,aAAK,6CACH,2CAA2C,IAE3C,QAAQ,KAAQ,6FAAkG,IAI/G;AAAA,IACT;AACA,aAAS,kBAAkB,QAAQ;AACjC,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,kBAAkB,QAAQ;AACjC,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,UAAU,QAAQ;AACzB,aAAO,OAAO,UAAW,YAAY,WAAW,QAAQ,OAAO,aAAa;AAAA,IAC9E;AACA,aAAS,aAAa,QAAQ;AAC5B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,WAAW,QAAQ;AAC1B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,OAAO,QAAQ;AACtB,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,OAAO,QAAQ;AACtB,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,SAAS,QAAQ;AACxB,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,WAAW,QAAQ;AAC1B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,aAAa,QAAQ;AAC5B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,WAAW,QAAQ;AAC1B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AACA,aAAS,eAAe,QAAQ;AAC9B,aAAO,OAAO,MAAM,MAAM;AAAA,IAC5B;AAEA,wBAAA,kBAA0B,iBAC1B,oBAAA,kBAA0B,iBAC1B,oBAAA,UAAkB,SAClB,oBAAA,aAAqB,YACrB,oBAAA,WAAmB,UACnB,oBAAA,OAAe,MACf,oBAAA,OAAe,MACf,oBAAA,SAAiB,QACjB,oBAAA,WAAmB,UACnB,oBAAA,aAAqB,YACrB,oBAAA,WAAmB,UACnB,oBAAA,eAAuB,cACvB,oBAAA,cAAsB,aACtB,oBAAA,mBAA2B,kBAC3B,oBAAA,oBAA4B,mBAC5B,oBAAA,oBAA4B,mBAC5B,oBAAA,YAAoB,WACpB,oBAAA,eAAuB,cACvB,oBAAA,aAAqB,YACrB,oBAAA,SAAiB,QACjB,oBAAA,SAAiB,QACjB,oBAAA,WAAmB,UACnB,oBAAA,aAAqB,YACrB,oBAAA,eAAuB,cACvB,oBAAA,aAAqB,YACrB,oBAAA,iBAAyB,gBACzB,oBAAA,qBAA6B,oBAC7B,oBAAA,SAAiB;AAAA,EACjB;;ACzNI,QAAQ,IAAI,aAAa,eAC3BA,QAAA,UAAiBC,kCAEjBD,QAAA,UAAiBE;;ACEnB,MAAM,aAAa,CAAC,SAAgD;AAClE,MAAIC,eAAAA,mBAAmB,IAAI;AAAG,WAAOC,MAAAA,cAAc,IAAI;AACvD,MAAIC,MAAAA,eAAe,IAAI;AAAU,WAAA;AAEnC,GAEa,YAAYC,iBAAAA,OAAOC,GAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBpC,SAAwB,iBAAiB,OAA8B;AACrE,QAAM,EAAC,WAAW,OAAO,MAAA,IAAS,OAC5B,EAAC,MAAM,OAAO,MAAM,UAAU,QAAA,IAAW,WAEzC,EAAC,mBAAkB,IAAIC,OAAAA,mBAAmB,GAC1C,gBAAgBC,MAAA,QAAQ,MAAM,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,GAatD,cAAc,QAAQ,MAAM,KAAK,IAAI,QAAQ;AAEnD,wCACGF,GAAAA,MAAK,EAAA,WAAW,EAAQ,OAAQ,MAAK,WACpC,UAACG,2BAAAA,KAAAC,GAAA,MAAA,EAAK,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,UAAU,GAC7C,UAAA;AAAA,IAAAC,2BAAAA,IAACL,WAAK,aAAa,GAAG,WAAW,GAC/B,yCAACM,UACC,EAAA,UAAAD,2BAAA;AAAA,MAACE,GAAA;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAK;AAAA,QACL,SAAS,MAAM,mBAAmB,IAAI;AAAA,QAEtC,UAAAJ,2BAAAA,KAACK,GAAAA,MAAK,EAAA,OAAM,UAAS,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAClC,UAAA;AAAA,UAAA,gBACEH,2BAAAA,IAAA,WAAA,EAAW,UAAW,WAAA,aAAa,EAAE,CAAA,IACpC;AAAA,UACHA,2BAAA,IAAAI,GAAA,KAAA,EAAI,MAAM,GACT,UAACN,2BAAAA,KAAAG,GAAAA,OAAA,EAAM,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GACvB,UAAA;AAAA,YAACD,2BAAAA,IAAAK,GAAA,MAAA,EAAK,MAAM,GAAG,QAAO,YAAW,cAAa,YAC3C,mBAAS,KACZ,CAAA;AAAA,YACC,WAAYL,2BAAAA,IAAAK,GAAA,MAAA,EAAK,OAAK,IAAE,mBAAS,CAAA,IAAU;AAAA,UAAA,EAAA,CAC9C,EACF,CAAA;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,OAEJ,EACF,CAAA;AAAA,IACCL,2BAAA,IAAAL,GAAA,MAAA,EAAK,aAAa,GAAG,WAAW,GAC/B,UAACG,2BAAAA,KAAAK,GAAAA,MAAA,EAAK,QAAO,QAAO,OAAM,UAAS,KAAK,GACtC,UAAA;AAAA,MAAAH,2BAAAA,IAACK,WAAK,MAAM,GAAG,QAAO,YACpB,UAAAL,2BAAA,IAACM,sBAAa,EAChB,CAAA;AAAA,MACAN,2BAAAA,IAACK,WAAK,MAAM,GAAG,QAAO,YAAW,cAAa,YAC3C,UACH,QAAA,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IACCL,2BAAA,IAAAL,GAAA,MAAA,EAAK,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC,GAC7B,UAACK,2BAAAA,IAAAG,GAAAA,MAAA,EAAK,QAAO,QAAO,OAAM,UAAS,SAAQ,YACxC,UAAA,CAAC,SAAS,cAAc,KACvBH,2BAAA,IAACO,cAAQ,MAAM,CAAC,OAAO,WAAW,CAAC,GAAG,SAAS,EAAG,CAAA,IAChD,KACN,CAAA,GACF;AAAA,EAAA,EAWF,CAAA,EACF,CAAA;AAEJ;ACzFa,MAAA,WAAWb,iBAAAA,OAAOC,GAAAA,IAAI;AAAA;AAAA;AAInC,SAAwB,gBAAgB;AAChC,QAAA,CAAG,EAAA,GAAG,UAAU,IAAIa,OAAc,cAAA,GAClC,EAAC,mBAAsB,IAAAZ,OAAA,mBAAA,GAGvB,CAAC,OAAO,QAAQ,IAAIa,MAAAA,SAAS,EAAE,GAC/B,cAAcC,MAAAA,OAAO,IAAI,GACzB,cAAcC,MAAA;AAAA,IAClB,CAAC,MAA2C;AACjC,eAAA,EAAE,OAAO,KAAK;AAAA,IACzB;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA,GAIL,qBAAqBd,MAAAA,QAAQ,MAC1B,WAAW,OAAO,CAAC,cAEtB,UAAU,KAAK,cAAc,SAAS,MAAM,YAAa,CAAA,KACzD,UAAU,QAAQ,YAAY,EAAE,SAAS,MAAM,YAAa,CAAA,KAC5D,UAAU,MAAM,YAAY,EAAE,SAAS,MAAM,aAAa,CAE7D,GACA,CAAC,YAAY,KAAK,CAAC;AAGtB,SAAAe,MAAA,UAAU,MAAM;AACR,UAAA,iBAAiB,CAAC,UAAyB;AAE3C,UAAA,SAAS,YAAY,YAAY,SAAS;AAC5C;AAGF,YAAM,QAAQ,SAAS,MAAM,KAAK,EAAE,IAAI;AACpC,eAAS,KAAK,QAAQ,WAAW,UACnC,mBAAmB,WAAW,KAAK,EAAE,IAAI;AAAA,IAAA;AAI7C,WAAA,OAAO,iBAAiB,YAAY,cAAc,GAE3C,MAAM;AACJ,aAAA,oBAAoB,YAAY,cAAc;AAAA,IAAA;AAAA,EACvD,GACC,CAAC,OAAO,YAAY,kBAAkB,CAAC,GAGvCZ,2BAAA,IAAA,UAAA,EAAS,MAAK,eACb,UAACA,2BAAAA,IAAAG,GAAAA,MAAA,EAAK,WAAU,UAAS,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,GAC3C,UAAAH,2BAAA,IAACa,GACC,WAAA,EAAA,UAAAf,2BAAAA,KAACG,GAAAA,OAAM,EAAA,OAAO,GACZ,UAAA;AAAA,IAAAD,2BAAAA,IAACc,cAAQ,UAAU,aAAA,CAAA;AAAA,mCAClBnB,GAAAA,MAAK,EAAA,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAC9C,UAACG,2BAAAA,KAAAG,GAAAA,OAAA,EAAM,OAAO,GACZ,UAAA;AAAA,MAACH,2BAAAA,KAAAG,GAAAA,OAAA,EAAM,OAAO,GACZ,UAAA;AAAA,QAAAD,+BAACK,GAAAA,MAAK,EAAA,MAAM,GAAG,QAAO,YAAW,UAEjC,UAAA;AAAA,QACAL,2BAAA;AAAA,UAACe,GAAA;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,YACP,UAAU;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA,GACF;AAAA,qCACCX,GAAAA,KACE,EAAA,UAAA,mBAAmB,IAAI,CAAC,WAAW,UAClCJ,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAHK,UAAU;AAAA,MAKlB,CAAA,GACH;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EACF,EAAA,CAAA,EACF,CAAA,GACF,EACF,CAAA;AAEJ;ACjGO,MAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAMgB,MAAA;AAAA,EACN,WAAW;AACb,GCJa,gBAAgBC,oBAAa,OACjC;AAAA,EACL,MAAM;AAAA,EACN,OAAO,CAAC,iBAAiB;AAC3B,EACD,GAOY,sBAAsB,CAAC;AAAA,EAClC,YAAY;AAAA,EACZ,UAAU;AACZ,OAAmD;AAAA,EACjD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,MAAMD,MAAA;AAAA,EACN,SAAS,CAAC,eAAe;AAC3B;;;","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":"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"}