@cloudscape-design/chart-components 1.0.75 → 1.0.77

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.
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { getChartSeries } from "../../internal/utils/chart-series";
4
4
  import { getSeriesData } from "../../internal/utils/series-data";
5
- import { getGroupRect, isPointVisible, isSeriesStacked } from "../utils";
5
+ import { getGroupRect, isSeriesStacked } from "../utils";
6
6
  // The context is created when the chart component is rendered for the first time.
7
7
  // On every subsequent render the settings and state are updated directly in the context object.
8
8
  export function createChartContext() {
@@ -81,7 +81,7 @@ function computeDerivedState(chart) {
81
81
  const familyPoints = [];
82
82
  for (const x of Array.from(familyXSet).sort(compareX)) {
83
83
  for (const member of family) {
84
- const point = member.data.find((d) => d.x === x && isPointVisible(d) && d.y !== null);
84
+ const point = getSeriesData(member.data).find((d) => d.x === x && d.y !== null);
85
85
  if (point && familyXSet.has(x)) {
86
86
  familyPoints.push(point);
87
87
  familyXSet.delete(x); // We ignore points that share X coordinate.
@@ -1 +1 @@
1
- {"version":3,"file":"chart-extra-context.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-context.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport { NonCancelableEventHandler } from \"../../internal/events\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { getSeriesData } from \"../../internal/utils/series-data\";\nimport { ChartLabels } from \"../i18n-utils\";\nimport { CoreChartProps, Rect } from \"../interfaces\";\nimport { getGroupRect, isPointVisible, isSeriesStacked } from \"../utils\";\n\n// Chart API context is used for dependency injection for chart utilities.\n// It is initialized on chart render, and includes the chart instance, consumer\n// settings and state, and derived state, which is computed from the chart instance\n// on each render, and reused across utilities to avoid duplicate work.\n\nexport interface ChartExtraContext {\n settings: ChartExtraContext.Settings;\n handlers: ChartExtraContext.Handlers;\n state: ChartExtraContext.State;\n derived: ChartExtraContext.DerivedState;\n chartOrNull: null | Highcharts.Chart;\n chart: () => Highcharts.Chart;\n}\n\nexport namespace ChartExtraContext {\n export interface Settings {\n chartId: string;\n noDataEnabled: boolean;\n legendEnabled: boolean;\n tooltipEnabled: boolean;\n keyboardNavigationEnabled: boolean;\n labels: ChartLabels;\n getItemOptions?: CoreChartProps.GetItemOptions;\n }\n\n export interface Handlers {\n onHighlight?: NonCancelableEventHandler<CoreChartProps.HighlightChangeDetail>;\n onClearHighlight?: NonCancelableEventHandler<CoreChartProps.HighlightClearDetail>;\n onVisibleItemsChange?: NonCancelableEventHandler<CoreChartProps.VisibleItemsChangeDetail>;\n }\n\n export interface State {\n visibleItems?: readonly string[];\n }\n\n export interface DerivedState {\n allX: number[];\n getPointsByX: (x: number) => Highcharts.Point[];\n getSeriesPoints: (series: Highcharts.Series) => Highcharts.Point[];\n groupRects: { group: Highcharts.Point[]; rect: Rect }[];\n }\n}\n\n// The context is created when the chart component is rendered for the first time.\n// On every subsequent render the settings and state are updated directly in the context object.\nexport function createChartContext(): ChartExtraContext {\n return {\n settings: {\n chartId: \"\",\n noDataEnabled: false,\n legendEnabled: false,\n tooltipEnabled: false,\n keyboardNavigationEnabled: false,\n labels: {},\n },\n handlers: {},\n state: {},\n chart: () => {\n // Before the first chart render there is no chart instance, which is required for most of the utilities.\n // Instead of doing null checks in each utility, an attempt to access the chart instance before it is ready\n // will cause an exception, indicating an logical error in the code.\n throw new Error(\"Invariant violation: using chart API before initialization.\");\n },\n chartOrNull: null,\n derived: { allX: [], getPointsByX: () => [], getSeriesPoints: () => [], groupRects: [] },\n };\n}\n\n// The update method is called on every chart render, before any other initialization code.\n// This ensures the context state is up to date and can be used for subsequent computations.\nexport function updateChartContext(context: ChartExtraContext, chart: Highcharts.Chart) {\n context.chart = () => chart;\n context.chartOrNull = chart;\n context.derived = computeDerivedState(chart);\n}\n\nfunction computeDerivedState(chart: Highcharts.Chart): ChartExtraContext.DerivedState {\n const allXSet = new Set<number>();\n const allXInSeries = new WeakMap<Highcharts.Series, number[]>();\n const pointsByX = new Map<number, Highcharts.Point[]>();\n const getXPoints = (x: number) => pointsByX.get(x) ?? [];\n const addPoint = (point: Highcharts.Point) => {\n const xPoints = getXPoints(point.x);\n xPoints.push(point);\n pointsByX.set(point.x, xPoints);\n };\n const compareX = (a: number, b: number) => a - b;\n\n for (const s of getChartSeries(chart.series)) {\n const seriesX = new Set<number>();\n if (s.visible) {\n for (const d of getSeriesData(s.data)) {\n // Points with y=null represent the absence of value, there is no need to include them and those\n // should have no impact on computed rects or navigation.\n\n // Although \"d\" can't be undefined according to Highcharts API, it does become undefined for chart containing more datapoints\n // than the cropThreshold for that series (specific cases of re-rendering the chart with updated options listening to setExteme updates)\n if (d.visible && d.y !== null) {\n seriesX.add(d.x);\n allXSet.add(d.x);\n addPoint(d);\n }\n }\n }\n allXInSeries.set(s, Array.from(seriesX));\n }\n for (const [, points] of pointsByX) {\n sortPoints(points);\n }\n const allX = Array.from(allXSet).sort(compareX);\n\n // For each series, compute the ordered list of points to navigate through. For a linked family\n // (primary + its linked children), all members share the same flat list: points sorted by X,\n // with family members interleaved in series order within the same X value.\n const seriesPointsMap = new WeakMap<Highcharts.Series, Highcharts.Point[]>();\n for (const s of getChartSeries(chart.series)) {\n if (seriesPointsMap.has(s)) {\n continue; // Already computed as part of a family.\n }\n const master = s.linkedParent ?? s;\n const family = [master, ...master.linkedSeries];\n const familyXSet = new Set(family.flatMap((m) => allXInSeries.get(m) ?? []));\n const familyPoints: Highcharts.Point[] = [];\n for (const x of Array.from(familyXSet).sort(compareX)) {\n for (const member of family) {\n const point = member.data.find((d) => d.x === x && isPointVisible(d) && d.y !== null);\n if (point && familyXSet.has(x)) {\n familyPoints.push(point);\n familyXSet.delete(x); // We ignore points that share X coordinate.\n }\n }\n }\n for (const member of family) {\n seriesPointsMap.set(member, familyPoints);\n }\n }\n return {\n allX,\n getPointsByX: (x) => pointsByX.get(x) ?? [],\n getSeriesPoints: (s) => seriesPointsMap.get(s) ?? [],\n // Group rects are computed for every available x coordinate, each including at least one point with matching x value.\n // They enclose all matching points of the group and are used to match hover position and place the tooltip or focus outline.\n groupRects: allX.map((x) => ({\n group: getXPoints(x),\n rect: getGroupRect(getXPoints(x)),\n })),\n };\n}\n\n// The points are sorted to ensure consistent navigation, including inverted chart orientation.\n// The order of series in grouped column charts is kept, while stacked series are sorted by their\n// respective positions in the plot.\nfunction sortPoints(group: Highcharts.Point[]) {\n const reversed = !!group[0]?.series.yAxis?.reversed;\n group.sort((a, b) => {\n const ay = a.plotY === undefined || (a.series.type === \"column\" && !isSeriesStacked(a.series)) ? 0 : a.plotY;\n const by = b.plotY === undefined || (b.series.type === \"column\" && !isSeriesStacked(b.series)) ? 0 : b.plotY;\n return !reversed ? ay - by : by - ay;\n });\n}\n"]}
1
+ {"version":3,"file":"chart-extra-context.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-context.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport { NonCancelableEventHandler } from \"../../internal/events\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { getSeriesData } from \"../../internal/utils/series-data\";\nimport { ChartLabels } from \"../i18n-utils\";\nimport { CoreChartProps, Rect } from \"../interfaces\";\nimport { getGroupRect, isSeriesStacked } from \"../utils\";\n\n// Chart API context is used for dependency injection for chart utilities.\n// It is initialized on chart render, and includes the chart instance, consumer\n// settings and state, and derived state, which is computed from the chart instance\n// on each render, and reused across utilities to avoid duplicate work.\n\nexport interface ChartExtraContext {\n settings: ChartExtraContext.Settings;\n handlers: ChartExtraContext.Handlers;\n state: ChartExtraContext.State;\n derived: ChartExtraContext.DerivedState;\n chartOrNull: null | Highcharts.Chart;\n chart: () => Highcharts.Chart;\n}\n\nexport namespace ChartExtraContext {\n export interface Settings {\n chartId: string;\n noDataEnabled: boolean;\n legendEnabled: boolean;\n tooltipEnabled: boolean;\n keyboardNavigationEnabled: boolean;\n labels: ChartLabels;\n getItemOptions?: CoreChartProps.GetItemOptions;\n }\n\n export interface Handlers {\n onHighlight?: NonCancelableEventHandler<CoreChartProps.HighlightChangeDetail>;\n onClearHighlight?: NonCancelableEventHandler<CoreChartProps.HighlightClearDetail>;\n onVisibleItemsChange?: NonCancelableEventHandler<CoreChartProps.VisibleItemsChangeDetail>;\n }\n\n export interface State {\n visibleItems?: readonly string[];\n }\n\n export interface DerivedState {\n allX: number[];\n getPointsByX: (x: number) => Highcharts.Point[];\n getSeriesPoints: (series: Highcharts.Series) => Highcharts.Point[];\n groupRects: { group: Highcharts.Point[]; rect: Rect }[];\n }\n}\n\n// The context is created when the chart component is rendered for the first time.\n// On every subsequent render the settings and state are updated directly in the context object.\nexport function createChartContext(): ChartExtraContext {\n return {\n settings: {\n chartId: \"\",\n noDataEnabled: false,\n legendEnabled: false,\n tooltipEnabled: false,\n keyboardNavigationEnabled: false,\n labels: {},\n },\n handlers: {},\n state: {},\n chart: () => {\n // Before the first chart render there is no chart instance, which is required for most of the utilities.\n // Instead of doing null checks in each utility, an attempt to access the chart instance before it is ready\n // will cause an exception, indicating an logical error in the code.\n throw new Error(\"Invariant violation: using chart API before initialization.\");\n },\n chartOrNull: null,\n derived: { allX: [], getPointsByX: () => [], getSeriesPoints: () => [], groupRects: [] },\n };\n}\n\n// The update method is called on every chart render, before any other initialization code.\n// This ensures the context state is up to date and can be used for subsequent computations.\nexport function updateChartContext(context: ChartExtraContext, chart: Highcharts.Chart) {\n context.chart = () => chart;\n context.chartOrNull = chart;\n context.derived = computeDerivedState(chart);\n}\n\nfunction computeDerivedState(chart: Highcharts.Chart): ChartExtraContext.DerivedState {\n const allXSet = new Set<number>();\n const allXInSeries = new WeakMap<Highcharts.Series, number[]>();\n const pointsByX = new Map<number, Highcharts.Point[]>();\n const getXPoints = (x: number) => pointsByX.get(x) ?? [];\n const addPoint = (point: Highcharts.Point) => {\n const xPoints = getXPoints(point.x);\n xPoints.push(point);\n pointsByX.set(point.x, xPoints);\n };\n const compareX = (a: number, b: number) => a - b;\n\n for (const s of getChartSeries(chart.series)) {\n const seriesX = new Set<number>();\n if (s.visible) {\n for (const d of getSeriesData(s.data)) {\n // Points with y=null represent the absence of value, there is no need to include them and those\n // should have no impact on computed rects or navigation.\n\n // Although \"d\" can't be undefined according to Highcharts API, it does become undefined for chart containing more datapoints\n // than the cropThreshold for that series (specific cases of re-rendering the chart with updated options listening to setExteme updates)\n if (d.visible && d.y !== null) {\n seriesX.add(d.x);\n allXSet.add(d.x);\n addPoint(d);\n }\n }\n }\n allXInSeries.set(s, Array.from(seriesX));\n }\n for (const [, points] of pointsByX) {\n sortPoints(points);\n }\n const allX = Array.from(allXSet).sort(compareX);\n\n // For each series, compute the ordered list of points to navigate through. For a linked family\n // (primary + its linked children), all members share the same flat list: points sorted by X,\n // with family members interleaved in series order within the same X value.\n const seriesPointsMap = new WeakMap<Highcharts.Series, Highcharts.Point[]>();\n for (const s of getChartSeries(chart.series)) {\n if (seriesPointsMap.has(s)) {\n continue; // Already computed as part of a family.\n }\n const master = s.linkedParent ?? s;\n const family = [master, ...master.linkedSeries];\n const familyXSet = new Set(family.flatMap((m) => allXInSeries.get(m) ?? []));\n const familyPoints: Highcharts.Point[] = [];\n for (const x of Array.from(familyXSet).sort(compareX)) {\n for (const member of family) {\n const point = getSeriesData(member.data).find((d) => d.x === x && d.y !== null);\n if (point && familyXSet.has(x)) {\n familyPoints.push(point);\n familyXSet.delete(x); // We ignore points that share X coordinate.\n }\n }\n }\n for (const member of family) {\n seriesPointsMap.set(member, familyPoints);\n }\n }\n return {\n allX,\n getPointsByX: (x) => pointsByX.get(x) ?? [],\n getSeriesPoints: (s) => seriesPointsMap.get(s) ?? [],\n // Group rects are computed for every available x coordinate, each including at least one point with matching x value.\n // They enclose all matching points of the group and are used to match hover position and place the tooltip or focus outline.\n groupRects: allX.map((x) => ({\n group: getXPoints(x),\n rect: getGroupRect(getXPoints(x)),\n })),\n };\n}\n\n// The points are sorted to ensure consistent navigation, including inverted chart orientation.\n// The order of series in grouped column charts is kept, while stacked series are sorted by their\n// respective positions in the plot.\nfunction sortPoints(group: Highcharts.Point[]) {\n const reversed = !!group[0]?.series.yAxis?.reversed;\n group.sort((a, b) => {\n const ay = a.plotY === undefined || (a.series.type === \"column\" && !isSeriesStacked(a.series)) ? 0 : a.plotY;\n const by = b.plotY === undefined || (b.series.type === \"column\" && !isSeriesStacked(b.series)) ? 0 : b.plotY;\n return !reversed ? ay - by : by - ay;\n });\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export var PACKAGE_SOURCE = "chart-components";
2
- export var PACKAGE_VERSION = "1.0.0 (dfa2132d)";
2
+ export var PACKAGE_VERSION = "1.0.0 (538da2ab)";
3
3
  export var THEME = "open-source-visual-refresh";
4
4
  export var ALWAYS_VISUAL_REFRESH = true;
5
5
  export var SYSTEM = "core";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "PACKAGE_SOURCE": "chart-components",
3
- "PACKAGE_VERSION": "1.0.0 (dfa2132d)",
3
+ "PACKAGE_VERSION": "1.0.0 (538da2ab)",
4
4
  "THEME": "open-source-visual-refresh",
5
5
  "ALWAYS_VISUAL_REFRESH": true,
6
6
  "SYSTEM": "core"
@@ -306,6 +306,7 @@ export const colorBackgroundCodeEditorLoading: string;
306
306
  export const colorBackgroundCodeEditorPaneItemHover: string;
307
307
  export const colorBackgroundCodeEditorStatusBar: string;
308
308
  export const colorBackgroundCard: string;
309
+ export const colorBackgroundItemCard: string;
309
310
  export const colorBackgroundContainerContent: string;
310
311
  export const colorBackgroundContainerHeader: string;
311
312
  export const colorBackgroundControlChecked: string;
@@ -398,6 +399,8 @@ export const colorBorderCodeEditorDefault: string;
398
399
  export const colorBorderCodeEditorPaneItemHover: string;
399
400
  export const colorBorderCard: string;
400
401
  export const colorBorderCardHighlighted: string;
402
+ export const colorBorderItemCard: string;
403
+ export const colorBorderItemCardHighlighted: string;
401
404
  export const colorBorderContainerDivider: string;
402
405
  export const colorBorderContainerTop: string;
403
406
  export const colorBorderControlChecked: string;
@@ -631,6 +634,8 @@ export const borderRadiusCalendarDayFocusRing: string;
631
634
  export const borderRadiusCodeEditor: string;
632
635
  export const borderRadiusCardDefault: string;
633
636
  export const borderRadiusCardEmbedded: string;
637
+ export const borderRadiusItemCardDefault: string;
638
+ export const borderRadiusItemCardEmbedded: string;
634
639
  export const borderRadiusContainer: string;
635
640
  export const borderRadiusControlCircularFocusRing: string;
636
641
  export const borderRadiusControlDefaultFocusRing: string;
@@ -650,6 +655,8 @@ export const borderLinkFocusRingOutline: string;
650
655
  export const borderLinkFocusRingShadowSpread: string;
651
656
  export const borderWidthCard: string;
652
657
  export const borderWidthCardHighlighted: string;
658
+ export const borderWidthItemCard: string;
659
+ export const borderWidthItemCardHighlighted: string;
653
660
  export const borderWidthAlert: string;
654
661
  export const borderWidthAlertBlockStart: string;
655
662
  export const borderWidthAlertBlockEnd: string;
@@ -732,6 +739,10 @@ export const spaceCardHorizontalDefault: string;
732
739
  export const spaceCardHorizontalEmbedded: string;
733
740
  export const spaceCardVerticalDefault: string;
734
741
  export const spaceCardVerticalEmbedded: string;
742
+ export const spaceItemCardHorizontalDefault: string;
743
+ export const spaceItemCardHorizontalEmbedded: string;
744
+ export const spaceItemCardVerticalDefault: string;
745
+ export const spaceItemCardVerticalEmbedded: string;
735
746
  export const spaceCodeEditorStatusFocusOutlineGutter: string;
736
747
  export const spaceContainerContentTop: string;
737
748
  export const spaceContainerHeaderTop: string;
@@ -818,6 +829,7 @@ export const spaceXl: string;
818
829
  export const spaceXxl: string;
819
830
  export const spaceXxxl: string;
820
831
  export const shadowCard: string;
832
+ export const shadowItemCard: string;
821
833
  export const shadowContainer: string;
822
834
  export const shadowContainerActive: string;
823
835
  export const shadowDropdown: string;
@@ -306,6 +306,7 @@ export var colorBackgroundCodeEditorLoading = "var(--color-background-code-edito
306
306
  export var colorBackgroundCodeEditorPaneItemHover = "var(--color-background-code-editor-pane-item-hover-z6k9mr, #ebebf0)";
307
307
  export var colorBackgroundCodeEditorStatusBar = "var(--color-background-code-editor-status-bar-yjtxod, #f3f3f7)";
308
308
  export var colorBackgroundCard = "var(--color-background-card-p5vrq0, #ffffff)";
309
+ export var colorBackgroundItemCard = "var(--color-background-item-card-ww2wfv, #ffffff)";
309
310
  export var colorBackgroundContainerContent = "var(--color-background-container-content-6u8rvp, #ffffff)";
310
311
  export var colorBackgroundContainerHeader = "var(--color-background-container-header-gs3mbe, #ffffff)";
311
312
  export var colorBackgroundControlChecked = "var(--color-background-control-checked-ka7kc2, #006ce0)";
@@ -398,6 +399,8 @@ export var colorBorderCodeEditorDefault = "var(--color-border-code-editor-defaul
398
399
  export var colorBorderCodeEditorPaneItemHover = "var(--color-border-code-editor-pane-item-hover-wvblek, #8c8c94)";
399
400
  export var colorBorderCard = "var(--color-border-card-3n24fu, #c6c6cd)";
400
401
  export var colorBorderCardHighlighted = "var(--color-border-card-highlighted-ygosod, #006ce0)";
402
+ export var colorBorderItemCard = "var(--color-border-item-card-fia23i, #c6c6cd)";
403
+ export var colorBorderItemCardHighlighted = "var(--color-border-item-card-highlighted-5l7rko, #006ce0)";
401
404
  export var colorBorderContainerDivider = "var(--color-border-container-divider-9huz1a, transparent)";
402
405
  export var colorBorderContainerTop = "var(--color-border-container-top-k3vmoz, transparent)";
403
406
  export var colorBorderControlChecked = "var(--color-border-control-checked-bdv28l, #006ce0)";
@@ -631,6 +634,8 @@ export var borderRadiusCalendarDayFocusRing = "var(--border-radius-calendar-day-
631
634
  export var borderRadiusCodeEditor = "var(--border-radius-code-editor-5palck, 8px)";
632
635
  export var borderRadiusCardDefault = "var(--border-radius-card-default-d8ipr7, 16px)";
633
636
  export var borderRadiusCardEmbedded = "var(--border-radius-card-embedded-fvclp8, 8px)";
637
+ export var borderRadiusItemCardDefault = "var(--border-radius-item-card-default-pi9u8q, 16px)";
638
+ export var borderRadiusItemCardEmbedded = "var(--border-radius-item-card-embedded-l0g6e3, 8px)";
634
639
  export var borderRadiusContainer = "var(--border-radius-container-nsfwmm, 16px)";
635
640
  export var borderRadiusControlCircularFocusRing = "var(--border-radius-control-circular-focus-ring-yjhscw, 4px)";
636
641
  export var borderRadiusControlDefaultFocusRing = "var(--border-radius-control-default-focus-ring-1uabki, 4px)";
@@ -650,6 +655,8 @@ export var borderLinkFocusRingOutline = "var(--border-link-focus-ring-outline-1p
650
655
  export var borderLinkFocusRingShadowSpread = "var(--border-link-focus-ring-shadow-spread-39uvxr, 2px)";
651
656
  export var borderWidthCard = "var(--border-width-card-x24gzt, 1px)";
652
657
  export var borderWidthCardHighlighted = "var(--border-width-card-highlighted-x17dhn, 2px)";
658
+ export var borderWidthItemCard = "var(--border-width-item-card-3wmyp3, 1px)";
659
+ export var borderWidthItemCardHighlighted = "var(--border-width-item-card-highlighted-jay4ll, 2px)";
653
660
  export var borderWidthAlert = "var(--border-width-alert-tuifgy, 2px)";
654
661
  export var borderWidthAlertBlockStart = "var(--border-width-alert-block-start-5wbfsk, 2px)";
655
662
  export var borderWidthAlertBlockEnd = "var(--border-width-alert-block-end-q8rr42, 2px)";
@@ -732,6 +739,10 @@ export var spaceCardHorizontalDefault = "var(--space-card-horizontal-default-pih
732
739
  export var spaceCardHorizontalEmbedded = "var(--space-card-horizontal-embedded-sasxhu, 12px)";
733
740
  export var spaceCardVerticalDefault = "var(--space-card-vertical-default-e40tif, 16px)";
734
741
  export var spaceCardVerticalEmbedded = "var(--space-card-vertical-embedded-30pnhg, 10px)";
742
+ export var spaceItemCardHorizontalDefault = "var(--space-item-card-horizontal-default-obq2ks, 20px)";
743
+ export var spaceItemCardHorizontalEmbedded = "var(--space-item-card-horizontal-embedded-e0vef5, 12px)";
744
+ export var spaceItemCardVerticalDefault = "var(--space-item-card-vertical-default-ppqfu4, 16px)";
745
+ export var spaceItemCardVerticalEmbedded = "var(--space-item-card-vertical-embedded-zuozef, 10px)";
735
746
  export var spaceCodeEditorStatusFocusOutlineGutter = "var(--space-code-editor-status-focus-outline-gutter-o87hra, -7px)";
736
747
  export var spaceContainerContentTop = "var(--space-container-content-top-1wtqrc, 4px)";
737
748
  export var spaceContainerHeaderTop = "var(--space-container-header-top-am4vzw, 12px)";
@@ -818,6 +829,7 @@ export var spaceXl = "var(--space-xl-jfy3x4, 24px)";
818
829
  export var spaceXxl = "var(--space-xxl-32srm4, 32px)";
819
830
  export var spaceXxxl = "var(--space-xxxl-aut1u7, 40px)";
820
831
  export var shadowCard = "var(--shadow-card-hmrw4q, none)";
832
+ export var shadowItemCard = "var(--shadow-item-card-282f8w, none)";
821
833
  export var shadowContainer = "var(--shadow-container-53ltfv, 0px 0px 1px 1px #e9ebed, 0px 1px 8px 2px rgba(0, 7, 22, 0.12))";
822
834
  export var shadowContainerActive = "var(--shadow-container-active-ypjjoc, 0px 1px 1px 1px #e9ebed, 0px 6px 36px #0007161a)";
823
835
  export var shadowDropdown = "var(--shadow-dropdown-isf0w4, 0px 4px 20px 1px rgba(0, 7, 22, 0.10))";