@gooddata/sdk-ui-kit 10.27.0-alpha.23 → 10.27.0-alpha.25

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.
Files changed (47) hide show
  1. package/esm/@ui/UiMenu/UiMenu.d.ts +2 -2
  2. package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
  3. package/esm/@ui/UiMenu/UiMenu.js +16 -74
  4. package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
  5. package/esm/@ui/UiMenu/context.d.ts +11 -0
  6. package/esm/@ui/UiMenu/context.d.ts.map +1 -0
  7. package/esm/@ui/UiMenu/context.js +11 -0
  8. package/esm/@ui/UiMenu/context.js.map +1 -0
  9. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts +7 -0
  10. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts.map +1 -0
  11. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.js +21 -0
  12. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.js.map +1 -0
  13. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +2 -2
  14. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +1 -1
  15. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +19 -3
  16. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +1 -1
  17. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +6 -2
  18. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +1 -1
  19. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js +45 -2
  20. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +1 -1
  21. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +2 -2
  22. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +1 -1
  23. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js +8 -3
  24. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +1 -1
  25. package/esm/@ui/UiMenu/hooks.d.ts +11 -11
  26. package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
  27. package/esm/@ui/UiMenu/hooks.js +101 -15
  28. package/esm/@ui/UiMenu/hooks.js.map +1 -1
  29. package/esm/@ui/UiMenu/itemUtils.d.ts +15 -14
  30. package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
  31. package/esm/@ui/UiMenu/itemUtils.js +39 -11
  32. package/esm/@ui/UiMenu/itemUtils.js.map +1 -1
  33. package/esm/@ui/UiMenu/types.d.ts +70 -32
  34. package/esm/@ui/UiMenu/types.d.ts.map +1 -1
  35. package/esm/List/ListItem.js +2 -2
  36. package/esm/List/ListItem.js.map +1 -1
  37. package/esm/index.d.ts +1 -1
  38. package/esm/index.d.ts.map +1 -1
  39. package/esm/index.js.map +1 -1
  40. package/esm/sdk-ui-kit.d.ts +83 -35
  41. package/esm/typings/accessibility.d.ts +1 -1
  42. package/package.json +8 -8
  43. package/src/@ui/UiListbox/UiListbox.scss +2 -4
  44. package/src/@ui/UiMenu/UiMenu.scss +23 -7
  45. package/styles/css/main.css +23 -7
  46. package/styles/css/main.css.map +1 -1
  47. package/styles/scss/mixins.scss +6 -0
