@codecademy/gamut 67.6.5-alpha.9b8a7f.0 → 67.6.5-alpha.c4325a.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.
Files changed (66) hide show
  1. package/dist/BarChart/BarChartProvider.d.ts +19 -0
  2. package/dist/BarChart/BarChartProvider.js +31 -0
  3. package/dist/BarChart/BarRow/elements.d.ts +713 -0
  4. package/dist/BarChart/BarRow/elements.js +89 -0
  5. package/dist/BarChart/BarRow/index.d.ts +26 -0
  6. package/dist/BarChart/BarRow/index.js +254 -0
  7. package/dist/BarChart/GENERIC_EXAMPLE.d.ts +14 -0
  8. package/dist/BarChart/GENERIC_EXAMPLE.js +333 -0
  9. package/dist/BarChart/index.d.ts +4 -0
  10. package/dist/BarChart/index.js +156 -0
  11. package/dist/BarChart/layout/GridLines.d.ts +7 -0
  12. package/dist/BarChart/layout/GridLines.js +78 -0
  13. package/dist/BarChart/layout/ScaleChartHeader.d.ts +10 -0
  14. package/dist/BarChart/layout/ScaleChartHeader.js +89 -0
  15. package/dist/BarChart/layout/VerticalSpacer.d.ts +6 -0
  16. package/dist/BarChart/layout/VerticalSpacer.js +56 -0
  17. package/dist/BarChart/shared/elements.d.ts +7 -0
  18. package/dist/BarChart/shared/elements.js +12 -0
  19. package/dist/BarChart/shared/styles.d.ts +4 -0
  20. package/dist/BarChart/shared/styles.js +4 -0
  21. package/dist/BarChart/shared/translations.d.ts +17 -0
  22. package/dist/BarChart/shared/translations.js +16 -0
  23. package/dist/BarChart/shared/types.d.ts +88 -0
  24. package/dist/BarChart/shared/types.js +1 -0
  25. package/dist/BarChart/utils/hooks.d.ts +93 -0
  26. package/dist/BarChart/utils/hooks.js +301 -0
  27. package/dist/BarChart/utils/index.d.ts +86 -0
  28. package/dist/BarChart/utils/index.js +165 -0
  29. package/dist/ConnectedForm/ConnectedFormGroup.d.ts +2 -8
  30. package/dist/ConnectedForm/ConnectedFormGroup.js +1 -1
  31. package/dist/ConnectedForm/ConnectedInputs/ConnectedCheckbox.js +0 -2
  32. package/dist/ConnectedForm/utils.d.ts +1 -1
  33. package/dist/Form/SelectDropdown/styles.d.ts +1 -1
  34. package/dist/Form/elements/Form.d.ts +1 -1
  35. package/dist/Form/elements/FormGroupLabel.d.ts +2 -2
  36. package/dist/Form/elements/FormGroupLabel.js +3 -10
  37. package/dist/Form/inputs/Checkbox.d.ts +0 -7
  38. package/dist/Form/inputs/Checkbox.js +11 -27
  39. package/dist/Form/inputs/Radio.d.ts +5 -9
  40. package/dist/Form/inputs/Radio.js +10 -13
  41. package/dist/Form/inputs/Select.js +6 -5
  42. package/dist/Form/styles/Radio-styles.d.ts +3 -0
  43. package/dist/Form/styles/Radio-styles.js +6 -0
  44. package/dist/Form/styles/shared-system-props.d.ts +0 -7
  45. package/dist/Form/styles/shared-system-props.js +0 -11
  46. package/dist/GridForm/GridFormInputGroup/GridFormRadioGroupInput/index.js +0 -2
  47. package/dist/GridForm/GridFormInputGroup/__fixtures__/renderers.d.ts +0 -4
  48. package/dist/GridForm/types.d.ts +2 -7
  49. package/dist/List/elements.d.ts +1 -1
  50. package/dist/Tip/InfoTip/InfoTipButton.js +2 -5
  51. package/dist/Tip/InfoTip/elements.d.ts +12 -0
  52. package/dist/Tip/InfoTip/elements.js +9 -0
  53. package/dist/Tip/InfoTip/index.d.ts +2 -27
  54. package/dist/Tip/InfoTip/index.js +67 -50
  55. package/dist/Tip/__tests__/helpers.d.ts +26 -5
  56. package/dist/Tip/shared/FloatingTip.js +3 -3
  57. package/dist/Tip/shared/InlineTip.js +1 -4
  58. package/dist/Tip/shared/types.d.ts +1 -1
  59. package/dist/Tip/shared/utils.d.ts +0 -19
  60. package/dist/Tip/shared/utils.js +0 -104
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.js +1 -0
  63. package/package.json +2 -2
  64. package/dist/Form/__tests__/testUtils.d.ts +0 -22
  65. package/dist/Tip/InfoTip/type-utils.d.ts +0 -35
  66. package/dist/Tip/InfoTip/type-utils.js +0 -72
