@planningcenter/tapestry-react 2.9.0-rc.4 → 2.9.0-rc.7

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 (51) hide show
  1. package/dist/cjs/Button/Button.js +15 -4
  2. package/dist/cjs/FilterLayout/FilterLayout.js +5 -3
  3. package/dist/cjs/TimeField/utils.js +12 -6
  4. package/dist/cjs/ToggleSwitch/ToggleSwitch.js +99 -0
  5. package/dist/cjs/ToggleSwitch/ToggleSwitch.test.js +67 -0
  6. package/dist/cjs/ToggleSwitch/index.js +15 -0
  7. package/dist/cjs/index.d.js +13 -1
  8. package/dist/cjs/index.js +5 -1
  9. package/dist/cjs/system/colors/colors.js +17 -0
  10. package/dist/cjs/system/default-theme.js +3 -0
  11. package/dist/cjs/system/plugins/color.js +3 -1
  12. package/dist/cjs/system/style-names.js +1 -1
  13. package/dist/cjs/utils.js +0 -9
  14. package/dist/esm/Button/Button.js +15 -4
  15. package/dist/esm/FilterLayout/FilterLayout.js +5 -3
  16. package/dist/esm/TimeField/utils.js +12 -6
  17. package/dist/esm/ToggleSwitch/ToggleSwitch.js +80 -0
  18. package/dist/esm/ToggleSwitch/ToggleSwitch.test.js +57 -0
  19. package/dist/esm/ToggleSwitch/index.js +2 -0
  20. package/dist/esm/index.d.js +2 -0
  21. package/dist/esm/index.js +1 -0
  22. package/dist/esm/system/colors/colors.js +18 -1
  23. package/dist/esm/system/default-theme.js +3 -0
  24. package/dist/esm/system/plugins/color.js +3 -1
  25. package/dist/esm/system/style-names.js +1 -1
  26. package/dist/esm/utils.js +1 -9
  27. package/dist/types/Button/Button.d.ts +5 -1
  28. package/dist/types/ToggleSwitch/ToggleSwitch.d.ts +22 -0
  29. package/dist/types/ToggleSwitch/ToggleSwitch.test.d.ts +1 -0
  30. package/dist/types/ToggleSwitch/index.d.ts +2 -0
  31. package/dist/types/index.d.ts +5 -0
  32. package/dist/types/system/style-names.d.ts +2 -2
  33. package/package.json +1 -1
  34. package/src/Button/Button.tsx +26 -3
  35. package/src/FilterLayout/FilterLayout.tsx +9 -6
  36. package/src/TimeField/TimeField.mdx +1 -1
  37. package/src/TimeField/utils.js +11 -13
  38. package/src/ToggleSwitch/ToggleSwitch.mdx +56 -0
  39. package/src/ToggleSwitch/ToggleSwitch.test.tsx +51 -0
  40. package/src/ToggleSwitch/ToggleSwitch.tsx +106 -0
  41. package/src/ToggleSwitch/index.ts +2 -0
  42. package/src/index.d.ts +5 -0
  43. package/src/index.js +1 -0
  44. package/src/system/colors/colors.js +20 -1
  45. package/src/system/default-theme.ts +3 -0
  46. package/src/system/plugins/color.js +3 -0
  47. package/src/system/style-names.ts +1 -0
  48. package/src/utils.js +0 -8
  49. package/dist/cjs/TimeField/legacy_TimeField.js +0 -274
  50. package/dist/esm/TimeField/legacy_TimeField.js +0 -271
  51. package/src/TimeField/legacy_TimeField.js +0 -278
@@ -178,7 +178,14 @@ function Button(_ref) {
178
178
  }
179
179
 
