@codecademy/brand 5.9.0-alpha.c7d5bcc33.0 → 5.9.0-alpha.d43e57686.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 (54) hide show
  1. package/dist/Accordion/index.d.ts +271 -0
  2. package/dist/Accordion/index.js +130 -0
  3. package/dist/AccordionAreaDeprecated/index.d.ts +20 -0
  4. package/dist/AccordionAreaDeprecated/index.js +60 -0
  5. package/dist/AccordionButtonDeprecated/ButtonDeprecated/index.d.ts +93 -0
  6. package/dist/AccordionButtonDeprecated/ButtonDeprecated/index.js +65 -0
  7. package/dist/AccordionButtonDeprecated/ButtonDeprecated/styles/index.module.scss +104 -0
  8. package/dist/{AccordionDeprecated/AccordionButtonDeprecated → AccordionButtonDeprecated}/ButtonDeprecated/styles/mixins.scss +20 -4
  9. package/dist/AccordionButtonDeprecated/ButtonDeprecated/styles/variables.scss +54 -0
  10. package/dist/AccordionButtonDeprecated/ButtonDeprecatedBase/index.d.ts +43 -0
  11. package/dist/AccordionButtonDeprecated/ButtonDeprecatedBase/index.js +71 -0
  12. package/dist/AccordionButtonDeprecated/index.d.ts +25 -0
  13. package/dist/{AccordionDeprecated/AccordionButtonDeprecated → AccordionButtonDeprecated}/index.js +23 -8
  14. package/dist/AccordionButtonDeprecated/styles.module.scss +62 -0
  15. package/dist/AccordionDeprecated/index.d.ts +28 -7
  16. package/dist/AccordionDeprecated/index.js +16 -11
  17. package/dist/AppHeader/AppHeaderElements/AppHeaderLink/index.d.ts +7 -7
  18. package/dist/AppHeader/AppHeaderElements/AppHeaderLinkSections/elements.d.ts +7 -7
  19. package/dist/AppHeader/AppHeaderElements/AppHeaderListItem/index.d.ts +1 -1
  20. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/elements.d.ts +10 -10
  21. package/dist/AppHeader/shared/elements.d.ts +9 -9
  22. package/dist/Carousel/elements.d.ts +2 -2
  23. package/dist/DropdownButton/index.d.ts +2 -2
  24. package/dist/GlobalFooter/FooterHeading.d.ts +2 -2
  25. package/dist/GlobalFooter/FooterLinks.d.ts +1 -1
  26. package/dist/GlobalFooter/FooterSubHeading.d.ts +2 -2
  27. package/dist/LayoutMenu/AccordionMenu.js +23 -50
  28. package/dist/LayoutMenuVariant/AccordionMenu.js +20 -61
  29. package/dist/LearningOutcomeBadges/LearningOutcomeLowAssessmentBadge.d.ts +1 -1
  30. package/dist/LearningOutcomeTile/Tile.d.ts +1 -1
  31. package/dist/Notifications/elements.d.ts +2 -2
  32. package/dist/Testimonial/index.d.ts +1 -1
  33. package/dist/index.d.ts +3 -0
  34. package/dist/index.js +3 -0
  35. package/dist/stories/Molecules/Accordion.stories.js +122 -0
  36. package/dist/stories/Molecules/AccordionDeprecated.stories.js +19 -0
  37. package/dist/typings/react.d.ts +7 -0
  38. package/dist/utils/index.d.ts +1 -0
  39. package/dist/utils/index.js +1 -0
  40. package/dist/utils/omitProps.d.ts +10 -0
  41. package/dist/utils/omitProps.js +18 -0
  42. package/package.json +5 -1
  43. package/dist/AccordionDeprecated/AccordionAreaDeprecated/index.d.ts +0 -12
  44. package/dist/AccordionDeprecated/AccordionAreaDeprecated/index.js +0 -55
  45. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecated/index.d.ts +0 -9
  46. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecated/index.js +0 -24
  47. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecated/styles/index.module.scss +0 -30
  48. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecated/styles/variables.scss +0 -16
  49. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecatedBase/index.d.ts +0 -5
  50. package/dist/AccordionDeprecated/AccordionButtonDeprecated/ButtonDeprecatedBase/index.js +0 -22
  51. package/dist/AccordionDeprecated/AccordionButtonDeprecated/index.d.ts +0 -15
  52. package/dist/AccordionDeprecated/AccordionButtonDeprecated/styles.module.scss +0 -22
  53. package/dist/styles/gamut-styles-utils/index.scss +0 -28
  54. /package/dist/{AccordionDeprecated/AccordionButtonDeprecated → AccordionButtonDeprecated}/ButtonDeprecatedBase/styles.module.scss +0 -0
