@commercetools/nimbus 0.0.1 → 0.0.3-alpha.2

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 (302) hide show
  1. package/dist/index.d.ts +1412 -0
  2. package/dist/index.js +22451 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/index.umd.cjs +27 -0
  5. package/dist/index.umd.cjs.map +1 -0
  6. package/package.json +74 -40
  7. package/.storybook/apca-check/index.ts +0 -150
  8. package/.storybook/main.ts +0 -64
  9. package/.storybook/preview.tsx +0 -92
  10. package/.storybook/vitest.setup.ts +0 -13
  11. package/docs/architecture-decisions/adr-0001-consumer-component-apis.md +0 -177
  12. package/docs/architecture-decisions/adr-0002-compound-component-extraction.md +0 -82
  13. package/src/components/accordion/accordion-context.tsx +0 -17
  14. package/src/components/accordion/accordion.mdx +0 -172
  15. package/src/components/accordion/accordion.recipe.tsx +0 -98
  16. package/src/components/accordion/accordion.slots.tsx +0 -39
  17. package/src/components/accordion/accordion.stories.tsx +0 -188
  18. package/src/components/accordion/accordion.tsx +0 -16
  19. package/src/components/accordion/accordion.types.tsx +0 -54
  20. package/src/components/accordion/components/accordion-content.tsx +0 -28
  21. package/src/components/accordion/components/accordion-group.tsx +0 -27
  22. package/src/components/accordion/components/accordion-header.tsx +0 -63
  23. package/src/components/accordion/components/accordion-item.tsx +0 -87
  24. package/src/components/accordion/index.ts +0 -2
  25. package/src/components/alert/alert.mdx +0 -92
  26. package/src/components/alert/alert.recipe.tsx +0 -65
  27. package/src/components/alert/alert.slots.tsx +0 -46
  28. package/src/components/alert/alert.stories.tsx +0 -308
  29. package/src/components/alert/alert.tsx +0 -18
  30. package/src/components/alert/alert.types.tsx +0 -70
  31. package/src/components/alert/components/alert.actions.tsx +0 -27
  32. package/src/components/alert/components/alert.description.tsx +0 -27
  33. package/src/components/alert/components/alert.dismiss-button.tsx +0 -41
  34. package/src/components/alert/components/alert.root.tsx +0 -92
  35. package/src/components/alert/components/alert.title.tsx +0 -29
  36. package/src/components/alert/index.ts +0 -2
  37. package/src/components/avatar/avatar.mdx +0 -80
  38. package/src/components/avatar/avatar.recipe.tsx +0 -36
  39. package/src/components/avatar/avatar.slots.tsx +0 -16
  40. package/src/components/avatar/avatar.stories.tsx +0 -136
  41. package/src/components/avatar/avatar.tsx +0 -34
  42. package/src/components/avatar/avatar.types.ts +0 -33
  43. package/src/components/avatar/index.ts +0 -2
  44. package/src/components/badge/badge.mdx +0 -91
  45. package/src/components/badge/badge.recipe.tsx +0 -72
  46. package/src/components/badge/badge.slots.tsx +0 -8
  47. package/src/components/badge/badge.stories.tsx +0 -124
  48. package/src/components/badge/badge.tsx +0 -35
  49. package/src/components/badge/badge.types.tsx +0 -40
  50. package/src/components/badge/index.ts +0 -2
  51. package/src/components/bleed/bleed.tsx +0 -1
  52. package/src/components/bleed/index.ts +0 -1
  53. package/src/components/box/box.mdx +0 -115
  54. package/src/components/box/box.stories.tsx +0 -71
  55. package/src/components/box/box.tsx +0 -11
  56. package/src/components/box/index.ts +0 -1
  57. package/src/components/button/button.mdx +0 -169
  58. package/src/components/button/button.recipe.ts +0 -185
  59. package/src/components/button/button.slots.tsx +0 -45
  60. package/src/components/button/button.stories.tsx +0 -369
  61. package/src/components/button/button.tsx +0 -37
  62. package/src/components/button/button.types.ts +0 -14
  63. package/src/components/button/index.ts +0 -2
  64. package/src/components/card/card.mdx +0 -92
  65. package/src/components/card/card.recipe.tsx +0 -71
  66. package/src/components/card/card.slots.tsx +0 -50
  67. package/src/components/card/card.stories.tsx +0 -175
  68. package/src/components/card/card.tsx +0 -9
  69. package/src/components/card/card.types.ts +0 -22
  70. package/src/components/card/components/card.content.tsx +0 -29
  71. package/src/components/card/components/card.header.tsx +0 -28
  72. package/src/components/card/components/card.root.tsx +0 -62
  73. package/src/components/card/index.ts +0 -2
  74. package/src/components/checkbox/checkbox.mdx +0 -78
  75. package/src/components/checkbox/checkbox.recipe.tsx +0 -116
  76. package/src/components/checkbox/checkbox.slots.tsx +0 -33
  77. package/src/components/checkbox/checkbox.stories.tsx +0 -200
  78. package/src/components/checkbox/checkbox.tsx +0 -77
  79. package/src/components/checkbox/checkbox.types.tsx +0 -22
  80. package/src/components/checkbox/index.ts +0 -2
  81. package/src/components/code/code.mdx +0 -17
  82. package/src/components/code/code.recipe.ts +0 -63
  83. package/src/components/code/code.tsx +0 -1
  84. package/src/components/code/index.ts +0 -1
  85. package/src/components/dialog/dialog.mdx +0 -20
  86. package/src/components/dialog/dialog.recipe.ts +0 -254
  87. package/src/components/dialog/dialog.tsx +0 -61
  88. package/src/components/dialog/index.ts +0 -1
  89. package/src/components/em/em.mdx +0 -17
  90. package/src/components/em/em.tsx +0 -1
  91. package/src/components/em/index.ts +0 -1
  92. package/src/components/flex/flex.mdx +0 -41
  93. package/src/components/flex/flex.tsx +0 -1
  94. package/src/components/flex/index.ts +0 -1
  95. package/src/components/grid/grid.mdx +0 -156
  96. package/src/components/grid/grid.stories.tsx +0 -151
  97. package/src/components/grid/grid.tsx +0 -29
  98. package/src/components/grid/index.ts +0 -1
  99. package/src/components/heading/heading.mdx +0 -23
  100. package/src/components/heading/heading.recipe.ts +0 -49
  101. package/src/components/heading/heading.tsx +0 -1
  102. package/src/components/heading/index.ts +0 -1
  103. package/src/components/highlight/highlight.mdx +0 -18
  104. package/src/components/highlight/highlight.tsx +0 -1
  105. package/src/components/highlight/index.ts +0 -1
  106. package/src/components/icon-button/icon-button.mdx +0 -98
  107. package/src/components/icon-button/icon-button.stories.tsx +0 -188
  108. package/src/components/icon-button/icon-button.tsx +0 -21
  109. package/src/components/icon-button/icon-button.types.tsx +0 -10
  110. package/src/components/icon-button/index.ts +0 -2
  111. package/src/components/index.ts +0 -33
  112. package/src/components/input/index.ts +0 -1
  113. package/src/components/input/input.mdx +0 -20
  114. package/src/components/input/input.recipe.ts +0 -95
  115. package/src/components/input/input.tsx +0 -1
  116. package/src/components/input-group/index.ts +0 -1
  117. package/src/components/input-group/input-group.mdx +0 -20
  118. package/src/components/input-group/input-group.tsx +0 -44
  119. package/src/components/kbd/index.ts +0 -1
  120. package/src/components/kbd/kbd.mdx +0 -18
  121. package/src/components/kbd/kbd.recipe.ts +0 -57
  122. package/src/components/kbd/kbd.tsx +0 -1
  123. package/src/components/link/index.ts +0 -2
  124. package/src/components/link/link.mdx +0 -77
  125. package/src/components/link/link.recipe.ts +0 -52
  126. package/src/components/link/link.slots.tsx +0 -29
  127. package/src/components/link/link.stories.tsx +0 -204
  128. package/src/components/link/link.tsx +0 -38
  129. package/src/components/link/link.types.tsx +0 -26
  130. package/src/components/list/index.ts +0 -1
  131. package/src/components/list/list.mdx +0 -18
  132. package/src/components/list/list.recipe.ts +0 -68
  133. package/src/components/list/list.tsx +0 -9
  134. package/src/components/loading-spinner/index.ts +0 -2
  135. package/src/components/loading-spinner/loading-spinner.mdx +0 -92
  136. package/src/components/loading-spinner/loading-spinner.recipe.tsx +0 -70
  137. package/src/components/loading-spinner/loading-spinner.slots.tsx +0 -38
  138. package/src/components/loading-spinner/loading-spinner.stories.tsx +0 -97
  139. package/src/components/loading-spinner/loading-spinner.tsx +0 -50
  140. package/src/components/loading-spinner/loading-spinner.types.tsx +0 -21
  141. package/src/components/nimbus-provider/color-mode.tsx +0 -32
  142. package/src/components/nimbus-provider/index.ts +0 -2
  143. package/src/components/nimbus-provider/nimbus-provider.mdx +0 -21
  144. package/src/components/nimbus-provider/nimbus-provider.tsx +0 -51
  145. package/src/components/select/components/select.clear-button.tsx +0 -31
  146. package/src/components/select/components/select.option-group.tsx +0 -48
  147. package/src/components/select/components/select.option.tsx +0 -21
  148. package/src/components/select/components/select.options.tsx +0 -23
  149. package/src/components/select/components/select.root.tsx +0 -81
  150. package/src/components/select/index.ts +0 -2
  151. package/src/components/select/select.mdx +0 -170
  152. package/src/components/select/select.recipe.tsx +0 -216
  153. package/src/components/select/select.slots.tsx +0 -58
  154. package/src/components/select/select.stories.tsx +0 -841
  155. package/src/components/select/select.tsx +0 -18
  156. package/src/components/select/select.types.tsx +0 -37
  157. package/src/components/simple-grid/index.ts +0 -1
  158. package/src/components/simple-grid/simple-grid.mdx +0 -133
  159. package/src/components/simple-grid/simple-grid.stories.tsx +0 -143
  160. package/src/components/simple-grid/simple-grid.tsx +0 -31
  161. package/src/components/stack/index.ts +0 -1
  162. package/src/components/stack/stack.mdx +0 -88
  163. package/src/components/stack/stack.stories.tsx +0 -82
  164. package/src/components/stack/stack.tsx +0 -15
  165. package/src/components/table/index.ts +0 -1
  166. package/src/components/table/table.mdx +0 -23
  167. package/src/components/table/table.recipe.ts +0 -170
  168. package/src/components/table/table.tsx +0 -43
  169. package/src/components/text/index.ts +0 -1
  170. package/src/components/text/text.mdx +0 -244
  171. package/src/components/text/text.tsx +0 -23
  172. package/src/components/text-input/index.ts +0 -2
  173. package/src/components/text-input/text-input.mdx +0 -118
  174. package/src/components/text-input/text-input.recipe.tsx +0 -68
  175. package/src/components/text-input/text-input.slots.tsx +0 -24
  176. package/src/components/text-input/text-input.stories.tsx +0 -282
  177. package/src/components/text-input/text-input.tsx +0 -39
  178. package/src/components/text-input/text-input.types.ts +0 -7
  179. package/src/components/toggle-button-group/components/toggle-button-group.button.tsx +0 -14
  180. package/src/components/toggle-button-group/components/toggle-button-group.root.tsx +0 -15
  181. package/src/components/toggle-button-group/index.ts +0 -2
  182. package/src/components/toggle-button-group/toggle-button-group.mdx +0 -94
  183. package/src/components/toggle-button-group/toggle-button-group.recipe.tsx +0 -64
  184. package/src/components/toggle-button-group/toggle-button-group.slots.tsx +0 -26
  185. package/src/components/toggle-button-group/toggle-button-group.stories.tsx +0 -311
  186. package/src/components/toggle-button-group/toggle-button-group.tsx +0 -12
  187. package/src/components/toggle-button-group/toggle-button-group.types.tsx +0 -62
  188. package/src/components/tooltip/index.ts +0 -4
  189. package/src/components/tooltip/make-element-focusable.stories.tsx +0 -56
  190. package/src/components/tooltip/make-element-focusable.tsx +0 -57
  191. package/src/components/tooltip/tooltip-trigger.stories.tsx +0 -157
  192. package/src/components/tooltip/tooltip-trigger.tsx +0 -15
  193. package/src/components/tooltip/tooltip.mdx +0 -48
  194. package/src/components/tooltip/tooltip.recipe.ts +0 -26
  195. package/src/components/tooltip/tooltip.slots.ts +0 -35
  196. package/src/components/tooltip/tooltip.stories.tsx +0 -139
  197. package/src/components/tooltip/tooltip.tsx +0 -31
  198. package/src/components/tooltip/tooltip.types.ts +0 -44
  199. package/src/components/visually-hidden/index.ts +0 -1
  200. package/src/components/visually-hidden/visually-hidden.mdx +0 -61
  201. package/src/components/visually-hidden/visually-hidden.stories.tsx +0 -124
  202. package/src/components/visually-hidden/visually-hidden.tsx +0 -18
  203. package/src/docs/accessibility.mdx +0 -21
  204. package/src/docs/background.mdx +0 -154
  205. package/src/docs/border.mdx +0 -226
  206. package/src/docs/changelog.mdx +0 -17
  207. package/src/docs/components-layout.mdx +0 -22
  208. package/src/docs/components.mdx +0 -17
  209. package/src/docs/data-display.mdx +0 -23
  210. package/src/docs/display.mdx +0 -55
  211. package/src/docs/effects.mdx +0 -73
  212. package/src/docs/feedback.mdx +0 -22
  213. package/src/docs/filters.mdx +0 -268
  214. package/src/docs/flex-and-grid.mdx +0 -445
  215. package/src/docs/forms.mdx +0 -22
  216. package/src/docs/generated/index.mdx +0 -16
  217. package/src/docs/getting-started.mdx +0 -17
  218. package/src/docs/home.mdx +0 -56
  219. package/src/docs/hooks.mdx +0 -16
  220. package/src/docs/inputs.mdx +0 -21
  221. package/src/docs/installation.mdx +0 -60
  222. package/src/docs/interactivity.mdx +0 -278
  223. package/src/docs/known-issues.mdx +0 -19
  224. package/src/docs/layout.mdx +0 -301
  225. package/src/docs/list.mdx +0 -82
  226. package/src/docs/markdown.mdx +0 -234
  227. package/src/docs/media.mdx +0 -22
  228. package/src/docs/naivgation.mdx +0 -22
  229. package/src/docs/playground.mdx +0 -16
  230. package/src/docs/rfcs-component-structure-rfcs.mdx +0 -17
  231. package/src/docs/rfcs-component-structure.mdx +0 -74
  232. package/src/docs/rfcs-hook-structure.mdx +0 -59
  233. package/src/docs/sizing.mdx +0 -210
  234. package/src/docs/spacing.mdx +0 -193
  235. package/src/docs/style-props-typography.mdx +0 -373
  236. package/src/docs/style-props.mdx +0 -15
  237. package/src/docs/svg.mdx +0 -58
  238. package/src/docs/tables.mdx +0 -95
  239. package/src/docs/toc.mdx +0 -39
  240. package/src/docs/tokens/animations.mdx +0 -68
  241. package/src/docs/tokens/aspect-ratios.mdx +0 -21
  242. package/src/docs/tokens/blurs.mdx +0 -20
  243. package/src/docs/tokens/borders.mdx +0 -25
  244. package/src/docs/tokens/breakpoints.mdx +0 -35
  245. package/src/docs/tokens/colors.mdx +0 -86
  246. package/src/docs/tokens/cursors.mdx +0 -21
  247. package/src/docs/tokens/radii.mdx +0 -23
  248. package/src/docs/tokens/shadows.mdx +0 -21
  249. package/src/docs/tokens/sizes.mdx +0 -54
  250. package/src/docs/tokens/spacing.mdx +0 -35
  251. package/src/docs/tokens/typography.mdx +0 -61
  252. package/src/docs/tokens/z-indices.mdx +0 -23
  253. package/src/docs/tokens-other.mdx +0 -17
  254. package/src/docs/tokens.mdx +0 -16
  255. package/src/docs/transforms.mdx +0 -150
  256. package/src/docs/transitions.mdx +0 -164
  257. package/src/docs/typography.mdx +0 -17
  258. package/src/docs/utilities.mdx +0 -17
  259. package/src/hooks/index.ts +0 -2
  260. package/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.mdx +0 -54
  261. package/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.ts +0 -1
  262. package/src/hooks/use-hotkeys/use-hotkeys.mdx +0 -48
  263. package/src/hooks/use-hotkeys/use-hotkeys.stories.tsx +0 -69
  264. package/src/hooks/use-hotkeys/use-hotkeys.ts +0 -1
  265. package/src/index.ts +0 -3
  266. package/src/test/utils.tsx +0 -20
  267. package/src/theme/animation-styles.ts +0 -52
  268. package/src/theme/breakpoints.ts +0 -32
  269. package/src/theme/global-css.ts +0 -53
  270. package/src/theme/index.ts +0 -35
  271. package/src/theme/keyframes.ts +0 -192
  272. package/src/theme/layer-styles.ts +0 -12
  273. package/src/theme/recipes/index.ts +0 -21
  274. package/src/theme/semantic-tokens/colors.ts +0 -55
  275. package/src/theme/semantic-tokens/index.ts +0 -9
  276. package/src/theme/semantic-tokens/radii.ts +0 -3
  277. package/src/theme/semantic-tokens/shadows.ts +0 -4
  278. package/src/theme/slot-recipes/index.ts +0 -15
  279. package/src/theme/text-styles.ts +0 -8
  280. package/src/theme/tokens/animations.ts +0 -4
  281. package/src/theme/tokens/aspect-ratios.ts +0 -5
  282. package/src/theme/tokens/blurs.ts +0 -5
  283. package/src/theme/tokens/borders.ts +0 -4
  284. package/src/theme/tokens/colors.ts +0 -8
  285. package/src/theme/tokens/cursor.ts +0 -4
  286. package/src/theme/tokens/durations.ts +0 -4
  287. package/src/theme/tokens/easings.ts +0 -4
  288. package/src/theme/tokens/font-sizes.ts +0 -4
  289. package/src/theme/tokens/font-weights.ts +0 -4
  290. package/src/theme/tokens/fonts.ts +0 -4
  291. package/src/theme/tokens/index.ts +0 -57
  292. package/src/theme/tokens/letter-spacings.ts +0 -24
  293. package/src/theme/tokens/line-heights.ts +0 -4
  294. package/src/theme/tokens/radii.ts +0 -4
  295. package/src/theme/tokens/sizes.ts +0 -120
  296. package/src/theme/tokens/spacing.ts +0 -4
  297. package/src/theme/tokens/z-index.ts +0 -4
  298. package/src/utils/extractStyleProps.ts +0 -26
  299. package/src/utils/fixedForwardRef.ts +0 -17
  300. package/tsconfig.json +0 -38
  301. package/vite.config.ts +0 -54
  302. package/vitest.config.ts +0 -50