@@ -560,13 +560,13 @@ export declare function DefaultUiListboxStaticItemComponent<T>({ item, }: UiList
560
560
  /**
561
561
  * @internal
562
562
  */
563
- export declare function DefaultUiMenuInteractiveItemComponent<InteractiveItemData, StaticItemData>({ item, isFocused, onSelect, }: UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>): React_2.ReactNode;
563
+ export declare function DefaultUiMenuInteractiveItemComponent<T extends IUiMenuItemData = object>({ item, isFocused, onSelect, }: UiMenuInteractiveItemProps<T>): React_2.ReactNode;
564
564
 
565
565
  /**
566
566
  * By default just renders the data.
567
567
  * @internal
568
568
  */
569
- export declare function DefaultUiMenuStaticItemComponent<T>({ item }: UiMenuStaticItemProps<T>): React_2.ReactNode;
569
+ export declare const DefaultUiMenuStaticItemComponent: React_2.MemoExoticComponent<(<T extends IUiMenuItemData = object>({ item }: UiMenuStaticItemProps<T>) => React_2.ReactElement)>;
570
570
 
571
571
  /**
572
572
  * @internal
@@ -3028,7 +3028,7 @@ export declare interface IMenuAccessibilityConfig extends IAccessibilityConfigBa
3028
3028
  id?: string;
3029
3029
  role?: "menu" | "menuitem" | "separator" | "presentation";
3030
3030
  ariaDisabled?: "true" | "false";
3031
- ariaHaspopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
3031
+ ariaHasPopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
3032
3032
  ariaControls?: string;
3033
3033
  }
3034
3034
 
@@ -4360,43 +4360,82 @@ export declare interface IUiListboxStaticItem<T> {
4360
4360
  /**
4361
4361
  * @internal
4362
4362
  */
4363
- export declare interface IUiMenuContext<InteractiveItemData, StaticItemData = React_2.ReactNode> {
4364
- items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
4365
- focusedItem: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined;
4366
- itemRefs: React_2.MutableRefObject<{
4367
- [id: string]: HTMLElement;
4368
- }>;
4369
- onSelect: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined) => void;
4363
+ export declare interface IUiMenuContext<T extends IUiMenuItemData = object> extends IUiMenuPluggableComponents<T> {
4364
+ items: IUiMenuItem<T>[];
4365
+ focusedItem: IUiMenuInteractiveItem<T> | undefined;
4366
+ onSelect: (item: IUiMenuInteractiveItem<T> | undefined) => void;
4370
4367
  onClose?: () => void;
4371
4368
  setFocusedId: React_2.Dispatch<React_2.SetStateAction<string | undefined>>;
4372
- isItemFocusable: (item: IUiMenuItem<InteractiveItemData, StaticItemData>) => boolean;
4369
+ isItemFocusable: (item: IUiMenuItem<T>) => boolean;
4370
+ controlType: IUiMenuControlType;
4371
+ setControlType: React_2.Dispatch<React_2.SetStateAction<IUiMenuControlType>>;
4372
+ scrollToView: (element: HTMLElement | null) => void;
4373
+ makeItemId: (item: IUiMenuItem<T>) => string;
4374
+ itemClassName?: ((item: IUiMenuItem<T>) => string | undefined) | string;
4375
+ ItemComponent: React_2.ComponentType<UiMenuItemProps<T>>;
4376
+ menuComponentRef: React_2.RefObject<HTMLElement>;
4377
+ itemsContainerRef: React_2.RefObject<HTMLElement>;
4373
4378
  }
4374
4379
 
4375
4380
  /**
4376
4381
  * @internal
4377
4382
  */
4378
- export declare interface IUiMenuInteractiveItem<InteractiveItemData, StaticItemData = React_2.ReactNode> {
4383
+ export declare type IUiMenuControlType = "keyboard" | "mouse" | "unknown";
4384
+
4385
+ /**
4386
+ * @internal
4387
+ */
4388
+ export declare type IUiMenuGroupItem<T extends IUiMenuItemData = object> = {
4389
+ type: "group";
4390
+ id: string;
4391
+ stringTitle: string;
4392
+ data: T["group"];
4393
+ subItems: IUiMenuItem<T>[];
4394
+ };
4395
+
4396
+ /**
4397
+ * @internal
4398
+ */
4399
+ export declare type IUiMenuInteractiveItem<T extends IUiMenuItemData = object> = {
4379
4400
  type: "interactive";
4380
4401
  id: string;
4381
4402
  stringTitle: string;
4382
4403
  isDisabled?: boolean;
4383
- data: InteractiveItemData;
4384
- subMenu?: IUiMenuItem<InteractiveItemData, StaticItemData>[];
4385
- }
4404
+ data: T["interactive"];
4405
+ subItems?: IUiMenuItem<T>[];
4406
+ };
4407
+
4408
+ /**
4409
+ * @internal
4410
+ */
4411
+ export declare type IUiMenuItem<T extends IUiMenuItemData = object> = IUiMenuStaticItem<T> | IUiMenuInteractiveItem<T> | IUiMenuGroupItem<T>;
4412
+
4413
+ /**
4414
+ * @internal
4415
+ */
4416
+ export declare type IUiMenuItemData = {
4417
+ [type in IUiMenuItem<any>["type"]]?: unknown;
4418
+ };
4386
4419
 
4387
4420
  /**
4388
4421
  * @internal
4389
4422
  */
4390
- export declare type IUiMenuItem<InteractiveItemData, StaticItemData = React_2.ReactNode> = IUiMenuStaticItem<StaticItemData> | IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
4423
+ export declare interface IUiMenuPluggableComponents<T extends IUiMenuItemData = object> {
4424
+ InteractiveItemComponent: React_2.ComponentType<UiMenuInteractiveItemProps<T>>;
4425
+ InteractiveItemWrapperComponent: React_2.ComponentType<UiMenuInteractiveItemWrapperProps<T>>;
4426
+ GroupItemComponent: React_2.ComponentType<UiMenuGroupItemProps<T>>;
4427
+ StaticItemComponent: React_2.ComponentType<UiMenuStaticItemProps<T>>;
4428
+ MenuHeaderComponent: React_2.ComponentType;
4429
+ }
4391
4430
 
4392
4431
  /**
4393
4432
  * @internal
4394
4433
  */
4395
- export declare interface IUiMenuStaticItem<T> {
4434
+ export declare type IUiMenuStaticItem<T extends IUiMenuItemData = object> = {
4396
4435
  type: "static";
4397
4436
  id?: string;
4398
- data: T;
4399
- }
4437
+ data: T["static"];
4438
+ };
4400
4439
 
4401
4440
  /**
4402
4441
  * @internal
@@ -5532,22 +5571,20 @@ export declare interface UiListboxStaticItemProps<T> {
5532
5571
  *
5533
5572
  * @internal
5534
5573
  */
5535
- export declare function UiMenu<InteractiveItemData, StaticItemData>({ items, className, itemClassName, maxWidth, onSelect, onClose, onUnhandledKeyDown, InteractiveItemComponent, StaticItemComponent, MenuHeaderComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect, isDisabledFocusable, ariaAttributes, }: UiMenuProps<InteractiveItemData, StaticItemData>): React_2.ReactNode;
5574
+ export declare function UiMenu<T extends IUiMenuItemData = object>(props: UiMenuProps<T>): React_2.ReactNode;
5536
5575
 
5537
5576
  /**
5538
5577
  * @internal
5539
5578
  */
5540
- export declare interface UiMenuHeaderProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5541
- onBack?: () => void;
5542
- onClose?: () => void;
5543
- parentItem?: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
5579
+ export declare interface UiMenuGroupItemProps<T extends IUiMenuItemData = object> {
5580
+ item: IUiMenuGroupItem<T>;
5544
5581
  }
5545
5582
 
5546
5583
  /**
5547
5584
  * @internal
5548
5585
  */
5549
- export declare interface UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5550
- item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
5586
+ export declare interface UiMenuInteractiveItemProps<T extends IUiMenuItemData = object> {
5587
+ item: IUiMenuInteractiveItem<T>;
5551
5588
  isFocused: boolean;
5552
5589
  onSelect: () => void;
5553
5590
  }
@@ -5555,17 +5592,28 @@ export declare interface UiMenuInteractiveItemProps<InteractiveItemData, StaticI
5555
5592
  /**
5556
5593
  * @internal
5557
5594
  */
5558
- export declare interface UiMenuProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5559
- items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
5595
+ export declare interface UiMenuInteractiveItemWrapperProps<T extends IUiMenuItemData = object> {
5596
+ item: IUiMenuInteractiveItem<T>;
5597
+ }
5598
+
5599
+ /**
5600
+ * @internal
5601
+ */
5602
+ export declare interface UiMenuItemProps<T extends IUiMenuItemData = object> {
5603
+ item: IUiMenuItem<T>;
5604
+ }
5605
+
5606
+ /**
5607
+ * @internal
5608
+ */
5609
+ export declare interface UiMenuProps<T extends IUiMenuItemData = object> extends Partial<IUiMenuPluggableComponents<T>> {
5610
+ items: IUiMenuItem<T>[];
5560
5611
  className?: string;
5561
- itemClassName?: ((item: IUiMenuItem<InteractiveItemData, StaticItemData>) => string | undefined) | string;
5612
+ itemClassName?: ((item: IUiMenuItem<T>) => string | undefined) | string;
5562
5613
  maxWidth?: number;
5563
- onSelect?: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>) => void;
5614
+ onSelect?: (item: IUiMenuInteractiveItem<T>) => void;
5564
5615
  onClose?: () => void;
5565
- onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IUiMenuContext<InteractiveItemData, StaticItemData>) => void;
5566
- InteractiveItemComponent?: React_2.ComponentType<UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>>;
5567
- StaticItemComponent?: React_2.ComponentType<UiMenuStaticItemProps<StaticItemData>>;
5568
- MenuHeaderComponent?: React_2.ComponentType<UiMenuHeaderProps<InteractiveItemData, StaticItemData>>;
5616
+ onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IUiMenuContext<T>) => void;
5569
5617
  shouldKeyboardActionPreventDefault?: boolean;
