@mackin.com/styleguide 8.1.1 → 8.2.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 (3) hide show
  1. package/index.d.ts +38 -30
  2. package/index.js +253 -208
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -237,7 +237,7 @@ declare const Header: (props: {
237
237
  className?: string;
238
238
  leftElements?: JSX.Element;
239
239
  rightElements?: JSX.Element;
240
- /** Elements will appear in the center of the header and slightly below. */
240
+ /** @deprecated Elements will appear in the center of the header and slightly below. */
241
241
  centerOffsetElements?: JSX.Element;
242
242
  noMenu?: boolean;
243
243
  /** Will fill the title center aligned with wrapping. */
@@ -465,24 +465,10 @@ declare const Nav: (props: {
465
465
  __debug?: boolean | undefined;
466
466
  }) => JSX.Element;
467
467
 
468
- interface OmniLinkProps extends React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
469
- href: string;
468
+ interface OmniLinkProps extends LinkProps {
470
469
  noRouter?: boolean;
471
470
  /** Ignored if 'noRouter' is false */
472
471
  target?: string;
473
- rightIcon?: JSX.Element;
474
- leftIcon?: JSX.Element;
475
- block?: boolean;
476
- /** Full width with max space between the text and the icon */
477
- iconBlock?: boolean;
478
- /** Corresponds to the button variants of the same name. */
479
- variant?: 'button' | 'label' | 'icon' | 'circle' | 'primary' | 'secondary' | 'omg' | 'primary2' | 'positive' | 'negative';
480
- /** Only for button variants. */
481
- round?: boolean;
482
- /** Only for button variants. */
483
- small?: boolean;
484
- /** Overrides the `theme.colors.link` for non-button variants or `theme.colors.font` for the `button` variant. Does not apply to themed button variants like `primary`. */
485
- colorOverride?: string;
486
472
  }
487
473
  declare const OmniLink: (props: OmniLinkProps) => JSX.Element;
488
474
 
@@ -798,6 +784,7 @@ interface MackinTheme {
798
784
  dividerBorder: string;
799
785
  dividerThickness: string;
800
786
  headerBoxShadow: string;
787
+ buttonBoxShadow: string;
801
788
  inputErrorMinHeight: string;
802
789
  paragraphPadding: string;
803
790
  };
@@ -967,24 +954,23 @@ interface TextAreaProps extends Omit<React.DetailedHTMLProps<React.TextareaHTMLA
967
954
  declare const TextArea: React.ForwardRefExoticComponent<Pick<TextAreaProps, "value" | "key" | "autoComplete" | "autoFocus" | "cols" | "dirName" | "disabled" | "form" | "maxLength" | "minLength" | "name" | "placeholder" | "readOnly" | "required" | "rows" | "wrap" | "onChange" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "noTrim" | "customError" | "reportValueOnError" | "onValueChange"> & React.RefAttributes<HTMLTextAreaElement>>;
968
955
 
969
956
  declare type ToggleButtonVariant = 'primary' | 'secondary' | 'omg' | 'primary2' | 'positive' | 'negative';
970
- interface ToggleButtonProps {
957
+ declare type PartialButtonProps = Omit<ButtonProps, 'variant' | 'rightIcon' | 'leftIcon' | 'children'>;
958
+ interface ToggleButtonProps extends PartialButtonProps {
971
959
  checked: boolean;
972
- checkedText: string;
973
- uncheckedText: string;
974
- onClick: (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
975
- className?: string;
976
- checkedClassName?: string;
977
- disabled?: boolean;
978
- /** The minimum button size will be set to the themes' formButtonMinWidth. */
979
- enforceMinWidth?: boolean;
980
- checkedIcon?: JSX.Element;
981
- uncheckedIcon?: JSX.Element;
960
+ /** @deprecated Use 'checkedChildren' */
961
+ checkedText?: string;
962
+ /** @deprecated Use 'uncheckedChildren' */
963
+ uncheckedText?: string;
964
+ checkedChildren?: React.ReactNode;
965
+ uncheckedChildren?: React.ReactNode;
982
966
  variant?: ToggleButtonVariant;
983
967
  checkedVariant?: ToggleButtonVariant;
984
- style?: React.CSSProperties;
968
+ checkedClassName?: string;
985
969
  checkedStyle?: React.CSSProperties;
970
+ checkedIcon?: JSX.Element;
971
+ uncheckedIcon?: JSX.Element;
986
972
  }
987
- declare const ToggleButton: (props: ToggleButtonProps) => JSX.Element;
973
+ declare const ToggleButton: React.ForwardRefExoticComponent<Pick<ToggleButtonProps, "variant" | "round" | "iconBlock" | "small" | "readOnly" | "waiting" | "enforceMinWidth" | "controlAlign" | "key" | "autoFocus" | "disabled" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "type" | "value" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "checked" | "checkedText" | "uncheckedText" | "checkedChildren" | "uncheckedChildren" | "checkedVariant" | "checkedClassName" | "checkedStyle" | "checkedIcon" | "uncheckedIcon"> & React.RefAttributes<HTMLButtonElement>>;
988
974
 
989
975
  interface ToggleButtonGroupProps {
990
976
  value: string | number;
@@ -1041,4 +1027,26 @@ declare const enumToEntities: <T extends {
1041
1027
  name: string;
1042
1028
  }[];
1043
1029
 
1044
- export { Accordian, AccordianProps, Alignment, Autocomplete, AutocompleteProps, AutocompleteValue, Backdrop$1 as Backdrop, Backdrop as Backdrop2, BoundMemoryPager, BoundStaticPager, Button, ButtonProps, Calendar, CalendarProps, Checkbox, CheckboxProps, ConfirmModal, ConfirmModalProps, CopyButton, DateInput, DateInputProps, Divider, ErrorModal, FileUploader, Form, FormColumnRow, FormFlexRow, FormProps, GlobalStyles, Header, Highlight, ICONS, Icon, Image, ImageProps, InfoPanel, InfoTip, InfoTipProps, Input, InputProps, ItemPager, Label, LabelProps, List, ListItem, ListItemProps, ListProps, MackinTheme, Modal, Nav, NormalizeCss, NumberInput, NumberInputProps, OmniLink, OmniLinkProps, PagedResult, Pager, PagerProps, Picker, PickerOption, PickerProps, PickerValue, Popover, ProgressBar, ProgressBarProps, SearchBox, SearchBoxProps, Slider, TabHeader, TabHeaderProps, TabLocker, Table, Td, TdCurrency, TdNumber, Text, TextArea, TextAreaProps, TextInput, TextInputProps, TextProps, Th, ThSort, ThemeProvider, ToggleButton, ToggleButtonGroup, ToggleButtonGroupProps, ToggleButtonProps, TogglePasswordInput, Tr, WaitingIndicator, calcDynamicThemeProps, defaultTheme, enumToEntities, getCurrencyDisplay, getFileSizeDisplay, useAccordianState, useBooleanChanged, useIgnoreMount, useMediaQuery, useScrollbarSize, useThemeSafely, useWaiting };
1030
+ interface LinkContentProps {
1031
+ rightIcon?: JSX.Element;
1032
+ leftIcon?: JSX.Element;
1033
+ children?: ReactNode;
1034
+ }
1035
+
1036
+ interface LinkProps extends LinkContentProps, React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
1037
+ href: string;
1038
+ block?: boolean;
1039
+ /** Full width with max space between the text and the icon */
1040
+ iconBlock?: boolean;
1041
+ /** Corresponds to the button variants of the same name. */
1042
+ variant?: 'button' | 'label' | 'icon' | 'circle' | 'primary' | 'secondary' | 'omg' | 'primary2' | 'positive' | 'negative';
1043
+ /** Only for button variants. */
1044
+ round?: boolean;
1045
+ /** Only for button variants. */
1046
+ small?: boolean;
1047
+ /** Overrides the `theme.colors.link` for non-button variants or `theme.colors.font` for the `button` variant. Does not apply to themed button variants like `primary`. */
1048
+ colorOverride?: string;
1049
+ }
1050
+ declare const Link: (props: LinkProps) => JSX.Element;
1051
+
1052
+ export { Accordian, AccordianProps, Alignment, Autocomplete, AutocompleteProps, AutocompleteValue, Backdrop$1 as Backdrop, Backdrop as Backdrop2, BoundMemoryPager, BoundStaticPager, Button, ButtonProps, Calendar, CalendarProps, Checkbox, CheckboxProps, ConfirmModal, ConfirmModalProps, CopyButton, DateInput, DateInputProps, Divider, ErrorModal, FileUploader, Form, FormColumnRow, FormFlexRow, FormProps, GlobalStyles, Header, Highlight, ICONS, Icon, Image, ImageProps, InfoPanel, InfoTip, InfoTipProps, Input, InputProps, ItemPager, Label, LabelProps, Link, LinkProps, List, ListItem, ListItemProps, ListProps, MackinTheme, Modal, Nav, NormalizeCss, NumberInput, NumberInputProps, OmniLink, OmniLinkProps, PagedResult, Pager, PagerProps, Picker, PickerOption, PickerProps, PickerValue, Popover, ProgressBar, ProgressBarProps, SearchBox, SearchBoxProps, Slider, TabHeader, TabHeaderProps, TabLocker, Table, Td, TdCurrency, TdNumber, Text, TextArea, TextAreaProps, TextInput, TextInputProps, TextProps, Th, ThSort, ThemeProvider, ToggleButton, ToggleButtonGroup, ToggleButtonGroupProps, ToggleButtonProps, TogglePasswordInput, Tr, WaitingIndicator, calcDynamicThemeProps, defaultTheme, enumToEntities, getCurrencyDisplay, getFileSizeDisplay, useAccordianState, useBooleanChanged, useIgnoreMount, useMediaQuery, useScrollbarSize, useThemeSafely, useWaiting };
package/index.js CHANGED
@@ -118,6 +118,7 @@ const calcDynamicThemeProps = (theme) => {
118
118
  theme.controls.focusOutlineRequiredShadow = `0px 0px 4px 2px ${theme.colors.focusOutlineRequired}`;
119
119
  theme.controls.dividerBorder = `${theme.controls.dividerThickness} solid ${theme.colors.divider}`;
120
120
  theme.controls.inputErrorMinHeight = `calc(${theme.fonts.sizeSmall} * 1.5 + 4px)`;
121
+ theme.controls.buttonBoxShadow = theme.controls.boxShadow;
121
122
  theme.mediaQueries.desktop = `@media(min-width:${theme.breakpoints.desktop})`;
122
123
  theme.mediaQueries.tablet = `@media(min-width:${theme.breakpoints.tablet})`;
123
124
  };
@@ -194,6 +195,7 @@ const defaultTheme = {
194
195
  dividerBorder: '',
195
196
  dividerThickness: '2px',
196
197
  headerBoxShadow: '0px 2px 12px 6px rgba(0, 0, 0, 0.2)',
198
+ buttonBoxShadow: '',
197
199
  inputErrorMinHeight: '',
198
200
  paragraphPadding: '1rem'
199
201
  },
@@ -216,7 +218,7 @@ const defaultTheme = {
216
218
  },
217
219
  mediaQueries: {
218
220
  desktop: '',
219
- tablet: ''
221
+ tablet: '' // set in calcDynamicThemeProps
220
222
  }
221
223
  };
222
224
  calcDynamicThemeProps(defaultTheme);
@@ -248,7 +250,7 @@ const Button = React__namespace.forwardRef((props, ref) => {
248
250
  border: ${theme.controls.border};
249
251
  border-radius: ${theme.controls.borderRadius};
250
252
  cursor: pointer;
251
- box-shadow: ${theme.controls.boxShadow};
253
+ box-shadow: ${theme.controls.buttonBoxShadow};
252
254
  color: ${theme.colors.font};
253
255
  height: ${theme.controls.height};
254
256
  transition: ${theme.controls.transition};
@@ -2031,7 +2033,7 @@ const Header = (props) => {
2031
2033
  background-color:transparent;
2032
2034
  }
2033
2035
  ${props.inline && `
2034
- position: static;
2036
+ position: relative;
2035
2037
  `}
2036
2038
  ${!!props.rightElements && `
2037
2039
  justify-content: space-between;
@@ -2068,7 +2070,7 @@ const Header = (props) => {
2068
2070
  justify-content: center;
2069
2071
  left: 0;
2070
2072
  right: 0;
2071
- margin-top: calc(${theme.layout.headerHeight} * 1.25);
2073
+ bottom: calc(${theme.layout.headerHeight} / 2 * -1);
2072
2074
  `;
2073
2075
  let title;
2074
2076
  if (props.title) {
@@ -2268,7 +2270,13 @@ const BaseInput = React__namespace.forwardRef((props, ref) => {
2268
2270
  boxShadow: 'none'
2269
2271
  },
2270
2272
  // FF fix to hide spinner on number elements
2271
- appearance: props.type === 'number' ? 'textfield' : undefined
2273
+ appearance: props.type === 'number' ? 'none' : undefined,
2274
+ '::-webkit-outer-spin-button': {
2275
+ appearance: 'none'
2276
+ },
2277
+ '::-webkit-inner-spin-button': {
2278
+ appearance: 'none'
2279
+ }
2272
2280
  }, props.rightControl && {
2273
2281
  paddingRight: theme.controls.height
2274
2282
  });
@@ -2917,183 +2925,194 @@ const Nav = (props) => {
2917
2925
  return (React__namespace.createElement("nav", { ref: nav, className: css.cx('nav', navStyles, props.className) }, props.children));
2918
2926
  };
2919
2927
 
2920
- const OmniLink = (props) => {
2928
+ const LinkContent = (props) => {
2929
+ return (React__namespace.createElement(React__namespace.Fragment, null,
2930
+ React__namespace.createElement("span", null,
2931
+ props.leftIcon && React__namespace.createElement("span", { className: css.css({
2932
+ label: 'LinkLeftIcon',
2933
+ marginRight: '1rem',
2934
+ display: 'inline-block',
2935
+ minWidth: '1.5rem',
2936
+ verticalAlign: 'middle'
2937
+ }) }, props.leftIcon),
2938
+ props.children),
2939
+ props.rightIcon && React__namespace.createElement("span", { className: css.css({
2940
+ label: 'LinkRightIcon',
2941
+ marginLeft: '1rem',
2942
+ verticalAlign: 'middle'
2943
+ }) }, props.rightIcon)));
2944
+ };
2945
+
2946
+ const generateLinkStyles = (props, theme) => {
2921
2947
  var _a, _b, _c, _d, _e;
2922
- const linkProps = __rest(props, ["noRouter", "rightIcon", "leftIcon", "block", "iconBlock", "variant", "round", "small", "colorOverride", "children", "ref"]);
2923
- const theme = useThemeSafely();
2924
2948
  const linkStyles = css.css `
2925
- label: OmniLink;
2926
- display: inline-block;
2927
- cursor: pointer;
2928
- text-decoration: none;
2929
- color: ${(_a = props.colorOverride) !== null && _a !== void 0 ? _a : theme.colors.link};
2930
- transition: ${theme.controls.transition};
2931
- &:hover {
2932
- filter: ${theme.controls.hoverBrightness};
2933
- text-decoration: underline;
2934
- }
2949
+ label: Link;
2950
+ display: inline-block;
2951
+ cursor: pointer;
2952
+ text-decoration: none;
2953
+ color: ${(_a = props.colorOverride) !== null && _a !== void 0 ? _a : theme.colors.link};
2954
+ transition: ${theme.controls.transition};
2955
+ &:hover {
2956
+ filter: ${theme.controls.hoverBrightness};
2957
+ text-decoration: underline;
2958
+ }
2959
+ &:active,
2960
+ &:visited {
2961
+ color: ${(_b = props.colorOverride) !== null && _b !== void 0 ? _b : theme.colors.link};
2962
+ }
2963
+ &:focus {
2964
+ text-decoration: underline;
2965
+ outline: none;
2966
+ color: ${(_c = props.colorOverride) !== null && _c !== void 0 ? _c : theme.colors.link};
2967
+ }
2968
+ ${!!props.variant && `
2969
+ padding-left: ${theme.controls.padding};
2970
+ padding-right: ${theme.controls.padding};
2971
+ border: ${theme.controls.border};
2972
+ border-radius: ${theme.controls.borderRadius};
2973
+ box-shadow: ${theme.controls.buttonBoxShadow};
2974
+ height: ${theme.controls.height};
2975
+ line-height: ${theme.controls.height};
2976
+ font-weight: bold;
2977
+ color: ${(_d = props.colorOverride) !== null && _d !== void 0 ? _d : theme.colors.font};
2935
2978
  &:active,
2979
+ &:focus,
2936
2980
  &:visited {
2937
- color: ${(_b = props.colorOverride) !== null && _b !== void 0 ? _b : theme.colors.link};
2981
+ color: ${(_e = props.colorOverride) !== null && _e !== void 0 ? _e : theme.colors.font};
2938
2982
  }
2939
2983
  &:focus {
2940
- text-decoration: underline;
2941
2984
  outline: none;
2942
- color: ${(_c = props.colorOverride) !== null && _c !== void 0 ? _c : theme.colors.link};
2985
+ box-shadow: ${theme.controls.focusOutlineShadow};
2986
+ text-decoration: none;
2943
2987
  }
2944
- ${!!props.variant && `
2945
- padding-left: ${theme.controls.padding};
2946
- padding-right: ${theme.controls.padding};
2947
- border: ${theme.controls.border};
2948
- border-radius: ${theme.controls.borderRadius};
2949
- box-shadow: ${theme.controls.boxShadow};
2950
- height: ${theme.controls.height};
2951
- line-height: ${theme.controls.height};
2952
- font-weight: bold;
2953
- color: ${(_d = props.colorOverride) !== null && _d !== void 0 ? _d : theme.colors.font};
2954
- &:active,
2955
- &:focus,
2956
- &:visited {
2957
- color: ${(_e = props.colorOverride) !== null && _e !== void 0 ? _e : theme.colors.font};
2958
- }
2959
- &:focus {
2960
- outline: none;
2961
- box-shadow: ${theme.controls.focusOutlineShadow};
2962
- text-decoration: none;
2963
- }
2964
- &:active {
2965
- box-shadow: none;
2966
- }
2967
- &:hover {
2968
- text-decoration: none;
2969
- }
2970
- `}
2971
- ${props.variant === 'button' && `
2972
- text-align: center;
2973
- `}
2974
- ${props.variant === 'circle' && `
2975
- text-align: center;
2976
- width: ${theme.controls.height};
2977
- border-radius: 100%;
2978
- display: flex;
2979
- justify-content: center;
2980
- align-items: center;
2981
- ${props.small && `
2982
- width: ${theme.controls.heightSmall};
2983
- min-width: ${theme.controls.heightSmall};
2984
- `}
2988
+ &:active {
2989
+ box-shadow: none;
2990
+ }
2991
+ &:hover {
2992
+ text-decoration: none;
2993
+ }
2994
+ `}
2995
+ ${props.variant === 'button' && `
2996
+ text-align: center;
2997
+ `}
2998
+ ${props.variant === 'circle' && `
2999
+ text-align: center;
3000
+ width: ${theme.controls.height};
3001
+ border-radius: 100%;
3002
+ display: flex;
3003
+ justify-content: center;
3004
+ align-items: center;
3005
+ ${props.small && `
3006
+ width: ${theme.controls.heightSmall};
3007
+ min-width: ${theme.controls.heightSmall};
2985
3008
  `}
2986
- ${props.variant === 'primary' && `
2987
- text-align: center;
2988
- background-color: ${theme.colors.primary};
3009
+ `}
3010
+ ${props.variant === 'primary' && `
3011
+ text-align: center;
3012
+ background-color: ${theme.colors.primary};
3013
+ color: ${theme.colors.primaryFont};
3014
+ &:active,
3015
+ &:focus,
3016
+ &:visited {
2989
3017
  color: ${theme.colors.primaryFont};
2990
- &:active,
2991
- &:focus,
2992
- &:visited {
2993
- color: ${theme.colors.primaryFont};
2994
- }
2995
- `}
2996
- ${props.variant === 'primary2' && `
2997
- text-align: center;
2998
- background-color: ${theme.colors.primary2};
3018
+ }
3019
+ `}
3020
+ ${props.variant === 'primary2' && `
3021
+ text-align: center;
3022
+ background-color: ${theme.colors.primary2};
3023
+ color: ${theme.colors.primary2Font};
3024
+ &:active,
3025
+ &:focus,
3026
+ &:visited {
2999
3027
  color: ${theme.colors.primary2Font};
3000
- &:active,
3001
- &:focus,
3002
- &:visited {
3003
- color: ${theme.colors.primary2Font};
3004
- }
3005
- `}
3006
- ${props.variant === 'secondary' && `
3007
- text-align: center;
3008
- background-color: ${theme.colors.secondary};
3028
+ }
3029
+ `}
3030
+ ${props.variant === 'secondary' && `
3031
+ text-align: center;
3032
+ background-color: ${theme.colors.secondary};
3033
+ color: ${theme.colors.secondary2Font};
3034
+ &:active,
3035
+ &:focus,
3036
+ &:visited {
3009
3037
  color: ${theme.colors.secondary2Font};
3010
- &:active,
3011
- &:focus,
3012
- &:visited {
3013
- color: ${theme.colors.secondary2Font};
3014
- }
3015
- `}
3016
- ${props.variant === 'positive' && `
3017
- text-align: center;
3018
- background-color: ${theme.colors.positive};
3038
+ }
3039
+ `}
3040
+ ${props.variant === 'positive' && `
3041
+ text-align: center;
3042
+ background-color: ${theme.colors.positive};
3043
+ color: ${theme.colors.positiveFont};
3044
+ &:active,
3045
+ &:focus,
3046
+ &:visited {
3019
3047
  color: ${theme.colors.positiveFont};
3020
- &:active,
3021
- &:focus,
3022
- &:visited {
3023
- color: ${theme.colors.positiveFont};
3024
- }
3025
- `}
3026
- ${props.variant === 'negative' && `
3027
- text-align: center;
3028
- background-color: ${theme.colors.negative};
3048
+ }
3049
+ `}
3050
+ ${props.variant === 'negative' && `
3051
+ text-align: center;
3052
+ background-color: ${theme.colors.negative};
3053
+ color: ${theme.colors.negativeFont};
3054
+ &:active,
3055
+ &:focus,
3056
+ &:visited {
3029
3057
  color: ${theme.colors.negativeFont};
3030
- &:active,
3031
- &:focus,
3032
- &:visited {
3033
- color: ${theme.colors.negativeFont};
3034
- }
3035
- `}
3036
- ${props.variant === 'omg' && `
3037
- text-align: center;
3038
- background-color: ${theme.colors.omg};
3058
+ }
3059
+ `}
3060
+ ${props.variant === 'omg' && `
3061
+ text-align: center;
3062
+ background-color: ${theme.colors.omg};
3063
+ color: ${theme.colors.omgFont};
3064
+ &:active,
3065
+ &:focus,
3066
+ &:visited {
3039
3067
  color: ${theme.colors.omgFont};
3040
- &:active,
3041
- &:focus,
3042
- &:visited {
3043
- color: ${theme.colors.omgFont};
3044
- }
3045
- `}
3046
- ${props.variant === 'label' && `
3047
- box-shadow: none;
3048
- border: none;
3049
- `}
3050
- ${props.variant === 'icon' && `
3051
- box-shadow: none;
3052
- border: none;
3053
- border-radius: 100%;
3054
- width: ${theme.controls.height};
3055
- text-align: center;
3056
- `}
3057
- ${props.block && `
3058
- display: block;
3059
- width:100%;
3060
- `}
3061
- ${props.iconBlock && `
3062
- display: flex;
3063
- justify-content: space-between;
3064
- align-items: center;
3065
- `}
3066
- ${props.round && `
3067
- border-radius: ${theme.controls.roundRadius};
3068
- `}
3069
- ${props.small && `
3070
- font-size: 0.8rem;
3071
- height: ${theme.controls.heightSmall};
3072
- line-height: ${theme.controls.heightSmall};
3073
- `}
3074
- `;
3068
+ }
3069
+ `}
3070
+ ${props.variant === 'label' && `
3071
+ box-shadow: none;
3072
+ border: none;
3073
+ `}
3074
+ ${props.variant === 'icon' && `
3075
+ box-shadow: none;
3076
+ border: none;
3077
+ border-radius: 100%;
3078
+ width: ${theme.controls.height};
3079
+ text-align: center;
3080
+ `}
3081
+ ${props.block && `
3082
+ display: block;
3083
+ width:100%;
3084
+ `}
3085
+ ${props.iconBlock && `
3086
+ display: flex;
3087
+ justify-content: space-between;
3088
+ align-items: center;
3089
+ `}
3090
+ ${props.round && `
3091
+ border-radius: ${theme.controls.roundRadius};
3092
+ `}
3093
+ ${props.small && `
3094
+ font-size: 0.8rem;
3095
+ height: ${theme.controls.heightSmall};
3096
+ line-height: ${theme.controls.heightSmall};
3097
+ `}
3098
+ `;
3099
+ return linkStyles;
3100
+ };
3101
+
3102
+ const OmniLink = (props) => {
3103
+ const linkProps = __rest(props, ["noRouter", "rightIcon", "leftIcon", "block", "iconBlock", "variant", "round", "small", "colorOverride", "children", "ref"]);
3104
+ const theme = useThemeSafely();
3105
+ const linkStyles = generateLinkStyles(props, theme);
3075
3106
  const mainClassName = css.cx('omniLink', linkStyles, props.className);
3076
- const content = React__namespace.createElement(React__namespace.Fragment, null,
3077
- React__namespace.createElement("span", null,
3078
- props.leftIcon && React__namespace.createElement("span", { className: css.css({
3079
- label: 'OmniLinkLeftIcon',
3080
- marginRight: '1rem',
3081
- display: 'inline-block',
3082
- minWidth: '1.5rem',
3083
- verticalAlign: 'middle'
3084
- }) }, props.leftIcon),
3085
- props.children),
3086
- props.rightIcon && React__namespace.createElement("span", { className: css.css({
3087
- label: 'OmniLinkRightIcon',
3088
- marginLeft: '1rem',
3089
- verticalAlign: 'middle'
3090
- }) }, props.rightIcon));
3107
+ const content = React__namespace.createElement(LinkContent, Object.assign({}, props));
3091
3108
  if (props.noRouter) {
3092
3109
  return (React__namespace.createElement("a", Object.assign({}, linkProps, { target: props.target, className: mainClassName }), content));
3093
3110
  }
3094
3111
  return (React__namespace.createElement(reactRouterDom.Link, Object.assign({}, linkProps, { className: mainClassName, to: props.href }), content));
3095
3112
  };
3096
3113
 
3114
+ //TB: test in safari with the new arrow
3115
+ const roundPxPadding = '4px';
3097
3116
  const Picker = (props) => {
3098
3117
  const selectProps = __rest(props
3099
3118
  // if we put numbers in, we expect them out
@@ -3110,41 +3129,42 @@ const Picker = (props) => {
3110
3129
  }
3111
3130
  }
3112
3131
  const theme = useThemeSafely();
3113
- const selectStyles = css.css `
3114
- background-color: ${theme.colors.bg};
3115
- color: ${theme.colors.font};
3116
- padding-left: ${theme.controls.padding};
3117
- padding-right: ${theme.controls.padding};
3118
- height: ${theme.controls.height};
3119
- font-size: ${theme.controls.fontSize};
3120
- width: 100%;
3121
- border: ${theme.controls.border};
3122
- border-radius: ${theme.controls.borderRadius};
3123
- transition: ${theme.controls.transition};
3124
- &:disabled {
3125
- color: ${theme.colors.font};
3126
- opacity: 1;
3127
- background-color: ${theme.colors.disabled};
3128
- cursor: not-allowed;
3129
- }
3130
- &:focus {
3131
- outline: none;
3132
- box-shadow: ${theme.controls.focusOutlineShadow};
3133
- }
3134
- ${props.round && `
3135
- border-radius: ${theme.controls.roundRadius};
3136
- `}
3137
- ${props.readOnly && `
3138
- background-color: transparent !important;
3139
- border: none;
3140
- -webkit-appearance: none;
3141
- -moz-appearance: none;
3142
- &:focus {
3143
- outline: none;
3144
- box-shadow: none;
3145
- }
3146
- `}
3147
- `;
3132
+ const selectStyles = css.css({
3133
+ // fix the arrow so browser all look the same
3134
+ appearance: 'none',
3135
+ paddingLeft: theme.controls.padding,
3136
+ paddingRight: `calc(${theme.controls.padding} + 1rem)`,
3137
+ backgroundColor: theme.colors.bg,
3138
+ color: theme.colors.font,
3139
+ height: theme.controls.height,
3140
+ fontSize: theme.controls.fontSize,
3141
+ width: '100%',
3142
+ border: theme.controls.border,
3143
+ borderRadius: theme.controls.borderRadius || 0,
3144
+ transition: theme.controls.transition,
3145
+ '&:disabled': {
3146
+ color: theme.colors.font,
3147
+ opacity: 1,
3148
+ backgroundColor: theme.colors.disabled,
3149
+ cursor: 'not-allowed'
3150
+ },
3151
+ '&:focus': {
3152
+ outline: 'none',
3153
+ boxShadow: theme.controls.focusOutlineShadow
3154
+ }
3155
+ }, props.round && {
3156
+ borderRadius: theme.controls.roundRadius,
3157
+ paddingLeft: `calc(${theme.controls.padding} + ${roundPxPadding})`,
3158
+ paddingRight: `calc(${theme.controls.padding} + 1rem + ${roundPxPadding})`,
3159
+ }, props.readOnly && {
3160
+ backgroundColor: 'transparent !important',
3161
+ backgroundImage: 'unset',
3162
+ border: 'none',
3163
+ '&:focus': {
3164
+ outline: 'none',
3165
+ boxShadow: 'none'
3166
+ }
3167
+ });
3148
3168
  const select = (React__namespace.createElement("select", Object.assign({}, selectProps, { tabIndex: props.readOnly ? -1 : selectProps.tabIndex, className: css.cx('picker', selectStyles, props.className), value: props.value, onKeyDown: e => {
3149
3169
  var _a;
3150
3170
  if (props.readOnly) {
@@ -3192,14 +3212,20 @@ const Picker = (props) => {
3192
3212
  }
3193
3213
  return React__namespace.createElement("option", { key: val, value: val }, label);
3194
3214
  })));
3195
- if (props.controlAlign) {
3196
- return (React__namespace.createElement("span", { className: css.css({
3197
- display: 'inline-block',
3198
- width: '100%',
3199
- paddingBottom: theme.controls.inputErrorMinHeight
3200
- }) }, select));
3201
- }
3202
- return select;
3215
+ return (React__namespace.createElement("span", { className: css.css({
3216
+ label: 'PickerWrapper',
3217
+ position: 'relative',
3218
+ display: 'inline-block',
3219
+ width: '100%',
3220
+ paddingBottom: props.controlAlign ? theme.controls.inputErrorMinHeight : undefined
3221
+ }) },
3222
+ select,
3223
+ !props.readOnly && (React__namespace.createElement(Icon, { id: "sortDesc", className: css.css({
3224
+ position: 'absolute',
3225
+ right: `calc(${theme.controls.padding} + ${props.round ? roundPxPadding : '0px'})`,
3226
+ height: theme.controls.height,
3227
+ pointerEvents: 'none'
3228
+ }) }))));
3203
3229
  };
3204
3230
 
3205
3231
  const Pager = (props) => {
@@ -3777,7 +3803,7 @@ const Slider = (p) => {
3777
3803
  backgroundColor: 'white',
3778
3804
  border: theme.controls.border,
3779
3805
  cursor: 'grab',
3780
- boxShadow: theme.controls.boxShadow,
3806
+ boxShadow: theme.controls.buttonBoxShadow,
3781
3807
  transition: theme.controls.transition,
3782
3808
  '&:focus': {
3783
3809
  outline: 'none',
@@ -4108,15 +4134,24 @@ const TextArea = React__namespace.forwardRef((props, ref) => {
4108
4134
  React__namespace.createElement(InputErrorDisplay, { error: validationError })));
4109
4135
  });
4110
4136
 
4111
- const ToggleButton = (props) => {
4112
- return (React__namespace.createElement(Button, { type: "button", className: css.cx('toggleButton', props.checked && 'toggleButton--checked', props.className, props.checked && props.checkedClassName), rightIcon: props.checked ? props.checkedIcon : props.uncheckedIcon, disabled: props.disabled, enforceMinWidth: props.enforceMinWidth, variant: props.checked ? props.checkedVariant : props.variant, style: props.checked ? props.checkedStyle : props.style, onClick: props.onClick }, props.checked ? props.checkedText : props.uncheckedText));
4113
- };
4137
+ const ToggleButton = React__namespace.forwardRef((props, ref) => {
4138
+ var _a, _b;
4139
+ const buttonProps = __rest(props, ["checked", "checkedText", "uncheckedText", "checkedChildren", "uncheckedChildren", "checkedVariant", "checkedClassName", "checkedStyle", "checkedIcon", "uncheckedIcon"]);
4140
+ let children;
4141
+ if (props.checked) {
4142
+ children = (_a = props.checkedChildren) !== null && _a !== void 0 ? _a : props.checkedText;
4143
+ }
4144
+ else {
4145
+ children = (_b = props.uncheckedChildren) !== null && _b !== void 0 ? _b : props.uncheckedText;
4146
+ }
4147
+ return (React__namespace.createElement(Button, Object.assign({}, buttonProps, { ref: ref, className: css.cx('toggleButton', props.checked && 'toggleButton--checked', props.className, props.checked && props.checkedClassName), rightIcon: props.checked ? props.checkedIcon : props.uncheckedIcon, variant: props.checked ? props.checkedVariant : props.variant, style: props.checked ? props.checkedStyle : props.style }), children));
4148
+ });
4114
4149
 
4115
4150
  const ToggleButtonGroup = (props) => {
4116
4151
  const theme = useThemeSafely();
4117
4152
  const groupStyles = css.css `
4118
4153
  display: flex;
4119
- box-shadow: ${theme.controls.boxShadow};
4154
+ box-shadow: ${theme.controls.buttonBoxShadow};
4120
4155
  border-radius: ${theme.controls.borderRadius};
4121
4156
  ${props.round && `
4122
4157
  border-radius: ${theme.controls.roundRadius};
@@ -4568,6 +4603,15 @@ const enumToEntities = (enumObj) => {
4568
4603
  return entities;
4569
4604
  };
4570
4605
 
4606
+ const Link = (props) => {
4607
+ const linkProps = __rest(props, ["rightIcon", "leftIcon", "block", "iconBlock", "variant", "round", "small", "colorOverride", "children", "ref"]);
4608
+ const theme = useThemeSafely();
4609
+ const linkStyles = generateLinkStyles(props, theme);
4610
+ const mainClassName = css.cx('link', linkStyles, props.className);
4611
+ return (React__namespace.createElement("a", Object.assign({}, linkProps, { target: props.target, className: mainClassName }),
4612
+ React__namespace.createElement(LinkContent, Object.assign({}, props))));
4613
+ };
4614
+
4571
4615
  exports.Accordian = Accordian;
4572
4616
  exports.Autocomplete = Autocomplete;
4573
4617
  exports.Backdrop = Backdrop$1;
@@ -4597,6 +4641,7 @@ exports.InfoTip = InfoTip;
4597
4641
  exports.Input = Input;
4598
4642
  exports.ItemPager = ItemPager;
4599
4643
  exports.Label = Label;
4644
+ exports.Link = Link;
4600
4645
  exports.List = List;
4601
4646
  exports.ListItem = ListItem;
4602
4647
  exports.Modal = Modal;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mackin.com/styleguide",
3
- "version": "8.1.1",
3
+ "version": "8.2.0",
4
4
  "description": "",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",