180
180
  if (disabled) {
181
- buttonProps.opacity = 0.65;
181
+ var disabledStyles = buttonThemes[theme][variant || 'fill'].disabled;
182
+
183
+ if (disabledStyles !== undefined) {
184
+ buttonProps = _objectSpread(_objectSpread({}, buttonProps), disabledStyles);
185
+ } else {
186
+ buttonProps.opacity = 0.65;
187
+ }
188
+
182
189
  buttonProps['aria-disabled'] = true;
183
190
  buttonProps.cursor = 'not-allowed';
184
191
 
@@ -198,9 +205,9 @@ function Button(_ref) {
198
205
  buttonProps.hover = undefined;
199
206
  buttonProps.active = undefined;
200
207
  } else {
201
- buttonProps.focus = _objectSpread(_objectSpread({}, buttonProps.focus), {}, {
208
+ buttonProps.focus = _objectSpread({
202
209
  zIndex: 5
203
- });
210
+ }, buttonProps.focus);
204
211
  buttonProps.cursor = 'pointer';
205
212
  buttonProps.touchAction = 'manipulation';
206
213
  buttonProps.onClick = onClick;
@@ -280,7 +287,11 @@ function Button(_ref) {
280
287
  }
281
288
  }
282
289
 
283
- return /*#__PURE__*/React.createElement(_Tooltip["default"], tooltip, /*#__PURE__*/React.createElement(_StackView.StackView, (0, _extends2["default"])({}, buttonProps, restProps), iconLeft && /*#__PURE__*/React.createElement(_Icon["default"], (0, _extends2["default"])({
290
+ return /*#__PURE__*/React.createElement(_Tooltip["default"], tooltip, /*#__PURE__*/React.createElement(_StackView.StackView, (0, _extends2["default"])({}, buttonProps, restProps, {
291
+ css: {
292
+ '&:focus-visible': _objectSpread({}, buttonProps.focusVisible)
293
+ }
294
+ }), iconLeft && /*#__PURE__*/React.createElement(_Icon["default"], (0, _extends2["default"])({
284
295
  size: size,
285
296
  color: buttonProps.color,
286
297
  marginRight: paddingHorizontalDense
@@ -80,7 +80,8 @@ function FilterLayout(props) {
80
80
  shrink: 1
81
81
  }, header)), /*#__PURE__*/React.createElement(_Divider["default"], null), /*#__PURE__*/React.createElement(_StackView["default"], {
82
82
  axis: "horizontal",
83
- grow: 1
83
+ grow: 1,
84
+ overflow: "hidden"
84
85
  }, /*#__PURE__*/React.createElement(_StackView["default"], {
85
86
  visible: sidebarOpen,
86
87
  basis: fill ? '100%' : sidebarWidth + 'px',
@@ -88,9 +89,10 @@ function FilterLayout(props) {
88
89
  borderRightColor: "separatorTertiary",
89
90
  backgroundColor: "surfaceSecondary"
90
91
  }, sidebar), /*#__PURE__*/React.createElement(_StackView["default"], {
91
- visible: !(sidebarOpen && fill),
92
+ visibility: sidebarOpen && fill ? 'hidden' : 'visible',
93
+ maxHeight: sidebarOpen && fill ? 0 : 'initial',
92
94
  grow: 1,
93
- shrink: 1,
95
+ shrink: sidebarOpen && fill ? 0 : 1,
94
96
  basis: "100%"
95
97
  }, toolbar, /*#__PURE__*/React.createElement(_Divider["default"], null), table)));
96
98
  }
@@ -27,12 +27,18 @@ function addHoursToTime(time, hoursToAdd) {
27
27
  function addMinutesToTime(time, minutesToAdd) {
28
28
  var hours = time[0],
29
29
  minutes = time[1];
30
- var totalTimeInMinutes = hours * 60 + minutes;
31
- var totalMinutesInDay = 24 * 60;
32
- var newTime = parseInt(totalTimeInMinutes) + parseInt(minutesToAdd);
33
- var newHours = newTime > totalMinutesInDay ? Math.floor(newTime / 60) - 24 : Math.floor(newTime / 60);
34
- var newMinutes = newTime % 60;
35
- return [newHours, newMinutes];
30
+ var nextMinutes = minutes + minutesToAdd;
31
+ var remainderMinutes = modulo(nextMinutes, MINUTES_IN_HOUR);
32
+
33
+ if (remainderMinutes >= 0) {
34
+ var nextHours = hours + Math.floor(nextMinutes / MINUTES_IN_HOUR);
35
+ hours = modulo(nextHours, HOURS_IN_DAY);
36
+ minutes = remainderMinutes;
37
+ } else {
38
+ minutes = nextMinutes;
39
+ }
40
+
41
+ return [hours, minutes];
36
42
  }
37
43
 
38
44
  function addTimeToDate(date, time) {
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.ToggleSwitch = ToggleSwitch;
7
+ exports["default"] = void 0;
8
+
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+
11
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
+
13
+ var _react = _interopRequireDefault(require("react"));
14
+
15
+ var _Box = require("../Box");
16
+
17
+ var _Button = _interopRequireDefault(require("../Button"));
18
+
19
+ var _colors = require("../system/colors");
20
+
21
+ var _StackView = require("../StackView");
22
+
23
+ var _Text = _interopRequireDefault(require("../Text"));
24
+
25
+ var _system = require("../system");
26
+
27
+ function ToggleSwitch(props) {
28
+ var _props$disabled = props.disabled,
29
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
30
+ isActive = props.isActive,
31
+ label = props.label,
32
+ onClick = props.onClick,
33
+ _props$size = props.size,
34
+ size = _props$size === void 0 ? 'md' : _props$size,
35
+ tooltip = props.tooltip,
36
+ restProps = (0, _objectWithoutPropertiesLoose2["default"])(props, ["disabled", "isActive", "label", "onClick", "size", "tooltip"]);
37
+
38
+ var _useThemeProps = (0, _system.useThemeProps)('toggleSwitch', restProps),
39
+ backgroundColor = _useThemeProps.backgroundColor;
40
+
41
+ var toggleButtonProps = {
42
+ height: 2.5,
43
+ width: 4.375
44
+ };
45
+ var toggleNotchProps = {
46
+ height: 2,
47
+ width: 2
48
+ };
49
+
50
+ if (size === 'sm') {
51
+ toggleButtonProps = {
52
+ height: 2.25,
53
+ width: 4
54
+ };
55
+ toggleNotchProps = {
56
+ height: 1.75,
57
+ width: 1.75
58
+ };
59
+ } else if (size === 'xs') {
60
+ toggleButtonProps = {
61
+ height: 2,
62
+ width: 3.5
63
+ };
64
+ toggleNotchProps = {
65
+ height: 1.5,
66
+ width: 1.5
67
+ };
68
+ }
69
+
70
+ return /*#__PURE__*/_react["default"].createElement(_StackView.StackView, {
71
+ alignment: "center",
72
+ axis: "horizontal",
73
+ spacing: size === 'xs' ? 0.5 : size === 'sm' ? 0.75 : 1
74
+ }, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({
75
+ as: "button",
76
+ backgroundColor: disabled ? _colors.colors.grays.light.neutral81 : isActive ? backgroundColor : _colors.colors.grays.light.neutral62,
77
+ onClick: onClick,
78
+ opacity: 1,
79
+ position: "relative",
80
+ radius: "pill",
81
+ theme: false,
82
+ disabled: disabled,
83
+ tooltip: tooltip
84
+ }, toggleButtonProps, restProps), /*#__PURE__*/_react["default"].createElement(_Box.Box, (0, _extends2["default"])({
85
+ background: "#fff",
86
+ left: 0.25,
87
+ pointerEvents: "none",
88
+ position: "absolute",
89
+ radius: "circle",
90
+ top: 0.25,
91
+ transform: "translateX(" + (isActive ? 'calc(100% - 1px)' : '0%') + ")",
92
+ transition: "120ms"
93
+ }, toggleNotchProps))), label && /*#__PURE__*/_react["default"].createElement(_Text["default"], {
94
+ size: size === 'xs' ? 5 : size === 'sm' ? 4 : 3
95
+ }, label));
96
+ }
97
+
98
+ var _default = ToggleSwitch;
99
+ exports["default"] = _default;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _react2 = require("@testing-library/react");
8
+
9
+ require("@testing-library/jest-dom/extend-expect");
10
+
11
+ var _ToggleSwitch = _interopRequireDefault(require("./ToggleSwitch"));
12
+
13
+ describe('ToggleSwitch component', function () {
14
+ it('should render with default properties', function () {
15
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
16
+ isActive: false,
17
+ label: "Toggle me",
18
+ onClick: function onClick() {}
19
+ })),
20
+ getByRole = _render.getByRole;
21
+
22
+ var toggleButton = getByRole('button');
23
+ expect(toggleButton).toBeInTheDocument();
24
+ });
25
+ it('should call onClick when clicked', function () {
26
+ var mockOnClick = jest.fn();
27
+
28
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
29
+ isActive: false,
30
+ label: "Toggle me",
31
+ onClick: mockOnClick
32
+ })),
33
+ getByRole = _render2.getByRole;
34
+
35
+ var toggleButton = getByRole('button');
36
+
37
+ _react2.fireEvent.click(toggleButton);
38
+
39
+ expect(mockOnClick).toHaveBeenCalled();
40
+ });
41
+ it('should display the label', function () {
42
+ var label = 'Toggle me';
43
+
44
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
45
+ isActive: false,
46
+ label: label,
47
+ onClick: function onClick() {}
48
+ })),
49
+ getByText = _render3.getByText;
50
+
51
+ expect(getByText(label)).toBeInTheDocument();
52
+ });
53
+ it('should apply active color when isActive is true', function () {
54
+ var activeColor = 'green';
55
+
56
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
57
+ backgroundColor: activeColor,
58
+ isActive: true,
59
+ label: "Toggle me",
60
+ onClick: function onClick() {}
61
+ })),
62
+ getByRole = _render4.getByRole;
63
+
64
+ var toggleButton = getByRole('button');
65
+ expect(toggleButton).toHaveStyle("background-color: " + activeColor);
66
+ });
67
+ });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ var _exportNames = {};
5
+ exports["default"] = void 0;
6
+
7
+ var _ToggleSwitch = require("./ToggleSwitch");
8
+
9
+ exports["default"] = _ToggleSwitch.ToggleSwitch;
10
+ Object.keys(_ToggleSwitch).forEach(function (key) {
11
+ if (key === "default" || key === "__esModule") return;
12
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
13
+ if (key in exports && exports[key] === _ToggleSwitch[key]) return;
14
+ exports[key] = _ToggleSwitch[key];
15
+ });
@@ -61,6 +61,7 @@ var _exportNames = {
61
61
  Tabs: true,
62
62
  TextArea: true,
63
63
  TimeField: true,
64
+ ToggleSwitch: true,
64
65
  Toolbar: true,
65
66
  TokenInput: true,
66
67
  Tooltip: true,
@@ -72,7 +73,7 @@ var _exportNames = {
72
73
  Select: true,
73
74
  Sortable: true
74
75
  };
75
- exports.Sortable = exports.Select = exports.List = exports.Input = exports.Checkbox = exports.Wizard = exports.VariantProvider = exports.Tooltip = exports.TokenInput = exports.Toolbar = exports.TimeField = exports.TextArea = exports.Tabs = exports.Table = exports.Summary = exports.StepperProgress = exports.StepperField = exports.Sidebar = exports.SegmentedTabs = exports.SegmentedControl = exports.HeadingUppercase = exports.Section = exports.ScreenReader = exports.RangeSlider = exports.Radio = exports.Progress = exports.Pagination = exports.PagerView = exports.PageToolbar = exports.PageTitle = exports.PageTabList = exports.PageTab = exports.PageHeader = exports.PageDropdown = exports.PageButton = exports.PageBody = exports.PageActions = exports.NumberField = exports.Modal = exports.Menu = exports.Logo = exports.LinkList = exports.Link = exports.Icon = exports.Highlight = exports.HelperDrawer = exports.Heading = exports.FieldSet = exports.Form = exports.Field = exports.EditActions = exports.Dropdown = exports.Drawer = exports.DragDrop = exports.DateField = exports.DataTable = exports.Combobox = exports.ColumnView = exports.Collapse = exports.ChurchCenterStatus = exports.CheckboxGroup = exports.CheckboxCard = exports.Calendar = exports.Badge = exports.Avatar = exports.utils = exports.server = exports.hooks = exports.designSystem = void 0;
76
+ exports.Sortable = exports.Select = exports.List = exports.Input = exports.Checkbox = exports.Wizard = exports.VariantProvider = exports.Tooltip = exports.TokenInput = exports.Toolbar = exports.ToggleSwitch = exports.TimeField = exports.TextArea = exports.Tabs = exports.Table = exports.Summary = exports.StepperProgress = exports.StepperField = exports.Sidebar = exports.SegmentedTabs = exports.SegmentedControl = exports.HeadingUppercase = exports.Section = exports.ScreenReader = exports.RangeSlider = exports.Radio = exports.Progress = exports.Pagination = exports.PagerView = exports.PageToolbar = exports.PageTitle = exports.PageTabList = exports.PageTab = exports.PageHeader = exports.PageDropdown = exports.PageButton = exports.PageBody = exports.PageActions = exports.NumberField = exports.Modal = exports.Menu = exports.Logo = exports.LinkList = exports.Link = exports.Icon = exports.Highlight = exports.HelperDrawer = exports.Heading = exports.FieldSet = exports.Form = exports.Field = exports.EditActions = exports.Dropdown = exports.Drawer = exports.DragDrop = exports.DateField = exports.DataTable = exports.Combobox = exports.ColumnView = exports.Collapse = exports.ChurchCenterStatus = exports.CheckboxGroup = exports.CheckboxCard = exports.Calendar = exports.Badge = exports.Avatar = exports.utils = exports.server = exports.hooks = exports.designSystem = void 0;
76
77
 
77
78
  var _Alert = require("./Alert");
78
79
 
@@ -218,6 +219,15 @@ Object.keys(_TileView).forEach(function (key) {
218
219
  exports[key] = _TileView[key];
219
220
  });
220
221
 
222
+ var _ToggleSwitch = require("./ToggleSwitch");
223
+
224
+ Object.keys(_ToggleSwitch).forEach(function (key) {
225
+ if (key === "default" || key === "__esModule") return;
226
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
227
+ if (key in exports && exports[key] === _ToggleSwitch[key]) return;
228
+ exports[key] = _ToggleSwitch[key];
229
+ });
230
+
221
231
  var _ThemeProvider = require("./ThemeProvider");
222
232
 
223
233
  Object.keys(_ThemeProvider).forEach(function (key) {
@@ -353,6 +363,8 @@ var TextArea;
353
363
  exports.TextArea = TextArea;
354
364
  var TimeField;
355
365
  exports.TimeField = TimeField;
366
+ var ToggleSwitch;
367
+ exports.ToggleSwitch = ToggleSwitch;
356
368
  var Toolbar;
357
369
  exports.Toolbar = Toolbar;
358
370
  var TokenInput;
package/dist/cjs/index.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
 
7
7
  exports.__esModule = true;
8
- exports.utils = exports.server = exports.hooks = exports.designSystem = exports.PageToolbar = exports.PageTitle = exports.PageTabList = exports.PageTab = exports.PageHeader = exports.PageDropdown = exports.PageButton = exports.PageBody = exports.PageActions = exports.WrapView = exports.Wizard = exports.VariantProvider = exports.Tooltip = exports.TokenInput = exports.Toolbar = exports.TimeField = exports.TileView = exports.ThemeProvider = exports.TextArea = exports.Text = exports.Tabs = exports.Table = exports.Tab = exports.Summary = exports.StepperProgress = exports.StepperField = exports.StackView = exports.Spinner = exports.Sortable = exports.Sidebar = exports.Select = exports.SegmentedTabs = exports.SegmentedControl = exports.HeadingUppercase = exports.Section = exports.Scrim = exports.ScreenReader = exports.RangeSlider = exports.Radio = exports.Progress = exports.Portal = exports.Popover = exports.Pagination = exports.PagerView = exports.NumberField = exports.Modal = exports.Menu = exports.Logo = exports.List = exports.LinkList = exports.Link = exports.Input = exports.Icon = exports.Highlight = exports.HelperDrawer = exports.Heading = exports.Group = exports.GridView = exports.FilterLayout = exports.FieldSet = exports.Form = exports.Field = exports.EditActions = exports.Dropdown = exports.Drawer = exports.DragDrop = exports.Divider = exports.DateField = exports.DataTable = exports.Combobox = exports.ColumnView = exports.Collapse = exports.ChurchCenterStatus = exports.CheckboxGroup = exports.CheckboxCard = exports.Checkbox = exports.Card = exports.Calendar = exports.Button = exports.Box = exports.Badge = exports.Avatar = exports.Alert = exports.ActionsDropdown = void 0;
8
+ exports.utils = exports.server = exports.hooks = exports.designSystem = exports.PageToolbar = exports.PageTitle = exports.PageTabList = exports.PageTab = exports.PageHeader = exports.PageDropdown = exports.PageButton = exports.PageBody = exports.PageActions = exports.WrapView = exports.Wizard = exports.VariantProvider = exports.Tooltip = exports.TokenInput = exports.Toolbar = exports.ToggleSwitch = exports.TimeField = exports.TileView = exports.ThemeProvider = exports.TextArea = exports.Text = exports.Tabs = exports.Table = exports.Tab = exports.Summary = exports.StepperProgress = exports.StepperField = exports.StackView = exports.Spinner = exports.Sortable = exports.Sidebar = exports.Select = exports.SegmentedTabs = exports.SegmentedControl = exports.HeadingUppercase = exports.Section = exports.Scrim = exports.ScreenReader = exports.RangeSlider = exports.Radio = exports.Progress = exports.Portal = exports.Popover = exports.Pagination = exports.PagerView = exports.NumberField = exports.Modal = exports.Menu = exports.Logo = exports.List = exports.LinkList = exports.Link = exports.Input = exports.Icon = exports.Highlight = exports.HelperDrawer = exports.Heading = exports.Group = exports.GridView = exports.FilterLayout = exports.FieldSet = exports.Form = exports.Field = exports.EditActions = exports.Dropdown = exports.Drawer = exports.DragDrop = exports.Divider = exports.DateField = exports.DataTable = exports.Combobox = exports.ColumnView = exports.Collapse = exports.ChurchCenterStatus = exports.CheckboxGroup = exports.CheckboxCard = exports.Checkbox = exports.Card = exports.Calendar = exports.Button = exports.Box = exports.Badge = exports.Avatar = exports.Alert = exports.ActionsDropdown = void 0;
9
9
 
10
10
  require("focus-options-polyfill");
11
11
 
@@ -315,6 +315,10 @@ var _TimeField = _interopRequireDefault(require("./TimeField"));
315
315
 
316
316
  exports.TimeField = _TimeField["default"];
317
317
 
318
+ var _ToggleSwitch = _interopRequireDefault(require("./ToggleSwitch"));
319
+
320
+ exports.ToggleSwitch = _ToggleSwitch["default"];
321
+
318
322
  var _Toolbar = _interopRequireDefault(require("./Toolbar"));
319
323
 
320
324
  exports.Toolbar = _Toolbar["default"];
@@ -6,7 +6,24 @@ exports.colors = exports.palette = void 0;
6
6
 
7
7
  var _utils = require("./utils");
8
8
 
9
+ // NOTE: this is a solution for using the UX palette in Tapestry-React
10
+ // that will likely be replaced with a tokenized palette in the future
11
+ var tapestry = {
12
+ create: {
13
+ create35: 'hsl(86deg 91% 35% / 100%)'
14
+ },
15
+ grays: {
16
+ light: {
17
+ neutral62: 'hsl(0deg 0% 62% / 100%)',
18
+ neutral81: 'hsl(0deg 0% 81% / 100%)'
19
+ }
20
+ },
21
+ interaction: {
22
+ interaction66: 'hsl(221deg 91% 66% / 100%)'
23
+ }
24
+ };
9
25
  var palette = {
26
+ tapestry: tapestry,
10
27
  primary: {
11
28
  lightest: 'hsl(88, 24%, 92%)',
12
29
  lighter: 'hsl(88, 32%, 86%)',
@@ -72,6 +72,9 @@ var defaultTheme = {
72
72
  xxl: 9
73
73
  },
74
74
  trackColor: 'primary-lighter'
75
+ },
76
+ toggleSwitch: {
77
+ backgroundColor: 'interaction66'
75
78
  }
76
79
  };
77
80
  var _default = defaultTheme;
@@ -20,8 +20,9 @@ function color(_ref, theme) {
20
20
  borderTopColor = _ref.borderTopColor,
21
21
  color = _ref.color,
22
22
  fill = _ref.fill,
23
+ outlineColor = _ref.outlineColor,
23
24
  stroke = _ref.stroke,
24
- styles = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["backgroundColor", "borderColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "color", "fill", "stroke"]);
25
+ styles = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["backgroundColor", "borderColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "color", "fill", "outlineColor", "stroke"]);
25
26
  var colorProps = {
26
27
  backgroundColor: backgroundColor,
27
28
  borderColor: borderColor,
@@ -31,6 +32,7 @@ function color(_ref, theme) {
31
32
  borderTopColor: borderTopColor,
32
33
  color: color,
33
34
  fill: fill,
35
+ outlineColor: outlineColor,
34
36
  stroke: stroke
35
37
  };
36
38
  Object.keys(colorProps).forEach(function (key) {
@@ -4,7 +4,7 @@ exports.__esModule = true;
4
4
  exports.pseudoPropNames = exports.stylePropNames = exports.customStyleNames = exports.colorStyleNames = exports.nativeStyleNames = void 0;
5
5
  var nativeStyleNames = ['alignContent', 'alignItems', 'alignSelf', 'alignmentBaseline', 'animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'backfaceVisibility', 'background', 'backgroundAttachment', 'backgroundBlendMode', 'backgroundClip', 'backgroundImage', 'backgroundOrigin', 'backgroundPosition', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize', 'baselineShift', 'border', 'borderBottom', 'borderBottomLeftRadius', 'borderBottomRightRadius', 'borderBottomStyle', 'borderBottomWidth', 'borderCollapse', 'borderImage', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeft', 'borderLeftStyle', 'borderLeftWidth', 'borderRadius', 'borderRight', 'borderRightStyle', 'borderRightWidth', 'borderSpacing', 'borderStyle', 'borderTop', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderTopStyle', 'borderTopWidth', 'borderWidth', 'bottom', 'boxShadow', 'boxSizing', 'breakAfter', 'breakBefore', 'breakInside', 'clear', 'clip', 'clipPath', 'clipRule', 'columnCount', 'columnFill', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleStyle', 'columnRuleWidth', 'columnSpan', 'columnWidth', 'columns', 'contain', 'content', 'counterIncrement', 'counterReset', 'cursor', 'direction', 'display', 'fillOpacity', 'fillRule', 'filter', 'flex', 'flexBasis', 'flexDirection', 'flexFlow', 'flexGrow', 'flexShrink', 'flexWrap', 'font', 'fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontSize', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantCaps', 'fontVariantLigatures', 'fontVariantNumeric', 'fontWeight', 'gap', 'gridArea', 'gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridColumn', 'gridColumnEnd', 'gridColumnGap', 'gridColumnStart', 'gridGap', 'gridRow', 'gridRowEnd', 'gridRowGap', 'gridRowStart', 'gridTemplate', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows', 'height', 'imageRendering', 'isolation', 'justifyContent', 'justifyItems', 'justifySelf', 'left', 'letterSpacing', 'lightingColor', 'lineHeight', 'listStyle', 'listStyleImage', 'listStylePosition', 'listStyleType', 'margin', 'marginBottom', 'marginLeft', 'marginRight', 'marginTop', 'mask', 'maskType', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'mixBlendMode', 'motion', 'objectFit', 'objectPosition', 'opacity', 'order', 'outline', 'outlineColor', 'outlineOffset', 'outlineStyle', 'outlineWidth', 'overflow', 'overflowWrap', 'overflowX', 'overflowY', 'padding', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', 'pageBreakAfter', 'pageBreakBefore', 'pageBreakInside', 'perspective', 'perspectiveOrigin', 'placeItems', 'placeSelf', 'pointerEvents', 'position', 'resize', 'right', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'tabSize', 'tableLayout', 'textAlign', 'textDecoration', 'textIndent', 'textOrientation', 'textOverflow', 'textRendering', 'textShadow', 'textTransform', 'top', 'touchAction', 'transform', 'transformOrigin', 'transformStyle', 'transition', 'transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction', 'verticalAlign', 'visibility', 'clipPath', 'filter', 'userSelect', 'WebkitOverflowScrolling', 'writingMode', 'whiteSpace', 'width', 'willChange', 'wordBreak', 'wordSpacing', 'wordWrap', 'zIndex'];
6
6
  exports.nativeStyleNames = nativeStyleNames;
7
- var colorStyleNames = ['backgroundColor', 'borderColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'fill', 'stroke'];
7
+ var colorStyleNames = ['backgroundColor', 'borderColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'fill', 'outlineColor', 'stroke'];
8
8
  exports.colorStyleNames = colorStyleNames;
9
9
  var customStyleNames = ['css', 'column', 'columnStart', 'columnEnd', 'row', 'rowStart', 'rowEnd', 'basis', 'elevation', 'grow', 'marginHorizontal', 'marginVertical', 'paddingHorizontal', 'paddingVertical', 'radius', 'radiusTop', 'radiusRight', 'radiusBottom', 'radiusLeft', 'x', 'y', 'rotate', 'scale', 'uppercase', 'shrink', 'wrap', 'strokeAlign', 'strokeWeight'];
10
10
  exports.customStyleNames = customStyleNames;
package/dist/cjs/utils.js CHANGED
@@ -21,7 +21,6 @@ exports.insertAtIndex = insertAtIndex;
21
21
  exports.isArray = isArray;
22
22
  exports.isElementInteractive = isElementInteractive;
23
23
  exports.isFunction = isFunction;
24
- exports.isNumber = isNumber;
25
24
  exports.isValueInArray = isValueInArray;
26
25
  exports.joinChildren = joinChildren;
27
26
  exports.lockScroll = lockScroll;
@@ -400,14 +399,6 @@ function isArray(value) {
400
399
  function isFunction(value) {
401
400
  return value && value.constructor === Function;
402
401
  }
403
- /**
404
- * Determines if value is a number
405
- */
406
-
407
-
408
- function isNumber(value) {
409
- return /^[0-9]$/i.test(value);
410
- }
411
402
  /**
412
403
  * Determines if a value is present in an array by
413
404
  * performing a shallow equal check on each item.
@@ -171,7 +171,14 @@ export function Button(_ref) {
171
171
  }
172
172
 
173
173
  if (disabled) {
174
- buttonProps.opacity = 0.65;
174
+ var disabledStyles = buttonThemes[theme][variant || 'fill'].disabled;
175
+
176
+ if (disabledStyles !== undefined) {
177
+ buttonProps = _objectSpread(_objectSpread({}, buttonProps), disabledStyles);
178
+ } else {
179
+ buttonProps.opacity = 0.65;
180
+ }
181
+
175
182
  buttonProps['aria-disabled'] = true;
176
183
  buttonProps.cursor = 'not-allowed';
177
184
 
@@ -191,9 +198,9 @@ export function Button(_ref) {
191
198
  buttonProps.hover = undefined;
192
199
  buttonProps.active = undefined;
193
200
  } else {
194
- buttonProps.focus = _objectSpread(_objectSpread({}, buttonProps.focus), {}, {
201
+ buttonProps.focus = _objectSpread({
195
202
  zIndex: 5
196
- });
203
+ }, buttonProps.focus);
197
204
  buttonProps.cursor = 'pointer';
198
205
  buttonProps.touchAction = 'manipulation';
199
206
  buttonProps.onClick = onClick;
@@ -265,7 +272,11 @@ export function Button(_ref) {
265
272
  }
266
273
  }
267
274
 
268
- return /*#__PURE__*/React.createElement(Tooltip, tooltip, /*#__PURE__*/React.createElement(StackView, _extends({}, buttonProps, restProps), iconLeft && /*#__PURE__*/React.createElement(Icon, _extends({
275
+ return /*#__PURE__*/React.createElement(Tooltip, tooltip, /*#__PURE__*/React.createElement(StackView, _extends({}, buttonProps, restProps, {
276
+ css: {
277
+ '&:focus-visible': _objectSpread({}, buttonProps.focusVisible)
278
+ }
279
+ }), iconLeft && /*#__PURE__*/React.createElement(Icon, _extends({
269
280
  size: size,
270
281
  color: buttonProps.color,
271
282
  marginRight: paddingHorizontalDense
@@ -67,7 +67,8 @@ export function FilterLayout(props) {
67
67
  shrink: 1
68
68
  }, header)), _ref, /*#__PURE__*/React.createElement(StackView, {
69
69
  axis: "horizontal",
70
- grow: 1
70
+ grow: 1,
71
+ overflow: "hidden"
71
72
  }, /*#__PURE__*/React.createElement(StackView, {
72
73
  visible: sidebarOpen,
73
74
  basis: fill ? '100%' : sidebarWidth + 'px',
@@ -75,9 +76,10 @@ export function FilterLayout(props) {
75
76
  borderRightColor: "separatorTertiary",
76
77
  backgroundColor: "surfaceSecondary"
77
78
  }, sidebar), /*#__PURE__*/React.createElement(StackView, {
78
- visible: !(sidebarOpen && fill),
79
+ visibility: sidebarOpen && fill ? 'hidden' : 'visible',
80
+ maxHeight: sidebarOpen && fill ? 0 : 'initial',
79
81
  grow: 1,
80
- shrink: 1,
82
+ shrink: sidebarOpen && fill ? 0 : 1,
81
83
  basis: "100%"
82
84
  }, toolbar, _ref2, table)));
83
85
  }
@@ -10,12 +10,18 @@ export function addHoursToTime(time, hoursToAdd) {
10
10
  export function addMinutesToTime(time, minutesToAdd) {
11
11
  var hours = time[0],
12
12
  minutes = time[1];
13
- var totalTimeInMinutes = hours * 60 + minutes;
14
- var totalMinutesInDay = 24 * 60;
15
- var newTime = parseInt(totalTimeInMinutes) + parseInt(minutesToAdd);
16
- var newHours = newTime > totalMinutesInDay ? Math.floor(newTime / 60) - 24 : Math.floor(newTime / 60);
17
- var newMinutes = newTime % 60;
18
- return [newHours, newMinutes];
13
+ var nextMinutes = minutes + minutesToAdd;
14
+ var remainderMinutes = modulo(nextMinutes, MINUTES_IN_HOUR);
15
+
16
+ if (remainderMinutes >= 0) {
17
+ var nextHours = hours + Math.floor(nextMinutes / MINUTES_IN_HOUR);
18
+ hours = modulo(nextHours, HOURS_IN_DAY);
19
+ minutes = remainderMinutes;
20
+ } else {
21
+ minutes = nextMinutes;
22
+ }
23
+
24
+ return [hours, minutes];
19
25
  }
20
26
  export function addTimeToDate(date, time) {
21
27
  var hours = time[0],
@@ -0,0 +1,80 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ import React from 'react';
4
+ import { Box } from '../Box';
5
+ import Button from '../Button';
6
+ import { colors } from '../system/colors';
7
+ import { StackView } from '../StackView';
8
+ import Text from '../Text';
9
+ import { useThemeProps } from '../system';
10
+ export function ToggleSwitch(props) {
11
+ var _props$disabled = props.disabled,
12
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
13
+ isActive = props.isActive,
14
+ label = props.label,
15
+ onClick = props.onClick,
16
+ _props$size = props.size,
17
+ size = _props$size === void 0 ? 'md' : _props$size,
18
+ tooltip = props.tooltip,
19
+ restProps = _objectWithoutPropertiesLoose(props, ["disabled", "isActive", "label", "onClick", "size", "tooltip"]);
20
+
21
+ var _useThemeProps = useThemeProps('toggleSwitch', restProps),
22
+ backgroundColor = _useThemeProps.backgroundColor;
23
+
24
+ var toggleButtonProps = {
25
+ height: 2.5,
26
+ width: 4.375
27
+ };
28
+ var toggleNotchProps = {
29
+ height: 2,
30
+ width: 2
31
+ };
32
+
33
+ if (size === 'sm') {
34
+ toggleButtonProps = {
35
+ height: 2.25,
36
+ width: 4
37
+ };
38
+ toggleNotchProps = {
39
+ height: 1.75,
40
+ width: 1.75
41
+ };
42
+ } else if (size === 'xs') {
43
+ toggleButtonProps = {
44
+ height: 2,
45
+ width: 3.5
46
+ };
47
+ toggleNotchProps = {
48
+ height: 1.5,
49
+ width: 1.5
50
+ };
51
+ }
52
+
53
+ return /*#__PURE__*/React.createElement(StackView, {
54
+ alignment: "center",
55
+ axis: "horizontal",
56
+ spacing: size === 'xs' ? 0.5 : size === 'sm' ? 0.75 : 1
57
+ }, /*#__PURE__*/React.createElement(Button, _extends({
58
+ as: "button",
59
+ backgroundColor: disabled ? colors.grays.light.neutral81 : isActive ? backgroundColor : colors.grays.light.neutral62,
60
+ onClick: onClick,
61
+ opacity: 1,
62
+ position: "relative",
63
+ radius: "pill",
64
+ theme: false,
65
+ disabled: disabled,
66
+ tooltip: tooltip
67
+ }, toggleButtonProps, restProps), /*#__PURE__*/React.createElement(Box, _extends({
68
+ background: "#fff",
69
+ left: 0.25,
70
+ pointerEvents: "none",
71
+ position: "absolute",
72
+ radius: "circle",
73
+ top: 0.25,
74
+ transform: "translateX(" + (isActive ? 'calc(100% - 1px)' : '0%') + ")",
75
+ transition: "120ms"
76
+ }, toggleNotchProps))), label && /*#__PURE__*/React.createElement(Text, {
77
+ size: size === 'xs' ? 5 : size === 'sm' ? 4 : 3
78
+ }, label));
79
+ }
80
+ export default ToggleSwitch;