5.24.1 • Published 9 months ago

@purpurds/radio-card-group v5.24.1

Weekly downloads
-
License
AGPL-3.0-only
Repository
-
Last release
9 months ago

import { Meta, ArgTypes, Primary, Subtitle } from "@storybook/blocks";

import * as RadioCardGroupStories from "./src/radio-card-group.stories"; import packageInfo from "./package.json";

RadioCardGroup

Version {packageInfo.version}

Showcase

Properties

Installation

Via NPM

Add the dependency to your consumer app like "@purpurds/purpur": "^x.y.z"

In MyApp.tsx

or

import "@purpurds/purpur/styles";

Examples

In MyComponent.tsx

Controlled

import { RadioCardGroup } from "@purpurds/purpur";

export const MyComponent = ({ dataSet }: Props) => {
  const [selectedItem, setSelectedItem] = useState();
  const items = dataSet.map((itemData) => ({
    id: itemData.id,
    image: { src: itemData.imageSrc, altText: itemData.imageAltText },
    title: itemData.name,
    body: itemData.description,
    value: itemData.id,
  }));

  const onValueChange = (value?: string) => {
    const itemToSelect = items.find((item) => item.value === value);
    setSelectedItem(itemToSelect.value);
  };

  return (
    <div>
      <RadioCardGroup
        {...someProps}
        items={items}
        value={selectedItem}
        onValueChange={onValueChange}
      />
    </div>
  );
};

With items as children

import { RadioCardGroup } from "@purpurds/radio-card-group";

export const MyComponent = ({ dataSet }: Props) => {
  const [selectedItem, setSelectedItem] = useState();

  const onValueChange = (value?: string) => {
    const itemToSelect = dataSet.find((itemData) => itemData.id === value);
    setSelectedItem(itemToSelect.id);
  };

  return (
    <RadioCardGroup
      id="example"
      lable="Items as children"
      value={selectedItem}
      onValueChange={onValueChange}
    >
      {dataSet.map((itemData) => (
        <RadioCardItem
          key={itemData.id}
          id={itemData.id}
          image={{ src: itemData.imageSrc, altText: itemData.imageAltText }}
          title={itemData.name}
          body={itemData.description}
          value={itemData.id}
        />
      ))}
      <div>This div will no be rendered since its no a RadioCardItem</div>
    </RadioCardGroup>
  );
};

Uncontrolled

import { RadioCardGroup } from "@purpurds/radio-card-group";

export const MyComponent = ({ dataSet }: Props) => {
  const items = dataSet.map((itemData) => ({
    id: itemData.id,
    image: { src: itemData.imageSrc, altText: itemData.imageAltText },
    title: itemData.name,
    body: itemData.description,
    value: itemData.id,
  }));

  return (
    <div>
      <RadioCardGroup {...someProps} items={items} />
    </div>
  );
};

With custom title, body and image

import { RadioCardGroup } from "@purpurds/radio-card-group";
import { Badge } from "@purpurds/badge";
import { IconPebble } from "@purpurds/icon";
import { Paragraph } from "@purpurds/paragraph";

export const MyComponent = ({ dataSet }: Props) => {
  const items = dataSet.map((itemData) => ({
    id: itemData.id,
    image: (
      <div styles={{ display: "flex", justifyContent: "center", alignItems: "center" }}>
        <IconPebble />
      </div>
    ),
    title: ({ disabled }) => (
      <div style={{ display: "flex", gap: "var(--purpur-spacing-150)" }}>
        <Paragraph disabled={disabled} variant="paragraph-100">
          <b>Custom title</b>
        </Paragraph>
        <Badge variant="attention">Nice price!</Badge>
      </div>
    ),
    body: ({ disabled }) => (
      <Paragraph disabled={disabled} variant="paragraph-100">
        <span
          style={{
            textDecoration: "line-through",
            color: "var(--purpur-color-gray-400)",
            marginRight: "var(--purpur-spacing-50)",
          }}
        >
          {itemdata.ordinaryPrice} kr/mån
        </span>
        <span style={{ fontWeight: "var(--purpur-typography-weight-medium)" }}>
          {itemdata.price} kr/mån
        </span>
      </Paragraph>
    ),,
    value: itemData.id,
  }));

  return (
    <div>
      <RadioCardGroup {...someProps} items={items} />
    </div>
  );
};
5.24.1

9 months ago

5.24.0

9 months ago

5.23.0

9 months ago

5.21.1

9 months ago

5.21.0

9 months ago

5.22.0

9 months ago

5.18.3

10 months ago

5.18.2

10 months ago

5.18.1

10 months ago

5.18.0

10 months ago

5.19.1

9 months ago

5.19.0

9 months ago

5.17.0

10 months ago

5.20.1

9 months ago

5.20.0

9 months ago

5.16.1

10 months ago

5.16.0

10 months ago

5.15.1

10 months ago

5.15.0

10 months ago

5.14.0

11 months ago

5.5.0

1 year ago

5.3.0

1 year ago

5.1.2

1 year ago

5.13.0

11 months ago

5.11.2

11 months ago

5.11.1

11 months ago

5.11.0

11 months ago

5.8.2

1 year ago

5.8.1

1 year ago

5.8.0

1 year ago

5.4.3

1 year ago

5.6.0

1 year ago

5.4.2

1 year ago

5.4.1

1 year ago

5.4.0

1 year ago

5.2.0

1 year ago

5.12.0

11 months ago

5.10.1

11 months ago

5.10.0

12 months ago

5.9.0

1 year ago

5.7.0

1 year ago

5.1.1

1 year ago

5.1.0

1 year ago

5.0.0

1 year ago

4.5.0

1 year ago

4.6.0

1 year ago

4.5.1

1 year ago

4.4.0

1 year ago

4.3.0

1 year ago

4.2.0

1 year ago

4.1.1

1 year ago

4.1.0

1 year ago

4.0.2

1 year ago

4.0.1

1 year ago

4.0.0

1 year ago

3.7.1

1 year ago

3.7.0

1 year ago

3.6.0

1 year ago

3.5.1

1 year ago

3.5.0

1 year ago

3.4.0

1 year ago

3.3.2

1 year ago

3.3.1

1 year ago

3.3.0

1 year ago

3.2.0

1 year ago

3.1.0

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

2.8.0

1 year ago