@@ -0,0 +1,65 @@
1
+ /* eslint-disable react/destructuring-assignment */
2
+ import cx from 'classnames';
3
+ import hasIn from 'lodash/hasIn';
4
+ import * as React from 'react';
5
+ import { omitProps } from '../../utils';
6
+ import { ButtonDeprecatedBase } from '../ButtonDeprecatedBase';
7
+ // eslint-disable-next-line gamut/no-css-standalone
8
+ import styles from './styles/index.module.scss';
9
+
10
+ // themes can be an alias to a color
11
+ // or a unique button type
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ export const buttonPresetThemes = {
14
+ secondary: 'mint',
15
+ platform: 'greyblue',
16
+ lantern: 'darkmint',
17
+ royalblue: 'brand-purple'
18
+ };
19
+ const themes = ['hyper', 'navy', 'red', 'white', 'brand-red', 'brand-yellow', 'brand-purple', 'brand-dark-blue', 'brand-blue', 'mint', 'darkmint', 'grey', 'greyblue'];
20
+ const propKeys = ['theme', 'size', 'outline', 'underline', 'link', 'caps', 'go', 'children', 'block', 'className', 'round', 'square', 'flat', 'fitText', 'onClick'];
21
+ const isPreset = theme => {
22
+ return hasIn(buttonPresetThemes, theme);
23
+ };
24
+
25
+ /**
26
+ * @deprecated
27
+ * This component is deprecated and is no longer supported.
28
+ *
29
+ * See [FillButon](https://gamut.codecademy.com/storybook/?path=/docs/atoms-button--fill-button#fill-button)
30
+ *
31
+ * @example
32
+ * import { FillButton } fom '@codecademy/gamut';
33
+ *
34
+ * <FillButton variant="primary" />
35
+ */
36
+
37
+ export const ButtonDeprecated = props => {
38
+ let {
39
+ theme = 'brand-red'
40
+ } = props;
41
+ if (isPreset(theme)) {
42
+ theme = buttonPresetThemes[theme];
43
+ }
44
+ const typeClassName = props.link ? styles.link : styles.btn;
45
+ const themeClassName = props.link ? styles[`link-${theme}`] : styles[`btn-${theme}`];
46
+ const classes = cx(typeClassName, themeClassName, styles[props.size], {
47
+ [styles.block]: props.block,
48
+ [styles.go]: props.go,
49
+ [styles.outline]: props.outline,
50
+ [styles.underline]: props.underline,
51
+ [styles.caps]: props.caps,
52
+ [styles.round]: props.round,
53
+ [styles.square]: props.square,
54
+ [styles.flat]: props.flat,
55
+ [styles['fit-text']]: props.fitText
56
+ }, props.className);
57
+ const propsToTransfer = omitProps(propKeys, props);
58
+ return /*#__PURE__*/_jsx(ButtonDeprecatedBase, {
59
+ ...propsToTransfer,
60
+ className: classes,
61
+ link: props.link,
62
+ onClick: props.onClick,
63
+ children: props.children
64
+ });
65
+ };
@@ -0,0 +1,104 @@
1
+ @use "sass:color";
2
+ @use "variables";
3
+ @use "mixins";
4
+ //
5
+ // Base styles
6
+ //
7
+
8
+ .btn {
9
+ align-items: center;
10
+ display: inline-flex;
11
+ justify-content: center;
12
+ font-weight: variables.$btn-font-weight;
13
+ -webkit-font-smoothing: antialiased;
14
+ -moz-osx-font-smoothing: grayscale;
15
+ border: 1px solid transparent;
16
+ border-radius: variables.$btn-border-radius;
17
+ user-select: none;
18
+ @include mixins.button-size(
19
+ variables.$btn-padding-y,
20
+ variables.$btn-padding-x,
21
+ variables.$btn-font-size-base,
22
+ variables.$btn-line-height,
23
+ variables.$btn-min-width-sm
24
+ );
25
+ transition: all 0.1s ease-in-out;
26
+ }
27
+
28
+ // Future-proof disabling of clicks on `<a>` elements
29
+ a.btn.disabled,
30
+ fieldset[disabled] a.btn {
31
+ pointer-events: none;
32
+ }
33
+
34
+ @each $name, $color in variables.$btn-swatches {
35
+ @if $name == "brand-yellow" {
36
+ @include mixins.button-variants($name, variables.$color-black, $color);
37
+ } @else if color.channel(color.to-space($color, hsl), "lightness") > 68 {
38
+ @include mixins.button-variants($name, variables.$color-black, $color);
39
+ } @else {
40
+ @include mixins.button-variants($name, variables.$color-white, $color);
41
+ }
42
+ }
43
+
44
+ .round {
45
+ border-radius: variables.$btn-round-border-radius;
46
+ }
47
+
48
+ .square {
49
+ border-radius: 0;
50
+ }
51
+ //
52
+ // Button Sizes
53
+ //
54
+
55
+ .large {
56
+ // line-height: ensure even-numbered height of button next to large input
57
+ @include mixins.button-size(
58
+ variables.$btn-padding-y-lg,
59
+ variables.$btn-padding-x-lg,
60
+ variables.$btn-font-size-lg,
61
+ variables.$btn-line-height-lg,
62
+ variables.$btn-min-width-lg
63
+ );
64
+ }
65
+
66
+ .small {
67
+ // line-height: ensure proper height of button next to small input
68
+ @include mixins.button-size(
69
+ variables.$btn-padding-y-sm,
70
+ variables.$btn-padding-x-sm,
71
+ variables.$btn-font-size-sm,
72
+ variables.$btn-line-height-sm,
73
+ variables.$btn-min-width-sm
74
+ );
75
+ }
76
+
77
+ //
78
+ // Block buttovariables.n
79
+ //
80
+
81
+ .block {
82
+ display: flex;
83
+ width: 100%;
84
+ }
85
+
86
+ .caps {
87
+ text-transform: uppercase;
88
+ }
89
+
90
+ .underline {
91
+ &:hover,
92
+ &:focus {
93
+ text-decoration: underline;
94
+ }
95
+ }
96
+
97
+ // Specificity overrides
98
+ input[type="submit"],
99
+ input[type="reset"],
100
+ input[type="button"] {
101
+ &.block {
102
+ width: 100%;
103
+ }
104
+ }
@@ -1,9 +1,13 @@
1
1
  @use "sass:color";
