@vygruppen/spor-react 8.3.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.turbo/turbo-build.log +10 -12
  2. package/CHANGELOG.md +34 -0
  3. package/dist/{CountryCodeSelect-DYAFPSID.mjs → CountryCodeSelect-OVMXGXPY.mjs} +1 -1
  4. package/dist/{chunk-42ZK3WXN.mjs → chunk-W7IAYOJH.mjs} +1252 -1784
  5. package/dist/index.d.mts +1657 -812
  6. package/dist/index.d.ts +1657 -812
  7. package/dist/index.js +1603 -2073
  8. package/dist/index.mjs +1 -1
  9. package/package.json +1 -1
  10. package/src/breadcrumb/Breadcrumb.tsx +4 -2
  11. package/src/card/Card.tsx +5 -4
  12. package/src/datepicker/DateRangePicker.tsx +1 -0
  13. package/src/input/ChoiceChip.tsx +3 -3
  14. package/src/input/NumericStepper.tsx +7 -49
  15. package/src/input/PasswordInput.tsx +2 -0
  16. package/src/input/PhoneNumberInput.tsx +1 -1
  17. package/src/input/Switch.tsx +4 -7
  18. package/src/loader/ProgressBar.tsx +7 -24
  19. package/src/tab/Tabs.tsx +4 -5
  20. package/src/theme/components/accordion.ts +12 -16
  21. package/src/theme/components/alert-expandable.ts +10 -21
  22. package/src/theme/components/breadcrumb.ts +60 -5
  23. package/src/theme/components/button.ts +40 -75
  24. package/src/theme/components/card-select.ts +14 -56
  25. package/src/theme/components/card.ts +66 -68
  26. package/src/theme/components/checkbox.ts +20 -20
  27. package/src/theme/components/choice-chip.ts +28 -43
  28. package/src/theme/components/close-button.ts +1 -1
  29. package/src/theme/components/datepicker.ts +48 -166
  30. package/src/theme/components/drawer.ts +6 -4
  31. package/src/theme/components/fab.ts +35 -62
  32. package/src/theme/components/index.ts +3 -1
  33. package/src/theme/components/info-select.ts +5 -9
  34. package/src/theme/components/input.ts +17 -32
  35. package/src/theme/components/link.ts +8 -8
  36. package/src/theme/components/listbox.ts +5 -7
  37. package/src/theme/components/media-controller-button.ts +20 -25
  38. package/src/theme/components/modal.ts +8 -6
  39. package/src/theme/components/numeric-stepper.ts +65 -0
  40. package/src/theme/components/popover.ts +7 -8
  41. package/src/theme/components/progress-bar.ts +43 -0
  42. package/src/theme/components/progress-indicator.ts +5 -2
  43. package/src/theme/components/radio.ts +15 -12
  44. package/src/theme/components/select.ts +2 -2
  45. package/src/theme/components/stepper.ts +10 -7
  46. package/src/theme/components/switch.ts +35 -82
  47. package/src/theme/components/table.ts +10 -12
  48. package/src/theme/components/tabs.ts +55 -261
  49. package/src/theme/components/travel-tag.ts +3 -6
  50. package/src/theme/foundations/colors.ts +3 -1
  51. package/src/theme/foundations/fonts.ts +2 -2
  52. package/src/theme/index.ts +9 -6
  53. package/src/theme/utils/accent-utils.ts +54 -0
  54. package/src/theme/utils/base-utils.ts +94 -0
  55. package/src/theme/utils/bg-utils.ts +19 -0
  56. package/src/theme/utils/brand-utils.ts +42 -0
  57. package/src/theme/utils/floating-utils.ts +64 -0
  58. package/src/theme/utils/{focus-util.ts → focus-utils.ts} +1 -1
  59. package/src/theme/utils/ghost-utils.ts +40 -0
  60. package/src/theme/utils/surface-utils.ts +35 -0
  61. package/src/tooltip/Tooltip.tsx +17 -20
  62. package/src/typography/Heading.tsx +7 -2
  63. package/src/util/externals.tsx +0 -1
  64. package/src/theme/utils/background-utils.ts +0 -179
  65. package/src/theme/utils/border-utils.ts +0 -176
  66. package/src/theme/utils/box-shadow-utils.ts +0 -44
  67. package/src/theme/utils/text-utils.ts +0 -60
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, AttachedInputs, Badge, Box, Brand, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Button, ButtonGroup, Card, CardSelect, Center, Checkbox, CheckboxGroup, ChoiceChip, ClosableAlert, CloseButton, Code, ColorInlineLoader, ColorSpinner, Combobox, Container, ContentLoader, DarkFullScreenLoader, DarkInlineLoader, DarkMode, DarkSpinner, DatePicker, DateRangePicker, Divider, Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerFooter, ModalHeader as DrawerHeader, DrawerOverlay, Expandable, ExpandableAlert, ExpandableItem, Fade, Flex, FloatingActionButton, FormControl, FormErrorMessage, FormHelperText, FormLabel, Grid, GridItem, HStack, Heading, IconButton, Image, Img, InfoSelect, InfoTag, Input, InputGroup, InputLeftElement, InputRightElement, Item, ItemDescription, ItemLabel, JumpButton, Language, LanguageProvider, LightFullScreenLoader, LightInlineLoader, LightMode, LightSpinner, LineIcon, ListBox, ListItem, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, NativeSelect, Nudge, NumericStepper, OrderedList, PasswordInput, PhoneNumberInput, PlayPauseButton, Portal, ProgressBar, ProgressIndicator, ProgressLoader, Radio, RadioGroup, ScaleFade, SearchInput, Section, SimpleDrawer, SimpleGrid, Skeleton, SkeletonCircle, SkeletonText, SkipButton, Slide, SlideFade, Spacer, SporProvider, Stack, StaticAlert, Stepper, StepperStep, Switch, Tab, TabList, TabPanel, TabPanels, Table, TableCaption, Tabs, Tbody, Td, Text, TextLink, Textarea, Tfoot, Th, Thead, Time, TimePicker, Tooltip, Tr, TravelTag, UnorderedList, VStack, VyLogo, WizardNudge, Wrap, WrapItem, brandTheme, createTexts, defineStyleConfig, extendTheme, fontFaces, slugify, theme, tokens, useBreakpointValue, useClipboard, useColorMode, useColorModePreference, useColorModeValue, useControllableProp, useDisclosure, useMediaQuery, useMergeRefs, useOutsideClick, usePrefersReducedMotion, useSize, useTheme, useToast, useToken, useTranslation } from './chunk-42ZK3WXN.mjs';
1
+ export { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, AttachedInputs, Badge, Box, Brand, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Button, ButtonGroup, Card, CardSelect, Center, Checkbox, CheckboxGroup, ChoiceChip, ClosableAlert, CloseButton, Code, Collapse, ColorInlineLoader, ColorSpinner, Combobox, Container, ContentLoader, DarkFullScreenLoader, DarkInlineLoader, DarkMode, DarkSpinner, DatePicker, DateRangePicker, Divider, Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerFooter, ModalHeader as DrawerHeader, DrawerOverlay, Expandable, ExpandableAlert, ExpandableItem, Fade, Flex, FloatingActionButton, FormControl, FormErrorMessage, FormHelperText, FormLabel, Grid, GridItem, HStack, Heading, IconButton, Image, Img, InfoSelect, InfoTag, Input, InputGroup, InputLeftElement, InputRightElement, Item, ItemDescription, ItemLabel, JumpButton, Language, LanguageProvider, LightFullScreenLoader, LightInlineLoader, LightMode, LightSpinner, LineIcon, ListBox, ListItem, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, NativeSelect, Nudge, NumericStepper, OrderedList, PasswordInput, PhoneNumberInput, PlayPauseButton, Portal, ProgressBar, ProgressIndicator, ProgressLoader, Radio, RadioGroup, ScaleFade, SearchInput, Section, SimpleDrawer, SimpleGrid, Skeleton, SkeletonCircle, SkeletonText, SkipButton, Slide, SlideFade, Spacer, SporProvider, Stack, StaticAlert, Stepper, StepperStep, Switch, Tab, TabList, TabPanel, TabPanels, Table, TableCaption, Tabs, Tbody, Td, Text, TextLink, Textarea, Tfoot, Th, Thead, Time, TimePicker, Tooltip, Tr, TravelTag, UnorderedList, VStack, VyLogo, WizardNudge, Wrap, WrapItem, brandTheme, createTexts, defineStyleConfig, extendTheme, fontFaces, slugify, theme, tokens, useBreakpointValue, useClipboard, useColorMode, useColorModePreference, useColorModeValue, useControllableProp, useDisclosure, useMediaQuery, useMergeRefs, useOutsideClick, usePrefersReducedMotion, useSize, useTheme, useToast, useToken, useTranslation } from './chunk-W7IAYOJH.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vygruppen/spor-react",
3
- "version": "8.3.0",
3
+ "version": "9.0.1",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -3,12 +3,14 @@ import {
3
3
  BreadcrumbItem as ChakraBreadcrumbItem,
4
4
  BreadcrumbLink as ChakraBreadcrumbLink,
5
5
  BreadcrumbProps as ChakraBreadcrumbProps,
6
+ useColorModeValue,
6
7
  } from "@chakra-ui/react";
