@automattic/vip-design-system 0.7.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.
Files changed (121) hide show
  1. package/.eslines.json +10 -0
  2. package/.eslintignore +7 -0
  3. package/.eslintrc.json +23 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  5. package/.github/workflows/codeql-analysis.yml +71 -0
  6. package/.github/workflows/nodejs.yaml +29 -0
  7. package/.prettierrc +9 -0
  8. package/.storybook/preview.js +8 -7
  9. package/README.md +52 -2
  10. package/babel.config.js +10 -10
  11. package/build/system/Avatar/Avatar.js +6 -2
  12. package/build/system/Avatar/Avatar.test.js +54 -0
  13. package/build/system/Badge/Badge.js +2 -2
  14. package/build/system/BlankState/BlankState.js +5 -4
  15. package/build/system/Button/Button.js +5 -1
  16. package/build/system/Card/Card.js +8 -5
  17. package/build/system/Code/Code.js +4 -4
  18. package/build/system/ConfirmationDialog/ConfirmationDialog.js +2 -2
  19. package/build/system/Dialog/Dialog.js +3 -0
  20. package/build/system/Dialog/DialogButton.js +2 -4
  21. package/build/system/Dialog/DialogContent.js +5 -5
  22. package/build/system/Form/Checkbox.js +52 -5
  23. package/build/system/Form/InlineSelect.js +32 -16
  24. package/build/system/Form/Input.js +9 -6
  25. package/build/system/Form/Label.js +2 -2
  26. package/build/system/Form/RadioBoxGroup.js +101 -0
  27. package/build/system/Form/SearchSelect.js +36 -56
  28. package/build/system/Form/Select.js +3 -3
  29. package/build/system/Form/Textarea.js +9 -6
  30. package/build/system/Form/Toggle.js +1 -1
  31. package/build/system/Form/ToggleGroup.js +78 -0
  32. package/build/system/Form/ToggleRow.js +6 -5
  33. package/build/system/Form/Validation.js +4 -4
  34. package/build/system/Form/index.js +8 -0
  35. package/build/system/Notice/Notice.js +58 -54
  36. package/build/system/Notification/Notification.js +4 -4
  37. package/build/system/OptionRow/OptionRow.js +12 -11
  38. package/build/system/ResourceList/ResourceItem.js +89 -0
  39. package/build/system/ResourceList/ResourceList.js +121 -0
  40. package/build/system/ResourceList/index.js +11 -0
  41. package/build/system/Table/TableRow.js +2 -2
  42. package/build/system/Tabs/TabItem.js +3 -3
  43. package/build/system/Tabs/Tabs.js +1 -1
  44. package/build/system/Time/index.js +91 -0
  45. package/build/system/Tooltip/Tooltip.js +49 -47
  46. package/build/system/Wizard/WizardStep.js +5 -5
  47. package/build/system/Wizard/WizardStepHorizontal.js +2 -2
  48. package/build/system/index.js +9 -2
  49. package/build/system/theme/colors.js +235 -131
  50. package/build/system/theme/index.js +140 -107
  51. package/package.json +48 -11
  52. package/src/system/Avatar/Avatar.js +6 -2
  53. package/src/system/Avatar/Avatar.stories.js +0 -5
  54. package/src/system/Avatar/Avatar.test.js +31 -0
  55. package/src/system/Badge/Badge.js +3 -3
  56. package/src/system/Badge/Badge.stories.js +0 -5
  57. package/src/system/BlankState/BlankState.js +5 -5
  58. package/src/system/BlankState/BlankState.stories.js +0 -5
  59. package/src/system/Box/Box.stories.js +0 -5
  60. package/src/system/Button/Button.js +6 -2
  61. package/src/system/Card/Card.js +6 -4
  62. package/src/system/Card/Card.stories.js +0 -5
  63. package/src/system/Code/Code.js +4 -4
  64. package/src/system/Code/Code.stories.js +4 -1
  65. package/src/system/ConfirmationDialog/ConfirmationDialog.js +2 -2
  66. package/src/system/ConfirmationDialog/ConfirmationDialog.stories.js +0 -5
  67. package/src/system/Dialog/Dialog.js +1 -1
  68. package/src/system/Dialog/Dialog.stories.js +0 -5
  69. package/src/system/Dialog/DialogButton.js +2 -3
  70. package/src/system/Dialog/DialogContent.js +17 -4
  71. package/src/system/Flex/Flex.stories.js +0 -5
  72. package/src/system/Form/Checkbox.js +44 -2
  73. package/src/system/Form/InlineSelect.js +30 -15
  74. package/src/system/Form/Input.js +6 -4
  75. package/src/system/Form/Input.stories.js +0 -5
  76. package/src/system/Form/Label.js +2 -2
  77. package/src/system/Form/RadioBoxGroup.js +68 -0
  78. package/src/system/Form/RadioBoxGroup.stories.js +37 -0
  79. package/src/system/Form/SearchSelect.js +35 -42
  80. package/src/system/Form/Select.js +18 -18
  81. package/src/system/Form/Select.stories.js +1 -1
  82. package/src/system/Form/Textarea.js +6 -4
  83. package/src/system/Form/Toggle.js +1 -1
  84. package/src/system/Form/ToggleGroup.js +63 -0
  85. package/src/system/Form/ToggleGroup.stories.js +34 -0
  86. package/src/system/Form/ToggleRow.js +5 -5
  87. package/src/system/Form/Validation.js +2 -2
  88. package/src/system/Form/index.js +3 -1
  89. package/src/system/Grid/Grid.stories.js +0 -5
  90. package/src/system/Heading/Heading.stories.js +0 -5
  91. package/src/system/Link/Link.stories.js +0 -5
  92. package/src/system/Notice/Notice.js +33 -28
  93. package/src/system/Notification/Notification.js +6 -6
  94. package/src/system/Notification/Notification.stories.js +0 -5
  95. package/src/system/OptionRow/OptionRow.js +37 -32
  96. package/src/system/OptionRow/OptionRow.stories.js +0 -5
  97. package/src/system/Progress/Progress.stories.js +0 -5
  98. package/src/system/ResourceList/ResourceItem.js +66 -0
  99. package/src/system/ResourceList/ResourceList.js +96 -0
  100. package/src/system/ResourceList/ResourceList.stories.js +300 -0
  101. package/src/system/ResourceList/index.js +7 -0
  102. package/src/system/Spinner/Spinner.stories.js +0 -5
  103. package/src/system/Table/Table.stories.js +0 -5
  104. package/src/system/Table/TableRow.js +3 -3
  105. package/src/system/Tabs/TabItem.js +3 -3
  106. package/src/system/Tabs/Tabs.js +1 -1
  107. package/src/system/Tabs/Tabs.stories.js +0 -5
  108. package/src/system/Text/Text.stories.js +0 -5
  109. package/src/system/{Timeline/Timeline.stories.js → Time/Time.stories.js} +5 -5
  110. package/src/system/Time/index.js +62 -0
  111. package/src/system/Tooltip/Tooltip.js +40 -35
  112. package/src/system/Tooltip/Tooltip.stories.js +0 -5
  113. package/src/system/Wizard/Wizard.js +7 -7
  114. package/src/system/Wizard/WizardStep.js +10 -10
  115. package/src/system/Wizard/WizardStepHorizontal.js +3 -3
  116. package/src/system/index.js +29 -4
  117. package/src/system/theme/colors.js +233 -129
  118. package/src/system/theme/index.js +298 -256
  119. package/test/setupAfterEnv.js +13 -0
  120. package/test/setupTests.js +4 -0
  121. package/src/system/Timeline/index.js +0 -40
