@gooddata/sdk-ui-ext 11.47.0-alpha.1 → 11.47.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +5 -5
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.d.ts +2 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.js +37 -17
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.d.ts +2 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.js +2 -2
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.d.ts +4 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.js +5 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.d.ts +16 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.js +22 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.d.ts +21 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.js +64 -0
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.d.ts +1 -0
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.js +10 -0
- package/esm/internal/constants/featureFlags.d.ts +2 -0
- package/esm/internal/constants/featureFlags.d.ts.map +1 -1
- package/esm/internal/constants/featureFlags.js +5 -0
- package/esm/internal/constants/supportedProperties.d.ts.map +1 -1
- package/esm/internal/constants/supportedProperties.js +3 -0
- package/esm/internal/interfaces/Colors.d.ts +3 -0
- package/esm/internal/interfaces/Colors.d.ts.map +1 -1
- package/esm/internal/interfaces/Colors.js +1 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/de-DE.localization-bundle.js +18 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-AU.localization-bundle.js +18 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-GB.localization-bundle.js +18 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts +48 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-US.localization-bundle.js +48 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-419.localization-bundle.js +18 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-ES.localization-bundle.js +18 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fi-FI.localization-bundle.js +18 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-CA.localization-bundle.js +18 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-FR.localization-bundle.js +18 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/id-ID.localization-bundle.js +18 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/it-IT.localization-bundle.js +18 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ja-JP.localization-bundle.js +18 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ko-KR.localization-bundle.js +18 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/nl-NL.localization-bundle.js +18 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pl-PL.localization-bundle.js +18 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-BR.localization-bundle.js +18 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-PT.localization-bundle.js +18 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ru-RU.localization-bundle.js +18 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/sl-SI.localization-bundle.js +18 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/th-TH.localization-bundle.js +18 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/tr-TR.localization-bundle.js +18 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/uk-UA.localization-bundle.js +18 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/vi-VN.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-HK.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.js +18 -0
- package/esm/internal/utils/colors.d.ts +3 -1
- package/esm/internal/utils/colors.d.ts.map +1 -1
- package/esm/internal/utils/colors.js +68 -32
- package/esm/locales.d.ts +36 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +12 -0
- package/esm/sdk-ui-ext.d.ts +19 -5
- package/esm/share/ObjectShareDialog.d.ts.map +1 -1
- package/esm/share/ObjectShareDialog.js +2 -2
- package/esm/share/objectShareController.helpers.d.ts +20 -6
- package/esm/share/objectShareController.helpers.d.ts.map +1 -1
- package/esm/share/objectShareController.helpers.js +40 -9
- package/esm/share/objectShareController.types.d.ts +15 -4
- package/esm/share/objectShareController.types.d.ts.map +1 -1
- package/esm/share/useAccessList.d.ts +0 -1
- package/esm/share/useAccessList.d.ts.map +1 -1
- package/esm/share/useAccessList.js +74 -83
- package/esm/share/useObjectShareController.d.ts +3 -1
- package/esm/share/useObjectShareController.d.ts.map +1 -1
- package/esm/share/useObjectShareController.js +12 -19
- package/package.json +21 -21
- package/styles/internal/css/config_panel.css +82 -0
- package/styles/internal/css/config_panel.css.map +1 -1
- package/styles/internal/scss/config_panel.scss +94 -0
|
@@ -6,7 +6,7 @@ import { useToastMessage } from "@gooddata/sdk-ui-kit";
|
|
|
6
6
|
import { isPermissionsNotAvailable } from "./accessErrors.js";
|
|
7
7
|
import { deriveGeneralAccess, deriveWorkspacePermissionLevel } from "./accessSummary.js";
|
|
8
8
|
import { objectShareMessages } from "./messages.js";
|
|
9
|
-
import { assigneeMatchesQuery, granteeId,
|
|
9
|
+
import { assigneeIdentityFacts, assigneeMatchesQuery, granteeId, granteesFromAccessList, userDisplayPair, userIdentityFacts, } from "./objectShareController.helpers.js";
|
|
10
10
|
/**
|
|
11
11
|
* Owns the backend access list. It is fetched once (per target) then seeded into
|
|
12
12
|
* local state, which is authoritative while the dialog/summary is mounted:
|
|
@@ -35,37 +35,25 @@ export function useAccessList(target, onSaved, dialogOpen) {
|
|
|
35
35
|
// `targetKey` — a target switch makes the old state stale until the re-seed.
|
|
36
36
|
const [seededTarget, setSeededTarget] = useState(undefined);
|
|
37
37
|
const [loadError, setLoadError] = useState(undefined);
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// Memoized current-user-ref fetch — the profile doesn't change while mounted,
|
|
38
|
+
// Assignee identities from the listing (picker + on-open resolve), keyed by
|
|
39
|
+
// grantee id: de-collapsed facts + the original ObjRef (the serialized id
|
|
40
|
+
// loses Uri-vs-Id). The signed-in user is absent from the listing; their
|
|
41
|
+
// facts derive from the profile instead.
|
|
42
|
+
const [knownAssignees, setKnownAssignees] = useState({});
|
|
43
|
+
// Memoized current-user fetch — the profile doesn't change while mounted,
|
|
45
44
|
// so resolve it at most once and share the promise across callers.
|
|
46
|
-
const
|
|
45
|
+
const currentUserCache = useRef(undefined);
|
|
47
46
|
const targetKey = target ? objRefToString(target.ref) : undefined;
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
// eager resolve below, so a granted row can show a human name even when its
|
|
51
|
-
// access-list grant carried only a raw id. Must not depend on the caches it
|
|
52
|
-
// writes, or it would re-trigger loadOptions' fetch.
|
|
47
|
+
// Written from both the picker (loadOptions) and the on-open resolve. Must not
|
|
48
|
+
// depend on the cache it writes, or it would re-trigger loadOptions' fetch.
|
|
53
49
|
const cacheAssignees = useCallback((assignees) => {
|
|
54
|
-
|
|
55
|
-
assignee: a,
|
|
56
|
-
id: granteeId(a.type === "user" ? "user" : "group", a.ref),
|
|
57
|
-
}));
|
|
58
|
-
setKnownNames((prev) => {
|
|
59
|
-
const next = { ...prev };
|
|
60
|
-
for (const { assignee, id } of withIds) {
|
|
61
|
-
next[id] = assignee.name;
|
|
62
|
-
}
|
|
63
|
-
return next;
|
|
64
|
-
});
|
|
65
|
-
setKnownRefs((prev) => {
|
|
50
|
+
setKnownAssignees((prev) => {
|
|
66
51
|
const next = { ...prev };
|
|
67
|
-
for (const
|
|
68
|
-
next[
|
|
52
|
+
for (const assignee of assignees) {
|
|
53
|
+
next[granteeId(assignee.type === "user" ? "user" : "group", assignee.ref)] = {
|
|
54
|
+
facts: assigneeIdentityFacts(assignee),
|
|
55
|
+
ref: assignee.ref,
|
|
56
|
+
};
|
|
69
57
|
}
|
|
70
58
|
return next;
|
|
71
59
|
});
|
|
@@ -107,35 +95,62 @@ export function useAccessList(target, onSaved, dialogOpen) {
|
|
|
107
95
|
setSeededTarget(undefined);
|
|
108
96
|
}
|
|
109
97
|
}, [fetchStatus, fetchedList, fetchError, targetKey]);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
98
|
+
const getCurrentUser = useCallback(() => {
|
|
99
|
+
if (!currentUserCache.current) {
|
|
100
|
+
currentUserCache.current = backend
|
|
101
|
+
.currentUser()
|
|
102
|
+
.getUser()
|
|
103
|
+
.catch((error) => {
|
|
104
|
+
// Don't cache a rejected promise, or a transient profile-read
|
|
105
|
+
// failure would make every later transfer fail immediately.
|
|
106
|
+
currentUserCache.current = undefined;
|
|
107
|
+
throw error;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return currentUserCache.current;
|
|
111
|
+
}, [backend]);
|
|
112
|
+
// Resolve the current user only while the dialog is open — keeps the summary-only
|
|
113
|
+
// path free of a profile request (the transfer gate and self-row facts it feeds
|
|
114
|
+
// aren't shown there).
|
|
115
|
+
const { result: currentUser } = useCancelablePromise({
|
|
116
|
+
promise: dialogOpen && targetKey ? () => getCurrentUser() : undefined,
|
|
117
|
+
onError: () => { },
|
|
118
|
+
},
|
|
119
|
+
// Key on target presence, not identity — the resolved user is
|
|
120
|
+
// target-independent, so a target switch must not reset it.
|
|
121
|
+
[getCurrentUser, targetKey !== undefined, dialogOpen]);
|
|
122
|
+
const selfId = currentUser ? granteeId("user", idRef(currentUser.login)) : undefined;
|
|
123
|
+
// Rows with identity facts backfilled from the assignee cache — or, for the
|
|
124
|
+
// signed-in user's own row (absent from the listing by design), from the
|
|
125
|
+
// profile. Empty until the current target's list is seeded; a derivation, so
|
|
126
|
+
// it re-applies as the caches grow.
|
|
127
|
+
const namedGrantees = useMemo(() => {
|
|
128
|
+
if (!hasList) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
// De-collapsed like every listing fact — on tiger the user id is often the email.
|
|
132
|
+
const selfFacts = currentUser
|
|
133
|
+
? userIdentityFacts(idRef(currentUser.login), currentUser.fullName, currentUser.email)
|
|
134
|
+
: undefined;
|
|
135
|
+
return grantees.map((g) => {
|
|
136
|
+
const known = knownAssignees[g.id]?.facts ?? (g.id === selfId ? selfFacts : undefined);
|
|
137
|
+
return known ? { ...g, name: g.name ?? known.name, email: g.email ?? known.email } : g;
|
|
138
|
+
});
|
|
139
|
+
}, [hasList, grantees, knownAssignees, currentUser, selfId]);
|
|
140
|
+
// Resolve identity facts on dialog open — grants often carry only raw ids
|
|
141
|
+
// (the post-reload state). Unconditional: no missing-facts gate to keep in
|
|
142
|
+
// sync with the cache, and summary-only consumers never fetch. Keyed on the
|
|
143
|
+
// serialized targetKey so an inline-ref consumer re-rendering mid-fetch
|
|
144
|
+
// doesn't cancel it.
|
|
130
145
|
useCancelablePromise({
|
|
131
|
-
promise: target &&
|
|
146
|
+
promise: target && dialogOpen
|
|
132
147
|
? () => backend.workspace(workspace).objectPermissions().getAvailableAssignees(target)
|
|
133
148
|
: undefined,
|
|
134
149
|
onSuccess: cacheAssignees,
|
|
135
150
|
// Best-effort backfill: on error the raw id stays (pre-fix behavior, no
|
|
136
151
|
// regression) and the picker can still resolve it on demand. No toast.
|
|
137
152
|
onError: () => { },
|
|
138
|
-
}, [backend, workspace, targetKey,
|
|
153
|
+
}, [backend, workspace, targetKey, dialogOpen]);
|
|
139
154
|
// Stable sorted key of the currently-granted ids — drives the picker's
|
|
140
155
|
// "exclude already-granted" filter. Keyed on ids only (not names), so the
|
|
141
156
|
// picker's own name-cache writes can't change loadOptions' identity and
|
|
@@ -227,8 +242,8 @@ export function useAccessList(target, onSaved, dialogOpen) {
|
|
|
227
242
|
.map(({ assignee, id }) => ({
|
|
228
243
|
id,
|
|
229
244
|
kind: "user",
|
|
230
|
-
|
|
231
|
-
|
|
245
|
+
// Same fallback pairs as the grantee rows.
|
|
246
|
+
...userDisplayPair(assigneeIdentityFacts(assignee), objRefToString(assignee.ref)),
|
|
232
247
|
})),
|
|
233
248
|
groups: selectable
|
|
234
249
|
.filter(({ assignee }) => assignee.type !== "user")
|
|
@@ -237,36 +252,13 @@ export function useAccessList(target, onSaved, dialogOpen) {
|
|
|
237
252
|
}, [backend, workspace, target, excludedIdsKey, cacheAssignees]);
|
|
238
253
|
// Reuse the picker's original ref (preserves UriRef vs IdentifierRef);
|
|
239
254
|
// fall back to the serialized id only if it wasn't cached.
|
|
240
|
-
const refForId = useCallback((id) =>
|
|
241
|
-
const getCurrentUserRef = useCallback(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// grantee refs are idRefs keyed by user id (= profile login), and
|
|
248
|
-
// areObjRefsEqual never matches mixed shapes — self-row matching and
|
|
249
|
-
// the self grant write need the permission API's id space.
|
|
250
|
-
.then((user) => idRef(user.login))
|
|
251
|
-
.catch((error) => {
|
|
252
|
-
// Don't cache a rejected promise, or a transient profile-read
|
|
253
|
-
// failure would make every later transfer fail immediately.
|
|
254
|
-
currentUserRefCache.current = undefined;
|
|
255
|
-
throw error;
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
return currentUserRefCache.current;
|
|
259
|
-
}, [backend]);
|
|
260
|
-
// Resolve the current user only while the dialog is open — keeps the summary-only
|
|
261
|
-
// path free of a profile request (the transfer gate it feeds isn't shown there).
|
|
262
|
-
const { result: currentUserRef } = useCancelablePromise({
|
|
263
|
-
promise: dialogOpen && targetKey ? () => getCurrentUserRef() : undefined,
|
|
264
|
-
onError: () => { },
|
|
265
|
-
},
|
|
266
|
-
// Key on target presence, not identity — the resolved user is
|
|
267
|
-
// target-independent, so a target switch must not reset it.
|
|
268
|
-
[getCurrentUserRef, targetKey !== undefined, dialogOpen]);
|
|
269
|
-
const selfId = currentUserRef ? granteeId("user", currentUserRef) : undefined;
|
|
255
|
+
const refForId = useCallback((id) => knownAssignees[id]?.ref ?? { identifier: id.split(":", 2)[1] }, [knownAssignees]);
|
|
256
|
+
const getCurrentUserRef = useCallback(
|
|
257
|
+
// Not `user.ref`: the profile resolves it as a uriRef while access-list
|
|
258
|
+
// grantee refs are idRefs keyed by user id (= profile login), and
|
|
259
|
+
// areObjRefsEqual never matches mixed shapes — self-row matching and
|
|
260
|
+
// the self grant write need the permission API's id space.
|
|
261
|
+
() => getCurrentUser().then((user) => idRef(user.login)), [getCurrentUser]);
|
|
270
262
|
const canTransferOwnership = selfId !== undefined && namedGrantees.some((g) => g.id === selfId && g.level === "EDIT");
|
|
271
263
|
return {
|
|
272
264
|
targetKey,
|
|
@@ -286,6 +278,5 @@ export function useAccessList(target, onSaved, dialogOpen) {
|
|
|
286
278
|
setGrantees,
|
|
287
279
|
setGeneralAccess,
|
|
288
280
|
setWorkspaceLevel,
|
|
289
|
-
setKnownNames,
|
|
290
281
|
};
|
|
291
282
|
}
|
|
@@ -19,7 +19,9 @@ import { type IObjectShareController, type IUseObjectShareOptions } from "./obje
|
|
|
19
19
|
* plain props and it owns its controller. Call this (exported as `useObjectShare`)
|
|
20
20
|
* only to share a single access-list fetch between the dialog and an inline summary
|
|
21
21
|
* row: call it once, read `state.summary` for the row, and pass the controller into
|
|
22
|
-
* the dialog.
|
|
22
|
+
* the dialog. Grantee rows carry identity facts only (`name`/`email` are undefined
|
|
23
|
+
* when unknown); the display fallback order is not exposed, so {@link ObjectShareDialog}
|
|
24
|
+
* is the only sanctioned row renderer.
|
|
23
25
|
*
|
|
24
26
|
* @internal
|
|
25
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectShareController.d.ts","sourceRoot":"","sources":["../../src/share/useObjectShareController.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAkB1E,OAAO,EACH,KAAK,sBAAsB,EAI3B,KAAK,sBAAsB,EAE9B,MAAM,kCAAkC,CAAC;AAI1C
|
|
1
|
+
{"version":3,"file":"useObjectShareController.d.ts","sourceRoot":"","sources":["../../src/share/useObjectShareController.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAkB1E,OAAO,EACH,KAAK,sBAAsB,EAI3B,KAAK,sBAAsB,EAE9B,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,sBAAsB,GACjC,sBAAsB,CAuyBxB"}
|
|
@@ -25,7 +25,9 @@ import { useLabelScope } from "./useLabelScope.js";
|
|
|
25
25
|
* plain props and it owns its controller. Call this (exported as `useObjectShare`)
|
|
26
26
|
* only to share a single access-list fetch between the dialog and an inline summary
|
|
27
27
|
* row: call it once, read `state.summary` for the row, and pass the controller into
|
|
28
|
-
* the dialog.
|
|
28
|
+
* the dialog. Grantee rows carry identity facts only (`name`/`email` are undefined
|
|
29
|
+
* when unknown); the display fallback order is not exposed, so {@link ObjectShareDialog}
|
|
30
|
+
* is the only sanctioned row renderer.
|
|
29
31
|
*
|
|
30
32
|
* @internal
|
|
31
33
|
*/
|
|
@@ -47,7 +49,7 @@ export function useObjectShareController(target, options) {
|
|
|
47
49
|
const [workspaceLevelSaving, setWorkspaceLevelSaving] = useState(false);
|
|
48
50
|
// The backend access list, seeded into local state (rows, general access,
|
|
49
51
|
// summary, the commit/picker primitives) lives in its own hook.
|
|
50
|
-
const { targetKey, hasList, grantees, generalAccess, workspaceLevel, summary, status, loadError, accessUnavailable, commit, loadOptions, refForId, getCurrentUserRef, canTransferOwnership, setGrantees, setGeneralAccess, setWorkspaceLevel,
|
|
52
|
+
const { targetKey, hasList, grantees, generalAccess, workspaceLevel, summary, status, loadError, accessUnavailable, commit, loadOptions, refForId, getCurrentUserRef, canTransferOwnership, setGrantees, setGeneralAccess, setWorkspaceLevel, } = useAccessList(target, onSaved, isOpen);
|
|
51
53
|
// Always-current target key, read inside async mutation finalizers that captured
|
|
52
54
|
// an older one. A write started for object A resolves after the user navigated to
|
|
53
55
|
// object B; because local state is authoritative (no refetch), applying A's
|
|
@@ -129,14 +131,14 @@ export function useObjectShareController(target, options) {
|
|
|
129
131
|
return;
|
|
130
132
|
}
|
|
131
133
|
const startedFor = targetKey;
|
|
132
|
-
// Insert the picked grantees as pending rows
|
|
133
|
-
//
|
|
134
|
+
// Insert the picked grantees as pending rows. Identity facts are not copied
|
|
135
|
+
// from the picker option (its name/email are display fallbacks, not facts) —
|
|
136
|
+
// rows render from the facts cache the picker fetch already populated.
|
|
134
137
|
const addedIds = pendingGrantees.map((g) => g.id);
|
|
135
138
|
const addedRows = pendingGrantees.map((g) => ({
|
|
136
139
|
id: g.id,
|
|
137
140
|
kind: g.kind,
|
|
138
141
|
granteeRef: refForId(g.id),
|
|
139
|
-
name: g.name,
|
|
140
142
|
level: g.permissionLevel,
|
|
141
143
|
pending: "saving",
|
|
142
144
|
}));
|
|
@@ -147,13 +149,6 @@ export function useObjectShareController(target, options) {
|
|
|
147
149
|
const allLabelIds = effectiveLabels.map((l) => l.id);
|
|
148
150
|
const allLabelIdSet = new Set(allLabelIds);
|
|
149
151
|
setGrantees((prev) => [...prev.filter((g) => !addedIds.includes(g.id)), ...addedRows]);
|
|
150
|
-
setKnownNames((prev) => {
|
|
151
|
-
const next = { ...prev };
|
|
152
|
-
for (const g of pendingGrantees) {
|
|
153
|
-
next[g.id] = g.name;
|
|
154
|
-
}
|
|
155
|
-
return next;
|
|
156
|
-
});
|
|
157
152
|
setSelectedLabelIdsByGrantee((prev) => {
|
|
158
153
|
const next = { ...prev };
|
|
159
154
|
for (const id of addedIds) {
|
|
@@ -214,7 +209,6 @@ export function useObjectShareController(target, options) {
|
|
|
214
209
|
refForId,
|
|
215
210
|
toast,
|
|
216
211
|
setGrantees,
|
|
217
|
-
setKnownNames,
|
|
218
212
|
setSelectedLabelIdsByGrantee,
|
|
219
213
|
]);
|
|
220
214
|
const changePermissionLevel = useCallback(async (granteeId, level) => {
|
|
@@ -457,14 +451,14 @@ export function useObjectShareController(target, options) {
|
|
|
457
451
|
// EDIT — then there's nothing to transfer (the dialog offers to remove the
|
|
458
452
|
// current user's own access instead).
|
|
459
453
|
const transferTargetIsOwner = useMemo(() => transferTarget ? grantees.some((g) => g.id === transferTarget.id && g.level === "EDIT") : false, [transferTarget, grantees]);
|
|
460
|
-
// Insert a brand-new grantee row with its label scope
|
|
461
|
-
//
|
|
462
|
-
//
|
|
454
|
+
// Insert a brand-new grantee row with its label scope — the shared seed for a
|
|
455
|
+
// freshly-granted principal (used when a transfer promotes a user who wasn't
|
|
456
|
+
// already a grantee; the same row shape the add flow creates). Identity
|
|
457
|
+
// renders from the facts cache.
|
|
463
458
|
const seedNewGranteeRow = useCallback((row, labelIds) => {
|
|
464
459
|
setGrantees((prev) => [...prev, row]);
|
|
465
|
-
setKnownNames((prev) => ({ ...prev, [row.id]: row.name }));
|
|
466
460
|
setSelectedLabelIdsByGrantee((prev) => ({ ...prev, [row.id]: labelIds }));
|
|
467
|
-
}, [setGrantees,
|
|
461
|
+
}, [setGrantees, setSelectedLabelIdsByGrantee]);
|
|
468
462
|
const confirmTransferOwnership = useCallback(async () => {
|
|
469
463
|
if (!transferTarget || transferSaving) {
|
|
470
464
|
return;
|
|
@@ -563,7 +557,6 @@ export function useObjectShareController(target, options) {
|
|
|
563
557
|
id: transferTarget.id,
|
|
564
558
|
kind: "user",
|
|
565
559
|
granteeRef: ownerRef,
|
|
566
|
-
name: transferTarget.name,
|
|
567
560
|
level: "EDIT",
|
|
568
561
|
effectivePermission: nextEffective,
|
|
569
562
|
}, allLabelIds);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-ext",
|
|
3
|
-
"version": "11.47.0-alpha.
|
|
3
|
+
"version": "11.47.0-alpha.3",
|
|
4
4
|
"description": "GoodData.UI SDK - Extensions",
|
|
5
5
|
"license": "LicenseRef-LICENSE",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -63,20 +63,20 @@
|
|
|
63
63
|
"ts-invariant": "0.10.3",
|
|
64
64
|
"tslib": "2.8.1",
|
|
65
65
|
"uuid": "11.1.1",
|
|
66
|
-
"@gooddata/sdk-backend-base": "11.47.0-alpha.
|
|
67
|
-
"@gooddata/sdk-
|
|
68
|
-
"@gooddata/sdk-
|
|
69
|
-
"@gooddata/sdk-model": "11.47.0-alpha.
|
|
70
|
-
"@gooddata/sdk-ui": "11.47.0-alpha.
|
|
71
|
-
"@gooddata/sdk-ui-
|
|
72
|
-
"@gooddata/sdk-ui-
|
|
73
|
-
"@gooddata/sdk-ui-geo": "11.47.0-alpha.
|
|
74
|
-
"@gooddata/sdk-ui-
|
|
75
|
-
"@gooddata/sdk-ui-
|
|
76
|
-
"@gooddata/sdk-ui-
|
|
77
|
-
"@gooddata/sdk-ui-theme-provider": "11.47.0-alpha.
|
|
78
|
-
"@gooddata/sdk-ui-vis-commons": "11.47.0-alpha.
|
|
79
|
-
"@gooddata/util": "11.47.0-alpha.
|
|
66
|
+
"@gooddata/sdk-backend-base": "11.47.0-alpha.3",
|
|
67
|
+
"@gooddata/sdk-backend-spi": "11.47.0-alpha.3",
|
|
68
|
+
"@gooddata/sdk-embedding": "11.47.0-alpha.3",
|
|
69
|
+
"@gooddata/sdk-model": "11.47.0-alpha.3",
|
|
70
|
+
"@gooddata/sdk-ui": "11.47.0-alpha.3",
|
|
71
|
+
"@gooddata/sdk-ui-filters": "11.47.0-alpha.3",
|
|
72
|
+
"@gooddata/sdk-ui-charts": "11.47.0-alpha.3",
|
|
73
|
+
"@gooddata/sdk-ui-geo": "11.47.0-alpha.3",
|
|
74
|
+
"@gooddata/sdk-ui-kit": "11.47.0-alpha.3",
|
|
75
|
+
"@gooddata/sdk-ui-pivot": "11.47.0-alpha.3",
|
|
76
|
+
"@gooddata/sdk-ui-semantic-search": "11.47.0-alpha.3",
|
|
77
|
+
"@gooddata/sdk-ui-theme-provider": "11.47.0-alpha.3",
|
|
78
|
+
"@gooddata/sdk-ui-vis-commons": "11.47.0-alpha.3",
|
|
79
|
+
"@gooddata/util": "11.47.0-alpha.3"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"@microsoft/api-documenter": "^7.17.0",
|
|
@@ -124,12 +124,12 @@
|
|
|
124
124
|
"typescript": "5.9.3",
|
|
125
125
|
"vitest": "4.1.8",
|
|
126
126
|
"vitest-dom": "0.1.1",
|
|
127
|
-
"@gooddata/eslint-config": "11.47.0-alpha.
|
|
128
|
-
"@gooddata/i18n-toolkit": "11.47.0-alpha.
|
|
129
|
-
"@gooddata/oxlint-config": "11.47.0-alpha.
|
|
130
|
-
"@gooddata/
|
|
131
|
-
"@gooddata/
|
|
132
|
-
"@gooddata/stylelint-config": "11.47.0-alpha.
|
|
127
|
+
"@gooddata/eslint-config": "11.47.0-alpha.3",
|
|
128
|
+
"@gooddata/i18n-toolkit": "11.47.0-alpha.3",
|
|
129
|
+
"@gooddata/oxlint-config": "11.47.0-alpha.3",
|
|
130
|
+
"@gooddata/reference-workspace": "11.47.0-alpha.3",
|
|
131
|
+
"@gooddata/sdk-backend-mockingbird": "11.47.0-alpha.3",
|
|
132
|
+
"@gooddata/stylelint-config": "11.47.0-alpha.3"
|
|
133
133
|
},
|
|
134
134
|
"peerDependencies": {
|
|
135
135
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -573,4 +573,86 @@
|
|
|
573
573
|
padding-left: 20px;
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
+
.gd-line-style-item-trigger {
|
|
577
|
+
display: block;
|
|
578
|
+
width: 100%;
|
|
579
|
+
padding: 0;
|
|
580
|
+
margin: 0;
|
|
581
|
+
border: none;
|
|
582
|
+
background: transparent;
|
|
583
|
+
text-align: left;
|
|
584
|
+
cursor: pointer;
|
|
585
|
+
}
|
|
586
|
+
.gd-line-style-item-trigger:disabled {
|
|
587
|
+
cursor: not-allowed;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.gd-line-style-toolbar {
|
|
591
|
+
display: inline-flex;
|
|
592
|
+
align-items: center;
|
|
593
|
+
gap: 8px;
|
|
594
|
+
padding: 6px 8px;
|
|
595
|
+
background: var(--gd-palette-complementary-0, #fff);
|
|
596
|
+
border: 1px solid var(--gd-palette-complementary-3, #dde4eb);
|
|
597
|
+
border-radius: 3px;
|
|
598
|
+
box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.1);
|
|
599
|
+
}
|
|
600
|
+
.gd-line-style-toolbar.is-disabled {
|
|
601
|
+
pointer-events: none;
|
|
602
|
+
opacity: 0.5;
|
|
603
|
+
}
|
|
604
|
+
.gd-line-style-toolbar__divider {
|
|
605
|
+
width: 1px;
|
|
606
|
+
height: 28px;
|
|
607
|
+
background: var(--gd-palette-complementary-3, #dde4eb);
|
|
608
|
+
flex-shrink: 0;
|
|
609
|
+
}
|
|
610
|
+
.gd-line-style-toolbar__btn {
|
|
611
|
+
display: flex;
|
|
612
|
+
align-items: center;
|
|
613
|
+
gap: 4px;
|
|
614
|
+
height: 28px;
|
|
615
|
+
padding: 0 4px;
|
|
616
|
+
cursor: pointer;
|
|
617
|
+
color: var(--gd-palette-complementary-8, #464e56);
|
|
618
|
+
border-radius: 2px;
|
|
619
|
+
border: none;
|
|
620
|
+
background: transparent;
|
|
621
|
+
font: inherit;
|
|
622
|
+
}
|
|
623
|
+
.gd-line-style-toolbar__btn:focus-visible {
|
|
624
|
+
outline: 2px solid #14b2e2;
|
|
625
|
+
outline-offset: 1px;
|
|
626
|
+
}
|
|
627
|
+
.gd-line-style-toolbar__btn:hover {
|
|
628
|
+
background: var(--gd-palette-complementary-2, #ebeff4);
|
|
629
|
+
}
|
|
630
|
+
.gd-line-style-toolbar__btn.is-open {
|
|
631
|
+
background: var(--gd-palette-complementary-2, #ebeff4);
|
|
632
|
+
color: #14b2e2;
|
|
633
|
+
}
|
|
634
|
+
.gd-line-style-toolbar__btn.is-disabled, .gd-line-style-toolbar__btn:disabled {
|
|
635
|
+
opacity: 0.5;
|
|
636
|
+
cursor: not-allowed;
|
|
637
|
+
pointer-events: none;
|
|
638
|
+
}
|
|
639
|
+
.gd-line-style-toolbar__btn .gd-icon-navigatedown {
|
|
640
|
+
font-size: 10px;
|
|
641
|
+
color: var(--gd-palette-complementary-7, #6d7680);
|
|
642
|
+
}
|
|
643
|
+
.gd-line-style-toolbar__color-swatch {
|
|
644
|
+
width: 20px;
|
|
645
|
+
height: 20px;
|
|
646
|
+
border-radius: 2px;
|
|
647
|
+
flex-shrink: 0;
|
|
648
|
+
overflow: hidden;
|
|
649
|
+
}
|
|
650
|
+
.gd-line-style-toolbar__weight-text {
|
|
651
|
+
font-size: 14px;
|
|
652
|
+
color: var(--gd-palette-complementary-7, #6d7680);
|
|
653
|
+
white-space: nowrap;
|
|
654
|
+
min-width: 28px;
|
|
655
|
+
text-align: center;
|
|
656
|
+
}
|
|
657
|
+
|
|
576
658
|
/*# sourceMappingURL=config_panel.css.map */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@gooddata/sdk-ui-kit/styles/scss/colorPicker.scss","../../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/config_panel.scss"],"names":[],"mappings":"AAGA;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EAGI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAGJ;EAGI;;;AAKZ;EACI;EACA,OC3BY;ED4BZ;EACA;;AAEA;AAAA;EAEI;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AEhHR;EACI,QAHmB;;;AAOnB;EACI,OD2BQ;EC1BR,YDsGgB;;ACjGhB;EACI;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;;AAKZ;EACI;EACA,OAjCqB;EAkCrB,QAlCqB;EAmCrB;EACA;EACA,aArCqB;EAsCrB;;AAEA;EACI;EACA;EACA,OD1BS;EC2BT;EACA;EACA;;;AAIR;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI,OAlEqB;EAmErB,QAnEqB;EAoErB,QAnEmB;EAoEnB;EACA;EACA;EACA;;AAEA;EAII,cD7DS;EC8DT;;;AAIR;EACI;;;AASJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA,KA1Ge;EA2Gf;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;;AAIA;EACI;EACA;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA,OD5HgB;;;AC+HpB;EACI;;AAEA;EACI;;AAGJ;EACI;EACA;;;AAIR;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AAIR;EACI;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;;AAEA;EACI,kBD3HgB;EC4HhB;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI,MDxPQ;;AC2PhB;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI,ODvPmB;;;AC0PvB;EACI;;;AAGJ;EACI;EACA;;;AAIA;EACI;;;AAKJ;AAAA;EAEI;;AAIA;AAAA;EAEI;;AAIR;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;;AAKJ;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAEA;EACI;EACA;;;AAKZ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA,ODvOQ;;AC0OZ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AASJ;EACI,ODnWe;ECoWf;EACA;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA,kBDnSgB;ECoShB;;AAEA;EACI,ODhYW;ECiYX;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAKZ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA,ODzZQ;EC0ZR;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA,OD3ae;EC4af;;AAEA;EACI;EACA;;AAIR;EACI;EACA,ODtbe;ECubf;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI,YD/WY;;ACiXZ;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA,ODjeY;;;AC0ehB;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA,YD5fS;;AC8fT;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA,ODxgBQ;ECygBR;EACA;;AAIA;EACI;EACA;EACA;EACA","file":"config_panel.css"}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@gooddata/sdk-ui-kit/styles/scss/colorPicker.scss","../../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/config_panel.scss"],"names":[],"mappings":"AAGA;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EAGI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAGJ;EAGI;;;AAKZ;EACI;EACA,OC3BY;ED4BZ;EACA;;AAEA;AAAA;EAEI;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AEhHR;EACI,QAHmB;;;AAOnB;EACI,OD2BQ;EC1BR,YDsGgB;;ACjGhB;EACI;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;;AAKZ;EACI;EACA,OAjCqB;EAkCrB,QAlCqB;EAmCrB;EACA;EACA,aArCqB;EAsCrB;;AAEA;EACI;EACA;EACA,OD1BS;EC2BT;EACA;EACA;;;AAIR;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI,OAlEqB;EAmErB,QAnEqB;EAoErB,QAnEmB;EAoEnB;EACA;EACA;EACA;;AAEA;EAII,cD7DS;EC8DT;;;AAIR;EACI;;;AASJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA,KA1Ge;EA2Gf;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;;AAIA;EACI;EACA;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA,OD5HgB;;;AC+HpB;EACI;;AAEA;EACI;;AAGJ;EACI;EACA;;;AAIR;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AAIR;EACI;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;;AAEA;EACI,kBD3HgB;EC4HhB;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI,MDxPQ;;AC2PhB;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI,ODvPmB;;;AC0PvB;EACI;;;AAGJ;EACI;EACA;;;AAIA;EACI;;;AAKJ;AAAA;EAEI;;AAIA;AAAA;EAEI;;AAIR;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;;AAKJ;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAEA;EACI;EACA;;;AAKZ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA,ODvOQ;;AC0OZ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AASJ;EACI,ODnWe;ECoWf;EACA;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA,kBDnSgB;ECoShB;;AAEA;EACI,ODhYW;ECiYX;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAKZ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA,ODzZQ;EC0ZR;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA,OD3ae;EC4af;;AAEA;EACI;EACA;;AAIR;EACI;EACA,ODtbe;ECubf;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI,YD/WY;;ACiXZ;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA,ODjeY;;;AC0ehB;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA,YD5fS;;AC8fT;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA,ODxgBQ;ECygBR;EACA;;AAIA;EACI;EACA;EACA;EACA;;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA,YDxjBa;ECyjBb;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA,YD/iBU;ECgjBV;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA,ODnkBQ;ECokBR;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI,YD7fY;;ACggBhB;EACI,YDjgBY;ECkgBZ,OD/mBS;;ACknBb;EAEI;EACA;EACA;;AAGJ;EACI;EACA,ODpmBI;;ACwmBZ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA,ODlnBQ;ECmnBR;EACA;EACA","file":"config_panel.css"}
|
|
@@ -568,3 +568,97 @@ $color-picker-spacing: 5px;
|
|
|
568
568
|
}
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
|
+
|
|
572
|
+
.gd-line-style-item-trigger {
|
|
573
|
+
display: block;
|
|
574
|
+
width: 100%;
|
|
575
|
+
padding: 0;
|
|
576
|
+
margin: 0;
|
|
577
|
+
border: none;
|
|
578
|
+
background: transparent;
|
|
579
|
+
text-align: left;
|
|
580
|
+
cursor: pointer;
|
|
581
|
+
|
|
582
|
+
&:disabled {
|
|
583
|
+
cursor: not-allowed;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.gd-line-style-toolbar {
|
|
588
|
+
display: inline-flex;
|
|
589
|
+
align-items: center;
|
|
590
|
+
gap: 8px;
|
|
591
|
+
padding: 6px 8px;
|
|
592
|
+
background: kit-variables.$gd-color-white;
|
|
593
|
+
border: 1px solid kit-variables.$gd-border-color;
|
|
594
|
+
border-radius: 3px;
|
|
595
|
+
box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.1);
|
|
596
|
+
|
|
597
|
+
&.is-disabled {
|
|
598
|
+
pointer-events: none;
|
|
599
|
+
opacity: 0.5;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
&__divider {
|
|
603
|
+
width: 1px;
|
|
604
|
+
height: 28px;
|
|
605
|
+
background: kit-variables.$gd-border-color;
|
|
606
|
+
flex-shrink: 0;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
&__btn {
|
|
610
|
+
display: flex;
|
|
611
|
+
align-items: center;
|
|
612
|
+
gap: 4px;
|
|
613
|
+
height: 28px;
|
|
614
|
+
padding: 0 4px;
|
|
615
|
+
cursor: pointer;
|
|
616
|
+
color: kit-variables.$gd-color-text;
|
|
617
|
+
border-radius: 2px;
|
|
618
|
+
border: none;
|
|
619
|
+
background: transparent;
|
|
620
|
+
font: inherit;
|
|
621
|
+
|
|
622
|
+
&:focus-visible {
|
|
623
|
+
outline: 2px solid kit-variables.$gd-color-highlight;
|
|
624
|
+
outline-offset: 1px;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
&:hover {
|
|
628
|
+
background: kit-variables.$is-focused-background;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
&.is-open {
|
|
632
|
+
background: kit-variables.$is-focused-background;
|
|
633
|
+
color: kit-variables.$gd-color-highlight;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
&.is-disabled,
|
|
637
|
+
&:disabled {
|
|
638
|
+
opacity: 0.5;
|
|
639
|
+
cursor: not-allowed;
|
|
640
|
+
pointer-events: none;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
.gd-icon-navigatedown {
|
|
644
|
+
font-size: 10px;
|
|
645
|
+
color: kit-variables.$gd-color-label;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
&__color-swatch {
|
|
650
|
+
width: 20px;
|
|
651
|
+
height: 20px;
|
|
652
|
+
border-radius: 2px;
|
|
653
|
+
flex-shrink: 0;
|
|
654
|
+
overflow: hidden;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
&__weight-text {
|
|
658
|
+
font-size: 14px;
|
|
659
|
+
color: kit-variables.$gd-color-label;
|
|
660
|
+
white-space: nowrap;
|
|
661
|
+
min-width: 28px;
|
|
662
|
+
text-align: center;
|
|
663
|
+
}
|
|
664
|
+
}
|