7
8
  import { DropdownRightFill18Icon } from "@vygruppen/spor-icon-react";
8
9
  import React from "react";
9
- import { useColorModeValue } from "@chakra-ui/react";
10
10
 
11
- type BreadcrumbProps = ChakraBreadcrumbProps;
11
+ type BreadcrumbProps = Omit<ChakraBreadcrumbProps, "variant"> & {
12
+ variant?: "base" | "ghost";
13
+ };
12
14
  /**
13
15
  * A breadcrumb component.
14
16
  *
package/src/card/Card.tsx CHANGED
@@ -1,6 +1,6 @@
1
- import { As, forwardRef, useStyleConfig } from "@chakra-ui/react";
1
+ import { As, chakra, forwardRef, useStyleConfig } from "@chakra-ui/react";
2
2
  import React from "react";
3
- import { Box, BoxProps } from "../layout";
3
+ import { BoxProps } from "../layout";
4
4
 
5
5
  export type CardProps = Exclude<BoxProps, "size"> & {
6
6
  size?: "sm" | "lg";
@@ -51,10 +51,11 @@ export const Card = forwardRef<CardProps, As>(
51
51
  colorScheme,
52
52
  size,
53
53
  });
54
+
54
55
  return (
55
- <Box __css={styles} {...props} ref={ref}>
56
+ <chakra.div sx={styles} {...props} ref={ref}>
56
57
  {children}
57
- </Box>
58
+ </chakra.div>
58
59
  );
59
60
  },
60
61
  );
@@ -121,6 +121,7 @@ export function DateRangePicker({
121
121
  isOpen={state.isOpen}
122
122
  onOpen={state.open}
123
123
  onClose={state.close}
124
+ flip={false}
124
125
  >
125
126
  <InputGroup {...groupProps} width="auto" display="inline-flex">
126
127
  <PopoverAnchor>
@@ -19,14 +19,14 @@ export type ChoiceChipProps = {
19
19
  default: React.ReactNode;
20
20
  checked: React.ReactNode;
21
21
  };
22
- size?: "sm" | "md" | "lg" | "xl";
22
+ size?: "xs" | "sm" | "md" | "lg";
23
23
  chipType?: "icon" | "choice" | "filter";
24
24
  variant?: "base" | "accent" | "floating";
25
25
  };
26
26
  /**
27
27
  * Choice chips are checkboxes that look like selectable buttons.
28
28
  *
29
- * Choice chips are available in four different sizes - `sm`, `md`, `lg` and `xl`.
29
+ * Choice chips are available in four different sizes - `xs`, `sm`, `md` and `lg`.
30
30
  *
31
31
  * ```tsx
32
32
  * <Stack flexDirection="row">
@@ -59,7 +59,7 @@ export const ChoiceChip = forwardRef((props: ChoiceChipProps, ref) => {
59
59
  children,
60
60
  icon,
61
61
  isDisabled,
62
- size = "md",
62
+ size = "sm",
63
63
  chipType = "choice",
64
64
  variant = "base",
65
65
  } = props;
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  chakra,
3
- useColorModeValue,
4
3
  useControllableState,
5
4
  useFormControl,
5
+ useMultiStyleConfig,
6
6
  } from "@chakra-ui/react";
7
7
  import React from "react";
8
8
  import {
@@ -13,7 +13,6 @@ import {
13
13
  createTexts,
14
14
  useTranslation,
15
15
  } from "..";
16
- import { getBoxShadowString } from "../theme/utils/box-shadow-utils";
17
16
 
18
17
  type NumericStepperProps = {
19
18
  /** The name of the input field */