5570
5618
  shouldKeyboardActionStopPropagation?: boolean;
5571
5619
  shouldCloseOnSelect?: boolean;
@@ -5576,7 +5624,7 @@ export declare interface UiMenuProps<InteractiveItemData, StaticItemData = React
5576
5624
  /**
5577
5625
  * @internal
5578
5626
  */
5579
- export declare interface UiMenuStaticItemProps<T> {
5627
+ export declare interface UiMenuStaticItemProps<T extends IUiMenuItemData = object> {
5580
5628
  item: IUiMenuStaticItem<T>;
5581
5629
  }
5582
5630
 
@@ -16,7 +16,7 @@ export interface IMenuAccessibilityConfig extends IAccessibilityConfigBase {
16
16
  id?: string;
17
17
  role?: "menu" | "menuitem" | "separator" | "presentation";
18
18
  ariaDisabled?: "true" | "false";
19
- ariaHaspopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
19
+ ariaHasPopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
20
20
  ariaControls?: string;
21
21
  }
22
22
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "10.27.0-alpha.23",
3
+ "version": "10.27.0-alpha.25",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -70,11 +70,11 @@
70
70
  "tslib": "^2.5.0",
71
71
  "uuid": "^8.3.2",
72
72
  "unified": "^11.0.5",
73
- "@gooddata/sdk-backend-spi": "10.27.0-alpha.23",
74
- "@gooddata/sdk-ui": "10.27.0-alpha.23",
75
- "@gooddata/sdk-model": "10.27.0-alpha.23",
76
- "@gooddata/util": "10.27.0-alpha.23",
77
- "@gooddata/sdk-ui-theme-provider": "10.27.0-alpha.23"
73
+ "@gooddata/sdk-backend-spi": "10.27.0-alpha.25",
74
+ "@gooddata/sdk-ui": "10.27.0-alpha.25",
75
+ "@gooddata/sdk-model": "10.27.0-alpha.25",
76
+ "@gooddata/sdk-ui-theme-provider": "10.27.0-alpha.25",
77
+ "@gooddata/util": "10.27.0-alpha.25"
78
78
  },
