@carbon/ibm-products 2.98.0 → 2.99.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.
- package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +463 -463
- package/css/carbon.css +9599 -6352
- package/css/carbon.css.map +1 -1
- package/css/index-full-carbon.css +5121 -1880
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +1 -1
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +29 -186
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +1 -1
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +29 -186
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +1 -1
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +397 -447
- package/css/index.css.map +1 -1
- package/css/index.min.css +1 -1
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelectColumn.js +4 -4
- package/es/components/AddSelect/next/AddSelectColumn.js +2 -2
- package/es/components/ConditionBuilder/ConditionBuilder.d.ts +21 -0
- package/es/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
- package/es/components/ConditionBuilder/ConditionBuilder.js +51 -44
- package/es/components/ConditionBuilder/ConditionBuilder.types.d.ts +47 -9
- package/es/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
- package/es/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts +9 -2
- package/es/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts.map +1 -1
- package/es/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.js +16 -3
- package/es/components/ConditionBuilder/ConditionBuilderContext/ConditionBuilderProvider.d.ts.map +1 -1
- package/es/components/ConditionBuilder/ConditionBuilderContext/ConditionBuilderProvider.js +37 -17
- package/es/components/ConditionBuilder/ConditionBuilderContext/translationObject.d.ts +1 -0
- package/es/components/ConditionBuilder/ConditionBuilderContext/translationObject.js +1 -0
- package/es/components/ConditionBuilder/index.d.ts +1 -1
- package/es/components/ConditionBuilder/index.d.ts.map +1 -1
- package/es/components/ConditionBuilder/utils/handleKeyboardEvents.js +2 -2
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +2 -2
- package/es/components/EmptyStates/assets/ErrorIllustration.js +2 -2
- package/es/components/EmptyStates/assets/NoDataIllustration.js +2 -2
- package/es/components/EmptyStates/assets/NoTagsIllustration.js +2 -2
- package/es/components/EmptyStates/assets/NotFoundIllustration.js +2 -2
- package/es/components/EmptyStates/assets/NotificationsIllustration.js +2 -2
- package/es/components/EmptyStates/assets/UnauthorizedIllustration.js +2 -2
- package/es/components/NotificationsPanel/NotificationsPanel.js +2 -2
- package/es/components/PageHeader/next/PageHeader.d.ts +10 -0
- package/es/components/PageHeader/next/PageHeader.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeader.js +6 -3
- package/es/components/PageHeader/next/PageHeaderBreadcrumbBar.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderBreadcrumbBar.js +6 -3
- package/es/components/PageHeader/next/PageHeaderBreadcrumbPageActions.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderBreadcrumbPageActions.js +4 -10
- package/es/components/PageHeader/next/PageHeaderContent.d.ts +3 -2
- package/es/components/PageHeader/next/PageHeaderContent.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderContent.js +14 -11
- package/es/components/PageHeader/next/PageHeaderContentPageActions.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderContentPageActions.js +3 -2
- package/es/components/PageHeader/next/PageHeaderScrollButton.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderScrollButton.js +3 -0
- package/es/components/PageHeader/next/PageHeaderTabBar.js +11 -3
- package/es/components/PageHeader/next/PageHeaderTagOverflow.d.ts.map +1 -1
- package/es/components/PageHeader/next/PageHeaderTagOverflow.js +10 -2
- package/es/components/PageHeader/next/context.d.ts +2 -0
- package/es/components/PageHeader/next/context.d.ts.map +1 -1
- package/es/components/PageHeader/next/context.js +3 -1
- package/es/components/StatusIcon/StatusIcon.d.ts +11 -9
- package/es/components/StatusIcon/StatusIcon.d.ts.map +1 -1
- package/es/components/StatusIcon/StatusIcon.js +16 -0
- package/es/components/TagOverflow/TagOverflow.d.ts +9 -2
- package/es/components/TagOverflow/TagOverflow.d.ts.map +1 -1
- package/es/components/TagOverflow/TagOverflow.js +10 -4
- package/es/components/TagOverflow/TagOverflowModal.d.ts +22 -4
- package/es/components/TagOverflow/TagOverflowModal.d.ts.map +1 -1
- package/es/components/TagOverflow/TagOverflowModal.js +15 -6
- package/es/components/Tearsheet/TearsheetShell.js +2 -2
- package/es/components/Tearsheet/next/Tearsheet.d.ts.map +1 -1
- package/es/components/Tearsheet/next/Tearsheet.js +4 -3
- package/es/components/Tearsheet/next/TearsheetBody.d.ts.map +1 -1
- package/es/components/Tearsheet/next/TearsheetBody.js +1 -3
- package/es/components/Tearsheet/next/TearsheetHeaderContent.d.ts +3 -2
- package/es/components/Tearsheet/next/TearsheetHeaderContent.d.ts.map +1 -1
- package/es/components/Tearsheet/next/TearsheetHeaderContent.js +3 -3
- package/es/components/index.d.ts +1 -1
- package/es/components/index.d.ts.map +1 -1
- package/es/global/js/hooks/useCreateComponentFocus.js +1 -8
- package/es/global/js/utils/useId.js +2 -2
- package/es/index.js +3 -3
- package/es/node_modules/@carbon/icons-react/es/generated/bucket-11.js +342 -310
- package/es/node_modules/@carbon/icons-react/es/generated/bucket-3.js +48 -56
- package/es/settings.d.ts +4 -4
- package/lib/components/ConditionBuilder/ConditionBuilder.d.ts +21 -0
- package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.js +51 -44
- package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +47 -9
- package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts +9 -2
- package/lib/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.js +16 -3
- package/lib/components/ConditionBuilder/ConditionBuilderContext/ConditionBuilderProvider.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilderContext/ConditionBuilderProvider.js +36 -16
- package/lib/components/ConditionBuilder/ConditionBuilderContext/translationObject.d.ts +1 -0
- package/lib/components/ConditionBuilder/ConditionBuilderContext/translationObject.js +1 -0
- package/lib/components/ConditionBuilder/index.d.ts +1 -1
- package/lib/components/ConditionBuilder/index.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/utils/handleKeyboardEvents.js +2 -2
- package/lib/components/PageHeader/next/PageHeader.d.ts +10 -0
- package/lib/components/PageHeader/next/PageHeader.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeader.js +6 -3
- package/lib/components/PageHeader/next/PageHeaderBreadcrumbBar.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderBreadcrumbBar.js +6 -3
- package/lib/components/PageHeader/next/PageHeaderBreadcrumbPageActions.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderBreadcrumbPageActions.js +3 -9
- package/lib/components/PageHeader/next/PageHeaderContent.d.ts +3 -2
- package/lib/components/PageHeader/next/PageHeaderContent.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderContent.js +13 -10
- package/lib/components/PageHeader/next/PageHeaderContentPageActions.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderContentPageActions.js +3 -2
- package/lib/components/PageHeader/next/PageHeaderScrollButton.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderScrollButton.js +3 -0
- package/lib/components/PageHeader/next/PageHeaderTabBar.js +11 -3
- package/lib/components/PageHeader/next/PageHeaderTagOverflow.d.ts.map +1 -1
- package/lib/components/PageHeader/next/PageHeaderTagOverflow.js +10 -2
- package/lib/components/PageHeader/next/context.d.ts +2 -0
- package/lib/components/PageHeader/next/context.d.ts.map +1 -1
- package/lib/components/PageHeader/next/context.js +3 -1
- package/lib/components/StatusIcon/StatusIcon.d.ts +11 -9
- package/lib/components/StatusIcon/StatusIcon.d.ts.map +1 -1
- package/lib/components/StatusIcon/StatusIcon.js +16 -0
- package/lib/components/TagOverflow/TagOverflow.d.ts +9 -2
- package/lib/components/TagOverflow/TagOverflow.d.ts.map +1 -1
- package/lib/components/TagOverflow/TagOverflow.js +10 -4
- package/lib/components/TagOverflow/TagOverflowModal.d.ts +22 -4
- package/lib/components/TagOverflow/TagOverflowModal.d.ts.map +1 -1
- package/lib/components/TagOverflow/TagOverflowModal.js +15 -6
- package/lib/components/Tearsheet/next/Tearsheet.d.ts.map +1 -1
- package/lib/components/Tearsheet/next/Tearsheet.js +2 -1
- package/lib/components/Tearsheet/next/TearsheetBody.d.ts.map +1 -1
- package/lib/components/Tearsheet/next/TearsheetBody.js +1 -3
- package/lib/components/Tearsheet/next/TearsheetHeaderContent.d.ts +3 -2
- package/lib/components/Tearsheet/next/TearsheetHeaderContent.d.ts.map +1 -1
- package/lib/components/Tearsheet/next/TearsheetHeaderContent.js +3 -3
- package/lib/components/index.d.ts +1 -1
- package/lib/components/index.d.ts.map +1 -1
- package/lib/global/js/hooks/useCreateComponentFocus.js +1 -8
- package/lib/index.js +5 -9
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-0.js +33 -33
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-1.js +26 -29
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-10.js +336 -365
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-11.js +365 -333
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-12.js +600 -644
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-13.js +724 -662
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-14.js +608 -624
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-15.js +663 -662
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-16.js +533 -551
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-17.js +701 -725
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-18.js +669 -645
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-19.js +521 -496
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-2.js +29 -26
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-20.js +592 -633
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-21.js +688 -174
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-22.js +210 -0
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-3.js +52 -60
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-4.js +60 -52
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-5.js +65 -83
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-6.js +129 -121
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-7.js +199 -231
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-8.js +296 -264
- package/lib/node_modules/@carbon/icons-react/lib/generated/bucket-9.js +303 -336
- package/lib/node_modules/@carbon/icons-react/lib/index.js +535 -486
- package/lib/settings.d.ts +4 -4
- package/package.json +17 -17
- package/scss/components/PageHeader/_page-header.scss +32 -32
- package/scss/components/Tearsheet/_tearsheet_next.scss +10 -8
- package/telemetry.yml +7 -3
- package/es/components/Card/next/Card.js +0 -180
- package/es/components/Card/next/CardAction.js +0 -57
- package/es/components/Card/next/CardActions.js +0 -112
- package/es/components/Card/next/CardBody.js +0 -47
- package/es/components/Card/next/CardContext.js +0 -31
- package/es/components/Card/next/CardFooter.js +0 -47
- package/es/components/Card/next/CardHeader.js +0 -62
- package/es/components/Card/next/CardHeaderMedia.js +0 -46
- package/es/components/Card/next/CardMedia.js +0 -59
- package/es/components/Card/next/CardTitle.js +0 -121
- package/es/components/Card/next/CardTitleMedia.js +0 -49
- package/es/components/Card/next/index.js +0 -33
- package/lib/components/Card/next/Card.js +0 -182
- package/lib/components/Card/next/CardAction.js +0 -64
- package/lib/components/Card/next/CardActions.js +0 -119
- package/lib/components/Card/next/CardBody.js +0 -54
- package/lib/components/Card/next/CardContext.js +0 -33
- package/lib/components/Card/next/CardFooter.js +0 -54
- package/lib/components/Card/next/CardHeader.js +0 -69
- package/lib/components/Card/next/CardHeaderMedia.js +0 -53
- package/lib/components/Card/next/CardMedia.js +0 -66
- package/lib/components/Card/next/CardTitle.js +0 -128
- package/lib/components/Card/next/CardTitleMedia.js +0 -56
- package/lib/components/Card/next/index.js +0 -38
package/lib/settings.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export namespace carbon {
|
|
2
2
|
const themes: {
|
|
3
|
-
white: typeof import("@carbon/themes/
|
|
4
|
-
g10: typeof import("@carbon/themes/
|
|
5
|
-
g90: typeof import("@carbon/themes/
|
|
6
|
-
g100: typeof import("@carbon/themes/
|
|
3
|
+
white: typeof import("@carbon/themes/js/generated/themes/white");
|
|
4
|
+
g10: typeof import("@carbon/themes/js/generated/themes/g10");
|
|
5
|
+
g90: typeof import("@carbon/themes/js/generated/themes/g90");
|
|
6
|
+
g100: typeof import("@carbon/themes/js/generated/themes/g100");
|
|
7
7
|
};
|
|
8
8
|
let prefix: string;
|
|
9
9
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/ibm-products",
|
|
3
3
|
"description": "Carbon for IBM Products",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.99.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "es/index.js",
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
"@babel/preset-env": "^7.26.9",
|
|
67
67
|
"@babel/preset-react": "^7.26.3",
|
|
68
68
|
"@babel/preset-typescript": "^7.26.0",
|
|
69
|
-
"@carbon/charts-react": "^1.27.
|
|
70
|
-
"@carbon/ibm-products-utilities": "1.
|
|
71
|
-
"@carbon/styles": "^1.
|
|
69
|
+
"@carbon/charts-react": "^1.27.18",
|
|
70
|
+
"@carbon/ibm-products-utilities": "1.8.0",
|
|
71
|
+
"@carbon/styles": "^1.114.0",
|
|
72
72
|
"@figma/code-connect": "^1.4.0",
|
|
73
73
|
"@ibm/telemetry-js-config-generator": "^2.0.1",
|
|
74
74
|
"@storybook/addon-a11y": "^10.3.5",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"@types/react-table": "^7.7.20",
|
|
81
81
|
"@vitejs/plugin-react": "^5.0.0",
|
|
82
82
|
"babel-plugin-dev-expression": "^0.2.3",
|
|
83
|
-
"babel-preset-ibm-cloud-cognitive": "^0.
|
|
83
|
+
"babel-preset-ibm-cloud-cognitive": "^0.57.0",
|
|
84
84
|
"change-case": "5.4.4",
|
|
85
85
|
"classnames": "^2.5.1",
|
|
86
86
|
"copyfiles": "^2.4.1",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"fs-extra": "^11.3.0",
|
|
89
89
|
"glob": "^13.0.0",
|
|
90
90
|
"jest": "^30.0.5",
|
|
91
|
-
"jest-config-ibm-cloud-cognitive": "^1.
|
|
91
|
+
"jest-config-ibm-cloud-cognitive": "^1.58.0",
|
|
92
92
|
"jest-environment-jsdom": "^30.0.5",
|
|
93
93
|
"namor": "^1.1.2",
|
|
94
94
|
"npm-run-all2": "^8.0.0",
|
|
@@ -107,11 +107,11 @@
|
|
|
107
107
|
"dependencies": {
|
|
108
108
|
"@babel/runtime": "^7.26.10",
|
|
109
109
|
"@carbon-labs/react-resizer": "^0.25.0",
|
|
110
|
-
"@carbon/feature-flags": "^1.
|
|
111
|
-
"@carbon/ibm-products-styles": "^2.
|
|
110
|
+
"@carbon/feature-flags": "^1.8.0",
|
|
111
|
+
"@carbon/ibm-products-styles": "^2.95.0",
|
|
112
112
|
"@carbon/telemetry": "^0.1.0",
|
|
113
|
-
"@carbon/utilities": "^0.
|
|
114
|
-
"@carbon/utilities-react": "0.
|
|
113
|
+
"@carbon/utilities": "^0.25.0",
|
|
114
|
+
"@carbon/utilities-react": "0.28.0",
|
|
115
115
|
"@dnd-kit/core": "^6.3.1",
|
|
116
116
|
"@dnd-kit/modifiers": "^9.0.0",
|
|
117
117
|
"@dnd-kit/sortable": "^10.0.0",
|
|
@@ -122,15 +122,15 @@
|
|
|
122
122
|
"react-window": "^1.8.11"
|
|
123
123
|
},
|
|
124
124
|
"peerDependencies": {
|
|
125
|
-
"@carbon/grid": "^11.
|
|
126
|
-
"@carbon/layout": "^11.
|
|
127
|
-
"@carbon/motion": "^11.
|
|
128
|
-
"@carbon/react": "^1.
|
|
129
|
-
"@carbon/themes": "^11.
|
|
130
|
-
"@carbon/type": "^11.
|
|
125
|
+
"@carbon/grid": "^11.61.0",
|
|
126
|
+
"@carbon/layout": "^11.58.0",
|
|
127
|
+
"@carbon/motion": "^11.51.0",
|
|
128
|
+
"@carbon/react": "^1.115.0",
|
|
129
|
+
"@carbon/themes": "^11.80.0",
|
|
130
|
+
"@carbon/type": "^11.66.0",
|
|
131
131
|
"react": "^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0",
|
|
132
132
|
"react-dom": "^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0",
|
|
133
133
|
"react-is": "^16.13.1 || ^17.0.2 || ^18.3.1 || ^19.0.0"
|
|
134
134
|
},
|
|
135
|
-
"gitHead": "
|
|
135
|
+
"gitHead": "4e2783128ab5da7b4f2c161b415dce861fb68d45"
|
|
136
136
|
}
|
|
@@ -724,6 +724,11 @@ $duration: 1000ms;
|
|
|
724
724
|
overflow-x: clip;
|
|
725
725
|
}
|
|
726
726
|
|
|
727
|
+
// fullWidthGrid='xl': extra inline padding to match deprecated behavior
|
|
728
|
+
&.#{$block-class}.#{$block-class}--width--xl {
|
|
729
|
+
padding-inline: $spacing-07;
|
|
730
|
+
}
|
|
731
|
+
|
|
727
732
|
// When disableStickyTabBar is true, remove sticky positioning from root
|
|
728
733
|
// This allows breadcrumb to stick to viewport while tab bar scrolls normally
|
|
729
734
|
&.#{$block-class}.#{$block-class}--disable-sticky-tab-bar {
|
|
@@ -818,6 +823,17 @@ $duration: 1000ms;
|
|
|
818
823
|
margin-inline-end: $spacing-04;
|
|
819
824
|
}
|
|
820
825
|
|
|
826
|
+
.#{$block-class}__breadcrumb-page-actions {
|
|
827
|
+
display: inline-flex;
|
|
828
|
+
align-items: center;
|
|
829
|
+
justify-content: flex-end;
|
|
830
|
+
inline-size: 50%;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.#{$block-class}__breadcrumb-page-actions__overflow-item {
|
|
834
|
+
position: relative;
|
|
835
|
+
}
|
|
836
|
+
|
|
821
837
|
.#{$block-class}__breadcrumb-wrapper {
|
|
822
838
|
display: inline-flex;
|
|
823
839
|
flex: 1 1 auto;
|
|
@@ -884,7 +900,7 @@ $duration: 1000ms;
|
|
|
884
900
|
display: grid;
|
|
885
901
|
gap: $spacing-05;
|
|
886
902
|
grid-template-columns: auto minmax(
|
|
887
|
-
var(
|
|
903
|
+
var(--#{$pkg-prefix}-page-header-title-grid-width, 0),
|
|
888
904
|
1fr
|
|
889
905
|
);
|
|
890
906
|
margin-block-end: $spacing-05;
|
|
@@ -1045,7 +1061,12 @@ $duration: 1000ms;
|
|
|
1045
1061
|
.#{$block-class}__tab-bar {
|
|
1046
1062
|
position: sticky;
|
|
1047
1063
|
z-index: 1;
|
|
1064
|
+
// Use flex at all breakpoints so the scroller button is always a
|
|
1065
|
+
// natural in-flow sibling of the Grid column — no absolute positioning
|
|
1066
|
+
// needed and no overlap with the tag overflow area.
|
|
1067
|
+
display: flex;
|
|
1048
1068
|
align-content: center;
|
|
1069
|
+
align-items: center;
|
|
1049
1070
|
background-color: $layer;
|
|
1050
1071
|
/* stylelint-disable-next-line carbon/layout-use */
|
|
1051
1072
|
inset-block-start: var(--#{$pkg-prefix}-page-header-breadcrumb-top);
|
|
@@ -1056,16 +1077,15 @@ $duration: 1000ms;
|
|
|
1056
1077
|
&.#{$block-class}.#{$block-class}--disable-sticky-tab-bar
|
|
1057
1078
|
.#{$block-class}__tab-bar {
|
|
1058
1079
|
position: static;
|
|
1059
|
-
// On smaller screens, use flex to keep scroller button in flow
|
|
1060
|
-
// position: relative;
|
|
1061
1080
|
display: flex;
|
|
1062
1081
|
align-items: center;
|
|
1063
|
-
|
|
1082
|
+
}
|
|
1064
1083
|
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1084
|
+
// Grid column grows to fill the row, leaving the scroller as a fixed-width
|
|
1085
|
+
// item at the end — no absolute positioning hacks needed.
|
|
1086
|
+
.#{$block-class}__tab-bar > .#{$carbon-prefix}--css-grid {
|
|
1087
|
+
flex: 1;
|
|
1088
|
+
min-inline-size: 0;
|
|
1069
1089
|
}
|
|
1070
1090
|
|
|
1071
1091
|
.#{$block-class}__tab-bar--tablist {
|
|
@@ -1092,15 +1112,6 @@ $duration: 1000ms;
|
|
|
1092
1112
|
display: flex;
|
|
1093
1113
|
align-items: center;
|
|
1094
1114
|
justify-content: right;
|
|
1095
|
-
transform: translateX(calc($spacing-06 * -1));
|
|
1096
|
-
|
|
1097
|
-
@include breakpoint(md) {
|
|
1098
|
-
padding-inline-end: $spacing-03;
|
|
1099
|
-
transform: translateX(0);
|
|
1100
|
-
}
|
|
1101
|
-
@include breakpoint(max) {
|
|
1102
|
-
padding-inline-end: $spacing-05;
|
|
1103
|
-
}
|
|
1104
1115
|
}
|
|
1105
1116
|
|
|
1106
1117
|
.#{$carbon-prefix}--tabs .#{$carbon-prefix}--tab--overflow-nav-button {
|
|
@@ -1139,17 +1150,12 @@ $duration: 1000ms;
|
|
|
1139
1150
|
align-content: center;
|
|
1140
1151
|
justify-content: flex-end;
|
|
1141
1152
|
inline-size: 40%;
|
|
1142
|
-
padding-inline-end: $spacing-06;
|
|
1143
1153
|
text-align: end;
|
|
1144
1154
|
|
|
1145
1155
|
.#{$carbon-prefix}--tag {
|
|
1146
1156
|
flex-shrink: 0;
|
|
1147
1157
|
margin-inline-end: $spacing-03;
|
|
1148
1158
|
}
|
|
1149
|
-
|
|
1150
|
-
@include breakpoint-down(lg) {
|
|
1151
|
-
padding-inline-end: $spacing-06;
|
|
1152
|
-
}
|
|
1153
1159
|
}
|
|
1154
1160
|
|
|
1155
1161
|
.#{$block-class}--tag-overflow-popover__hidden {
|
|
@@ -1173,18 +1179,12 @@ $duration: 1000ms;
|
|
|
1173
1179
|
}
|
|
1174
1180
|
|
|
1175
1181
|
.#{$pkg-prefix}--page-header--scroller-button-container {
|
|
1176
|
-
|
|
1182
|
+
// Always in-flow alongside the Grid column — no absolute positioning.
|
|
1183
|
+
// flex-shrink: 0 ensures it always occupies its natural 40px width and
|
|
1184
|
+
// never competes for space with the tabs or tag overflow area.
|
|
1177
1185
|
display: inline-flex;
|
|
1186
|
+
flex-shrink: 0;
|
|
1178
1187
|
align-items: center;
|
|
1179
|
-
margin-inline-start: $spacing-03;
|
|
1180
|
-
|
|
1181
|
-
// On max breakpoint and above, position absolutely to the right (enough gutter space)
|
|
1182
|
-
@include breakpoint(sm) {
|
|
1183
|
-
position: absolute;
|
|
1184
|
-
inset-block-start: 0;
|
|
1185
|
-
inset-inline-end: 0;
|
|
1186
|
-
margin-inline-start: 0;
|
|
1187
|
-
}
|
|
1188
1188
|
}
|
|
1189
1189
|
|
|
1190
1190
|
@keyframes page-header-title-breadcrumb-animation {
|
|
@@ -347,6 +347,10 @@ $transform-start: translate3d(0, calc(min(95vh, 500px)), 0);
|
|
|
347
347
|
.#{$block-class__next}__header-content {
|
|
348
348
|
align-self: center;
|
|
349
349
|
margin-block-end: 0;
|
|
350
|
+
|
|
351
|
+
@include breakpoint-down(md) {
|
|
352
|
+
align-self: stretch;
|
|
353
|
+
}
|
|
350
354
|
}
|
|
351
355
|
|
|
352
356
|
.#{$carbon-prefix}--modal-close {
|
|
@@ -463,6 +467,10 @@ $transform-start: translate3d(0, calc(min(95vh, 500px)), 0);
|
|
|
463
467
|
gap: $spacing-05;
|
|
464
468
|
margin-block-end: $spacing-03;
|
|
465
469
|
|
|
470
|
+
&--no-content-below {
|
|
471
|
+
margin-block-end: 0;
|
|
472
|
+
}
|
|
473
|
+
|
|
466
474
|
svg {
|
|
467
475
|
flex-shrink: 0;
|
|
468
476
|
}
|
|
@@ -620,14 +628,9 @@ $transform-start: translate3d(0, calc(min(95vh, 500px)), 0);
|
|
|
620
628
|
|
|
621
629
|
.#{$block-class__next}__footer {
|
|
622
630
|
overflow: hidden;
|
|
623
|
-
block-size: $spacing-11;
|
|
624
631
|
border-block-start: 1px solid $border-subtle-01;
|
|
625
632
|
grid-area: footer;
|
|
626
633
|
|
|
627
|
-
@include breakpoint-down(md) {
|
|
628
|
-
block-size: $spacing-10;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
634
|
// Footer overflow handling for many actions (> 3 buttons)
|
|
632
635
|
&.#{$block-class__next}__footer--three-actions {
|
|
633
636
|
@include breakpoint-down(sm) {
|
|
@@ -671,7 +674,9 @@ $transform-start: translate3d(0, calc(min(95vh, 500px)), 0);
|
|
|
671
674
|
|
|
672
675
|
.#{$block-class__next}__main-content {
|
|
673
676
|
position: relative;
|
|
677
|
+
background-color: $background;
|
|
674
678
|
}
|
|
679
|
+
|
|
675
680
|
.#{$block-class__next}__side-panel {
|
|
676
681
|
position: absolute;
|
|
677
682
|
z-index: 9999;
|
|
@@ -728,7 +733,4 @@ $transform-start: translate3d(0, calc(min(95vh, 500px)), 0);
|
|
|
728
733
|
padding-inline: $spacing-05;
|
|
729
734
|
}
|
|
730
735
|
}
|
|
731
|
-
.#{$block-class__next}__footer {
|
|
732
|
-
block-size: $spacing-10;
|
|
733
|
-
}
|
|
734
736
|
}
|
package/telemetry.yml
CHANGED
|
@@ -88,6 +88,7 @@ collect:
|
|
|
88
88
|
- disableColumnSwapping
|
|
89
89
|
- disabled
|
|
90
90
|
- disabledCell
|
|
91
|
+
- disablePortal
|
|
91
92
|
- disableSubmit
|
|
92
93
|
- displayMetalPanel
|
|
93
94
|
- downloadLinkLabel
|
|
@@ -216,6 +217,7 @@ collect:
|
|
|
216
217
|
- metadata
|
|
217
218
|
- metaIconDescription
|
|
218
219
|
- metaPanelTitle
|
|
220
|
+
- modalAriaLabel
|
|
219
221
|
- modifiers
|
|
220
222
|
- multi
|
|
221
223
|
- multiline
|
|
@@ -327,6 +329,7 @@ collect:
|
|
|
327
329
|
- scoreThresholds
|
|
328
330
|
- scrollBarSize
|
|
329
331
|
- scroller
|
|
332
|
+
- searchLabel
|
|
330
333
|
- searchPlaceholder
|
|
331
334
|
- searchProps
|
|
332
335
|
- searchResultsTitle
|
|
@@ -375,6 +378,7 @@ collect:
|
|
|
375
378
|
- slug
|
|
376
379
|
- small
|
|
377
380
|
- sortByLabel
|
|
381
|
+
- startActive
|
|
378
382
|
- startConditionLabel
|
|
379
383
|
- state
|
|
380
384
|
- statementConfigCustom
|
|
@@ -432,7 +436,6 @@ collect:
|
|
|
432
436
|
- content
|
|
433
437
|
- copyrightText
|
|
434
438
|
- logo
|
|
435
|
-
- modalAriaLabel
|
|
436
439
|
- version
|
|
437
440
|
# ActionBar
|
|
438
441
|
- overflowItems
|
|
@@ -462,7 +465,6 @@ collect:
|
|
|
462
465
|
- header
|
|
463
466
|
- onNavigate
|
|
464
467
|
- onSelectAll
|
|
465
|
-
- searchLabel
|
|
466
468
|
- selectAllCheckboxProps
|
|
467
469
|
- setPath
|
|
468
470
|
- showSelectAll
|
|
@@ -1036,9 +1038,11 @@ collect:
|
|
|
1036
1038
|
- width
|
|
1037
1039
|
# TagOverflow
|
|
1038
1040
|
- tagComponent
|
|
1041
|
+
# TagOverflowModal
|
|
1042
|
+
- allTags
|
|
1043
|
+
- onTagClose
|
|
1039
1044
|
# Tearsheet
|
|
1040
1045
|
- containerClassName
|
|
1041
|
-
- disablePortal
|
|
1042
1046
|
- keepMounted
|
|
1043
1047
|
- summaryContentWidth
|
|
1044
1048
|
- verticalGap
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright IBM Corp. 2020, 2026
|
|
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
|
-
import { __toESM } from "../../../_virtual/_rolldown/runtime.js";
|
|
9
|
-
import { require_classnames } from "../../../node_modules/classnames/index.js";
|
|
10
|
-
import { pkg } from "../../../settings.js";
|
|
11
|
-
import { CardContext } from "./CardContext.js";
|
|
12
|
-
import { CardHeader } from "./CardHeader.js";
|
|
13
|
-
import { CardBody } from "./CardBody.js";
|
|
14
|
-
import { CardFooter } from "./CardFooter.js";
|
|
15
|
-
import { CardHeaderMedia } from "./CardHeaderMedia.js";
|
|
16
|
-
import { CardMedia } from "./CardMedia.js";
|
|
17
|
-
import { CardTitle } from "./CardTitle.js";
|
|
18
|
-
import { CardTitleMedia } from "./CardTitleMedia.js";
|
|
19
|
-
import { CardActions } from "./CardActions.js";
|
|
20
|
-
import { CardAction } from "./CardAction.js";
|
|
21
|
-
import React, { forwardRef, isValidElement, useCallback, useMemo } from "react";
|
|
22
|
-
import PropTypes from "prop-types";
|
|
23
|
-
import { AILabel } from "@carbon/react";
|
|
24
|
-
//#region src/components/Card/next/Card.tsx
|
|
25
|
-
/**
|
|
26
|
-
* Copyright IBM Corp. 2026
|
|
27
|
-
*
|
|
28
|
-
* This source code is licensed under the Apache-2.0 license found in the
|
|
29
|
-
* LICENSE file in the root directory of this source tree.
|
|
30
|
-
*/
|
|
31
|
-
var import_classnames = /* @__PURE__ */ __toESM(require_classnames());
|
|
32
|
-
const componentName = "Card";
|
|
33
|
-
const blockClass = `${pkg.prefix}--card-next`;
|
|
34
|
-
/**
|
|
35
|
-
* Card component - Root container for composable card
|
|
36
|
-
*/
|
|
37
|
-
let CardComponent = forwardRef(({ clickable = false, onClick, onKeyDown, disabled = false, density = "productive", decorator, horizontal = false, className, children, ...rest }, ref) => {
|
|
38
|
-
const hasAILabel = useMemo(() => isValidElement(decorator) && decorator.type === AILabel, [decorator]);
|
|
39
|
-
const contextValue = useMemo(() => ({
|
|
40
|
-
clickable,
|
|
41
|
-
disabled,
|
|
42
|
-
decorator,
|
|
43
|
-
horizontal
|
|
44
|
-
}), [
|
|
45
|
-
clickable,
|
|
46
|
-
disabled,
|
|
47
|
-
decorator,
|
|
48
|
-
horizontal
|
|
49
|
-
]);
|
|
50
|
-
const handleKeyDown = useCallback((event) => {
|
|
51
|
-
if (clickable && !disabled && (event.key === "Enter" || event.key === " ")) {
|
|
52
|
-
event.preventDefault();
|
|
53
|
-
onClick?.(event);
|
|
54
|
-
}
|
|
55
|
-
onKeyDown?.(event);
|
|
56
|
-
}, [
|
|
57
|
-
clickable,
|
|
58
|
-
disabled,
|
|
59
|
-
onClick,
|
|
60
|
-
onKeyDown
|
|
61
|
-
]);
|
|
62
|
-
const handleClick = useCallback((event) => {
|
|
63
|
-
if (!disabled) onClick?.(event);
|
|
64
|
-
}, [disabled, onClick]);
|
|
65
|
-
const cardClasses = (0, import_classnames.default)(blockClass, className, {
|
|
66
|
-
[`${blockClass}--clickable`]: clickable && !disabled,
|
|
67
|
-
[`${blockClass}--disabled`]: disabled,
|
|
68
|
-
[`${blockClass}--${density}`]: density,
|
|
69
|
-
[`${blockClass}--has-ai-label`]: hasAILabel,
|
|
70
|
-
[`${blockClass}--horizontal`]: horizontal
|
|
71
|
-
});
|
|
72
|
-
const cardProps = {
|
|
73
|
-
...rest,
|
|
74
|
-
ref,
|
|
75
|
-
className: cardClasses,
|
|
76
|
-
...clickable && {
|
|
77
|
-
role: "button",
|
|
78
|
-
tabIndex: disabled ? -1 : 0,
|
|
79
|
-
onClick: handleClick,
|
|
80
|
-
onKeyDown: handleKeyDown,
|
|
81
|
-
"aria-disabled": disabled
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
const { mediaChildren, contentChildren, mediaIsFirst } = useMemo(() => {
|
|
85
|
-
if (!horizontal) return {
|
|
86
|
-
mediaChildren: [],
|
|
87
|
-
contentChildren: [],
|
|
88
|
-
mediaIsFirst: false
|
|
89
|
-
};
|
|
90
|
-
const childArray = React.Children.toArray(children);
|
|
91
|
-
const isMedia = (child) => React.isValidElement(child) && child.type === CardMedia;
|
|
92
|
-
return {
|
|
93
|
-
mediaChildren: childArray.filter(isMedia),
|
|
94
|
-
contentChildren: childArray.filter((c) => !isMedia(c)),
|
|
95
|
-
mediaIsFirst: childArray.findIndex(isMedia) < childArray.findIndex((c) => !isMedia(c))
|
|
96
|
-
};
|
|
97
|
-
}, [children, horizontal]);
|
|
98
|
-
let renderedChildren = children;
|
|
99
|
-
if (horizontal) {
|
|
100
|
-
const contentWrapper = /* @__PURE__ */ React.createElement("div", { className: `${blockClass}__content` }, contentChildren);
|
|
101
|
-
renderedChildren = mediaIsFirst ? /* @__PURE__ */ React.createElement(React.Fragment, null, mediaChildren, contentWrapper) : /* @__PURE__ */ React.createElement(React.Fragment, null, contentWrapper, mediaChildren);
|
|
102
|
-
}
|
|
103
|
-
return /* @__PURE__ */ React.createElement(CardContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement("div", cardProps, renderedChildren));
|
|
104
|
-
});
|
|
105
|
-
CardComponent.propTypes = {
|
|
106
|
-
/**
|
|
107
|
-
* Card content
|
|
108
|
-
*/
|
|
109
|
-
children: PropTypes.node,
|
|
110
|
-
/**
|
|
111
|
-
* Additional CSS class names
|
|
112
|
-
*/
|
|
113
|
-
className: PropTypes.string,
|
|
114
|
-
/**
|
|
115
|
-
* Makes the entire card clickable
|
|
116
|
-
*/
|
|
117
|
-
clickable: PropTypes.bool,
|
|
118
|
-
/**
|
|
119
|
-
* Optional decorator component (typically AILabel from Carbon)
|
|
120
|
-
*/
|
|
121
|
-
decorator: PropTypes.node,
|
|
122
|
-
/**
|
|
123
|
-
* Density variant: productive uses heading-compact-02, expressive uses heading-03
|
|
124
|
-
*/
|
|
125
|
-
density: PropTypes.oneOf(["productive", "expressive"]),
|
|
126
|
-
/**
|
|
127
|
-
* Disables the card and all interactive elements
|
|
128
|
-
*/
|
|
129
|
-
disabled: PropTypes.bool,
|
|
130
|
-
/**
|
|
131
|
-
* When true, renders media on the left and content (header/body/footer) on the right
|
|
132
|
-
*/
|
|
133
|
-
horizontal: PropTypes.bool,
|
|
134
|
-
/**
|
|
135
|
-
* Click handler for clickable cards
|
|
136
|
-
*/
|
|
137
|
-
onClick: PropTypes.func,
|
|
138
|
-
/**
|
|
139
|
-
* Keyboard event handler for clickable cards
|
|
140
|
-
*/
|
|
141
|
-
onKeyDown: PropTypes.func
|
|
142
|
-
};
|
|
143
|
-
CardComponent = pkg.checkComponentEnabled(CardComponent, componentName);
|
|
144
|
-
CardComponent.displayName = componentName;
|
|
145
|
-
/**
|
|
146
|
-
* -------
|
|
147
|
-
* Exports
|
|
148
|
-
* -------
|
|
149
|
-
*/
|
|
150
|
-
const Header = CardHeader;
|
|
151
|
-
Header.displayName = "Card.Header";
|
|
152
|
-
const Body = CardBody;
|
|
153
|
-
Body.displayName = "Card.Body";
|
|
154
|
-
const Footer = CardFooter;
|
|
155
|
-
Footer.displayName = "Card.Footer";
|
|
156
|
-
const HeaderMedia = CardHeaderMedia;
|
|
157
|
-
HeaderMedia.displayName = "Card.HeaderMedia";
|
|
158
|
-
const Media = CardMedia;
|
|
159
|
-
Media.displayName = "Card.Media";
|
|
160
|
-
const Title = CardTitle;
|
|
161
|
-
Title.displayName = "Card.Title";
|
|
162
|
-
const TitleMedia = CardTitleMedia;
|
|
163
|
-
TitleMedia.displayName = "Card.TitleMedia";
|
|
164
|
-
const Actions = CardActions;
|
|
165
|
-
Actions.displayName = "Card.Actions";
|
|
166
|
-
const Action = CardAction;
|
|
167
|
-
Action.displayName = "Card.Action";
|
|
168
|
-
const Card = Object.assign(CardComponent, {
|
|
169
|
-
Header,
|
|
170
|
-
Body,
|
|
171
|
-
Footer,
|
|
172
|
-
HeaderMedia,
|
|
173
|
-
Media,
|
|
174
|
-
Title,
|
|
175
|
-
TitleMedia,
|
|
176
|
-
Actions,
|
|
177
|
-
Action
|
|
178
|
-
});
|
|
179
|
-
//#endregion
|
|
180
|
-
export { Card };
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright IBM Corp. 2020, 2026
|
|
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
|
-
import { __toESM } from "../../../_virtual/_rolldown/runtime.js";
|
|
9
|
-
import { require_classnames } from "../../../node_modules/classnames/index.js";
|
|
10
|
-
import { pkg } from "../../../settings.js";
|
|
11
|
-
import { getDevtoolsProps } from "../../../global/js/utils/devtools.js";
|
|
12
|
-
import React, { forwardRef } from "react";
|
|
13
|
-
import PropTypes from "prop-types";
|
|
14
|
-
//#region src/components/Card/next/CardAction.tsx
|
|
15
|
-
/**
|
|
16
|
-
* Copyright IBM Corp. 2026
|
|
17
|
-
*
|
|
18
|
-
* This source code is licensed under the Apache-2.0 license found in the
|
|
19
|
-
* LICENSE file in the root directory of this source tree.
|
|
20
|
-
*/
|
|
21
|
-
var import_classnames = /* @__PURE__ */ __toESM(require_classnames());
|
|
22
|
-
const blockClass = `${pkg.prefix}--card-next`;
|
|
23
|
-
const componentName = "CardAction";
|
|
24
|
-
/**
|
|
25
|
-
* CardAction is a wrapper for interactive elements in the card footer.
|
|
26
|
-
* Its presence signals action-set layout to the footer (no padding, auto
|
|
27
|
-
* border, stretch behavior).
|
|
28
|
-
*
|
|
29
|
-
* Note: do not use CardAction inside a clickable card — clickable cards
|
|
30
|
-
* should not contain interactive elements (see usage guidelines).
|
|
31
|
-
*/
|
|
32
|
-
let CardAction = forwardRef(({ children, className, ...rest }, ref) => {
|
|
33
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
34
|
-
...rest,
|
|
35
|
-
ref,
|
|
36
|
-
className: (0, import_classnames.default)(`${blockClass}__action`, className),
|
|
37
|
-
...getDevtoolsProps(componentName)
|
|
38
|
-
}, children);
|
|
39
|
-
});
|
|
40
|
-
CardAction.propTypes = {
|
|
41
|
-
/**
|
|
42
|
-
* Provide the contents of the CardAction.
|
|
43
|
-
*/
|
|
44
|
-
children: PropTypes.node,
|
|
45
|
-
/**
|
|
46
|
-
* Provide an optional class to be applied to the containing node.
|
|
47
|
-
*/
|
|
48
|
-
className: PropTypes.string,
|
|
49
|
-
/**
|
|
50
|
-
* Label shown in the overflow menu when this action is hidden.
|
|
51
|
-
*/
|
|
52
|
-
label: PropTypes.string
|
|
53
|
-
};
|
|
54
|
-
CardAction = pkg.checkComponentEnabled(CardAction, componentName);
|
|
55
|
-
CardAction.displayName = componentName;
|
|
56
|
-
//#endregion
|
|
57
|
-
export { CardAction };
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright IBM Corp. 2020, 2026
|
|
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
|
-
import { __toESM } from "../../../_virtual/_rolldown/runtime.js";
|
|
9
|
-
import { require_classnames } from "../../../node_modules/classnames/index.js";
|
|
10
|
-
import { pkg } from "../../../settings.js";
|
|
11
|
-
import { getDevtoolsProps } from "../../../global/js/utils/devtools.js";
|
|
12
|
-
import React, { Children, forwardRef, useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
-
import PropTypes from "prop-types";
|
|
14
|
-
import { FeatureFlags, OverflowMenu, OverflowMenuItem } from "@carbon/react";
|
|
15
|
-
import { createOverflowHandler } from "@carbon/utilities";
|
|
16
|
-
//#region src/components/Card/next/CardActions.tsx
|
|
17
|
-
/**
|
|
18
|
-
* Copyright IBM Corp. 2026
|
|
19
|
-
*
|
|
20
|
-
* This source code is licensed under the Apache-2.0 license found in the
|
|
21
|
-
* LICENSE file in the root directory of this source tree.
|
|
22
|
-
*/
|
|
23
|
-
var import_classnames = /* @__PURE__ */ __toESM(require_classnames());
|
|
24
|
-
const blockClass = `${pkg.prefix}--card-next`;
|
|
25
|
-
const componentName = "CardActions";
|
|
26
|
-
/**
|
|
27
|
-
* CardActions is a container for action buttons in the card header.
|
|
28
|
-
* Positioned in the top-right corner with 8px gap between actions.
|
|
29
|
-
* When actions exceed 50% of available header space, overflow menu is shown.
|
|
30
|
-
*/
|
|
31
|
-
let CardActions = forwardRef(({ children, className, overflowMenuLabel = "More actions", ...rest }, ref) => {
|
|
32
|
-
const containerRef = useRef(null);
|
|
33
|
-
const [hiddenItems, setHiddenItems] = useState([]);
|
|
34
|
-
const classes = (0, import_classnames.default)(`${blockClass}__actions`, className);
|
|
35
|
-
const actionItems = useMemo(() => {
|
|
36
|
-
const items = [];
|
|
37
|
-
Children.forEach(children, (child, index) => {
|
|
38
|
-
if (React.isValidElement(child)) {
|
|
39
|
-
const actionProps = child.props;
|
|
40
|
-
const button = actionProps.children;
|
|
41
|
-
const buttonProps = React.isValidElement(button) ? button.props : null;
|
|
42
|
-
const label = actionProps.label ?? buttonProps?.label ?? buttonProps?.iconDescription ?? (typeof buttonProps?.children === "string" ? buttonProps.children : `Action ${index + 1}`);
|
|
43
|
-
const id = `${label}-${index}`;
|
|
44
|
-
items.push({
|
|
45
|
-
id,
|
|
46
|
-
element: child,
|
|
47
|
-
label
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
return items;
|
|
52
|
-
}, [children]);
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (!containerRef.current || actionItems.length === 0) return;
|
|
55
|
-
const handler = createOverflowHandler({
|
|
56
|
-
container: containerRef.current,
|
|
57
|
-
onChange: (_visible, hidden) => {
|
|
58
|
-
const hiddenIds = hidden.map((el) => el.dataset.id);
|
|
59
|
-
setHiddenItems(actionItems.filter((item) => hiddenIds.includes(item.id)));
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return () => handler.disconnect();
|
|
63
|
-
}, [children]);
|
|
64
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
65
|
-
ref: (node) => {
|
|
66
|
-
containerRef.current = node;
|
|
67
|
-
if (typeof ref === "function") ref(node);
|
|
68
|
-
else if (ref) ref.current = node;
|
|
69
|
-
},
|
|
70
|
-
className: classes,
|
|
71
|
-
...rest,
|
|
72
|
-
...getDevtoolsProps(componentName)
|
|
73
|
-
}, actionItems.map((item) => /* @__PURE__ */ React.createElement("div", {
|
|
74
|
-
key: item.id,
|
|
75
|
-
"data-id": item.id
|
|
76
|
-
}, item.element)), /* @__PURE__ */ React.createElement("div", {
|
|
77
|
-
"data-offset": true,
|
|
78
|
-
"data-hidden": true,
|
|
79
|
-
"data-floating-menu-container": true
|
|
80
|
-
}, /* @__PURE__ */ React.createElement(FeatureFlags, { enableV12Overflowmenu: true }, /* @__PURE__ */ React.createElement(OverflowMenu, {
|
|
81
|
-
size: "sm",
|
|
82
|
-
"aria-label": overflowMenuLabel
|
|
83
|
-
}, hiddenItems.map((item) => /* @__PURE__ */ React.createElement(OverflowMenuItem, {
|
|
84
|
-
key: item.id,
|
|
85
|
-
itemText: item.label || "Action",
|
|
86
|
-
onClick: () => {
|
|
87
|
-
const button = item.element.props.children;
|
|
88
|
-
if (button && React.isValidElement(button)) {
|
|
89
|
-
const buttonProps = button.props;
|
|
90
|
-
if (buttonProps.onClick) buttonProps.onClick();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}))))));
|
|
94
|
-
});
|
|
95
|
-
CardActions.propTypes = {
|
|
96
|
-
/**
|
|
97
|
-
* Provide the contents of the CardActions.
|
|
98
|
-
*/
|
|
99
|
-
children: PropTypes.node,
|
|
100
|
-
/**
|
|
101
|
-
* Provide an optional class to be applied to the containing node.
|
|
102
|
-
*/
|
|
103
|
-
className: PropTypes.string,
|
|
104
|
-
/**
|
|
105
|
-
* Aria label for the overflow menu
|
|
106
|
-
*/
|
|
107
|
-
overflowMenuLabel: PropTypes.string
|
|
108
|
-
};
|
|
109
|
-
CardActions = pkg.checkComponentEnabled(CardActions, componentName);
|
|
110
|
-
CardActions.displayName = componentName;
|
|
111
|
-
//#endregion
|
|
112
|
-
export { CardActions };
|