@carbon-labs/react-animated-header 0.8.0 → 0.9.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.
@@ -8243,13 +8243,13 @@ export declare const ThemeG10: {
8243
8243
  type: string;
8244
8244
  labels: {
8245
8245
  0: string;
8246
- 1: any;
8247
- 2: any;
8248
- 3: any;
8249
- 4: any;
8250
- 5: any;
8251
- 6: any;
8252
- 7: any;
8246
+ 1: string;
8247
+ 2: string;
8248
+ 3: string;
8249
+ 4: string;
8250
+ 5: string;
8251
+ 6: string;
8252
+ 7: string;
8253
8253
  };
8254
8254
  };
8255
8255
  options: number[];
@@ -16840,13 +16840,13 @@ export declare const ThemeG100: {
16840
16840
  type: string;
16841
16841
  labels: {
16842
16842
  0: string;
16843
- 1: any;
16844
- 2: any;
16845
- 3: any;
16846
- 4: any;
16847
- 5: any;
16848
- 6: any;
16849
- 7: any;
16843
+ 1: string;
16844
+ 2: string;
16845
+ 3: string;
16846
+ 4: string;
16847
+ 5: string;
16848
+ 6: string;
16849
+ 7: string;
16850
16850
  };
16851
16851
  };
16852
16852
  options: number[];
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright IBM Corp. 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ function _extends() {
9
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
10
+ for (var e = 1; e < arguments.length; e++) {
11
+ var t = arguments[e];
12
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
13
+ }
14
+ return n;
15
+ }, _extends.apply(null, arguments);
16
+ }
17
+
18
+ export { _extends as extends };
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { ButtonKind } from '@carbon/react';
3
3
  /** Animated Header */
