@spaced-out/ui-design-system 0.2.10 → 0.3.1

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
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.3.1](https://github.com/spaced-out/ui-design-system/compare/v0.3.0...v0.3.1) (2024-11-11)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * padding of large chip ([#268](https://github.com/spaced-out/ui-design-system/issues/268)) ([e0fca89](https://github.com/spaced-out/ui-design-system/commit/e0fca89466992fa0cbe08e4557f32b518a12589b))
11
+
12
+ ## [0.3.0](https://github.com/spaced-out/ui-design-system/compare/v0.2.10...v0.3.0) (2024-11-08)
13
+
14
+
15
+ ### Features
16
+
17
+ * timeline component ([#283](https://github.com/spaced-out/ui-design-system/issues/283)) ([0f2ae3c](https://github.com/spaced-out/ui-design-system/commit/0f2ae3cf88c065e521994fab3426e32cfe4752b5))
18
+
5
19
  ### [0.2.10](https://github.com/spaced-out/ui-design-system/compare/v0.2.9...v0.2.10) (2024-11-08)
6
20
 
7
21
 
@@ -55,7 +55,7 @@
55
55
  }
56
56
 
57
57
  .large {
58
- padding: spaceNone spaceXSmall;
58
+ padding: spaceNone spaceSmall;
59
59
  height: size34;
60
60
  min-height: size34;
61
61
  }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Timeline = exports.ORIENTATION = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _classify = require("../../utils/classify");
9
+ var _TimelineModule = _interopRequireDefault(require("./Timeline.module.css"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+
14
+ const ORIENTATION = Object.freeze({
15
+ left: 'left',
16
+ right: 'right'
17
+ });
18
+ exports.ORIENTATION = ORIENTATION;
19
+ const Timeline_ = (_ref, ref) => {
20
+ let {
21
+ classNames,
22
+ orientation = ORIENTATION.left,
23
+ children
24
+ } = _ref;
25
+ const childrenArray = React.Children.toArray(children).filter(Boolean);
26
+ const timelineItems = childrenArray.map(timelineItem => /*#__PURE__*/React.cloneElement(timelineItem, {
27
+ ...timelineItem.props,
28
+ orientation
29
+ }));
30
+ return /*#__PURE__*/React.createElement("div", {
31
+ ref: ref,
32
+ className: (0, _classify.classify)(_TimelineModule.default.timelineWrapper, classNames?.wrapper),
33
+ "data-testid": "Timeline"
34
+ }, timelineItems);
35
+ };
36
+ const Timeline = /*#__PURE__*/React.forwardRef(Timeline_);
37
+ exports.Timeline = Timeline;
@@ -0,0 +1,47 @@
1
+ // @flow strict
2
+ import * as React from 'react';
3
+
4
+ import {classify} from '../../utils/classify';
5
+
6
+ import css from './Timeline.module.css';
7
+
8
+
9
+ export const ORIENTATION = Object.freeze({
10
+ left: 'left',
11
+ right: 'right',
12
+ });
13
+
14
+ type ClassNames = $ReadOnly<{wrapper?: string}>;
15
+ export type Orientation = $Values<typeof ORIENTATION>;
16
+
17
+ export type TimelineProps = {
18
+ children: React.Node,
19
+ classNames?: ClassNames,
20
+ orientation?: Orientation,
21
+ };
22
+
23
+ const Timeline_ = (
24
+ {classNames, orientation = ORIENTATION.left, children}: TimelineProps,
25
+ ref,
26
+ ): React.Node => {
27
+ const childrenArray = React.Children.toArray(children).filter(Boolean);
28
+ const timelineItems = childrenArray.map((timelineItem) =>
29
+ React.cloneElement(timelineItem, {
30
+ ...timelineItem.props,
31
+ orientation,
32
+ }),
33
+ );
34
+ return (
35
+ <div
36
+ ref={ref}
37
+ className={classify(css.timelineWrapper, classNames?.wrapper)}
38
+ data-testid="Timeline"
39
+ >
40
+ {timelineItems}
41
+ </div>
42
+ );
43
+ };
44
+
45
+ export const Timeline = (React.forwardRef<TimelineProps, HTMLDivElement>(
46
+ Timeline_,
47
+ ): React$AbstractComponent<TimelineProps, HTMLDivElement>);
@@ -0,0 +1,102 @@
1
+ @value (
2
+ size26
3
+ ) from '../../styles/variables/_size.css';
4
+ @value (
5
+ spaceXXSmall,
6
+ spaceMedium,
7
+ spaceXSmall,
8
+ spaceSmall,
9
+ spaceFluid,
10
+ spaceNone
11
+ ) from '../../styles/variables/_space.css';
12
+ @value (
13
+ colorBorderPrimary,
14
+ colorInformationLightest
15
+ ) from '../../styles/variables/_color.css';
16
+ @value (
17
+ borderWidthPrimary,
18
+ borderRadiusCircle
19
+ ) from '../../styles/variables/_border.css';
20
+
21
+ .timelineWrapper {
22
+ display: flex;
23
+ box-sizing: border-box;
24
+ flex-direction: column;
25
+ justify-content: space-between;
26
+ gap: spaceSmall;
27
+ }
28
+
29
+ .timelineItemWrapper {
30
+ display: flex;
31
+ gap: spaceSmall;
32
+ box-sizing: border-box;
33
+ flex-direction: column;
34
+ justify-content: space-between;
35
+ align-items: var(--align);
36
+
37
+ /* According to the design specification, the last timeline item's content will not have any space at the bottom. */
38
+ &:last-child .timelineItemContent .timelineItemEventDetails {
39
+ margin-bottom: spaceNone;
40
+ }
41
+ }
42
+
43
+ .timelineItemIconWrapper {
44
+ display: flex;
45
+ gap: spaceXXSmall;
46
+ flex-direction: column;
47
+ }
48
+
49
+ .timelineItemIcon {
50
+ width: size26;
51
+ height: size26;
52
+ border-radius: borderRadiusCircle;
53
+ background-color: colorInformationLightest;
54
+ }
55
+
56
+ .timelineItemContent {
57
+ display: flex;
58
+ gap: spaceSmall;
59
+ width: spaceFluid;
60
+ flex-direction: var(--direction);
61
+ }
62
+
63
+ .timelineItemBorder {
64
+ display: flex;
65
+ width: size26;
66
+ flex: 1;
67
+ box-sizing: border-box;
68
+ justify-content: center;
69
+
70
+ & .border {
71
+ height: spaceFluid;
72
+ border-left: borderWidthPrimary dashed colorBorderPrimary;
73
+ }
74
+ }
75
+
76
+ .timelineItemEventDetails {
77
+ display: flex;
78
+ gap: spaceXSmall;
79
+ width: spaceFluid;
80
+ flex-direction: column;
81
+ margin-bottom: spaceMedium;
82
+
83
+ & .timelineItemTitle {
84
+ justify-content: var(--justify);
85
+ }
86
+ }
87
+
88
+ .timelineItemTitle {
89
+ composes: bodySmall from '../../styles/typography.module.css';
90
+ composes: secondary from '../../styles/typography.module.css';
91
+ min-height: size26;
92
+ }
93
+
94
+ .timelineItemCardWrapper {
95
+ width: spaceFluid;
96
+ }
97
+
98
+ .timelineItemLoader {
99
+ display: flex;
100
+ width: spaceFluid;
101
+ justify-content: center;
102
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TimelineItem = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _typography = require("../../../types/typography");
9
+ var _classify = require("../../../utils/classify");
10
+ var _Card = require("../../Card");
11
+ var _ConditionalWrapper = require("../../ConditionalWrapper");
12
+ var _Icon = require("../../Icon");
13
+ var _Timeline = require("../Timeline");
14
+ var _TimelineModule = _interopRequireDefault(require("../Timeline.module.css"));
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+
19
+ const TimelineItem_ = (_ref, ref) => {
20
+ let {
21
+ id,
22
+ title,
23
+ iconName,
24
+ iconType = _Icon.ICON_TYPE.solid,
25
+ children,
26
+ iconColor = _typography.TEXT_COLORS.information,
27
+ classNames,
28
+ orientation = _Timeline.ORIENTATION.left,
29
+ parentComponent,
30
+ enableCardWrapper = true
31
+ } = _ref;
32
+ return /*#__PURE__*/React.createElement("div", {
33
+ id: id,
34
+ key: id,
35
+ "data-testid": "Timeline-item",
36
+ className: (0, _classify.classify)(_TimelineModule.default.timelineItemWrapper, classNames?.wrapper),
37
+ style: {
38
+ '--align': orientation === 'left' ? 'flex-start' : 'flex-end'
39
+ },
40
+ ref: ref
41
+ }, parentComponent, /*#__PURE__*/React.createElement("div", {
42
+ style: {
43
+ '--direction': orientation === 'left' ? 'row' : 'row-reverse'
44
+ },
45
+ className: _TimelineModule.default.timelineItemContent
46
+ }, /*#__PURE__*/React.createElement("div", {
47
+ className: _TimelineModule.default.timelineItemIconWrapper
48
+ }, /*#__PURE__*/React.createElement(_Icon.Icon, {
49
+ name: iconName,
50
+ type: iconType,
51
+ size: _Icon.ICON_SIZE.small,
52
+ color: iconColor,
53
+ className: (0, _classify.classify)(_TimelineModule.default.timelineItemIcon, classNames?.icon)
54
+ }), /*#__PURE__*/React.createElement("div", {
55
+ className: _TimelineModule.default.timelineItemBorder
56
+ }, /*#__PURE__*/React.createElement("div", {
57
+ className: _TimelineModule.default.border
58
+ }))), /*#__PURE__*/React.createElement("div", {
59
+ style: {
60
+ '--justify': orientation === 'left' ? 'flex-start' : 'flex-end'
61
+ },
62
+ className: _TimelineModule.default.timelineItemEventDetails
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: (0, _classify.classify)(_TimelineModule.default.timelineItemTitle, classNames?.title)
65
+ }, title), /*#__PURE__*/React.createElement(_ConditionalWrapper.ConditionalWrapper, {
66
+ condition: enableCardWrapper,
67
+ wrapper: children => /*#__PURE__*/React.createElement(_Card.Card, {
68
+ paddingTop: _Card.PADDING_SIZES.small,
69
+ paddingBottom: _Card.PADDING_SIZES.small,
70
+ classNames: {
71
+ wrapper: (0, _classify.classify)(_TimelineModule.default.timelineItemCardWrapper, classNames?.card)
72
+ }
73
+ }, children)
74
+ }, children))));
75
+ };
76
+ const TimelineItem = /*#__PURE__*/React.forwardRef(TimelineItem_);
77
+ exports.TimelineItem = TimelineItem;
@@ -0,0 +1,117 @@
1
+ // @flow strict
2
+ import * as React from 'react';
3
+
4
+ import type {ColorTypes} from '../../../types/typography';
5
+ import {TEXT_COLORS} from '../../../types/typography';
6
+ import {classify} from '../../../utils/classify';
7
+ import {Card, PADDING_SIZES} from '../../Card';
8
+ import {ConditionalWrapper} from '../../ConditionalWrapper';
9
+ import type {IconType} from '../../Icon';
10
+ import {Icon, ICON_SIZE, ICON_TYPE} from '../../Icon';
11
+ import type {Orientation} from '../Timeline';
12
+ import {ORIENTATION} from '../Timeline';
13
+
14
+ import css from '../Timeline.module.css';
15
+
16
+
17
+ type ClassNames = $ReadOnly<{
18
+ card?: string,
19
+ icon?: string,
20
+ title?: string,
21
+ wrapper?: string,
22
+ }>;
23
+
24
+ export type TimelineItemProps = {
25
+ id?: string,
26
+ title?: React.Node,
27
+ iconName: string,
28
+ children: React.Node,
29
+ iconType?: IconType,
30
+ iconColor?: ColorTypes,
31
+ classNames?: ClassNames,
32
+ orientation?: Orientation,
33
+ parentComponent?: React.Node,
34
+ enableCardWrapper?: boolean,
35
+ };
36
+
37
+ const TimelineItem_ = (
38
+ {
39
+ id,
40
+ title,
41
+ iconName,
42
+ iconType = ICON_TYPE.solid,
43
+ children,
44
+ iconColor = TEXT_COLORS.information,
45
+ classNames,
46
+ orientation = ORIENTATION.left,
47
+ parentComponent,
48
+ enableCardWrapper = true,
49
+ }: TimelineItemProps,
50
+ ref,
51
+ ): React.Node => (
52
+ <div
53
+ id={id}
54
+ key={id}
55
+ data-testid="Timeline-item"
56
+ className={classify(css.timelineItemWrapper, classNames?.wrapper)}
57
+ style={{
58
+ '--align': orientation === 'left' ? 'flex-start' : 'flex-end',
59
+ }}
60
+ ref={ref}
61
+ >
62
+ {parentComponent}
63
+ <div
64
+ style={{
65
+ '--direction': orientation === 'left' ? 'row' : 'row-reverse',
66
+ }}
67
+ className={css.timelineItemContent}
68
+ >
69
+ <div className={css.timelineItemIconWrapper}>
70
+ <Icon
71
+ name={iconName}
72
+ type={iconType}
73
+ size={ICON_SIZE.small}
74
+ color={iconColor}
75
+ className={classify(css.timelineItemIcon, classNames?.icon)}
76
+ />
77
+ <div className={css.timelineItemBorder}>
78
+ <div className={css.border} />
79
+ </div>
80
+ </div>
81
+ <div
82
+ style={{
83
+ '--justify': orientation === 'left' ? 'flex-start' : 'flex-end',
84
+ }}
85
+ className={css.timelineItemEventDetails}
86
+ >
87
+ <div className={classify(css.timelineItemTitle, classNames?.title)}>
88
+ {title}
89
+ </div>
90
+ <ConditionalWrapper
91
+ condition={enableCardWrapper}
92
+ wrapper={(children) => (
93
+ <Card
94
+ paddingTop={PADDING_SIZES.small}
95
+ paddingBottom={PADDING_SIZES.small}
96
+ classNames={{
97
+ wrapper: classify(
98
+ css.timelineItemCardWrapper,
99
+ classNames?.card,
100
+ ),
101
+ }}
102
+ >
103
+ {children}
104
+ </Card>
105
+ )}
106
+ >
107
+ {children}
108
+ </ConditionalWrapper>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ );
113
+
114
+ export const TimelineItem = (React.forwardRef<
115
+ TimelineItemProps,
116
+ HTMLDivElement,
117
+ >(TimelineItem_): React$AbstractComponent<TimelineItemProps, HTMLDivElement>);
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _TimelineItem = require("./TimelineItem");
7
+ Object.keys(_TimelineItem).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _TimelineItem[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _TimelineItem[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,3 @@
1
+ // @flow strict
2
+
3
+ export * from './TimelineItem';
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _Timeline = require("./Timeline");
7
+ Object.keys(_Timeline).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Timeline[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _Timeline[key];
14
+ }
15
+ });
16
+ });
17
+ var _TimelineItem = require("./TimelineItem");
18
+ Object.keys(_TimelineItem).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _TimelineItem[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _TimelineItem[key];
25
+ }
26
+ });
27
+ });
@@ -0,0 +1,4 @@
1
+ // @flow strict
2
+
3
+ export * from './Timeline';
4
+ export * from './TimelineItem';
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.wrangleMoment = exports.isStartOfRange = exports.isStartDateEndDateSame = exports.isEndOfRange = exports.inDateRange = exports.getValidDates = exports.getTimezones = exports.getSubtractedDate = exports.getMonthEndDate = exports.getDaysInMonth = exports.getAvailableMonths = exports.getAddedDate = exports.generateAvailableYears = exports.formatIsoDate = exports.checkRangeValidity = exports.addTimezone = exports.WEEKDAYS = exports.NAVIGATION_ACTION = exports.MONTHS = exports.MARKERS = exports.DATE_RANGE_PICKER_ERRORS = void 0;
7
- var _formatISO = _interopRequireDefault(require("date-fns/formatISO"));
8
7
  var _parseISO = _interopRequireDefault(require("date-fns/parseISO"));