@@ -1,29 +0,0 @@
1
- import {
2
- type HTMLChakraProps,
3
- type RecipeProps,
4
- type UnstyledProp,
5
- createRecipeContext,
6
- } from "@chakra-ui/react";
7
-
8
- import { linkRecipe } from "./link.recipe";
9
-
10
- /**
11
- * Base recipe props interface that combines Chakra UI's recipe props
12
- * with the unstyled prop option for the a element.
13
- */
14
- interface LinkRecipeProps extends RecipeProps<"a">, UnstyledProp {}
15
-
16
- /**
17
- * Root props interface that extends Chakra's HTML props with our recipe props.
18
- * This creates a complete set of props for the root element, combining
19
- * HTML attributes, Chakra's styling system, and our custom recipe props.
20
- */
21
- export type LinkRootProps = HTMLChakraProps<"a", LinkRecipeProps>;
22
-
23
- const { withContext } = createRecipeContext({ recipe: linkRecipe });
24
-
25
- /**
26
- * Root component that provides the styling context for the Link component.
27
- * Uses Chakra UI's recipe context system for consistent styling across instances.
28
- */
29
- export const LinkRoot = withContext<HTMLAnchorElement, LinkRootProps>("a");
@@ -1,204 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { Link } from "./link";
3
- import { Box, Stack } from "@/components";
4
- import type { LinkProps } from "./link.types";
5
- import { userEvent, within, expect, fn } from "@storybook/test";
6
- import { createRef } from "react";
7
-
8
- const sizes: LinkProps["size"][] = ["xs", "sm", "md"];
9
- const fontColors: LinkProps["fontColor"][] = ["primary", "inherit"];
10
-
11
- /**
12
- * The Link component allows a user to navigate to a different page or resource.
13
- */
14
- const meta: Meta<typeof Link> = {
15
- title: "components/Link",
16
- component: Link,
17
- };
18
-
19
- export default meta;
20
-
21
- /**
22
- * Story type for TypeScript support
23
- * StoryObj provides type checking for our story configurations
24
- */
25
- type Story = StoryObj<typeof Link>;
26
-
27
- /**
28
- * Base story
29
- * Demonstrates the most basic implementation
30
- * Uses the args pattern for dynamic control panel inputs
31
- */
32
- export const Base: Story = {
33
- args: {
34
- children: "Demo Link",
35
- onClick: fn(),
36
- ["data-testid"]: "link-test",
37
- ["aria-label"]: "link-to-somewhere",
38
- ["href"]: "#",
39
- },
40
- play: async ({ canvasElement, step }) => {
41
- const canvas = within(canvasElement);
42
- const link = canvas.getByTestId("link-test");
43
-
44
- await step("Uses an <a> element by default", async () => {
45
- await expect(link.tagName).toBe("A");
46
- });
47
-
48
- await step("Forwards data- & aria-attributes", async () => {
49
- await expect(link).toHaveAttribute("data-testid", "link-test");
50
- await expect(link).toHaveAttribute("aria-label", "link-to-somewhere");
51
- });
52
-
53
- await step("Renders children", async () => {
54
- await expect(link).toHaveTextContent("Demo Link");
55
- });
56
-
57
- await step("Is focusable with <tab> key", async () => {
58
- await userEvent.tab();
59
- await expect(link).toHaveFocus();
60
- });
61
- },
62
- };
63
-
64
- /**
65
- * Showcase Sizes
66
- */
67
- export const Sizes: Story = {
68
- render: (args) => {
69
- return (
70
- <Stack direction="row" gap="400" alignItems="center">
71
- {sizes.map((size) => (
72
- <Link key={size as string} {...args} size={size} />
73
- ))}
74
- </Stack>
75
- );
76
- },
77
-
78
- args: {
79
- children: "Demo Link",
80
- },
81
- };
82
-
83
- /**
84
- * Showcase FontColors
85
- */
86
- export const FontColors: Story = {
87
- render: (args) => {
88
- return (
89
- <Box p="400" bg="primary.7">
90
- <Stack direction="row" gap="500" alignItems="center">
91
- {fontColors.map((color) => (
92
- <p key={color as string} style={{ color: "white" }}>
93
- This is a {JSON.stringify(color)}{" "}
94
- <Link key={color as string} {...args} fontColor={color} /> in
95
- action.
96
- </p>
97
- ))}
98
- </Stack>
99
- </Box>
100
- );
101
- },
102
-
103
- args: {
104
- children: "Link",
105
- },
106
- };
107
-
108
- /**
109
- * Showcase asChild
110
- */
111
- export const AsChild: Story = {
112
- render: (args) => {
113
- return (
114
- <Stack direction="row" gap="400" alignItems="center">
115
- <Link {...args}>{args.children}</Link>
116
- </Stack>
117
- );
118
- },
119
-
120
- args: {
121
- children: <span>I am just a span</span>,
122
- asChild: true,
123
- ["data-testid"]: "test",
124
- },
125
- play: async ({ canvasElement, step }) => {
126
- const canvas = within(canvasElement);
127
- const link = canvas.getByTestId("test");
128
-
129
- await step("Uses a <span> element", async () => {
130
- await expect(link.tagName).toBe("SPAN");
131
- });
132
-
133
- await step("Is focusable with <tab> key", async () => {
134
- await userEvent.tab();
135
- await expect(link).toHaveFocus();
136
- });
137
- },
138
- };
139
-
140
- /**
141
- * Showcase withRef
142
- */
143
- const linkRef = createRef<HTMLAnchorElement>();
144
- export const WithRef: Story = {
145
- args: {
146
- children: "Demo Link",
147
- ["data-testid"]: "ref-test",
148
- },
149
- render: (args) => {
150
- return (
151
- <Link ref={linkRef} {...args}>
152
- {args.children}
153
- </Link>
154
- );
155
- },
156
- play: async ({ canvasElement, step }) => {
157
- const canvas = within(canvasElement);
158
- const button = canvas.getByTestId("ref-test");
159
-
160
- await step("Does accept ref's", async () => {
161
- await expect(linkRef.current).toBe(button);
162
- });
163
- },
164
- };
165
-
166
- export const withCustomHref: Story = {
167
- args: {
168
- children: "Demo Link",
169
- href: "https://commercetools.com",
170
- },
171
- render: (args) => {
172
- return <Link {...args}>{args.children}</Link>;
173
- },
174
- play: async ({ canvasElement, step }) => {
175
- const canvas = within(canvasElement);
176
- const link = canvas.getByText("Demo Link");
177
-
178
- await step("Uses the provided href", async () => {
179
- await expect(link).toHaveAttribute("href", "https://commercetools.com");
180
- });
181
- },
182
- };
183
-
184
- export const SmokeTest: Story = {
185
- args: {
186
- children: "Demo Link",
187
- ["data-testid"]: "smoke-test",
188
- },
189
- render: (args) => {
190
- return (
191
- <Stack gap="1200">
192
- {fontColors.map((color) => (
193
- <Stack key={color as string} direction="row" gap="400">
194
- {sizes.map((size) => (
195
- <Stack direction="row" key={size as string}>
196
- <Link {...args} size={size} fontColor={color} />
197
- </Stack>
198
- ))}
199
- </Stack>
200
- ))}
201
- </Stack>
202
- );
203
- },
204
- };
@@ -1,38 +0,0 @@
1
- import { forwardRef, useRef } from "react";
2
- import { LinkRoot } from "./link.slots";
3
- import type { LinkProps } from "./link.types";
4
- import { useLink, useObjectRef, mergeProps } from "react-aria";
5
- import { mergeRefs } from "@chakra-ui/react";
6
-
7
- /**
8
- * Link
9
- * ============================================================
10
- * To allow a user to navigate to a different page or resource
11
- *
12
- * Features:
13
- *
14
- * - allows forwarding refs to the underlying DOM element
15
- * - accepts all native html 'HTMLAnchorElement' attributes (including aria- & data-attributes)
16
- * - supports 'variants', 'sizes', etc. configured in the recipe
17
- * - allows overriding styles by using style-props
18
- * - supports 'asChild' and 'as' to modify the underlying html-element (polymorphic)
19
- */
20
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
21
- (props, forwardedRef) => {
22
- const { as, asChild, children, ...rest } = props;
23
-
24
- const localRef = useRef<HTMLAnchorElement>(null);
25
- const ref = useObjectRef(mergeRefs(localRef, forwardedRef));
26
-
27
- const elementType = (as as string) || (asChild ? "span" : "a") || "a";
28
- const { linkProps } = useLink({ ...rest, elementType }, ref);
29
-
30
- return (
31
- <LinkRoot {...mergeProps(rest, linkProps, { as, asChild, ref })}>
32
- {children}
33
- </LinkRoot>
34
- );
35
- }
36
- );
37
-
38
- Link.displayName = "Link";
@@ -1,26 +0,0 @@
1
- import type { LinkRootProps } from "./link.slots";
2
- import type { RecipeVariantProps } from "@chakra-ui/react";
3
- import type { AriaLinkOptions } from "react-aria";
4
- import { linkRecipe } from "./link.recipe";
5
-
6
- /**
7
- * Combines the root props with Chakra UI's recipe variant props.
8
- * This allows the component to accept both structural props from Root
9
- * and styling variants from the recipe.
10
- *
11
- * Differences between LinkRootProps and LinkVariantProps necessitate
12
- * the use of Omit and Pick to ensure the correct props are passed
13
- */
14
- type LinkVariantProps = Omit<LinkRootProps, "onFocus" | "onBlur"> &
15
- Pick<AriaLinkOptions, "onFocus" | "onBlur"> &
16
- RecipeVariantProps<typeof linkRecipe> & {
17
- [key: `data-${string}`]: string;
18
- };
19
- /**
20
- * Main props interface for the Link component.
21
- * Extends LinkVariantProps to include both root props and variant props,
22
- * while adding support for React children.
23
- */
24
- export interface LinkProps extends LinkVariantProps {
25
- children?: React.ReactNode;
26
- }
@@ -1 +0,0 @@
1
- export * from "./list.tsx";
@@ -1,18 +0,0 @@
1
- ---
2
- id: List
3
- title: List
4
- description: displays a list
5
- documentState: InitialDraft
6
- order: 999
7
- menu:
8
- - Components
9
- - Typography
10
- - List
11
- tags:
12
- - list
13
- - collections
14
- ---
15
-
16
- # List
17
-
18
- Add description later.
@@ -1,68 +0,0 @@
1
- import { defineSlotRecipe } from "@chakra-ui/react";
2
-
3
- export const listSlotRecipe = defineSlotRecipe({
4
- className: "chakra-list",
5
- slots: ["root", "item", "indicator"],
6
- base: {
7
- root: {
8
- display: "flex",
9
- flexDirection: "column",
10
- gap: "var(--list-gap)",
11
- "& :where(ul, ol)": {
12
- marginTop: "var(--list-gap)",
13
- },
14
- },
15
- item: {
16
- whiteSpace: "normal",
17
- display: "list-item",
18
- },
19
- indicator: {
20
- marginEnd: "200",
21
- minHeight: "1lh",
22
- flexShrink: 0,
23
- display: "inline-block",
24
- verticalAlign: "middle",
25
- },
26
- },
27
- variants: {
28
- variant: {
29
- marker: {
30
- root: {
31
- listStyle: "revert",
32
- listStylePosition: "inside",
33
- },
34
- item: {
35
- _marker: {
36
- color: "fg.subtle",
37
- },
38
- },
39
- },
40
- plain: {
41
- item: {
42
- alignItems: "flex-start",
43
- display: "inline-flex",
44
- },
45
- },
46
- },
47
- align: {
48
- center: {
49
- item: {
50
- alignItems: "center",
51
- },
52
- },
53
- start: {
54
- item: {
55
- alignItems: "flex-start",
56
- },
57
- },
58
- end: {
59
- item: {
60
- alignItems: "flex-end",
61
- },
62
- },
63
- },
64
- },
65
- defaultVariants: {
66
- variant: "marker",
67
- },
68
- });
@@ -1,9 +0,0 @@
1
- import { List } from "@chakra-ui/react";
2
-
3
- export type ListRootType = React.ComponentProps<typeof List.Root>;
4
- export type ListItemType = React.ComponentProps<typeof List.Item>;
5
-
6
- const ListRoot = (props: ListRootType) => <List.Root {...props} />;
7
- const ListItem = (props: ListItemType) => <List.Item {...props} />;
8
-
9
- export { List, ListRoot, ListItem };
@@ -1,2 +0,0 @@
1
- export * from "./loading-spinner";
2
- export * from "./loading-spinner.types";
@@ -1,92 +0,0 @@
1
- ---
2
- id: Components-LoadingSpinner
3
- title: LoadingSpinner
4
- description: Indicates ongoing processes or loading states
5
- documentState: InitialDraft
6
- order: 999
7
- menu:
8
- - Components
9
- - LoadingSpinner
10
- tags:
11
- - component
12
- ---
13
-
14
- # LoadingSpinner
15
-
16
- Indicates ongoing processes or loading states
17
-
18
- ## Basic Usage
19
-
20
- [Explain the basic usage / usecase of the component].
21
-
22
- ```jsx-live
23
- const App = () => <LoadingSpinner>I am LoadingSpinner!</LoadingSpinner>
24
- ```
25
-
26
-
27
- ### Sizes
28
-
29
- Available sizes.
30
-
31
- ```jsx-live
32
- const App = () => {
33
-
34
- const sizes = ['2xl', 'xl', 'lg', 'md', 'sm', 'xs', '2xs'];
35
-
36
- return (
37
- <Stack direction="horizontal" alignItems="center">
38
- {sizes.map(size => (
39
- <LoadingSpinner key={size} size={size}>'{size}' LoadingSpinner</LoadingSpinner>
40
- ))}
41
- </Stack>
42
- )
43
- }
44
- ```
45
-
46
- ### Variants
47
-
48
- Available variants.
49
-
50
- ```jsx-live
51
- const App = () => {
52
-
53
- const variants = ['solid', 'subtle', 'outline', 'ghost', 'plain'];
54
-
55
- return (
56
- <Stack direction="horizontal">
57
- {variants.map(variant => (
58
- <LoadingSpinner key={variant} variant={variant}>'{variant}' LoadingSpinner</LoadingSpinner>
59
- ))}
60
- </Stack>
61
- )
62
- }
63
- ```
64
-
65
- ### Colors
66
-
67
- [Explain usage with different colors/semantics.]
68
-
69
- ```jsx-live
70
- const App = () => {
71
- const variants = ["solid", "subtle", "outline", "ghost", "link", "plain"];
72
- const colors = ["neutral", "primary", "info", "success", "danger", "error"];
73
-
74
- return (
75
- <Stack>
76
- {colors.map((color) => (
77
- <Stack key={color} direction="horizontal">
78
- {variants.map((variant) => (
79
- <LoadingSpinner colorPalette={color} key={variant} variant={variant}>
80
- '{variant}' LoadingSpinner
81
- </LoadingSpinner>
82
- ))}
83
- </Stack>
84
- ))}
85
- </Stack>
86
- );
87
- };
88
- ```
89
-
90
- ## Props
91
-
92
- <PropTable id="LoadingSpinner" />
@@ -1,70 +0,0 @@
1
- import { defineRecipe } from "@chakra-ui/react";
2
-
3
- /**
4
- * Recipe configuration for the LoadingSpinner component.
5
- * Defines the styling variants and base styles using Chakra UI's recipe system.
6
- */
7
- export const loadingSpinnerRecipe = defineRecipe({
8
- className: "nimbus-loading-spinner",
9
-
10
- base: {
11
- display: "inline-flex",
12
- alignItems: "center",
13
- justifyContent: "center",
14
- "& svg": {
15
- overflow: "visible",
16
- // This proportionally scales the spinner to fit the container while also scaling padding
17
- transform: "scale(calc(1 - 2/12))",
18
- },
19
- "& svg [data-svg-path='spinner-pointer']": {
20
- stroke: "colorPalette.10",
21
- animationName: "spin",
22
- animationDuration: "0.5s",
23
- animationTimingFunction: "linear",
24
- animationIterationCount: "infinite",
25
- transformOrigin: "center center 0",
26
- },
27
- "& svg [data-svg-path='spinner-circle']": {
28
- stroke: "colorPalette.5",
29
- },
30
- },
31
-
32
- variants: {
33
- size: {
34
- "2xs": {
35
- width: "350",
36
- height: "350",
37
- },
38
- xs: {
39
- width: "500",
40
- height: "500",
41
- },
42
- sm: {
43
- width: "600",
44
- height: "600",
45
- },
46
- md: {
47
- width: "800",
48
- height: "800",
49
- },
50
- lg: {
51
- width: "1000",
52
- height: "1000",
53
- },
54
- },
55
-
56
- tone: {
57
- primary: {
58
- colorPalette: "ctvioletAlpha",
59
- },
60
- white: {
61
- colorPalette: "whiteAlpha",
62
- },
63
- },
64
- },
65
-
66
- defaultVariants: {
67
- size: "sm",
68
- tone: "primary",
69
- },
70
- });
@@ -1,38 +0,0 @@
1
- import {
2
- type HTMLChakraProps,
3
- type RecipeProps,
4
- type UnstyledProp,
5
- createRecipeContext,
6
- } from "@chakra-ui/react";
7
-
8
- import { loadingSpinnerRecipe } from "./loading-spinner.recipe";
9
-
10
- /**
11
- * Base recipe props interface that combines Chakra UI's recipe props
12
- * with the unstyled prop option for the div element.
13
- */
14
- export interface LoadingSpinnerRecipeProps
15
- extends RecipeProps<"div">,
16
- UnstyledProp {}
17
-
18
- /**
19
- * Root props interface that extends Chakra's HTML props with our recipe props.
20
- * This creates a complete set of props for the root element, combining
21
- * HTML attributes, Chakra's styling system, and our custom recipe props.
22
- */
23
- export type LoadingSpinnerRootProps = Omit<
24
- HTMLChakraProps<"div", LoadingSpinnerRecipeProps>,
25
- // We want to omit polymorphic props from the root props since they are not used internally.
26
- "as" | "asChild"
27
- >;
28
-
29
- const { withContext } = createRecipeContext({ recipe: loadingSpinnerRecipe });
30
-
31
- /**
32
- * Root component that provides the styling context for the LoadingSpinner component.
33
- * Uses Chakra UI's recipe context system for consistent styling across instances.
34
- */
35
- export const LoadingSpinnerRoot = withContext<
36
- HTMLDivElement,
37
- LoadingSpinnerRootProps
38
- >("div");