79
79
  "peerDependencies": {
80
80
  "react": "^16.10.0 || ^17.0.0 || ^18.0.0",
@@ -133,8 +133,8 @@
133
133
  "typescript": "5.3.3",
134
134
  "vitest": "3.0.8",
135
135
  "vitest-dom": "0.1.1",
136
- "@gooddata/sdk-backend-mockingbird": "10.27.0-alpha.23",
137
- "@gooddata/reference-workspace": "10.27.0-alpha.23"
136
+ "@gooddata/reference-workspace": "10.27.0-alpha.25",
137
+ "@gooddata/sdk-backend-mockingbird": "10.27.0-alpha.25"
138
138
  },
139
139
  "scripts": {
140
140
  "clean": "rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo",
@@ -1,6 +1,7 @@
1
1
  // (C) 2025 GoodData Corporation
2
2
 
3
3
  @use "../../../styles/scss/variables";
4
+ @use "../../../styles/scss/mixins";
4
5
 
5
6
  .gd-ui-kit-listbox {
6
7
  $root: &;
@@ -26,10 +27,7 @@
26
27
  outline: none;
27
28
 
28
29
  &:focus-visible #{$root}__item--isFocused {
29
- outline-offset: -2px;
30
- outline: auto 5px Highlight; /* For Firefox */
31
- // stylelint-disable-next-line declaration-block-no-duplicate-properties
32
- outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
30
+ @include mixins.focus-ring;
33
31
  }
34
32
  }
35
33
 
@@ -1,6 +1,7 @@
1
1
  // (C) 2025 GoodData Corporation
2
2
 
3
3
  @use "../../../styles/scss/variables";
4
+ @use "../../../styles/scss/mixins";
4
5
 
5
6
  .gd-ui-kit-menu {
6
7
  $root: &;
@@ -62,18 +63,29 @@
62
63
  }
63
64
  }
64
65
 
