@widergy/energy-ui 3.152.0 → 3.153.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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [3.153.0](https://github.com/widergy/energy-ui/compare/v3.152.0...v3.153.0) (2026-05-13)
2
+
3
+
4
+ ### Features
5
+
6
+ * [AXCH-1599] task list component related tasks side panel ([#793](https://github.com/widergy/energy-ui/issues/793)) ([ecbf06d](https://github.com/widergy/energy-ui/commit/ecbf06db43aaaa330162153d811fc1ce9c51e246))
7
+
1
8
  # [3.152.0](https://github.com/widergy/energy-ui/compare/v3.151.0...v3.152.0) (2026-05-13)
2
9
 
3
10
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.V1Workflow = exports.V1WithStatus = exports.V1WithPagination = exports.V1WithHeaderItems = exports.V1WithAdditionalContent = exports.V1WithActions = exports.V1LargeSize = exports.V1Inline = exports.V1Default = exports.V1Collapsible = exports.V0WithCustomTitle = exports.V0LeftSide = exports.V0Default = exports.Playground = void 0;
6
+ exports.default = exports.V1Workflow = exports.V1WithStatus = exports.V1WithPretitle = exports.V1WithPagination = exports.V1WithHeaderItems = exports.V1WithAdditionalContentBadge = exports.V1WithAdditionalContent = exports.V1WithActions = exports.V1LargeSize = exports.V1Inline = exports.V1Default = exports.V1Collapsible = exports.V0WithCustomTitle = exports.V0LeftSide = exports.V0Default = exports.Playground = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _utils = require("stories/utils");
9
9
  var _UTLabel = _interopRequireDefault(require("../UTLabel"));
@@ -484,6 +484,18 @@ var _default = exports.default = {
484
484
  summary: 'elementType'
485
485
  }
486
486
  }
487
+ },
488
+ pretitleComponent: {
489
+ control: false,
490
+ description: '(V1 only) Nodo React renderizado dentro del headerContainer, antes del headerArea. Ocupa el ancho completo del header. Útil para breadcrumbs o labels de contexto sobre el título.',
491
+ table: {
492
+ defaultValue: {
493
+ summary: 'undefined'
494
+ },
495
+ type: {
496
+ summary: 'ReactNode'
497
+ }
498
+ }
487
499
  }
488
500
  },
489
501
  component: _2.default,
@@ -843,6 +855,96 @@ const V1WithAdditionalContent = exports.V1WithAdditionalContent = {
843
855
  }
844
856
  }
845
857
  };
