@autoguru/overdrive 4.60.0 → 4.61.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/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +2 -0
- package/dist/components/Tooltip/Tooltip.d.ts +5 -5
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +20 -11
- package/dist/components/Tooltip/index.d.ts +1 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/useTooltip/useTooltip.d.ts +18 -7
- package/dist/components/Tooltip/useTooltip/useTooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/useTooltip/useTooltip.js +11 -9
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ declare const LOCALE_TEXT_DEFAULT: {
|
|
|
6
6
|
readonly loading: "loading";
|
|
7
7
|
};
|
|
8
8
|
type LocaleText = Partial<Record<keyof typeof LOCALE_TEXT_DEFAULT, string>>;
|
|
9
|
-
export interface ButtonProps extends Pick<ButtonPrimitive, 'children' | 'id' | 'onBlur' | 'onClick' | 'onFocus' | 'onKeyDown' | 'onMouseEnter' | 'onMouseLeave' | 'type' | 'className'>, Pick<AriaAttributes, 'aria-label' | 'aria-controls' | 'aria-expanded' | 'aria-haspopup'>, StyledButtonProps, TestIdProp {
|
|
9
|
+
export interface ButtonProps extends Pick<ButtonPrimitive, 'children' | 'id' | 'onBlur' | 'onClick' | 'onFocus' | 'onKeyDown' | 'onMouseEnter' | 'onMouseLeave' | 'type' | 'className'>, Pick<AriaAttributes, 'aria-label' | 'aria-controls' | 'aria-describedby' | 'aria-expanded' | 'aria-haspopup'>, StyledButtonProps, TestIdProp {
|
|
10
10
|
/**
|
|
11
11
|
* Disabling the button will prevent it from receiving keyboard focus or click events
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../lib/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EASb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAIhB,KAAK,YAAY,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,KAAK,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAOhD,QAAA,MAAM,mBAAmB;;CAEf,CAAC;AAEX,KAAK,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5E,MAAM,WAAW,WAChB,SAAQ,IAAI,CACV,eAAe,EACb,UAAU,GACV,IAAI,GACJ,QAAQ,GACR,SAAS,GACT,SAAS,GACT,WAAW,GACX,cAAc,GACd,cAAc,GACd,MAAM,GACN,WAAW,CACb,EACD,IAAI,CACH,cAAc,
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../lib/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EASb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAIhB,KAAK,YAAY,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,KAAK,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAOhD,QAAA,MAAM,mBAAmB;;CAEf,CAAC;AAEX,KAAK,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5E,MAAM,WAAW,WAChB,SAAQ,IAAI,CACV,eAAe,EACb,UAAU,GACV,IAAI,GACJ,QAAQ,GACR,SAAS,GACT,SAAS,GACT,WAAW,GACX,cAAc,GACd,cAAc,GACd,MAAM,GACN,WAAW,CACb,EACD,IAAI,CACH,cAAc,EACZ,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,eAAe,CACjB,EACD,iBAAiB,EACjB,UAAU;IACX;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB;AAcD,eAAO,MAAM,YAAY,GAAI,MAAM,WAAW,CAAC,MAAM,CAAC,uBACnB,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,MAAM,uFAwIlB,CAAC"}
|
|
@@ -78,6 +78,7 @@ export const Button = /*#__PURE__*/forwardRef(({
|
|
|
78
78
|
onMouseLeave,
|
|
79
79
|
'aria-label': ariaLabel,
|
|
80
80
|
'aria-controls': ariaControls,
|
|
81
|
+
'aria-describedby': ariaDescribedBy,
|
|
81
82
|
'aria-expanded': ariaExpanded,
|
|
82
83
|
'aria-haspopup': ariaHasPopup
|
|
83
84
|
}, ref) => {
|
|
@@ -111,6 +112,7 @@ export const Button = /*#__PURE__*/forwardRef(({
|
|
|
111
112
|
pointerEvents: functionallyDisabled ? 'none' : undefined,
|
|
112
113
|
'aria-label': isLoading ? language.loading : ariaLabel,
|
|
113
114
|
'aria-controls': ariaControls,
|
|
115
|
+
'aria-describedby': ariaDescribedBy,
|
|
114
116
|
'aria-expanded': ariaExpanded,
|
|
115
117
|
'aria-haspopup': ariaHasPopup,
|
|
116
118
|
'data-loading': isLoading ? '' : undefined,
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import React, { type ReactNode } from 'react';
|
|
2
2
|
import type { TestIdProp } from '../../types';
|
|
3
3
|
import { EAlignment } from '../Positioner/alignment';
|
|
4
|
-
import { type ToolTipSize } from './useTooltip/useTooltip';
|
|
5
|
-
|
|
4
|
+
import { type PositionedTooltipContentProps, type ToolTipSize } from './useTooltip/useTooltip';
|
|
5
|
+
interface TooltipBaseProps extends TestIdProp {
|
|
6
6
|
/** Size of the tooltip text */
|
|
7
7
|
size?: ToolTipSize;
|
|
8
8
|
/** Whether the tooltip is open. When provided, the tooltip becomes controlled */
|
|
9
9
|
isOpen?: boolean;
|
|
10
|
-
/** Text content displayed in the tooltip */
|
|
11
|
-
label: string;
|
|
12
10
|
/** Position of the tooltip relative to the trigger element */
|
|
13
11
|
alignment?: EAlignment;
|
|
14
12
|
/** The element(s) that trigger the tooltip on hover or focus */
|
|
@@ -18,6 +16,7 @@ export interface TooltipProps extends TestIdProp {
|
|
|
18
16
|
/** An HTML tag to wrap the tooltip trigger with if children do not contain a keyboard focusable element */
|
|
19
17
|
wrapper?: boolean | keyof React.JSX.IntrinsicElements;
|
|
20
18
|
}
|
|
19
|
+
export type TooltipProps = TooltipBaseProps & PositionedTooltipContentProps;
|
|
21
20
|
/**
|
|
22
21
|
* Renders a tooltip that appears when the user hovers over or focuses on the trigger element.
|
|
23
22
|
*
|
|
@@ -29,7 +28,8 @@ export interface TooltipProps extends TestIdProp {
|
|
|
29
28
|
* - In controlled mode, its visibility is managed externally via the `isOpen` prop.
|
|
30
29
|
*/
|
|
31
30
|
export declare const Tooltip: {
|
|
32
|
-
({ alignment, isOpen, label, children, size, closeAfter, testId, wrapper, }: TooltipProps): React.JSX.Element;
|
|
31
|
+
({ alignment, content, isOpen, label, children, size, closeAfter, testId, wrapper, }: TooltipProps): React.JSX.Element;
|
|
33
32
|
displayName: string;
|
|
34
33
|
};
|
|
34
|
+
export {};
|
|
35
35
|
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../lib/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAIb,KAAK,SAAS,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../lib/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAIb,KAAK,SAAS,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAEN,KAAK,6BAA6B,EAClC,KAAK,WAAW,EAChB,MAAM,yBAAyB,CAAC;AAEjC,UAAU,gBAAiB,SAAQ,UAAU;IAC5C,+BAA+B;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,gEAAgE;IAChE,QAAQ,EAAE,SAAS,CAAC;IACpB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,2GAA2G;IAC3G,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;CACtD;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,6BAA6B,CAAC;AAE5E;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO;0FAUjB,YAAY;;CAmEd,CAAC"}
|
|
@@ -20,6 +20,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
20
20
|
*/
|
|
21
21
|
export const Tooltip = ({
|
|
22
22
|
alignment = EAlignment.RIGHT,
|
|
23
|
+
content,
|
|
23
24
|
isOpen,
|
|
24
25
|
label,
|
|
25
26
|
children,
|
|
@@ -36,11 +37,21 @@ export const Tooltip = ({
|
|
|
36
37
|
isOpen,
|
|
37
38
|
closeAfter
|
|
38
39
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (
|
|
42
|
-
children
|
|
43
|
-
|
|
40
|
+
!(label === undefined || content === undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Tooltip accepts either `label` or `content`, not both') : invariant(false) : void 0;
|
|
41
|
+
let positionedTooltipContent;
|
|
42
|
+
if (content === undefined) {
|
|
43
|
+
// Return children unchanged when the text label is empty.
|
|
44
|
+
if (!label) return /*#__PURE__*/_jsx(_Fragment, {
|
|
45
|
+
children: children
|
|
46
|
+
});
|
|
47
|
+
positionedTooltipContent = {
|
|
48
|
+
label
|
|
49
|
+
};
|
|
50
|
+
} else {
|
|
51
|
+
positionedTooltipContent = {
|
|
52
|
+
content
|
|
53
|
+
};
|
|
54
|
+
}
|
|
44
55
|
|
|
45
56
|
// return wrapped output
|
|
46
57
|
if (wrapper) {
|
|
@@ -54,24 +65,22 @@ export const Tooltip = ({
|
|
|
54
65
|
testid: testId
|
|
55
66
|
})), {}, {
|
|
56
67
|
children: children
|
|
57
|
-
})), /*#__PURE__*/_jsx(PositionedTooltip, {
|
|
68
|
+
})), /*#__PURE__*/_jsx(PositionedTooltip, _objectSpread(_objectSpread({}, positionedTooltipContent), {}, {
|
|
58
69
|
alignment: alignment,
|
|
59
70
|
className: styles.root,
|
|
60
|
-
label: label,
|
|
61
71
|
size: size
|
|
62
|
-
})]
|
|
72
|
+
}))]
|
|
63
73
|
});
|
|
64
74
|
}
|
|
65
75
|
!(Children.count(children) === 1 && /*#__PURE__*/isValidElement(Children.only(children))) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Tooltips without a wrapper should have a single React element as a child') : invariant(false) : void 0;
|
|
66
76
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
67
77
|
children: [/*#__PURE__*/cloneElement(Children.only(children), _objectSpread(_objectSpread({}, triggerProps), {}, {
|
|
68
78
|
ref: triggerRef
|
|
69
|
-
})), /*#__PURE__*/_jsx(PositionedTooltip, {
|
|
79
|
+
})), /*#__PURE__*/_jsx(PositionedTooltip, _objectSpread(_objectSpread({}, positionedTooltipContent), {}, {
|
|
70
80
|
alignment: alignment,
|
|
71
81
|
className: styles.root,
|
|
72
|
-
label: label,
|
|
73
82
|
size: size
|
|
74
|
-
})]
|
|
83
|
+
}))]
|
|
75
84
|
});
|
|
76
85
|
};
|
|
77
86
|
Tooltip.displayName = 'Tooltip';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { Tooltip, type TooltipProps } from './Tooltip';
|
|
2
|
-
export { useTooltip, type UseTooltipProps, type ToolTipSize, } from './useTooltip/useTooltip';
|
|
2
|
+
export { useTooltip, type PositionedTooltipProps, type UseTooltipProps, type ToolTipSize, } from './useTooltip/useTooltip';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/components/Tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACN,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,WAAW,GAChB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/components/Tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACN,UAAU,EACV,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,WAAW,GAChB,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
2
|
import { EAlignment } from '../../Positioner/alignment';
|
|
3
3
|
export type ToolTipSize = 'medium' | 'large';
|
|
4
4
|
export interface UseTooltipProps {
|
|
@@ -15,6 +15,21 @@ export interface UseTooltipProps {
|
|
|
15
15
|
*/
|
|
16
16
|
onOpenChange?: (isOpen: boolean) => void;
|
|
17
17
|
}
|
|
18
|
+
interface PositionedTooltipBaseProps {
|
|
19
|
+
alignment?: EAlignment;
|
|
20
|
+
className?: string;
|
|
21
|
+
size?: ToolTipSize;
|
|
22
|
+
}
|
|
23
|
+
export type PositionedTooltipContentProps = {
|
|
24
|
+
/** Text rendered with the standard tooltip surface */
|
|
25
|
+
label: string;
|
|
26
|
+
content?: never;
|
|
27
|
+
} | {
|
|
28
|
+
/** Custom tooltip surface and content */
|
|
29
|
+
content: ReactNode;
|
|
30
|
+
label?: never;
|
|
31
|
+
};
|
|
32
|
+
export type PositionedTooltipProps = PositionedTooltipBaseProps & PositionedTooltipContentProps;
|
|
18
33
|
/**
|
|
19
34
|
* Hook for managing tooltip state and interactions
|
|
20
35
|
*/
|
|
@@ -28,11 +43,7 @@ export declare const useTooltip: ({ isOpen: controlledIsOpen, closeAfter, onOpen
|
|
|
28
43
|
onBlur: () => void;
|
|
29
44
|
'aria-describedby': string | undefined;
|
|
30
45
|
};
|
|
31
|
-
PositionedTooltip: ({ alignment, className, label, size, }:
|
|
32
|
-
alignment?: EAlignment;
|
|
33
|
-
className?: string;
|
|
34
|
-
label: string;
|
|
35
|
-
size?: ToolTipSize;
|
|
36
|
-
}) => React.JSX.Element;
|
|
46
|
+
PositionedTooltip: ({ alignment, className, content, label, size, }: PositionedTooltipProps) => React.JSX.Element;
|
|
37
47
|
};
|
|
48
|
+
export {};
|
|
38
49
|
//# sourceMappingURL=useTooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../../../lib/components/Tooltip/useTooltip/useTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../../../lib/components/Tooltip/useTooltip/useTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACb,KAAK,SAAS,EAMd,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED,UAAU,0BAA0B;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,MAAM,6BAA6B,GACtC;IACA,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,KAAK,CAAC;CACf,GACD;IACA,yCAAyC;IACzC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACb,CAAC;AAEL,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAC9D,6BAA6B,CAAC;AAO/B;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,yDAIxB,eAAe;;;;;;;;;;yEAoFb,sBAAsB;CA+C1B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useRef, useState
|
|
1
|
+
import React, { useCallback, useEffect, useId, useRef, useState } from 'react';
|
|
2
2
|
import { Box } from "../../Box/Box.js";
|
|
3
3
|
import { Positioner } from "../../Positioner/Positioner.js";
|
|
4
4
|
import { EAlignment } from "../../Positioner/alignment.js";
|
|
@@ -82,10 +82,12 @@ export const useTooltip = ({
|
|
|
82
82
|
const PositionedTooltip = useCallback(({
|
|
83
83
|
alignment = EAlignment.RIGHT,
|
|
84
84
|
className,
|
|
85
|
+
content,
|
|
85
86
|
label,
|
|
86
87
|
size = 'medium'
|
|
87
88
|
}) => {
|
|
88
89
|
const textSize = sizeMap[size];
|
|
90
|
+
const hasCustomContent = content !== undefined;
|
|
89
91
|
return /*#__PURE__*/_jsx(Positioner, {
|
|
90
92
|
triggerRef: triggerRef,
|
|
91
93
|
alignment: alignment,
|
|
@@ -94,17 +96,17 @@ export const useTooltip = ({
|
|
|
94
96
|
className: className,
|
|
95
97
|
id: tooltipId,
|
|
96
98
|
ref: tooltipRef,
|
|
97
|
-
width:
|
|
99
|
+
width: hasCustomContent ? undefined : 'full',
|
|
98
100
|
pointerEvents: "none",
|
|
99
101
|
userSelect: "none",
|
|
100
|
-
overflow:
|
|
101
|
-
borderRadius:
|
|
102
|
-
boxShadow:
|
|
103
|
-
backgroundColor:
|
|
104
|
-
paddingY:
|
|
105
|
-
paddingX:
|
|
102
|
+
overflow: hasCustomContent ? undefined : 'hidden',
|
|
103
|
+
borderRadius: hasCustomContent ? undefined : '1',
|
|
104
|
+
boxShadow: hasCustomContent ? undefined : '4',
|
|
105
|
+
backgroundColor: hasCustomContent ? undefined : 'gray900',
|
|
106
|
+
paddingY: hasCustomContent ? undefined : '2',
|
|
107
|
+
paddingX: hasCustomContent ? undefined : '3',
|
|
106
108
|
role: "tooltip",
|
|
107
|
-
children: /*#__PURE__*/_jsx(Text, {
|
|
109
|
+
children: hasCustomContent ? content : /*#__PURE__*/_jsx(Text, {
|
|
108
110
|
size: textSize,
|
|
109
111
|
color: "white",
|
|
110
112
|
children: label
|