@gooddata/sdk-ui-kit 11.57.0-alpha.3 → 11.57.0-alpha.5
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/esm/@ui/@utils/keyboardNavigation.d.ts +10 -0
- package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
- package/esm/@ui/@utils/keyboardNavigation.js +9 -0
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts +4 -6
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts.map +1 -1
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.js +10 -8
- package/esm/@ui/UiAutocomplete/useAsyncListSource.js +1 -1
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts +8 -1
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +10 -6
- package/esm/@ui/UiListbox/defaults/DefaultUiListboxInteractiveItemComponent.d.ts.map +1 -1
- package/esm/@ui/UiListbox/defaults/DefaultUiListboxInteractiveItemComponent.js +6 -2
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts.map +1 -1
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js +7 -2
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts.map +1 -1
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.js +7 -2
- package/esm/@ui/UiModalDialog/UiDialogHeader.d.ts.map +1 -1
- package/esm/@ui/UiModalDialog/UiDialogHeader.js +6 -3
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +16 -3
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +2 -3
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +9 -4
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +20 -29
- package/esm/@ui/UiTags/hooks/useResponsiveTags.js +1 -1
- package/esm/@ui/UiToolbar/UiToolbar.d.ts +52 -0
- package/esm/@ui/UiToolbar/UiToolbar.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/UiToolbar.js +44 -0
- package/esm/@ui/UiToolbar/UiToolbarChevron.d.ts +8 -0
- package/esm/@ui/UiToolbar/UiToolbarChevron.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/UiToolbarChevron.js +12 -0
- package/esm/@ui/UiToolbar/UiToolbarItemTooltip.d.ts +14 -0
- package/esm/@ui/UiToolbar/UiToolbarItemTooltip.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/UiToolbarItemTooltip.js +11 -0
- package/esm/@ui/UiToolbar/constants.d.ts +5 -0
- package/esm/@ui/UiToolbar/constants.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/constants.js +6 -0
- package/esm/@ui/UiToolbar/context.d.ts +23 -0
- package/esm/@ui/UiToolbar/context.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/context.js +6 -0
- package/esm/@ui/UiToolbar/rovingFocusUtils.d.ts +55 -0
- package/esm/@ui/UiToolbar/rovingFocusUtils.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/rovingFocusUtils.js +220 -0
- package/esm/@ui/UiToolbar/toolbarItemProps.d.ts +35 -0
- package/esm/@ui/UiToolbar/toolbarItemProps.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/toolbarItemProps.js +2 -0
- package/esm/@ui/UiToolbar/useToolbarRovingFocus.d.ts +19 -0
- package/esm/@ui/UiToolbar/useToolbarRovingFocus.d.ts.map +1 -0
- package/esm/@ui/UiToolbar/useToolbarRovingFocus.js +172 -0
- package/esm/@ui/UiToolbarButton/UiToolbarButton.d.ts +19 -0
- package/esm/@ui/UiToolbarButton/UiToolbarButton.d.ts.map +1 -0
- package/esm/@ui/UiToolbarButton/UiToolbarButton.js +29 -0
- package/esm/@ui/UiToolbarButton/useToolbarItemRole.d.ts +38 -0
- package/esm/@ui/UiToolbarButton/useToolbarItemRole.d.ts.map +1 -0
- package/esm/@ui/UiToolbarButton/useToolbarItemRole.js +67 -0
- package/esm/@ui/UiToolbarColorSwatch/UiToolbarColorSwatch.d.ts +38 -0
- package/esm/@ui/UiToolbarColorSwatch/UiToolbarColorSwatch.d.ts.map +1 -0
- package/esm/@ui/UiToolbarColorSwatch/UiToolbarColorSwatch.js +13 -0
- package/esm/@ui/UiToolbarDivider/UiToolbarDivider.d.ts +7 -0
- package/esm/@ui/UiToolbarDivider/UiToolbarDivider.d.ts.map +1 -0
- package/esm/@ui/UiToolbarDivider/UiToolbarDivider.js +12 -0
- package/esm/@ui/UiToolbarIconButton/UiToolbarIconButton.d.ts +34 -0
- package/esm/@ui/UiToolbarIconButton/UiToolbarIconButton.d.ts.map +1 -0
- package/esm/@ui/UiToolbarIconButton/UiToolbarIconButton.js +34 -0
- package/esm/@ui/UiToolbarIconSelect/UiToolbarIconSelect.d.ts +54 -0
- package/esm/@ui/UiToolbarIconSelect/UiToolbarIconSelect.d.ts.map +1 -0
- package/esm/@ui/UiToolbarIconSelect/UiToolbarIconSelect.js +26 -0
- package/esm/@ui/UiToolbarMoreButton/UiToolbarMoreButton.d.ts +41 -0
- package/esm/@ui/UiToolbarMoreButton/UiToolbarMoreButton.d.ts.map +1 -0
- package/esm/@ui/UiToolbarMoreButton/UiToolbarMoreButton.js +12 -0
- package/esm/@ui/UiToolbarSegmentedControl/UiToolbarSegmentedControl.d.ts +37 -0
- package/esm/@ui/UiToolbarSegmentedControl/UiToolbarSegmentedControl.d.ts.map +1 -0
- package/esm/@ui/UiToolbarSegmentedControl/UiToolbarSegmentedControl.js +145 -0
- package/esm/@ui/UiToolbarSegmentedControl/context.d.ts +12 -0
- package/esm/@ui/UiToolbarSegmentedControl/context.d.ts.map +1 -0
- package/esm/@ui/UiToolbarSegmentedControl/context.js +3 -0
- package/esm/@ui/UiToolbarSelect/UiToolbarSelect.d.ts +51 -0
- package/esm/@ui/UiToolbarSelect/UiToolbarSelect.d.ts.map +1 -0
- package/esm/@ui/UiToolbarSelect/UiToolbarSelect.js +24 -0
- package/esm/@ui/UiToolbarStepper/UiToolbarStepper.d.ts +75 -0
- package/esm/@ui/UiToolbarStepper/UiToolbarStepper.d.ts.map +1 -0
- package/esm/@ui/UiToolbarStepper/UiToolbarStepper.js +85 -0
- package/esm/@ui/UiTooltip/UiTooltip.d.ts +1 -1
- package/esm/@ui/UiTooltip/UiTooltip.d.ts.map +1 -1
- package/esm/@ui/UiTooltip/UiTooltip.js +26 -8
- package/esm/@ui/UiTooltip/types.d.ts +12 -0
- package/esm/@ui/UiTooltip/types.d.ts.map +1 -1
- package/esm/@ui/hooks/useElementSize.d.ts.map +1 -1
- package/esm/@ui/hooks/useElementSize.js +2 -1
- package/esm/@ui/hooks/useIsTextTruncated.d.ts +12 -0
- package/esm/@ui/hooks/useIsTextTruncated.d.ts.map +1 -0
- package/esm/@ui/hooks/useIsTextTruncated.js +29 -0
- package/esm/Dropdown/Dropdown.js +1 -1
- package/esm/EditableLabel/EditableLabel.js +1 -1
- package/esm/List/LegacyList.js +1 -1
- package/esm/List/List.js +1 -1
- package/esm/Messages/toasts/NonContextToastsInterop.js +1 -1
- package/esm/Messages/toasts/ToastsCenterMessage.d.ts.map +1 -1
- package/esm/Messages/toasts/ToastsCenterMessage.js +1 -1
- package/esm/ResponsiveText/ResponsiveText.js +3 -3
- package/esm/ShortenedText/ShortenedText.js +1 -1
- package/esm/index.d.ts +15 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +12 -1
- package/esm/locales.d.ts +4 -16
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +2 -6
- package/esm/sdk-ui-kit.d.ts +513 -15
- package/esm/syntaxHighlightingInput/hooks/useCodemirror.js +1 -1
- package/esm/utils/domUtilities.d.ts +4 -0
- package/esm/utils/domUtilities.d.ts.map +1 -1
- package/esm/utils/domUtilities.js +4 -1
- package/esm/utils/events.d.ts +3 -0
- package/esm/utils/events.d.ts.map +1 -1
- package/esm/utils/events.js +4 -1
- package/package.json +13 -14
- package/src/@ui/UiAddGranteeDialog/UiAddGranteeDialog.scss +8 -0
- package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +0 -6
- package/src/@ui/UiGranteeRow/UiGranteeRow.scss +5 -0
- package/src/@ui/UiListbox/UiListbox.scss +4 -0
- package/src/@ui/UiMenu/UiMenu.scss +3 -0
- package/src/@ui/UiModalDialog/UiModalDialog.scss +16 -3
- package/src/@ui/UiObjectShareDialog/UiObjectShareDialog.scss +40 -1
- package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +7 -3
- package/src/@ui/UiToolbar/UiToolbar.scss +15 -0
- package/src/@ui/UiToolbar/UiToolbarChevron.scss +11 -0
- package/src/@ui/UiToolbar/toolbarItem.scss +133 -0
- package/src/@ui/UiToolbarButton/UiToolbarButton.scss +15 -0
- package/src/@ui/UiToolbarColorSwatch/UiToolbarColorSwatch.scss +66 -0
- package/src/@ui/UiToolbarDivider/UiToolbarDivider.scss +11 -0
- package/src/@ui/UiToolbarIconButton/UiToolbarIconButton.scss +30 -0
- package/src/@ui/UiToolbarIconSelect/UiToolbarIconSelect.scss +12 -0
- package/src/@ui/UiToolbarSegmentedControl/UiToolbarSegmentedControl.scss +10 -0
- package/src/@ui/UiToolbarSelect/UiToolbarSelect.scss +29 -0
- package/src/@ui/UiToolbarStepper/UiToolbarStepper.scss +53 -0
- package/src/@ui/defaultTheme.scss +1 -0
- package/src/@ui/index.scss +10 -0
- package/styles/css/main.css +563 -9
- package/styles/css/main.css.map +1 -1
package/esm/utils/events.d.ts
CHANGED
|
@@ -2,6 +2,9 @@ import { type KeyboardEvent } from "react";
|
|
|
2
2
|
/**
|
|
3
3
|
* Checks if the given keyboard event is an action key = Enter or Space.
|
|
4
4
|
*
|
|
5
|
+
* Both the produced character and the physical key are accepted, so it agrees with the navigation
|
|
6
|
+
* helpers in `@ui`, which match on `code`.
|
|
7
|
+
*
|
|
5
8
|
* @param event - The keyboard event to check.
|
|
6
9
|
* @returns `true` if the event is an action key, `false` otherwise.
|
|
7
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OAElD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,UAAW,aAAa,KAAG,OAErD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OASlD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OAElD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,UAAW,aAAa,KAAG,OAEhD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,UAAW,aAAa,KAAG,OAE/C,CAAC"}
|
package/esm/utils/events.js
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Checks if the given keyboard event is an action key = Enter or Space.
|
|
4
4
|
*
|
|
5
|
+
* Both the produced character and the physical key are accepted, so it agrees with the navigation
|
|
6
|
+
* helpers in `@ui`, which match on `code`.
|
|
7
|
+
*
|
|
5
8
|
* @param event - The keyboard event to check.
|
|
6
9
|
* @returns `true` if the event is an action key, `false` otherwise.
|
|
7
10
|
*
|
|
8
11
|
* @internal
|
|
9
12
|
*/
|
|
10
13
|
export const isActionKey = (event) => {
|
|
11
|
-
return event.key === "Enter" || event.key === " ";
|
|
14
|
+
return event.key === "Enter" || event.key === " " || event.code === "Enter" || event.code === "Space";
|
|
12
15
|
};
|
|
13
16
|
/**
|
|
14
17
|
* Checks if the given keyboard event is triggered by a Space key.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-kit",
|
|
3
|
-
"version": "11.57.0-alpha.
|
|
3
|
+
"version": "11.57.0-alpha.5",
|
|
4
4
|
"description": "GoodData SDK - UI Building Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -79,11 +79,11 @@
|
|
|
79
79
|
"unified": "^11.0.5",
|
|
80
80
|
"uuid": "11.1.1",
|
|
81
81
|
"yaml": "2.8.3",
|
|
82
|
-
"@gooddata/sdk-model": "11.57.0-alpha.
|
|
83
|
-
"@gooddata/sdk-
|
|
84
|
-
"@gooddata/
|
|
85
|
-
"@gooddata/sdk-ui-theme-provider": "11.57.0-alpha.
|
|
86
|
-
"@gooddata/
|
|
82
|
+
"@gooddata/sdk-model": "11.57.0-alpha.5",
|
|
83
|
+
"@gooddata/sdk-ui": "11.57.0-alpha.5",
|
|
84
|
+
"@gooddata/sdk-backend-spi": "11.57.0-alpha.5",
|
|
85
|
+
"@gooddata/sdk-ui-theme-provider": "11.57.0-alpha.5",
|
|
86
|
+
"@gooddata/util": "11.57.0-alpha.5"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
89
|
"@microsoft/api-documenter": "7.30.10",
|
|
@@ -111,15 +111,14 @@
|
|
|
111
111
|
"eslint-plugin-no-barrel-files": "1.2.2",
|
|
112
112
|
"eslint-plugin-no-only-tests": "3.3.0",
|
|
113
113
|
"eslint-plugin-react": "7.37.5",
|
|
114
|
-
"eslint-plugin-react-hooks": "5.2.0",
|
|
115
114
|
"eslint-plugin-sonarjs": "3.0.6",
|
|
116
115
|
"happy-dom": "20.12.0",
|
|
117
116
|
"kefir": "3.8.8",
|
|
118
117
|
"npm-run-all": "4.1.5",
|
|
119
118
|
"oxfmt": "0.66.0",
|
|
120
|
-
"oxlint": "1.
|
|
119
|
+
"oxlint": "1.82.0",
|
|
121
120
|
"oxlint-plugin-eslint": "1.82.0",
|
|
122
|
-
"oxlint-tsgolint": "0.
|
|
121
|
+
"oxlint-tsgolint": "7.0.2001",
|
|
123
122
|
"raf": "3.4.1",
|
|
124
123
|
"react": "19.1.1",
|
|
125
124
|
"react-dom": "19.1.1",
|
|
@@ -129,11 +128,11 @@
|
|
|
129
128
|
"typescript": "7.0.2",
|
|
130
129
|
"vitest": "4.1.8",
|
|
131
130
|
"vitest-dom": "0.1.1",
|
|
132
|
-
"@gooddata/eslint-config": "11.57.0-alpha.
|
|
133
|
-
"@gooddata/oxlint-config": "11.57.0-alpha.
|
|
134
|
-
"@gooddata/
|
|
135
|
-
"@gooddata/
|
|
136
|
-
"@gooddata/stylelint-config": "11.57.0-alpha.
|
|
131
|
+
"@gooddata/eslint-config": "11.57.0-alpha.5",
|
|
132
|
+
"@gooddata/oxlint-config": "11.57.0-alpha.5",
|
|
133
|
+
"@gooddata/sdk-backend-mockingbird": "11.57.0-alpha.5",
|
|
134
|
+
"@gooddata/reference-workspace": "11.57.0-alpha.5",
|
|
135
|
+
"@gooddata/stylelint-config": "11.57.0-alpha.5"
|
|
137
136
|
},
|
|
138
137
|
"peerDependencies": {
|
|
139
138
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -4,5 +4,13 @@
|
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
gap: var(--gd-spacing-10px);
|
|
7
|
+
|
|
8
|
+
// This card spaces its children with a gap of its own, which stacks with the shared
|
|
9
|
+
// header's bottom margin. Halve the margin so the two together come to the 20px the
|
|
10
|
+
// design puts between the header and the first content. Cards with no gap of their own
|
|
11
|
+
// (the confirm dialog, the report dialogs) keep the full margin and need no override.
|
|
12
|
+
.gd-ui-kit-dialog-header {
|
|
13
|
+
margin-bottom: var(--gd-spacing-10px);
|
|
14
|
+
}
|
|
7
15
|
padding-bottom: var(--gd-spacing-5px);
|
|
8
16
|
}
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
padding: var(--gd-spacing-5px) 0;
|
|
10
10
|
box-sizing: border-box;
|
|
11
11
|
|
|
12
|
+
// Row-wide hover highlight, the same one list items use elsewhere.
|
|
13
|
+
&:hover {
|
|
14
|
+
background: var(--gd-palette-complementary-2);
|
|
15
|
+
}
|
|
16
|
+
|
|
12
17
|
// Muted while a change for this row is being saved (its controls are disabled too).
|
|
13
18
|
&--pending {
|
|
14
19
|
opacity: 0.6;
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
.gd-ui-kit-dialog-header {
|
|
33
33
|
display: flex;
|
|
34
34
|
align-items: center;
|
|
35
|
-
|
|
35
|
+
// 10px between the leading slot (the back button) and the title, per the design.
|
|
36
|
+
// The title flexes, so this is also the minimum before the trailing close button.
|
|
37
|
+
gap: var(--gd-spacing-10px);
|
|
36
38
|
margin-bottom: var(--gd-spacing-20px);
|
|
37
39
|
|
|
38
40
|
&__leading {
|
|
@@ -41,6 +43,17 @@
|
|
|
41
43
|
flex-shrink: 0;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
// The close button's 32px hit area is taller than the title's 23px line box. Left to
|
|
47
|
+
// stretch the row it would push the title down and the content below further away than
|
|
48
|
+
// the design places them, so pull the extra back at both ends. The target size itself
|
|
49
|
+
// is untouched: only the button's contribution to the row's height changes.
|
|
50
|
+
&__close {
|
|
51
|
+
display: inline-flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
flex-shrink: 0;
|
|
54
|
+
margin-block: calc((23px - 32px) / 2);
|
|
55
|
+
}
|
|
56
|
+
|
|
44
57
|
&__title {
|
|
45
58
|
flex: 1 1 auto;
|
|
46
59
|
min-width: 0;
|
|
@@ -52,8 +65,8 @@
|
|
|
52
65
|
white-space: nowrap;
|
|
53
66
|
|
|
54
67
|
&--size-default {
|
|
55
|
-
font-size:
|
|
56
|
-
line-height:
|
|
68
|
+
font-size: 17px;
|
|
69
|
+
line-height: 23px;
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
&--size-large {
|
|
@@ -5,14 +5,53 @@
|
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
gap: var(--gd-spacing-10px);
|
|
7
7
|
|
|
8
|
+
// This card spaces its children with a gap of its own, which stacks with the shared
|
|
9
|
+
// header's bottom margin. Halve the margin so the two together come to the 20px the
|
|
10
|
+
// design puts between the header and the first content. Cards with no gap of their own
|
|
11
|
+
// (the confirm dialog, the report dialogs) keep the full margin and need no override.
|
|
12
|
+
.gd-ui-kit-dialog-header {
|
|
13
|
+
margin-bottom: var(--gd-spacing-10px);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&__note {
|
|
17
|
+
// Stacks with the card's gap to set the note a design-standard 20px apart from the
|
|
18
|
+
// section below it, where the gap alone would leave it half that.
|
|
19
|
+
margin-bottom: var(--gd-spacing-10px);
|
|
20
|
+
padding: var(--gd-spacing-5px) var(--gd-spacing-10px);
|
|
21
|
+
border-radius: 3px;
|
|
22
|
+
background: var(--gd-palette-primary-dimmed);
|
|
23
|
+
color: var(--gd-palette-primary-base);
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
line-height: 20px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&__note-prefix {
|
|
29
|
+
font-weight: 700;
|
|
30
|
+
}
|
|
31
|
+
|
|
8
32
|
&__grantees {
|
|
9
33
|
display: flex;
|
|
10
34
|
flex-direction: column;
|
|
35
|
+
// Stacks with the card's gap to set the list 20px apart from the section that
|
|
36
|
+
// follows it, while the section heading above it keeps the tighter 10px.
|
|
37
|
+
padding-bottom: var(--gd-spacing-10px);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&__empty {
|
|
41
|
+
padding-block: var(--gd-spacing-10px);
|
|
42
|
+
color: var(--gd-palette-complementary-6);
|
|
43
|
+
font-size: 14px;
|
|
44
|
+
line-height: 20px;
|
|
45
|
+
text-align: center;
|
|
46
|
+
|
|
47
|
+
p {
|
|
48
|
+
margin: 0;
|
|
49
|
+
}
|
|
11
50
|
}
|
|
12
51
|
|
|
13
52
|
&__error {
|
|
14
53
|
padding-block: var(--gd-spacing-20px);
|
|
15
|
-
color: var(--gd-palette-complementary-6
|
|
54
|
+
color: var(--gd-palette-complementary-6);
|
|
16
55
|
font-size: 14px;
|
|
17
56
|
text-align: center;
|
|
18
57
|
}
|
|
@@ -30,9 +30,8 @@
|
|
|
30
30
|
display: flex;
|
|
31
31
|
align-items: stretch;
|
|
32
32
|
|
|
33
|
-
// Hover/focus highlight
|
|
34
|
-
//
|
|
35
|
-
// are siblings — a partial highlight would look broken.
|
|
33
|
+
// Hover/focus highlight on the row wrapper, so it also covers the tooltip
|
|
34
|
+
// anchor wrapper a disabled row is nested in.
|
|
36
35
|
&:hover,
|
|
37
36
|
&:focus-within {
|
|
38
37
|
background: var(--gd-palette-complementary-2);
|
|
@@ -70,6 +69,11 @@
|
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
71
|
|
|
72
|
+
// Explanations are sentences; keep them from stretching into one long line.
|
|
73
|
+
&__item-tooltip {
|
|
74
|
+
max-width: 220px;
|
|
75
|
+
}
|
|
76
|
+
|
|
73
77
|
&__item-label {
|
|
74
78
|
flex: 1 1 auto;
|
|
75
79
|
min-width: 0;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "./toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: toolbarItem.$toolbar-gap;
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
padding: toolbarItem.$toolbar-padding;
|
|
11
|
+
border: 1px solid var(--gd-palette-complementary-3);
|
|
12
|
+
border-radius: var(--gd-button-borderRadius);
|
|
13
|
+
background-color: var(--gd-palette-complementary-0);
|
|
14
|
+
box-shadow: 0 2px 10px var(--gd-shadow-color);
|
|
15
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
// Toolbar-only dimensions from the design library. They are not theme variables.
|
|
4
|
+
$toolbar-item-size: 28px;
|
|
5
|
+
$toolbar-item-padding: 4px;
|
|
6
|
+
$toolbar-item-gap: 4px;
|
|
7
|
+
$toolbar-padding: 8px;
|
|
8
|
+
$toolbar-gap: 8px;
|
|
9
|
+
$toolbar-icon-size-medium: 20px;
|
|
10
|
+
$toolbar-icon-size-small: 14px;
|
|
11
|
+
$toolbar-hit-area: 24px;
|
|
12
|
+
|
|
13
|
+
@mixin toolbar-item-base {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
gap: $toolbar-item-gap;
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
height: $toolbar-item-size;
|
|
20
|
+
margin: 0;
|
|
21
|
+
padding: 0 $toolbar-item-padding;
|
|
22
|
+
border: 0;
|
|
23
|
+
border-radius: var(--gd-toolbar-borderRadius);
|
|
24
|
+
background-color: transparent;
|
|
25
|
+
font-family: var(--gd-font-family);
|
|
26
|
+
font-size: 14px;
|
|
27
|
+
line-height: normal;
|
|
28
|
+
white-space: nowrap;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
outline: none;
|
|
31
|
+
transition: var(--gd-transition-all);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@mixin toolbar-focus-ring {
|
|
35
|
+
&:focus-visible {
|
|
36
|
+
box-shadow: inset 0 0 0 2px var(--gd-palette-primary-base);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// The toolbar colour ladder. `$root` is the block selector of the component.
|
|
41
|
+
@mixin toolbar-item-ladder($root) {
|
|
42
|
+
--gd-icon-fill-color: var(--gd-palette-complementary-7);
|
|
43
|
+
|
|
44
|
+
color: var(--gd-palette-complementary-7);
|
|
45
|
+
|
|
46
|
+
@include toolbar-focus-ring;
|
|
47
|
+
|
|
48
|
+
&:not([aria-disabled="true"]) {
|
|
49
|
+
&:hover {
|
|
50
|
+
--gd-icon-fill-color: var(--gd-palette-complementary-8);
|
|
51
|
+
|
|
52
|
+
color: var(--gd-palette-complementary-8);
|
|
53
|
+
background-color: var(--gd-palette-complementary-2);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&:active,
|
|
57
|
+
&#{$root}--isActive {
|
|
58
|
+
--gd-icon-fill-color: var(--gd-palette-complementary-8);
|
|
59
|
+
|
|
60
|
+
color: var(--gd-palette-complementary-8);
|
|
61
|
+
background-color: var(--gd-palette-complementary-4);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&#{$root}--isSelected {
|
|
65
|
+
--gd-icon-fill-color: var(--gd-palette-primary-base);
|
|
66
|
+
|
|
67
|
+
color: var(--gd-palette-primary-base);
|
|
68
|
+
background-color: transparent;
|
|
69
|
+
|
|
70
|
+
&:hover {
|
|
71
|
+
--gd-icon-fill-color: var(--gd-palette-primary-base-d12);
|
|
72
|
+
|
|
73
|
+
color: var(--gd-palette-primary-base-d12);
|
|
74
|
+
background-color: var(--gd-palette-primary-dimmed);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&:active,
|
|
78
|
+
&#{$root}--isActive {
|
|
79
|
+
--gd-icon-fill-color: var(--gd-palette-primary-base-d12);
|
|
80
|
+
|
|
81
|
+
color: var(--gd-palette-primary-base-d12);
|
|
82
|
+
background-color: var(--gd-palette-primary-base-dimmed-darken03);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
&#{$root}--isDestructive {
|
|
87
|
+
&:hover {
|
|
88
|
+
--gd-icon-fill-color: var(--gd-palette-error-base);
|
|
89
|
+
|
|
90
|
+
color: var(--gd-palette-error-base);
|
|
91
|
+
background-color: var(--gd-palette-error-dimmed);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&:active,
|
|
95
|
+
&#{$root}--isActive {
|
|
96
|
+
--gd-icon-fill-color: var(--gd-palette-error-base-d10);
|
|
97
|
+
|
|
98
|
+
color: var(--gd-palette-error-base-d10);
|
|
99
|
+
background-color: var(--gd-palette-error-disabled);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
&#{$root}--isSelected {
|
|
103
|
+
--gd-icon-fill-color: var(--gd-palette-error-base);
|
|
104
|
+
|
|
105
|
+
color: var(--gd-palette-error-base);
|
|
106
|
+
background-color: transparent;
|
|
107
|
+
|
|
108
|
+
&:hover {
|
|
109
|
+
--gd-icon-fill-color: var(--gd-palette-error-base);
|
|
110
|
+
|
|
111
|
+
color: var(--gd-palette-error-base);
|
|
112
|
+
background-color: var(--gd-palette-error-dimmed);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&:active,
|
|
116
|
+
&#{$root}--isActive {
|
|
117
|
+
--gd-icon-fill-color: var(--gd-palette-error-base-d10);
|
|
118
|
+
|
|
119
|
+
color: var(--gd-palette-error-base-d10);
|
|
120
|
+
background-color: var(--gd-palette-error-disabled);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&[aria-disabled="true"] {
|
|
127
|
+
--gd-icon-fill-color: var(--gd-palette-complementary-4);
|
|
128
|
+
|
|
129
|
+
color: var(--gd-palette-complementary-5);
|
|
130
|
+
background-color: transparent;
|
|
131
|
+
cursor: default;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "../UiToolbar/toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar-button {
|
|
6
|
+
$root: &;
|
|
7
|
+
|
|
8
|
+
@include toolbarItem.toolbar-item-base;
|
|
9
|
+
@include toolbarItem.toolbar-item-ladder($root);
|
|
10
|
+
|
|
11
|
+
&__label {
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
text-overflow: ellipsis;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "../UiToolbar/toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar-color-swatch {
|
|
6
|
+
$root: &;
|
|
7
|
+
$bar-height: 5px;
|
|
8
|
+
$glyph-size: 12px;
|
|
9
|
+
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: center;
|
|
14
|
+
gap: 2px;
|
|
15
|
+
flex-shrink: 0;
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
width: toolbarItem.$toolbar-icon-size-medium;
|
|
18
|
+
height: toolbarItem.$toolbar-icon-size-medium;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
|
|
21
|
+
&__fill {
|
|
22
|
+
position: relative;
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
width: 100%;
|
|
25
|
+
height: 100%;
|
|
26
|
+
background-color: var(--gd-palette-complementary-0);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&__transparent {
|
|
30
|
+
position: absolute;
|
|
31
|
+
inset: 0;
|
|
32
|
+
background: repeating-conic-gradient(var(--gd-palette-complementary-3) 0 25%, transparent 0 50%) 0 0 /
|
|
33
|
+
6px 6px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&__glyph {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
width: $glyph-size;
|
|
41
|
+
height: $glyph-size;
|
|
42
|
+
font-family: var(--gd-font-family);
|
|
43
|
+
font-size: $glyph-size;
|
|
44
|
+
font-weight: 700;
|
|
45
|
+
line-height: 1;
|
|
46
|
+
color: currentColor;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&__bar {
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
width: 100%;
|
|
52
|
+
height: $bar-height;
|
|
53
|
+
border-radius: var(--gd-button-borderRadius);
|
|
54
|
+
background-color: var(--gd-palette-primary-base);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&--hasBorder {
|
|
58
|
+
&#{$root}--variant-fill #{$root}__fill {
|
|
59
|
+
box-shadow: inset 0 0 0 1px var(--gd-palette-complementary-5);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&#{$root}--variant-text #{$root}__bar {
|
|
63
|
+
box-shadow: inset 0 0 0 1px var(--gd-palette-complementary-4);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "../UiToolbar/toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar-divider {
|
|
6
|
+
flex-shrink: 0;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
width: 1px;
|
|
9
|
+
height: toolbarItem.$toolbar-item-size;
|
|
10
|
+
background-color: var(--gd-palette-complementary-3);
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "../UiToolbar/toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar-icon-button {
|
|
6
|
+
$root: &;
|
|
7
|
+
|
|
8
|
+
@include toolbarItem.toolbar-item-base;
|
|
9
|
+
@include toolbarItem.toolbar-item-ladder($root);
|
|
10
|
+
|
|
11
|
+
position: relative;
|
|
12
|
+
flex-shrink: 0;
|
|
13
|
+
|
|
14
|
+
&--size-medium {
|
|
15
|
+
width: toolbarItem.$toolbar-item-size;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&--size-small {
|
|
19
|
+
width: toolbarItem.$toolbar-icon-size-small;
|
|
20
|
+
height: toolbarItem.$toolbar-icon-size-small;
|
|
21
|
+
padding: 0;
|
|
22
|
+
|
|
23
|
+
// The visible box is 14px; the pointer target is widened to 24px.
|
|
24
|
+
&::before {
|
|
25
|
+
content: "";
|
|
26
|
+
position: absolute;
|
|
27
|
+
inset: calc((toolbarItem.$toolbar-icon-size-small - toolbarItem.$toolbar-hit-area) / 2);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
|
|
3
|
+
@use "../UiToolbar/toolbarItem";
|
|
4
|
+
|
|
5
|
+
.gd-ui-kit-toolbar-select {
|
|
6
|
+
$root: &;
|
|
7
|
+
$fixed-width: 240px;
|
|
8
|
+
|
|
9
|
+
@include toolbarItem.toolbar-item-base;
|
|
10
|
+
@include toolbarItem.toolbar-item-ladder($root);
|
|
11
|
+
|
|
12
|
+
justify-content: flex-start;
|
|
13
|
+
|
|
14
|
+
&--width-fixed {
|
|
15
|
+
width: $fixed-width;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&__label {
|
|
19
|
+
flex: 1 1 auto;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
text-overflow: ellipsis;
|
|
23
|
+
text-align: left;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&--isPlaceholder:not([aria-disabled="true"]) #{$root}__label {
|
|
27
|
+
color: var(--gd-palette-complementary-6);
|
|
28
|
+
}
|
|
29
|
+
}
|