2
- @use "../../../../styles/gamut-styles-utils" as *;
3
2
  @use "variables";
4
3
 
4
+ // Button variants
5
+ //
6
+ // Easily pump out default styles, as well as :hover, :focus, :active,
7
+ // and disabled options for all buttons
8
+
5
9
  @mixin button-variant($color, $background, $border: transparent) {
6
- $active-background: color.mix($color-black, $background);
10
+ $active-background: color.mix(variables.$color-black, $background);
7
11
 
8
12
  @if $border == transparent {
9
13
  $active-border: transparent;
@@ -19,7 +23,7 @@
19
23
  }
20
24
 
21
25
  &:focus-visible {
22
- box-shadow: 0 0 0 2px $color-white, 0 0 0 4px $background;
26
+ box-shadow: 0 0 0 2px variables.$color-white, 0 0 0 4px $background;
23
27
  }
24
28
 
25
29
  &:focus-visible,
@@ -55,7 +59,7 @@
55
59
  }
56
60
 
57
61
  &:focus-visible {
58
- box-shadow: 0 0 0 2px $color-white, 0 0 0 4px $color;
62
+ box-shadow: 0 0 0 2px variables.$color-white, 0 0 0 4px $color;
59
63
  }
60
64
 
61
65
  &:disabled {
@@ -64,6 +68,7 @@
64
68
  }
65
69
  }
66
70
 
71
+ // Button sizes
67
72
  @mixin button-size(
68
73
  $padding-y,
69
74
  $padding-x,
@@ -90,4 +95,15 @@
90
95
  }
91
96
  @content;
92
97
  }
98
+ .link-#{$name} {
99
+ font-weight: bold;
100
+ -webkit-font-smoothing: antialiased;
101
+ -moz-osx-font-smoothing: grayscale;
102
+ color: $background;
103
+ text-decoration: underline;
104
+
105
+ &:disabled {
106
+ color: variables.$btn-disabled-color;
107
+ }
108
+ }
93
109
  }
