@carbon-labs/react-animated-header 0.3.0 → 0.4.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 (24) hide show
  1. package/es/__stories__/AnimatedHeader.stories.d.ts +497 -587
  2. package/es/__stories__/data/index.d.ts +18 -8
  3. package/es/components/AnimatedHeader/AnimatedHeader.d.ts +26 -15
  4. package/es/components/AnimatedHeader/AnimatedHeader.js +63 -65
  5. package/es/components/Tiles/AIPromptTile/AIPromptTile.d.ts +3 -3
  6. package/es/components/Tiles/AIPromptTile/AIPromptTile.js +7 -5
  7. package/es/components/Tiles/GlassTile/GlassTile.d.ts +3 -3
  8. package/es/components/Tiles/GlassTile/GlassTile.js +4 -4
  9. package/es/node_modules/@carbon/icons-react/es/Icon.js +1 -1
  10. package/lib/__stories__/AnimatedHeader.stories.d.ts +497 -587
  11. package/lib/__stories__/data/index.d.ts +18 -8
  12. package/lib/components/AnimatedHeader/AnimatedHeader.d.ts +26 -15
  13. package/lib/components/AnimatedHeader/AnimatedHeader.js +62 -64
  14. package/lib/components/Tiles/AIPromptTile/AIPromptTile.d.ts +3 -3
  15. package/lib/components/Tiles/AIPromptTile/AIPromptTile.js +7 -5
  16. package/lib/components/Tiles/GlassTile/GlassTile.d.ts +3 -3
  17. package/lib/components/Tiles/GlassTile/GlassTile.js +4 -4
  18. package/lib/node_modules/@carbon/icons-react/es/Icon.js +1 -1
  19. package/package.json +2 -2
  20. package/scss/AnimatedHeader/animated-header.scss +17 -11
  21. package/scss/Tiles/AIPromptTile/ai-prompt-tile.scss +11 -4
  22. package/scss/Tiles/GlassTile/glass-tile.scss +4 -2
  23. /package/es/node_modules/@carbon/{icon-helpers → icons-react/node_modules/@carbon/icon-helpers}/es/index.js +0 -0
  24. /package/lib/node_modules/@carbon/{icon-helpers → icons-react/node_modules/@carbon/icon-helpers}/es/index.js +0 -0
@@ -1,11 +1,3 @@
1
- /**
2
- * @license
3
- *
4
- * Copyright IBM Corp. 2025
5
- *
6
- * This source code is licensed under the Apache-2.0 license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
1
  export const workspaceData: {
10
2
  id: string;
11
3
  text: string;
@@ -45,3 +37,21 @@ export const headerTiles: ({
45
37
  subtitle?: undefined;
46
38
  })[];
47
39
  })[];
40
+ export namespace tasksConfigButton {
41
+ let type: string;
42
+ namespace button {
43
+ export let href: string;
44
+ export { Add as icon };
45
+ export let text: string;
46
+ let type_1: "tertiary";
47
+ export { type_1 as type };
48
+ }
49
+ }
50
+ export namespace tasksConfigDropdown {
51
+ let type_2: string;
52
+ export { type_2 as type };
53
+ export namespace dropdown {
54
+ let label: string;
55
+ }
56
+ }
57
+ import { Add } from '@carbon/react/icons';
@@ -1,17 +1,29 @@
1
1
  import React from 'react';
2
2
  import { ButtonKind } from '@carbon/react';
3
3
  /** Animated Header */
4
+ export interface TasksConfig {
5
+ type: 'button' | 'dropdown' | string;
6
+ button?: {
7
+ href?: string;
8
+ icon?: any;
9
+ text?: string;
10
+ type?: ButtonKind;
11
+ };
12
+ dropdown?: {
13
+ label?: string;
14
+ };
15
+ }
4
16
  export interface SelectedWorkspace {
5
17
  id: string;
6
18
  text: string;
7
19
  }
