@blakesteve/roster 4.11.0 → 4.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -628,6 +628,18 @@ Every field therefore has a second prop, **named for the element it reaches**:
628
628
  | `PasswordInput`| `className` | `inputClassName` | — |
629
629
  | `Select` | `className` | `triggerClassName` | `optionsClassName` |
630
630
  | `Textarea` | `className` | `textareaClassName` | — |
631
+ | `Combobox` | `className` | `inputClassName` | `optionsClassName` |
632
+ | `CheckboxGroup`| `className` | — | `optionsClassName` |
633
+ | `RadioGroup` | `className` | `radioClassName` | `optionsClassName`, `optionClassName`, `labelClassName`, `optionLabelClassName`, `descriptionClassName`, `messageClassName` |
634
+
635
+ `CheckboxGroup` and `RadioGroup` have no single "control" to reach, since they
636
+ hold one per option, so `RadioGroup`'s `radioClassName` lands on every radio
637
+ rather than on one.
638
+
639
+ `CheckboxGroup`'s options container was `panelClassName`, which named a variant
640
+ rather than the element it reaches. Both groups now use `optionsClassName`.
641
+ `panelClassName` still works and is deprecated; pass both and the current name
642
+ wins.
631
643
 
632
644
  `Select` is the first component with two styleable inner parts, which is the
633
645
  case the naming scheme was chosen for: `optionsClassName` reaches the popup
@@ -1003,6 +1015,56 @@ invalid — the selection is — so nothing rings the individual controls.
1003
1015
  A rebuild sorts the result into declaration order, which reads tidier and
1004
1016
  silently drops any selected value whose option has not loaded yet.
1005
1017
 
1018
+ ### One answer, and when it should not be a menu
1019
+
1020
+ `RadioGroup` is `CheckboxGroup`'s sibling and deliberately the same component
1021
+ with one difference: `value` is a `string` and `onChange` receives a `string`,
1022
+ because a radio group has one answer. Label, per-option `description`, helper
1023
+ text and error message are the same shape in both, so a form using both does
1024
+ not read as two libraries.
1025
+
1026
+ What it does not carry across is the point. There is no grouped form and no
1027
+ `maxHeight`:
1028
+
1029
+ - **`RadioGroup`** when the options are few and the reader should see all of
1030
+ them at once. Two to about six.
1031
+ - **`Select`** past that. A radio group with enough options to need scrolling
1032
+ is a menu that forgot to close, and shipping a scroll cap here would invite
1033
+ exactly that.
1034
+
1035
+ Both hold one value of the same type, so moving between them is a prop change
1036
+ rather than a rewrite.
1037
+
1038
+ ```tsx
1039
+ <RadioGroup
1040
+ label="Who can see this squad"
1041
+ helperText="You can change this at any time."
1042
+ value={visibility}
1043
+ onChange={setVisibility}
1044
+ options={[
1045
+ { value: "public", label: "Public", description: "Anyone can find and join it." },
1046
+ { value: "unlisted", label: "Unlisted", description: "Only people with the link." },
1047
+ { value: "private", label: "Private", description: "Invite only." },
1048
+ ]}
1049
+ />
1050
+ ```
1051
+
1052
+ `orientation="horizontal"` lays the options out in a wrapping row, for the
1053
+ short scannable set that would otherwise spend three rows of a wide form. It
1054
+ sets `aria-orientation` to match.
1055
+
1056
+ Every radio is a 44x44 target, and the component is built so that it stays one:
1057
+ each option's box is sized to contain its own target, which is why the options
1058
+ can sit close together without a target ever reaching into its neighbor.
1059
+
1060
+ That containment is the option's own vertical padding, and `cn` is
1061
+ tailwind-merge, so it is the one thing `optionClassName` should leave alone. A
1062
+ background, a border, a radius and horizontal padding are all safe; a `py-*`,
1063
+ a height, or a `min-h` below `44px` replaces the padding and lets the target
1064
+ escape the box. Lay the options out across with `orientation` rather than
1065
+ through `optionsClassName`, for the same reason: the horizontal spacing that
1066
+ keeps two radios 44px apart rides on that prop.
1067
+
1006
1068
  ### Components that render links
1007
1069
 