@@ -0,0 +1,54 @@
1
+ $btn-padding-x: 1rem !default;
2
+ $btn-padding-y: 0.375rem !default;
3
+ $btn-font-weight: bold !default;
4
+
5
+ $btn-line-height: 1.5 !default;
6
+ $btn-line-height-lg: calc(4 / 3) !default;
7
+ $btn-line-height-sm: 1.5 !default;
8
+
9
+ $btn-font-size-base: 1rem !default;
10
+ $btn-font-size-lg: 1.25rem !default;
11
+ $btn-font-size-sm: 1rem !default;
12
+ $btn-font-size-xs: 0.75rem !default;
13
+
14
+ $btn-padding-x-sm: 0.75rem !default;
15
+ $btn-padding-y-sm: 0.25rem !default;
16
+ $btn-min-width-sm: 8rem !default;
17
+
18
+ $btn-padding-x-lg: 1.25rem !default;
19
+ $btn-padding-y-lg: 0.75rem !default;
20
+ $btn-min-width-lg: 10rem !default;
21
+
22
+ $btn-border-radius: 2px !default;
23
+ $btn-round-border-radius: 50px !default;
24
+
25
+ $btn-state-modifier: 20% !default;
26
+ $btn-color-modifier: 10% !default;
27
+ $btn-outline-hover-state-modifier: 0.9 !default;
28
+ $btn-outline-active-state-modifier: 0.6 !default;
29
+ $btn-box-shadow-focus-modifier: 0.5 !default;
30
+
31
+ $btn-disabled-color: #646466;
32
+ $btn-box-shadow-color: rgba(0, 0, 0, 0.3);
33
+
34
+ $btn-swatches: (
35
+ // Gamut Next
36
+ "hyper": #3a10e5,
37
+ "red": #e91c11,
38
+ "navy": #10162f,
39
+ "white": #ffffff,
40
+ "grey": #c4c3c7,
41
+ // Gamut Classic
42
+ "brand-blue": #3069f0,
43
+ "brand-red": #fd4d3f,
44
+ "brand-yellow": #ffd500,
45
+ "brand-purple": #6400e4,
46
+ "brand-dark-blue": #141c3a,
47
+ // Editor
48
+ "mint": #34b3a0,
49
+ "darkmint": #1a7b72,
50
+ "greyblue": #354551
51
+ );
52
+
53
+ $color-black: #000000;
54
+ $color-white: #ffffff;
@@ -0,0 +1,43 @@
1
+ import { HTMLProps, ReactNode } from 'react';
2
+ import * as React from 'react';
3
+ import { ChildComponentDescriptor } from '../../typings/react';
4
+ export type ButtonDeprecatedBaseProps = Omit<HTMLProps<HTMLAnchorElement> & HTMLProps<HTMLButtonElement>, 'as' | 'size'> & {
5
+ /**
6
+ * Component type to wrap children with.
7
+ */
8
+ as?: ChildComponentDescriptor;
9
+ /**
10
+ * @remarks We would love to properly type this with generics, but cannot yet.
11
+ * @see https://github.com/Codecademy/gamut/pull/270#discussion_r270917147
12
+ * @see https://github.com/Microsoft/TypeScript/issues/21048
13
+ */
14
+ asProps?: any;
15
+ children?: ReactNode;
16
+ className?: string;
17
+ href?: string;
18
+ target?: string;
19
+ rel?: string;
20
+ /**
21
+ * Variant that displays the button as an inline link element, but maintains its semantic meaning as a button.
22
+ */
23
+ link?: boolean;
24
+ /**
25
+ * @remarks
26
+ * Technically, this is only ever a button event *or* a link event.
27
+ * We '&' them together for ease of usage.
28
+ */
29
+ onClick?: (event: React.MouseEvent<HTMLAnchorElement> & React.MouseEvent<HTMLButtonElement>) => void;
30
+ };
31
+ /**
32
+ * @deprecated
33
+ * This component is deprecated and is no longer supported.
34
+ *
35
+ * See [Anchor](https://gamut.codecademy.com/storybook/?path=/docs/typography-anchor--anchor) for similiar functionality
36
+ *
37
+ * @example
38
+ * import { Anchor } from '@codecademy/gamut';
39
+ *
40
+ * <Anchor variant="interface">Button</Anchor>
41
+ *
42
+ */
43
+ export declare const ButtonDeprecatedBase: React.FC<ButtonDeprecatedBaseProps>;
@@ -0,0 +1,71 @@
1
+ import cx from 'classnames';
2
+ import * as React from 'react';
3
+ import { omitProps } from '../../utils';
4
+ // eslint-disable-next-line gamut/no-css-standalone
5
+ import styles from './styles.module.scss';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const propKeys = ['children', 'className', 'href', 'link', 'onClick', 'target', 'rel'];
8
+ /**
9
+ * @deprecated
10
+ * This component is deprecated and is no longer supported.
11
+ *
12
+ * See [Anchor](https://gamut.codecademy.com/storybook/?path=/docs/typography-anchor--anchor) for similiar functionality
13
+ *
14
+ * @example
15
+ * import { Anchor } from '@codecademy/gamut';
16
+ *
17
+ * <Anchor variant="interface">Button</Anchor>
18
+ *
19
+ */
20
+
21
+ export const ButtonDeprecatedBase = props => {
22
+ const {
23
+ href,
24
+ className,
25
+ link,
26
+ onClick,
27
+ target,
28
+ rel
29
+ } = props;
30
+ const {
31
+ as: As,
32
+ asProps = {},
33
+ ...restOfProps
34
+ } = props;
35
+ const propsToTransfer = omitProps(propKeys, restOfProps);
36
+ const classes = cx(styles.basicBtn, className, {
37
+ [styles.basicLink]: link
38
+ });
39
+ const defaultProps = {
40
+ ...propsToTransfer,
41
+ className: classes,
42
+ onClick,
43
+ 'data-btn': true
44
+ };
45
+ if (As) {
46
+ return /*#__PURE__*/_jsx(As, {
47
+ ...defaultProps,
48
+ ...asProps
49
+ });
50
+ }
51
+ if (href) {
52
+ // Check if this is a popup and and appropriate rel props if they don't exist (see https://web.dev/external-anchors-use-rel-noopener/)
53
+ const anchorProps = {
54
+ target,
55
+ rel: target === '_blank' && !rel ? 'noopener noreferrer' : rel
56
+ };
57
+
58
+ // Anchor tag receives children content from propsToTransfer
59
+ // eslint-disable-next-line jsx-a11y/anchor-has-content
60
+ return /*#__PURE__*/_jsx("a", {
61
+ ...defaultProps,
62
+ ...anchorProps,
63
+ href: href
64
+ });
65
+ }
66
+
67
+ // eslint-disable-next-line react/button-has-type
68
+ return /*#__PURE__*/_jsx("button", {
69
+ ...defaultProps
70
+ });
71
+ };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import { ButtonDeprecatedBaseProps } from './ButtonDeprecatedBase';
3
+ export type AccordionButtonSize = 'normal' | 'large';
4
+ export type AccordionButtonTheme = 'blue' | 'plain' | 'yellow';
5
+ export type AccordionButtonDeprecatedProps = ButtonDeprecatedBaseProps & {
6
+ /**
7
+ * Whether the button should display as open or closed.
8
+ */
9
+ expanded?: boolean;
10
+ /**
11
+ * Determines the size of the button.
12
+ */
13
+ size?: 'normal' | 'large';
14
+ /**
15
+ * Visual theme for the clickable header button.
16
+ */
17
+ theme?: 'blue' | 'plain' | 'yellow';
18
+ };
19
+ /**
20
+ * @deprecated
21
+ * This component is in the old visual identity and will be updated soon.
22
+ *
23
+ * Check the [Gamut Board](https://www.notion.so/codecademy/Gamut-Status-Timeline-dd3c135d3848464ea6eb1b48e68fbb1d) for component status
24
+ */
25
+ export declare const AccordionButtonDeprecated: React.FC<AccordionButtonDeprecatedProps>;
@@ -1,50 +1,65 @@
1
1
  import { ArrowChevronDownIcon } from '@codecademy/gamut-icons';