@@ -76,19 +75,17 @@ export function NumericStepper({
76
75
  ...boxProps
77
76
  }: NumericStepperProps) {
78
77
  const { t } = useTranslation();
78
+ const styles = useMultiStyleConfig("NumericStepper", {});
79
79
  const [value, onChange] = useControllableState<number>({
80
80
  value: valueProp,
81
81
  onChange: onChangeProp,
82
82
  defaultValue,
83
83
  });
84
84
  const formControlProps = useFormControl({ id: idProp, isDisabled });
85
- const textColor = useColorModeValue("darkGrey", "white");
86
- const backgroundColor = useColorModeValue("white", "darkGrey");
87
- const focusColor = useColorModeValue("greenHaze", "azure");
88
85
  const clampedStepSize = Math.max(Math.min(stepSize, 10), 1);
89
86
 
90
87
  return (
91
- <Flex alignItems="center" {...boxProps}>
88
+ <Flex __css={styles.container} {...boxProps}>
92
89
  <VerySmallButton
93
90
  icon={<SubtractIcon stepLabel={clampedStepSize} />}
94
91
  aria-label={t(texts.decrementButtonAriaLabel(clampedStepSize))}
@@ -106,38 +103,11 @@ export function NumericStepper({
106
103
  value={value}
107
104
  {...formControlProps}
108
105
  id={!showZero && value === 0 ? undefined : formControlProps.id}
109
- fontSize="sm"
110
- fontWeight="bold"
106
+ sx={styles.input}
111
107
  width={`${Math.max(value.toString().length + 1, 3)}ch`}
112
- marginX={1}
113
- paddingX={1}
114
- borderRadius="xs"
115
- textAlign="center"
116
- backgroundColor={backgroundColor}
117
- color={textColor}
118
- transition="box-shadow .1s ease-out"
119
108
  visibility={!showZero && value === 0 ? "hidden" : "visible"}
120
109
  aria-live="assertive"
121
110
  aria-label={value.toString()}
122
- _hover={{
123
- boxShadow: getBoxShadowString({
124
- borderColor: "currentColor",
125
- borderWidth: 1,
126
- }),
127
- _disabled: {
128
- boxShadow: "none",
129
- },
130
- }}
131
- _disabled={{
132
- opacity: 0.5,
133
- }}
134
- _focus={{
135
- outline: "none",
136
- boxShadow: getBoxShadowString({
137
- borderColor: focusColor,
138
- borderWidth: 1,
139
- }),
140
- }}
141
111
  onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
142
112
  const numericInput = Number(e.target.value);
143
113
  if (Number.isNaN(numericInput)) {
@@ -148,14 +118,7 @@ export function NumericStepper({
148
118
  />
149
119
  ) : (
150
120
  <chakra.text
151
- fontSize="sm"
152
- fontWeight="bold"
153
- width="4ch"
154
- marginX={1}
155
- paddingX={1}
156
- textAlign="center"
157
- color={textColor}
158
- transition="box-shadow .1s ease-out"
121
+ sx={styles.text}
159
122
  visibility={!showZero && value === 0 ? "hidden" : "visible"}
160
123
  aria-label={value.toString()}
161
124
  >
@@ -190,14 +153,9 @@ type VerySmallButtonProps = {
190
153
  };
191
154
  /** Internal override for extra small icon buttons */
192
155
  const VerySmallButton = (props: VerySmallButtonProps) => {
156
+ const styles = useMultiStyleConfig("NumericStepper", {});
193
157
  return (
194
- <IconButton
195
- variant="primary"
196
- size="xs"
197
- minWidth="24px"
198
- minHeight="24px"
199
- {...props}
200
- />
158
+ <IconButton variant="primary" size="xs" sx={styles.button} {...props} />
201
159
  );
202
160
  };
203
161
 
@@ -43,6 +43,8 @@ export const PasswordInput = forwardRef<PasswordInputProps, "input">(
43
43
  <Button
44
44
  variant="ghost"
45
45
  type="button"
46
+ fontWeight="normal"
47
+ size="sm"
46
48
  onClick={onToggle}
47
49
  borderRadius="sm"
48
50
  marginRight={1}
@@ -106,7 +106,7 @@ export const PhoneNumberInput = forwardRef<PhoneNumberInputProps, As>(
106
106
  });
107
107
  }}
108
108
  position="relative"
109
- left="-1px" // Makes the borders overlap
109
+ left="1px" // Makes the borders overlap
110
110
  />
111
111
  </AttachedInputs>
112
112
  );
@@ -5,10 +5,7 @@ import {
5
5
  } from "@chakra-ui/react";
6
6
  import React from "react";
7
7
 
8
- export type SwitchProps = Exclude<
9
- ChakraSwitchProps,
10
- "colorScheme" | "variant"
11
- > & {
8
+ export type SwitchProps = Omit<ChakraSwitchProps, "colorScheme" | "variant"> & {
12
9
  size?: "sm" | "md" | "lg";
13
10
  };
14
11
 
@@ -24,17 +21,17 @@ export type SwitchProps = Exclude<
24
21
  * </FormControl>
25
22
  * ```
26
23
  *
27
- * Switches are available in three different sizes - `sm`, `md` and `lg`. There are also two variants - `solid` and `outline`.
24
+ * Switches are available in three different sizes - `sm`, `md` and `lg`.
28
25
  *
29
26
  * ```tsx
30
27
  * <FormControl>
31
28
  * <FormLabel>Enable alerts?</FormLabel>
32
- * <Switch variant="outline" size="lg" />
29
+ * <Switch size="sm" />
33
30
  * </FormControl>
34
31
  * ```
35
32
  */
36
33
  export const Switch = forwardRef<SwitchProps, "input">(
37
34
  ({ size = "md", ...props }: SwitchProps, ref) => {
38
- return <ChakraSwitch variant="solid" size={size} {...props} ref={ref} />;
35
+ return <ChakraSwitch size={size} {...props} ref={ref} />;
39
36
  },
40
37
  );
@@ -1,4 +1,4 @@
1
- import { Box, BoxProps, Flex, Text } from "@chakra-ui/react";
1
+ import { Box, BoxProps, Text, useMultiStyleConfig } from "@chakra-ui/react";
2
2
  import React from "react";
3
3
  import { useProgressBar } from "react-aria";
4
4
  import { createTexts, useTranslation } from "..";
@@ -79,37 +79,20 @@ export const ProgressBar = ({
79
79
  value,
80
80
  "aria-label": ariaLabel || t(texts.label(value)),
81
81
  });
82
+ const styles = useMultiStyleConfig("ProgressBar", {});
82
83
  return (
83
84
  <>
84
85
  <Box
85
86
  {...progressBarProps}
86
87
  title={t(texts.label(value))}
87
- minWidth="100px"
88
+ __css={styles.container}
88
89
  {...rest}
89
90
  >
90
- <Flex
91
- backgroundColor="coralGreen"
92
- borderRadius="sm"
93
- width={width}
94
- justifyContent="flex-start"
95
- marginX="auto"
96
- >
97
- <Box
98
- backgroundColor="greenHaze"
99
- borderRadius="sm"
100
- height={height}
101
- width={`${value}%`}
102
- maxWidth="100%"
103
- transition="width .2s ease-out"
104
- />
105
- </Flex>
91
+ <Box width={width} __css={styles.background}>
92
+ <Box __css={styles.progress} height={height} width={`${value}%`} />
93
+ </Box>
106
94
  {currentLoadingText && (
107
- <Text
108
- textAlign="center"
109
- marginTop={2}
110
- fontWeight="bold"
111
- {...labelProps}
112
- >
95
+ <Text sx={styles.description} {...labelProps}>
113
96
  {currentLoadingText}
114
97
  </Text>
115
98
  )}
package/src/tab/Tabs.tsx CHANGED
@@ -9,11 +9,10 @@ export type TabsProps = Exclude<
9
9
  ChakraTabsProps,
10
10
  "colorScheme" | "variant" | "orientation" | "size"
11
11
  > & {
12
- colorScheme: "base" | "accent";
13
- /** Defaults to `md` */
14
- size?: "sm" | "md" | "lg" | "xl";
15
- /** Defaults to `round` */
16
- variant?: "square" | "round";
12
+ /** Defaults to `base` */
13
+ variant: "base" | "accent";
14
+ /** Defaults to `sm` */
15
+ size?: "xs" | "sm" | "md" | "lg";
17
16
  };
18
17
  export const Tabs = forwardRef<TabsProps, "div">((props, ref) => {
19
18
  return <ChakraTabs {...props} ref={ref} />;
@@ -1,38 +1,32 @@
1
1
  import { accordionAnatomy as parts } from "@chakra-ui/anatomy";
2
2
  import { createMultiStyleConfigHelpers } from "@chakra-ui/styled-system";
3
- import {
4
- baseBackground,
5
- floatingBackground,
6
- ghostBackground,
7
- } from "../utils/background-utils";
8
- import { baseBorder, floatingBorder } from "../utils/border-utils";
9
- import { focusVisibleStyles } from "../utils/focus-util";
10
- import { baseText } from "../utils/text-utils";
3
+ import { baseBackground, baseBorder, baseText } from "../utils/base-utils";
4
+ import { floatingBackground, floatingBorder } from "../utils/floating-utils";
5
+ import { focusVisibleStyles } from "../utils/focus-utils";
6
+ import { ghostBackground } from "../utils/ghost-utils";
11
7
 
12
8
  const helpers = createMultiStyleConfigHelpers(parts.keys);
13
9
  const config = helpers.defineMultiStyleConfig({
14
10
  baseStyle: (props) => ({
15
11
  container: {
16
- border: "none",
17
12
  borderRadius: "sm",
18
13
  },
19
14
  button: {
20
15
  transitionProperty:
21
16
  "background-color, color, border-radius, box-shadow, opacity",
22
- transitionDuration: "normal",
23
- border: "none",
17
+ transitionDuration: "fast",
24
18
  borderRadius: "sm",
25
- borderColor: "osloGrey",
26
19
  display: "flex",
27
20
  justifyContent: "space-between",
28
21
  ...baseText("default", props),
29
22
  textAlign: "left",
30
23
  fontFamily: "body",
31
24
  fontWeight: "bold",
25
+ outlineOffset: "-2px",
32
26
  ...focusVisibleStyles(props),
33
27
  _disabled: {
28
+ pointerEvents: "none",
34
29
  opacity: 0.4,
35
- cursor: "not-allowed",
36
30
  },
37
31
  },
38
32
  panel: {
@@ -46,7 +40,6 @@ const config = helpers.defineMultiStyleConfig({
46
40
  variants: {
47
41
  ghost: (props) => ({
48
42
  button: {
49
- boxShadow: "none",
50
43
  _hover: {
51
44
  ...ghostBackground("hover", props),
52
45
  },
@@ -65,6 +58,7 @@ const config = helpers.defineMultiStyleConfig({
65
58
  },
66
59
  _hover: {
67
60
  ...baseBorder("hover", props),
61
+ outlineOffset: 0,
68
62
  },
69
63
  _active: {
70
64
  ...baseBackground("active", props),
@@ -76,14 +70,16 @@ const config = helpers.defineMultiStyleConfig({
76
70
  container: {
77
71
  ...floatingBackground("default", props),
78
72
  ...floatingBorder("default", props),
73
+ boxShadow: "sm",
79
74
  },
80
75
  button: {
81
76
  _expanded: {
82
77
  borderBottomRadius: "none",
83
78
  },
84
79
  _hover: {
85
- ...ghostBackground("hover", props),
86
- ...floatingBorder("default", props),
80
+ ...floatingBackground("hover", props),
81
+ ...floatingBorder("hover", props),
82
+ outlineOffset: 1,
87
83
  },
88
84
  _active: {
89
85
  ...ghostBackground("active", props),
@@ -1,6 +1,5 @@
1
1
  import { anatomy } from "@chakra-ui/anatomy";
2
2
  import { createMultiStyleConfigHelpers } from "@chakra-ui/styled-system";
3
- import { getBoxShadowString } from "../utils/box-shadow-utils";
4
3
 
5
4
  const parts = anatomy("alertExpandable").parts("container");
6
5
  const helpers = createMultiStyleConfigHelpers(parts.keys);
@@ -11,19 +10,21 @@ const config = helpers.defineMultiStyleConfig({
11
10
  paddingX: 3,
12
11
  paddingY: 2,
13
12
  fontSize: "inherit",
13
+ transitionProperty: "outline, border-radius",
14
+ transitionDuration: "fast",
14
15
  _expanded: {
15
16
  borderBottomRadius: "none",
16
17
  },
18
+ _hover: {
19
+ outline: "2px solid",
20
+ },
17
21
  },
18
22
  },
19
23
  variants: {
20
24
  info: {
21
25
  container: {
22
26
  _hover: {
23
- boxShadow: getBoxShadowString({
24
- borderColor: "sky",
25
- borderWidth: 2,
26
- }),
27
+ outlineColor: "sky",
27
28
  },
28
29
  _active: {
29
30
  backgroundColor: "icyBlue",
@@ -33,10 +34,7 @@ const config = helpers.defineMultiStyleConfig({
33
34
  success: {
34
35
  container: {
35
36
  _hover: {
36
- boxShadow: getBoxShadowString({
37
- borderColor: "blueGreen",
38
- borderWidth: 2,
39
- }),
37
+ outlineColor: "blueGreen",
40
38
  },
41
39
  _active: {
42
40
  backgroundColor: "mint",
@@ -46,10 +44,7 @@ const config = helpers.defineMultiStyleConfig({
46
44
  warning: {
47
45
  container: {
48
46
  _hover: {
49
- boxShadow: getBoxShadowString({
50
- borderColor: "sunshine",
51
- borderWidth: 2,
52
- }),
47
+ outlineColor: "sunshine",
53
48
  },
54
49
  _active: {
55
50
  backgroundColor: "cornSilk",
@@ -59,10 +54,7 @@ const config = helpers.defineMultiStyleConfig({
59
54
  "alt-transport": {
60
55
  container: {
61
56
  _hover: {
62
- boxShadow: getBoxShadowString({
63
- borderColor: "golden",
64
- borderWidth: 2,
65
- }),
57
+ outlineColor: "golden",
66
58
  },
67
59
  _active: {
68
60
  backgroundColor: "sunshine",
@@ -72,10 +64,7 @@ const config = helpers.defineMultiStyleConfig({
72
64
  error: {
73
65
  container: {
74
66
  _hover: {
75
- boxShadow: getBoxShadowString({
76
- borderColor: "apricot",
77
- borderWidth: 2,
78
- }),
67
+ outlineColor: "apricot",
79
68
  },
80
69
  _active: {
81
70
  backgroundColor: "pink",
@@ -4,7 +4,8 @@ import {
4
4
  defineStyle,
5
5
  } from "@chakra-ui/styled-system";
6
6
  import { mode } from "@chakra-ui/theme-tools";
7
- import { focusVisibleStyles } from "../utils/focus-util";
7
+ import { baseBackground, baseBorder } from "../utils/base-utils";
8
+ import { focusVisibleStyles } from "../utils/focus-utils";
8
9
 
9
10
  const { defineMultiStyleConfig, definePartsStyle } =
10
11
  createMultiStyleConfigHelpers(parts.keys);
@@ -21,12 +22,12 @@ const baseStyleLink = defineStyle((props) => ({
21
22
  "&:not([aria-current=page])": {
22
23
  cursor: "pointer",
23
24
  _hover: {
24
- backgroundColor: mode("seaMist", "pine")(props),
25
+ ...baseBackground("hover", props),
25
26
  },
26
- ...focusVisibleStyles(props),
27
27
  _active: {
28
- backgroundColor: mode("mint", "whiteAlpha.200")(props),
28
+ ...baseBackground("active", props),
29
29
  },
30
+ ...focusVisibleStyles(props),
30
31
  },
31
32
  }));
32
33
 
@@ -39,5 +40,59 @@ const baseStyle = definePartsStyle((props) => ({
39
40
  }));
40
41
 
41
42
  export default defineMultiStyleConfig({
42
- baseStyle,
43
+ baseStyle: definePartsStyle((props) => ({
44
+ link: {
45
+ transitionProperty: "common",
46
+ transitionDuration: "fast",
47
+ transitionTimingFunction: "ease-out",
48
+ color: "inherit",
49
+ textDecoration: "none",
50
+ textStyle: "xs",
51
+ paddingX: 0.5,
52
+ borderRadius: "xs",
53
+ "&:not([aria-current=page])": {
54
+ cursor: "pointer",
55
+ ...focusVisibleStyles(props),
56
+ },
57
+ },
58
+ list: {
59
+ flexWrap: "wrap",
60
+ alignItems: "flex-start",
61
+ },
62
+ })),
63
+ variants: {
64
+ base: (props) => ({
65
+ link: {
66
+ "&:not([aria-current=page])": {
67
+ _hover: {
68
+ ...baseBorder("default", props),
69
+ },
70
+ _active: {
71
+ ...baseBackground("active", props),
72
+ },
73
+ },
74
+ },
75
+ }),
76
+ ghost: (props) => ({
77
+ link: {
78
+ "&:not([aria-current=page])": {
79
+ _hover: {
80
+ backgroundColor: mode(
81
+ "ghost.surface.hover.light",
82
+ "ghost.surface.hover.dark",
83
+ )(props),
84
+ },
85
+ _active: {
86
+ backgroundColor: mode(
87
+ "ghost.surface.active.light",
88
+ "ghost.surface.active.dark",
89
+ )(props),
90
+ },
91
+ },
92
+ },
93
+ }),
94
+ },
95
+ defaultProps: {
96
+ variant: "base",
97
+ },
43
98
  });