@vygruppen/spor-react 11.3.10 → 12.0.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 (322) hide show
  1. package/.turbo/turbo-build.log +32 -11
  2. package/.turbo/turbo-typegen.log +23 -0
  3. package/CHANGELOG.md +239 -0
  4. package/dist/index.d.mts +2552 -8319
  5. package/dist/index.d.ts +2552 -8319
  6. package/dist/index.js +9609 -8608
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +9487 -8455
  9. package/dist/index.mjs.map +1 -1
  10. package/package.json +21 -13
  11. package/src/accordion/Accordion.tsx +96 -45
  12. package/src/accordion/Expandable.tsx +54 -127
  13. package/src/accordion/helpers.ts +31 -0
  14. package/src/accordion/types.ts +60 -0
  15. package/src/alert/Alert.tsx +101 -0
  16. package/src/alert/AlertIcon.tsx +63 -45
  17. package/src/alert/ExpandableAlert.tsx +96 -64
  18. package/src/alert/ServiceAlert.tsx +127 -125
  19. package/src/alert/{index.tsx → index.ts} +1 -2
  20. package/src/breadcrumb/Breadcrumb.tsx +39 -24
  21. package/src/button/Button.tsx +86 -105
  22. package/src/button/ButtonGroup.tsx +45 -20
  23. package/src/button/Clipboard.tsx +82 -0
  24. package/src/button/CloseButton.tsx +4 -3
  25. package/src/button/FloatingActionButton.tsx +35 -41
  26. package/src/button/IconButton.tsx +34 -30
  27. package/src/button/index.tsx +1 -0
  28. package/src/color-mode/color-mode.tsx +75 -0
  29. package/src/color-mode/index.ts +1 -0
  30. package/src/datepicker/Calendar.tsx +17 -8
  31. package/src/datepicker/CalendarCell.tsx +20 -13
  32. package/src/datepicker/CalendarGrid.tsx +18 -10
  33. package/src/datepicker/CalendarHeader.tsx +2 -0
  34. package/src/datepicker/CalendarNavigationButton.tsx +1 -0
  35. package/src/datepicker/CalendarTriggerButton.tsx +43 -45
  36. package/src/datepicker/DateField.tsx +21 -12
  37. package/src/datepicker/DatePicker.tsx +61 -58
  38. package/src/datepicker/DateRangePicker.tsx +52 -58
  39. package/src/datepicker/DateTimeSegment.tsx +13 -5
  40. package/src/datepicker/RangeCalendar.tsx +13 -7
  41. package/src/datepicker/StyledField.tsx +25 -17
  42. package/src/datepicker/TimeField.tsx +10 -8
  43. package/src/datepicker/TimePicker.tsx +48 -45
  44. package/src/datepicker/types.ts +5 -0
  45. package/src/dialog/Dialog.tsx +56 -0
  46. package/src/dialog/Drawer.tsx +187 -0
  47. package/src/dialog/index.ts +2 -0
  48. package/src/dialog/types.ts +26 -0
  49. package/src/image/index.tsx +2 -2
  50. package/src/index.tsx +5 -3
  51. package/src/input/AttachedInputs.tsx +17 -42
  52. package/src/input/CardSelect.tsx +75 -162
  53. package/src/input/Checkbox.tsx +30 -6
  54. package/src/input/CheckboxGroup.tsx +25 -16
  55. package/src/input/ChoiceChip.tsx +58 -77
  56. package/src/input/Combobox.tsx +172 -172
  57. package/src/input/CountryCodeSelect.tsx +42 -28
  58. package/src/input/Dialog.tsx +1 -0
  59. package/src/input/Field.tsx +71 -0
  60. package/src/input/Fieldset.tsx +7 -0
  61. package/src/input/Input.tsx +68 -73
  62. package/src/input/InputGroup.tsx +66 -0
  63. package/src/input/ListBox.tsx +83 -70
  64. package/src/input/NativeSelect.tsx +68 -33
  65. package/src/input/NumericStepper.tsx +173 -171
  66. package/src/input/PasswordInput.tsx +99 -52
  67. package/src/input/PhoneNumberInput.tsx +69 -72
  68. package/src/input/Popover.tsx +1 -0
  69. package/src/input/Radio.tsx +37 -17
  70. package/src/input/SearchInput.tsx +24 -86
  71. package/src/input/Select.tsx +237 -0
  72. package/src/input/Switch.tsx +60 -18
  73. package/src/input/Textarea.tsx +53 -101
  74. package/src/input/{index.tsx → index.ts} +2 -8
  75. package/src/layout/PressableCard.tsx +12 -21
  76. package/src/layout/RadioCard.tsx +68 -101
  77. package/src/layout/Separator.tsx +32 -0
  78. package/src/layout/StaticCard.tsx +13 -33
  79. package/src/layout/index.tsx +3 -7
  80. package/src/linjetag/InfoTag.tsx +16 -9
  81. package/src/linjetag/LineIcon.tsx +74 -28
  82. package/src/linjetag/TravelTag.tsx +38 -27
  83. package/src/link/TextLink.tsx +25 -16
  84. package/src/list/index.tsx +24 -2
  85. package/src/loader/ClientOnly.tsx +8 -7
  86. package/src/loader/ColorInlineLoader.tsx +4 -3
  87. package/src/loader/ColorSpinner.tsx +5 -4
  88. package/src/loader/ContentLoader.tsx +6 -4
  89. package/src/loader/DarkFullScreenLoader.tsx +11 -3
  90. package/src/loader/DarkInlineLoader.tsx +5 -3
  91. package/src/loader/DarkSpinner.tsx +7 -3
  92. package/src/loader/LightFullScreenLoader.tsx +11 -3
  93. package/src/loader/LightInlineLoader.tsx +11 -3
  94. package/src/loader/LightSpinner.tsx +5 -3
  95. package/src/loader/Lottie.tsx +3 -3
  96. package/src/loader/ProgressBar.tsx +83 -84
  97. package/src/loader/ProgressLoader.tsx +120 -75
  98. package/src/loader/Skeleton.tsx +94 -19
  99. package/src/loader/index.tsx +0 -2
  100. package/src/loader/useHydrated.tsx +1 -0
  101. package/src/loader/useRotatingLabel.tsx +2 -1
  102. package/src/logo/CargonetLogo.tsx +89 -89
  103. package/src/logo/VyLogo.tsx +61 -42
  104. package/src/logo/VyLogoPride.tsx +137 -139
  105. package/src/media-controller/JumpButton.tsx +48 -38
  106. package/src/media-controller/PlayPauseButton.tsx +31 -29
  107. package/src/media-controller/SkipButton.tsx +38 -37
  108. package/src/nudge/Nudge.tsx +195 -123
  109. package/src/nudge/index.tsx +0 -1
  110. package/src/pagination/Pagination.tsx +221 -118
  111. package/src/pagination/types.ts +23 -0
  112. package/src/popover/index.tsx +67 -0
  113. package/src/progress-indicator/ProgressDot.tsx +11 -10
  114. package/src/progress-indicator/ProgressIndicator.tsx +28 -15
  115. package/src/provider/SporProvider.tsx +17 -14
  116. package/src/stepper/Stepper.tsx +88 -85
  117. package/src/stepper/StepperContext.tsx +2 -1
  118. package/src/stepper/StepperStep.tsx +28 -21
  119. package/src/tab/Tabs.tsx +62 -12
  120. package/src/tab/index.tsx +1 -9
  121. package/src/table/Table.tsx +35 -30
  122. package/src/table/index.tsx +11 -7
  123. package/src/theme/brand.ts +7 -0
  124. package/src/theme/index.ts +45 -37
  125. package/src/theme/recipes/attached-inputs.ts +43 -0
  126. package/src/theme/recipes/badge.ts +104 -0
  127. package/src/theme/recipes/button.ts +124 -0
  128. package/src/theme/recipes/choice-chip.ts +144 -0
  129. package/src/theme/recipes/close-button.ts +41 -0
  130. package/src/theme/recipes/code.ts +14 -0
  131. package/src/theme/recipes/group.ts +19 -0
  132. package/src/theme/recipes/index.ts +29 -0
  133. package/src/theme/recipes/input.ts +89 -0
  134. package/src/theme/recipes/link.ts +64 -0
  135. package/src/theme/recipes/nudge.ts +12 -0
  136. package/src/theme/recipes/pressable-card.ts +83 -0
  137. package/src/theme/recipes/progress-loader.ts +14 -0
  138. package/src/theme/recipes/separator.ts +85 -0
  139. package/src/theme/recipes/skeleton.ts +57 -0
  140. package/src/theme/recipes/static-card.ts +39 -0
  141. package/src/theme/recipes/textarea.ts +27 -0
  142. package/src/theme/semantic-tokens/colors.ts +22 -0
  143. package/src/theme/semantic-tokens/index.ts +24 -0
  144. package/src/theme/semantic-tokens/radii.ts +14 -0
  145. package/src/theme/semantic-tokens/shadows.ts +17 -0
  146. package/src/theme/slot-recipes/accordion.ts +131 -0
  147. package/src/theme/slot-recipes/alert-expandable.ts +133 -0
  148. package/src/theme/slot-recipes/alert-service.ts +66 -0
  149. package/src/theme/slot-recipes/alert.ts +72 -0
  150. package/src/theme/slot-recipes/anatomy.ts +269 -0
  151. package/src/theme/slot-recipes/breadcrumb.ts +61 -0
  152. package/src/theme/slot-recipes/checkbox.ts +89 -0
  153. package/src/theme/slot-recipes/datepicker.ts +214 -0
  154. package/src/theme/slot-recipes/dialog.ts +221 -0
  155. package/src/theme/slot-recipes/drawer.ts +205 -0
  156. package/src/theme/slot-recipes/field.ts +79 -0
  157. package/src/theme/slot-recipes/floating-action-button.ts +131 -0
  158. package/src/theme/slot-recipes/index.ts +65 -0
  159. package/src/theme/slot-recipes/info-tag.ts +62 -0
  160. package/src/theme/slot-recipes/line-icon.ts +140 -0
  161. package/src/theme/slot-recipes/list.ts +45 -0
  162. package/src/theme/slot-recipes/listbox.ts +72 -0
  163. package/src/theme/slot-recipes/media-controller-button.ts +131 -0
  164. package/src/theme/slot-recipes/native-select.ts +54 -0
  165. package/src/theme/slot-recipes/numeric-stepper.ts +65 -0
  166. package/src/theme/slot-recipes/pagination.ts +41 -0
  167. package/src/theme/slot-recipes/popover.ts +78 -0
  168. package/src/theme/slot-recipes/progress-bar.ts +39 -0
  169. package/src/theme/slot-recipes/progress-indicator.ts +22 -0
  170. package/src/theme/slot-recipes/radio-card.ts +112 -0
  171. package/src/theme/slot-recipes/radio.ts +80 -0
  172. package/src/theme/slot-recipes/select.ts +243 -0
  173. package/src/theme/slot-recipes/stepper.ts +92 -0
  174. package/src/theme/slot-recipes/switch.ts +147 -0
  175. package/src/theme/slot-recipes/table.ts +200 -0
  176. package/src/theme/slot-recipes/tabs.ts +169 -0
  177. package/src/theme/slot-recipes/toast.ts +56 -0
  178. package/src/theme/slot-recipes/travel-tag.ts +192 -0
  179. package/src/theme/tokens/animation-styles.ts +50 -0
  180. package/src/theme/tokens/animations.ts +22 -0
  181. package/src/theme/tokens/aspect-ratios.ts +22 -0
  182. package/src/theme/tokens/blurs.ts +28 -0
  183. package/src/theme/tokens/borders.ts +26 -0
  184. package/src/theme/{foundations → tokens}/breakpoints.ts +0 -1
  185. package/src/theme/tokens/colors.ts +10 -0
  186. package/src/theme/tokens/config.ts +10 -0
  187. package/src/theme/tokens/cursor.ts +28 -0
  188. package/src/theme/tokens/durations.ts +25 -0
  189. package/src/theme/tokens/easings.ts +16 -0
  190. package/src/theme/tokens/font-sizes.ts +30 -0
  191. package/src/theme/tokens/font-weights.ts +31 -0
  192. package/src/theme/tokens/fonts.ts +8 -0
  193. package/src/theme/tokens/global-css.ts +18 -0
  194. package/src/theme/tokens/index.ts +37 -0
  195. package/src/theme/tokens/keyframes.ts +255 -0
  196. package/src/theme/tokens/letter-spacings.ts +19 -0
  197. package/src/theme/tokens/line-heights.ts +19 -0
  198. package/src/theme/tokens/radii.ts +13 -0
  199. package/src/theme/tokens/sizes.ts +51 -0
  200. package/src/theme/tokens/spacing.ts +20 -0
  201. package/src/theme/tokens/text-styles.ts +89 -0
  202. package/src/theme/tokens/z-index.ts +17 -0
  203. package/src/theme/utils/accent-utils.ts +8 -21
  204. package/src/theme/utils/bg-utils.ts +4 -6
  205. package/src/theme/utils/brand-utils.ts +6 -19
  206. package/src/theme/utils/core-utils.ts +91 -0
  207. package/src/theme/utils/floating-utils.ts +20 -39
  208. package/src/theme/utils/ghost-utils.ts +7 -21
  209. package/src/theme/utils/input-utils.ts +32 -37
  210. package/src/theme/utils/outline-utils.ts +4 -11
  211. package/src/theme/utils/surface-utils.ts +5 -19
  212. package/src/theme/utils/types.ts +1 -0
  213. package/src/toast/index.tsx +1 -1
  214. package/src/toast/toast.tsx +105 -0
  215. package/src/transition/index.ts +2 -8
  216. package/src/typography/Badge.tsx +15 -61
  217. package/src/typography/Code.tsx +16 -28
  218. package/src/typography/Heading.tsx +34 -19
  219. package/src/typography/Text.tsx +9 -6
  220. package/src/typography/{index.tsx → index.ts} +1 -0
  221. package/src/util/externals.tsx +13 -27
  222. package/tsconfig.json +5 -1
  223. package/src/accordion/Accordion.test.tsx +0 -20
  224. package/src/alert/BaseAlert.test.tsx +0 -37
  225. package/src/alert/BaseAlert.tsx +0 -34
  226. package/src/alert/ClosableAlert.test.tsx +0 -37
  227. package/src/alert/ClosableAlert.tsx +0 -85
  228. package/src/alert/ExpandableAlert.test.tsx +0 -84
  229. package/src/alert/StaticAlert.tsx +0 -33
  230. package/src/button/Button.test.tsx +0 -23
  231. package/src/datepicker/TimePicker.test.tsx +0 -74
  232. package/src/input/FormControl.tsx +0 -2
  233. package/src/input/FormErrorMessage.tsx +0 -95
  234. package/src/input/FormLabel.tsx +0 -11
  235. package/src/input/InfoSelect.tsx +0 -274
  236. package/src/input/InputElement.tsx +0 -44
  237. package/src/input/RadioGroup.tsx +0 -47
  238. package/src/layout/Divider.tsx +0 -27
  239. package/src/layout/RadioCardGroup.tsx +0 -79
  240. package/src/layout/Stack.tsx +0 -42
  241. package/src/loader/SkeletonCircle.tsx +0 -13
  242. package/src/loader/SkeletonText.tsx +0 -14
  243. package/src/media-controller/index.test.tsx +0 -59
  244. package/src/modal/Drawer.tsx +0 -120
  245. package/src/modal/FullScreenDrawer.tsx +0 -239
  246. package/src/modal/Modal.tsx +0 -15
  247. package/src/modal/ModalHeader.tsx +0 -31
  248. package/src/modal/SimpleDrawer.tsx +0 -51
  249. package/src/modal/index.tsx +0 -5
  250. package/src/nudge/WizardNudge.tsx +0 -107
  251. package/src/theme/components/accordion.ts +0 -102
  252. package/src/theme/components/alert-expandable.ts +0 -125
  253. package/src/theme/components/alert-service.ts +0 -98
  254. package/src/theme/components/alert.ts +0 -71
  255. package/src/theme/components/badge.ts +0 -109
  256. package/src/theme/components/breadcrumb.ts +0 -60
  257. package/src/theme/components/button.ts +0 -125
  258. package/src/theme/components/card-select.ts +0 -117
  259. package/src/theme/components/checkbox.ts +0 -88
  260. package/src/theme/components/choice-chip.ts +0 -161
  261. package/src/theme/components/close-button.ts +0 -48
  262. package/src/theme/components/code.ts +0 -17
  263. package/src/theme/components/datepicker.ts +0 -198
  264. package/src/theme/components/divider.ts +0 -50
  265. package/src/theme/components/drawer.ts +0 -95
  266. package/src/theme/components/fab.ts +0 -109
  267. package/src/theme/components/form-label.ts +0 -17
  268. package/src/theme/components/form.ts +0 -27
  269. package/src/theme/components/index.ts +0 -45
  270. package/src/theme/components/info-select.ts +0 -85
  271. package/src/theme/components/info-tag.ts +0 -63
  272. package/src/theme/components/input.ts +0 -28
  273. package/src/theme/components/line-icon.ts +0 -129
  274. package/src/theme/components/link.ts +0 -78
  275. package/src/theme/components/list.ts +0 -23
  276. package/src/theme/components/listbox.ts +0 -77
  277. package/src/theme/components/media-controller-button.ts +0 -97
  278. package/src/theme/components/modal.ts +0 -96
  279. package/src/theme/components/numeric-stepper.ts +0 -65
  280. package/src/theme/components/pagination.ts +0 -74
  281. package/src/theme/components/popover.ts +0 -68
  282. package/src/theme/components/pressable-card.ts +0 -72
  283. package/src/theme/components/progress-bar.ts +0 -47
  284. package/src/theme/components/progress-indicator.ts +0 -44
  285. package/src/theme/components/radio-card.ts +0 -134
  286. package/src/theme/components/radio.ts +0 -68
  287. package/src/theme/components/select.ts +0 -74
  288. package/src/theme/components/skeleton.ts +0 -40
  289. package/src/theme/components/static-card.ts +0 -82
  290. package/src/theme/components/stepper.ts +0 -100
  291. package/src/theme/components/switch.ts +0 -112
  292. package/src/theme/components/table.ts +0 -161
  293. package/src/theme/components/tabs.ts +0 -135
  294. package/src/theme/components/textarea.ts +0 -33
  295. package/src/theme/components/toast.ts +0 -28
  296. package/src/theme/components/travel-tag.ts +0 -256
  297. package/src/theme/foundations/borders.ts +0 -11
  298. package/src/theme/foundations/colors.ts +0 -12
  299. package/src/theme/foundations/config.ts +0 -5
  300. package/src/theme/foundations/fontSizes.ts +0 -29
  301. package/src/theme/foundations/fontWeights.ts +0 -5
  302. package/src/theme/foundations/fonts.ts +0 -7
  303. package/src/theme/foundations/index.ts +0 -15
  304. package/src/theme/foundations/lineHeights.ts +0 -6
  305. package/src/theme/foundations/radii.ts +0 -12
  306. package/src/theme/foundations/shadows.ts +0 -8
  307. package/src/theme/foundations/sizes.ts +0 -36
  308. package/src/theme/foundations/spacing.ts +0 -31
  309. package/src/theme/foundations/styles.ts +0 -12
  310. package/src/theme/foundations/textStyles.ts +0 -74
  311. package/src/theme/foundations/zIndices.ts +0 -17
  312. package/src/theme/utils/base-utils.ts +0 -104
  313. package/src/theme/utils/focus-utils.ts +0 -10
  314. package/src/toast/ActionToast.test.tsx +0 -22
  315. package/src/toast/ActionToast.tsx +0 -28
  316. package/src/toast/BaseToast.test.tsx +0 -27
  317. package/src/toast/BaseToast.tsx +0 -75
  318. package/src/toast/ClosableToast.test.tsx +0 -17
  319. package/src/toast/ClosableToast.tsx +0 -40
  320. package/src/toast/useToast.tsx +0 -121
  321. package/src/tooltip/Tooltip.tsx +0 -70
  322. package/src/tooltip/index.tsx +0 -1