@@ -0,0 +1,89 @@
1
+ import _styled from "@emotion/styled/base";
2
+ import { css } from '@codecademy/gamut-styles';
3
+ import React, { useMemo } from 'react';
4
+ import { Box } from '../../Box';
5
+ import { Text } from '../../Typography';
6
+ import { formatNumberUSCompact } from '../utils';
7
+ import { useBarChartContext, useLabelPositions } from '../utils/hooks';
8
+ import { VerticalSpacer } from './VerticalSpacer';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ const StyledLabelText = /*#__PURE__*/_styled(Text, {
11
+ target: "e1ssd1i12",
12
+ label: "StyledLabelText"
13
+ })(css({
14
+ position: 'absolute',
15
+ whiteSpace: 'nowrap',
16
+ margin: 0,
17
+ padding: 0
18
+ }), ({
19
+ positionPercent,
20
+ textAlign
21
+ }) => {
22
+ let transform = '';
23
+ if (textAlign === 'left') {
24
+ transform = 'translateX(0)';
25
+ } else if (textAlign === 'right') {
26
+ transform = 'translateX(-100%)';
27
+ } else {
28
+ transform = 'translateX(-50%)';
29
+ }
30
+ return {
31
+ left: `${positionPercent}%`,
32
+ transform
33
+ };
34
+ }, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9sYXlvdXQvU2NhbGVDaGFydEhlYWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJ3QiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvQmFyQ2hhcnQvbGF5b3V0L1NjYWxlQ2hhcnRIZWFkZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtc3R5bGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBCb3ggfSBmcm9tICcuLi8uLi9Cb3gnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uLy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyVVNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFyQ2hhcnRDb250ZXh0LCB1c2VMYWJlbFBvc2l0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2hvb2tzJztcbmltcG9ydCB7IFZlcnRpY2FsU3BhY2VyIH0gZnJvbSAnLi9WZXJ0aWNhbFNwYWNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGVDaGFydEhlYWRlclByb3BzIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb24gdGhlIHNjYWxlICovXG4gIG1pbjogbnVtYmVyO1xuICAvKiogTWF4aW11bSB2YWx1ZSBvbiB0aGUgc2NhbGUgKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgbGFiZWxzIHRvIGRpc3BsYXkgKi9cbiAgbGFiZWxDb3VudDogbnVtYmVyO1xufVxuXG5jb25zdCBTdHlsZWRMYWJlbFRleHQgPSBzdHlsZWQoVGV4dCk8e1xuICBwb3NpdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59PihcbiAgY3NzKHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogMCxcbiAgfSksXG4gICh7IHBvc2l0aW9uUGVyY2VudCwgdGV4dEFsaWduIH0pID0+IHtcbiAgICBsZXQgdHJhbnNmb3JtID0gJyc7XG4gICAgaWYgKHRleHRBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG4gICAgfSBlbHNlIGlmICh0ZXh0QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC0xMDAlKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC01MCUpJztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGAke3Bvc2l0aW9uUGVyY2VudH0lYCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBTdHlsZWRIZWFkZXJDb250YWluZXIgPSBzdHlsZWQoQm94KShcbiAgY3NzKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfSlcbik7XG5cbmNvbnN0IEhlYWRlckxhYmVsQXJlYSA9IHN0eWxlZChCb3gpKFxuICBjc3Moe1xuICAgIG1pbkhlaWdodDogJzI0cHgnLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IFNjYWxlQ2hhcnRIZWFkZXI6IFJlYWN0LkZDPFNjYWxlQ2hhcnRIZWFkZXJQcm9wcz4gPSAoe1xuICBsYWJlbENvdW50LFxuICBtaW4sXG4gIG1heCxcbn0pID0+IHtcbiAgY29uc3QgeyB0cmFuc2xhdGlvbnMgfSA9IHVzZUJhckNoYXJ0Q29udGV4dCgpO1xuICBjb25zdCBsYWJlbFBvc2l0aW9ucyA9IHVzZUxhYmVsUG9zaXRpb25zKHsgbWluLCBtYXgsIGNvdW50OiBsYWJlbENvdW50IH0pO1xuXG4gIGNvbnN0IHNjYWxlTGFiZWxzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbGFiZWxQb3NpdGlvbnMubWFwKCh7IHZhbHVlLCBwb3NpdGlvblBlcmNlbnQgfSkgPT4gKFxuICAgICAgICA8U3R5bGVkTGFiZWxUZXh0XG4gICAgICAgICAga2V5PXtgbGFiZWwtJHt2YWx1ZX0tJHtwb3NpdGlvblBlcmNlbnR9YH1cbiAgICAgICAgICBwb3NpdGlvblBlcmNlbnQ9e3Bvc2l0aW9uUGVyY2VudH1cbiAgICAgICAgICB0ZXh0QWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJwLXNtYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtmb3JtYXROdW1iZXJVU0NvbXBhY3Qoe1xuICAgICAgICAgICAgbnVtOiB2YWx1ZSxcbiAgICAgICAgICAgIGxvY2FsZTogdHJhbnNsYXRpb25zLmxvY2FsZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TdHlsZWRMYWJlbFRleHQ+XG4gICAgICApKSxcbiAgICBbbGFiZWxQb3NpdGlvbnMsIHRyYW5zbGF0aW9ucy5sb2NhbGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IG1iPXsxMn0gd2lkdGg9ezF9PlxuICAgICAgPFN0eWxlZEhlYWRlckNvbnRhaW5lclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBkaXNwbGF5PXt7IF86ICdub25lJywgeHM6ICdibG9jaycgfX1cbiAgICAgID5cbiAgICAgICAgPFZlcnRpY2FsU3BhY2VyPlxuICAgICAgICAgIDxIZWFkZXJMYWJlbEFyZWE+e3NjYWxlTGFiZWxzfTwvSGVhZGVyTGFiZWxBcmVhPlxuICAgICAgICA8L1ZlcnRpY2FsU3BhY2VyPlxuICAgICAgPC9TdHlsZWRIZWFkZXJDb250YWluZXI+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIl19 */");
35
+ const StyledHeaderContainer = /*#__PURE__*/_styled(Box, {
36
+ target: "e1ssd1i11",
37
+ label: "StyledHeaderContainer"
38
+ })(css({
39
+ alignItems: 'center',
40
+ position: 'relative'
41
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9sYXlvdXQvU2NhbGVDaGFydEhlYWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkM4QiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvQmFyQ2hhcnQvbGF5b3V0L1NjYWxlQ2hhcnRIZWFkZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtc3R5bGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBCb3ggfSBmcm9tICcuLi8uLi9Cb3gnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uLy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyVVNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFyQ2hhcnRDb250ZXh0LCB1c2VMYWJlbFBvc2l0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2hvb2tzJztcbmltcG9ydCB7IFZlcnRpY2FsU3BhY2VyIH0gZnJvbSAnLi9WZXJ0aWNhbFNwYWNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGVDaGFydEhlYWRlclByb3BzIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb24gdGhlIHNjYWxlICovXG4gIG1pbjogbnVtYmVyO1xuICAvKiogTWF4aW11bSB2YWx1ZSBvbiB0aGUgc2NhbGUgKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgbGFiZWxzIHRvIGRpc3BsYXkgKi9cbiAgbGFiZWxDb3VudDogbnVtYmVyO1xufVxuXG5jb25zdCBTdHlsZWRMYWJlbFRleHQgPSBzdHlsZWQoVGV4dCk8e1xuICBwb3NpdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59PihcbiAgY3NzKHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogMCxcbiAgfSksXG4gICh7IHBvc2l0aW9uUGVyY2VudCwgdGV4dEFsaWduIH0pID0+IHtcbiAgICBsZXQgdHJhbnNmb3JtID0gJyc7XG4gICAgaWYgKHRleHRBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG4gICAgfSBlbHNlIGlmICh0ZXh0QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC0xMDAlKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC01MCUpJztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGAke3Bvc2l0aW9uUGVyY2VudH0lYCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBTdHlsZWRIZWFkZXJDb250YWluZXIgPSBzdHlsZWQoQm94KShcbiAgY3NzKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfSlcbik7XG5cbmNvbnN0IEhlYWRlckxhYmVsQXJlYSA9IHN0eWxlZChCb3gpKFxuICBjc3Moe1xuICAgIG1pbkhlaWdodDogJzI0cHgnLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IFNjYWxlQ2hhcnRIZWFkZXI6IFJlYWN0LkZDPFNjYWxlQ2hhcnRIZWFkZXJQcm9wcz4gPSAoe1xuICBsYWJlbENvdW50LFxuICBtaW4sXG4gIG1heCxcbn0pID0+IHtcbiAgY29uc3QgeyB0cmFuc2xhdGlvbnMgfSA9IHVzZUJhckNoYXJ0Q29udGV4dCgpO1xuICBjb25zdCBsYWJlbFBvc2l0aW9ucyA9IHVzZUxhYmVsUG9zaXRpb25zKHsgbWluLCBtYXgsIGNvdW50OiBsYWJlbENvdW50IH0pO1xuXG4gIGNvbnN0IHNjYWxlTGFiZWxzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbGFiZWxQb3NpdGlvbnMubWFwKCh7IHZhbHVlLCBwb3NpdGlvblBlcmNlbnQgfSkgPT4gKFxuICAgICAgICA8U3R5bGVkTGFiZWxUZXh0XG4gICAgICAgICAga2V5PXtgbGFiZWwtJHt2YWx1ZX0tJHtwb3NpdGlvblBlcmNlbnR9YH1cbiAgICAgICAgICBwb3NpdGlvblBlcmNlbnQ9e3Bvc2l0aW9uUGVyY2VudH1cbiAgICAgICAgICB0ZXh0QWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJwLXNtYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtmb3JtYXROdW1iZXJVU0NvbXBhY3Qoe1xuICAgICAgICAgICAgbnVtOiB2YWx1ZSxcbiAgICAgICAgICAgIGxvY2FsZTogdHJhbnNsYXRpb25zLmxvY2FsZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TdHlsZWRMYWJlbFRleHQ+XG4gICAgICApKSxcbiAgICBbbGFiZWxQb3NpdGlvbnMsIHRyYW5zbGF0aW9ucy5sb2NhbGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IG1iPXsxMn0gd2lkdGg9ezF9PlxuICAgICAgPFN0eWxlZEhlYWRlckNvbnRhaW5lclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBkaXNwbGF5PXt7IF86ICdub25lJywgeHM6ICdibG9jaycgfX1cbiAgICAgID5cbiAgICAgICAgPFZlcnRpY2FsU3BhY2VyPlxuICAgICAgICAgIDxIZWFkZXJMYWJlbEFyZWE+e3NjYWxlTGFiZWxzfTwvSGVhZGVyTGFiZWxBcmVhPlxuICAgICAgICA8L1ZlcnRpY2FsU3BhY2VyPlxuICAgICAgPC9TdHlsZWRIZWFkZXJDb250YWluZXI+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIl19 */");
42
+ const HeaderLabelArea = /*#__PURE__*/_styled(Box, {
43
+ target: "e1ssd1i10",
44
+ label: "HeaderLabelArea"
45
+ })(css({
46
+ minHeight: '24px'
47
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9sYXlvdXQvU2NhbGVDaGFydEhlYWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0R3QiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvQmFyQ2hhcnQvbGF5b3V0L1NjYWxlQ2hhcnRIZWFkZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtc3R5bGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBCb3ggfSBmcm9tICcuLi8uLi9Cb3gnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uLy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyVVNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFyQ2hhcnRDb250ZXh0LCB1c2VMYWJlbFBvc2l0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2hvb2tzJztcbmltcG9ydCB7IFZlcnRpY2FsU3BhY2VyIH0gZnJvbSAnLi9WZXJ0aWNhbFNwYWNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGVDaGFydEhlYWRlclByb3BzIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb24gdGhlIHNjYWxlICovXG4gIG1pbjogbnVtYmVyO1xuICAvKiogTWF4aW11bSB2YWx1ZSBvbiB0aGUgc2NhbGUgKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgbGFiZWxzIHRvIGRpc3BsYXkgKi9cbiAgbGFiZWxDb3VudDogbnVtYmVyO1xufVxuXG5jb25zdCBTdHlsZWRMYWJlbFRleHQgPSBzdHlsZWQoVGV4dCk8e1xuICBwb3NpdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59PihcbiAgY3NzKHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogMCxcbiAgfSksXG4gICh7IHBvc2l0aW9uUGVyY2VudCwgdGV4dEFsaWduIH0pID0+IHtcbiAgICBsZXQgdHJhbnNmb3JtID0gJyc7XG4gICAgaWYgKHRleHRBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG4gICAgfSBlbHNlIGlmICh0ZXh0QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC0xMDAlKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC01MCUpJztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGAke3Bvc2l0aW9uUGVyY2VudH0lYCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBTdHlsZWRIZWFkZXJDb250YWluZXIgPSBzdHlsZWQoQm94KShcbiAgY3NzKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfSlcbik7XG5cbmNvbnN0IEhlYWRlckxhYmVsQXJlYSA9IHN0eWxlZChCb3gpKFxuICBjc3Moe1xuICAgIG1pbkhlaWdodDogJzI0cHgnLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IFNjYWxlQ2hhcnRIZWFkZXI6IFJlYWN0LkZDPFNjYWxlQ2hhcnRIZWFkZXJQcm9wcz4gPSAoe1xuICBsYWJlbENvdW50LFxuICBtaW4sXG4gIG1heCxcbn0pID0+IHtcbiAgY29uc3QgeyB0cmFuc2xhdGlvbnMgfSA9IHVzZUJhckNoYXJ0Q29udGV4dCgpO1xuICBjb25zdCBsYWJlbFBvc2l0aW9ucyA9IHVzZUxhYmVsUG9zaXRpb25zKHsgbWluLCBtYXgsIGNvdW50OiBsYWJlbENvdW50IH0pO1xuXG4gIGNvbnN0IHNjYWxlTGFiZWxzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbGFiZWxQb3NpdGlvbnMubWFwKCh7IHZhbHVlLCBwb3NpdGlvblBlcmNlbnQgfSkgPT4gKFxuICAgICAgICA8U3R5bGVkTGFiZWxUZXh0XG4gICAgICAgICAga2V5PXtgbGFiZWwtJHt2YWx1ZX0tJHtwb3NpdGlvblBlcmNlbnR9YH1cbiAgICAgICAgICBwb3NpdGlvblBlcmNlbnQ9e3Bvc2l0aW9uUGVyY2VudH1cbiAgICAgICAgICB0ZXh0QWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJwLXNtYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtmb3JtYXROdW1iZXJVU0NvbXBhY3Qoe1xuICAgICAgICAgICAgbnVtOiB2YWx1ZSxcbiAgICAgICAgICAgIGxvY2FsZTogdHJhbnNsYXRpb25zLmxvY2FsZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TdHlsZWRMYWJlbFRleHQ+XG4gICAgICApKSxcbiAgICBbbGFiZWxQb3NpdGlvbnMsIHRyYW5zbGF0aW9ucy5sb2NhbGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IG1iPXsxMn0gd2lkdGg9ezF9PlxuICAgICAgPFN0eWxlZEhlYWRlckNvbnRhaW5lclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBkaXNwbGF5PXt7IF86ICdub25lJywgeHM6ICdibG9jaycgfX1cbiAgICAgID5cbiAgICAgICAgPFZlcnRpY2FsU3BhY2VyPlxuICAgICAgICAgIDxIZWFkZXJMYWJlbEFyZWE+e3NjYWxlTGFiZWxzfTwvSGVhZGVyTGFiZWxBcmVhPlxuICAgICAgICA8L1ZlcnRpY2FsU3BhY2VyPlxuICAgICAgPC9TdHlsZWRIZWFkZXJDb250YWluZXI+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuIl19 */");
48
+ export const ScaleChartHeader = ({
49
+ labelCount,
50
+ min,
51
+ max
52
+ }) => {
53
+ const {
54
+ translations
55
+ } = useBarChartContext();
56
+ const labelPositions = useLabelPositions({
57
+ min,
58
+ max,
59
+ count: labelCount
60
+ });
61
+ const scaleLabels = useMemo(() => labelPositions.map(({
62
+ value,
63
+ positionPercent
64
+ }) => /*#__PURE__*/_jsx(StyledLabelText, {
65
+ positionPercent: positionPercent,
66
+ textAlign: "center",
67
+ variant: "p-small",
68
+ children: formatNumberUSCompact({
69
+ num: value,
70
+ locale: translations.locale
71
+ })
72
+ }, `label-${value}-${positionPercent}`)), [labelPositions, translations.locale]);
73
+ return /*#__PURE__*/_jsx(Box, {
74
+ mb: 12,
75
+ width: 1,
76
+ children: /*#__PURE__*/_jsx(StyledHeaderContainer, {
77
+ "aria-hidden": "true",
78
+ display: {
79
+ _: 'none',
80
+ xs: 'block'
81
+ },
82
+ children: /*#__PURE__*/_jsx(VerticalSpacer, {
83
+ children: /*#__PURE__*/_jsx(HeaderLabelArea, {
84
+ children: scaleLabels
85
+ })
86
+ })
87
+ })
88
+ });
89
+ };
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export interface VerticalSpacerProps {
3
+ children: ReactNode;
4
+ className?: string;
5
+ }
6
+ export declare const VerticalSpacer: React.FC<VerticalSpacerProps>;
@@ -0,0 +1,56 @@
1
+ import _styled from "@emotion/styled/base";
2
+ import { css } from '@codecademy/gamut-styles';
3
+ import { Box } from '../../Box';
4
+ import { barListItemPadding } from '../shared/styles';
5
+ import { useBarChartContext } from '../utils/hooks';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const SpacerContainer = /*#__PURE__*/_styled(Box, {
8
+ target: "e1u3mkni1",
9
+ label: "SpacerContainer"
10
+ })(css({
11
+ display: 'flex',
12
+ width: '100%',
13
+ height: '100%',
14
+ gap: 0
15
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9sYXlvdXQvVmVydGljYWxTcGFjZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVF3QiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvQmFyQ2hhcnQvbGF5b3V0L1ZlcnRpY2FsU3BhY2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNzcyB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LXN0eWxlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEJveCB9IGZyb20gJy4uLy4uL0JveCc7XG5pbXBvcnQgeyBiYXJMaXN0SXRlbVBhZGRpbmcgfSBmcm9tICcuLi9zaGFyZWQvc3R5bGVzJztcbmltcG9ydCB7IHVzZUJhckNoYXJ0Q29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2hvb2tzJztcblxuY29uc3QgU3BhY2VyQ29udGFpbmVyID0gc3R5bGVkKEJveCkoXG4gIGNzcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgZ2FwOiAwLFxuICB9KVxuKTtcblxuY29uc3QgQ29udGVudEFyZWEgPSBzdHlsZWQoQm94KShcbiAgY3NzKHtcbiAgICBmbGV4OiAxLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9KVxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbFNwYWNlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBMZWZ0U3BhY2VyOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyB3aWRlc3RMZWZ0TGFiZWxXaWR0aCB9ID0gdXNlQmFyQ2hhcnRDb250ZXh0KCk7XG4gIGNvbnN0IHdpZHRoID1cbiAgICB3aWRlc3RMZWZ0TGFiZWxXaWR0aCA9PT0gbnVsbCA/ICdtaW4tY29udGVudCcgOiB3aWRlc3RMZWZ0TGFiZWxXaWR0aDtcblxuICByZXR1cm4gPEJveCBmbGV4U2hyaW5rPXswfSBtaW5XaWR0aD17d2lkdGh9IG1sPXtiYXJMaXN0SXRlbVBhZGRpbmd9IC8+O1xufTtcblxuY29uc3QgUmlnaHRTcGFjZXI6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IHdpZGVzdFJpZ2h0TGFiZWxXaWR0aCB9ID0gdXNlQmFyQ2hhcnRDb250ZXh0KCk7XG4gIGNvbnN0IHdpZHRoID1cbiAgICB3aWRlc3RSaWdodExhYmVsV2lkdGggPT09IG51bGwgPyAnbWluLWNvbnRlbnQnIDogd2lkZXN0UmlnaHRMYWJlbFdpZHRoO1xuXG4gIHJldHVybiA8Qm94IGZsZXhTaHJpbms9ezB9IG1pbldpZHRoPXt3aWR0aH0gbXI9e2Jhckxpc3RJdGVtUGFkZGluZ30gLz47XG59O1xuXG5leHBvcnQgY29uc3QgVmVydGljYWxTcGFjZXI6IFJlYWN0LkZDPFZlcnRpY2FsU3BhY2VyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3BhY2VyQ29udGFpbmVyIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxMZWZ0U3BhY2VyIC8+XG4gICAgICA8Q29udGVudEFyZWE+e2NoaWxkcmVufTwvQ29udGVudEFyZWE+XG4gICAgICA8UmlnaHRTcGFjZXIgLz5cbiAgICA8L1NwYWNlckNvbnRhaW5lcj5cbiAgKTtcbn07XG4iXX0= */");
16
+ const ContentArea = /*#__PURE__*/_styled(Box, {
17
+ target: "e1u3mkni0",
18
+ label: "ContentArea"
19
+ })(css({
20
+ flex: 1,
21
+ position: 'relative',
22
+ height: '100%'
23
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9sYXlvdXQvVmVydGljYWxTcGFjZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCb0IiLCJmaWxlIjoiLi4vLi4vLi4vc3JjL0JhckNoYXJ0L2xheW91dC9WZXJ0aWNhbFNwYWNlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBCb3ggfSBmcm9tICcuLi8uLi9Cb3gnO1xuaW1wb3J0IHsgYmFyTGlzdEl0ZW1QYWRkaW5nIH0gZnJvbSAnLi4vc2hhcmVkL3N0eWxlcyc7XG5pbXBvcnQgeyB1c2VCYXJDaGFydENvbnRleHQgfSBmcm9tICcuLi91dGlscy9ob29rcyc7XG5cbmNvbnN0IFNwYWNlckNvbnRhaW5lciA9IHN0eWxlZChCb3gpKFxuICBjc3Moe1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIGdhcDogMCxcbiAgfSlcbik7XG5cbmNvbnN0IENvbnRlbnRBcmVhID0gc3R5bGVkKEJveCkoXG4gIGNzcyh7XG4gICAgZmxleDogMSxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgfSlcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxTcGFjZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgTGVmdFNwYWNlcjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgd2lkZXN0TGVmdExhYmVsV2lkdGggfSA9IHVzZUJhckNoYXJ0Q29udGV4dCgpO1xuICBjb25zdCB3aWR0aCA9XG4gICAgd2lkZXN0TGVmdExhYmVsV2lkdGggPT09IG51bGwgPyAnbWluLWNvbnRlbnQnIDogd2lkZXN0TGVmdExhYmVsV2lkdGg7XG5cbiAgcmV0dXJuIDxCb3ggZmxleFNocmluaz17MH0gbWluV2lkdGg9e3dpZHRofSBtbD17YmFyTGlzdEl0ZW1QYWRkaW5nfSAvPjtcbn07XG5cbmNvbnN0IFJpZ2h0U3BhY2VyOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyB3aWRlc3RSaWdodExhYmVsV2lkdGggfSA9IHVzZUJhckNoYXJ0Q29udGV4dCgpO1xuICBjb25zdCB3aWR0aCA9XG4gICAgd2lkZXN0UmlnaHRMYWJlbFdpZHRoID09PSBudWxsID8gJ21pbi1jb250ZW50JyA6IHdpZGVzdFJpZ2h0TGFiZWxXaWR0aDtcblxuICByZXR1cm4gPEJveCBmbGV4U2hyaW5rPXswfSBtaW5XaWR0aD17d2lkdGh9IG1yPXtiYXJMaXN0SXRlbVBhZGRpbmd9IC8+O1xufTtcblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsU3BhY2VyOiBSZWFjdC5GQzxWZXJ0aWNhbFNwYWNlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFNwYWNlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8TGVmdFNwYWNlciAvPlxuICAgICAgPENvbnRlbnRBcmVhPntjaGlsZHJlbn08L0NvbnRlbnRBcmVhPlxuICAgICAgPFJpZ2h0U3BhY2VyIC8+XG4gICAgPC9TcGFjZXJDb250YWluZXI+XG4gICk7XG59O1xuIl19 */");
24
+ const LeftSpacer = () => {
25
+ const {
26
+ widestLeftLabelWidth
27
+ } = useBarChartContext();
28
+ const width = widestLeftLabelWidth === null ? 'min-content' : widestLeftLabelWidth;
29
+ return /*#__PURE__*/_jsx(Box, {
30
+ flexShrink: 0,
31
+ minWidth: width,
32
+ ml: barListItemPadding
33
+ });
34
+ };
35
+ const RightSpacer = () => {
36
+ const {
37
+ widestRightLabelWidth
38
+ } = useBarChartContext();
39
+ const width = widestRightLabelWidth === null ? 'min-content' : widestRightLabelWidth;
40
+ return /*#__PURE__*/_jsx(Box, {
41
+ flexShrink: 0,
42
+ minWidth: width,
43
+ mr: barListItemPadding
44
+ });
45
+ };
46
+ export const VerticalSpacer = ({
47
+ children,
48
+ className
49
+ }) => {
50
+ return /*#__PURE__*/_jsxs(SpacerContainer, {
51
+ className: className,
52
+ children: [/*#__PURE__*/_jsx(LeftSpacer, {}), /*#__PURE__*/_jsx(ContentArea, {
53
+ children: children
54
+ }), /*#__PURE__*/_jsx(RightSpacer, {})]
55
+ });
56
+ };
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export declare const BarsList: import("@emotion/styled").StyledComponent<{
3
+ theme?: import("@emotion/react").Theme | undefined;
4
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
5
+ } & {
6
+ theme?: import("@emotion/react").Theme | undefined;
7
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, {}>;
@@ -0,0 +1,12 @@
1
+ import _styled from "@emotion/styled/base";
2
+ import { css } from '@codecademy/gamut-styles';
3
+ export const BarsList = /*#__PURE__*/_styled('ul', {
4
+ target: "ey0wy1t0",
5
+ label: "BarsList"
6
+ })(css({
7
+ p: 0,
8
+ listStyle: 'none',
9
+ '& li:nth-of-type(even)': {
10
+ bg: 'background-selected'
11
+ }
12
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9CYXJDaGFydC9zaGFyZWQvZWxlbWVudHMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUd3QiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvQmFyQ2hhcnQvc2hhcmVkL2VsZW1lbnRzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNzcyB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LXN0eWxlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5cbmV4cG9ydCBjb25zdCBCYXJzTGlzdCA9IHN0eWxlZCgndWwnKShcbiAgY3NzKHtcbiAgICBwOiAwLFxuICAgIGxpc3RTdHlsZTogJ25vbmUnLFxuICAgICcmIGxpOm50aC1vZi10eXBlKGV2ZW4pJzoge1xuICAgICAgYmc6ICdiYWNrZ3JvdW5kLXNlbGVjdGVkJyxcbiAgICB9LFxuICB9KVxuKTtcbiJdfQ== */");
@@ -0,0 +1,4 @@
1
+ export declare const minBarWidth = 8;
2
+ export declare const barListItemPadding = 16;
3
+ export declare const iconWidth = 24;
4
+ export declare const iconPadding = 12;
@@ -0,0 +1,4 @@
1
+ export const minBarWidth = 8;
2
+ export const barListItemPadding = 16;
3
+ export const iconWidth = 24;
4
+ export const iconPadding = 12;
@@ -0,0 +1,17 @@
1
+ export type BarChartTranslations = {
2
+ sortLabel: string;
3
+ sortOptions: {
4
+ none: string;
5
+ labelAsc: string;
6
+ labelDesc: string;
7
+ valueAsc: string;
8
+ valueDesc: string;
9
+ };
10
+ accessibility: {
11
+ gainedNowAt: string;
12
+ inLabel: string;
13
+ inOnly: string;
14
+ };
15
+ locale: string;
16
+ };
17
+ export declare const defaultBarChartTranslations: BarChartTranslations;
@@ -0,0 +1,16 @@
1
+ export const defaultBarChartTranslations = {
2
+ sortLabel: 'Order by:',
3
+ sortOptions: {
4
+ none: 'None',
5
+ labelAsc: 'Label (A-Z)',
6
+ labelDesc: 'Label (Z-A)',
7
+ valueAsc: 'Value (Low-High)',
8
+ valueDesc: 'Value (High-Low)'
9
+ },
10
+ accessibility: {
11
+ gainedNowAt: 'gained - now at',
12
+ inLabel: 'in',
13
+ inOnly: 'in '
14
+ },
15
+ locale: 'en'
16
+ };
@@ -0,0 +1,88 @@
1
+ import { GamutIconProps } from '@codecademy/gamut-icons';
2
+ import { ColorAlias } from '@codecademy/gamut-styles';
3
+ import { ComponentProps, HTMLProps } from 'react';
4
+ import { ButtonProps } from '../../Button';
5
+ import { Text } from '../../Typography/Text';
6
+ import { HeadingTags } from '../../Typography/types';
7
+ import { CustomSortOption } from '../utils/hooks';
8
+ import { BarChartTranslations } from './translations';
9
+ type titleType = string | {
10
+ as?: HeadingTags;
11
+ title: string;
12
+ variant?: ComponentProps<typeof Text>['variant'];
13
+ };
14
+ type BarChartAriaLabel = {
15
+ title: titleType;
16
+ 'aria-labelledby'?: never;
17
+ hideTitle?: boolean;
18
+ };
19
+ type BarChartAriaLabelledBy = {
20
+ title?: never;
21
+ 'aria-labelledby': string;
22
+ };
23
+ type BarChartLabel = BarChartAriaLabel | BarChartAriaLabelledBy;
24
+ export type BarChartStyles = {
25
+ /** Color for text labels. Defaults to 'text' */
26
+ textColor?: ColorAlias;
27
+ /** Color for the foreground/progress bar. Defaults to 'feedback-warning' */
28
+ foregroundBarColor?: ColorAlias;
29
+ /** Color for the background/total bar. Defaults to 'paleBlue' */
30
+ backgroundBarColor?: ColorAlias;
31
+ /** Color for the series one label (first right label when stacked, or displayValue when not stacked). Defaults to 'text' */
32
+ seriesOneLabel?: ColorAlias;
33
+ /** Color for the series two label (displayValue when stacked). Defaults to 'text' */
34
+ seriesTwoLabel?: ColorAlias;
35
+ };
36
+ type BarPropsBase = {
37
+ /** Label displayed on the y-axis for this bar */
38
+ yLabel: string;
39
+ /** The foreground/progress bar value (always shown) */
40
+ seriesOneValue: number;
41
+ /** The background/total bar value (optional - creates stacked effect when provided) */
42
+ seriesTwoValue?: number;
43
+ /** Optional gamut-icon to display next to the label */
44
+ icon?: React.ComponentType<GamutIconProps>;
45
+ } & Record<string, unknown>;
46
+ type BarPropsWithoutInteraction = BarPropsBase & {
47
+ onClick?: never;
48
+ href?: never;
49
+ };
50
+ type BarPropsWithInteraction = BarPropsBase & {
51
+ onClick?: ButtonProps['onClick'];
52
+ href?: HTMLProps<HTMLAnchorElement>['href'];
53
+ };
54
+ export type BarProps = BarPropsWithoutInteraction | BarPropsWithInteraction;
55
+ /**
56
+ * Helper type that extracts the element type from an array of bars.
57
+ * Handles both mutable and readonly arrays.
58
+ */
59
+ export type InferBarType<T> = T extends readonly (infer U)[] ? U extends BarProps ? U : BarProps : T extends (infer U)[] ? U extends BarProps ? U : BarProps : BarProps;
60
+ export type BarChartProps<TBarValues extends BarProps[] | readonly BarProps[] = BarProps[]> = BarChartLabel & {
61
+ /** Whether to animate bars on mount */
62
+ animate?: boolean;
63
+ /** Array of bar data to render */
64
+ barValues: TBarValues;
65
+ /** Figure caption for the BarChart. This should be a summary of the information or the overall takeaway of the information in the chart */
66
+ description: string;
67
+ /** Hides the visual figcaption */
68
+ hideDescription?: boolean;
69
+ /** Hides the visual title for the chart UL */
70
+ hideTitle?: boolean;
71
+ /** Maximum value for the x-axis scale */
72
+ maxRange: number;
73
+ /** Minimum value for the x-axis scale (usually 0) */
74
+ minRange: number;
75
+ /** Unit label to display (e.g., "XP") */
76
+ unit?: string;
77
+ /** Style configuration for colors */
78
+ styleConfig?: BarChartStyles;
79
+ /** Interval for x-axis scale markers */
80
+ xScale?: number;
81
+ /** Array of sort options to display in the dropdown. Can include string literals ('alphabetically', 'numerically', 'none') or custom sort functions. If not provided, the Select dropdown will not render. */
82
+ sortFns?: ('alphabetically' | 'numerically' | 'none' | CustomSortOption<InferBarType<TBarValues>>)[];
83
+ /** Translations for internationalization. Partial translations will be merged with defaults. */
84
+ translations?: Partial<BarChartTranslations>;
85
+ };
86
+ export type BarChartRange = Pick<BarChartProps, 'minRange' | 'maxRange'>;
87
+ export type BarChartUnit = Pick<BarChartProps, 'unit'>;
88
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
1
+ /// <reference types="react" />
2
+ import { Colors } from '@codecademy/gamut-styles';
3
+ import { SelectOptions } from '../../Form/inputs/Select';
4
+ import { BarChartContextProps } from '../BarChartProvider';
5
+ import { BarChartTranslations } from '../shared/translations';
6
+ import { BarChartStyles, BarProps, InferBarType } from '../shared/types';
7
+ export interface LabelPosition {
8
+ value: number;
9
+ positionPercent: number;
10
+ }
11
+ /**
12
+ * Hook that calculates label positions for a given range and count
13
+ * Returns an array of { value, positionPercent } objects
14
+ */
15
+ export declare const useLabelPositions: ({ min, max, count, }: {
16
+ min: number;
17
+ max: number;
18
+ count: number;
19
+ }) => LabelPosition[];
20
+ export declare const useBarChartContext: () => BarChartContextProps;
21
+ export interface UseBarChartOptions {
22
+ minRange: number;
23
+ maxRange: number;
24
+ xScale?: number;
25
+ unit?: string;
26
+ styleConfig?: BarChartStyles;
27
+ animate?: boolean;
28
+ barCount?: number;
29
+ translations: BarChartTranslations;
30
+ }
31
+ export declare const useBarChart: ({ minRange, maxRange, xScale, unit, styleConfig, animate, barCount, translations, }: UseBarChartOptions) => {
32
+ minRange: number;
33
+ maxRange: number;
34
+ xScale: number;
35
+ unit: string;
36
+ styleConfig: {
37
+ textColor: "text" | "background" | "primary" | "secondary" | "danger" | "interface" | "text-secondary" | "text-accent" | "text-disabled" | "feedback-error" | "feedback-success" | "feedback-warning" | "background-primary" | "background-disabled" | "background-error" | "background-success" | "background-warning" | "background-contrast" | "background-current" | "background-selected" | "background-hover" | "shadow-primary" | "shadow-secondary" | "primary-hover" | "primary-inverse" | "secondary-hover" | "danger-hover" | "interface-hover" | "border-primary" | "border-secondary" | "border-disabled" | "border-tertiary";
38
+ foregroundBarColor: "text" | "background" | "primary" | "secondary" | "danger" | "interface" | "text-secondary" | "text-accent" | "text-disabled" | "feedback-error" | "feedback-success" | "feedback-warning" | "background-primary" | "background-disabled" | "background-error" | "background-success" | "background-warning" | "background-contrast" | "background-current" | "background-selected" | "background-hover" | "shadow-primary" | "shadow-secondary" | "primary-hover" | "primary-inverse" | "secondary-hover" | "danger-hover" | "interface-hover" | "border-primary" | "border-secondary" | "border-disabled" | "border-tertiary";
39
+ backgroundBarColor: "text" | "background" | "primary" | "secondary" | "danger" | "interface" | "text-secondary" | "text-accent" | "text-disabled" | "feedback-error" | "feedback-success" | "feedback-warning" | "background-primary" | "background-disabled" | "background-error" | "background-success" | "background-warning" | "background-contrast" | "background-current" | "background-selected" | "background-hover" | "shadow-primary" | "shadow-secondary" | "primary-hover" | "primary-inverse" | "secondary-hover" | "danger-hover" | "interface-hover" | "border-primary" | "border-secondary" | "border-disabled" | "border-tertiary";
40
+ seriesOneLabel: "text" | "background" | "primary" | "secondary" | "danger" | "interface" | "text-secondary" | "text-accent" | "text-disabled" | "feedback-error" | "feedback-success" | "feedback-warning" | "background-primary" | "background-disabled" | "background-error" | "background-success" | "background-warning" | "background-contrast" | "background-current" | "background-selected" | "background-hover" | "shadow-primary" | "shadow-secondary" | "primary-hover" | "primary-inverse" | "secondary-hover" | "danger-hover" | "interface-hover" | "border-primary" | "border-secondary" | "border-disabled" | "border-tertiary";
41
+ seriesTwoLabel: "text" | "background" | "primary" | "secondary" | "danger" | "interface" | "text-secondary" | "text-accent" | "text-disabled" | "feedback-error" | "feedback-success" | "feedback-warning" | "background-primary" | "background-disabled" | "background-error" | "background-success" | "background-warning" | "background-contrast" | "background-current" | "background-selected" | "background-hover" | "shadow-primary" | "shadow-secondary" | "primary-hover" | "primary-inverse" | "secondary-hover" | "danger-hover" | "interface-hover" | "border-primary" | "border-secondary" | "border-disabled" | "border-tertiary";
42
+ };
43
+ animate: boolean;
44
+ widestLeftLabelWidth: number | null;
45
+ setWidestLeftLabelWidth: (width: number) => void;
46
+ widestRightLabelWidth: number | null;
47
+ setWidestRightLabelWidth: (width: number) => void;
48
+ isMeasuring: boolean;
49
+ translations: BarChartTranslations;
50
+ };
51
+ /**
52
+ * Hook that returns a function to get the highest contrast border color
53
+ * (white or navy-900) for a given background color.
54
+ *
55
+ * Similar to the Background component, this resolves color aliases and
56
+ * compares contrast ratios to determine the best border color.
57
+ *
58
+ * @returns A function that takes a background color and returns either 'white' or 'navy-900'
59
+ */
60
+ export declare const useBarBorderColor: () => (bg: Colors) => 'white' | 'navy-900';
61
+ export declare const useMeasureLeftLabelWidth: ({ ref, }: {
62
+ ref: React.RefObject<HTMLElement>;
63
+ }) => void;
64
+ export declare const useMeasureRightLabelWidth: ({ ref, }: {
65
+ ref: React.RefObject<HTMLElement>;
66
+ }) => void;
67
+ export interface CustomSortOption<TBar extends BarProps = BarProps> {
68
+ label: string;
69
+ value: string;
70
+ sortFn: (bars: TBar[]) => TBar[];
71
+ }
72
+ export interface UseBarChartSortOptions<TBarValues extends BarProps[] | readonly BarProps[] = BarProps[]> {
73
+ bars: TBarValues;
74
+ sortFns?: ('alphabetically' | 'numerically' | 'none' | CustomSortOption<InferBarType<TBarValues>>)[];
75
+ translations: BarChartTranslations;
76
+ }
77
+ export interface UseBarChartSortReturn<TBarValues extends BarProps[] | readonly BarProps[] = BarProps[]> {
78
+ sortedBars: TBarValues;
79
+ sortValue: string;
80
+ onSortChange: (value: string) => void;
81
+ selectProps: {
82
+ options: SelectOptions;
83
+ value: string;
84
+ onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
85
+ id: string;
86
+ } | null;
87
+ }
88
+ /**
89
+ * Hook that manages bar sorting state and provides memoized sorted bars.
90
+ * Supports predefined sort options (via string literals) and custom sort functions.
91
+ * Only returns selectProps if sortFns is provided.
92
+ */
93
+ export declare const useBarChartSort: <TBarValues extends BarProps[] | readonly BarProps[] = BarProps[]>({ bars, sortFns, translations, }: UseBarChartSortOptions<TBarValues>) => UseBarChartSortReturn<TBarValues>;