@tedi-design-system/react 19.2.0-rc.7 → 19.2.0-rc.9

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 (68) hide show
  1. package/bundle-stats.html +1 -1
  2. package/component.manifest.json +8 -8
  3. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.cjs.js +1 -1
  4. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.es.js +1 -1
  5. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
  6. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.es.js +1 -1
  7. package/external/hoist-non-react-statics/external/react-is/index.cjs.js +1 -1
  8. package/external/hoist-non-react-statics/external/react-is/index.es.js +1 -1
  9. package/external/prop-types/external/react-is/cjs/react-is.development.cjs.js +1 -1
  10. package/external/prop-types/external/react-is/cjs/react-is.development.es.js +1 -1
  11. package/external/prop-types/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
  12. package/external/prop-types/external/react-is/cjs/react-is.production.min.es.js +1 -1
  13. package/external/prop-types/external/react-is/index.cjs.js +1 -1
  14. package/external/prop-types/external/react-is/index.es.js +1 -1
  15. package/index.css +1 -1
  16. package/package.json +2 -2
  17. package/src/community/components/map-components/map-layer/map-layer.cjs.js +1 -1
  18. package/src/community/components/map-components/map-layer/map-layer.es.js +1 -1
  19. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.cjs.js +1 -0
  20. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.d.ts +20 -0
  21. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.es.js +5 -0
  22. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.cjs.js +1 -0
  23. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.d.ts +72 -0
  24. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.es.js +124 -0
  25. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.module.scss.cjs.js +1 -0
  26. package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.module.scss.es.js +13 -0
  27. package/src/tedi/components/form/checkbox/checkbox.cjs.js +1 -1
  28. package/src/tedi/components/form/checkbox/checkbox.d.ts +8 -2
  29. package/src/tedi/components/form/checkbox/checkbox.es.js +146 -110
  30. package/src/tedi/components/form/checkbox/checkbox.module.scss.cjs.js +1 -1
  31. package/src/tedi/components/form/checkbox/checkbox.module.scss.es.js +11 -3
  32. package/src/tedi/components/form/checkbox/index.cjs.js +1 -0
  33. package/src/tedi/components/form/checkbox/index.d.ts +11 -0
  34. package/src/tedi/components/form/checkbox/index.es.js +7 -0
  35. package/src/tedi/components/form/choice-group/choice-group.d.ts +11 -0
  36. package/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.cjs.js +1 -1
  37. package/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.es.js +15 -15
  38. package/src/tedi/components/form/choice-input.types.d.ts +41 -10
  39. package/src/tedi/components/form/radio/index.cjs.js +1 -0
  40. package/src/tedi/components/form/radio/index.d.ts +11 -0
  41. package/src/tedi/components/form/radio/index.es.js +7 -0
  42. package/src/tedi/components/form/radio/radio-group/radio-group-context.cjs.js +1 -0
  43. package/src/tedi/components/form/radio/radio-group/radio-group-context.d.ts +21 -0
  44. package/src/tedi/components/form/radio/radio-group/radio-group-context.es.js +5 -0
  45. package/src/tedi/components/form/radio/radio-group/radio-group.cjs.js +1 -0
  46. package/src/tedi/components/form/radio/radio-group/radio-group.d.ts +56 -0
  47. package/src/tedi/components/form/radio/radio-group/radio-group.es.js +78 -0
  48. package/src/tedi/components/form/radio/radio-group/radio-group.module.scss.cjs.js +1 -0
  49. package/src/tedi/components/form/radio/radio-group/radio-group.module.scss.es.js +13 -0
  50. package/src/tedi/components/form/radio/radio.cjs.js +1 -1
  51. package/src/tedi/components/form/radio/radio.d.ts +7 -2
  52. package/src/tedi/components/form/radio/radio.es.js +116 -78
  53. package/src/tedi/components/form/radio/radio.module.scss.cjs.js +1 -1
  54. package/src/tedi/components/form/radio/radio.module.scss.es.js +11 -3
  55. package/src/tedi/components/form/textarea/textarea.cjs.js +1 -1
  56. package/src/tedi/components/form/textarea/textarea.es.js +71 -62
  57. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.cjs.js +1 -1
  58. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.d.ts +12 -0
  59. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.es.js +57 -27
  60. package/src/tedi/components/navigation/table-of-contents/table-of-contents.cjs.js +1 -1
  61. package/src/tedi/components/navigation/table-of-contents/table-of-contents.d.ts +17 -0
  62. package/src/tedi/components/navigation/table-of-contents/table-of-contents.es.js +65 -51
  63. package/src/tedi/index.d.ts +2 -2
  64. package/src/tedi/providers/label-provider/labels-map.cjs.js +1 -1
  65. package/src/tedi/providers/label-provider/labels-map.d.ts +14 -0
  66. package/src/tedi/providers/label-provider/labels-map.es.js +25 -11
  67. package/tedi.cjs.js +1 -1
  68. package/tedi.es.js +298 -294