8
20
  export interface Tile {
9
- id: string;
10
21
  href: string | null;
11
- title: string | null;
12
- subtitle: string | null;
22
+ id: string;
13
23
  mainIcon: string | null;
14
- secondaryIcon: string | null;
24
+ secondaryIcon?: string | null;
25
+ subtitle?: string | null;
26
+ title: string | null;
15
27
  }
16
28
  export interface TileGroup {
17
29
  id: number;
@@ -19,21 +31,20 @@ export interface TileGroup {
19
31
  tiles: Tile[];
20
32
  }
21
33
  export interface AnimatedHeaderProps {
22
- name?: string;
34
+ allTiles: TileGroup[];
35
+ allWorkspaces?: SelectedWorkspace[];
23
36
  description?: string;
24
- buttonText?: string;
25
- buttonType?: ButtonKind;
26
- buttonIcon?: any;
27
- headerDropdown?: boolean;
37
+ headerAnimation?: object;
38
+ headerStatic?: React.JSX.Element;
28
39
  productName?: string;
29
- selectedWorkspace?: SelectedWorkspace[] | any;
30
- setSelectedWorkspace: (e: any) => void;
31
- allWorkspaces?: SelectedWorkspace[];
32
40
  selectedTileGroup: TileGroup[] | any;
41
+ selectedWorkspace?: SelectedWorkspace | any;
33
42
  setSelectedTileGroup: (e: any) => void;
34
- allTiles: TileGroup[];
35
- headerAnimation?: object;
36
- headerStatic?: React.JSX.Element;
43
+ setSelectedWorkspace: (e: any) => void;
44
+ tasksConfig?: TasksConfig;
45
+ userName?: string;
46
+ welcomeText?: string;
47
+ workspaceLabel?: string;
37
48
  }
38
49
  declare const AnimatedHeader: React.FC<AnimatedHeaderProps>;
39
50
  export default AnimatedHeader;
@@ -25,25 +25,24 @@ var _PauseFilled, _PlayFilledAlt;
25
25
 
26
26
  const AnimatedHeader = _ref => {
27
27
  let {
28
- name,
28
+ allTiles,
29
+ allWorkspaces,
29
30
  description,
30
- buttonText,
31
- buttonType = 'tertiary',
32
- buttonIcon = null,
33
- headerDropdown = false,
31
+ headerAnimation,
32
+ headerStatic,
34
33
  productName = '[Product name]',
35
- selectedWorkspace,
36
- setSelectedWorkspace,
37
- allWorkspaces,
38
34
  selectedTileGroup,
35
+ selectedWorkspace,
39
36
  setSelectedTileGroup,
40
- allTiles,
41
- headerAnimation,
42
- headerStatic
37
+ setSelectedWorkspace,
38
+ tasksConfig,
39
+ userName,
40
+ welcomeText,
41
+ workspaceLabel = `Open in: ${userName}'s workspace` || `Select a workspace`
43
42
  } = _ref;
44
43
  const prefix = usePrefix.usePrefix();
45
44
  const blockClass = `${prefix}--animated-header`;
46
- let animationContainer = /*#__PURE__*/React.createRef();
45
+ const animationContainer = /*#__PURE__*/React.createRef();
47
46
  const [open, setOpen] = React.useState(true);
48
47
  const [playing, setPlaying] = React.useState(true);
49
48
  const [headingTextAnimation, setHeadingTextAnimation] = React.useState('');
@@ -67,7 +66,7 @@ const AnimatedHeader = _ref => {
67
66
  setPlaying(!playing);
68
67
  };
69
68
  React.useEffect(() => {
70
- let animation = lottie.default.loadAnimation({
69
+ const animation = lottie.default.loadAnimation({
71
70
  container: animationContainer.current,
72
71
  animationData: headerAnimation,
73
72
  renderer: 'svg',
@@ -88,7 +87,7 @@ const AnimatedHeader = _ref => {
88
87
  animation.setSpeed(lottieLoopSpeed);
89
88
  animation.playSegments([animationData.markers.at(1).tm, animationData.op], true);
90
89
  }
91
- if (!!isReduced) {
90
+ if (isReduced) {
92
91
  // reduced motion on
93
92
  animation.addEventListener('DOMLoaded', reducedMotion);
94
93
  } else {
@@ -100,7 +99,12 @@ const AnimatedHeader = _ref => {
100
99
  // Run Looped Animation
101
100
  animation.addEventListener('complete', loop);
102
101
  }
103
- }, []);
102
+ return () => {
103
+ animation?.removeEventListener('DOMLoaded', reducedMotion);
104
+ animation?.removeEventListener('DOMLoaded', load);
105
+ animation?.removeEventListener('complete', loop);
106
+ };
107
+ }, [animationContainer, headerAnimation, isReduced]);
104
108
  return /*#__PURE__*/React.createElement("section", {
105
109
  className: `${blockClass} ${!open && collapsed}`
106
110
  }, /*#__PURE__*/React.createElement(react.Grid, null, /*#__PURE__*/React.createElement("div", {
@@ -125,14 +129,14 @@ const AnimatedHeader = _ref => {
125
129
  lg: 16
126
130
  }, /*#__PURE__*/React.createElement(react.Tooltip, {
127
131
  align: "bottom",
128
- label: `Welcome, ${name}`
132
+ label: `${welcomeText}, ${userName}`
129
133
  }, /*#__PURE__*/React.createElement("h1", {
130
134
  className: `${blockClass}__heading ${headingTextAnimation}`
131
135
  }, /*#__PURE__*/React.createElement("span", {
132
136
  className: `${blockClass}__heading-welcome`
133
- }, "Welcome,", ' '), /*#__PURE__*/React.createElement("span", {
137
+ }, welcomeText, ",", ' '), /*#__PURE__*/React.createElement("span", {
134
138
  className: `${blockClass}__heading-name`
135
- }, name)))), (description || buttonText || headerDropdown) && /*#__PURE__*/React.createElement(react.Column, {
139
+ }, userName)))), (description || tasksConfig && tasksConfig.type === 'button' && tasksConfig.button?.text || tasksConfig && tasksConfig.type === 'dropdown' && tasksConfig.dropdown?.label) && /*#__PURE__*/React.createElement(react.Column, {
136
140
  sm: 4,
137
141
  md: 8,
138
142
  lg: 4,
@@ -142,20 +146,19 @@ const AnimatedHeader = _ref => {
142
146
  label: description
143
147
  }, /*#__PURE__*/React.createElement("h2", {
144
148
  className: `${blockClass}__description`
145
- }, description)), buttonText && /*#__PURE__*/React.createElement(react.Button, {
149
+ }, description)), tasksConfig?.button?.text && /*#__PURE__*/React.createElement(react.Button, {
146
150
  className: `${blockClass}__button`,
147
- kind: buttonType,
148
- renderIcon: buttonIcon
149
- }, buttonText), !buttonText && headerDropdown && allTiles && /*#__PURE__*/React.createElement("div", {
151
+ kind: tasksConfig.button.type,
152
+ renderIcon: tasksConfig.button.icon,
153
+ href: tasksConfig.button.href
154
+ }, tasksConfig.button.text), !tasksConfig?.button?.text && tasksConfig && tasksConfig.type === 'dropdown' && allTiles && /*#__PURE__*/React.createElement("div", {
150
155
  className: `${blockClass}__header-dropdown--container`
151
156
  }, /*#__PURE__*/React.createElement(react.Dropdown, {
152
157
  id: `${blockClass}__header-dropdown`,
153
158
  className: `${blockClass}__header-dropdown`,
154
159
  size: "md",
155
- autoAlign: true,
156
160
  titleText: "Label",
157
- initialSelectedItem: allTiles[0],
158
- label: allTiles[0].name || 'Select an option below',
161
+ label: tasksConfig.dropdown?.label || allTiles[0].name,
159
162
  hideLabel: true,
160
163
  type: "inline",
161
164
  items: allTiles,
@@ -173,7 +176,7 @@ const AnimatedHeader = _ref => {
173
176
  className: `${blockClass}__workspace`,
174
177
  size: "sm",
175
178
  titleText: "Label",
176
- label: `Open in: ${name}'s workspace` || 'Select a workspace',
179
+ label: workspaceLabel,
177
180
  hideLabel: true,
178
181
  type: "inline",
179
182
  items: allWorkspaces,
@@ -219,76 +222,71 @@ const AnimatedHeader = _ref => {
219
222
  AnimatedHeader.displayName = 'Animated Header';
220
223
  AnimatedHeader.propTypes = {
221
224
  /**
222
- * Specify an optional className to be added to your Animated Header
223
- */
224
- className: PropTypes.string,
225
- /**
226
- * Specify the current username of active user
225
+ * Array of each tile group setup
227
226
  */
228
- name: PropTypes.string,
227
+ allTiles: PropTypes.arrayOf(PropTypes.object),
229
228
  /**
230
- * Provide short sentence in max. 3 lines related to product context
229
+ * Array of all workspace options
231
230
  */
232
- description: PropTypes.string,
231
+ allWorkspaces: PropTypes.arrayOf(PropTypes.object),
233
232
  /**
234
- * (optional), Provide content that needs highest attention from
235
- * the user or content that triggers an action and allow users to
236
- * directly start working and gain value (within one click)
233
+ * Specify an optional className to be added to your Animated Header
237
234
  */
238
- buttonText: PropTypes.string,
235
+ className: PropTypes.string,
239
236
  /**
240
- * Specify the carbon button type
237
+ * Provide short sentence in max. 3 lines related to product context
241
238
  */
242
- buttonType: react.ButtonKinds,
239
+ description: PropTypes.string,
243
240
  /**
244
- * (optional), Provide the renderIcon used in the button
245
- * ex. Launch, Add, ect.
241
+ * In-product imagery / lottie animation (.json) dim. 1312 x 738
242
+ * (to update headerAnimation content storybook requires remount in toolbar)
246
243
  */
247
- buttonIcon: PropTypes.any,
244
+ headerAnimation: PropTypes.object,
248
245
  /**
249
- * Header dropdown menu when button/buttonText is not in use
246
+ * In-product imagery / static imagery dim. 1312 x 738
247
+ * Only active when headerAnimation is not in use
250
248
  */
251
- headerDropdown: PropTypes.bool,
249
+ headerStatic: PropTypes.object,
252
250
  /**
253
251
  * Provide current product name
254
252
  */
255
253
  productName: PropTypes.string,
254
+ /**
255
+ * The tile group that is active in the header
256
+ * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
257
+ */
258
+ selectedTileGroup: PropTypes.object,
256
259
  /**
257
260
  * Object containing workspace selection
258
261
  * `Open in: "_"`
259
262
  */
260
263
  selectedWorkspace: PropTypes.object,
261
264
  /**
262
- * Provide function to be called when switching workspace selection
263
- */
264
- setSelectedWorkspace: PropTypes.func,
265
- /**
266
- * Array of all workspace options
265
+ * Provide function to be called when switching selected tile group
267
266
  */
268
- allWorkspaces: PropTypes.arrayOf(PropTypes.object),
267
+ setSelectedTileGroup: PropTypes.func,
269
268
  /**
270
- * The tile group that is active in the header
271
- * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
269
+ * Provide function to be called when switching workspace selection
272
270
  */
273
- selectedTileGroup: PropTypes.object,
271
+ setSelectedWorkspace: PropTypes.func,
274
272
  /**
275
- * Provide function to be called when switching selected tile group
273
+ * Configuration for Carbon button or dropdown menu in header. Customized
274
+ * tasks are used to allow users that have multiple roles and permissions
275
+ * to experience better tailored content based on their need.
276
276
  */
277
- setSelectedTileGroup: PropTypes.func,
277
+ tasksConfig: PropTypes.object,
278
278
  /**
279
- * Array of each tile group setup
279
+ * Specify the current username of active user
280
280
  */
281
- allTiles: PropTypes.arrayOf(PropTypes.object),
281
+ userName: PropTypes.string,
282
282
  /**
283
- * In-product imagery / lottie animation (.json) dim. 1312 x 738
284
- * (to update headerAnimation content storybook requires remount in toolbar)
283
+ * Specify the current welcome text on the header
285
284
  */
286
- headerAnimation: PropTypes.object,
285
+ welcomeText: PropTypes.string,
287
286
  /**
288
- * In-product imagery / static imagery dim. 1312 x 738
289
- * Only active when headerAnimation is not in use
287
+ * Specify the default workspace label above the tiles
290
288
  */
291
- headerStatic: PropTypes.object
289
+ workspaceLabel: PropTypes.string
292
290
  };
293
291
 
294
292
  exports.default = AnimatedHeader;
@@ -9,12 +9,12 @@
9
9
  import React from 'react';
10
10
  /** Primary UI component for user interaction */
11
11
  interface AIPromptTileProps {
12
- id?: string;
13
12
  href?: string;
14
- open?: boolean;
13
+ id?: string;
15
14
  mainIcon?: string;
16
- title?: string;
15
+ open?: boolean;
17
16
  productName?: string;
17
+ title?: string;
18
18
  }
19
19
  export declare const AIPromptTile: React.FC<AIPromptTileProps>;
20
20
  export {};
@@ -19,12 +19,12 @@ var _AILabel;
19
19
 
20
20
  const AIPromptTile = _ref => {
21
21
  let {
22
- id,
23
22
  href,
24
- open,
23
+ id,
25
24
  mainIcon,
26
- title,
27
- productName
25
+ open,
26
+ productName,
27
+ title
28
28
  } = _ref;
29
29
  const prefix = usePrefix.usePrefix();
30
30
  const blockClass = `${prefix}--animated-header__ai-prompt-tile`;
@@ -37,7 +37,9 @@ const AIPromptTile = _ref => {
37
37
  };
38
38
  const openInNewTab = url => {
39
39
  const newWindow = window.open(url, '_blank', 'noopener,noreferrer');
40
- if (newWindow) newWindow.opener = null;
40
+ if (newWindow) {
41
+ newWindow.opener = null;
42
+ }
41
43
  };
42
44
  const handleTextInputKeyDown = event => {
43
45
  if (event.key === 'Enter') {
@@ -9,13 +9,13 @@
9
9
  import React from 'react';
10
10
  /** Primary UI component for user interaction */
11
11
  interface GlassTileProps {
12
- id?: string;
13
12
  href?: string;
14
- open?: boolean;
13
+ id?: string;
15
14
  mainIcon?: string;
15
+ open?: boolean;
16
16
  secondaryIcon?: string;
17
- title?: string;
18
17
  subtitle?: string;
18
+ title?: string;
19
19
  }
20
20
  export declare const GlassTile: React.FC<GlassTileProps>;
21
21
  export {};
@@ -16,13 +16,13 @@ var usePrefix = require('../../../node_modules/@carbon-labs/utilities/es/usePref
16
16
 
17
17
  const GlassTile = _ref => {
18
18
  let {
19
- id,
20
19
  href,
21
- open,
20
+ id,
22
21
  mainIcon,
22
+ open,
23
23
  secondaryIcon,
24
- title,
25
- subtitle
24
+ subtitle,
25
+ title
26
26
  } = _ref;
27
27
  const prefix = usePrefix.usePrefix();
28
28
  const blockClass = `${prefix}--animated-header__glass-tile`;
@@ -9,7 +9,7 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
- var index = require('../../icon-helpers/es/index.js');
12
+ var index = require('../node_modules/@carbon/icon-helpers/es/index.js');
13
13
  var PropTypes = require('prop-types');
14
14
  var React = require('react');
15
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbon-labs/react-animated-header",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -32,5 +32,5 @@
32
32
  "devDependencies": {
33
33
  "@carbon-labs/utilities": "canary"
34
34
  },
35
- "gitHead": "df4ac10450dbb1a5deb4684898c5573f9d697194"
35
+ "gitHead": "ea0564e6ceea7d3bdcc08472ac8825f05299083c"
36
36
  }
@@ -16,20 +16,24 @@
16
16
 
17
17
  $prefix: 'clabs--animated-header' !default;
18
18
 
19
+ :root {
20
+ @include theme(themes.$g10);
21
+ }
22
+
19
23
  [data-carbon-theme='white'] {
20
- @include theme(themes.$white, true);
24
+ @include theme(themes.$white);
21
25
  }
22
26
 
23
27
  [data-carbon-theme='g10'] {
24
- @include theme(themes.$g10, true);
28
+ @include theme(themes.$g10);
25
29
  }
26
30
 
27
31
  [data-carbon-theme='g90'] {
28
- @include theme(themes.$g90, true);
32
+ @include theme(themes.$g90);
29
33
  }
30
34
 
31
35
  [data-carbon-theme='g100'] {
32
- @include theme(themes.$g100, true);
36
+ @include theme(themes.$g100);
33
37
  }
34
38
 
35
39
  body {
@@ -42,9 +46,9 @@ body {
42
46
  .#{$prefix} {
43
47
  position: relative;
44
48
  display: flex;
45
- overflow: hidden;
49
+ overflow: visible;
46
50
  background: $background;
47
- inline-size: 100vw;
51
+ inline-size: 100%;
48
52
  max-block-size: 90vh;
49
53
  outline: 1px solid transparent;
50
54
  padding-block: 0 $spacing-10;
@@ -58,6 +62,7 @@ body {
58
62
  .#{$prefix}__static--container {
59
63
  position: absolute;
60
64
  display: flex;
65
+ overflow: hidden;
61
66
  justify-content: flex-end;
62
67
 
63
68
  block-size: 100%;
@@ -125,6 +130,7 @@ body {
125
130
  padding-inline: var(--cds-grid-margin);
126
131
  }
127
132
 
133
+ :root .#{$prefix}__container--gradient,
128
134
  [data-carbon-theme='white'] .#{$prefix}__container--gradient,
129
135
  [data-carbon-theme='g10'] .#{$prefix}__container--gradient {
130
136
  background: linear-gradient(0deg, #e0e0e0bf 0%, transparent 100%);
@@ -295,6 +301,7 @@ body {
295
301
  .#{$prefix}__lottie-animation--container {
296
302
  position: absolute;
297
303
  display: flex;
304
+ overflow: hidden;
298
305
  justify-content: flex-end;
299
306
 
300
307
  block-size: 100%;
@@ -344,6 +351,7 @@ body {
344
351
  inset-inline-end: 0;
345
352
  }
346
353
 
354
+ :root .#{$prefix}__button-collapse--gradient,
347
355
  [data-carbon-theme='white'] .#{$prefix}__button-collapse--gradient,
348
356
  [data-carbon-theme='g10'] .#{$prefix}__button-collapse--gradient {
349
357
  background: radial-gradient(
@@ -372,6 +380,7 @@ body {
372
380
  }
373
381
 
374
382
  .#{$prefix}--collapsed {
383
+ overflow: hidden;
375
384
  padding: 0;
376
385
  max-block-size: $spacing-09;
377
386
  outline: 1px solid $border-subtle-00;
@@ -395,10 +404,6 @@ body {
395
404
  display: none;
396
405
  }
397
406
 
398
- .#{$prefix}__workspace {
399
- margin-block-start: $spacing-06;
400
- }
401
-
402
407
  .#{$prefix}__content {
403
408
  display: none;
404
409
  }
@@ -437,6 +442,7 @@ body {
437
442
 
438
443
  .#{$prefix}__content {
439
444
  display: flex;
445
+ margin-block-start: $spacing-06;
440
446
  }
441
447
 
442
448
  .#{$prefix}__button-collapse--container .cds--popover-container {
@@ -493,7 +499,7 @@ body {
493
499
  background: linear-gradient(90deg, $background 25%, transparent 75%);
494
500
  }
495
501
 
496
- .#{$prefix}__workspace {
502
+ .#{$prefix}__content {
497
503
  margin-block-start: 0;
498
504
  }
499
505
 
@@ -19,7 +19,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
19
19
  display: flex;
20
20
  -webkit-backdrop-filter: blur(3px);
21
21
  backdrop-filter: blur(3px);
22
- min-block-size: 176px;
22
+ min-block-size: 192px;
23
23
  text-decoration: none;
24
24
  }
25
25
 
@@ -35,14 +35,14 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
35
35
  flex: 1;
36
36
  flex-direction: column;
37
37
  justify-content: flex-start;
38
- padding: $spacing-05 $spacing-05 $spacing-03 $spacing-05;
38
+ padding: $spacing-05;
39
39
  background-color: transparent;
40
40
  color: $text-primary;
41
- gap: $spacing-05;
42
41
  opacity: 1;
43
42
  transition: opacity 500ms linear;
44
43
  }
45
44
 
45
+ :root .#{$prefix}--body::before,
46
46
  [data-carbon-theme='white'] .#{$prefix}--body::before,
47
47
  [data-carbon-theme='g10'] .#{$prefix}--body::before {
48
48
  background-color: $layer-01;
@@ -101,6 +101,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
101
101
  z-index: 3;
102
102
  display: flex;
103
103
  justify-content: space-between;
104
+ margin-block-end: $spacing-05;
104
105
  }
105
106
 
106
107
  .#{$prefix}--title {
@@ -127,7 +128,12 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
127
128
  z-index: 3;
128
129
  display: flex;
129
130
  justify-content: flex-end;
130
- gap: 10px;
131
+ margin-block: $spacing-03 calc(-1 * $spacing-05);
132
+ margin-inline-end: calc(-1 * $spacing-05);
133
+ }
134
+
135
+ .#{$prefix}--footer > a {
136
+ padding: 14px $spacing-05;
131
137
  }
132
138
 
133
139
  .#{$prefix}--subtitle {
@@ -144,6 +150,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
144
150
  border: 1px solid $border-subtle-01;
145
151
  border-radius: 8px;
146
152
  background-color: $layer-01;
153
+ margin-block-start: $spacing-06;
147
154
  transition: border 200ms motion.motion(standard, expressive);
148
155
  }
149
156
 
@@ -19,7 +19,7 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
19
19
  display: flex;
20
20
  -webkit-backdrop-filter: blur(3px);
21
21
  backdrop-filter: blur(3px);
22
- min-block-size: 176px;
22
+ min-block-size: 192px;
23
23
  text-decoration: none;
24
24
  }
25
25
 
@@ -39,7 +39,6 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
39
39
  background-color: transparent;
40
40
  color: $text-primary;
41
41
  cursor: pointer;
42
- gap: $spacing-05;
43
42
  opacity: 1;
44
43
  transition: opacity 500ms linear;
45
44
  }
@@ -48,6 +47,7 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
48
47
  opacity: 0;
49
48
  }
50
49
 
50
+ :root .#{$prefix}--body::before,
51
51
  [data-carbon-theme='white'] .#{$prefix}--body::before,
52
52
  [data-carbon-theme='g10'] .#{$prefix}--body::before {
53
53
  background-color: $layer-01;
@@ -75,6 +75,8 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
75
75
  position: relative;
76
76
  display: flex;
77
77
  justify-content: space-between;
78
+
79
+ margin-block-end: $spacing-05;
78
80
  }
79
81
 
80
82
  .#{$prefix}--title {