1008
1070
  `Breadcrumbs` renders a plain `<a>` by default, which is right for a static
@@ -1096,6 +1158,7 @@ function App() {
1096
1158
  | `ErrorState` | Error display with retry action |
1097
1159
  | `MatchupCard` | Head-to-head comparison card |
1098
1160
  | `Pullquote` | A line lifted out of prose, as `<figure>` + `<blockquote>` + `<figcaption>` |
1161
+ | `RadioGroup` | Radio set reporting one `string`; descriptions, error, 44px targets |
1099
1162
  | `Toast` | Transient floating notice; `Toaster` + the imperative `toast` handle |
1100
1163
 
1101
1164
  ### Organisms
@@ -1,5 +1,5 @@
1
1
  import * as O from "react";
2
- import J, { useRef as Z, useCallback as _, useEffect as me, useState as $e, useMemo as Br, useLayoutEffect as yn, useContext as xn, createContext as kn, forwardRef as wn, isValidElement as En, cloneElement as Sn, createElement as An, Fragment as $n, useId as Nn } from "react";
2
+ import J, { useRef as Z, useCallback as _, useEffect as me, useState as $e, useMemo as Br, useLayoutEffect as yn, useContext as xn, createContext as kn, forwardRef as wn, Fragment as En, isValidElement as Sn, cloneElement as An, createElement as $n, useId as Nn } from "react";
3
3
  import { a as Pn, c as M } from "./utils-koxKGlVV.js";
4
4
  var je = { exports: {} }, ye = {};
5
5
  var or;
@@ -939,7 +939,7 @@ function De(e, t = {}, r, a, n) {
939
939
  for (let b of v) u[`data-${b}`] = "";
940
940
  }
941
941
  }
