@unbxd-ui/unbxd-react-components 0.3.2-beta.4 → 0.3.2-beta.6

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.
@@ -0,0 +1 @@
1
+ .RCB-metric-card-wrapper{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:16px;margin-bottom:32px}@media (min-width: 768px){.RCB-metric-card-wrapper{grid-template-columns:repeat(3, minmax(0, 1fr));gap:16px}}@media (min-width: 1024px){.RCB-metric-card-wrapper{grid-template-columns:repeat(6, minmax(0, 1fr));gap:20px}}.RCB-metric-card-wrapper .RCB-metric-card-item{border-radius:12px;padding:16px;position:relative;overflow:hidden;transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;background:#fff;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid #e1e7ef;animation:slide-up 0.5s ease-out}.RCB-metric-card-wrapper .RCB-metric-card-item:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data{position:relative;z-index:10}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-title{display:flex;align-items:center;gap:0.75rem;margin-bottom:0.75rem}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-title .RCB-metric-title-icon{background-color:#06b6d4;padding:0.5rem;border-radius:0.75rem;border:1px solid #e1e7ef;height:34px}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-title .RCB-metric-title-text{font-size:0.875rem;line-height:1.25rem;color:#65758b}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-value{display:flex;align-items:center;gap:0.5rem}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-value .RCB-metric-value-text{font-size:1.125rem;line-height:1.75rem;font-weight:700;color:#0f1729;letter-spacing:-0.025em}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-value .RCB-metric-compare-text{display:flex;align-items:center;gap:0.25rem;padding:0.125rem 0.5rem;border-radius:9999px;font-size:0.75rem;line-height:1rem;font-weight:500}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-value .RCB-metric-compare-text.positive{background-color:#dcfce7;color:#15803d}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-metric-data .RCB-metric-value .RCB-metric-compare-text.negative{background-color:#fee2e2;color:#b91c1c}.RCB-metric-card-wrapper .RCB-metric-card-item .RCB-bottom-right-circle{position:absolute;right:-1rem;bottom:-1rem;width:5rem;height:5rem;border-radius:50%;opacity:0.1;background-color:var(--decorative-color, #06b6d4)}@keyframes slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = MetricCard;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _icon = _interopRequireDefault(require("../../core/icon"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ function MetricCard(props) {
11
+ var _props$metricConfigs = props.metricConfigs,
12
+ metricConfigs = _props$metricConfigs === void 0 ? [] : _props$metricConfigs;
13
+ return /*#__PURE__*/_react["default"].createElement("div", {
14
+ className: "RCB-metric-card-wrapper"
15
+ }, metricConfigs.map(function () {
16
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
17
+ _ref$id = _ref.id,
18
+ id = _ref$id === void 0 ? '' : _ref$id,
19
+ _ref$name = _ref.name,
20
+ name = _ref$name === void 0 ? '' : _ref$name,
21
+ _ref$value = _ref.value,
22
+ value = _ref$value === void 0 ? '' : _ref$value,
23
+ _ref$icon = _ref.icon,
24
+ icon = _ref$icon === void 0 ? '' : _ref$icon,
25
+ _ref$iconBgColor = _ref.iconBgColor,
26
+ iconBgColor = _ref$iconBgColor === void 0 ? '#ccc' : _ref$iconBgColor,
27
+ _ref$hasDiff = _ref.hasDiff,
28
+ hasDiff = _ref$hasDiff === void 0 ? false : _ref$hasDiff,
29
+ _ref$comparePercentag = _ref.comparePercentage,
30
+ comparePercentage = _ref$comparePercentag === void 0 ? 0 : _ref$comparePercentag;
31
+ return /*#__PURE__*/_react["default"].createElement("div", {
32
+ className: "RCB-metric-card-item",
33
+ key: id
34
+ }, /*#__PURE__*/_react["default"].createElement("div", {
35
+ className: "RCB-metric-data"
36
+ }, /*#__PURE__*/_react["default"].createElement("div", {
37
+ className: "RCB-metric-title"
38
+ }, /*#__PURE__*/_react["default"].createElement("div", {
39
+ className: "RCB-metric-title-icon",
40
+ style: {
41
+ backgroundColor: iconBgColor
42
+ }
43
+ }, /*#__PURE__*/_react["default"].createElement(_icon["default"], {
44
+ icon: icon,
45
+ size: "16px",
46
+ color: "white"
47
+ })), /*#__PURE__*/_react["default"].createElement("div", {
48
+ className: "RCB-metric-title-text"
49
+ }, " ", name, " ")), /*#__PURE__*/_react["default"].createElement("div", {
50
+ className: "RCB-metric-value"
51
+ }, /*#__PURE__*/_react["default"].createElement("div", {
52
+ className: "RCB-metric-value-text"
53
+ }, value), hasDiff ? /*#__PURE__*/_react["default"].createElement("div", {
54
+ className: "RCB-metric-compare-text ".concat(comparePercentage < 0 ? 'negative' : 'positive')
55
+ }, /*#__PURE__*/_react["default"].createElement(_icon["default"], {
56
+ icon: comparePercentage < 0 ? 'arrow-down' : 'arrow-up',
57
+ size: "12px"
58
+ }), Math.abs(comparePercentage) + '%') : null)), /*#__PURE__*/_react["default"].createElement("div", {
59
+ className: "RCB-bottom-right-circle",
60
+ style: {
61
+ backgroundColor: iconBgColor
62
+ }
63
+ }));
64
+ }));
65
+ }
@@ -0,0 +1,118 @@
1
+ .RCB-metric-card-wrapper {
2
+ display: grid;
3
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4
+ gap: 16px;
5
+ margin-bottom: 32px;
6
+
7
+ @media (min-width: 768px) {
8
+ grid-template-columns: repeat(3, minmax(0, 1fr));
9
+ gap: 16px;
10
+ }
11
+
12
+ @media (min-width: 1024px) {
13
+ grid-template-columns: repeat(6, minmax(0, 1fr));
14
+ gap: 20px;
15
+ }
16
+
17
+ .RCB-metric-card-item {
18
+ border-radius: 12px;
19
+ padding: 16px;
20
+ position: relative;
21
+ overflow: hidden;
22
+ transition-property: all;
23
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
24
+ transition-duration: 150ms;
25
+ background: hsl(0, 0%, 100%);
26
+ backdrop-filter: blur(10px);
27
+ -webkit-backdrop-filter: blur(10px);
28
+ border: 1px solid hsl(214, 32%, 91%);
29
+ animation: slide-up 0.5s ease-out;
30
+
31
+ &:hover {
32
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
33
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
34
+ }
35
+
36
+ .RCB-metric-data {
37
+ position: relative;
38
+ z-index: 10;
39
+
40
+ .RCB-metric-title {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 0.75rem;
44
+ margin-bottom: 0.75rem;
45
+
46
+ .RCB-metric-title-icon {
47
+ background-color: rgb(6, 182, 212);
48
+ padding: 0.5rem;
49
+ border-radius: 0.75rem;
50
+ border: 1px solid #e1e7ef;
51
+ height: 34px;
52
+ }
53
+
54
+ .RCB-metric-title-text {
55
+ font-size: 0.875rem;
56
+ line-height: 1.25rem;
57
+ color: hsl(215, 16%, 47%);
58
+ }
59
+ }
60
+
61
+ .RCB-metric-value {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 0.5rem;
65
+ .RCB-metric-value-text {
66
+ font-size: 1.125rem;
67
+ line-height: 1.75rem;
68
+ font-weight: 700;
69
+ color: #0f1729;
70
+ letter-spacing: -0.025em;
71
+ }
72
+
73
+ .RCB-metric-compare-text {
74
+ display: flex;
75
+ align-items: center;
76
+ gap: 0.25rem;
77
+ padding: 0.125rem 0.5rem;
78
+ border-radius: 9999px;
79
+ font-size: 0.75rem;
80
+ line-height: 1rem;
81
+ font-weight: 500;
82
+
83
+ &.positive {
84
+ background-color: #dcfce7;
85
+ color: #15803d;
86
+ }
87
+
88
+ &.negative {
89
+ background-color: #fee2e2;
90
+ color: #b91c1c;
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ .RCB-bottom-right-circle {
97
+ position: absolute;
98
+ right: -1rem;
99
+ bottom: -1rem;
100
+ width: 5rem;
101
+ height: 5rem;
102
+ border-radius: 50%;
103
+ opacity: 0.1;
104
+ background-color: var(--decorative-color, rgb(6, 182, 212));
105
+ }
106
+ }
107
+
108
+ @keyframes slide-up {
109
+ from {
110
+ opacity: 0;
111
+ transform: translateY(20px);
112
+ }
113
+ to {
114
+ opacity: 1;
115
+ transform: translateY(0);
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.WithDifferencePercentage = exports.Default = void 0;
7
+ var _MetricCard = _interopRequireDefault(require("./MetricCard"));
8
+ require("./MetricCard.css");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var meta = {
11
+ title: 'Components/MetricCard',
12
+ component: _MetricCard["default"],
13
+ parameters: {
14
+ layout: 'padded',
15
+ docs: {
16
+ description: {
17
+ component: 'MetricCard displays key metrics in a grid layout.'
18
+ }
19
+ }
20
+ },
21
+ tags: ['autodocs'],
22
+ argTypes: {
23
+ metricConfigs: {
24
+ description: 'Array of metric configuration objects with id, name, value, icon and iconBgColor properties',
25
+ control: 'object'
26
+ }
27
+ }
28
+ };
29
+ var _default = exports["default"] = meta; // Sample metric data
30
+ var sampleMetrics = [{
31
+ id: 1,
32
+ name: 'Impressions',
33
+ value: '20,588,028',
34
+ icon: 'preview',
35
+ iconBgColor: 'rgb(6, 182, 212)'
36
+ }, {
37
+ id: 2,
38
+ name: 'Clicks',
39
+ value: '2,060,018',
40
+ icon: 'click-rate',
41
+ iconBgColor: 'rgb(59, 130, 246)'
42
+ }, {
43
+ id: 3,
44
+ name: 'Add to Carts',
45
+ value: '609,718',
46
+ icon: 'cart-rate',
47
+ iconBgColor: 'rgb(245, 158, 11)'
48
+ }, {
49
+ id: 4,
50
+ name: 'Orders',
51
+ value: '258,799',
52
+ icon: 'package',
53
+ iconBgColor: 'rgb(34, 197, 94)'
54
+ }, {
55
+ id: 5,
56
+ name: 'Conversion Rate',
57
+ value: '1.26%',
58
+ icon: 'trending-up',
59
+ iconBgColor: 'rgb(207, 4, 173)'
60
+ }, {
61
+ id: 6,
62
+ name: 'Revenue',
63
+ value: '$15,644,741',
64
+ icon: 'revenue',
65
+ iconBgColor: 'rgb(16, 185, 129)'
66
+ }];
67
+
68
+ // Sample metric data with difference percentages
69
+ var metricsWithDiff = [{
70
+ id: 1,
71
+ name: 'Impressions',
72
+ value: '20,588,028',
73
+ icon: 'preview',
74
+ iconBgColor: 'rgb(6, 182, 212)',
75
+ hasDiff: true,
76
+ comparePercentage: 15.4
77
+ }, {
78
+ id: 2,
79
+ name: 'Clicks',
80
+ value: '2,060,018',
81
+ icon: 'click-rate',
82
+ iconBgColor: 'rgb(59, 130, 246)',
83
+ hasDiff: true,
84
+ comparePercentage: -8.2
85
+ }, {
86
+ id: 3,
87
+ name: 'Add to Carts',
88
+ value: '609,718',
89
+ icon: 'cart-rate',
90
+ iconBgColor: 'rgb(245, 158, 11)',
91
+ hasDiff: true,
92
+ comparePercentage: 22.7
93
+ }, {
94
+ id: 4,
95
+ name: 'Orders',
96
+ value: '258,799',
97
+ icon: 'package',
98
+ iconBgColor: 'rgb(34, 197, 94)',
99
+ hasDiff: true,
100
+ comparePercentage: -5.3
101
+ }, {
102
+ id: 5,
103
+ name: 'Conversion Rate',
104
+ value: '1.26%',
105
+ icon: 'trending-up',
106
+ iconBgColor: 'rgb(207, 4, 173)',
107
+ hasDiff: true,
108
+ comparePercentage: 3.8
109
+ }, {
110
+ id: 6,
111
+ name: 'Revenue',
112
+ value: '$15,644,741',
113
+ icon: 'revenue',
114
+ iconBgColor: 'rgb(16, 185, 129)',
115
+ hasDiff: true,
116
+ comparePercentage: -12.1
117
+ }];
118
+
119
+ // Default Story
120
+ var Default = exports.Default = {
121
+ args: {
122
+ metricConfigs: sampleMetrics
123
+ }
124
+ };
125
+
126
+ // Story with difference percentages
127
+ var WithDifferencePercentage = exports.WithDifferencePercentage = {
128
+ args: {
129
+ metricConfigs: metricsWithDiff
130
+ }
131
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _MetricCard = _interopRequireDefault(require("./MetricCard"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ var _default = exports["default"] = _MetricCard["default"];