@commercetools/nimbus 0.0.2 → 0.0.3
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.
- package/dist/index.d.ts +1412 -0
- package/dist/index.js +11183 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.cjs +27 -0
- package/dist/index.umd.cjs.map +1 -0
- package/package.json +63 -39
- package/.storybook/apca-check/index.ts +0 -150
- package/.storybook/main.ts +0 -64
- package/.storybook/preview.tsx +0 -92
- package/.storybook/vitest.setup.ts +0 -13
- package/docs/architecture-decisions/adr-0001-consumer-component-apis.md +0 -177
- package/docs/architecture-decisions/adr-0002-compound-component-extraction.md +0 -82
- package/src/components/accordion/accordion-context.tsx +0 -17
- package/src/components/accordion/accordion.mdx +0 -172
- package/src/components/accordion/accordion.recipe.tsx +0 -98
- package/src/components/accordion/accordion.slots.tsx +0 -39
- package/src/components/accordion/accordion.stories.tsx +0 -188
- package/src/components/accordion/accordion.tsx +0 -16
- package/src/components/accordion/accordion.types.tsx +0 -54
- package/src/components/accordion/components/accordion-content.tsx +0 -28
- package/src/components/accordion/components/accordion-group.tsx +0 -27
- package/src/components/accordion/components/accordion-header.tsx +0 -63
- package/src/components/accordion/components/accordion-item.tsx +0 -87
- package/src/components/accordion/index.ts +0 -2
- package/src/components/alert/alert.mdx +0 -92
- package/src/components/alert/alert.recipe.tsx +0 -65
- package/src/components/alert/alert.slots.tsx +0 -46
- package/src/components/alert/alert.stories.tsx +0 -308
- package/src/components/alert/alert.tsx +0 -18
- package/src/components/alert/alert.types.tsx +0 -70
- package/src/components/alert/components/alert.actions.tsx +0 -27
- package/src/components/alert/components/alert.description.tsx +0 -27
- package/src/components/alert/components/alert.dismiss-button.tsx +0 -41
- package/src/components/alert/components/alert.root.tsx +0 -92
- package/src/components/alert/components/alert.title.tsx +0 -29
- package/src/components/alert/index.ts +0 -2
- package/src/components/avatar/avatar.mdx +0 -80
- package/src/components/avatar/avatar.recipe.tsx +0 -36
- package/src/components/avatar/avatar.slots.tsx +0 -16
- package/src/components/avatar/avatar.stories.tsx +0 -136
- package/src/components/avatar/avatar.tsx +0 -34
- package/src/components/avatar/avatar.types.ts +0 -33
- package/src/components/avatar/index.ts +0 -2
- package/src/components/badge/badge.mdx +0 -91
- package/src/components/badge/badge.recipe.tsx +0 -72
- package/src/components/badge/badge.slots.tsx +0 -8
- package/src/components/badge/badge.stories.tsx +0 -124
- package/src/components/badge/badge.tsx +0 -35
- package/src/components/badge/badge.types.tsx +0 -40
- package/src/components/badge/index.ts +0 -2
- package/src/components/bleed/bleed.tsx +0 -1
- package/src/components/bleed/index.ts +0 -1
- package/src/components/box/box.mdx +0 -115
- package/src/components/box/box.stories.tsx +0 -71
- package/src/components/box/box.tsx +0 -11
- package/src/components/box/index.ts +0 -1
- package/src/components/button/button.mdx +0 -169
- package/src/components/button/button.recipe.ts +0 -185
- package/src/components/button/button.slots.tsx +0 -45
- package/src/components/button/button.stories.tsx +0 -369
- package/src/components/button/button.tsx +0 -37
- package/src/components/button/button.types.ts +0 -14
- package/src/components/button/index.ts +0 -2
- package/src/components/card/card.mdx +0 -92
- package/src/components/card/card.recipe.tsx +0 -71
- package/src/components/card/card.slots.tsx +0 -50
- package/src/components/card/card.stories.tsx +0 -175
- package/src/components/card/card.tsx +0 -9
- package/src/components/card/card.types.ts +0 -22
- package/src/components/card/components/card.content.tsx +0 -29
- package/src/components/card/components/card.header.tsx +0 -28
- package/src/components/card/components/card.root.tsx +0 -62
- package/src/components/card/index.ts +0 -2
- package/src/components/checkbox/checkbox.mdx +0 -78
- package/src/components/checkbox/checkbox.recipe.tsx +0 -116
- package/src/components/checkbox/checkbox.slots.tsx +0 -33
- package/src/components/checkbox/checkbox.stories.tsx +0 -200
- package/src/components/checkbox/checkbox.tsx +0 -77
- package/src/components/checkbox/checkbox.types.tsx +0 -22
- package/src/components/checkbox/index.ts +0 -2
- package/src/components/code/code.mdx +0 -17
- package/src/components/code/code.recipe.ts +0 -63
- package/src/components/code/code.tsx +0 -1
- package/src/components/code/index.ts +0 -1
- package/src/components/dialog/dialog.mdx +0 -20
- package/src/components/dialog/dialog.recipe.ts +0 -254
- package/src/components/dialog/dialog.tsx +0 -61
- package/src/components/dialog/index.ts +0 -1
- package/src/components/em/em.mdx +0 -17
- package/src/components/em/em.tsx +0 -1
- package/src/components/em/index.ts +0 -1
- package/src/components/flex/flex.mdx +0 -41
- package/src/components/flex/flex.tsx +0 -1
- package/src/components/flex/index.ts +0 -1
- package/src/components/grid/grid.mdx +0 -156
- package/src/components/grid/grid.stories.tsx +0 -151
- package/src/components/grid/grid.tsx +0 -29
- package/src/components/grid/index.ts +0 -1
- package/src/components/heading/heading.mdx +0 -23
- package/src/components/heading/heading.recipe.ts +0 -49
- package/src/components/heading/heading.tsx +0 -1
- package/src/components/heading/index.ts +0 -1
- package/src/components/highlight/highlight.mdx +0 -18
- package/src/components/highlight/highlight.tsx +0 -1
- package/src/components/highlight/index.ts +0 -1
- package/src/components/icon-button/icon-button.mdx +0 -98
- package/src/components/icon-button/icon-button.stories.tsx +0 -188
- package/src/components/icon-button/icon-button.tsx +0 -21
- package/src/components/icon-button/icon-button.types.tsx +0 -10
- package/src/components/icon-button/index.ts +0 -2
- package/src/components/index.ts +0 -33
- package/src/components/input/index.ts +0 -1
- package/src/components/input/input.mdx +0 -20
- package/src/components/input/input.recipe.ts +0 -95
- package/src/components/input/input.tsx +0 -1
- package/src/components/input-group/index.ts +0 -1
- package/src/components/input-group/input-group.mdx +0 -20
- package/src/components/input-group/input-group.tsx +0 -44
- package/src/components/kbd/index.ts +0 -1
- package/src/components/kbd/kbd.mdx +0 -18
- package/src/components/kbd/kbd.recipe.ts +0 -57
- package/src/components/kbd/kbd.tsx +0 -1
- package/src/components/link/index.ts +0 -2
- package/src/components/link/link.mdx +0 -77
- package/src/components/link/link.recipe.ts +0 -52
- package/src/components/link/link.slots.tsx +0 -29
- package/src/components/link/link.stories.tsx +0 -204
- package/src/components/link/link.tsx +0 -38
- package/src/components/link/link.types.tsx +0 -26
- package/src/components/list/index.ts +0 -1
- package/src/components/list/list.mdx +0 -18
- package/src/components/list/list.recipe.ts +0 -68
- package/src/components/list/list.tsx +0 -9
- package/src/components/loading-spinner/index.ts +0 -2
- package/src/components/loading-spinner/loading-spinner.mdx +0 -92
- package/src/components/loading-spinner/loading-spinner.recipe.tsx +0 -70
- package/src/components/loading-spinner/loading-spinner.slots.tsx +0 -38
- package/src/components/loading-spinner/loading-spinner.stories.tsx +0 -97
- package/src/components/loading-spinner/loading-spinner.tsx +0 -50
- package/src/components/loading-spinner/loading-spinner.types.tsx +0 -21
- package/src/components/nimbus-provider/color-mode.tsx +0 -32
- package/src/components/nimbus-provider/index.ts +0 -2
- package/src/components/nimbus-provider/nimbus-provider.mdx +0 -21
- package/src/components/nimbus-provider/nimbus-provider.tsx +0 -51
- package/src/components/select/components/select.clear-button.tsx +0 -31
- package/src/components/select/components/select.option-group.tsx +0 -48
- package/src/components/select/components/select.option.tsx +0 -21
- package/src/components/select/components/select.options.tsx +0 -23
- package/src/components/select/components/select.root.tsx +0 -81
- package/src/components/select/index.ts +0 -2
- package/src/components/select/select.mdx +0 -170
- package/src/components/select/select.recipe.tsx +0 -216
- package/src/components/select/select.slots.tsx +0 -58
- package/src/components/select/select.stories.tsx +0 -841
- package/src/components/select/select.tsx +0 -18
- package/src/components/select/select.types.tsx +0 -37
- package/src/components/simple-grid/index.ts +0 -1
- package/src/components/simple-grid/simple-grid.mdx +0 -133
- package/src/components/simple-grid/simple-grid.stories.tsx +0 -143
- package/src/components/simple-grid/simple-grid.tsx +0 -31
- package/src/components/stack/index.ts +0 -1
- package/src/components/stack/stack.mdx +0 -88
- package/src/components/stack/stack.stories.tsx +0 -82
- package/src/components/stack/stack.tsx +0 -15
- package/src/components/table/index.ts +0 -1
- package/src/components/table/table.mdx +0 -23
- package/src/components/table/table.recipe.ts +0 -170
- package/src/components/table/table.tsx +0 -43
- package/src/components/text/index.ts +0 -1
- package/src/components/text/text.mdx +0 -244
- package/src/components/text/text.tsx +0 -23
- package/src/components/text-input/index.ts +0 -2
- package/src/components/text-input/text-input.mdx +0 -118
- package/src/components/text-input/text-input.recipe.tsx +0 -68
- package/src/components/text-input/text-input.slots.tsx +0 -24
- package/src/components/text-input/text-input.stories.tsx +0 -282
- package/src/components/text-input/text-input.tsx +0 -39
- package/src/components/text-input/text-input.types.ts +0 -7
- package/src/components/toggle-button-group/components/toggle-button-group.button.tsx +0 -14
- package/src/components/toggle-button-group/components/toggle-button-group.root.tsx +0 -15
- package/src/components/toggle-button-group/index.ts +0 -2
- package/src/components/toggle-button-group/toggle-button-group.mdx +0 -94
- package/src/components/toggle-button-group/toggle-button-group.recipe.tsx +0 -64
- package/src/components/toggle-button-group/toggle-button-group.slots.tsx +0 -26
- package/src/components/toggle-button-group/toggle-button-group.stories.tsx +0 -311
- package/src/components/toggle-button-group/toggle-button-group.tsx +0 -12
- package/src/components/toggle-button-group/toggle-button-group.types.tsx +0 -62
- package/src/components/tooltip/index.ts +0 -4
- package/src/components/tooltip/make-element-focusable.stories.tsx +0 -56
- package/src/components/tooltip/make-element-focusable.tsx +0 -57
- package/src/components/tooltip/tooltip-trigger.stories.tsx +0 -157
- package/src/components/tooltip/tooltip-trigger.tsx +0 -15
- package/src/components/tooltip/tooltip.mdx +0 -48
- package/src/components/tooltip/tooltip.recipe.ts +0 -26
- package/src/components/tooltip/tooltip.slots.ts +0 -35
- package/src/components/tooltip/tooltip.stories.tsx +0 -139
- package/src/components/tooltip/tooltip.tsx +0 -31
- package/src/components/tooltip/tooltip.types.ts +0 -44
- package/src/components/visually-hidden/index.ts +0 -1
- package/src/components/visually-hidden/visually-hidden.mdx +0 -61
- package/src/components/visually-hidden/visually-hidden.stories.tsx +0 -124
- package/src/components/visually-hidden/visually-hidden.tsx +0 -18
- package/src/docs/accessibility.mdx +0 -21
- package/src/docs/background.mdx +0 -154
- package/src/docs/border.mdx +0 -226
- package/src/docs/changelog.mdx +0 -17
- package/src/docs/components-layout.mdx +0 -22
- package/src/docs/components.mdx +0 -17
- package/src/docs/data-display.mdx +0 -23
- package/src/docs/display.mdx +0 -55
- package/src/docs/effects.mdx +0 -73
- package/src/docs/feedback.mdx +0 -22
- package/src/docs/filters.mdx +0 -268
- package/src/docs/flex-and-grid.mdx +0 -445
- package/src/docs/forms.mdx +0 -22
- package/src/docs/generated/index.mdx +0 -16
- package/src/docs/getting-started.mdx +0 -17
- package/src/docs/home.mdx +0 -56
- package/src/docs/hooks.mdx +0 -16
- package/src/docs/inputs.mdx +0 -21
- package/src/docs/installation.mdx +0 -60
- package/src/docs/interactivity.mdx +0 -278
- package/src/docs/known-issues.mdx +0 -19
- package/src/docs/layout.mdx +0 -301
- package/src/docs/list.mdx +0 -82
- package/src/docs/markdown.mdx +0 -234
- package/src/docs/media.mdx +0 -22
- package/src/docs/naivgation.mdx +0 -22
- package/src/docs/playground.mdx +0 -16
- package/src/docs/rfcs-component-structure-rfcs.mdx +0 -17
- package/src/docs/rfcs-component-structure.mdx +0 -74
- package/src/docs/rfcs-hook-structure.mdx +0 -59
- package/src/docs/sizing.mdx +0 -210
- package/src/docs/spacing.mdx +0 -193
- package/src/docs/style-props-typography.mdx +0 -373
- package/src/docs/style-props.mdx +0 -15
- package/src/docs/svg.mdx +0 -58
- package/src/docs/tables.mdx +0 -95
- package/src/docs/toc.mdx +0 -39
- package/src/docs/tokens/animations.mdx +0 -68
- package/src/docs/tokens/aspect-ratios.mdx +0 -21
- package/src/docs/tokens/blurs.mdx +0 -20
- package/src/docs/tokens/borders.mdx +0 -25
- package/src/docs/tokens/breakpoints.mdx +0 -35
- package/src/docs/tokens/colors.mdx +0 -86
- package/src/docs/tokens/cursors.mdx +0 -21
- package/src/docs/tokens/radii.mdx +0 -23
- package/src/docs/tokens/shadows.mdx +0 -21
- package/src/docs/tokens/sizes.mdx +0 -54
- package/src/docs/tokens/spacing.mdx +0 -35
- package/src/docs/tokens/typography.mdx +0 -61
- package/src/docs/tokens/z-indices.mdx +0 -23
- package/src/docs/tokens-other.mdx +0 -17
- package/src/docs/tokens.mdx +0 -16
- package/src/docs/transforms.mdx +0 -150
- package/src/docs/transitions.mdx +0 -164
- package/src/docs/typography.mdx +0 -17
- package/src/docs/utilities.mdx +0 -17
- package/src/hooks/index.ts +0 -2
- package/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.mdx +0 -54
- package/src/hooks/use-copy-to-clipboard/use-copy-to-clipboard.ts +0 -1
- package/src/hooks/use-hotkeys/use-hotkeys.mdx +0 -48
- package/src/hooks/use-hotkeys/use-hotkeys.stories.tsx +0 -69
- package/src/hooks/use-hotkeys/use-hotkeys.ts +0 -1
- package/src/index.ts +0 -3
- package/src/test/utils.tsx +0 -20
- package/src/theme/animation-styles.ts +0 -52
- package/src/theme/breakpoints.ts +0 -32
- package/src/theme/global-css.ts +0 -53
- package/src/theme/index.ts +0 -35
- package/src/theme/keyframes.ts +0 -192
- package/src/theme/layer-styles.ts +0 -12
- package/src/theme/recipes/index.ts +0 -21
- package/src/theme/semantic-tokens/colors.ts +0 -55
- package/src/theme/semantic-tokens/index.ts +0 -9
- package/src/theme/semantic-tokens/radii.ts +0 -3
- package/src/theme/semantic-tokens/shadows.ts +0 -4
- package/src/theme/slot-recipes/index.ts +0 -15
- package/src/theme/text-styles.ts +0 -8
- package/src/theme/tokens/animations.ts +0 -4
- package/src/theme/tokens/aspect-ratios.ts +0 -5
- package/src/theme/tokens/blurs.ts +0 -5
- package/src/theme/tokens/borders.ts +0 -4
- package/src/theme/tokens/colors.ts +0 -8
- package/src/theme/tokens/cursor.ts +0 -4
- package/src/theme/tokens/durations.ts +0 -4
- package/src/theme/tokens/easings.ts +0 -4
- package/src/theme/tokens/font-sizes.ts +0 -4
- package/src/theme/tokens/font-weights.ts +0 -4
- package/src/theme/tokens/fonts.ts +0 -4
- package/src/theme/tokens/index.ts +0 -57
- package/src/theme/tokens/letter-spacings.ts +0 -24
- package/src/theme/tokens/line-heights.ts +0 -4
- package/src/theme/tokens/radii.ts +0 -4
- package/src/theme/tokens/sizes.ts +0 -120
- package/src/theme/tokens/spacing.ts +0 -4
- package/src/theme/tokens/z-index.ts +0 -4
- package/src/utils/extractStyleProps.ts +0 -26
- package/src/utils/fixedForwardRef.ts +0 -17
- package/tsconfig.json +0 -38
- package/vite.config.ts +0 -54
- 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,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,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");
|