@@ -7,9 +7,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
7
7
 
8
8
  var _md = require("react-icons/md");
9
9
 
10
- var _themeUi = require("theme-ui");
11
-
12
- var _2 = require("../");
10
+ var _ = require("../");
13
11
 
14
12
  var _jsxRuntime = require("theme-ui/jsx-runtime");
15
13
 
@@ -21,97 +19,101 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
21
19
 
22
20
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
23
21
 
24
- var Notice = function Notice(_ref) {
25
- var _ref$variant = _ref.variant,
26
- variant = _ref$variant === void 0 ? 'warning' : _ref$variant,
27
- _ref$inline = _ref.inline,
28
- inline = _ref$inline === void 0 ? false : _ref$inline,
29
- children = _ref.children,
30
- title = _ref.title,
31
- _ref$sx = _ref.sx,
32
- sx = _ref$sx === void 0 ? {} : _ref$sx,
33
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
34
-
35
- var _useColorMode = (0, _themeUi.useColorMode)(),
36
- colorMode = _useColorMode[0],
37
- _ = _useColorMode[1];
38
-
39
- var color = 'yellow';
22
+ var NoticeIcon = function NoticeIcon(_ref) {
23
+ var color = _ref.color,
24
+ variant = _ref.variant;
40
25
  var Icon = _md.MdWarning;
41
26
 
42
27
  switch (variant) {
43
28
  case 'info':
44
- color = 'blue';
45
29
  Icon = _md.MdInfo;
46
30
  break;
47
31
 
48
32
  case 'alert':
49
- color = 'red';
50
33
  Icon = _md.MdError;
51
34
  break;
52
35
 
53
36
  case 'success':
54
- color = 'green';
55
37
  Icon = _md.MdCheckCircle;
56
38
  break;
57
39
  }
58
40
 
59
- var modeColor = {
60
- color: color + ".70",
61
- bg: inline ? 'transparent' : color + ".0"
62
- };
41
+ return (0, _jsxRuntime.jsx)(Icon, {
42
+ sx: {
43
+ marginRight: 2,
44
+ color: color,
45
+ flex: '0 0 auto'
46
+ }
47
+ });
48
+ };
49
+
50
+ NoticeIcon.propTypes = {
51
+ color: _propTypes["default"].string,
52
+ variant: _propTypes["default"].string
53
+ };
63
54
 
64
- if (colorMode === 'dark') {
65
- modeColor = {
66
- color: color + ".40",
67
- bg: undefined
68
- };
69
- }
55
+ var Notice = function Notice(_ref2) {
56
+ var _ref2$variant = _ref2.variant,
57
+ variant = _ref2$variant === void 0 ? 'warning' : _ref2$variant,
58
+ _ref2$inline = _ref2.inline,
59
+ inline = _ref2$inline === void 0 ? false : _ref2$inline,
60
+ children = _ref2.children,
61
+ title = _ref2.title,
62
+ _ref2$sx = _ref2.sx,
63
+ sx = _ref2$sx === void 0 ? {} : _ref2$sx,
64
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded);
70
65
 
71
- var NoticeIcon = function NoticeIcon(_ref2) {
72
- var color = _ref2.color;
73
- return (0, _jsxRuntime.jsx)(Icon, {
74
- sx: {
75
- marginRight: 2,
76
- color: color,
77
- flex: '0 0 auto'
78
- }
79
- });
80
- };
66
+ var color = 'yellow';
67
+
68
+ switch (variant) {
69
+ case 'info':
70
+ color = 'blue';
71
+ break;
72
+
73
+ case 'alert':
74
+ color = 'red';
75
+ break;
76
+
77
+ case 'success':
78
+ color = 'green';
79
+ break;
80
+ }
81
81
 
82
- return (0, _jsxRuntime.jsx)(_2.Card, _extends({
82
+ return (0, _jsxRuntime.jsx)(_.Card, _extends({
83
83
  sx: _extends({
84
84
  boxShadow: 'none',
85
85
  borderRadius: 2,
86
+ bg: inline ? 'transparent' : color + ".10",
86
87
  p: inline ? 0 : 3,
87
- bg: modeColor.bg,
88
+ color: color + ".90",
88
89
  a: {
89
- color: modeColor.color,
90
+ color: color + ".90",
90
91
  textDecoration: 'underline',
91
92
  border: 'none'
92
93
  }
93
94
  }, sx)
94
95
  }, props, {
95
- children: (0, _jsxRuntime.jsxs)(_2.Flex, {
96
+ children: (0, _jsxRuntime.jsxs)(_.Flex, {
96
97
  sx: {
97
98
  alignItems: 'center'
98
99
  },
99
- children: [(0, _jsxRuntime.jsx)(_2.Flex, {
100
+ children: [(0, _jsxRuntime.jsx)(_.Flex, {
100
101
  sx: {
101
102
  alignItems: 'center'
102
103
  },
103
104
  children: (0, _jsxRuntime.jsx)(NoticeIcon, {
104
- color: modeColor.color
105
+ color: color + ".100",
106
+ variant: variant
105
107
  })
106
- }), (0, _jsxRuntime.jsxs)(_2.Box, {
108
+ }), (0, _jsxRuntime.jsxs)(_.Box, {
107
109
  sx: {
108
110
  ml: 23
109
111
  },
110
- children: [title && (0, _jsxRuntime.jsx)(_2.Heading, {
112
+ children: [title && (0, _jsxRuntime.jsx)(_.Heading, {
111
113
  variant: "h4",
112
114
  as: "p",
113
115
  sx: {
114
- color: modeColor.color,
116
+ color: color + ".100",
115
117
  mb: 0
116
118
  },
117
119
  children: title
@@ -123,8 +125,10 @@ var Notice = function Notice(_ref) {
123
125
 
124
126
  exports.Notice = Notice;
125
127
  Notice.propTypes = {
126
- variant: _propTypes["default"].string,
127
- title: _propTypes["default"].string,
128
+ children: _propTypes["default"].node,
129
+ color: _propTypes["default"].string,
128
130
  inline: _propTypes["default"].bool,
129
- children: _propTypes["default"].node
131
+ sx: _propTypes["default"].object,
132
+ title: _propTypes["default"].node,
133
+ variant: _propTypes["default"].string
130
134
  };
@@ -51,12 +51,12 @@ var Notification = function Notification(_ref) {
51
51
  },
52
52
  children: [status === 'error' ? (0, _jsxRuntime.jsx)(_md.MdError, {
53
53
  sx: {
54
- color: 'red.50',
54
+ color: 'error',
55
55
  flex: '0 0 auto'
56
56
  }
57
57
  }) : (0, _jsxRuntime.jsx)(_md.MdCheckCircle, {
58
58
  sx: {
59
- color: 'green.50',
59
+ color: 'success',
60
60
  flex: '0 0 auto'
61
61
  }
62
62
  }), (0, _jsxRuntime.jsxs)(_.Box, {
@@ -84,8 +84,8 @@ var Notification = function Notification(_ref) {
84
84
 
85
85
  exports.Notification = Notification;
86
86
  Notification.propTypes = {
87
- title: _propTypes["default"].string,
88
- body: _propTypes["default"].string,
87
+ title: _propTypes["default"].node,
88
+ body: _propTypes["default"].node,
89
89
  status: _propTypes["default"].string,
90
90
  onClose: _propTypes["default"].func
91
91
  };
@@ -42,7 +42,8 @@ var OptionRow = function OptionRow(_ref) {
42
42
  border: '1px solid',
43
43
  borderColor: 'border',
44
44
  background: 'none',
45
- boxShadow: 'none'
45
+ boxShadow: 'none',
46
+ color: 'grey.70'
46
47
  } : {};
47
48
  var inlineStyles = inline ? {
48
49
  py: 2,
@@ -69,22 +70,22 @@ var OptionRow = function OptionRow(_ref) {
69
70
  }
70
71
  }, inlineStyles),
71
72
  children: [(0, _jsxRuntime.jsx)(_.Box, {
72
- children: image ? (0, _jsxRuntime.jsx)(_.Card, {
73
+ children: image ? (0, _jsxRuntime.jsx)(_.Box, {
73
74
  sx: _extends({
74
75
  display: ['inline-block', 'inline-block', 'block'],
75
- p: small ? 3 : 24,
76
- boxShadow: 'low',
76
+ p: small ? 12 : 20,
77
77
  flex: '0 0 auto',
78
- svg: {
79
- display: 'block'
80
- }
78
+ bg: 'brand.70',
79
+ color: 'brand.10',
80
+ borderRadius: 1
81
81
  }, mergedCard),
82
82
  children: /*#__PURE__*/_react["default"].isValidElement(image) ? image : (0, _jsxRuntime.jsx)("img", {
83
83
  src: image,
84
84
  width: small ? 32 : 48,
85
85
  sx: {
86
86
  display: 'block'
87
- }
87
+ },
88
+ alt: "Image representing the list item"
88
89
  })
89
90
  }) : icon && icon
90
91
  }), (0, _jsxRuntime.jsxs)(_.Box, {
@@ -124,13 +125,13 @@ var OptionRow = function OptionRow(_ref) {
124
125
 
125
126
  exports.OptionRow = OptionRow;
126
127
  OptionRow.propTypes = {
127
- image: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]),
128
+ image: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].string]),
128
129
  icon: _propTypes["default"].node,
129
130
  badge: _propTypes["default"].string,
130
131
  label: _propTypes["default"].node,
131
132
  inline: _propTypes["default"].bool,
132
- subTitle: _propTypes["default"].string,
133
- body: _propTypes["default"].string,
133
+ subTitle: _propTypes["default"].node,
134
+ body: _propTypes["default"].node,
134
135
  meta: _propTypes["default"].node,
135
136
  to: _propTypes["default"].string,
136
137
  small: _propTypes["default"].bool,
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.ResourceItem = void 0;
5
+
6
+ var _propTypes = _interopRequireDefault(require("prop-types"));
7
+
8
+ var _ = require("..");
9
+
10
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ /** @jsxImportSource theme-ui */
15
+
16
+ /**
17
+ * External dependencies
18
+ */
19
+
20
+ /**
21
+ * Internal dependencies
22
+ */
23
+ var ResourceItem = function ResourceItem(_ref) {
24
+ var children = _ref.children,
25
+ item = _ref.item,
26
+ renderActions = _ref.renderActions,
27
+ _ref$relativeTime = _ref.relativeTime,
28
+ relativeTime = _ref$relativeTime === void 0 ? false : _ref$relativeTime,
29
+ _ref$timeOnly = _ref.timeOnly,
30
+ timeOnly = _ref$timeOnly === void 0 ? false : _ref$timeOnly,
31
+ dateKey = _ref.dateKey,
32
+ _ref$icon = _ref.icon,
33
+ icon = _ref$icon === void 0 ? null : _ref$icon;
34
+ return (0, _jsxRuntime.jsxs)(_.Flex, {
35
+ sx: {
36
+ alignItems: 'center',
37
+ gap: 3
38
+ },
39
+ children: [icon, (0, _jsxRuntime.jsx)(_.Box, {
40
+ sx: {
41
+ flex: '1 1 auto'
42
+ },
43
+ children: children
44
+ }), (0, _jsxRuntime.jsxs)(_.Flex, {
45
+ sx: {
46
+ flex: '0 0 auto',
47
+ alignItems: 'center',
48
+ gap: 3
49
+ },
50
+ children: [(0, _jsxRuntime.jsx)(_.Time, {
51
+ className: "time",
52
+ relativeTime: relativeTime,
53
+ timeOnly: timeOnly,
54
+ time: item[dateKey],
55
+ sx: {
56
+ color: 'muted',
57
+ mb: 0,
58
+ textAlign: 'right',
59
+ flex: '0 0 auto'
60
+ }
61
+ }), renderActions && (0, _jsxRuntime.jsxs)(_.Flex, {
62
+ className: "actions",
63
+ sx: {
64
+ alignItems: 'center',
65
+ gap: 3
66
+ },
67
+ children: [(0, _jsxRuntime.jsx)(_.Box, {
68
+ sx: {
69
+ width: 4,
70
+ height: 4,
71
+ borderRadius: 4,
72
+ bg: 'border'
73
+ }
74
+ }), renderActions(item)]
75
+ })]
76
+ })]
77
+ });
78
+ };
79
+
80
+ exports.ResourceItem = ResourceItem;
81
+ ResourceItem.propTypes = {
82
+ children: _propTypes["default"].node,
83
+ item: _propTypes["default"].object,
84
+ icon: _propTypes["default"].node,
85
+ relativeTime: _propTypes["default"].bool,
86
+ timeOnly: _propTypes["default"].bool,
87
+ dateKey: _propTypes["default"].string,
88
+ renderActions: _propTypes["default"].func
89
+ };
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.ResourceList = void 0;
5
+
6
+ var _propTypes = _interopRequireDefault(require("prop-types"));
7
+
8
+ var _ = require("..");
9
+
10
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
15
+
16
+ var formatterOptions = {
17
+ weekday: 'long',
18
+ year: 'numeric',
19
+ month: 'long',
20
+ day: 'numeric'
21
+ };
22
+
23
+ var formatDate = function formatDate(date) {
24
+ var today = new Date();
25
+
26
+ if (date.getFullYear() !== today.getFullYear()) {
27
+ return date.toLocaleDateString(formatterOptions);
28
+ } else if (date.getMonth() !== today.getMonth()) {
29
+ return date.toLocaleDateString(formatterOptions);
30
+ } else if (date.getDate() < today.getDate() - 1) {
31
+ return date.toLocaleDateString(formatterOptions);
32
+ } else if (date.getDate() === today.getDate() - 1) {
33
+ return 'Yesterday';
34
+ }
35
+
36
+ return 'Today';
37
+ };
38
+
39
+ var StyledListItem = function StyledListItem(props) {
40
+ return (0, _jsxRuntime.jsx)(_.Box, _extends({
41
+ as: "li",
42
+ sx: {
43
+ py: 2,
44
+ borderBottom: '1px solid',
45
+ borderColor: 'border',
46
+ listStyleType: 'none',
47
+ margin: 0,
48
+ px: 0
49
+ }
50
+ }, props));
51
+ };
52
+
53
+ var ResourceList = function ResourceList(_ref) {
54
+ var _ref$groupedByDay = _ref.groupedByDay,
55
+ groupedByDay = _ref$groupedByDay === void 0 ? false : _ref$groupedByDay,
56
+ items = _ref.items,
57
+ renderItem = _ref.renderItem,
58
+ dateKey = _ref.dateKey;
59
+ var groupedItems = {};
60
+
61
+ if (groupedByDay) {
62
+ groupedItems = items == null ? void 0 : items.reduce(function (itemGroups, item) {
63
+ var _extends2;
64
+
65
+ var formattedDate = formatDate(item[dateKey]);
66
+ var itemsAtDate = itemGroups[formattedDate];
67
+ return _extends({}, itemGroups, (_extends2 = {}, _extends2[formattedDate] = itemsAtDate ? [].concat(itemsAtDate, [item]) : [item], _extends2));
68
+ }, {});
69
+ }
70
+
71
+ var renderItemList = function renderItemList(itemsList) {
72
+ return itemsList.map(function (item, index) {
73
+ return (0, _jsxRuntime.jsx)(StyledListItem, {
74
+ children: renderItem(item)
75
+ }, index);
76
+ });
77
+ };
78
+
79
+ return (0, _jsxRuntime.jsx)(_.Box, {
80
+ as: "ul",
81
+ sx: {
82
+ listStyleType: 'none',
83
+ m: 0,
84
+ p: 0
85
+ },
86
+ children: groupedByDay ? Object.keys(groupedItems).map(function (groupName, index) {
87
+ return (0, _jsxRuntime.jsxs)(_.Box, {
88
+ sx: {
89
+ mb: 4
90
+ },
91
+ children: [(0, _jsxRuntime.jsx)(_.Heading, {
92
+ variant: "h4",
93
+ as: "h4",
94
+ sx: {
95
+ mb: 3
96
+ },
97
+ children: groupName
98
+ }), (0, _jsxRuntime.jsx)(_.Box, {
99
+ as: "ul",
100
+ sx: {
101
+ listStyleType: 'none',
102
+ m: 0,
103
+ p: 0,
104
+ borderTop: '1px solid',
105
+ borderColor: 'border'
106
+ },
107
+ children: renderItemList(groupedItems[groupName])
108
+ })]
109
+ }, index);
110
+ }) : renderItemList(items)
111
+ });
112
+ };
113
+
114
+ exports.ResourceList = ResourceList;
115
+ ResourceList.propTypes = {
116
+ groupedByDay: _propTypes["default"].bool,
117
+ items: _propTypes["default"].array,
118
+ renderItem: _propTypes["default"].func,
119
+ relativeTime: _propTypes["default"].bool,
120
+ dateKey: _propTypes["default"].string
121
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _ResourceList = require("./ResourceList");
6
+
7
+ exports.ResourceList = _ResourceList.ResourceList;
8
+
9
+ var _ResourceItem = require("./ResourceItem");
10
+
11
+ exports.ResourceItem = _ResourceItem.ResourceItem;
@@ -81,7 +81,7 @@ var TableCell = function TableCell(_ref2) {
81
81
  fontWeight: 'body',
82
82
  borderTop: head ? '1px solid' : 'none',
83
83
  borderColor: 'border',
84
- '&:first-child': {
84
+ '&:first-of-type': {
85
85
  pl: 5
86
86
  }
87
87
  },
@@ -99,7 +99,7 @@ var TableCell = function TableCell(_ref2) {
99
99
  TableCell.propTypes = {
100
100
  head: _propTypes["default"].bool,
101
101
  isRowHead: _propTypes["default"].bool,
102
- cell: _propTypes["default"].array
102
+ cell: _propTypes["default"].node
103
103
  };
104
104
  TableRow.propTypes = {
105
105
  onClick: _propTypes["default"].func,
@@ -39,9 +39,9 @@ var TabItem = function TabItem(_ref) {
39
39
  borderTop: 'none',
40
40
  borderLeft: 'none',
41
41
  borderRight: 'none',
42
- borderBottom: '2px solid',
42
+ borderBottom: '1px solid',
43
43
  borderColor: active ? 'link' : 'transparent',
44
- transform: 'translateY(2px)',
44
+ transform: 'translateY(1px)',
45
45
  '&:visited': {
46
46
  color: active ? 'heading' : 'muted'
47
47
  },
@@ -56,6 +56,6 @@ var TabItem = function TabItem(_ref) {
56
56
  exports.TabItem = TabItem;
57
57
  TabItem.propTypes = {
58
58
  active: _propTypes["default"].bool,
59
- sx: _propTypes["default"].sx,
59
+ sx: _propTypes["default"].object,
60
60
  variant: _propTypes["default"].string
61
61
  };
@@ -23,7 +23,7 @@ var Tabs = function Tabs(_ref) {
23
23
 
24
24
  return (0, _jsxRuntime.jsx)(_.Flex, _extends({
25
25
  sx: _extends({
26
- borderBottom: '2px solid',
26
+ borderBottom: '1px solid',
27
27
  borderColor: 'border',
28
28
  listStyleType: 'none',
29
29
  margin: 0,
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.Time = void 0;
5
+
6
+ var _themeUi = require("theme-ui");
7
+
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+
10
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
11
+
12
+ var _excluded = ["time", "relativeTime", "timeOnly"];
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+
16
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+
18
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
19
+
20
+ var formatter = new Intl.RelativeTimeFormat(undefined, {
21
+ numeric: 'auto'
22
+ });
23
+ var DIVISIONS = [{
24
+ amount: 60,
25
+ name: 'seconds'
26
+ }, {
27
+ amount: 60,
28
+ name: 'minutes'
29
+ }, {
30
+ amount: 24,
31
+ name: 'hours'
32
+ }, {
33
+ amount: 7,
34
+ name: 'days'
35
+ }, {
36
+ amount: 12,
37
+ name: 'months'
38
+ }, {
39
+ amount: Number.POSITIVE_INFINITY,
40
+ name: 'years'
41
+ }];
42
+
43
+ function formatTimeAgo(date) {
44
+ var duration = (date - new Date()) / 1000;
45
+
46
+ for (var i = 0; i <= DIVISIONS.length; i++) {
47
+ var division = DIVISIONS[i];
48
+
49
+ if (Math.abs(duration) < division.amount) {
50
+ return formatter.format(Math.round(duration), division.name);
51
+ }
52
+
53
+ duration /= division.amount;
54
+ }
55
+ }
56
+
57
+ var Time = function Time(_ref) {
58
+ var time = _ref.time,
59
+ _ref$relativeTime = _ref.relativeTime,
60
+ relativeTime = _ref$relativeTime === void 0 ? false : _ref$relativeTime,
61
+ _ref$timeOnly = _ref.timeOnly,
62
+ timeOnly = _ref$timeOnly === void 0 ? false : _ref$timeOnly,
63
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
64
+
65
+ var formattedTime;
66
+
67
+ if (relativeTime) {
68
+ formattedTime = formatTimeAgo(time);
69
+ } else if (timeOnly) {
70
+ formattedTime = time.toLocaleTimeString();
71
+ } else {
72
+ formattedTime = time.toLocaleString();
73
+ }
74
+
75
+ return (0, _jsxRuntime.jsx)(_themeUi.Text, _extends({
76
+ title: time.toLocaleString('sv', {
77
+ timeZoneName: 'short'
78
+ }),
79
+ datetime: time,
80
+ as: "time"
81
+ }, props, {
82
+ children: formattedTime
83
+ }));
84
+ };
85
+
86
+ exports.Time = Time;
87
+ Time.propTypes = {
88
+ time: _propTypes["default"].string,
89
+ timeOnly: _propTypes["default"].bool,
90
+ relativeTime: _propTypes["default"].bool
91
+ };