@@ -1,4 +1,4 @@
1
- const e = {
1
+ const c = {
2
2
  "tedi-checkbox": "tedi-checkbox-0294a114",
3
3
  "tedi-checkbox--disabled": "tedi-checkbox--disabled-e22bbaf4",
4
4
  "tedi-checkbox__input": "tedi-checkbox__input-2ecab369",
@@ -12,9 +12,17 @@ const e = {
12
12
  "tedi-checkbox__tooltip-icon": "tedi-checkbox__tooltip-icon-46223bb7",
13
13
  "tedi-checkbox__indicator--size-default": "tedi-checkbox__indicator--size-default-00511279",
14
14
  "tedi-checkbox__indicator--size-large": "tedi-checkbox__indicator--size-large-b64ce54c",
15
+ "tedi-checkbox__indicator--invalid": "tedi-checkbox__indicator--invalid-019a355d",
15
16
  "tedi-checkbox__indicator--hover": "tedi-checkbox__indicator--hover-436b8cb1",
16
- "tedi-checkbox__indicator--invalid": "tedi-checkbox__indicator--invalid-019a355d"
17
+ "tedi-checkbox--card": "tedi-checkbox--card-d1faeb0e",
18
+ "tedi-checkbox__card-control": "tedi-checkbox__card-control-ea88c4f4",
19
+ "tedi-checkbox__card-label": "tedi-checkbox__card-label-4c136337",
20
+ "tedi-checkbox__card-icon": "tedi-checkbox__card-icon-a4d72e5a",
21
+ "tedi-checkbox__card-description": "tedi-checkbox__card-description-fa672631",
22
+ "tedi-checkbox--card-with-icon": "tedi-checkbox--card-with-icon-2636b953",
23
+ "tedi-checkbox--card-primary": "tedi-checkbox--card-primary-b7da557f",
24
+ "tedi-checkbox--card-secondary": "tedi-checkbox--card-secondary-179169ca"
17
25
  };
18
26
  export {
19
- e as default
27
+ c as default
20
28
  };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./checkbox.cjs.js"),e=require("./checkbox-group/checkbox-group.cjs.js"),c=Object.assign(o.Checkbox,{Group:e.CheckboxGroup});exports.CheckboxGroup=e.CheckboxGroup;exports.Checkbox=c;
@@ -0,0 +1,11 @@
1
+ import { CheckboxProps } from './checkbox';
2
+ import { default as CheckboxGroup } from './checkbox-group/checkbox-group';
3
+ declare const Checkbox: {
4
+ (props: CheckboxProps): JSX.Element;
5
+ displayName?: string;
6
+ Group: typeof CheckboxGroup;
7
+ };
8
+ export { Checkbox, CheckboxGroup };
9
+ export type { CheckboxBaseProps, CheckboxProps } from './checkbox';
10
+ export type { CheckboxGroupProps } from './checkbox-group/checkbox-group';
11
+ export default Checkbox;
@@ -0,0 +1,7 @@
1
+ import { Checkbox as o } from "./checkbox.es.js";
2
+ import { CheckboxGroup as r } from "./checkbox-group/checkbox-group.es.js";
3
+ const b = Object.assign(o, { Group: r });
4
+ export {
5
+ b as Checkbox,
6
+ r as CheckboxGroup
7
+ };
@@ -28,8 +28,19 @@ interface ChoiceGroupAllProps extends Omit<FormLabelProps, 'id' | 'label'> {
28
28
  indented?: boolean;
29
29
  } & Partial<Omit<CheckboxProps, 'indeterminate' | 'checked' | 'onChange' | 'defaultChecked' | 'label'>>;
30
30
  }
31
+ /**
32
+ * @deprecated Use the compound `Radio.Group` / `Checkbox.Group` (with composable
33
+ * `Radio` / `Checkbox` children, including `variant="card"`) instead. `ChoiceGroup`
34
+ * remains for backwards compatibility and will be removed in a future major version.
35
+ */
31
36
  export interface ChoiceGroupProps extends BreakpointSupport<ChoiceGroupAllProps> {
32
37
  }
38
+ /**
39
+ * @deprecated Use the compound `Radio.Group` / `Checkbox.Group` instead — e.g.
40
+ * `<Radio.Group label="…"><Radio value="a" label="A" /></Radio.Group>`, with
41
+ * `variant="card"` for the card layout. `ChoiceGroup` stays for backwards
42
+ * compatibility and will be removed in a future major version.
43
+ */
33
44
  export declare const ChoiceGroup: {
34
45
  (props: ChoiceGroupProps): React.ReactElement;
35
46
  Item: (props: ExtendedChoiceGroupItemProps) => React.ReactElement;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),n=require("../../../../../../../external/classnames/index.cjs.js"),R=require("react"),S=require("../../../checkbox/checkbox.cjs.js"),A=require("../../../feedback-text/feedback-text.cjs.js"),H=require("../../../radio/radio.cjs.js"),L=require("../../choice-group-context.cjs.js"),e=require("./choice-group-item.module.scss.cjs.js"),O=require("../../../../../helpers/hooks/use-breakpoint-props.cjs.js"),V=require("../../../../layout/grid/col.cjs.js"),v=u=>{const{getCurrentBreakpointProps:_}=O.useBreakpointProps(u.defaultServerBreakpoint),{id:c,label:C,value:a,className:q,direction:h,disabled:d,colProps:N=h==="column"?{width:12}:{width:"auto"},onChange:m,hideLabel:$,helper:i,tooltip:B,type:p="radio",variant:l="default",color:G="primary",layout:I,showIndicator:k,justifyContent:x="start"}=_(u),{currentValue:r,name:b,onChange:f,inputType:P}=R.useContext(L.ChoiceGroupContext),s=Array.isArray(r)?r.includes(a):a===r,M=r===void 0?u.defaultChecked:s,y=(o,g)=>{f==null||f(o,g),m==null||m(o,g)},T=n.default(e.default[`tedi-choice-group-item--${I==="separated"?"separated":"segmented"}`],h&&e.default[`tedi-choice-group-item--${h}`]),w=n.default(e.default["tedi-choice-group-item"],e.default[`tedi-choice-group-item--${l}`],e.default[`tedi-choice-group-item--${l}-${G}`],k&&e.default["tedi-choice-group-item--indicator"],p&&e.default[`tedi-choice-group-item--${p}`],{[e.default["tedi-choice-group-item--disabled"]]:d},{[e.default["tedi-choice-group-item--checked"]]:s},{[`justify-content-${x}`]:x}),E=p==="radio"?H.Radio:S.Checkbox,F=o=>{var j;d||l!=="card"||o.target.closest("input, label")||(j=document.getElementById(c))==null||j.click()};return t.jsx(V.Col,{...N,className:T,children:t.jsx("div",{className:w,onClick:F,"aria-disabled":d||void 0,children:l==="default"||k?t.jsx(E,{id:c,label:C,value:a,name:b,className:n.default(e.default["tedi-choice-group-item__indicator"],q),disabled:d,checked:s,defaultChecked:M,onChange:y,hideLabel:$,helper:i?{...i,className:n.default(e.default["tedi-choice-group-item__feedback-text"],i.className)}:void 0,tooltip:B,"data-testid":"choice-group-item-indicator"}):t.jsxs(t.Fragment,{children:[t.jsx("input",{id:c,value:a,name:b,type:P,disabled:d,checked:s,defaultChecked:r===void 0?u.defaultChecked:void 0,onChange:o=>{y(a,o.target.checked)},className:"visually-hidden"}),t.jsxs("label",{htmlFor:c,className:e.default["tedi-choice-group-item__label"],children:[C,i&&t.jsx(A.FeedbackText,{...i,id:i.id??`${c}-helper`,className:e.default["tedi-choice-group-item__feedback-text"]})]})]})})})};exports.ChoiceGroupItem=v;exports.default=v;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),n=require("../../../../../../../external/classnames/index.cjs.js"),R=require("react"),S=require("../../../checkbox/checkbox.cjs.js"),A=require("../../../feedback-text/feedback-text.cjs.js"),H=require("../../../radio/radio.cjs.js"),L=require("../../choice-group-context.cjs.js"),e=require("./choice-group-item.module.scss.cjs.js"),O=require("../../../../../helpers/hooks/use-breakpoint-props.cjs.js"),V=require("../../../../layout/grid/col.cjs.js"),v=u=>{const{getCurrentBreakpointProps:_}=O.useBreakpointProps(u.defaultServerBreakpoint),{id:i,label:C,value:a,className:q,direction:h,disabled:d,colProps:N=h==="column"?{width:12}:{width:"auto"},onChange:m,hideLabel:$,helper:o,tooltip:B,type:p="radio",variant:l="default",color:G="primary",layout:I,showIndicator:k,justifyContent:x="start"}=_(u),{currentValue:r,name:b,onChange:f,inputType:P}=R.useContext(L.ChoiceGroupContext),s=Array.isArray(r)?r.includes(a):a===r,M=r===void 0?u.defaultChecked:s,y=(c,g)=>{f==null||f(c,g),m==null||m(c,g)},T=n.default(e.default[`tedi-choice-group-item--${I==="separated"?"separated":"segmented"}`],h&&e.default[`tedi-choice-group-item--${h}`]),w=n.default(e.default["tedi-choice-group-item"],e.default[`tedi-choice-group-item--${l}`],e.default[`tedi-choice-group-item--${l}-${G}`],k&&e.default["tedi-choice-group-item--indicator"],p&&e.default[`tedi-choice-group-item--${p}`],{[e.default["tedi-choice-group-item--disabled"]]:d},{[e.default["tedi-choice-group-item--checked"]]:s},{[`justify-content-${x}`]:x}),E=p==="radio"?H.Radio:S.Checkbox,F=c=>{var j;d||l!=="card"||c.target.closest("input, label")||i&&((j=document.getElementById(i))==null||j.click())};return t.jsx(V.Col,{...N,className:T,children:t.jsx("div",{className:w,onClick:F,"aria-disabled":d||void 0,children:l==="default"||k?t.jsx(E,{id:i,label:C,value:a,name:b,className:n.default(e.default["tedi-choice-group-item__indicator"],q),disabled:d,checked:s,defaultChecked:M,onChange:y,hideLabel:$,helper:o?{...o,className:n.default(e.default["tedi-choice-group-item__feedback-text"],o.className)}:void 0,tooltip:B,"data-testid":"choice-group-item-indicator"}):t.jsxs(t.Fragment,{children:[t.jsx("input",{id:i,value:a,name:b,type:P,disabled:d,checked:s,defaultChecked:r===void 0?u.defaultChecked:void 0,onChange:c=>{y(a,c.target.checked)},className:"visually-hidden"}),t.jsxs("label",{htmlFor:i,className:e.default["tedi-choice-group-item__label"],children:[C,o&&t.jsx(A.FeedbackText,{...o,id:o.id??`${i}-helper`,className:e.default["tedi-choice-group-item__feedback-text"]})]})]})})})};exports.ChoiceGroupItem=v;exports.default=v;