2
2
  import cx from 'classnames';
3
- import React from 'react';
3
+ import * as React from 'react';
4
4
  import { ButtonDeprecated } from './ButtonDeprecated';
5
- // eslint-disable-next-line gamut/no-css-standalone -- vendored Gamut legacy accordion
5
+ import { ButtonDeprecatedBase } from './ButtonDeprecatedBase';
6
+ // eslint-disable-next-line gamut/no-css-standalone
6
7
  import styles from './styles.module.scss';
7
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
9
  const buttonThemes = {
9
10
  blue: {
11
+ component: ButtonDeprecated,
10
12
  props: {
11
13
  flat: true,
12
14
  theme: 'white'
13
15
  }
14
16
  },
15
17
  plain: {
18
+ component: ButtonDeprecated,
16
19
  props: {
17
20
  flat: true,
18
21
  theme: 'brand-dark-blue'
19
22
  }
23
+ },
24
+ yellow: {
25
+ component: ButtonDeprecatedBase,
26
+ props: {}
20
27
  }
21
28
  };
22
29
 
23
30
  /**
24
31
  * @deprecated
25
- * Vendored from Gamut for consumers that still rely on the legacy accordion API.
32
+ * This component is in the old visual identity and will be updated soon.
33
+ *
34
+ * Check the [Gamut Board](https://www.notion.so/codecademy/Gamut-Status-Timeline-dd3c135d3848464ea6eb1b48e68fbb1d) for component status
26
35
  */
