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

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 (54) hide show
  1. package/dist/cjs/Button/Button.js +19 -4
  2. package/dist/cjs/FilterLayout/FilterLayout.js +5 -3
  3. package/dist/cjs/TimeField/TimeField.js +23 -23
  4. package/dist/cjs/TimeField/utils.js +12 -6
  5. package/dist/cjs/ToggleSwitch/ToggleSwitch.js +99 -0
  6. package/dist/cjs/ToggleSwitch/ToggleSwitch.test.js +126 -0
  7. package/dist/cjs/ToggleSwitch/index.js +15 -0
  8. package/dist/cjs/index.d.js +13 -1
  9. package/dist/cjs/index.js +5 -1
  10. package/dist/cjs/system/colors/colors.js +17 -0
  11. package/dist/cjs/system/default-theme.js +3 -0
  12. package/dist/cjs/system/plugins/color.js +3 -1
  13. package/dist/cjs/system/style-names.js +1 -1
  14. package/dist/cjs/utils.js +0 -9
  15. package/dist/esm/Button/Button.js +19 -4
  16. package/dist/esm/FilterLayout/FilterLayout.js +5 -3
  17. package/dist/esm/TimeField/TimeField.js +23 -23
  18. package/dist/esm/TimeField/utils.js +12 -6
  19. package/dist/esm/ToggleSwitch/ToggleSwitch.js +80 -0
  20. package/dist/esm/ToggleSwitch/ToggleSwitch.test.js +114 -0
  21. package/dist/esm/ToggleSwitch/index.js +2 -0
  22. package/dist/esm/index.d.js +2 -0
  23. package/dist/esm/index.js +1 -0
  24. package/dist/esm/system/colors/colors.js +18 -1
  25. package/dist/esm/system/default-theme.js +3 -0
  26. package/dist/esm/system/plugins/color.js +3 -1
  27. package/dist/esm/system/style-names.js +1 -1
  28. package/dist/esm/utils.js +1 -9
  29. package/dist/types/Button/Button.d.ts +5 -1
  30. package/dist/types/ToggleSwitch/ToggleSwitch.d.ts +22 -0
  31. package/dist/types/ToggleSwitch/ToggleSwitch.test.d.ts +1 -0
  32. package/dist/types/ToggleSwitch/index.d.ts +2 -0
  33. package/dist/types/index.d.ts +5 -0
  34. package/dist/types/system/style-names.d.ts +2 -2
  35. package/package.json +1 -1
  36. package/src/Button/Button.tsx +25 -3
  37. package/src/FilterLayout/FilterLayout.tsx +9 -6
  38. package/src/TimeField/TimeField.mdx +1 -1
  39. package/src/TimeField/TimeField.tsx +22 -22
  40. package/src/TimeField/utils.js +11 -13
  41. package/src/ToggleSwitch/ToggleSwitch.mdx +56 -0
  42. package/src/ToggleSwitch/ToggleSwitch.test.tsx +115 -0
  43. package/src/ToggleSwitch/ToggleSwitch.tsx +104 -0
  44. package/src/ToggleSwitch/index.ts +2 -0
  45. package/src/index.d.ts +5 -0
  46. package/src/index.js +1 -0
  47. package/src/system/colors/colors.js +20 -1
  48. package/src/system/default-theme.ts +3 -0
  49. package/src/system/plugins/color.js +3 -0
  50. package/src/system/style-names.ts +1 -0
  51. package/src/utils.js +0 -8
  52. package/dist/cjs/TimeField/legacy_TimeField.js +0 -274
  53. package/dist/esm/TimeField/legacy_TimeField.js +0 -271
  54. package/src/TimeField/legacy_TimeField.js +0 -278
@@ -178,7 +178,18 @@ function Button(_ref) {
178
178
  }
179
179
 
