@codecademy/styleguide 79.2.0-alpha.4dfb89.0 → 79.2.0-alpha.5cfa7b.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.
@@ -183,12 +183,13 @@ export const globalTypes = {
183
183
  },
184
184
  direction: {
185
185
  name: 'Direction',
186
- description: 'Text direction for the page',
186
+ description: 'Text direction (LTR or RTL)',
187
187
  defaultValue: 'ltr',
188
188
  toolbar: {
189
+ icon: 'arrowright',
189
190
  items: [
190
- { value: 'ltr', icon: 'arrowright', title: 'Left-To-Right' },
191
- { value: 'rtl', icon: 'arrowleft', title: 'Right-To-Left' },
191
+ { value: 'ltr', title: 'Left-to-Right (LTR)', icon: 'arrowright' },
192
+ { value: 'rtl', title: 'Right-to-Left (RTL)', icon: 'arrowleft' },
192
193
  ],
193
194
  showName: true,
194
195
  },
@@ -12,6 +12,8 @@ import {
12
12
  } from '@codecademy/gamut-styles/src';
13
13
  import { Theme } from '@emotion/react';
14
14
 
15
+ const STORYBOOK_CSP_NONCE = 'storybook-csp-nonce';
16
+
15
17
  /**
16
18
  * Story functions must be called as a regular function to avoid full-remounts
17
19
  * See: https://github.com/storybookjs/storybook/issues/12255
@@ -68,9 +70,8 @@ export const withEmotion = (Story: any, context: GlobalsContext) => {
68
70
  alwaysSetVariables
69
71
  bg={themeBackground[colorMode]}
70
72
  ref={storyRef}
71
- dir={direction}
72
73
  >
73
- {Story()}
74
+ <div dir={direction}>{Story()}</div>
74
75
  </Background>
75
76
  </GamutProvider>
76
77
  );
@@ -86,9 +87,8 @@ export const withEmotion = (Story: any, context: GlobalsContext) => {
86
87
  alwaysSetVariables
87
88
  bg={themeBackground[colorMode]}
88
89
  ref={storyRef}
89
- dir={direction}
90
90
  >
91
- {Story()}
91
+ <div dir={direction}>{Story()}</div>
92
92
  </Background>
93
93
  </GamutProvider>
94
94
  );
package/CHANGELOG.md CHANGED
@@ -3,13 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [79.2.0-alpha.4dfb89.0](https://github.com/Codecademy/gamut/compare/@codecademy/styleguide@79.1.2...@codecademy/styleguide@79.2.0-alpha.4dfb89.0) (2026-02-20)
6
+ ## [79.2.0-alpha.5cfa7b.0](https://github.com/Codecademy/gamut/compare/@codecademy/styleguide@79.1.3...@codecademy/styleguide@79.2.0-alpha.5cfa7b.0) (2026-03-10)
7
7
 
8
8
  ### Features
9
9
 
10
+ - Layout related logical CSS props ([#3267](https://github.com/Codecademy/gamut/issues/3267)) ([b43cbf1](https://github.com/Codecademy/gamut/commit/b43cbf1256fbf292a141c77a3251fd95f0085a04))
11
+ - logical properties for inset and overflow ([#3269](https://github.com/Codecademy/gamut/issues/3269)) ([18a4d7f](https://github.com/Codecademy/gamut/commit/18a4d7fa7e203b847a9f2b7defdd91345bb30194))
10
12
  - Updates to ThemeProvider, tokens, and transform to allow Logical vs Physical prop resolution ([#3234](https://github.com/Codecademy/gamut/issues/3234)) ([7efbb9a](https://github.com/Codecademy/gamut/commit/7efbb9aabcd07dc6429432d007eaa5603ac1d70c))
11
13
  - Updates to ThemeProvider, tokens, and transform to allow Logical vs Physical prop resolution ([#3234](https://github.com/Codecademy/gamut/issues/3234)) ([567a6ae](https://github.com/Codecademy/gamut/commit/567a6aeffb3e8628db4b5c9a37dab965b716d969))
12
14
 
15
+ ### [79.1.3](https://github.com/Codecademy/gamut/compare/@codecademy/styleguide@79.1.2...@codecademy/styleguide@79.1.3) (2026-03-02)
16
+
17
+ ### Bug Fixes
18
+
19
+ - **GamutProvider:** CSP improvements ([1026353](https://github.com/Codecademy/gamut/commit/10263537c190aff0e5686872da2be2a30b1d9201)), closes [/github.com/adobe/react-spectrum/issues/8273#issuecomment-3897820426](https://github.com/Codecademy//github.com/adobe/react-spectrum/issues/8273/issues/issuecomment-3897820426)
20
+
13
21
  ### [79.1.2](https://github.com/Codecademy/gamut/compare/@codecademy/styleguide@79.1.1...@codecademy/styleguide@79.1.2) (2026-02-12)
14
22
 
15
23
  **Note:** Version bump only for package @codecademy/styleguide
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@codecademy/styleguide",
3
3
  "description": "Styleguide & Component library for codecademy.com",
4
- "version": "79.2.0-alpha.4dfb89.0",
4
+ "version": "79.2.0-alpha.5cfa7b.0",
5
5
  "author": "Codecademy Engineering",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
10
10
  "repository": "git@github.com:Codecademy/gamut.git",
11
- "gitHead": "c78f864e1d6e187f4957ee587e92bf459dfb79c2"
11
+ "gitHead": "98e232df10565ce248ce6bb11f32f7a2a0d16c1c"
12
12
  }
@@ -1,8 +1,9 @@
1
- import { Meta } from '@storybook/blocks';
1
+ import { Canvas, Meta } from '@storybook/blocks';
2
2
 
3
3
  import { AboutHeader, TokenTable } from '~styleguide/blocks';
4
4
 
5
5
  import { defaultColumns, getPropRows } from '../../shared/elements';
6
+ import * as LayoutStories from './Layout.stories';
6
7
 
7
8
  export const parameters = {
8
9
  title: 'Layout',
@@ -11,12 +12,22 @@ export const parameters = {
11
12
  status: 'updating',
12
13
  };
13
14
 
14
- <Meta title="Foundations/System/Props/Layout" />
15
+ <Meta title="Foundations/System/Props/Layout" of={LayoutStories} />
15
16
 
16
17
  <AboutHeader {...parameters} />
17
18
 
18
19
  Layout props control the visual structure and dimensions of elements. These properties determine how components take up space, their display behavior, and how they align within their containers. Use these props to set widths, heights, overflow behavior, and container types for responsive layouts.
19
20
 
21
+ ## Examples
22
+
23
+ ### Overflow X
24
+
25
+ <Canvas of={LayoutStories.OverflowXExample} />
26
+
27
+ ### Overflow Y
28
+
29
+ <Canvas of={LayoutStories.OverflowYExample} />
30
+
20
31
  ```tsx
21
32
  import styled from '@emotion/styled';
22
33
  import { system } from '@codecademy/gamut-styles';
@@ -31,4 +42,14 @@ const LayoutExample = styled.div(system.layout);
31
42
  />;
32
43
  ```
33
44
 
45
+ ## Examples
46
+
47
+ ### Width
48
+
49
+ <Canvas of={LayoutStories.WidthExample} />
50
+
51
+ ### Direction
52
+
53
+ <Canvas of={LayoutStories.DirectionExample} />
54
+
34
55
  <TokenTable rows={getPropRows('layout')} columns={defaultColumns} />
@@ -0,0 +1,85 @@
1
+ import { Box, Markdown } from '@codecademy/gamut';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta: Meta<typeof Box> = {
5
+ title: 'Foundations/System/Props/Layout',
6
+ component: Box,
7
+ };
8
+
9
+ export default meta;
10
+ type Story = StoryObj<typeof Box>;
11
+
12
+ export const OverflowXExample: Story = {
13
+ render: () => (
14
+ <Box
15
+ bg="background-selected"
16
+ overflowX="scroll"
17
+ p={16}
18
+ whiteSpace="nowrap"
19
+ width="200px"
20
+ >
21
+ <Box
22
+ bg="primary"
23
+ color="background-contrast"
24
+ display="inline-block"
25
+ p={8}
26
+ >
27
+ This content is wider than its container and has{' '}
28
+ <Markdown text="`overflowX='scroll'`." /> Inspect the example to see
29
+ what CSS properties are rendered.
30
+ </Box>
31
+ </Box>
32
+ ),
33
+ };
34
+
35
+ export const OverflowYExample: Story = {
36
+ render: () => (
37
+ <Box bg="background-selected" height="100px" overflowY="scroll" p={16}>
38
+ <Box bg="primary" color="background-contrast" p={8}>
39
+ This content is taller than its container and has{' '}
40
+ <Markdown text="`overflowY='scroll'`." /> Inspect the example to see
41
+ what CSS properties are rendered.
42
+ <Box mt={16}>Line 2</Box>
43
+ <Box mt={16}>Line 3</Box>
44
+ <Box mt={16}>Line 4</Box>
45
+ <Box mt={16}>Line 5</Box>
46
+ </Box>
47
+ </Box>
48
+ ),
49
+ };
50
+
51
+ export const WidthExample: Story = {
52
+ render: () => (
53
+ <Box bg="background-selected" p={16}>
54
+ <Box
55
+ bg="primary"
56
+ color="background-contrast"
57
+ height="300px"
58
+ p={16}
59
+ width="50%"
60
+ >
61
+ This box has <Markdown text="`width='50%' and height='300px'`." />{' '}
62
+ Inspect the box to see the rendered CSS property.
63
+ </Box>
64
+ </Box>
65
+ ),
66
+ };
67
+
68
+ export const DirectionExample: Story = {
69
+ render: () => (
70
+ <Box display="flex" flexDirection="row" gap={16}>
71
+ <Box bg="background-selected" p={16} width="50%">
72
+ <Box bg="primary" color="background-contrast" direction="ltr" p={16}>
73
+ <Markdown text="`direction='ltr'`." /> Left-to-right text direction
74
+ (default for English).
75
+ </Box>
76
+ </Box>
77
+ <Box bg="background-selected" p={16} width="50%">
78
+ <Box bg="primary" color="background-contrast" direction="rtl" p={16}>
79
+ <Markdown text="`direction='rtl'`." /> Right-to-left text direction
80
+ (used for Arabic, Hebrew, etc.).
81
+ </Box>
82
+ </Box>
83
+ </Box>
84
+ ),
85
+ };
@@ -68,7 +68,7 @@ GamutProvider handles a few critical tasks that need to happen in order for comp
68
68
  - **Next** `_app.tsx`
69
69
  - **Gatsby** `gatsby-ssr.js` `gatsby-browser.js` and use `wrapRootElement` in each.
70
70
 
71
- 4. Add required types for your theme, which will determine what props Gamut components allow.
71
+ 5. Add required types for your theme, which will determine what props Gamut components allow.
72
72
 
73
73
  ```tsx
74
74
  // theme.d.ts
@@ -84,7 +84,7 @@ declare module '@emotion/react' {
84
84
 
85
85
  For more information this declaration please checkout the [official emotion documentation](https://emotion.sh/docs/typescript#define-a-theme)!
86
86
 
87
- 5. Start Building!
87
+ 6. Start Building!
88
88
 
89
89
  ```tsx
90
90
  import { Background } from '@codecademy/gamut-styles';
@@ -96,3 +96,15 @@ export const App = () => (
96
96
  </Background>
97
97
  );
98
98
  ```
99
+
100
+ ### Content Security Policy (CSP)
101
+
102
+ If your app uses a strict Content-Security-Policy (e.g. `style-src` without `'unsafe-inline'`), pass a nonce to `GamutProvider` so Emotion and other Gamut-managed style tags are allowed:
103
+
104
+ ```tsx
105
+ <GamutProvider nonce={yourCspNonce}>
106
+ <App />
107
+ </GamutProvider>
108
+ ```
109
+
110
+ Your nonce should be the same value you use in your CSP header (e.g. `style-src 'self' 'nonce-{value}'`).