9
8
  var _invariant = _interopRequireDefault(require("invariant"));
10
9
  var _lodash = require("lodash");
@@ -14,8 +13,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
14
13
 
15
14
  // $FlowFixMe - strict types for date-fns
16
15
 
17
- // $FlowFixMe - strict types for date-fns
18
-
19
16
  // $FlowFixMe[untyped-import]
20
17
 
21
18
  const NAVIGATION_ACTION = Object.freeze({
@@ -107,9 +104,7 @@ const wrangleMoment = date => {
107
104
  return date instanceof _momentTimezone.default ? date.toDate() : (0, _parseISO.default)(date);
108
105
  };
109
106
  exports.wrangleMoment = wrangleMoment;
110
- const formatIsoDate = date => (0, _formatISO.default)(wrangleMoment(date), {
111
- representation: 'date'
112
- });
107
+ const formatIsoDate = date => (0, _momentTimezone.default)(date).utc().format('YYYY-MM-DD');
113
108
  exports.formatIsoDate = formatIsoDate;
114
109
  const isStartOfRange = (_ref, date) => {
115
110
  let {
@@ -1,7 +1,5 @@
1
1
  // @flow strict
2
2
 
3
- // $FlowFixMe - strict types for date-fns
4
- import formatISO from 'date-fns/formatISO';
5
3
  // $FlowFixMe - strict types for date-fns
6
4
  import parseISO from 'date-fns/parseISO';
7
5
  import invariant from 'invariant';
@@ -92,9 +90,7 @@ export const wrangleMoment = (date?: string | Date): Date => {
92
90
  };
93
91
 
94
92
  export const formatIsoDate = (date?: string | Date): string =>
95
- formatISO(wrangleMoment(date), {
96
- representation: 'date',
97
- });
93
+ moment(date).utc().format('YYYY-MM-DD');
98
94
 
99
95
  export const isStartOfRange = ({startDate}: DateRange, date: string): boolean =>
100
96
  Boolean(startDate) && moment(date).isSame(moment(startDate), 'd');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spaced-out/ui-design-system",
3
- "version": "0.2.10",
3
+ "version": "0.3.1",
4
4
  "main": "index.js",
5
5
  "description": "Sense UI components library",
6
6
  "author": {