858
+ const V1WithPretitle = exports.V1WithPretitle = {
859
+ args: {
860
+ version: 'V1',
861
+ open: false,
862
+ title: '#4605',
863
+ subtitle: 'Tramite de cuenta',
864
+ panelSide: 'right',
865
+ size: 'M',
866
+ pretitleComponent: /*#__PURE__*/_react.default.createElement("div", {
867
+ style: {
868
+ display: 'inline-flex',
869
+ alignItems: 'baseline'
870
+ }
871
+ }, /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
872
+ variant: "body2"
873
+ }, "Pertenece a "), /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
874
+ colorTheme: "primary",
875
+ variant: "body2",
876
+ style: {
877
+ cursor: 'pointer',
878
+ textDecoration: 'underline',
879
+ paddingLeft: '8px'
880
+ }
881
+ }, "#4624")),
882
+ children: /*#__PURE__*/_react.default.createElement("div", {
883
+ style: {
884
+ padding: '16px'
885
+ }
886
+ }, /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
887
+ variant: "body1"
888
+ }, "Caso hijo con referencia al caso padre. El n\xFAmero clickeable navega al padre."))
889
+ },
890
+ name: 'V1 - Con Pretítulo (parent case)',
891
+ parameters: {
892
+ docs: {
893
+ description: {
894
+ story: 'Usa `pretitleComponent` para mostrar un label de contexto sobre el título, como "Pertenece a #4624". Solo el número es interactivo; el texto plano no lo es.'
895
+ }
896
+ }
897
+ }
898
+ };
899
+ const V1WithAdditionalContentBadge = exports.V1WithAdditionalContentBadge = {
900
+ args: {
901
+ version: 'V1',
902
+ open: false,
903
+ title: 'Panel con Badge en Sidebar',
904
+ subtitle: 'Íconos con contador',
905
+ panelSide: 'right',
906
+ size: 'M',
907
+ additionalContent: [{
908
+ id: 'tasks',
909
+ Icon: 'IconChecklist',
910
+ count: 6,
911
+ BodyComponent: SettingsBodyComponent,
912
+ tooltipProps: {
913
+ content: 'Tareas relacionadas (6)'
914
+ }
915
+ }, {
916
+ id: 'notifications',
917
+ Icon: 'IconBell',
918
+ count: 0,
919
+ BodyComponent: NotificationsBodyComponent,
920
+ tooltipProps: {
921
+ content: 'Notificaciones'
922
+ }
923
+ }, {
924
+ id: 'help',
925
+ Icon: 'IconHelpCircle',
926
+ BodyComponent: HelpBodyComponent,
927
+ tooltipProps: {
928
+ content: 'Ayuda'
929
+ }
930
+ }],
931
+ children: /*#__PURE__*/_react.default.createElement("div", {
932
+ style: {
933
+ padding: '16px'
934
+ }
935
+ }, /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
936
+ variant: "body1"
937
+ }, "El primer \xEDcono muestra un badge con contador (count: 6). El segundo tiene count: 0 y no muestra badge. El tercero no tiene count."))
938
+ },
939
+ name: 'V1 - Sidebar con Badge',
940
+ parameters: {
941
+ docs: {
942
+ description: {
943
+ story: 'Usa la prop `count` en un item de `additionalContent` para mostrar un badge numérico sobre el ícono de la sidebar. Solo se renderiza cuando `count > 0`.'
944
+ }
945
+ }
946
+ }
947
+ };
846
948
  const Playground = exports.Playground = {
847
949
  args: {
848
950
  version: 'V1',
@@ -9,6 +9,7 @@ var _propTypes = require("prop-types");
9
9
  require("react-perfect-scrollbar/dist/css/styles.css");
10
10
  var _reactPerfectScrollbar = _interopRequireDefault(require("react-perfect-scrollbar"));
11
11
  var _UTButton = _interopRequireDefault(require("../../../../../UTButton"));
12
+ var _UTStatus = _interopRequireDefault(require("../../../../../UTStatus"));
12
13
  var _UTTooltip = _interopRequireDefault(require("../../../../../UTTooltip"));
13
14
  var _testIds = require("../../../../../../constants/testIds");
14
15
  var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
@@ -66,21 +67,32 @@ const AdditionalContentModule = _ref => {
66
67
  ...rest
67
68
  } = _ref2;
68
69
  return rest;
69
- })(item.tooltipProps)), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_UTButton.default, {
70
+ })(item.tooltipProps)), /*#__PURE__*/_react.default.createElement("div", {
71
+ className: _stylesModule.default.buttonWrapper
72
+ }, /*#__PURE__*/_react.default.createElement(_UTButton.default, {
70
73
  colorTheme: activeId === item.id ? 'primary' : 'gray',
71
- className: "".concat(_stylesModule.default.sidebarButton),
74
+ className: _stylesModule.default.sidebarButton,
72
75
  dataTestId: "".concat(panel.additionalContent.sidebarButton).concat(item.id),
73
76
  Icon: item.Icon,
74
77
  onClick: () => onSelectItem(activeId === item.id ? null : item.id),
75
78
  size: "medium",
76
79
  variant: activeId === item.id ? 'semitransparent' : 'text'
77
- }))));
80
+ }), item.count > 0 && /*#__PURE__*/_react.default.createElement(_UTStatus.default, {
81
+ area: true,
82
+ areaType: "ROUNDED",
83
+ className: _stylesModule.default.countBadge,
84
+ size: "xsmall",
85
+ type: "negative",
86
+ variant: "accent",
87
+ withoutIcon: true
88
+ }, item.count))));
78
89
  })))));
79
90
  };
80
91
  AdditionalContentModule.propTypes = {
81
92
  additionalContent: (0, _propTypes.arrayOf)((0, _propTypes.shape)({
82
93
  id: _propTypes.string.isRequired,
83
94
  Icon: _propTypes.string.isRequired,
95
+ count: _propTypes.number,
84
96
  BodyComponent: _propTypes.elementType.isRequired,
85
97
  tooltipProps: _propTypes.object.isRequired
86
98
  })).isRequired,
@@ -26,7 +26,7 @@ $sidebar-width: 56px;
26
26
  min-width: $body-component-width;
27
27
  opacity: 1;
28
28
  overflow: hidden;
29
- padding: 16px;
29
+ padding: 24px 24px 16px 24px;
30
30
  width: $body-component-width;
31
31
  }
32
32
 
@@ -74,6 +74,10 @@ $sidebar-width: 56px;
74
74
  padding: 0 8px;
75
75
  }
76
76
 
77
+ .buttonWrapper {
78
+ position: relative;
79
+ }
80
+
77
81
  .sidebarButton {
78
82
  align-items: center;
79
83
  border-radius: 4px;
@@ -83,3 +87,12 @@ $sidebar-width: 56px;
83
87
  transition: all 0.2s ease;
84
88
  width: 40px;
85
89
  }