180
180
  if (disabled) {
181
- buttonProps.opacity = 0.65;
181
+ var themeData = buttonThemes[theme];
182
+
183
+ if (themeData) {
184
+ var variantData = themeData[variant];
185
+
186
+ if (variantData && variantData.disabled) {
187
+ buttonProps = _objectSpread(_objectSpread({}, buttonProps), variantData.disabled);
188
+ } else {
189
+ buttonProps.opacity = 0.65;
190
+ }
191
+ }
192
+
182
193
  buttonProps['aria-disabled'] = true;
183
194
  buttonProps.cursor = 'not-allowed';
184
195
 
@@ -198,9 +209,9 @@ function Button(_ref) {
198
209
  buttonProps.hover = undefined;
199
210
  buttonProps.active = undefined;
200
211
  } else {
201
- buttonProps.focus = _objectSpread(_objectSpread({}, buttonProps.focus), {}, {
212
+ buttonProps.focus = _objectSpread({
202
213
  zIndex: 5
203
- });
214
+ }, buttonProps.focus);
204
215
  buttonProps.cursor = 'pointer';
205
216
  buttonProps.touchAction = 'manipulation';
206
217
  buttonProps.onClick = onClick;
@@ -280,7 +291,11 @@ function Button(_ref) {
280
291
  }
281
292
  }
282
293
 
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"])({
294
+ return /*#__PURE__*/React.createElement(_Tooltip["default"], tooltip, /*#__PURE__*/React.createElement(_StackView.StackView, (0, _extends2["default"])({}, buttonProps, restProps, {
295
+ css: {
296
+ '&:focus-visible': _objectSpread({}, buttonProps.focusVisible)
297
+ }
298
+ }), iconLeft && /*#__PURE__*/React.createElement(_Icon["default"], (0, _extends2["default"])({
284
299
  size: size,
285
300
  color: buttonProps.color,
286
301
  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
  }
@@ -271,20 +271,20 @@ var TimeField = function TimeField(_ref) {
271
271
  ref: ref,
272
272
  inline: true
273
273
  }, restProps), /*#__PURE__*/_react["default"].createElement(_NumberField["default"], {
274
+ "aria-label": "Hours",
274
275
  autoWidth: false,
275
276
  fontVariantNumeric: "tabular-nums",
276
- moveFocusOnMax: true,
277
- value: hoursDisplay,
278
- min: 0,
279
- max: twelveHourClock ? 12 : 23,
280
- pad: 2,
281
277
  grow: 0,
282
- width: "2ch",
283
- textAlign: "center",
284
- "aria-label": "Hours",
278
+ max: twelveHourClock ? 12 : 23,
279
+ min: 0,
280
+ moveFocusOnMax: true,
281
+ onBlur: handleHoursBlur,
285
282
  onChange: handleHoursChange,
286
283
  onKeyDown: handleHoursKeyDown,
287
- onBlur: handleHoursBlur,
284
+ pad: 2,
285
+ textAlign: "center",
286
+ value: hoursDisplay,
287
+ width: "2ch",
288
288
  ignoredKeys: ignoredKeys
289
289
  }), /*#__PURE__*/_react["default"].createElement(_Box["default"], {
290
290
  as: "span",
@@ -292,31 +292,31 @@ var TimeField = function TimeField(_ref) {
292
292
  textAlign: "center",
293
293
  userSelect: "none"
294
294
  }, ":"), /*#__PURE__*/_react["default"].createElement(_NumberField["default"], {
295
+ "aria-label": "Minutes",
295
296
  autoWidth: false,
296
297
  fontVariantNumeric: "tabular-nums",
297
- moveFocusOnMax: true,
298
- value: minutes,
299
- min: 0,
300
- max: 59,
301
- pad: 2,
302
298
  grow: 0,
303
- width: "2ch",
304
- textAlign: "center",
305
- "aria-label": "Minutes",
299
+ max: 59,
300
+ min: 0,
301
+ moveFocusOnMax: true,
306
302
  onChange: function onChange(e) {
307
303
  return setMinutes(e);
308
304
  },
309
305
  onKeyDown: handleMinutesKeyDown,
306
+ pad: 2,
307
+ textAlign: "center",
308
+ value: minutes,
309
+ width: "2ch",
310
310
  ignoredKeys: ignoredKeys
311
311
  }), twelveHourClock && /*#__PURE__*/_react["default"].createElement(_InputField["default"], {
312
- highlightOnInteraction: true,
313
- value: meridiem,
314
- grow: 0,
315
- width: "2em",
316
- textAlign: "center",
317
312
  "aria-label": "AM/PM",
313
+ grow: 0,
314
+ highlightOnInteraction: true,
318
315
  onChange: _utils.noop,
319
- onKeyDown: handleAMPMKeyDown
316
+ onKeyDown: handleAMPMKeyDown,
317
+ textAlign: "center",
318
+ value: meridiem,
319
+ width: "2em"
320
320
  }));
321
321
  };
322
322
 
@@ -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
+ isChecked = props.isChecked,
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", "isChecked", "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 : isChecked ? 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), /*#__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(" + (isChecked ? '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,126 @@
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
+ var base = 8;
14
+ describe('ToggleSwitch component', function () {
15
+ it('should render with default properties', function () {
16
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
17
+ isChecked: false,
18
+ label: "Toggle me",
19
+ onClick: function onClick() {}
20
+ })),
21
+ getByRole = _render.getByRole;
22
+
23
+ var toggleButton = getByRole('button');
24
+ expect(toggleButton).toBeInTheDocument();
25
+ });
26
+ it('should call onClick when clicked', function () {
27
+ var mockOnClick = jest.fn();
28
+
29
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
30
+ isChecked: false,
31
+ label: "Toggle me",
32
+ onClick: mockOnClick
33
+ })),
34
+ getByRole = _render2.getByRole;
35
+
36
+ var toggleButton = getByRole('button');
37
+
38
+ _react2.fireEvent.click(toggleButton);
39
+
40
+ expect(mockOnClick).toHaveBeenCalled();
41
+ });
42
+ it('should display the label', function () {
43
+ var label = 'Toggle me';
44
+
45
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
46
+ isChecked: false,
47
+ label: label,
48
+ onClick: function onClick() {}
49
+ })),
50
+ getByText = _render3.getByText;
51
+
52
+ expect(getByText(label)).toBeInTheDocument();
53
+ });
54
+ it('should apply active color when isChecked is true', function () {
55
+ var activeColor = 'green';
56
+
57
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
58
+ backgroundColor: activeColor,
59
+ isChecked: true,
60
+ label: "Toggle me",
61
+ onClick: function onClick() {}
62
+ })),
63
+ getByRole = _render4.getByRole;
64
+
65
+ var toggleButton = getByRole('button');
66
+ expect(toggleButton).toHaveStyle("background-color: " + activeColor);
67
+ });
68
+ it('should not be clickable when disabled', function () {
69
+ var mockOnClick = jest.fn();
70
+
71
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
72
+ disabled: true,
73
+ isChecked: false,
74
+ label: "Toggle me",
75
+ onClick: mockOnClick
76
+ })),
77
+ getByRole = _render5.getByRole;
78
+
79
+ var toggleButton = getByRole('button');
80
+
81
+ _react2.fireEvent.click(toggleButton);
82
+
83
+ expect(mockOnClick).not.toHaveBeenCalled();
84
+ });
85
+ describe('it should apply the correct size', function () {
86
+ it("should apply the correct size for xs", function () {
87
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
88
+ isChecked: false,
89
+ label: "Toggle me",
90
+ onClick: function onClick() {},
91
+ size: "xs"
92
+ })),
93
+ getByRole = _render6.getByRole;
94
+
95
+ var toggleButton = getByRole('button');
96
+ expect(toggleButton).toHaveStyle("height: " + base * 2 + "px");
97
+ expect(toggleButton).toHaveStyle("width: " + base * 3.5 + "px");
98
+ });
99
+ it("should apply the correct size for sm", function () {
100
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
101
+ isChecked: false,
102
+ label: "Toggle me",
103
+ onClick: function onClick() {},
104
+ size: "sm"
105
+ })),
106
+ getByRole = _render7.getByRole;
107
+
108
+ var toggleButton = getByRole('button');
109
+ expect(toggleButton).toHaveStyle("height: " + base * 2.25 + "px");
110
+ expect(toggleButton).toHaveStyle("width: " + base * 4 + "px");
111
+ });
112
+ it("should apply the correct default size (md)", function () {
113
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleSwitch["default"], {
114
+ isChecked: false,
115
+ label: "Toggle me",
116
+ onClick: function onClick() {},
117
+ size: "md"
118
+ })),
119
+ getByRole = _render8.getByRole;
120
+
121
+ var toggleButton = getByRole('button');
122
+ expect(toggleButton).toHaveStyle("height: " + base * 2.5 + "px");
123
+ expect(toggleButton).toHaveStyle("width: " + base * 4.375 + "px");
124
+ });
125
+ });
126
+ });
@@ -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,18 @@ export function Button(_ref) {
171
171
  }
172
172
 
173
173
  if (disabled) {
174
- buttonProps.opacity = 0.65;
174
+ var themeData = buttonThemes[theme];
175
+
176
+ if (themeData) {
177
+ var variantData = themeData[variant];
178
+
179
+ if (variantData && variantData.disabled) {
180
+ buttonProps = _objectSpread(_objectSpread({}, buttonProps), variantData.disabled);
181
+ } else {
182
+ buttonProps.opacity = 0.65;
183
+ }
184
+ }
185
+
175
186
  buttonProps['aria-disabled'] = true;
176
187
  buttonProps.cursor = 'not-allowed';
177
188
 
@@ -191,9 +202,9 @@ export function Button(_ref) {
191
202
  buttonProps.hover = undefined;
192
203
  buttonProps.active = undefined;
193
204
  } else {
194
- buttonProps.focus = _objectSpread(_objectSpread({}, buttonProps.focus), {}, {
205
+ buttonProps.focus = _objectSpread({
195
206
  zIndex: 5
196
- });
207
+ }, buttonProps.focus);
197
208
  buttonProps.cursor = 'pointer';
198
209
  buttonProps.touchAction = 'manipulation';
199
210
  buttonProps.onClick = onClick;
@@ -265,7 +276,11 @@ export function Button(_ref) {
265
276
  }
266
277
  }
267
278
 
268
- return /*#__PURE__*/React.createElement(Tooltip, tooltip, /*#__PURE__*/React.createElement(StackView, _extends({}, buttonProps, restProps), iconLeft && /*#__PURE__*/React.createElement(Icon, _extends({
279
+ return /*#__PURE__*/React.createElement(Tooltip, tooltip, /*#__PURE__*/React.createElement(StackView, _extends({}, buttonProps, restProps, {
280
+ css: {
281
+ '&:focus-visible': _objectSpread({}, buttonProps.focusVisible)
282
+ }
283
+ }), iconLeft && /*#__PURE__*/React.createElement(Icon, _extends({
269
284
  size: size,
270
285
  color: buttonProps.color,
271
286
  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
  }