@@ -0,0 +1,66 @@
1
+ import { defineSlotRecipe } from "@chakra-ui/react";
2
+ import { alertServiceAnatomy } from "./anatomy";
3
+
4
+ export const alertServiceSlotRecipe = defineSlotRecipe({
5
+ className: "spor-service-alert",
6
+ slots: alertServiceAnatomy.keys(),
7
+ base: {
8
+ root: {
9
+ fontSize: "inherit",
10
+ transitionProperty: "outline, border-radius",
11
+ transitionDuration: "fast",
12
+ borderTopRadius: "none",
13
+ borderBottomRadius: "md",
14
+ backgroundColor: "alert.service.surface",
15
+ outline: "1px solid",
16
+ outlineColor: "alert.service.outline",
17
+ color: "text.inverted",
18
+ boxShadow: "sm",
19
+ },
20
+ itemTrigger: {
21
+ display: "flex",
22
+ flexDirection: "column",
23
+ justifyContent: "center",
24
+ padding: [2, null, null, 2],
25
+ borderBottomRadius: "md",
26
+ borderTopRadius: "none",
27
+ width: "full",
28
+ color: "text.inverted",
29
+ "&:hover": {
30
+ backgroundColor: "alert.service.surface.hover",
31
+ },
32
+ "&:active": {
33
+ backgroundColor: "alert.service.surface.active",
34
+ },
35
+
36
+ _icon: {
37
+ color: "darkGrey",
38
+ },
39
+ },
40
+ itemTriggerTitle: {
41
+ fontSize: ["xs", null, null, "sm"],
42
+ },
43
+ notificationText: {
44
+ fontWeight: "400",
45
+ fontSize: ["2xs", null, null, "xs"],
46
+ textWrap: "nowrap",
47
+ },
48
+ itemBody: {
49
+ paddingInline: 2,
50
+ paddingBottom: ["0.5", null, null, "1"],
51
+ color: "text.inverted",
52
+ "& > p": {
53
+ gap: 2,
54
+ width: "full",
55
+ justifyContent: "center",
56
+ borderBottom: "1px dashed",
57
+ borderColor: "outline.inverted",
58
+ paddingBottom: "3",
59
+ paddingTop: "2",
60
+ _last: {
61
+ borderBottom: "none",
62
+ },
63
+ },
64
+ },
65
+ },
66
+ });
@@ -0,0 +1,72 @@
1
+ import { defineSlotRecipe } from "@chakra-ui/react";
2
+ import { alertAnatomy } from "./anatomy";
3
+
4
+ const createVariant = (variant: string) => ({
5
+ root: {
6
+ borderColor: `alert.${variant}.outline`,
7
+ background: `alert.${variant}.surface`,
8
+ },
9
+ description: {
10
+ color: `alert.${variant}.text.secondary`,
11
+ },
12
+ title: {
13
+ color: `alert.${variant}.text`,
14
+ },
15
+ closeButton: {
16
+ color: `alert.${variant}.text`,
17
+ _hover: {
18
+ bg: `alert.${variant}.surface.hover`,
19
+ _active: {
20
+ bg: `alert.${variant}.surface.active`,
21
+ },
22
+ },
23
+ },
24
+ });
25
+
26
+ export const alertSlotRecipe = defineSlotRecipe({
27
+ className: "spor-alert",
28
+ slots: alertAnatomy.keys(),
29
+ base: {
30
+ root: {
31
+ borderRadius: "sm",
32
+ padding: 2,
33
+ display: "flex",
34
+ maxWidth: "300px",
35
+ justifyContent: "space-between",
36
+ alignItems: "flex-start",
37
+ position: "relative",
38
+ textStyle: "sm",
39
+ border: "sm",
40
+ },
41
+ description: {
42
+ display: "flex",
43
+ alignItems: "flex-start",
44
+ gap: 1.5,
45
+ color: "text",
46
+ },
47
+ content: {
48
+ display: "flex",
49
+ flexDirection: "column",
50
+ gap: "2",
51
+ alignItems: "flex-start",
52
+ },
53
+ title: {
54
+ fontWeight: "bold",
55
+ },
56
+ },
57
+ variants: {
58
+ variant: {
59
+ important: createVariant("important"),
60
+ alt: createVariant("alt"),
61
+ error: createVariant("error"),
62
+ success: createVariant("success"),
63
+ info: createVariant("info"),
64
+ neutral: createVariant("neutral"),
65
+ "error-secondary": createVariant("error-secondary"),
66
+ service: createVariant("service"),
67
+ },
68
+ },
69
+ defaultVariants: {
70
+ variant: "info",
71
+ },
72
+ });
@@ -0,0 +1,269 @@
1
+ import { createAnatomy } from "@ark-ui/react/anatomy";
2
+ import { popoverAnatomy as arkPopoverAnatomy } from "@ark-ui/react/popover";
3
+
4
+ export const accordionAnatomy = createAnatomy("accordion").parts(
5
+ "root",
6
+ "itemTrigger",
7
+ "item",
8
+ "itemBody",
9
+ "itemContent",
10
+ "itemIndicator",
11
+ );
12
+
13
+ export const alertAnatomy = createAnatomy("alert").parts(
14
+ "root",
15
+ "indicator",
16
+ "title",
17
+ "closeButton",
18
+ "content",
19
+ "description",
20
+ );
21
+
22
+ export const alertExpandableAnatomy = createAnatomy("alert-expandable").parts(
23
+ "root",
24
+ "itemTrigger",
25
+ "itemContent",
26
+ "indicator",
27
+ "title",
28
+ "itemIndicator",
29
+ );
30
+
31
+ export const alertServiceAnatomy = createAnatomy("service-alert").parts(
32
+ "root",
33
+ "itemTrigger",
34
+ "itemTriggerTitle",
35
+ "notificationText",
36
+ "itemContent",
37
+ "itemBody",
38
+ );
39
+
40
+ export const listAnatomy = createAnatomy("list").parts(
41
+ "root",
42
+ "item",
43
+ "icon",
44
+ "indicator",
45
+ );
46
+
47
+ export const tableAnatomy = createAnatomy("table").parts(
48
+ "root",
49
+ "body",
50
+ "row",
51
+ "cell",
52
+ "columnHeader",
53
+ "caption",
54
+ "footer",
55
+ "header",
56
+ );
57
+
58
+ export const fieldAnatomy = createAnatomy("field").parts(
59
+ "root",
60
+ "label",
61
+ "requiredIndicator",
62
+ "helperText",
63
+ "errorText",
64
+ );
65
+
66
+ export const dialogAnatomy = createAnatomy("dialog").parts(
67
+ "header",
68
+ "body",
69
+ "footer",
70
+ "backdrop",
71
+ "positioner",
72
+ "content",
73
+ "title",
74
+ "description",
75
+ "closeTrigger",
76
+ );
77
+
78
+ export const paginationAnatomy = createAnatomy("pagination").parts(
79
+ "list",
80
+ "item",
81
+ );
82
+ export const linjetagAnatomy = createAnatomy("linjetag").parts(
83
+ "iconContainer",
84
+ "icon",
85
+ "root",
86
+ "title",
87
+ "desc",
88
+ );
89
+
90
+ export const infoTagAnatomy = createAnatomy("info-tag").parts(
91
+ "container",
92
+ "iconContainer",
93
+ "icon",
94
+ "textContainer",
95
+ "title",
96
+ "description",
97
+ "walk",
98
+ );
99
+
100
+ export const travelTagAnatomy = createAnatomy("travel-tag").parts(
101
+ "container",
102
+ "iconContainer",
103
+ "icon",
104
+ "textContainer",
105
+ "title",
106
+ "description",
107
+ "deviationIcon",
108
+ );
109
+
110
+ export const drawerAnatomy = createAnatomy("drawer").parts(
111
+ "header",
112
+ "body",
113
+ "backdrop",
114
+ "positioner",
115
+ "content",
116
+ "footer",
117
+ "title",
118
+ "description",
119
+ "closeTrigger",
120
+ );
121
+
122
+ export const checkboxAnatomy = createAnatomy("checkbox").parts(
123
+ "root",
124
+ "control",
125
+ "label",
126
+ "description",
127
+ "addon",
128
+ "indicator",
129
+ "content",
130
+ );
131
+
132
+ export const breadcrumbAnatomy = createAnatomy("breadcrumb").parts(
133
+ "link",
134
+ "currentLink",
135
+ "list",
136
+ "separator",
137
+ );
138
+
139
+ export const stepperAnatomy = createAnatomy("stepper").parts(
140
+ "root",
141
+ "container",
142
+ "innerContainer",
143
+ "title",
144
+ "stepCounter",
145
+ "stepContainer",
146
+ "stepButton",
147
+ "stepNumber",
148
+ "stepTitle",
149
+ "closeButton",
150
+ "backButton",
151
+ );
152
+
153
+ export const radioCardAnatomy = createAnatomy("radio-card").parts(
154
+ "root",
155
+ "item",
156
+ "label",
157
+ "itemText",
158
+ "itemDescription",
159
+ "itemContent",
160
+ );
161
+
162
+ export const radioAnatomy = createAnatomy("radio").parts(
163
+ "root",
164
+ "item",
165
+ "itemControl",
166
+ "itemText",
167
+ "label",
168
+ );
169
+
170
+ export const listBoxAnatomy = createAnatomy("listbox").parts(
171
+ "root",
172
+ "item",
173
+ "label",
174
+ "description",
175
+ );
176
+
177
+ export const NativeSelectAnatomy = createAnatomy("native-select").parts(
178
+ "root",
179
+ "field",
180
+ "icon",
181
+ );
182
+
183
+ export const tabsAnatomy = createAnatomy("tabs").parts(
184
+ "root",
185
+ "list",
186
+ "trigger",
187
+ "content",
188
+ "indicator",
189
+ );
190
+
191
+ export const switchAnatomy = createAnatomy("switch").parts(
192
+ "root",
193
+ "thumb",
194
+ "control",
195
+ "label",
196
+ );
197
+
198
+ export const selectAnatomy = createAnatomy("select").parts(
199
+ "root",
200
+ "trigger",
201
+ "indicatorGroup",
202
+ "indicator",
203
+ "selectContent",
204
+ "item",
205
+ "control",
206
+ "itemText",
207
+ "itemDescription",
208
+ "itemGroup",
209
+ "itemGroupLabel",
210
+ "label",
211
+ "valueText",
212
+ );
213
+ export const cardSelectAnatomy = createAnatomy("card-select").parts(
214
+ "trigger",
215
+ "card",
216
+ );
217
+
218
+ export const numericStepperAnatomy = createAnatomy("numeric-stepper").parts(
219
+ "root",
220
+ "container",
221
+ "input",
222
+ "text",
223
+ "button",
224
+ );
225
+ export const mediaControllerAnatomy = createAnatomy(
226
+ "media-controller-button",
227
+ ).parts("root", "icon");
228
+ export const progressBarAnotomy = createAnatomy("progress-bar").parts(
229
+ "container",
230
+ "background",
231
+ "progress",
232
+ "description",
233
+ "disabledBackground",
234
+ );
235
+
236
+ export const toastAnatomy = createAnatomy("toast").parts(
237
+ "root",
238
+ "title",
239
+ "description",
240
+ "indicator",
241
+ "closeTrigger",
242
+ "actionTrigger",
243
+ );
244
+
245
+ export const floatingActionButtonAnatomy = createAnatomy(
246
+ "floating-action-button",
247
+ ).parts("root", "icon", "text");
248
+
249
+ export const popoverAnatomy = arkPopoverAnatomy.extendWith(
250
+ "header",
251
+ "body",
252
+ "footer",
253
+ );
254
+
255
+ export const datepickerAnatomy = createAnatomy("datepicker").parts(
256
+ "wrapper",
257
+ "calendarTriggerButton",
258
+ "arrow",
259
+ "calendarPopover",
260
+ "calendar",
261
+ "weekdays",
262
+ "weekend",
263
+ "dateCell",
264
+ "inputLabel",
265
+ "dateTimeSegment",
266
+ "cell",
267
+ "box",
268
+ "rangeCalendarPopover",
269
+ );
@@ -0,0 +1,61 @@
1
+ import { defineSlotRecipe } from "@chakra-ui/react";
2
+ import { breadcrumbAnatomy } from "./anatomy";
3
+ import tokens from "@vygruppen/spor-design-tokens";
4
+
5
+ export const breadcrumbSlotRecipe = defineSlotRecipe({
6
+ slots: breadcrumbAnatomy.keys(),
7
+ base: {
8
+ list: {
9
+ display: "inline-flex",
10
+ flexWrap: "wrap",
11
+ gap: 1,
12
+ alignItems: "center",
13
+ },
14
+ link: {
15
+ cursor: "pointer",
16
+ padding: 0.5,
17
+ borderRadius: "xs",
18
+ },
19
+ currentLink: {
20
+ borderRadius: "xs",
21
+ cursor: "default",
22
+ },
23
+ separator: {
24
+ "& svg": {
25
+ color: "icon.disabled",
26
+ },
27
+ },
28
+ },
29
+
30
+ variants: {
31
+ variant: {
32
+ core: {
33
+ link: {
34
+ _hover: {
35
+ outlineColor: "core.outline.hover",
36
+ outlineWidth: tokens.size.stroke.md,
37
+ outlineStyle: "solid",
38
+ _active: {
39
+ backgroundColor: "core.surface.active",
40
+ outline: "none",
41
+ },
42
+ },
43
+ },
44
+ },
45
+ ghost: {
46
+ link: {
47
+ _hover: {
48
+ backgroundColor: "ghost.surface.hover",
49
+ _active: {
50
+ backgroundColor: "ghost.surface.active",
51
+ },
52
+ },
53
+ },
54
+ },
55
+ },
56
+ },
57
+
58
+ defaultVariants: {
59
+ variant: "core",
60
+ },
61
+ });
@@ -0,0 +1,89 @@
1
+ import { defineSlotRecipe } from "@chakra-ui/react";
2
+ import tokens from "@vygruppen/spor-design-tokens";
3
+ import { brandBackground, brandText } from "../utils/brand-utils";
4
+ import { coreBackground, coreText } from "../utils/core-utils";
5
+ import { checkboxAnatomy } from "./anatomy";
6
+
7
+ export const checkboxSlotRecipe = defineSlotRecipe({
8
+ className: "spor-checkbox",
9
+ slots: checkboxAnatomy.keys(),
10
+ base: {
11
+ root: {
12
+ display: "flex",
13
+ gap: 1.5,
14
+ _hover: {
15
+ "& > input:enabled:not([aria-invalid]) + .spor-checkbox__control": {
16
+ ...coreBackground("hover"),
17
+ borderColor: brandBackground("hover").backgroundColor,
18
+ },
19
+ "& > input:enabled:checked:not([aria-invalid]) + .spor-checkbox__control":
20
+ {
21
+ ...brandBackground("hover"),
22
+ borderColor: brandBackground("hover").backgroundColor,
23
+ },
24
+ },
25
+ },
26
+ indicator: {
27
+ width: "100%",
28
+ height: "100%",
29
+ borderColor: "white",
30
+ marginTop: -1,
31
+ transform: "scale(1)",
32
+ opacity: 0,
33
+ _checked: {
34
+ opacity: 1,
35
+ transition: "opacity 300ms cubic-bezier(0.65, 0.25, 0.56, 0.96)",
36
+ },
37
+ },
38
+ control: {
39
+ width: 4,
40
+ height: 4,
41
+ transitionProperty: "background, border-color",
42
+ transitionDuration: "moderate",
43
+ border: "2px solid",
44
+ borderColor: "core.outline",
45
+ borderRadius: "xs",
46
+ ...coreBackground("default"),
47
+
48
+ _checked: {
49
+ ...brandText("default"),
50
+ ...brandBackground("default"),
51
+ borderColor: brandBackground("default").backgroundColor,
52
+ _focus: {
53
+ borderColor: "brand.surface.active",
54
+ },
55
+
56
+ _disabled: {
57
+ ...coreBackground("disabled"),
58
+ ...coreText("disabled"),
59
+ borderColor: "currentColor",
60
+ },
61
+
62
+ _invalid: {
63
+ backgroundColor: "brightRed",
64
+ borderColor: "brightRed",
65
+ },
66
+ },
67
+ _disabled: {
68
+ ...coreBackground("disabled"),
69
+ borderColor: coreText("disabled").color,
70
+ },
71
+ _invalid: {
72
+ ...coreBackground("default"),
73
+ borderColor: "outline.error",
74
+ },
75
+ _focus: {
76
+ outlineStyle: "solid",
77
+ outlineColor: "outline.focus",
78
+ outlineOffset: tokens.size.stroke.md,
79
+ outlineWidth: tokens.size.stroke.md,
80
+ borderColor: "core.outline",
81
+ borderWidth: tokens.size.stroke.md,
82
+ },
83
+ },
84
+ label: {
85
+ userSelect: "none",
86
+ _disabled: { opacity: 0.4 },
87
+ },
88
+ },
89
+ });