@carbon-labs/react-animated-header 0.3.0 → 0.5.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 +466 -544
  2. package/es/__stories__/data/index.d.ts +21 -11
  3. package/es/components/AnimatedHeader/AnimatedHeader.d.ts +30 -17
  4. package/es/components/AnimatedHeader/AnimatedHeader.js +79 -64
  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 +466 -544
  11. package/lib/__stories__/data/index.d.ts +21 -11
  12. package/lib/components/AnimatedHeader/AnimatedHeader.d.ts +30 -17
  13. package/lib/components/AnimatedHeader/AnimatedHeader.js +78 -63
  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,18 +1,10 @@
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
- text: string;
3
+ label: string;
12
4
  }[];
13
5
  export const headerTiles: ({
14
6
  id: number;
15
- name: string;
7
+ label: string;
16
8
  tiles: ({
17
9
  id: string;
18
10
  href: string;
@@ -28,7 +20,7 @@ export const headerTiles: ({
28
20
  })[];
29
21
  } | {
30
22
  id: number;
31
- name: string;
23
+ label: string;
32
24
  tiles: ({
33
25
  id: string;
34
26
  href: 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,39 +1,52 @@
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
- text: string;
18
+ label: 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;
18
- name: string;
30
+ label: string;
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
+ handleHeaderItemsToString: (item: TileGroup | null) => string;
38
+ handleWorkspaceItemsToString: (item: SelectedWorkspace | null) => string;
39
+ headerAnimation?: object;
40
+ headerStatic?: React.JSX.Element;
28
41
  productName?: string;
29
- selectedWorkspace?: SelectedWorkspace[] | any;
30
- setSelectedWorkspace: (e: any) => void;
31
- allWorkspaces?: SelectedWorkspace[];
32
42
  selectedTileGroup: TileGroup[] | any;
43
+ selectedWorkspace?: SelectedWorkspace | any;
33
44
  setSelectedTileGroup: (e: any) => void;
34
- allTiles: TileGroup[];
35
- headerAnimation?: object;
36
- headerStatic?: React.JSX.Element;
45
+ setSelectedWorkspace: (e: any) => void;
46
+ tasksConfig?: TasksConfig;
47
+ userName?: string;
48
+ welcomeText?: string;
49
+ workspaceLabel?: string;
37
50
  }
38
51
  declare const AnimatedHeader: React.FC<AnimatedHeaderProps>;
39
52
  export default AnimatedHeader;
@@ -25,25 +25,26 @@ 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
+ handleHeaderItemsToString,
32
+ handleWorkspaceItemsToString,
33
+ headerAnimation,
34
+ headerStatic,
34
35
  productName = '[Product name]',
35
- selectedWorkspace,
36
- setSelectedWorkspace,
37
- allWorkspaces,
38
36
  selectedTileGroup,
37
+ selectedWorkspace,
39
38
  setSelectedTileGroup,
40
- allTiles,
41
- headerAnimation,
42
- headerStatic
39
+ setSelectedWorkspace,
40
+ tasksConfig,
41
+ userName,
42
+ welcomeText,
43
+ workspaceLabel = `Open in: ${userName}'s workspace` || `Select a workspace`
43
44
  } = _ref;
44
45
  const prefix = usePrefix.usePrefix();
45
46
  const blockClass = `${prefix}--animated-header`;
46
- let animationContainer = /*#__PURE__*/React.createRef();
47
+ const animationContainer = /*#__PURE__*/React.createRef();
47
48
  const [open, setOpen] = React.useState(true);
48
49
  const [playing, setPlaying] = React.useState(true);
49
50
  const [headingTextAnimation, setHeadingTextAnimation] = React.useState('');
@@ -67,7 +68,7 @@ const AnimatedHeader = _ref => {
67
68
  setPlaying(!playing);
68
69
  };
69
70
  React.useEffect(() => {
70
- let animation = lottie.default.loadAnimation({
71
+ const animation = lottie.default.loadAnimation({
71
72
  container: animationContainer.current,
72
73
  animationData: headerAnimation,
73
74
  renderer: 'svg',
@@ -88,7 +89,7 @@ const AnimatedHeader = _ref => {
88
89
  animation.setSpeed(lottieLoopSpeed);
89
90
  animation.playSegments([animationData.markers.at(1).tm, animationData.op], true);
90
91
  }
91
- if (!!isReduced) {
92
+ if (isReduced) {
92
93
  // reduced motion on
93
94
  animation.addEventListener('DOMLoaded', reducedMotion);
94
95
  } else {
@@ -100,9 +101,15 @@ const AnimatedHeader = _ref => {
100
101
  // Run Looped Animation
101
102
  animation.addEventListener('complete', loop);
102
103
  }
103
- }, []);
104
+ return () => {
105
+ animation?.removeEventListener('DOMLoaded', reducedMotion);
106
+ animation?.removeEventListener('DOMLoaded', load);
107
+ animation?.removeEventListener('complete', loop);
108
+ };
109
+ // eslint-disable-next-line react-hooks/exhaustive-deps
110
+ }, [headerAnimation, isReduced]);
104
111
  return /*#__PURE__*/React.createElement("section", {
105
- className: `${blockClass} ${!open && collapsed}`
112
+ className: `${blockClass}${!open ? ` ${collapsed}` : ''}`
106
113
  }, /*#__PURE__*/React.createElement(react.Grid, null, /*#__PURE__*/React.createElement("div", {
107
114
  className: `${blockClass}__gradient--overlay`
108
115
  }), /*#__PURE__*/React.createElement("div", {
@@ -125,14 +132,14 @@ const AnimatedHeader = _ref => {
125
132
  lg: 16
126
133
  }, /*#__PURE__*/React.createElement(react.Tooltip, {
127
134
  align: "bottom",
128
- label: `Welcome, ${name}`
135
+ label: `${welcomeText}, ${userName}`
129
136
  }, /*#__PURE__*/React.createElement("h1", {
130
137
  className: `${blockClass}__heading ${headingTextAnimation}`
131
138
  }, /*#__PURE__*/React.createElement("span", {
132
139
  className: `${blockClass}__heading-welcome`
133
- }, "Welcome,", ' '), /*#__PURE__*/React.createElement("span", {
140
+ }, welcomeText, ",", ' '), /*#__PURE__*/React.createElement("span", {
134
141
  className: `${blockClass}__heading-name`
135
- }, name)))), (description || buttonText || headerDropdown) && /*#__PURE__*/React.createElement(react.Column, {
142
+ }, userName)))), (description || tasksConfig && tasksConfig.type === 'button' && tasksConfig.button?.text || tasksConfig && tasksConfig.type === 'dropdown' && tasksConfig.dropdown?.label) && /*#__PURE__*/React.createElement(react.Column, {
136
143
  sm: 4,
137
144
  md: 8,
138
145
  lg: 4,
@@ -142,24 +149,23 @@ const AnimatedHeader = _ref => {
142
149
  label: description
143
150
  }, /*#__PURE__*/React.createElement("h2", {
144
151
  className: `${blockClass}__description`
145
- }, description)), buttonText && /*#__PURE__*/React.createElement(react.Button, {
152
+ }, description)), tasksConfig?.button?.text && /*#__PURE__*/React.createElement(react.Button, {
146
153
  className: `${blockClass}__button`,
147
- kind: buttonType,
148
- renderIcon: buttonIcon
149
- }, buttonText), !buttonText && headerDropdown && allTiles && /*#__PURE__*/React.createElement("div", {
154
+ kind: tasksConfig.button.type,
155
+ renderIcon: tasksConfig.button.icon,
156
+ href: tasksConfig.button.href
157
+ }, tasksConfig.button.text), !tasksConfig?.button?.text && tasksConfig && tasksConfig.type === 'dropdown' && allTiles && /*#__PURE__*/React.createElement("div", {
150
158
  className: `${blockClass}__header-dropdown--container`
151
159
  }, /*#__PURE__*/React.createElement(react.Dropdown, {
152
160
  id: `${blockClass}__header-dropdown`,
153
161
  className: `${blockClass}__header-dropdown`,
154
162
  size: "md",
155
- autoAlign: true,
156
163
  titleText: "Label",
157
- initialSelectedItem: allTiles[0],
158
- label: allTiles[0].name || 'Select an option below',
164
+ label: tasksConfig.dropdown?.label || allTiles[0].label,
159
165
  hideLabel: true,
160
166
  type: "inline",
161
167
  items: allTiles,
162
- itemToString: item => item ? item.name : '',
168
+ itemToString: item => handleHeaderItemsToString(item),
163
169
  onChange: e => setSelectedTileGroup(e)
164
170
  }))), selectedTileGroup && /*#__PURE__*/React.createElement(react.Column, {
165
171
  sm: 4,
@@ -173,11 +179,11 @@ const AnimatedHeader = _ref => {
173
179
  className: `${blockClass}__workspace`,
174
180
  size: "sm",
175
181
  titleText: "Label",
176
- label: `Open in: ${name}'s workspace` || 'Select a workspace',
182
+ label: workspaceLabel,
177
183
  hideLabel: true,
178
184
  type: "inline",
179
185
  items: allWorkspaces,
180
- itemToString: item => item ? item['text'] : '',
186
+ itemToString: item => handleWorkspaceItemsToString(item),
181
187
  onChange: e => setSelectedWorkspace(e)
182
188
  })), /*#__PURE__*/React.createElement("div", {
183
189
  className: `${blockClass}__tiles-container`
@@ -219,76 +225,85 @@ const AnimatedHeader = _ref => {
219
225
  AnimatedHeader.displayName = 'Animated Header';
220
226
  AnimatedHeader.propTypes = {
221
227
  /**
222
- * Specify an optional className to be added to your Animated Header
228
+ * Array of each tile group setup
223
229
  */
224
- className: PropTypes.string,
230
+ allTiles: PropTypes.arrayOf(PropTypes.object),
225
231
  /**
226
- * Specify the current username of active user
232
+ * Array of all workspace options
227
233
  */
228
- name: PropTypes.string,
234
+ allWorkspaces: PropTypes.arrayOf(PropTypes.object),
235
+ /**
236
+ * Specify an optional className to be added to your Animated Header
237
+ */
238
+ className: PropTypes.string,
229
239
  /**
230
240
  * Provide short sentence in max. 3 lines related to product context
231
241
  */
232
242
  description: PropTypes.string,
233
243
  /**
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)
244
+ * Helper function passed to downshift that allows the library to render a
245
+ * given item to a string label. By default, it extracts the `label` field
246
+ * from a given item to serve as the item label in the list. (Dropdown
247
+ * under description in header).
237
248
  */
238
- buttonText: PropTypes.string,
249
+ handleHeaderItemsToString: PropTypes.func,
239
250
  /**
240
- * Specify the carbon button type
251
+ * Helper function passed to downshift that allows the library to render a
252
+ * given item to a string label. By default, it extracts the `label` field
253
+ * from a given item to serve as the item label in the list. (Dropdown
254
+ * related to workspace selection).
241
255
  */
242
- buttonType: react.ButtonKinds,
256
+ handleWorkspaceItemsToString: PropTypes.func,
243
257
  /**
244
- * (optional), Provide the renderIcon used in the button
245
- * ex. Launch, Add, ect.
258
+ * In-product imagery / lottie animation (.json) dim. 1312 x 738
259
+ * (to update headerAnimation content storybook requires remount in toolbar)
246
260
  */
247
- buttonIcon: PropTypes.any,
261
+ headerAnimation: PropTypes.object,
248
262
  /**
249
- * Header dropdown menu when button/buttonText is not in use
263
+ * In-product imagery / static imagery dim. 1312 x 738
264
+ * Only active when headerAnimation is not in use
250
265
  */
251
- headerDropdown: PropTypes.bool,
266
+ headerStatic: PropTypes.object,
252
267
  /**
253
268
  * Provide current product name
254
269
  */
255
270
  productName: PropTypes.string,
271
+ /**
272
+ * The tile group that is active in the header
273
+ * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
274
+ */
275
+ selectedTileGroup: PropTypes.object,
256
276
  /**
257
277
  * Object containing workspace selection
258
278
  * `Open in: "_"`
259
279
  */
260
280
  selectedWorkspace: PropTypes.object,
261
281
  /**
262
- * Provide function to be called when switching workspace selection
263
- */
264
- setSelectedWorkspace: PropTypes.func,
265
- /**
266
- * Array of all workspace options
282
+ * Provide function to be called when switching selected tile group
267
283
  */
268
- allWorkspaces: PropTypes.arrayOf(PropTypes.object),
284
+ setSelectedTileGroup: PropTypes.func,
269
285
  /**
270
- * The tile group that is active in the header
271
- * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
286
+ * Provide function to be called when switching workspace selection
272
287
  */
273
- selectedTileGroup: PropTypes.object,
288
+ setSelectedWorkspace: PropTypes.func,
274
289
  /**
275
- * Provide function to be called when switching selected tile group
290
+ * Configuration for Carbon button or dropdown menu in header. Customized
291
+ * tasks are used to allow users that have multiple roles and permissions
292
+ * to experience better tailored content based on their need.
276
293
  */
277
- setSelectedTileGroup: PropTypes.func,
294
+ tasksConfig: PropTypes.object,
278
295
  /**
279
- * Array of each tile group setup
296
+ * Specify the current username of active user
280
297
  */
281
- allTiles: PropTypes.arrayOf(PropTypes.object),
298
+ userName: PropTypes.string,
282
299
  /**
283
- * In-product imagery / lottie animation (.json) dim. 1312 x 738
284
- * (to update headerAnimation content storybook requires remount in toolbar)
300
+ * Specify the current welcome text on the header
285
301
  */
286
- headerAnimation: PropTypes.object,
302
+ welcomeText: PropTypes.string,
287
303
  /**
288
- * In-product imagery / static imagery dim. 1312 x 738
289
- * Only active when headerAnimation is not in use
304
+ * Specify the default workspace label above the tiles
290
305
  */
291
- headerStatic: PropTypes.object
306
+ workspaceLabel: PropTypes.string
292
307
  };
293
308
 
294
309
  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.5.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": "00c3ca091be01c1085927e424eae56588e74b7fe"
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