90
+
91
+ .countBadge {
92
+ padding: 0 6px;
93
+ background-color: var(--actionAccent05) !important;
94
+ pointer-events: none;
95
+ position: absolute;
96
+ right: -4px;
97
+ top: -4px;
98
+ }
@@ -28,6 +28,7 @@ const HeaderSection = _ref => {
28
28
  headerSecondaryActionButton,
29
29
  hideHeader,
30
30
  mainActionDataTestId,
31
+ pretitleComponent,
31
32
  secondaryActionDataTestId,
32
33
  showMainStatus,
33
34
  showTag,
@@ -50,7 +51,9 @@ const HeaderSection = _ref => {
50
51
  }
51
52
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
52
53
  className: "".concat(_stylesModule.default.headerContainer, " ").concat((classes === null || classes === void 0 ? void 0 : classes.headerContainer) || '')
53
- }, HeaderComponent || /*#__PURE__*/_react.default.createElement("div", {
54
+ }, pretitleComponent && /*#__PURE__*/_react.default.createElement("div", {
55
+ className: _stylesModule.default.pretitleArea
56
+ }, pretitleComponent), HeaderComponent || /*#__PURE__*/_react.default.createElement("div", {
54
57
  className: _stylesModule.default.headerArea
55
58
  }, /*#__PURE__*/_react.default.createElement("div", {
56
59
  className: _stylesModule.default.headerLeftArea
@@ -107,6 +110,7 @@ HeaderSection.propTypes = {
107
110
  headerSecondaryActionButton: (0, _propTypes.oneOfType)([_propTypes.object, (0, _propTypes.arrayOf)(_propTypes.object)]),
108
111
  hideHeader: _propTypes.bool,
109
112
  mainActionDataTestId: _propTypes.string,
113
+ pretitleComponent: (0, _propTypes.oneOfType)([_propTypes.element, _propTypes.elementType]),
110
114
  secondaryActionDataTestId: _propTypes.string,
111
115
  showMainStatus: _propTypes.bool,
112
116
  showTag: _propTypes.bool,
@@ -59,6 +59,7 @@ const UTPanel = _ref => {
59
59
  paginationProps = {},
60
60
  panelSide,
61
61
  perfectScrollbarOptions,
62
+ pretitleComponent,
62
63
  secondaryActionDataTestId = panel.secondaryAction,
63
64
  showBackButton = false,
64
65
  showMainStatus = false,
@@ -164,6 +165,7 @@ const UTPanel = _ref => {
164
165
  headerSecondaryActionButton: headerSecondaryActionButton,
165
166
  hideHeader: hideHeader,
166
167
  mainActionDataTestId: mainActionDataTestId,
168
+ pretitleComponent: pretitleComponent,
167
169
  secondaryActionDataTestId: secondaryActionDataTestId,
168
170
  showMainStatus: showMainStatus,
169
171
  showTag: showTag,
@@ -193,6 +195,7 @@ UTPanel.propTypes = {
193
195
  additionalContent: (0, _propTypes.arrayOf)((0, _propTypes.shape)({
194
196
  id: _propTypes.string.isRequired,
195
197
  Icon: _propTypes.string.isRequired,
198
+ count: _propTypes.number,
196
199
  BodyComponent: _propTypes.elementType.isRequired,
197
200
  tooltipProps: _propTypes.object.isRequired
198
201
  })),
@@ -239,6 +242,7 @@ UTPanel.propTypes = {
239
242
  open: _propTypes.bool,
240
243
  panelSide: _propTypes.string,
241
244
  perfectScrollbarOptions: _propTypes.object,
245
+ pretitleComponent: (0, _propTypes.oneOfType)([_propTypes.element, _propTypes.elementType]),
242
246
  secondaryActionDataTestId: _propTypes.string,
243
247
  singleHeaderItemsColumn: _propTypes.bool,
244
248
  size: (0, _propTypes.oneOf)(Object.keys(_constants.SIZES)),
@@ -78,6 +78,11 @@ $additional-content-total: $body-component-width + $sidebar-width;
78
78
  padding: 8px 24px 16px;
79
79
  }
80
80
 
81
+ .pretitleArea {
82
+ margin-bottom: 4px;
83
+ width: 100%;
84
+ }
85
+
81
86
  .headerArea {
82
87
  align-items: center;
83
88
  display: flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widergy/energy-ui",
3
- "version": "3.152.0",
3
+ "version": "3.153.0",
4
4
  "description": "Widergy Web Components",
5
5
  "author": "widergy",
6
6
  "license": "MIT",