36
+
27
37
  export const AccordionButtonDeprecated = ({
28
38
  children,
29
39
  className,
30
40
  expanded,
41
+ size = 'normal',
31
42
  theme = 'plain',
32
43
  ...baseProps
33
44
  }) => {
34
45
  const {
35
- props: buttonProps
46
+ component: ButtonComponent,
47
+ props
36
48
  } = buttonThemes[theme];
37
- return /*#__PURE__*/_jsxs(ButtonDeprecated, {
49
+ const iconSize = size === 'large' ? 30 : undefined;
50
+ return /*#__PURE__*/_jsxs(ButtonComponent, {
38
51
  "aria-expanded": expanded,
39
- className: cx(styles.accordionButton, styles[theme], className),
52
+ className: cx(styles.accordionButton, styles[theme], styles[size], className),
40
53
  ...baseProps,
41
- ...buttonProps,
54
+ ...props,
42
55
  children: [/*#__PURE__*/_jsx("span", {
43
56
  className: styles.children,
44
57
  children: children
45
58
  }), /*#__PURE__*/_jsx(ArrowChevronDownIcon, {
46
59
  "aria-hidden": true,
47
- className: cx(styles.expansionIcon, expanded && styles.expansionIconExpanded)
60
+ className: cx(styles.expansionIcon, expanded && styles.expansionIconExpanded),
61
+ height: iconSize,
62
+ width: iconSize
48
63
  })]
49
64
  });
50
65
  };
@@ -0,0 +1,62 @@
1
+ // button + class beats ButtonDeprecated .btn / .basicBtn center alignment
2
+ // when CSS module order varies across consuming apps.
3
+ button.accordionButton {
4
+ align-items: center;
5
+ display: flex;
6
+ font-weight: bold;
7
+ justify-content: space-between;
8
+ padding: 0.375rem 1rem;
9
+ text-align: left;
10
+ width: 100%;
11
+
12
+ .children {
13
+ font-weight: bold;
14
+ text-align: left;
15
+ }
16
+
17
+ &.blue {
18
+ color: #a5befa;
19
+ }
20
+
21
+ &.yellow {
22
+ background-color: #fff2b3;
23
+ border: solid #ffe359;
24
+ border-width: 1px 0;
25
+ transition: background-color 0.15s ease-in-out;
26
+
27
+ &:focus-visible {
28
+ border-color: #b37620;
29
+ }
30
+
31
+ &:focus,
32
+ &:hover {
33
+ background-color: #ffec8c;
34
+ }
35
+ }
36
+
37
+ &.large {
38
+ border-radius: 2px;
39
+ font-size: 1.5rem;
40
+
41
+ .children {
42
+ padding-top: 0.2rem;
43
+ }
44
+
45
+ .expansionIcon {
46
+ margin-left: 1rem;
47
+ }
48
+
49
+ @media only screen and (min-width: 64rem) {
50
+ font-size: 1.75rem;
51
+ }
52
+ }
53
+ }
54
+
55
+ .expansionIcon {
56
+ margin-left: 0.75rem;
57
+ transition: transform 0.35s ease-out;
58
+ }
59
+
60
+ .expansionIconExpanded {
61
+ transform: rotate(-180deg);
62
+ }
@@ -1,18 +1,39 @@
1
- import React, { ReactNode } from 'react';
2
- export type ChildrenOrExpandedRender = ReactNode | ((expanded: boolean) => ReactNode);
1
+ import * as React from 'react';
2
+ import { AccordionButtonSize, AccordionButtonTheme } from '../AccordionButtonDeprecated';
3
+ export type ChildrenOrExpandedRender = React.ReactNode | ((expanded: boolean) => React.ReactNode);
3
4
  export type AccordionDeprecatedProps = {
4
5
  children: ChildrenOrExpandedRender;
6
+ /**
7
+ * CSS class name added to the root area container.
8
+ */
5
9
  className?: string;
10
+ /**
11
+ * Whether the accordion should start off with expanded state.
12
+ */
6
13
  initiallyExpanded?: boolean;
14
+ /**
15
+ * Called when the top button is clicked.
16
+ *
17
+ * @param expanding - New expanded state the accordion will transition to.
18
+ */
7
19
  onClick?: (expanding: boolean) => void;
20
+ /**
21
+ * Visual size of the top button.
22
+ */
23
+ size?: AccordionButtonSize;
24
+ /**
25
+ * Visual theme of the top button.
26
+ */
27
+ theme?: AccordionButtonTheme;
28
+ /**
29
+ * Contents to place within the top button.
30
+ */
8
31
  top: ChildrenOrExpandedRender;
9
32
  };
10
33
  /**
11
34
  * @deprecated
12
- * Vendored from Gamut for consumers that still rely on the legacy accordion API.
35
+ * This component is in the old visual identity and will be updated soon.
36
+ *
37
+ * Check the [Gamut Board](https://www.notion.so/codecademy/Gamut-Status-Timeline-dd3c135d3848464ea6eb1b48e68fbb1d) for component status
13
38
  */
14
39
  export declare const AccordionDeprecated: React.FC<AccordionDeprecatedProps>;
15
- export { AccordionAreaDeprecated } from './AccordionAreaDeprecated';
16
- export type { AccordionAreaDeprecatedProps } from './AccordionAreaDeprecated';
17
- export { AccordionButtonDeprecated } from './AccordionButtonDeprecated';
18
- export type { AccordionButtonDeprecatedProps, AccordionButtonTheme, } from './AccordionButtonDeprecated';
@@ -1,34 +1,39 @@
1
- import React, { useState } from 'react';
2
- import { AccordionAreaDeprecated } from './AccordionAreaDeprecated';
3
- import { AccordionButtonDeprecated } from './AccordionButtonDeprecated';
1
+ import { useState } from 'react';
2
+ import * as React from 'react';
3
+ import { AccordionAreaDeprecated } from '../AccordionAreaDeprecated';
4
+ import { AccordionButtonDeprecated } from '../AccordionButtonDeprecated';
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
- const expandRenderer = (renderer, expanded) => renderer instanceof Function ? renderer(expanded) : renderer;
6
-
7
6
  /**
8
7
  * @deprecated
9
- * Vendored from Gamut for consumers that still rely on the legacy accordion API.
8
+ * This component is in the old visual identity and will be updated soon.
9
+ *
10
+ * Check the [Gamut Board](https://www.notion.so/codecademy/Gamut-Status-Timeline-dd3c135d3848464ea6eb1b48e68fbb1d) for component status
10
11
  */
12
+
11
13
  export const AccordionDeprecated = ({
12
14
  children,
13
15
  className,
14
16
  initiallyExpanded,
15
17
  onClick,
18
+ size,
19
+ theme,
16
20
  top
17
21
  }) => {
18
22
  const [expanded, setExpanded] = useState(!!initiallyExpanded);
23
+ const expandRenderer = renderer => renderer instanceof Function ? renderer(expanded) : renderer;
19
24
  return /*#__PURE__*/_jsx(AccordionAreaDeprecated, {
20
25
  className: className,
21
26
  expanded: expanded,
22
27
  top: /*#__PURE__*/_jsx(AccordionButtonDeprecated, {
23
28
  expanded: expanded,
29
+ size: size,
30
+ theme: theme,
24
31
  onClick: () => {
25
32
  setExpanded(!expanded);
26
33
  onClick?.(!expanded);
27
34
  },
28
- children: expandRenderer(top, expanded)
35
+ children: expandRenderer(top)
29
36
  }),
30
- children: expandRenderer(children, expanded)
37
+ children: expandRenderer(children)
31
38
  });
32
- };
33
- export { AccordionAreaDeprecated } from './AccordionAreaDeprecated';
34
- export { AccordionButtonDeprecated } from './AccordionButtonDeprecated';
39
+ };