942
- if (He(s) && (Object.keys(le(l)).length > 0 || Object.keys(le(u)).length > 0)) if (!En(c) || Array.isArray(c) && c.length > 1 || Fs(c)) {
942
+ if (He(s) && (Object.keys(le(l)).length > 0 || Object.keys(le(u)).length > 0)) if (!Sn(c) || Array.isArray(c) && c.length > 1 || Fs(c)) {
943
943
  if (Object.keys(le(l)).length > 0) throw new Error(['Passing props on "Fragment"!', "", `The current component <${a} /> is rendering a "Fragment".`, "However we need to passthrough the following props:", Object.keys(le(l)).concat(Object.keys(le(u))).map((p) => ` - ${p}`).join(`
944
944
  `), "", "You can apply a few solutions:", ['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".', "Render a single element as the child so that we can forward the props onto that element."].map((p) => ` - ${p}`).join(`
945
945
  `)].join(`
@@ -947,9 +947,9 @@ function De(e, t = {}, r, a, n) {
947
947
  } else {
948
948
  let p = c.props, v = p?.className, b = typeof v == "function" ? (...E) => cr(v(...E), l.className) : cr(v, l.className), g = b ? { className: b } : {}, y = oa(c.props, le(ft(l, ["ref"])));
949
949
  for (let E in u) E in y && delete u[E];
950
- return Sn(c, Object.assign({}, y, u, f, { ref: n(Ts(c), f.ref) }, g));
950
+ return An(c, Object.assign({}, y, u, f, { ref: n(Ts(c), f.ref) }, g));
951
951
  }
952
- return An(s, Object.assign({}, ft(l, ["ref"]), !He(s) && f, !He(s) && u), c);
952
+ return $n(s, Object.assign({}, ft(l, ["ref"]), !He(s) && f, !He(s) && u), c);
953
953
  }
954
954
  function As() {
955
955
  let e = Z([]), t = _((r) => {
@@ -1011,7 +1011,7 @@ function Ts(e) {
1011
1011
  return J.version.split(".")[0] >= "19" ? e.props.ref : e.ref;
1012
1012
  }
1013
1013
  function He(e) {
1014
- return e === $n || e === /* @__PURE__ */ Symbol.for("react.fragment");
1014
+ return e === En || e === /* @__PURE__ */ Symbol.for("react.fragment");
1015
1015
  }
1016
1016
  function Fs(e) {
1017
1017
  return He(e.type);
@@ -52,7 +52,17 @@ export interface CheckboxGroupProps extends Omit<React.HTMLAttributes<HTMLFieldS
52
52
  disabled?: boolean;
53
53
  colorScheme?: React.ComponentProps<typeof Checkbox>["colorScheme"];
54
54
  /** Classes for the options' container. `className` lands on the fieldset. */
55
+ optionsClassName?: string;
56
+ /**
57
+ * @deprecated Use `optionsClassName`. Both work, and `optionsClassName` wins
58
+ * if you pass both.
59
+ *
60
+ * Renamed so this component and `RadioGroup` spell one concept one way.
61
+ * `panel` named a variant rather than the element it reaches, which is the
62
+ * rule the README states. The old name stays because it has live call sites,
63
+ * and swapping it outright would be a major bump for a cosmetic gain.
64
+ */
55
65
  panelClassName?: string;
56
66
  }
57
- declare const CheckboxGroup: ({ options, value, onChange, label, helperText, errorMessage, maxHeight, disabled, variant, size, columns, colorScheme, className, panelClassName, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, ...props }: CheckboxGroupProps) => import("react/jsx-runtime").JSX.Element;
67
+ declare const CheckboxGroup: ({ options, value, onChange, label, helperText, errorMessage, maxHeight, disabled, variant, size, columns, colorScheme, className, optionsClassName, panelClassName, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, ...props }: CheckboxGroupProps) => import("react/jsx-runtime").JSX.Element;
58
68
  export { CheckboxGroup };
@@ -0,0 +1,128 @@
1
+ import { default as React } from 'react';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import { radioGroupOptionsVariants, radioVariants } from './radio-group-variants';
4
+ export type RadioGroupOption = {
5
+ value: string;
6
+ label: string;
7
+ disabled?: boolean;
8
+ /** Supporting text under the option's label. */
9
+ description?: string;
10
+ };
11
+ export interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue">, Pick<VariantProps<typeof radioGroupOptionsVariants>, "size">, Pick<VariantProps<typeof radioVariants>, "colorScheme"> {
12
+ /**
13
+ * A flat list. There is no grouped form, and no `maxHeight`: both exist on
14
+ * `CheckboxGroup` because it is the long-list control, and a radio group
15
+ * with enough options to need scrolling wants a `Select` instead. Shipping
16
+ * the affordance would invite the wrong control.
17
+ */
18
+ options: RadioGroupOption[];
19
+ /**
20
+ * The selected value, as a string rather than an array. This is the whole
21
+ * difference from `CheckboxGroup`: a radio group has one answer, which is
22
+ * the reason it exists beside one.
23
+ *
24
+ * A value matching no option selects nothing and leaves the first option as
25
+ * the group's tab stop, which is the correct empty state — `""` is the
26
+ * ordinary way to spell "not answered yet".
27
+ */
28
+ value: string;
29
+ onChange: (value: string) => void;
30
+ /** The group's name. Becomes the group's accessible name. */
31
+ label?: string;
32
+ /** Supporting text under the options. */
33
+ helperText?: string;
34
+ /**
35
+ * The message for an invalid selection. Implies the error state, so a caller
36
+ * can not color the text red and forget to say why.
37
+ *
38
+ * The message is the whole of the error state, as it is in `CheckboxGroup`'s
39
+ * `plain` variant: there is no panel here to repaint, and a radio is not the
40
+ * thing that is invalid — the answer is.
41
+ *
42
+ * One difference from `CheckboxGroup` worth knowing before you rely on it:
43
+ * a caller's own `aria-describedby` is REPLACED here rather than merged.
44
+ * `CheckboxGroup` owns a `<fieldset>` and so owns the attribute;
45
+ * `aria-describedby` is one of the props Headless UI controls on a
46
+ * `RadioGroup`, and a controlled prop is spread last. Passing one is
47
+ * therefore a no-op rather than an addition. `aria-invalid` is not one of
48
+ * Headless UI's, so a caller's survives its spread — and is then outranked
49
+ * by this component's own error state, which is a different thing from the
50
+ * token-list merge `CheckboxGroup` does for `aria-describedby`.
51
+ */
52
+ errorMessage?: string;
53
+ /** Disables every option, and dims the label and helper text with them. */
54
+ disabled?: boolean;
55
+ /**
56
+ * Which way the options run. `vertical` stacks them, `horizontal` lays them
57
+ * out in a wrapping row for a short, scannable set.
58
+ *
59
+ * Named for the ARIA property it sets rather than for the flex direction it
60
+ * produces, because it does set it: `aria-orientation` tells a screen reader
61
+ * which arrow keys it is being offered, and `radiogroup` supports it.
62
+ * Headless UI's own key handling takes all four arrows in both orientations,
63
+ * which is the behavior worth having and is why this only ever widens what
64
+ * works rather than narrowing it.
65
+ */
66
+ orientation?: "vertical" | "horizontal";
67
+ /**
68
+ * Classes for the element holding the options. `className` lands on the
69
+ * group itself.
70
+ *
71
+ * Use `orientation` rather than this to lay the options out across. The
72
+ * horizontal guarantees ride on that prop: laying them out in a row from
73
+ * here keeps the vertical gap, which is 0 to 4px because each option's box
74
+ * contains its own target down the page but not across it, and two radios
75
+ * closer than 44px overlap. A `grid-cols-2` passed here puts 10px of one
76
+ * option's label inside its neighbor's target, and leaves
77
+ * `aria-orientation` saying `vertical`.
78
+ *
79
+ * `Select` and `Combobox` use this name for their floating popup panel. The
80
+ * sense is the same, the element that holds the options, and `CheckboxGroup`
81
+ * spells it this way too.
82
+ */
83
+ optionsClassName?: string;
84
+ /**
85
+ * Classes for one option's box. Applied to every option.
86
+ *
87
+ * This is the hook for turning the list into cards or rows with a border.
88
+ * Paint freely: a background, a border, a radius and horizontal padding all
89
+ * leave the targets alone.
90
+ *
91
+ * The VERTICAL padding is load-bearing, and `cn` is tailwind-merge, so a
92
+ * `py-*` or a height passed here deletes the component's own and takes the
93
+ * radio's target with it. The option's padding is what puts that target
94
+ * inside the option's box; at `sm`, `py-0` lets it overhang the box by 14px
95
+ * and `py-2` by 5. Style the box, and leave its height and vertical padding
96
+ * to the component.
97
+ *
98
+ * Headless UI puts `data-checked` and `data-disabled` on the control rather
99
+ * than on this box, so style the selected and disabled states from here with
100
+ * a `has-` variant reaching down to it.
101
+ */
102
+ optionClassName?: string;
103
+ /** Classes for the radio control itself. */
104
+ radioClassName?: string;
105
+ /** Classes for the group's own label. */
106
+ labelClassName?: string;
107
+ /** Classes for each option's label. */
108
+ optionLabelClassName?: string;
109
+ /** Classes for each option's `description`. */
110
+ descriptionClassName?: string;
111
+ /** Classes for the helper text or error message under the options. */
112
+ messageClassName?: string;
113
+ }
114
+ /**
115
+ * A labeled, validated set of radios that reports one `string`.
116
+ *
117
+ * A molecule rather than an atom, and `CheckboxGroup` is the precedent: a
118
+ * component that repeats a control and wraps it in a label, help and error
119
+ * shell is a molecule. `Checkbox` and `Switch` are atoms because each is a
120
+ * single control with no shell of its own.
121
+ *
122
+ * Built on Headless UI's `RadioGroup` rather than on a `Fieldset` holding
123
+ * radios, because that is the primitive and it already owns the parts worth
124
+ * not rewriting: the roving tabindex, arrow-key navigation that wraps, and the
125
+ * rule that a group with nothing selected still has exactly one tab stop.
126
+ */
127
+ declare const RadioGroup: ({ options, value, onChange, label, helperText, errorMessage, disabled, size, orientation, colorScheme, className, optionsClassName, optionClassName, radioClassName, labelClassName, optionLabelClassName, descriptionClassName, messageClassName, "aria-invalid": ariaInvalid, ...props }: RadioGroupProps) => import("react/jsx-runtime").JSX.Element;
128
+ export { RadioGroup };
@@ -0,0 +1,99 @@
1
+ /**
2
+ * The radio control itself.
3
+ *
4
+ * Deliberately the same shape as `checkboxVariants`: the same three sizes, the
5
+ * same eight color schemes, the same `--roster-control-border` hairline when
6
+ * unchecked and the same `-ink` token on the mark. A radio and a checkbox on
7
+ * one form should differ in what they mean, not in how heavy their edges look.
8
+ *
9
+ * Two things differ. `rounded-full`, and the mark is a dot rather than a
10
+ * glyph — it reads `currentColor`, so the `-ink` token that guarantees
11
+ * contrast on each fill does the work here too. There is also no `soft`
12
+ * variant: `Checkbox` carries eight more compound rows for one, and
13
+ * `CheckboxGroup` surfaces only `colorScheme` to its consumers, so this
14
+ * follows the group rather than the atom.
15
+ *
16
+ * The 44x44 target is built in rather than left to the consumer. Same
17
+ * pseudo-element technique as `Checkbox`, for the same reason and with the
18
+ * same two consequences: `before:` generates no layout box, so the circle
19
+ * keeps its exact dimensions, and the target overhangs the box on all four
20
+ * sides, which means an `overflow: hidden` ancestor clips it and a tightly
21
+ * spaced column overlaps it. The size is stated as `size-11` rather than as a
22
+ * negative inset per size, because `inset` on an absolutely positioned
23
+ * pseudo-element resolves against the PADDING box: an inset measured from each
24
+ * circle's outer width lands 2px short at every size, once for each 1px of
25
+ * border, and looks correct in the source while measuring 42.
26
+ */
27
+ export declare const radioVariants: (props?: ({
28
+ size?: "sm" | "md" | "lg" | null | undefined;
29
+ checked?: boolean | null | undefined;
30
+ colorScheme?: "primary" | "orange" | "teal" | "purple" | "amber" | "success" | "error" | "neutral" | null | undefined;
31
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
32
+ /**
33
+ * The dot inside the circle.
34
+ *
35
+ * `bg-current` rather than a color of its own, so it inherits the `-ink` token
36
+ * the control resolved for whichever fill it is sitting on. Sized to roughly
37
+ * 40% of the circle at every size — 6/16, 8/20, 10/24 — which is where a radio
38
+ * reads as a radio rather than as a filled dot or a faint speck.
39
+ */
40
+ export declare const radioDotVariants: (props?: ({
41
+ size?: "sm" | "md" | "lg" | null | undefined;
42
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
43
+ /**
44
+ * One option.
45
+ *
46
+ * The rule the spacing rests on: **an option's box contains its own target.** A
47
+ * 44px target that can not reach past the option it belongs to can not reach
48
+ * into the one beside it either, at any gap, including zero. That is what lets
49
+ * the gaps be small.
50
+ *
51
+ * One layout covers every case, and the arithmetic is why. The radio is
52
+ * `self-start`, so it sits on the label's first line, and it needs no nudge to
53
+ * land there: the type scale and the size scale agree at every step — 16px
54
+ * line-height against a 16px circle at `sm`, 20 against 20 at `md`, 24 against
55
+ * 24 at `lg` — so the top of the circle and the top of the first line are the
56
+ * same edge. The padding is then whatever closes the gap to 44,
57
+ * `(44 - line-height) / 2`, which puts the radio's center at exactly 22px from
58
+ * the row's top at every size. The target spans the row and nothing else.
59
+ *
60
+ * That single rule holds for a one-line option, an option whose label wraps,
61
+ * and an option with a description, which is why there is no longer a branch
62
+ * for the last of those. Two earlier versions had one and both were wrong in a
63
+ * case they did not cover: a symmetric padding let a described row's target
64
+ * overhang its own top edge by 2 to 6px, and centering a plain row floated the
65
+ * radio into the middle of a two-line label — correct for one line, visibly
66
+ * wrong for two, on text a consumer supplies and can not control the width of.
67
+ *
68
+ * `horizontal` applies the same rule across instead of down, where the binding
69
+ * constraint is width rather than height: two radios less than 44px apart
70
+ * overlap however tall their boxes are. `min-w-11` guarantees it even for a
71
+ * one-character label.
72
+ */
73
+ export declare const radioOptionVariants: (props?: ({
74
+ orientation?: "horizontal" | "vertical" | null | undefined;
75
+ size?: "sm" | "md" | "lg" | null | undefined;
76
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
77
+ /**
78
+ * The options' container.
79
+ *
80
+ * `vertical` is the default because a radio group holds one answer, and options
81
+ * read as alternatives to each other when they are stacked. `horizontal` is for
82
+ * the short scannable set, two or three one-word answers that would otherwise
83
+ * spend three rows of a wide form, and it wraps rather than overflowing:
84
+ * a row of options that runs off the side of a phone is worse than the column
85
+ * it replaced.
86
+ *
87
+ * There is no `columns` prop. `CheckboxGroup` has one because it is the
88
+ * long-list control and a filter list of twenty wants the width; a radio group
89
+ * with that many options wants a `Select`.
90
+ *
91
+ * The gaps are small, and can be, because each option already contains its own
92
+ * target and its own padding. Across, they are larger than down: a horizontal
93
+ * gap separates two whole options rather than two stacked rows, and at the
94
+ * vertical scale two options sat 0 to 4px apart and read as one control.
95
+ */
96
+ export declare const radioGroupOptionsVariants: (props?: ({
97
+ orientation?: "horizontal" | "vertical" | null | undefined;
98
+ size?: "sm" | "md" | "lg" | null | undefined;
99
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
@@ -1,16 +1,16 @@
1
1
  "use client";
2
- import { j as e, T as C, a as S, b as l, c as P, F as a, f as w, d as y, e as v, g as c, B as n, h as N, i as R, k as T, l as k } from "./Table-D-C0ivz2.js";
2
+ import { j as e, T as C, a as S, b as l, c as P, F as a, f as w, d as y, e as v, g as c, B as n, h as N, i as R, k as T, l as k } from "./Table-CSXfWRkc.js";
3
3
  import { useState as F } from "react";
4
- import { tableFeatures as I, sortFns as A, rowPaginationFeature as M, rowSortingFeature as z, createPaginatedRowModel as D, createSortedRowModel as G, useTable as H, flexRender as g } from "@tanstack/react-table";
4
+ import { useTable as I, flexRender as g, tableFeatures as A, sortFns as M, rowPaginationFeature as z, rowSortingFeature as D, createPaginatedRowModel as G, createSortedRowModel as H } from "@tanstack/react-table";
5
5
  import { c as o } from "./utils-koxKGlVV.js";
6
- const B = I({
7
- rowSortingFeature: z,
8
- rowPaginationFeature: M,
9
- sortedRowModel: G(),
10
- paginatedRowModel: D(),
6
+ const B = A({
7
+ rowSortingFeature: D,
8
+ rowPaginationFeature: z,
9
+ sortedRowModel: H(),
10
+ paginatedRowModel: G(),
11
11
  // The whole built-in registry, not a subset: DataTable is generic over
12
12
  // consumer data, so auto sort detection has to be able to reach any of them.
13
- sortFns: A
13
+ sortFns: M
14
14
  });
15
15
  function J({
16
16
  columns: i,
@@ -22,7 +22,7 @@ function J({
22
22
  size: p = "md",
23
23
  hoverable: j = !1
24
24
  }) {
25
- const [h, b] = F([]), t = H({
25
+ const [h, b] = F([]), t = I({
26
26
  features: B,
27
27
  data: d,
28
28
  columns: i,
package/dist/index.d.ts CHANGED
@@ -54,6 +54,8 @@ export * from './components/molecules/Pullquote/Pullquote';
54
54
  export * from './components/molecules/Pullquote/pullquote-variants';
55
55
  export * from './components/molecules/CheckboxGroup/CheckboxGroup';
56
56
  export * from './components/molecules/CheckboxGroup/checkbox-group-variants';
57
+ export * from './components/molecules/RadioGroup/RadioGroup';
58
+ export * from './components/molecules/RadioGroup/radio-group-variants';
57
59
  export * from './components/molecules/Breadcrumbs/Breadcrumbs';
58
60
  export * from './components/molecules/Breadcrumbs/breadcrumb-variants';
59
61
  export * from './components/molecules/CallToAction/CallToAction';
package/dist/meta.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.11.0",
3
- "tests": 1332,
4
- "testFiles": 109
2
+ "version": "4.12.1",
3
+ "tests": 1420,
4
+ "testFiles": 111
5
5
  }