66
+ &__group {
67
+ list-style: none;
68
+ margin: 0;
69
+ padding: 0;
70
+ }
71
+
72
+ &__group-title-container {
73
+ padding: 4px 10px;
74
+ }
75
+
76
+ &__group-title {
77
+ text-transform: uppercase;
78
+ color: variables.$gd-color-text-dimmed;
79
+ font-size: 10px;
80
+ font-weight: normal;
81
+ margin: 0;
82
+ }
83
+
65
84
  &__items {
66
85
  list-style: none;
67
86
  margin: 0;
68
87
  padding: 0;
69
88
  outline: none;
70
-
71
- &:focus-visible #{$root}__item--isFocused {
72
- outline-offset: -2px;
73
- outline: auto 5px Highlight; /* For Firefox */
74
- // stylelint-disable-next-line declaration-block-no-duplicate-properties
75
- outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
76
- }
77
89
  }
78
90
 
79
91
  &__item {
@@ -96,10 +108,14 @@
96
108
  #{$root}--controlType-keyboard #{$root}__items:focus &--isFocused:not(&--isDisabled) {
97
109
  background-color: variables.$is-focused-background;
98
110
  color: variables.$is-focused-color;
111
+
112
+ @include mixins.focus-ring;
99
113
  }
100
114
  // Controlled by keyboard and has focus, disabled
101
115
  #{$root}--controlType-keyboard #{$root}__items:focus &--isFocused#{&}--isDisabled {
102
116
  background-color: variables.$is-focused-background;
117
+
118
+ @include mixins.focus-ring;
103
119
  }
104
120
 
105
121
  &--isDisabled {
@@ -794,6 +794,8 @@
794
794
  transition: var(--gd-transition-all);
795
795
  }
796
796
 
797
+ /* allow vendor prefixes and disable max length */
798
+ /* allow vendor prefixes and disable max length */
797
799
  .gd-ui-kit-listbox {
798
800
  max-height: 300px;
799
801
  overflow-y: auto;
@@ -911,17 +913,27 @@
911
913
  .gd-ui-kit-menu__menu-header-close-icon {
912
914
  flex-shrink: 0;
913
915
  }
916
+ .gd-ui-kit-menu__group {
917
+ list-style: none;
918
+ margin: 0;
919
+ padding: 0;
920
+ }
921
+ .gd-ui-kit-menu__group-title-container {
922
+ padding: 4px 10px;
923
+ }
924
+ .gd-ui-kit-menu__group-title {
925
+ text-transform: uppercase;
926
+ color: var(--gd-palette-complementary-5, #b0beca);
927
+ font-size: 10px;
928
+ font-weight: normal;
929
+ margin: 0;
930
+ }
914
931
  .gd-ui-kit-menu__items {
915
932
  list-style: none;
916
933
  margin: 0;
917
934
  padding: 0;
918
935
  outline: none;
919
936
  }
920
- .gd-ui-kit-menu__items:focus-visible .gd-ui-kit-menu__item--isFocused {
921
- outline-offset: -2px;
922
- outline: auto 5px Highlight; /* For Firefox */
923
- outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
924
- }
925
937
  .gd-ui-kit-menu__item {
926
938
  padding: 8px 10px;
927
939
  cursor: pointer;
@@ -939,9 +951,15 @@
939
951
  .gd-ui-kit-menu--controlType-keyboard .gd-ui-kit-menu__items:focus .gd-ui-kit-menu__item--isFocused:not(.gd-ui-kit-menu__item--isDisabled) {
940
952
  background-color: var(--gd-palette-complementary-2, #ebeff4);
941
953
  color: var(--gd-palette-complementary-9, #000);
954
+ outline-offset: -2px;
955
+ outline: auto 5px Highlight; /* For Firefox */
956
+ outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
942
957
  }
943
958
  .gd-ui-kit-menu--controlType-keyboard .gd-ui-kit-menu__items:focus .gd-ui-kit-menu__item--isFocused.gd-ui-kit-menu__item--isDisabled {
944
959
  background-color: var(--gd-palette-complementary-2, #ebeff4);
960
+ outline-offset: -2px;
961
+ outline: auto 5px Highlight; /* For Firefox */
962
+ outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
945
963
  }
946
964
  .gd-ui-kit-menu__item--isDisabled {
947
965
  color: var(--gd-palette-complementary-5, #b0beca);
@@ -1429,8 +1447,6 @@
1429
1447
  content: "\e642";
1430
1448
  }
1431
1449
 
1432
- /* allow vendor prefixes and disable max length */
1433
- /* allow vendor prefixes and disable max length */
1434
1450
  /* ==========================================================================
1435
1451
  Variables, mixins, silent classes etc.
1436
1452
  ========================================================================== */