@@ -10,7 +10,7 @@ import { useBreakpointProps as V } from "../../../../../helpers/hooks/use-breakp
10
10
  import { Col as q } from "../../../../layout/grid/col.es.js";
11
11
  const te = (n) => {
12
12
  const { getCurrentBreakpointProps: x } = V(n.defaultServerBreakpoint), {
13
- id: o,
13
+ id: t,
14
14
  label: C,
15
15
  value: c,
16
16
  className: $,
@@ -19,7 +19,7 @@ const te = (n) => {
19
19
  colProps: B = u === "column" ? { width: 12 } : { width: "auto" },
20
20
  onChange: p,
21
21
  hideLabel: I,
22
- helper: t,
22
+ helper: i,
23
23
  tooltip: j,
24
24
  type: h = "radio",
25
25
  variant: l = "default",
@@ -27,8 +27,8 @@ const te = (n) => {
27
27
  layout: E,
28
28
  showIndicator: k,
29
29
  justifyContent: b = "start"
30
- } = x(n), { currentValue: a, name: y, onChange: f, inputType: F } = R.useContext(S), s = Array.isArray(a) ? a.includes(c) : c === a, G = a === void 0 ? n.defaultChecked : s, N = (i, g) => {
31
- f == null || f(i, g), p == null || p(i, g);
30
+ } = x(n), { currentValue: a, name: y, onChange: f, inputType: F } = R.useContext(S), s = Array.isArray(a) ? a.includes(c) : c === a, G = a === void 0 ? n.defaultChecked : s, N = (o, g) => {
31
+ f == null || f(o, g), p == null || p(o, g);
32
32
  }, P = m(
33
33
  e[`tedi-choice-group-item--${E === "separated" ? "separated" : "segmented"}`],
34
34
  u && e[`tedi-choice-group-item--${u}`]
@@ -42,13 +42,13 @@ const te = (n) => {
42
42
  { [e["tedi-choice-group-item--checked"]]: s },
43
43
  { [`justify-content-${b}`]: b }
44
44
  );
45
- return /* @__PURE__ */ d(q, { ...B, className: P, children: /* @__PURE__ */ d("div", { className: A, onClick: (i) => {
45
+ return /* @__PURE__ */ d(q, { ...B, className: P, children: /* @__PURE__ */ d("div", { className: A, onClick: (o) => {
46
46
  var _;
47
- r || l !== "card" || i.target.closest("input, label") || (_ = document.getElementById(o)) == null || _.click();
47
+ r || l !== "card" || o.target.closest("input, label") || t && ((_ = document.getElementById(t)) == null || _.click());
48
48
  }, "aria-disabled": r || void 0, children: l === "default" || k ? /* @__PURE__ */ d(
49
49
  h === "radio" ? L : T,
50
50
  {
51
- id: o,
51
+ id: t,
52
52
  label: C,
53
53
  value: c,
54
54
  name: y,
@@ -58,7 +58,7 @@ const te = (n) => {
58
58
  defaultChecked: G,
59
59
  onChange: N,
60
60
  hideLabel: I,
61
- helper: t ? { ...t, className: m(e["tedi-choice-group-item__feedback-text"], t.className) } : void 0,
61
+ helper: i ? { ...i, className: m(e["tedi-choice-group-item__feedback-text"], i.className) } : void 0,
62
62
  tooltip: j,
63
63
  "data-testid": "choice-group-item-indicator"
64
64
  }
@@ -66,26 +66,26 @@ const te = (n) => {
66
66
  /* @__PURE__ */ d(
67
67
  "input",
68
68
  {
69
- id: o,
69
+ id: t,
70
70
  value: c,
71
71
  name: y,
72
72
  type: F,
73
73
  disabled: r,
74
74
  checked: s,
75
75
  defaultChecked: a === void 0 ? n.defaultChecked : void 0,
76
- onChange: (i) => {
77
- N(c, i.target.checked);
76
+ onChange: (o) => {
77
+ N(c, o.target.checked);
78
78
  },
79
79
  className: "visually-hidden"
80
80
  }
81
81
  ),
82
- /* @__PURE__ */ v("label", { htmlFor: o, className: e["tedi-choice-group-item__label"], children: [
82
+ /* @__PURE__ */ v("label", { htmlFor: t, className: e["tedi-choice-group-item__label"], children: [
83
83
  C,
84
- t && /* @__PURE__ */ d(
84
+ i && /* @__PURE__ */ d(
85
85
  H,
86
86
  {
87
- ...t,
88
- id: t.id ?? `${o}-helper`,
87
+ ...i,
88
+ id: i.id ?? `${t}-helper`,
89
89
  className: e["tedi-choice-group-item__feedback-text"]
90
90
  }
91
91
  )
@@ -1,10 +1,12 @@
1
1
  import { FeedbackTextProps } from './feedback-text/feedback-text';
2
2
  import { FormLabelProps } from './form-label/form-label';
3
- export interface ChoiceInputProps {
3
+ export type ChoiceInputVariant = 'default' | 'card';
4
+ export type ChoiceInputCardVariant = 'primary' | 'secondary';
5
+ interface ChoiceInputBaseProps {
4
6
  /**
5
- * ID property
7
+ * ID property. When omitted a stable id is generated (useful inside `Radio.Group` / `Checkbox.Group`).
6
8
  */
7
- id: string;
9
+ id?: string;
8
10
  /**
9
11
  * Label text
10
12
  */
@@ -18,9 +20,22 @@ export interface ChoiceInputProps {
18
20
  */
19
21
  value: string;
20
22
  /**
21
- * name of the input
23
+ * name of the input. Provided automatically when rendered inside `Radio.Group` / `Checkbox.Group`.
22
24
  */
23
- name: string;
25
+ name?: string;
26
+ /**
27
+ * Card colour variant. Only applies when `variant="card"`.
28
+ * @default primary
29
+ */
30
+ cardVariant?: ChoiceInputCardVariant;
31
+ /**
32
+ * Secondary description text shown under the label. Primarily used with `variant="card"`.
33
+ */
34
+ description?: React.ReactNode;
35
+ /**
36
+ * Leading icon (Material icon name) shown before the label. Primarily used with `variant="card"`.
37
+ */
38
+ icon?: string;
24
39
  /**
25
40
  * is the label hidden
26
41
  */
@@ -49,11 +64,6 @@ export interface ChoiceInputProps {
49
64
  * If the item should be in hover state
50
65
  */
51
66
  hover?: boolean;
52
- /**
53
- * Provide content for tooltip. Accepts rich content (e.g. bold text, links),
54
- * not just a plain string.
55
- */
56
- tooltip?: React.ReactNode;
57
67
  /**
58
68
  * Additional props forwarded to the underlying `Label` component.
59
69
  * Use `modifiers` to control how the label text wraps or breaks
@@ -73,3 +83,24 @@ export interface ChoiceInputProps {
73
83
  */
74
84
  required?: boolean;
75
85
  }
86
+ export interface ChoiceInputProps extends ChoiceInputBaseProps {
87
+ /**
88
+ * Visual variant.
89
+ * - `default` — standard indicator + label.
90
+ * - `card` — the whole control renders as a selectable card (indicator, label, optional icon/description).
91
+ * @default default
92
+ */
93
+ variant?: ChoiceInputVariant;
94
+ /**
95
+ * Provide content for tooltip. Accepts rich content (e.g. bold text, links),
96
+ * not just a plain string.
97
+ *
98
+ * Mutually exclusive with `variant="card"` — the card carries supplementary
99
+ * content through its `description` slot instead. Passing both logs a dev-time
100
+ * warning and the tooltip is ignored. (This is enforced at runtime rather than
101
+ * in the types: a discriminated union would reject the dynamic prop-spreading
102
+ * that `Checkbox.Group` / `Radio.Group` / `Table` rely on.)
103
+ */
104
+ tooltip?: React.ReactNode;
105
+ }
106
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./radio.cjs.js"),o=require("./radio-group/radio-group.cjs.js"),i=Object.assign(r.Radio,{Group:o.RadioGroup});exports.RadioGroup=o.RadioGroup;exports.Radio=i;
@@ -0,0 +1,11 @@
1
+ import { RadioProps } from './radio';
2
+ import { default as RadioGroup } from './radio-group/radio-group';
3
+ declare const Radio: {
4
+ (props: RadioProps): JSX.Element;
5
+ displayName?: string;
6
+ Group: typeof RadioGroup;
7
+ };
8
+ export { Radio, RadioGroup };
9
+ export type { RadioProps } from './radio';
10
+ export type { RadioGroupProps } from './radio-group/radio-group';
11
+ export default Radio;
@@ -0,0 +1,7 @@
1
+ import { Radio as o } from "./radio.es.js";
2
+ import { RadioGroup as i } from "./radio-group/radio-group.es.js";
3
+ const p = Object.assign(o, { Group: i });
4
+ export {
5
+ p as Radio,
6
+ i as RadioGroup
7
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),e=t.createContext(null);exports.RadioGroupContext=e;
@@ -0,0 +1,21 @@
1
+ import { default as React } from 'react';
2
+ import { ChoiceInputCardVariant, ChoiceInputVariant } from '../../choice-input.types';
3
+ export interface RadioGroupContextValue {
4
+ /** Shared `name` for all radios in the group. */
5
+ name: string;
6
+ /** Currently selected value (`null` when nothing is selected). */
7
+ value: string | null;
8
+ /** Called by a `Radio` when it is selected. */
9
+ onValueChange: (value: string) => void;
10
+ disabled?: boolean;
11
+ invalid?: boolean;
12
+ required?: boolean;
13
+ size?: 'default' | 'large';
14
+ variant?: ChoiceInputVariant;
15
+ cardVariant?: ChoiceInputCardVariant;
16
+ }
17
+ /**
18
+ * Provided by `Radio.Group`. When present, a `Radio` reads its selection,
19
+ * `name`, and shared visual props from here instead of managing its own state.
20
+ */
21
+ export declare const RadioGroupContext: React.Context<RadioGroupContextValue | null>;
@@ -0,0 +1,5 @@
1
+ import t from "react";
2
+ const e = t.createContext(null);
3
+ export {
4
+ e as RadioGroupContext
5
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),V=require("../../../../../../external/classnames/index.cjs.js"),r=require("react"),z=require("../../feedback-text/feedback-text.cjs.js"),e=require("./radio-group.module.scss.cjs.js"),F=require("./radio-group-context.cjs.js"),L=require("../../../../helpers/hooks/use-breakpoint-props.cjs.js"),c=p=>{const{getCurrentBreakpointProps:k}=L.useBreakpointProps(p.defaultServerBreakpoint),{id:I,name:C,label:l,hideLabel:G=!1,helper:d,className:R,value:g,defaultValue:P=null,onChange:t,disabled:u,invalid:s,required:i,size:m,variant:o="default",cardVariant:f="primary",direction:v=o==="card"?"row":"column",layout:b="separated",children:B}=k(p),S=r.useId(),h=I??S,M=r.useId(),x=C??M,n=g!==void 0,[T,$]=r.useState(P),q=n?g??null:T,_=d?d.id??`${h}-helper`:void 0,j=`${h}-legend`,y=r.useCallback(N=>{n||$(N),t==null||t(N)},[n,t]),w=r.useMemo(()=>({name:x,value:q,onValueChange:y,disabled:u,invalid:s,required:i,size:m,variant:o,cardVariant:f}),[x,q,y,u,s,i,m,o,f]);return a.jsxs("fieldset",{className:V.default(e.default["tedi-radio-group"],e.default[`tedi-radio-group--${v}`],{[e.default["tedi-radio-group--card"]]:o==="card"},{[e.default["tedi-radio-group--segmented"]]:b==="segmented"},R),role:"radiogroup","aria-labelledby":l?j:void 0,disabled:u,"aria-invalid":s||void 0,"aria-required":i||void 0,"aria-describedby":_,children:[l&&a.jsxs("legend",{id:j,className:V.default(e.default["tedi-radio-group__legend"],{"sr-only":G}),children:[l,i&&a.jsx("span",{"aria-hidden":"true",className:e.default["tedi-radio-group__required"],children:"*"})]}),a.jsx(F.RadioGroupContext.Provider,{value:w,children:a.jsx("div",{className:e.default["tedi-radio-group__items"],"data-layout":b,"data-direction":v,children:B})}),d&&a.jsx(z.FeedbackText,{id:_,...d})]})};c.displayName="Radio.Group";exports.RadioGroup=c;exports.default=c;
@@ -0,0 +1,56 @@
1
+ import { default as React } from 'react';
2
+ import { BreakpointSupport } from '../../../../helpers';
3
+ import { ChoiceInputCardVariant, ChoiceInputVariant } from '../../choice-input.types';
4
+ import { FeedbackTextProps } from '../../feedback-text/feedback-text';
5
+ interface RadioGroupBreakpointProps {
6
+ /** Group id. When omitted a stable id is generated. */
7
+ id?: string;
8
+ /**
9
+ * Shared `name` for the radios. When omitted a stable name is generated so the
10
+ * group still behaves as a single native radio group.
11
+ */
12
+ name?: string;
13
+ /** Group label, rendered as the fieldset legend. */
14
+ label: React.ReactNode;
15
+ /** Visually hide the legend while keeping it available to screen readers. */
16
+ hideLabel?: boolean;
17
+ /** Helper / feedback text rendered below the group. */
18
+ helper?: FeedbackTextProps;
19
+ /** Additional class name(s) applied to the fieldset. */
20
+ className?: string;
21
+ /** Controlled selected value. Pair with `onChange`. */
22
+ value?: string | null;
23
+ /** Uncontrolled initial selected value. */
24
+ defaultValue?: string | null;
25
+ /** Fires with the newly selected value. */
26
+ onChange?: (value: string) => void;
27
+ /** Disables the whole group and every radio within it. */
28
+ disabled?: boolean;
29
+ /** Marks the group as invalid, forwarding the error state to each radio. */
30
+ invalid?: boolean;
31
+ /** Marks the group as required, adding a required indicator to the legend. */
32
+ required?: boolean;
33
+ /** Size forwarded to every radio. @default 'default' */
34
+ size?: 'default' | 'large';
35
+ /** Visual variant forwarded to every radio. @default 'default' */
36
+ variant?: ChoiceInputVariant;
37
+ /** Card colour variant forwarded to every radio (only applies to `variant="card"`). @default 'primary' */
38
+ cardVariant?: ChoiceInputCardVariant;
39
+ /** Layout direction of the radios. Defaults to `row` for cards, `column` otherwise. */
40
+ direction?: 'row' | 'column';
41
+ /**
42
+ * Card layout. `separated` = individual cards with a gap; `segmented` = joined
43
+ * cards with shared borders and only the group's outer corners rounded (a
44
+ * button-group style). Only applies to `variant="card"`.
45
+ * @default separated
46
+ */
47
+ layout?: 'separated' | 'segmented';
48
+ /** The `Radio` items that make up the group. */
49
+ children: React.ReactNode;
50
+ }
51
+ export type RadioGroupProps = BreakpointSupport<RadioGroupBreakpointProps>;
52
+ export declare const RadioGroup: {
53
+ (props: RadioGroupProps): JSX.Element;
54
+ displayName: string;
55
+ };
56
+ export default RadioGroup;
@@ -0,0 +1,78 @@
1
+ import { jsxs as k, jsx as t } from "react/jsx-runtime";
2
+ import x from "../../../../../../external/classnames/index.es.js";
3
+ import a from "react";
4
+ import { FeedbackText as L } from "../../feedback-text/feedback-text.es.js";
5
+ import e from "./radio-group.module.scss.es.js";
6
+ import { RadioGroupContext as M } from "./radio-group-context.es.js";
7
+ import { useBreakpointProps as T } from "../../../../helpers/hooks/use-breakpoint-props.es.js";
8
+ const A = (c) => {
9
+ const { getCurrentBreakpointProps: C } = T(c.defaultServerBreakpoint), {
10
+ id: R,
11
+ name: q,
12
+ label: l,
13
+ hideLabel: B = !1,
14
+ helper: r,
15
+ className: G,
16
+ value: m,
17
+ defaultValue: P = null,
18
+ onChange: d,
19
+ disabled: s,
20
+ invalid: n,
21
+ required: o,
22
+ size: p,
23
+ variant: i = "default",
24
+ cardVariant: g = "primary",
25
+ direction: v = i === "card" ? "row" : "column",
26
+ layout: f = "separated",
27
+ children: $
28
+ } = C(c), j = a.useId(), h = R ?? j, S = a.useId(), b = q ?? S, u = m !== void 0, [w, z] = a.useState(P), N = u ? m ?? null : w, y = r ? r.id ?? `${h}-helper` : void 0, V = `${h}-legend`, _ = a.useCallback(
29
+ (I) => {
30
+ u || z(I), d == null || d(I);
31
+ },
32
+ [u, d]
33
+ ), F = a.useMemo(
34
+ () => ({
35
+ name: b,
36
+ value: N,
37
+ onValueChange: _,
38
+ disabled: s,
39
+ invalid: n,
40
+ required: o,
41
+ size: p,
42
+ variant: i,
43
+ cardVariant: g
44
+ }),
45
+ [b, N, _, s, n, o, p, i, g]
46
+ );
47
+ return /* @__PURE__ */ k(
48
+ "fieldset",
49
+ {
50
+ className: x(
51
+ e["tedi-radio-group"],
52
+ e[`tedi-radio-group--${v}`],
53
+ { [e["tedi-radio-group--card"]]: i === "card" },
54
+ { [e["tedi-radio-group--segmented"]]: f === "segmented" },
55
+ G
56
+ ),
57
+ role: "radiogroup",
58
+ "aria-labelledby": l ? V : void 0,
59
+ disabled: s,
60
+ "aria-invalid": n || void 0,
61
+ "aria-required": o || void 0,
62
+ "aria-describedby": y,
63
+ children: [
64
+ l && /* @__PURE__ */ k("legend", { id: V, className: x(e["tedi-radio-group__legend"], { "sr-only": B }), children: [
65
+ l,
66
+ o && /* @__PURE__ */ t("span", { "aria-hidden": "true", className: e["tedi-radio-group__required"], children: "*" })
67
+ ] }),
68
+ /* @__PURE__ */ t(M.Provider, { value: F, children: /* @__PURE__ */ t("div", { className: e["tedi-radio-group__items"], "data-layout": f, "data-direction": v, children: $ }) }),
69
+ r && /* @__PURE__ */ t(L, { id: y, ...r })
70
+ ]
71
+ }
72
+ );
73
+ };
74
+ A.displayName = "Radio.Group";
75
+ export {
76
+ A as RadioGroup,
77
+ A as default
78
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d={"tedi-radio-group":"tedi-radio-group-9afc9d2d","tedi-radio-group__legend":"tedi-radio-group__legend-b05d4880","tedi-radio-group__required":"tedi-radio-group__required-d42646cf","tedi-radio-group__items":"tedi-radio-group__items-aa5bd239","tedi-radio-group--column":"tedi-radio-group--column-45aad530","tedi-radio-group--row":"tedi-radio-group--row-c3eb1dfe","tedi-radio-group--card":"tedi-radio-group--card-5828dd1c","tedi-radio-group--segmented":"tedi-radio-group--segmented-2b67e0c6"};exports.default=d;
@@ -0,0 +1,13 @@
1
+ const d = {
2
+ "tedi-radio-group": "tedi-radio-group-9afc9d2d",
3
+ "tedi-radio-group__legend": "tedi-radio-group__legend-b05d4880",
4
+ "tedi-radio-group__required": "tedi-radio-group__required-d42646cf",
5
+ "tedi-radio-group__items": "tedi-radio-group__items-aa5bd239",
6
+ "tedi-radio-group--column": "tedi-radio-group--column-45aad530",
7
+ "tedi-radio-group--row": "tedi-radio-group--row-c3eb1dfe",
8
+ "tedi-radio-group--card": "tedi-radio-group--card-5828dd1c",
9
+ "tedi-radio-group--segmented": "tedi-radio-group--segmented-2b67e0c6"
10
+ };
11
+ export {
12
+ d as default
13
+ };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),o=require("../../../../../external/classnames/index.cjs.js"),c=require("react"),$=require("../feedback-text/feedback-text.cjs.js"),z=require("../form-label/form-label.cjs.js"),e=require("./radio.module.scss.cjs.js"),B=require("../../layout/grid/row.cjs.js"),x=require("../../layout/grid/col.cjs.js"),j=k=>{const{id:r,label:u,value:n,className:q,disabled:s,onChange:i,hideLabel:C,helper:t,checked:l,defaultChecked:N,hover:g,name:R,tooltip:f,labelProps:y,size:h="default",invalid:w,required:_,...L}=k,[b,M]=c.useState(N||!1),m=c.useRef(null),v=c.useMemo(()=>i&&typeof l<"u"?l:b,[i,b,l]),I=d=>{typeof l>"u"&&M(d==null?void 0:d.target.checked),i==null||i(n,d==null?void 0:d.target.checked)},p=t?t.id??`${r}-helper`:void 0,S=f?`${r}-tooltip`:void 0,T=o.default(e.default["tedi-radio__label"],{[e.default["tedi-radio--disabled"]]:s});return a.jsxs("div",{className:o.default(e.default["tedi-radio"],{[e.default["tedi-radio--disabled"]]:s}),"data-name":"radio",...L,children:[a.jsxs(B.Row,{gutter:0,children:[a.jsx(x.Col,{width:"auto",children:a.jsxs("div",{className:e.default["tedi-radio__outer-indicator-wrapper"],children:[a.jsx("input",{id:r,value:n,name:R,type:"radio",disabled:s,checked:v,onChange:I,className:e.default["tedi-radio__input"],"aria-describedby":[p,S].filter(Boolean).join(" "),required:_}),a.jsx("div",{"aria-hidden":"true",onClick:()=>{var d;return(d=m.current)==null?void 0:d.click()},className:o.default(e.default["tedi-radio__indicator"],{[e.default["tedi-radio__indicator--hover"]]:g},{[e.default[`tedi-radio__indicator--size-${h}`]]:h},{[e.default["tedi-radio__indicator--invalid"]]:w},q),"data-testid":"radio-indicator"})]})}),u&&a.jsx(x.Col,{children:a.jsx(z.FormLabel,{ref:m,className:T,id:r,"data-testid":"radio-label",hideLabel:C,label:u,tooltip:f,required:_,labelProps:y})})]}),t&&a.jsx($.FeedbackText,{id:p,...t,className:o.default(e.default["tedi-radio__helper"],t.className)})]})};exports.Radio=j;exports.default=j;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("react/jsx-runtime"),r=require("../../../../../external/classnames/index.cjs.js"),s=require("react"),ee=require("../../base/icon/icon.cjs.js"),R=require("../feedback-text/feedback-text.cjs.js"),ae=require("../form-label/form-label.cjs.js"),a=require("./radio.module.scss.cjs.js"),de=require("./radio-group/radio-group-context.cjs.js"),ie=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),te=require("../../layout/grid/row.cjs.js"),z=require("../../layout/grid/col.cjs.js"),N=j=>{const e=s.useContext(de.RadioGroupContext),{getCurrentBreakpointProps:$}=ie.useBreakpointProps(j.defaultServerBreakpoint),{id:L,label:c,value:o,className:q,onChange:l,hideLabel:v,helper:t,checked:u,defaultChecked:V,hover:M,name:S,tooltip:k,description:b,icon:h,labelProps:T,size:E,variant:F,cardVariant:G,disabled:D,invalid:H,required:y,...C}=$(j),p=E??(e==null?void 0:e.size)??"default",P=F??(e==null?void 0:e.variant)??"default",O=G??(e==null?void 0:e.cardVariant)??"primary",f=D??(e==null?void 0:e.disabled)??!1,U=H??(e==null?void 0:e.invalid),A=y??(e==null?void 0:e.required);P==="card"&&k&&console.warn('Radio: `tooltip` is not supported with `variant="card"` and will be ignored. Use `description`.');const J=s.useId(),n=L??J,K=S??(e==null?void 0:e.name),[w,Q]=s.useState(V||!1),_=e!==null,W=s.useMemo(()=>_?(e==null?void 0:e.value)===o:l&&typeof u<"u"?u:w,[_,e,o,l,u,w]),X=i=>{_?e==null||e.onValueChange(o):typeof u>"u"&&Q(i==null?void 0:i.target.checked),l==null||l(o,i==null?void 0:i.target.checked)},m=t?t.id??`${n}-helper`:void 0,Y=m,B=d.jsx("input",{id:n,value:o,name:K,type:"radio",disabled:f,checked:W,required:A,onChange:X,className:a.default["tedi-radio__input"],"aria-describedby":Y}),x=d.jsx("span",{"aria-hidden":"true",className:r.default(a.default["tedi-radio__indicator"],{[a.default["tedi-radio__indicator--hover"]]:M},{[a.default[`tedi-radio__indicator--size-${p}`]]:p},{[a.default["tedi-radio__indicator--invalid"]]:U}),"data-testid":"radio-indicator"});if(P==="card"){const i=`${n}-label`,I=b?`${n}-description`:void 0,g=[I,m].filter(Boolean).join(" ")||void 0;return d.jsxs("label",{"data-name":"radio",className:r.default(a.default["tedi-radio"],a.default["tedi-radio--card"],a.default[`tedi-radio--card-${O}`],{[a.default["tedi-radio--card-with-icon"]]:!!h},{[a.default["tedi-radio--disabled"]]:f},q),...C,children:[d.jsxs("span",{className:a.default["tedi-radio__card-control"],children:[s.cloneElement(B,{"aria-labelledby":c?i:void 0,"aria-describedby":g}),x,h&&d.jsx(ee.Icon,{name:h,size:p==="default"?18:24,className:a.default["tedi-radio__card-icon"]}),d.jsx("span",{id:i,className:r.default(a.default["tedi-radio__card-label"],{"sr-only":v}),children:c})]}),b&&d.jsx("span",{id:I,className:a.default["tedi-radio__card-description"],children:b}),t&&d.jsx(R.FeedbackText,{id:m,...t,className:r.default(a.default["tedi-radio__helper"],t.className)})]})}const Z=r.default(a.default["tedi-radio__label"],{[a.default["tedi-radio--disabled"]]:f});return d.jsxs("div",{className:r.default(a.default["tedi-radio"],{[a.default["tedi-radio--disabled"]]:f}),"data-name":"radio",...C,children:[d.jsxs(te.Row,{gutter:0,children:[d.jsx(z.Col,{width:"auto",children:d.jsxs("div",{className:a.default["tedi-radio__outer-indicator-wrapper"],children:[B,s.cloneElement(x,{className:r.default(x.props.className,q)})]})}),c&&d.jsx(z.Col,{children:d.jsx(ae.FormLabel,{className:Z,id:n,"data-testid":"radio-label",hideLabel:v,label:c,tooltip:k,required:y,labelProps:T})})]}),t&&d.jsx(R.FeedbackText,{id:m,...t,className:r.default(a.default["tedi-radio__helper"],t.className)})]})};N.displayName="Radio";exports.Radio=N;exports.default=N;
@@ -1,4 +1,9 @@
1
+ import { BreakpointSupport } from '../../../helpers';
1
2
  import { ChoiceInputProps } from '../choice-input.types';
2
- export type RadioProps = ChoiceInputProps;
3
- export declare const Radio: (props: RadioProps) => JSX.Element;
3
+ export type RadioProps = BreakpointSupport<ChoiceInputProps>;
4
+ interface RadioComponent {
5
+ (props: RadioProps): JSX.Element;
6
+ displayName?: string;
7
+ }
8
+ export declare const Radio: RadioComponent;
4
9
  export default Radio;