@codecademy/gamut 67.6.4 → 67.6.5-alpha.9b8a7f.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/ConnectedForm/ConnectedFormGroup.d.ts +8 -2
- package/dist/ConnectedForm/ConnectedFormGroup.js +1 -1
- package/dist/ConnectedForm/ConnectedInputs/ConnectedCheckbox.js +2 -0
- package/dist/Form/__tests__/testUtils.d.ts +22 -0
- package/dist/Form/elements/FormGroupLabel.d.ts +2 -2
- package/dist/Form/elements/FormGroupLabel.js +10 -3
- package/dist/Form/inputs/Checkbox.d.ts +7 -0
- package/dist/Form/inputs/Checkbox.js +27 -11
- package/dist/Form/inputs/Radio.d.ts +9 -5
- package/dist/Form/inputs/Radio.js +13 -10
- package/dist/Form/styles/Radio-styles.d.ts +0 -3
- package/dist/Form/styles/Radio-styles.js +0 -6
- package/dist/Form/styles/shared-system-props.d.ts +7 -0
- package/dist/Form/styles/shared-system-props.js +11 -0
- package/dist/GridForm/GridFormInputGroup/GridFormRadioGroupInput/index.js +2 -0
- package/dist/GridForm/GridFormInputGroup/__fixtures__/renderers.d.ts +4 -0
- package/dist/GridForm/types.d.ts +7 -2
- package/dist/Tip/InfoTip/InfoTipButton.js +5 -2
- package/dist/Tip/InfoTip/index.d.ts +27 -2
- package/dist/Tip/InfoTip/index.js +50 -67
- package/dist/Tip/InfoTip/type-utils.d.ts +35 -0
- package/dist/Tip/InfoTip/type-utils.js +72 -0
- package/dist/Tip/__tests__/helpers.d.ts +5 -26
- package/dist/Tip/shared/FloatingTip.js +3 -3
- package/dist/Tip/shared/InlineTip.js +4 -1
- package/dist/Tip/shared/types.d.ts +1 -1
- package/dist/Tip/shared/utils.d.ts +19 -0
- package/dist/Tip/shared/utils.js +104 -0
- package/package.json +2 -2
- package/dist/Tip/InfoTip/elements.d.ts +0 -12
- package/dist/Tip/InfoTip/elements.js +0 -9
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { FormGroupProps
|
|
2
|
+
import { FormGroupProps } from '..';
|
|
3
|
+
import { InfoTipSubComponentProps } from '../Tip/InfoTip/type-utils';
|
|
3
4
|
import { ConnectedField, FieldProps, SubmitContextProps } from './types';
|
|
4
5
|
export interface ConnectedFormGroupBaseProps extends Omit<FormGroupProps, 'label' | 'disabled' | 'description' | 'htmlFor'> {
|
|
5
6
|
customError?: string;
|
|
@@ -8,7 +9,12 @@ export interface ConnectedFormGroupBaseProps extends Omit<FormGroupProps, 'label
|
|
|
8
9
|
name: string;
|
|
9
10
|
label: React.ReactNode;
|
|
10
11
|
required?: boolean;
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* InfoTip to display next to the field label. The InfoTip button is
|
|
14
|
+
* automatically labelled by the field label. To override this behavior,
|
|
15
|
+
* provide `ariaLabel` or `ariaLabelledby`.
|
|
16
|
+
*/
|
|
17
|
+
infotip?: InfoTipSubComponentProps;
|
|
12
18
|
}
|
|
13
19
|
export interface ConnectedFormGroupProps<T extends ConnectedField> extends SubmitContextProps, ConnectedFormGroupBaseProps {
|
|
14
20
|
/**
|
|
@@ -13,7 +13,7 @@ const ErrorAnchor = /*#__PURE__*/_styled(Anchor, {
|
|
|
13
13
|
label: "ErrorAnchor"
|
|
14
14
|
})(css({
|
|
15
15
|
color: 'feedback-error'
|
|
16
|
-
}), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
16
|
+
}), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYW9CIiwiZmlsZSI6Ii4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBGb3JtRXJyb3IsIEZvcm1Hcm91cCwgRm9ybUdyb3VwTGFiZWwsIEZvcm1Hcm91cFByb3BzIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgQW5jaG9yIH0gZnJvbSAnLi4vQW5jaG9yJztcbmltcG9ydCB7IEhpZGRlblRleHQgfSBmcm9tICcuLi9IaWRkZW5UZXh0JztcbmltcG9ydCB7IE1hcmtkb3duIH0gZnJvbSAnLi4vTWFya2Rvd24nO1xuaW1wb3J0IHsgSW5mb1RpcFN1YkNvbXBvbmVudFByb3BzIH0gZnJvbSAnLi4vVGlwL0luZm9UaXAvdHlwZS11dGlscyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRGaWVsZCwgRmllbGRQcm9wcywgU3VibWl0Q29udGV4dFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIHVzZUZpZWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEVycm9yQW5jaG9yID0gc3R5bGVkKEFuY2hvcikoXG4gIGNzcyh7XG4gICAgY29sb3I6ICdmZWVkYmFjay1lcnJvcicsXG4gIH0pXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RlZEZvcm1Hcm91cEJhc2VQcm9wc1xuICBleHRlbmRzIE9taXQ8XG4gICAgRm9ybUdyb3VwUHJvcHMsXG4gICAgJ2xhYmVsJyB8ICdkaXNhYmxlZCcgfCAnZGVzY3JpcHRpb24nIHwgJ2h0bWxGb3InXG4gID4ge1xuICBjdXN0b21FcnJvcj86IHN0cmluZztcbiAgZXJyb3JUeXBlPzogJ2luaXRpYWwnIHwgJ2Fic29sdXRlJztcbiAgaGlkZUxhYmVsPzogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmZvVGlwIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgZmllbGQgbGFiZWwuIFRoZSBJbmZvVGlwIGJ1dHRvbiBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGxhYmVsbGVkIGJ5IHRoZSBmaWVsZCBsYWJlbC4gVG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvcixcbiAgICogcHJvdmlkZSBgYXJpYUxhYmVsYCBvciBgYXJpYUxhYmVsbGVkYnlgLlxuICAgKi9cbiAgaW5mb3RpcD86IEluZm9UaXBTdWJDb21wb25lbnRQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0ZWRGb3JtR3JvdXBQcm9wczxUIGV4dGVuZHMgQ29ubmVjdGVkRmllbGQ+XG4gIGV4dGVuZHMgU3VibWl0Q29udGV4dFByb3BzLFxuICAgIENvbm5lY3RlZEZvcm1Hcm91cEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3QgY29uc2lzdGluZyBvZiBhIGBjb21wb25lbnRgIGtleSB0byBzcGVjaWZ5IHdoYXQgQ29ubmVjdGVkRm9ybUlucHV0IHRvIHJlbmRlciAtIHRoZSByZW1haW5pbmcga2V5L3ZhbHVlIHBhaXJzIGFyZSB0aGF0IGNvbXBvbmVudHMgZGVzaXJlZCBwcm9wcy5cbiAgICovXG4gIGZpZWxkOiBPbWl0PFJlYWN0LkNvbXBvbmVudFByb3BzPFQ+LCAnbmFtZScgfCAnZGlzYWJsZWQnPiAmIEZpZWxkUHJvcHM8VD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0ZWRGb3JtR3JvdXA8VCBleHRlbmRzIENvbm5lY3RlZEZpZWxkPih7XG4gIGN1c3RvbUVycm9yLFxuICBjaGlsZHJlbixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZXJyb3JUeXBlID0gJ2Fic29sdXRlJyxcbiAgZmllbGQsXG4gIGhpZGVMYWJlbCxcbiAgaWQsXG4gIGxhYmVsLFxuICBuYW1lLFxuICBsYWJlbFNpemUsXG4gIHNwYWNpbmcgPSAnZml0JyxcbiAgaXNTb2xvRmllbGQsXG4gIGluZm90aXAsXG59OiBDb25uZWN0ZWRGb3JtR3JvdXBQcm9wczxUPikge1xuICBjb25zdCB7IGVycm9yLCBpc0ZpcnN0RXJyb3IsIGlzRGlzYWJsZWQsIHNldEVycm9yLCB2YWxpZGF0aW9uIH0gPSB1c2VGaWVsZCh7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgfSk7XG4gIGNvbnN0IHsgY29tcG9uZW50OiBDb21wb25lbnQsIC4uLnJlc3QgfSA9IGZpZWxkO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGN1c3RvbUVycm9yKSB7XG4gICAgICBzZXRFcnJvcihuYW1lLCB7XG4gICAgICAgIHR5cGU6ICdtYW51YWwnLFxuICAgICAgICBtZXNzYWdlOiBjdXN0b21FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2N1c3RvbUVycm9yLCBuYW1lLCBzZXRFcnJvcl0pO1xuXG4gIGNvbnN0IHJlbmRlcmVkTGFiZWwgPSAoXG4gICAgPEZvcm1Hcm91cExhYmVsXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGh0bWxGb3I9e2lkIHx8IG5hbWV9XG4gICAgICBpbmZvdGlwPXtpbmZvdGlwfVxuICAgICAgaXNTb2xvRmllbGQ9e2lzU29sb0ZpZWxkfVxuICAgICAgcmVxdWlyZWQ9eyEhdmFsaWRhdGlvbj8ucmVxdWlyZWR9XG4gICAgICBzaXplPXtsYWJlbFNpemV9XG4gICAgPlxuICAgICAge2xhYmVsfVxuICAgIDwvRm9ybUdyb3VwTGFiZWw+XG4gICk7XG5cbiAgY29uc3QgdGV4dEVycm9yID0gY3VzdG9tRXJyb3IgfHwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgY29uc3Qgc2hvd0Vycm9yID0gISEodGV4dEVycm9yICYmICFoaWRlTGFiZWwpO1xuICBjb25zdCBlcnJvcklkID0gc2hvd0Vycm9yID8gYCR7aWQgfHwgbmFtZX1fZXJyb3JgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Hcm91cCBzcGFjaW5nPXtoaWRlTGFiZWwgPyAndGlnaHQnIDogc3BhY2luZ30+XG4gICAgICB7aGlkZUxhYmVsID8gPEhpZGRlblRleHQ+e3JlbmRlcmVkTGFiZWx9PC9IaWRkZW5UZXh0PiA6IHJlbmRlcmVkTGFiZWx9XG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi4ocmVzdCBhcyBhbnkpfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXtlcnJvcklkfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3Nob3dFcnJvcn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtzaG93RXJyb3IgJiYgKFxuICAgICAgICA8Rm9ybUVycm9yXG4gICAgICAgICAgYXJpYS1saXZlPXtpc0ZpcnN0RXJyb3IgPyAnYXNzZXJ0aXZlJyA6ICdvZmYnfVxuICAgICAgICAgIGlkPXtlcnJvcklkfVxuICAgICAgICAgIHJvbGU9e2lzRmlyc3RFcnJvciA/ICdhbGVydCcgOiAnc3RhdHVzJ31cbiAgICAgICAgICB2YXJpYW50PXtlcnJvclR5cGV9XG4gICAgICAgID5cbiAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgIGlubGluZVxuICAgICAgICAgICAgb3ZlcnJpZGVzPXt7XG4gICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogWydocmVmJywgJ3RhcmdldCddLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogRXJyb3JBbmNob3IsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc05vZGU6IChcbiAgICAgICAgICAgICAgICAgIG5vZGU6IHVua25vd24sXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBvbkNsaWNrPzogKCkgPT4gdm9pZCB9XG4gICAgICAgICAgICAgICAgKSA9PiA8RXJyb3JBbmNob3Igey4uLnByb3BzfSAvPixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBza2lwRGVmYXVsdE92ZXJyaWRlcz17eyBhOiB0cnVlIH19XG4gICAgICAgICAgICBzcGFjaW5nPVwibm9uZVwiXG4gICAgICAgICAgICB0ZXh0PXt0ZXh0RXJyb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtRXJyb3I+XG4gICAgICApfVxuICAgIDwvRm9ybUdyb3VwPlxuICApO1xufVxuIl19 */");
|
|
17
17
|
export function ConnectedFormGroup({
|
|
18
18
|
customError,
|
|
19
19
|
children,
|
|
@@ -7,6 +7,7 @@ export const ConnectedCheckbox = ({
|
|
|
7
7
|
className,
|
|
8
8
|
disabled,
|
|
9
9
|
id,
|
|
10
|
+
infotip,
|
|
10
11
|
label,
|
|
11
12
|
'aria-label': ariaLabel,
|
|
12
13
|
multiline,
|
|
@@ -42,6 +43,7 @@ export const ConnectedCheckbox = ({
|
|
|
42
43
|
disabled: isDisabled,
|
|
43
44
|
htmlFor: name,
|
|
44
45
|
id: id,
|
|
46
|
+
infotip: infotip,
|
|
45
47
|
label: label,
|
|
46
48
|
multiline: multiline,
|
|
47
49
|
name: name,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RenderResult } from '@testing-library/react';
|
|
2
|
+
/**
|
|
3
|
+
* Creates and appends an external label element to the test container.
|
|
4
|
+
* This is useful for testing ariaLabelledby functionality where an InfoTip
|
|
5
|
+
* references an external label element.
|
|
6
|
+
*
|
|
7
|
+
* @param view - The render result from testing-library
|
|
8
|
+
* @param id - The ID of the external label element (used in ariaLabelledby)
|
|
9
|
+
* @param text - The text content of the external label
|
|
10
|
+
* @returns The created span element
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const { view } = renderView({
|
|
15
|
+
* infotip: { info, ariaLabelledby: 'external-label-id' },
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* createExternalLabel(view, 'external-label-id', 'External Label');
|
|
19
|
+
* view.getByRole('button', { name: 'External Label' });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare const createExternalLabel: (view: RenderResult, id: string, text: string) => HTMLSpanElement;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StyleProps } from '@codecademy/variance';
|
|
2
2
|
import { HTMLAttributes } from 'react';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { InfoTipSubComponentProps } from '../../Tip/InfoTip/type-utils';
|
|
5
5
|
import { BaseInputProps } from '../types';
|
|
6
6
|
declare const labelSizeVariants: (props: import("@codecademy/variance/dist/types/config").VariantProps<"size", false | "small" | "large"> & {
|
|
7
7
|
theme?: import("@emotion/react").Theme | undefined;
|
|
@@ -15,7 +15,7 @@ export type FormGroupLabelProps = HTMLAttributes<HTMLDivElement> & HTMLAttribute
|
|
|
15
15
|
/**
|
|
16
16
|
* [The for/id string of a label or labelable form-related element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/htmlFor). The outer FormGroup or FormLabel should have an identical string as the inner FormElement for accessibility purposes.
|
|
17
17
|
*/
|
|
18
|
-
infotip?:
|
|
18
|
+
infotip?: InfoTipSubComponentProps;
|
|
19
19
|
size?: 'small' | 'large';
|
|
20
20
|
/**
|
|
21
21
|
* Solo fields should always be required and have no optional/required text
|
|
@@ -3,6 +3,7 @@ import { states, variant } from '@codecademy/gamut-styles';
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { FlexBox } from '../..';
|
|
5
5
|
import { InfoTip } from '../../Tip/InfoTip';
|
|
6
|
+
import { useInfotipProps } from '../../Tip/InfoTip/type-utils';
|
|
6
7
|
import { Text } from '../../Typography/Text';
|
|
7
8
|
import { formBaseStyles, formFieldTextDisabledStyles } from '../styles';
|
|
8
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -30,7 +31,7 @@ const labelStates = states({
|
|
|
30
31
|
const Label = /*#__PURE__*/_styled("label", {
|
|
31
32
|
target: "e1t0n89n0",
|
|
32
33
|
label: "Label"
|
|
33
|
-
})(labelSizeVariants, labelStates, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
})(labelSizeVariants, labelStates, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Gb3JtL2VsZW1lbnRzL0Zvcm1Hcm91cExhYmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1RGMiLCJmaWxlIjoiLi4vLi4vLi4vc3JjL0Zvcm0vZWxlbWVudHMvRm9ybUdyb3VwTGFiZWwudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhdGVzLCB2YXJpYW50IH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtc3R5bGVzJztcbmltcG9ydCB7IFN0eWxlUHJvcHMgfSBmcm9tICdAY29kZWNhZGVteS92YXJpYW5jZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBIVE1MQXR0cmlidXRlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgRmxleEJveCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IEluZm9UaXAgfSBmcm9tICcuLi8uLi9UaXAvSW5mb1RpcCc7XG5pbXBvcnQge1xuICBJbmZvVGlwU3ViQ29tcG9uZW50UHJvcHMsXG4gIHVzZUluZm90aXBQcm9wcyxcbn0gZnJvbSAnLi4vLi4vVGlwL0luZm9UaXAvdHlwZS11dGlscyc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnLi4vLi4vVHlwb2dyYXBoeS9UZXh0JztcbmltcG9ydCB7IGZvcm1CYXNlU3R5bGVzLCBmb3JtRmllbGRUZXh0RGlzYWJsZWRTdHlsZXMgfSBmcm9tICcuLi9zdHlsZXMnO1xuaW1wb3J0IHsgQmFzZUlucHV0UHJvcHMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGxhYmVsU2l6ZVZhcmlhbnRzID0gdmFyaWFudCh7XG4gIGRlZmF1bHRWYXJpYW50OiAnc21hbGwnLFxuICBwcm9wOiAnc2l6ZScsXG4gIGJhc2U6IHsgZGlzcGxheTogJ2Jsb2NrJywgLi4uZm9ybUJhc2VTdHlsZXMgfSxcbiAgdmFyaWFudHM6IHtcbiAgICBzbWFsbDoge1xuICAgICAgbGluZUhlaWdodDogJ2Jhc2UnLFxuICAgIH0sXG4gICAgbGFyZ2U6IHtcbiAgICAgIGZvbnRTaXplOiAyMixcbiAgICAgIGxpbmVIZWlnaHQ6ICdiYXNlJyxcbiAgICAgIGZvbnRXZWlnaHQ6ICd0aXRsZScsXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jb25zdCBsYWJlbFN0YXRlcyA9IHN0YXRlcyh7XG4gIGRpc2FibGVkOiBmb3JtRmllbGRUZXh0RGlzYWJsZWRTdHlsZXMsXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBMYWJlbFZhcmlhbnRzXG4gIGV4dGVuZHMgU3R5bGVQcm9wczx0eXBlb2YgbGFiZWxTaXplVmFyaWFudHM+LFxuICAgIFN0eWxlUHJvcHM8dHlwZW9mIGxhYmVsU3RhdGVzPiB7fVxuXG5leHBvcnQgdHlwZSBGb3JtR3JvdXBMYWJlbFByb3BzID0gSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+ICZcbiAgSFRNTEF0dHJpYnV0ZXM8SFRNTExhYmVsRWxlbWVudD4gJlxuICBMYWJlbFZhcmlhbnRzICZcbiAgUGljazxCYXNlSW5wdXRQcm9wcywgJ2h0bWxGb3InIHwgJ3JlcXVpcmVkJz4gJiB7XG4gICAgLyoqXG4gICAgICogW1RoZSBmb3IvaWQgc3RyaW5nIG9mIGEgbGFiZWwgb3IgbGFiZWxhYmxlIGZvcm0tcmVsYXRlZCBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTExhYmVsRWxlbWVudC9odG1sRm9yKS4gVGhlIG91dGVyIEZvcm1Hcm91cCBvciBGb3JtTGFiZWwgc2hvdWxkIGhhdmUgYW4gaWRlbnRpY2FsIHN0cmluZyBhcyB0aGUgaW5uZXIgRm9ybUVsZW1lbnQgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMuXG4gICAgICovXG4gICAgaW5mb3RpcD86IEluZm9UaXBTdWJDb21wb25lbnRQcm9wcztcbiAgICBzaXplPzogJ3NtYWxsJyB8ICdsYXJnZSc7XG4gICAgLyoqXG4gICAgICogU29sbyBmaWVsZHMgc2hvdWxkIGFsd2F5cyBiZSByZXF1aXJlZCBhbmQgaGF2ZSBubyBvcHRpb25hbC9yZXF1aXJlZCB0ZXh0XG4gICAgICovXG4gICAgaXNTb2xvRmllbGQ/OiBib29sZWFuO1xuICB9O1xuXG5jb25zdCBMYWJlbCA9IHN0eWxlZC5sYWJlbDxGb3JtR3JvdXBMYWJlbFByb3BzPihsYWJlbFNpemVWYXJpYW50cywgbGFiZWxTdGF0ZXMpO1xuXG5leHBvcnQgY29uc3QgRm9ybUdyb3VwTGFiZWw6IFJlYWN0LkZDPEZvcm1Hcm91cExhYmVsUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGh0bWxGb3IsXG4gIGluZm90aXAsXG4gIGlzU29sb0ZpZWxkLFxuICByZXF1aXJlZCxcbiAgc2l6ZSxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCB7IGluZm90aXBQcm9wcywgbGFiZWxJZCwgc2hvdWxkTGFiZWxJbmZvVGlwIH0gPVxuICAgIHVzZUluZm90aXBQcm9wcyhpbmZvdGlwKTtcblxuICByZXR1cm4gKFxuICAgIDxGbGV4Qm94IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIG1iPXs0fT5cbiAgICAgIDxMYWJlbFxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgYXM9e2h0bWxGb3IgPyAnbGFiZWwnIDogJ2Rpdid9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGh0bWxGb3I9e2h0bWxGb3J9XG4gICAgICAgIGlkPXtpbmZvdGlwICYmIHNob3VsZExhYmVsSW5mb1RpcCA/IGxhYmVsSWQgOiB1bmRlZmluZWR9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgeyFpc1NvbG9GaWVsZCAmJlxuICAgICAgICAgIChyZXF1aXJlZCA/IChcbiAgICAgICAgICAgIDxUZXh0IGFyaWEtaGlkZGVuIGFzPVwic3BhblwiPlxuICAgICAgICAgICAgICAqXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICdcXHUwMEEwKG9wdGlvbmFsKSdcbiAgICAgICAgICApKX1cbiAgICAgIDwvTGFiZWw+XG4gICAgICB7aW5mb3RpcFByb3BzICYmIDxJbmZvVGlwIHsuLi5pbmZvdGlwUHJvcHN9IC8+fVxuICAgIDwvRmxleEJveD5cbiAgKTtcbn07XG4iXX0= */");
|
|
34
35
|
export const FormGroupLabel = ({
|
|
35
36
|
children,
|
|
36
37
|
className,
|
|
@@ -42,6 +43,11 @@ export const FormGroupLabel = ({
|
|
|
42
43
|
size,
|
|
43
44
|
...rest
|
|
44
45
|
}) => {
|
|
46
|
+
const {
|
|
47
|
+
infotipProps,
|
|
48
|
+
labelId,
|
|
49
|
+
shouldLabelInfoTip
|
|
50
|
+
} = useInfotipProps(infotip);
|
|
45
51
|
return /*#__PURE__*/_jsxs(FlexBox, {
|
|
46
52
|
justifyContent: "space-between",
|
|
47
53
|
mb: 4,
|
|
@@ -51,14 +57,15 @@ export const FormGroupLabel = ({
|
|
|
51
57
|
className: className,
|
|
52
58
|
disabled: disabled,
|
|
53
59
|
htmlFor: htmlFor,
|
|
60
|
+
id: infotip && shouldLabelInfoTip ? labelId : undefined,
|
|
54
61
|
size: size,
|
|
55
62
|
children: [children, !isSoloField && (required ? /*#__PURE__*/_jsx(Text, {
|
|
56
63
|
"aria-hidden": true,
|
|
57
64
|
as: "span",
|
|
58
65
|
children: "*"
|
|
59
66
|
}) : '\u00A0(optional)')]
|
|
60
|
-
}),
|
|
61
|
-
...
|
|
67
|
+
}), infotipProps && /*#__PURE__*/_jsx(InfoTip, {
|
|
68
|
+
...infotipProps
|
|
62
69
|
})]
|
|
63
70
|
});
|
|
64
71
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StyleProps } from '@codecademy/variance';
|
|
2
2
|
import { InputHTMLAttributes } from 'react';
|
|
3
|
+
import { InfoTipSubComponentProps } from '../../Tip/InfoTip/type-utils';
|
|
3
4
|
import { checkboxPadding, checkboxTextStates } from '../styles';
|
|
4
5
|
import { BaseInputProps } from '../types';
|
|
5
6
|
import { CheckboxCheckedUnion, CheckboxLabelUnion } from './types';
|
|
@@ -12,6 +13,12 @@ export type CheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'checked
|
|
|
12
13
|
* [The for/id string of a label or labelable form-related element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/htmlFor). The outer FormGroup or FormLabel should have an identical string as the inner FormElement for accessibility purposes.
|
|
13
14
|
*/
|
|
14
15
|
htmlFor: string;
|
|
16
|
+
/**
|
|
17
|
+
* Infotip props to render to the right of your checkbox label.
|
|
18
|
+
* The InfoTip button is automatically labelled by the checkbox label.
|
|
19
|
+
* To override this behavior, provide `ariaLabel` or `ariaLabelledby`.
|
|
20
|
+
*/
|
|
21
|
+
infotip?: InfoTipSubComponentProps;
|
|
15
22
|
/**
|
|
16
23
|
* @remarks
|
|
17
24
|
* The `value` prop here gets passed to the underlying `input` component
|