4
4
  export interface TasksConfig {
@@ -34,8 +34,10 @@ export interface AnimatedHeaderProps {
34
34
  allTiles: TileGroup[];
35
35
  allWorkspaces?: SelectedWorkspace[];
36
36
  description?: string;
37
- handleHeaderItemsToString: (item: TileGroup | null) => string;
38
- handleWorkspaceItemsToString: (item: SelectedWorkspace | null) => string;
37
+ handleHeaderItemsToString?: (item: TileGroup | null) => string;
38
+ renderHeaderSelectedItem?: (item: TileGroup | null) => ReactNode;
39
+ handleWorkspaceItemsToString?: (item: SelectedWorkspace | null) => string;
40
+ renderWorkspaceSelectedItem?: (item: SelectedWorkspace | null) => ReactNode;
39
41
  headerAnimation?: object;
40
42
  headerStatic?: React.JSX.Element;
41
43
  productName?: string;
@@ -5,6 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
+ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
8
9
  import PropTypes from 'prop-types';
9
10
  import React, { useRef, useState, useEffect } from 'react';
10
11
  import { Grid, Column, Tooltip, Button, Dropdown } from '@carbon/react';
@@ -25,6 +26,8 @@ const AnimatedHeader = _ref => {
25
26
  headerAnimation,
26
27
  headerStatic,
27
28
  productName = '[Product name]',
29
+ renderHeaderSelectedItem,
30
+ renderWorkspaceSelectedItem,
28
31
  selectedTileGroup,
29
32
  selectedWorkspace,
30
33
  setSelectedTileGroup,
@@ -102,7 +105,7 @@ const AnimatedHeader = _ref => {
102
105
  className: `${blockClass}__lottie-animation--container`
103
106
  }, /*#__PURE__*/React.createElement("div", {
104
107
  ref: animationContainer,
105
- className: `${blockClass}__lottie-animation ${!open && lottieCollapsed}`
108
+ className: `${blockClass}__lottie-animation${!open ? ` ${lottieCollapsed}` : ''}`
106
109
  })), /*#__PURE__*/React.createElement(Column, {
107
110
  sm: 4,
108
111
  md: 8,
@@ -120,7 +123,7 @@ const AnimatedHeader = _ref => {
120
123
  sm: 4,
121
124
  md: 8,
122
125
  lg: 4,
123
- className: `${blockClass}__left-area-container ${!open && descriptionCollapsed}`
126
+ className: `${blockClass}__left-area-container${!open ? ` ${descriptionCollapsed}` : ''}`
124
127
  }, description && /*#__PURE__*/React.createElement("h2", {
125
128
  className: `${blockClass}__description`
126
129
  }, description), tasksConfig?.button?.text && /*#__PURE__*/React.createElement(Button, {
@@ -130,7 +133,7 @@ const AnimatedHeader = _ref => {
130
133
  href: tasksConfig.button.href
131
134
  }, tasksConfig.button.text), !tasksConfig?.button?.text && tasksConfig && tasksConfig.type === 'dropdown' && allTiles && /*#__PURE__*/React.createElement("div", {
132
135
  className: `${blockClass}__header-dropdown--container`
133
- }, /*#__PURE__*/React.createElement(Dropdown, {
136
+ }, /*#__PURE__*/React.createElement(Dropdown, _extends({
134
137
  id: `${blockClass}__header-dropdown`,
135
138
  className: `${blockClass}__header-dropdown`,
136
139
  size: "md",
@@ -139,16 +142,19 @@ const AnimatedHeader = _ref => {
139
142
  hideLabel: true,
140
143
  type: "inline",
141
144
  items: allTiles,
142
- itemToString: item => handleHeaderItemsToString(item),
143
145
  onChange: e => setSelectedTileGroup(e)
144
- }))), selectedTileGroup && /*#__PURE__*/React.createElement(Column, {
146
+ }, handleHeaderItemsToString ? {
147
+ itemToString: handleHeaderItemsToString
148
+ } : {}, renderHeaderSelectedItem ? {
149
+ renderSelectedItem: renderHeaderSelectedItem
150
+ } : {})))), selectedTileGroup && /*#__PURE__*/React.createElement(Column, {
145
151
  sm: 4,
146
152
  md: 8,
147
153
  lg: 12,
148
154
  className: `${blockClass}__content`
149
155
  }, allWorkspaces && /*#__PURE__*/React.createElement("div", {
150
- className: `${blockClass}__workspace--container ${!open && contentCollapsed}`
151
- }, /*#__PURE__*/React.createElement(Dropdown, {
156
+ className: `${blockClass}__workspace--container${!open ? ` ${contentCollapsed}` : ''}`
157
+ }, /*#__PURE__*/React.createElement(Dropdown, _extends({
152
158
  id: `${blockClass}__workspace`,
153
159
  className: `${blockClass}__workspace`,
154
160
  size: "sm",
@@ -157,9 +163,12 @@ const AnimatedHeader = _ref => {
157
163
  hideLabel: true,
158
164
  type: "inline",
159
165
  items: allWorkspaces,
160
- itemToString: item => handleWorkspaceItemsToString(item),
161
166
  onChange: e => setSelectedWorkspace(e)
162
- })), /*#__PURE__*/React.createElement("div", {
167
+ }, handleWorkspaceItemsToString ? {
168
+ itemToString: handleWorkspaceItemsToString
169
+ } : {}, renderWorkspaceSelectedItem ? {
170
+ renderSelectedItem: renderWorkspaceSelectedItem
171
+ } : {}))), /*#__PURE__*/React.createElement("div", {
163
172
  className: `${blockClass}__tiles-container`
164
173
  }, selectedTileGroup.tiles.map(tile => {
165
174
  return /*#__PURE__*/React.createElement(BaseTile, {
@@ -230,6 +239,18 @@ AnimatedHeader.propTypes = {
230
239
  * Provide current product name
231
240
  */
232
241
  productName: PropTypes.string,
242
+ /**
243
+ * Helper function passed to downshift that allows the library to render a
244
+ * selected item to as an arbitrary ReactNode. By default it uses standard Carbon renderer that renders only item.label text
245
+ * (Dropdown under description in header)
246
+ */
247
+ renderHeaderSelectedItem: PropTypes.func,
248
+ /**
249
+ * Helper function passed to downshift that allows the library to render a
250
+ * selected item to as an arbitrary ReactNode. By default it uses standard Carbon renderer that renders only item.label text
251
+ * (Dropdown related to workspace selection)
252
+ */
253
+ renderWorkspaceSelectedItem: PropTypes.func,
233
254
  /**
234
255
  * The tile group that is active in the header
235
256
  * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
@@ -50,8 +50,12 @@ const AIPromptTile = _ref => {
50
50
  className: `${prefix}--animated-header__tile ${blockClass}`,
51
51
  key: id
52
52
  }, /*#__PURE__*/React.createElement("div", {
53
- className: `${blockClass}--body ${!open && collapsed}`
53
+ className: `${blockClass}--body${!open ? ` ${collapsed}` : ''}`
54
54
  }, /*#__PURE__*/React.createElement("div", {
55
+ className: `${blockClass}--body-background`
56
+ }), /*#__PURE__*/React.createElement("div", {
57
+ className: `${blockClass}--body-gradient`
58
+ }), /*#__PURE__*/React.createElement("div", {
55
59
  className: `${blockClass}--icons`
56
60
  }, MainIcon && /*#__PURE__*/React.createElement(MainIcon, {
57
61
  fill: `var(--cds-icon-secondary)`,
@@ -32,8 +32,10 @@ const GlassTile = _ref => {
32
32
  key: id,
33
33
  href: href
34
34
  }, /*#__PURE__*/React.createElement("div", {
35
- className: `${blockClass}--body ${!open && collapsed}`
35
+ className: `${blockClass}--body${!open ? ` ${collapsed}` : ''}`
36
36
  }, /*#__PURE__*/React.createElement("div", {
37
+ className: `${blockClass}--body-background`
38
+ }), /*#__PURE__*/React.createElement("div", {
37
39
  className: `${blockClass}--icons`
38
40
  }, MainIcon && /*#__PURE__*/React.createElement(MainIcon, {
39
41
  fill: `var(--cds-icon-secondary)`,
@@ -8243,13 +8243,13 @@ export declare const ThemeG10: {
8243
8243
  type: string;
8244
8244
  labels: {
8245
8245
  0: string;
8246
- 1: any;
8247
- 2: any;
8248
- 3: any;
8249
- 4: any;
8250
- 5: any;
8251
- 6: any;
8252
- 7: any;
8246
+ 1: string;
8247
+ 2: string;
8248
+ 3: string;
8249
+ 4: string;
8250
+ 5: string;
8251
+ 6: string;
8252
+ 7: string;
8253
8253
  };
8254
8254
  };
8255
8255
  options: number[];
@@ -16840,13 +16840,13 @@ export declare const ThemeG100: {
16840
16840
  type: string;
16841
16841
  labels: {
16842
16842
  0: string;
16843
- 1: any;
16844
- 2: any;
16845
- 3: any;
16846
- 4: any;
16847
- 5: any;
16848
- 6: any;
16849
- 7: any;
16843
+ 1: string;
16844
+ 2: string;
16845
+ 3: string;
16846
+ 4: string;
16847
+ 5: string;
16848
+ 6: string;
16849
+ 7: string;
16850
16850
  };
16851
16851
  };
16852
16852
  options: number[];
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright IBM Corp. 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ function _extends() {
11
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
12
+ for (var e = 1; e < arguments.length; e++) {
13
+ var t = arguments[e];
14
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
15
+ }
16
+ return n;
17
+ }, _extends.apply(null, arguments);
18
+ }
19
+
20
+ exports.extends = _extends;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { ButtonKind } from '@carbon/react';
3
3
  /** Animated Header */
4
4
  export interface TasksConfig {
@@ -34,8 +34,10 @@ export interface AnimatedHeaderProps {
34
34
  allTiles: TileGroup[];
35
35
  allWorkspaces?: SelectedWorkspace[];
36
36
  description?: string;
37
- handleHeaderItemsToString: (item: TileGroup | null) => string;
38
- handleWorkspaceItemsToString: (item: SelectedWorkspace | null) => string;
37
+ handleHeaderItemsToString?: (item: TileGroup | null) => string;
38
+ renderHeaderSelectedItem?: (item: TileGroup | null) => ReactNode;
39
+ handleWorkspaceItemsToString?: (item: SelectedWorkspace | null) => string;
40
+ renderWorkspaceSelectedItem?: (item: SelectedWorkspace | null) => ReactNode;
39
41
  headerAnimation?: object;
40
42
  headerStatic?: React.JSX.Element;
41
43
  productName?: string;
@@ -9,6 +9,7 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
+ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
12
13
  var PropTypes = require('prop-types');
13
14
  var React = require('react');
14
15
  var react = require('@carbon/react');
@@ -29,6 +30,8 @@ const AnimatedHeader = _ref => {
29
30
  headerAnimation,
30
31
  headerStatic,
31
32
  productName = '[Product name]',
33
+ renderHeaderSelectedItem,
34
+ renderWorkspaceSelectedItem,
32
35
  selectedTileGroup,
33
36
  selectedWorkspace,
34
37
  setSelectedTileGroup,
@@ -106,7 +109,7 @@ const AnimatedHeader = _ref => {
106
109
  className: `${blockClass}__lottie-animation--container`
107
110
  }, /*#__PURE__*/React.createElement("div", {
108
111
  ref: animationContainer,
109
- className: `${blockClass}__lottie-animation ${!open && lottieCollapsed}`
112
+ className: `${blockClass}__lottie-animation${!open ? ` ${lottieCollapsed}` : ''}`
110
113
  })), /*#__PURE__*/React.createElement(react.Column, {
111
114
  sm: 4,
112
115
  md: 8,
@@ -124,7 +127,7 @@ const AnimatedHeader = _ref => {
124
127
  sm: 4,
125
128
  md: 8,
126
129
  lg: 4,
127
- className: `${blockClass}__left-area-container ${!open && descriptionCollapsed}`
130
+ className: `${blockClass}__left-area-container${!open ? ` ${descriptionCollapsed}` : ''}`
128
131
  }, description && /*#__PURE__*/React.createElement("h2", {
129
132
  className: `${blockClass}__description`
130
133
  }, description), tasksConfig?.button?.text && /*#__PURE__*/React.createElement(react.Button, {
@@ -134,7 +137,7 @@ const AnimatedHeader = _ref => {
134
137
  href: tasksConfig.button.href
135
138
  }, tasksConfig.button.text), !tasksConfig?.button?.text && tasksConfig && tasksConfig.type === 'dropdown' && allTiles && /*#__PURE__*/React.createElement("div", {
136
139
  className: `${blockClass}__header-dropdown--container`
137
- }, /*#__PURE__*/React.createElement(react.Dropdown, {
140
+ }, /*#__PURE__*/React.createElement(react.Dropdown, _rollupPluginBabelHelpers.extends({
138
141
  id: `${blockClass}__header-dropdown`,
139
142
  className: `${blockClass}__header-dropdown`,
140
143
  size: "md",
@@ -143,16 +146,19 @@ const AnimatedHeader = _ref => {
143
146
  hideLabel: true,
144
147
  type: "inline",
145
148
  items: allTiles,
146
- itemToString: item => handleHeaderItemsToString(item),
147
149
  onChange: e => setSelectedTileGroup(e)
148
- }))), selectedTileGroup && /*#__PURE__*/React.createElement(react.Column, {
150
+ }, handleHeaderItemsToString ? {
151
+ itemToString: handleHeaderItemsToString
152
+ } : {}, renderHeaderSelectedItem ? {
153
+ renderSelectedItem: renderHeaderSelectedItem
154
+ } : {})))), selectedTileGroup && /*#__PURE__*/React.createElement(react.Column, {
149
155
  sm: 4,
150
156
  md: 8,
151
157
  lg: 12,
152
158
  className: `${blockClass}__content`
153
159
  }, allWorkspaces && /*#__PURE__*/React.createElement("div", {
154
- className: `${blockClass}__workspace--container ${!open && contentCollapsed}`
155
- }, /*#__PURE__*/React.createElement(react.Dropdown, {
160
+ className: `${blockClass}__workspace--container${!open ? ` ${contentCollapsed}` : ''}`
161
+ }, /*#__PURE__*/React.createElement(react.Dropdown, _rollupPluginBabelHelpers.extends({
156
162
  id: `${blockClass}__workspace`,
157
163
  className: `${blockClass}__workspace`,
158
164
  size: "sm",
@@ -161,9 +167,12 @@ const AnimatedHeader = _ref => {
161
167
  hideLabel: true,
162
168
  type: "inline",
163
169
  items: allWorkspaces,
164
- itemToString: item => handleWorkspaceItemsToString(item),
165
170
  onChange: e => setSelectedWorkspace(e)
166
- })), /*#__PURE__*/React.createElement("div", {
171
+ }, handleWorkspaceItemsToString ? {
172
+ itemToString: handleWorkspaceItemsToString
173
+ } : {}, renderWorkspaceSelectedItem ? {
174
+ renderSelectedItem: renderWorkspaceSelectedItem
175
+ } : {}))), /*#__PURE__*/React.createElement("div", {
167
176
  className: `${blockClass}__tiles-container`
168
177
  }, selectedTileGroup.tiles.map(tile => {
169
178
  return /*#__PURE__*/React.createElement(BaseTile.BaseTile, {
@@ -234,6 +243,18 @@ AnimatedHeader.propTypes = {
234
243
  * Provide current product name
235
244
  */
236
245
  productName: PropTypes.string,
246
+ /**
247
+ * Helper function passed to downshift that allows the library to render a
248
+ * selected item to as an arbitrary ReactNode. By default it uses standard Carbon renderer that renders only item.label text
249
+ * (Dropdown under description in header)
250
+ */
251
+ renderHeaderSelectedItem: PropTypes.func,
252
+ /**
253
+ * Helper function passed to downshift that allows the library to render a
254
+ * selected item to as an arbitrary ReactNode. By default it uses standard Carbon renderer that renders only item.label text
255
+ * (Dropdown related to workspace selection)
256
+ */
257
+ renderWorkspaceSelectedItem: PropTypes.func,
237
258
  /**
238
259
  * The tile group that is active in the header
239
260
  * ex. "AI Chat Tile w/ two glass tiles", "Four glass tiles", ect.
@@ -52,8 +52,12 @@ const AIPromptTile = _ref => {
52
52
  className: `${prefix}--animated-header__tile ${blockClass}`,
53
53
  key: id
54
54
  }, /*#__PURE__*/React.createElement("div", {
55
- className: `${blockClass}--body ${!open && collapsed}`
55
+ className: `${blockClass}--body${!open ? ` ${collapsed}` : ''}`
56
56
  }, /*#__PURE__*/React.createElement("div", {
57
+ className: `${blockClass}--body-background`
58
+ }), /*#__PURE__*/React.createElement("div", {
59
+ className: `${blockClass}--body-gradient`
60
+ }), /*#__PURE__*/React.createElement("div", {
57
61
  className: `${blockClass}--icons`
58
62
  }, MainIcon && /*#__PURE__*/React.createElement(MainIcon, {
59
63
  fill: `var(--cds-icon-secondary)`,
@@ -34,8 +34,10 @@ const GlassTile = _ref => {
34
34
  key: id,
35
35
  href: href
36
36
  }, /*#__PURE__*/React.createElement("div", {
37
- className: `${blockClass}--body ${!open && collapsed}`
37
+ className: `${blockClass}--body${!open ? ` ${collapsed}` : ''}`
38
38
  }, /*#__PURE__*/React.createElement("div", {
39
+ className: `${blockClass}--body-background`
40
+ }), /*#__PURE__*/React.createElement("div", {
39
41
  className: `${blockClass}--icons`
40
42
  }, MainIcon && /*#__PURE__*/React.createElement(MainIcon, {
41
43
  fill: `var(--cds-icon-secondary)`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbon-labs/react-animated-header",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -36,5 +36,5 @@
36
36
  "devDependencies": {
37
37
  "@carbon-labs/utilities": "canary"
38
38
  },
39
- "gitHead": "024cddd160713ecd5e40c79868a9bf75b3234316"
39
+ "gitHead": "c610e01c130ef513bb64286934496f86d2c8091d"
40
40
  }
@@ -65,14 +65,7 @@ body {
65
65
  overflow: hidden;
66
66
  justify-content: flex-end;
67
67
 
68
- block-size: 100%;
69
-
70
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
71
68
  block-size: fill-available;
72
-
73
- inline-size: 100%;
74
-
75
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
76
69
  inline-size: fill-available;
77
70
 
78
71
  max-inline-size: 96rem;
@@ -102,14 +95,7 @@ body {
102
95
  position: absolute;
103
96
  z-index: 1;
104
97
 
105
- block-size: 100%;
106
-
107
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
108
98
  block-size: fill-available;
109
-
110
- inline-size: 100%;
111
-
112
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
113
99
  inline-size: fill-available;
114
100
 
115
101
  margin-inline: auto;
@@ -232,7 +218,7 @@ body {
232
218
 
233
219
  .#{$prefix}__header-dropdown--container {
234
220
  inline-size: auto;
235
- max-inline-size: 30rem;
221
+ max-inline-size: 18rem;
236
222
  }
237
223
 
238
224
  .#{$prefix}__header-dropdown {
@@ -304,19 +290,22 @@ body {
304
290
  overflow: hidden;
305
291
  justify-content: flex-end;
306
292
 
307
- block-size: 100%;
308
-
309
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
310
293
  block-size: fill-available;
311
-
312
- inline-size: 100%;
313
-
314
- /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
315
294
  inline-size: fill-available;
316
295
 
317
296
  max-inline-size: 96rem;
318
297
  }
319
298
 
299
+ /* support for Safari */
300
+ @supports (font: -apple-system-body) and (-webkit-appearance: none) {
301
+ .#{$prefix}__gradient--overlay,
302
+ .#{$prefix}__static--container,
303
+ .#{$prefix}__lottie-animation--container {
304
+ block-size: 100%;
305
+ inline-size: 100%;
306
+ }
307
+ }
308
+
320
309
  .#{$prefix}__lottie-animation {
321
310
  position: absolute;
322
311
  z-index: 0;
@@ -608,9 +597,9 @@ body {
608
597
  }
609
598
 
610
599
  /*
611
- If the user has expressed their preference for
612
- reduced motion, then don't use animations
613
- */
600
+ If the user has expressed their preference for
601
+ reduced motion, then don't use animations
602
+ */
614
603
  @media (prefers-reduced-motion: reduce) {
615
604
  .#{$prefix},
616
605
  .#{$prefix}__static,
@@ -31,7 +31,9 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
31
31
 
32
32
  .#{$prefix}--body {
33
33
  position: relative;
34
+ z-index: 0;
34
35
  display: flex;
36
+ overflow: hidden;
35
37
  flex: 1;
36
38
  flex-direction: column;
37
39
  justify-content: flex-start;
@@ -42,14 +44,25 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
42
44
  transition: opacity 500ms linear;
43
45
  }
44
46
 
45
- :root .#{$prefix}--body::before,
46
- [data-carbon-theme='white'] .#{$prefix}--body::before,
47
- [data-carbon-theme='g10'] .#{$prefix}--body::before {
47
+ /* Semi-transparent background layer */
48
+ .#{$prefix}--body-background {
49
+ position: absolute;
50
+ z-index: 1;
51
+ background-color: $layer-01;
52
+ inset: 0;
53
+ opacity: 0.7;
54
+ pointer-events: none;
55
+ transition: opacity 150ms motion.motion(standard, productive);
56
+ }
57
+
58
+ :root .#{$prefix}--body-background,
59
+ [data-carbon-theme='white'] .#{$prefix}--body-background,
60
+ [data-carbon-theme='g10'] .#{$prefix}--body-background {
48
61
  background-color: $layer-01;
49
62
  }
50
63
 
51
- [data-carbon-theme='g90'] .#{$prefix}--body::before,
52
- [data-carbon-theme='g100'] .#{$prefix}--body::before {
64
+ [data-carbon-theme='g90'] .#{$prefix}--body-background,
65
+ [data-carbon-theme='g100'] .#{$prefix}--body-background {
53
66
  background-color: $layer-hover-01;
54
67
  }
55
68
 
@@ -57,27 +70,32 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
57
70
  opacity: 0;
58
71
  }
59
72
 
60
- .#{$prefix}--body::before {
73
+ /* Animated gradient layer */
74
+ .#{$prefix}--body-gradient {
61
75
  position: absolute;
76
+ z-index: 2;
62
77
  animation: 1000ms motion.motion(standard, expressive) animate-gradient;
63
78
  animation-delay: 466.666ms;
64
79
  animation-fill-mode: both;
65
80
  background: linear-gradient(0deg, #4589ff4d 0%, transparent 100%);
66
81
  background-repeat: no-repeat;
67
82
  background-size: 100% 64px;
68
- content: '';
69
83
  inset: 0;
70
84
  opacity: 0.7;
71
85
  pointer-events: none;
72
86
  transition: opacity 150ms motion.motion(standard, productive);
73
87
  }
74
88
 
75
- .#{$prefix}--body:hover::before {
76
- opacity: 0.85;
89
+ .#{$prefix}--body:hover {
90
+ .#{$prefix}--body-gradient,
91
+ .#{$prefix}--body-background {
92
+ opacity: 0.85;
93
+ }
77
94
  }
78
95
 
79
- .#{$prefix}--body:after {
96
+ .#{$prefix}--body::after {
80
97
  position: absolute;
98
+ z-index: 3;
81
99
  border: 1px solid transparent;
82
100
  animation: 1000ms motion.motion(standard, expressive) animate-border;
83
101
  animation-delay: 466.666ms;
@@ -86,9 +104,6 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
86
104
  background-size: 100% 150%;
87
105
  content: '';
88
106
  inset: 0;
89
- inset-block-end: 0;
90
- inset-inline: 0;
91
- inset-inline-start: 0;
92
107
  -webkit-mask: linear-gradient(#ffffff 0 0) padding-box,
93
108
  linear-gradient(#ffffff 0 0);
94
109
  mask: linear-gradient(#ffffff 0 0) padding-box, linear-gradient(#ffffff 0 0);
@@ -98,7 +113,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
98
113
 
99
114
  .#{$prefix}--icons {
100
115
  position: relative;
101
- z-index: 3;
116
+ z-index: 4;
102
117
  display: flex;
103
118
  justify-content: space-between;
104
119
  margin-block-end: $spacing-05;
@@ -108,7 +123,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
108
123
  @include type-style('body-compact-02');
109
124
 
110
125
  position: relative;
111
- z-index: 3;
126
+ z-index: 4;
112
127
 
113
128
  overflow: hidden;
114
129
  text-overflow: ellipsis;
@@ -125,7 +140,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
125
140
  }
126
141
 
127
142
  .#{$prefix}--footer {
128
- z-index: 3;
143
+ z-index: 4;
129
144
  display: flex;
130
145
  justify-content: flex-end;
131
146
  margin-block: $spacing-03 calc(-1 * $spacing-05);
@@ -144,7 +159,7 @@ $prefix: 'clabs--animated-header__ai-prompt-tile' !default;
144
159
  }
145
160
 
146
161
  .#{$prefix}--text-input-container {
147
- z-index: 3;
162
+ z-index: 4;
148
163
  display: flex;
149
164
  align-items: center;
150
165
  border: 1px solid $border-subtle-01;
@@ -31,7 +31,9 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
31
31
 
32
32
  .#{$prefix}--body {
33
33
  position: relative;
34
+ z-index: 0;
34
35
  display: flex;
36
+ overflow: hidden;
35
37
  flex: 1;
36
38
  flex-direction: column;
37
39
  justify-content: flex-start;
@@ -43,39 +45,41 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
43
45
  transition: opacity 500ms linear;
44
46
  }
45
47
 
46
- .#{$prefix}--collapsed {
47
- opacity: 0;
48
+ /* Semi-transparent background layer */
49
+ .#{$prefix}--body-background {
50
+ position: absolute;
51
+ z-index: 1;
52
+ background-color: $layer-01;
53
+ inset: 0;
54
+ opacity: 0.7;
55
+ pointer-events: none;
56
+ transition: opacity 150ms motion.motion(standard, productive);
48
57
  }
49
58
 
50
- :root .#{$prefix}--body::before,
51
- [data-carbon-theme='white'] .#{$prefix}--body::before,
52
- [data-carbon-theme='g10'] .#{$prefix}--body::before {
59
+ :root .#{$prefix}--body-background,
60
+ [data-carbon-theme='white'] .#{$prefix}--body-background,
61
+ [data-carbon-theme='g10'] .#{$prefix}--body-background {
53
62
  background-color: $layer-01;
54
63
  }
55
64
 
56
- [data-carbon-theme='g90'] .#{$prefix}--body::before,
57
- [data-carbon-theme='g100'] .#{$prefix}--body::before {
65
+ [data-carbon-theme='g90'] .#{$prefix}--body-background,
66
+ [data-carbon-theme='g100'] .#{$prefix}--body-background {
58
67
  background-color: $layer-hover-01;
59
68
  }
60
69
 
61
- .#{$prefix}--body::before {
62
- position: absolute;
63
- content: '';
64
- inset: 0;
65
- opacity: 0.7;
66
- pointer-events: none;
67
- transition: opacity 150ms motion.motion(standard, productive);
70
+ .#{$prefix}--collapsed {
71
+ opacity: 0;
68
72
  }
69
73
 
70
- .#{$prefix}--body:hover::before {
74
+ .#{$prefix}--body:hover .#{$prefix}--body-background {
71
75
  opacity: 0.85;
72
76
  }
73
77
 
74
78
  .#{$prefix}--icons {
75
79
  position: relative;
80
+ z-index: 2;
76
81
  display: flex;
77
82
  justify-content: space-between;
78
-
79
83
  margin-block-end: $spacing-05;
80
84
  }
81
85
 
@@ -83,6 +87,7 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
83
87
  @include type-style('body-compact-02');
84
88
 
85
89
  position: relative;
90
+ z-index: 2;
86
91
  overflow: hidden;
87
92
  text-overflow: ellipsis;
88
93
  white-space: nowrap;
@@ -99,7 +104,7 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
99
104
 
100
105
  .#{$prefix}--footer {
101
106
  position: absolute;
102
- z-index: 3;
107
+ z-index: 2;
103
108
  display: flex;
104
109
  gap: $spacing-05;
105
110
  inset-block-end: $spacing-05;
@@ -109,6 +114,7 @@ $prefix: 'clabs--animated-header__glass-tile' !default;
109
114
  @include type-style('body-short-01');
110
115
 
111
116
  position: relative;
117
+ z-index: 2;
112
118
  overflow: hidden;
113
119
  color: $text-secondary;
114
120
  text-overflow: ellipsis;