@tedi-design-system/react 19.2.0-rc.6 → 19.2.0-rc.8
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/bundle-stats.html +1 -1
- package/component.manifest.json +8 -8
- package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.cjs.js +1 -1
- package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.es.js +1 -1
- package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
- package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.es.js +1 -1
- package/external/hoist-non-react-statics/external/react-is/index.cjs.js +1 -1
- package/external/hoist-non-react-statics/external/react-is/index.es.js +1 -1
- package/external/prop-types/external/react-is/cjs/react-is.development.cjs.js +1 -1
- package/external/prop-types/external/react-is/cjs/react-is.development.es.js +1 -1
- package/external/prop-types/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
- package/external/prop-types/external/react-is/cjs/react-is.production.min.es.js +1 -1
- package/external/prop-types/external/react-is/index.cjs.js +1 -1
- package/external/prop-types/external/react-is/index.es.js +1 -1
- package/index.css +1 -1
- package/package.json +1 -1
- package/src/community/components/map-components/map-layer/map-layer.cjs.js +1 -1
- package/src/community/components/map-components/map-layer/map-layer.es.js +1 -1
- package/src/tedi/components/content/label/label.cjs.js +1 -1
- package/src/tedi/components/content/label/label.d.ts +22 -0
- package/src/tedi/components/content/label/label.es.js +30 -28
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.cjs.js +1 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.d.ts +20 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group-context.es.js +5 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.cjs.js +1 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.d.ts +72 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.es.js +124 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.module.scss.cjs.js +1 -0
- package/src/tedi/components/form/checkbox/checkbox-group/checkbox-group.module.scss.es.js +13 -0
- package/src/tedi/components/form/checkbox/checkbox.cjs.js +1 -1
- package/src/tedi/components/form/checkbox/checkbox.d.ts +8 -2
- package/src/tedi/components/form/checkbox/checkbox.es.js +146 -108
- package/src/tedi/components/form/checkbox/checkbox.module.scss.cjs.js +1 -1
- package/src/tedi/components/form/checkbox/checkbox.module.scss.es.js +11 -3
- package/src/tedi/components/form/checkbox/index.cjs.js +1 -0
- package/src/tedi/components/form/checkbox/index.d.ts +11 -0
- package/src/tedi/components/form/checkbox/index.es.js +7 -0
- package/src/tedi/components/form/choice-group/choice-group.cjs.js +1 -1
- package/src/tedi/components/form/choice-group/choice-group.d.ts +11 -0
- package/src/tedi/components/form/choice-group/choice-group.es.js +80 -69
- package/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.cjs.js +1 -1
- package/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.es.js +15 -15
- package/src/tedi/components/form/choice-input.types.d.ts +46 -8
- package/src/tedi/components/form/date-field/date-field.cjs.js +1 -1
- package/src/tedi/components/form/date-field/date-field.d.ts +5 -0
- package/src/tedi/components/form/date-field/date-field.es.js +187 -184
- package/src/tedi/components/form/date-time-field/date-time-field.cjs.js +1 -1
- package/src/tedi/components/form/date-time-field/date-time-field.d.ts +5 -0
- package/src/tedi/components/form/date-time-field/date-time-field.es.js +103 -101
- package/src/tedi/components/form/form-label/form-label.cjs.js +1 -1
- package/src/tedi/components/form/form-label/form-label.d.ts +9 -0
- package/src/tedi/components/form/form-label/form-label.es.js +15 -14
- package/src/tedi/components/form/multi-value-field/multi-value-field.cjs.js +1 -1
- package/src/tedi/components/form/multi-value-field/multi-value-field.d.ts +7 -0
- package/src/tedi/components/form/multi-value-field/multi-value-field.es.js +41 -40
- package/src/tedi/components/form/number-field/number-field.cjs.js +1 -1
- package/src/tedi/components/form/number-field/number-field.es.js +54 -43
- package/src/tedi/components/form/radio/index.cjs.js +1 -0
- package/src/tedi/components/form/radio/index.d.ts +11 -0
- package/src/tedi/components/form/radio/index.es.js +7 -0
- package/src/tedi/components/form/radio/radio-group/radio-group-context.cjs.js +1 -0
- package/src/tedi/components/form/radio/radio-group/radio-group-context.d.ts +21 -0
- package/src/tedi/components/form/radio/radio-group/radio-group-context.es.js +5 -0
- package/src/tedi/components/form/radio/radio-group/radio-group.cjs.js +1 -0
- package/src/tedi/components/form/radio/radio-group/radio-group.d.ts +56 -0
- package/src/tedi/components/form/radio/radio-group/radio-group.es.js +78 -0
- package/src/tedi/components/form/radio/radio-group/radio-group.module.scss.cjs.js +1 -0
- package/src/tedi/components/form/radio/radio-group/radio-group.module.scss.es.js +13 -0
- package/src/tedi/components/form/radio/radio.cjs.js +1 -1
- package/src/tedi/components/form/radio/radio.d.ts +7 -2
- package/src/tedi/components/form/radio/radio.es.js +117 -77
- package/src/tedi/components/form/radio/radio.module.scss.cjs.js +1 -1
- package/src/tedi/components/form/radio/radio.module.scss.es.js +11 -3
- package/src/tedi/components/form/select/select.cjs.js +1 -1
- package/src/tedi/components/form/select/select.es.js +79 -77
- package/src/tedi/components/form/slider/slider.cjs.js +1 -1
- package/src/tedi/components/form/slider/slider.d.ts +7 -0
- package/src/tedi/components/form/slider/slider.es.js +48 -47
- package/src/tedi/components/form/textfield/textfield.cjs.js +1 -1
- package/src/tedi/components/form/textfield/textfield.es.js +72 -61
- package/src/tedi/components/form/time-field/time-field.cjs.js +1 -1
- package/src/tedi/components/form/time-field/time-field.d.ts +5 -0
- package/src/tedi/components/form/time-field/time-field.es.js +87 -85
- package/src/tedi/components/form/toggle/toggle.cjs.js +1 -1
- package/src/tedi/components/form/toggle/toggle.d.ts +7 -0
- package/src/tedi/components/form/toggle/toggle.es.js +26 -24
- package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.cjs.js +1 -1
- package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.d.ts +12 -0
- package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.es.js +57 -27
- package/src/tedi/components/navigation/table-of-contents/table-of-contents.cjs.js +1 -1
- package/src/tedi/components/navigation/table-of-contents/table-of-contents.d.ts +17 -0
- package/src/tedi/components/navigation/table-of-contents/table-of-contents.es.js +65 -51
- package/src/tedi/index.d.ts +2 -2
- package/src/tedi/providers/label-provider/labels-map.cjs.js +1 -1
- package/src/tedi/providers/label-provider/labels-map.d.ts +14 -0
- package/src/tedi/providers/label-provider/labels-map.es.js +25 -11
- package/tedi.cjs.js +1 -1
- package/tedi.es.js +298 -294
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tedi-design-system/react",
|
|
3
|
-
"version": "19.2.0-rc.
|
|
3
|
+
"version": "19.2.0-rc.8",
|
|
4
4
|
"description": "TEDI Design System React component library — accessible, reusable UI components. Docs & live examples: https://storybook.tedi.ee/react/rc/",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),b=require("../../../../../external/classnames/index.cjs.js"),r=require("react"),N=require("../../../../tedi/components/base/typography/text/text.cjs.js"),p=require("../../../../tedi/components/buttons/button/button.cjs.js"),j=require("../../../../tedi/components/form/checkbox/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),b=require("../../../../../external/classnames/index.cjs.js"),r=require("react"),N=require("../../../../tedi/components/base/typography/text/text.cjs.js"),p=require("../../../../tedi/components/buttons/button/button.cjs.js"),j=require("../../../../tedi/components/form/checkbox/index.cjs.js"),g=require("../map-select/map-select.cjs.js"),n=require("./map-layer.module.scss.cjs.js"),w=m=>{const{items:d,selectAllLabel:k="Kõik kihid"}=m,[u,h]=r.useState({}),[v,f]=r.useState({}),[_,C]=r.useState(!1);r.useEffect(()=>{const e={},a={},t=i=>{for(const l of i)l.type==="checkbox"&&(e[l.id]=l.defaultChecked??!1),l.type==="select"&&l.defaultValue&&(a[l.id]=l.defaultValue),l.children&&t(l.children)};t(d),h(e),f(a)},[d]),r.useEffect(()=>{const e=Object.values(u),a=e.length,t=e.filter(Boolean).length;C(t>0&&t<a)},[u]);const S=(e,a)=>{if(h(t=>({...t,[e]:a})),!a){const t=i=>{for(const l of i)if(l.id===e&&l.children)for(const s of l.children)s.type==="select"&&f(o=>({...o,[s.id]:void 0})),s.type==="checkbox"&&h(o=>({...o,[s.id]:!1})),s.children&&t([s]);else l.children&&t(l.children)};t(d)}},q=e=>{const a={},t=i=>{for(const l of i)l.type==="checkbox"&&(a[l.id]=e),l.children&&t(l.children)};t(d),h(a),e||f({})},x=(e,a=0)=>{var i,l;const t=u[e.id]??!1;return c.jsxs("div",{className:b.default(n.default["tedi-map-layer__item"],n.default[`tedi-map-layer__level-${a}`]),children:[c.jsxs("div",{className:n.default["tedi-map-layer__row"],children:[e.type==="checkbox"&&c.jsx(j.Checkbox,{id:e.id,label:e.label,name:e.id,checked:t,onChange:(s,o)=>S(e.id,o),value:""}),e.type==="select"&&c.jsx(g.MapSelect,{id:e.id,label:e.label,options:e.options??[],value:v[e.id],onChange:s=>f(o=>({...o,[e.id]:s}))}),e.type==="checkbox"&&c.jsxs("div",{className:n.default["tedi-map-layer__actions"],children:[c.jsx(p.Button,{visualType:"link",icon:"download",children:"Download"}),c.jsx(p.Button,{visualType:"link",icon:"edit",children:"Edit"}),c.jsx(p.Button,{visualType:"link",icon:"info",children:"Info"}),c.jsx(p.Button,{visualType:"link",icon:"more_horiz",children:"Show more actions"})]})]}),e.type==="label"&&c.jsxs("div",{className:n.default["tedi-map-layer__item"],children:[c.jsx("div",{className:n.default["tedi-map-layer__label"],children:e.label}),(i=e.children)==null?void 0:i.map(s=>x(s,a+1))]},e.id),(l=e.children)==null?void 0:l.map(s=>x(s,a+1))]},e.id)},y=e=>e.some(a=>a.type==="checkbox"?!0:a.children?y(a.children):!1);return c.jsxs("div",{className:n.default["tedi-map-layer"],children:[c.jsx("div",{className:n.default["tedi-map-layer__select-all"],children:y(d)?c.jsx(j.Checkbox,{id:"select-all",label:k,name:"select-all",value:"all",checked:Object.values(u).every(Boolean),indeterminate:_,onChange:(e,a)=>q(a)}):c.jsx(N.Text,{color:"primary",modifiers:["bold"],children:k})}),c.jsx("div",{className:b.default(n.default["tedi-map-layer"],!y(d)&&n.default["tedi-map-layer--no-checkboxes"]),children:d.map(e=>x(e,1))})]})};exports.MapLayer=w;
|
|
@@ -3,7 +3,7 @@ import v from "../../../../../external/classnames/index.es.js";
|
|
|
3
3
|
import { useState as u, useEffect as _ } from "react";
|
|
4
4
|
import { Text as j } from "../../../../tedi/components/base/typography/text/text.es.js";
|
|
5
5
|
import { Button as m } from "../../../../tedi/components/buttons/button/button.es.js";
|
|
6
|
-
import { Checkbox as x } from "../../../../tedi/components/form/checkbox/
|
|
6
|
+
import { Checkbox as x } from "../../../../tedi/components/form/checkbox/index.es.js";
|
|
7
7
|
import { MapSelect as V } from "../map-select/map-select.es.js";
|
|
8
8
|
import n from "./map-layer.module.scss.es.js";
|
|
9
9
|
const D = (C) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),j=require("../../../../../external/classnames/index.cjs.js"),_=require("react"),B=require("../../overlays/tooltip/info-tooltip.cjs.js"),e=require("./label.module.scss.cjs.js"),N=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),o=_.forwardRef((r,d)=>{const{getCurrentBreakpointProps:u}=N.useBreakpointProps(r.defaultServerBreakpoint),{as:c="label",children:p,className:b,isBold:f,isSmall:s,modifiers:t,required:m,tooltip:i,...q}=u(r),a=typeof t=="string"?[t]:t,x=j.default(e.default["tedi-label"],f&&e.default["tedi-label--bold"],s&&e.default["tedi-label--small"],a==null?void 0:a.map(h=>`text-${h}`),b),n=l.jsxs(c,{ref:d,className:x,...q,children:[p,m&&l.jsx("span",{className:e.default["tedi-label__required"],"aria-hidden":"true",children:"*"})]});return i?l.jsxs("span",{className:e.default["tedi-label__wrapper"],children:[n,l.jsx("span",{className:e.default["tedi-label__info"],children:l.jsx(B.InfoTooltip,{isSmall:s,children:i})})]}):n});o.displayName="Label";exports.Label=o;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { ElementType, LabelHTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
import { BreakpointSupport } from '../../../helpers';
|
|
3
|
+
import { TextModifiers } from '../../base/typography/text/text';
|
|
4
|
+
/**
|
|
5
|
+
* Subset of {@link TextModifiers} that is meaningful for a label. `.tedi-label` is
|
|
6
|
+
* `display: inline`, so text-alignment (`center`/`left`/`right`) and `::first-letter`
|
|
7
|
+
* (`capitalize-first`) have no effect and are intentionally excluded — only wrapping,
|
|
8
|
+
* text-transform and italic controls that actually apply to inline text remain.
|
|
9
|
+
*/
|
|
10
|
+
export type LabelModifiers = Extract<TextModifiers, 'nowrap' | 'break-all' | 'break-word' | 'break-spaces' | 'italic' | 'uppercase' | 'lowercase' | 'capitalize'>;
|
|
11
|
+
/**
|
|
12
|
+
* Breakpoint-aware `modifiers` for a label, so consumers can vary wrapping responsively
|
|
13
|
+
* (e.g. `{ modifiers: 'nowrap', sm: { modifiers: 'break-word' } }`).
|
|
14
|
+
*/
|
|
15
|
+
export type LabelModifierProps = BreakpointSupport<{
|
|
16
|
+
modifiers?: LabelModifiers[] | LabelModifiers;
|
|
17
|
+
}>;
|
|
3
18
|
type LabelBreakpointProps = {
|
|
4
19
|
/**
|
|
5
20
|
* If true, applies a bold font weight to the label text.
|
|
@@ -11,6 +26,13 @@ type LabelBreakpointProps = {
|
|
|
11
26
|
* @default false
|
|
12
27
|
*/
|
|
13
28
|
isSmall?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Text modifiers that control how the label text is rendered, e.g. wrapping and
|
|
31
|
+
* line-breaking behavior (`'nowrap'`, `'break-word'`, `'break-all'`, `'break-spaces'`).
|
|
32
|
+
* Reuses the same modifiers as the `Text` component. Useful to prevent long labels
|
|
33
|
+
* from breaking across multiple lines and distorting form layouts.
|
|
34
|
+
*/
|
|
35
|
+
modifiers?: LabelModifiers[] | LabelModifiers;
|
|
14
36
|
};
|
|
15
37
|
export interface LabelProps extends BreakpointSupport<LabelBreakpointProps>, LabelHTMLAttributes<HTMLLabelElement | HTMLSpanElement> {
|
|
16
38
|
/**
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import { InfoTooltip as
|
|
1
|
+
import { jsxs as n, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import B from "../../../../../external/classnames/index.es.js";
|
|
3
|
+
import { forwardRef as x } from "react";
|
|
4
|
+
import { InfoTooltip as k } from "../../overlays/tooltip/info-tooltip.es.js";
|
|
5
5
|
import e from "./label.module.scss.es.js";
|
|
6
|
-
import { useBreakpointProps as
|
|
7
|
-
const
|
|
8
|
-
const { getCurrentBreakpointProps:
|
|
9
|
-
as:
|
|
10
|
-
children:
|
|
11
|
-
className:
|
|
12
|
-
isBold:
|
|
13
|
-
isSmall:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
import { useBreakpointProps as E } from "../../../helpers/hooks/use-breakpoint-props.es.js";
|
|
7
|
+
const g = x((t, m) => {
|
|
8
|
+
const { getCurrentBreakpointProps: d } = E(t.defaultServerBreakpoint), {
|
|
9
|
+
as: p = "label",
|
|
10
|
+
children: c,
|
|
11
|
+
className: f,
|
|
12
|
+
isBold: b,
|
|
13
|
+
isSmall: s,
|
|
14
|
+
modifiers: l,
|
|
15
|
+
required: u,
|
|
16
|
+
tooltip: i,
|
|
17
|
+
...h
|
|
18
|
+
} = d(t), r = typeof l == "string" ? [l] : l, N = B(
|
|
18
19
|
e["tedi-label"],
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
b && e["tedi-label--bold"],
|
|
21
|
+
s && e["tedi-label--small"],
|
|
22
|
+
r == null ? void 0 : r.map((_) => `text-${_}`),
|
|
23
|
+
f
|
|
24
|
+
), o = /* @__PURE__ */ n(p, { ref: m, className: N, ...h, children: [
|
|
25
|
+
c,
|
|
26
|
+
u && /* @__PURE__ */ a("span", { className: e["tedi-label__required"], "aria-hidden": "true", children: "*" })
|
|
25
27
|
] });
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
] }) :
|
|
28
|
+
return i ? /* @__PURE__ */ n("span", { className: e["tedi-label__wrapper"], children: [
|
|
29
|
+
o,
|
|
30
|
+
/* @__PURE__ */ a("span", { className: e["tedi-label__info"], children: /* @__PURE__ */ a(k, { isSmall: s, children: i }) })
|
|
31
|
+
] }) : o;
|
|
30
32
|
});
|
|
31
|
-
|
|
33
|
+
g.displayName = "Label";
|
|
32
34
|
export {
|
|
33
|
-
|
|
35
|
+
g as Label
|
|
34
36
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),t=e.createContext(null);exports.CheckboxGroupContext=t;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ChoiceInputCardVariant, ChoiceInputVariant } from '../../choice-input.types';
|
|
3
|
+
export interface CheckboxGroupContextValue {
|
|
4
|
+
/** Shared `name` for all checkboxes in the group. */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** Currently selected values. */
|
|
7
|
+
values: string[];
|
|
8
|
+
/** Called by a `Checkbox` when it is toggled. */
|
|
9
|
+
onToggle: (value: string, checked: boolean) => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
invalid?: boolean;
|
|
12
|
+
size?: 'default' | 'large';
|
|
13
|
+
variant?: ChoiceInputVariant;
|
|
14
|
+
cardVariant?: ChoiceInputCardVariant;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Provided by `Checkbox.Group`. When present, a `Checkbox` reads its checked
|
|
18
|
+
* state, `name`, and shared visual props from here.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CheckboxGroupContext: React.Context<CheckboxGroupContextValue | null>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),q=require("../../../../../../external/classnames/index.cjs.js"),s=require("react"),U=require("../../feedback-text/feedback-text.cjs.js"),W=require("../checkbox.cjs.js"),o=require("./checkbox-group.module.scss.cjs.js"),X=require("./checkbox-group-context.cjs.js"),Y=require("../../../../helpers/hooks/use-breakpoint-props.cjs.js"),Z=require("../../../../providers/label-provider/use-labels.cjs.js"),j=S=>{const{getCurrentBreakpointProps:T}=Y.useBreakpointProps(S.defaultServerBreakpoint),{getLabel:x}=Z.useLabels(),{id:I,name:_,label:y,hideLabel:M=!1,helper:d,className:B,value:k,defaultValue:w=[],onChange:i,disabled:f,invalid:m,required:$,size:g,variant:u="default",cardVariant:V="primary",direction:E=u==="card"?"row":"column",indeterminateCheck:r,selectAllLabel:F,removeAllLabel:R,indeterminateCheckProps:z,children:v}=T(S),O=s.useId(),L=I??O,b=k!==void 0,[N,D]=s.useState(w),l=s.useMemo(()=>b?k??[]:N,[b,k,N]),A=d?d.id??`${L}-helper`:void 0,p=s.useCallback(e=>{b||D(e),i==null||i(e)},[b,i]),G=s.useCallback((e,h)=>{p(h?[...l,e]:l.filter(C=>C!==e))},[l,p]),H=s.useMemo(()=>({name:_,values:l,onToggle:G,disabled:f,invalid:m,size:g,variant:u,cardVariant:V}),[_,l,G,f,m,g,u,V]),a=s.useMemo(()=>{const e=new Set,h=C=>{s.Children.forEach(C,n=>{s.isValidElement(n)&&(n.props.value!==void 0&&!n.props.disabled&&e.add(n.props.value),h(n.props.children))})};return h(v),[...e]},[v]),c=a.length>0&&a.every(e=>l.includes(e)),P=a.every(e=>!l.includes(e)),J=!c&&!P,K=typeof r=="string"?r:typeof r=="function"?r(c?"all":P?"none":"some"):c?R??x("checkbox-group.remove-all"):F??x("checkbox-group.select-all"),Q=s.useCallback(()=>{p(c?l.filter(e=>!a.includes(e)):[...new Set([...l,...a])])},[c,l,a,p]);return t.jsxs("fieldset",{className:q.default(o.default["tedi-checkbox-group"],o.default[`tedi-checkbox-group--${E}`],{[o.default["tedi-checkbox-group--card"]]:u==="card"},B),disabled:f,"aria-invalid":m||void 0,"aria-describedby":A,children:[y&&t.jsxs("legend",{className:q.default(o.default["tedi-checkbox-group__legend"],{"sr-only":M}),children:[y,$&&t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":"true",className:o.default["tedi-checkbox-group__required"],children:"*"}),t.jsxs("span",{className:"sr-only",children:[" ",x("required")]})]})]}),r&&t.jsx(W.Checkbox,{id:`${L}-select-all`,...z,value:"select-all",label:K,checked:c,indeterminate:J,onChange:Q,size:g}),t.jsx(X.CheckboxGroupContext.Provider,{value:H,children:t.jsx("div",{className:q.default(o.default["tedi-checkbox-group__items"],{[o.default["tedi-checkbox-group__items--indented"]]:!!r}),children:v})}),d&&t.jsx(U.FeedbackText,{id:A,...d})]})};j.displayName="Checkbox.Group";exports.CheckboxGroup=j;exports.default=j;
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
import { CheckboxBaseProps } from '../checkbox';
|
|
6
|
+
/** State of the select-all checkbox, passed to a custom `indeterminateCheck` label function. */
|
|
7
|
+
export type CheckboxGroupSelectAllState = 'all' | 'some' | 'none';
|
|
8
|
+
interface CheckboxGroupBreakpointProps {
|
|
9
|
+
/** Group id. When omitted a stable id is generated. */
|
|
10
|
+
id?: string;
|
|
11
|
+
/** Shared `name` for the checkboxes. */
|
|
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 values. Pair with `onChange`. */
|
|
22
|
+
value?: string[];
|
|
23
|
+
/** Uncontrolled initial selected values. */
|
|
24
|
+
defaultValue?: string[];
|
|
25
|
+
/** Fires with the full new list of selected values. */
|
|
26
|
+
onChange?: (value: string[]) => void;
|
|
27
|
+
/** Disables the whole group and every checkbox within it. */
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/** Marks the group as invalid, forwarding the error state to each checkbox. */
|
|
30
|
+
invalid?: boolean;
|
|
31
|
+
/** Marks the group as required, adding a required indicator to the legend. */
|
|
32
|
+
required?: boolean;
|
|
33
|
+
/** Size forwarded to every checkbox. @default 'default' */
|
|
34
|
+
size?: 'default' | 'large';
|
|
35
|
+
/** Visual variant forwarded to every checkbox. @default 'default' */
|
|
36
|
+
variant?: ChoiceInputVariant;
|
|
37
|
+
/** Card colour variant forwarded to every checkbox (only applies to `variant="card"`). @default 'primary' */
|
|
38
|
+
cardVariant?: ChoiceInputCardVariant;
|
|
39
|
+
/** Layout direction of the checkboxes. Defaults to `row` for cards, `column` otherwise. */
|
|
40
|
+
direction?: 'row' | 'column';
|
|
41
|
+
/**
|
|
42
|
+
* Renders a "select all" checkbox above the children that reflects and controls
|
|
43
|
+
* them: checked when all are selected, indeterminate when some are, unchecked
|
|
44
|
+
* when none are. Toggling it selects or clears all (enabled) children.
|
|
45
|
+
* - `true` — use the localised default label ("Select all" / "Remove all").
|
|
46
|
+
* - `string` — a fixed label.
|
|
47
|
+
* - `(state) => string` — a label derived from the current `all` / `some` / `none` state.
|
|
48
|
+
*/
|
|
49
|
+
indeterminateCheck?: boolean | string | ((state: CheckboxGroupSelectAllState) => string);
|
|
50
|
+
/**
|
|
51
|
+
* Overrides the localised label shown on the select-all checkbox when not all children are
|
|
52
|
+
* selected (the `some` / `none` states). Ignored when `indeterminateCheck` is a `string` or
|
|
53
|
+
* function, which control the label directly.
|
|
54
|
+
*/
|
|
55
|
+
selectAllLabel?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Overrides the localised label shown on the select-all checkbox when every child is selected
|
|
58
|
+
* (the `all` state). Ignored when `indeterminateCheck` is a `string` or function, which control
|
|
59
|
+
* the label directly.
|
|
60
|
+
*/
|
|
61
|
+
removeAllLabel?: string;
|
|
62
|
+
/** Extra props forwarded to the select-all checkbox (its checked/indeterminate/value are managed). */
|
|
63
|
+
indeterminateCheckProps?: Partial<Omit<CheckboxBaseProps, 'value' | 'label' | 'checked' | 'indeterminate' | 'onChange'>>;
|
|
64
|
+
/** The `Checkbox` items that make up the group. */
|
|
65
|
+
children: React.ReactNode;
|
|
66
|
+
}
|
|
67
|
+
export type CheckboxGroupProps = BreakpointSupport<CheckboxGroupBreakpointProps>;
|
|
68
|
+
export declare const CheckboxGroup: {
|
|
69
|
+
(props: CheckboxGroupProps): JSX.Element;
|
|
70
|
+
displayName: string;
|
|
71
|
+
};
|
|
72
|
+
export default CheckboxGroup;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsxs as h, Fragment as U, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import _ from "../../../../../../external/classnames/index.es.js";
|
|
3
|
+
import o from "react";
|
|
4
|
+
import { FeedbackText as W } from "../../feedback-text/feedback-text.es.js";
|
|
5
|
+
import { Checkbox as X } from "../checkbox.es.js";
|
|
6
|
+
import r from "./checkbox-group.module.scss.es.js";
|
|
7
|
+
import { CheckboxGroupContext as Y } from "./checkbox-group-context.es.js";
|
|
8
|
+
import { useBreakpointProps as Z } from "../../../../helpers/hooks/use-breakpoint-props.es.js";
|
|
9
|
+
import { useLabels as ee } from "../../../../providers/label-provider/use-labels.es.js";
|
|
10
|
+
const le = (S) => {
|
|
11
|
+
const { getCurrentBreakpointProps: w } = Z(S.defaultServerBreakpoint), { getLabel: f } = ee(), {
|
|
12
|
+
id: B,
|
|
13
|
+
name: N,
|
|
14
|
+
label: V,
|
|
15
|
+
hideLabel: G = !1,
|
|
16
|
+
helper: i,
|
|
17
|
+
className: M,
|
|
18
|
+
value: k,
|
|
19
|
+
defaultValue: $ = [],
|
|
20
|
+
onChange: d,
|
|
21
|
+
disabled: g,
|
|
22
|
+
invalid: v,
|
|
23
|
+
required: j,
|
|
24
|
+
size: x,
|
|
25
|
+
variant: u = "default",
|
|
26
|
+
cardVariant: A = "primary",
|
|
27
|
+
direction: E = u === "card" ? "row" : "column",
|
|
28
|
+
indeterminateCheck: t,
|
|
29
|
+
selectAllLabel: F,
|
|
30
|
+
removeAllLabel: z,
|
|
31
|
+
indeterminateCheckProps: R,
|
|
32
|
+
children: C
|
|
33
|
+
} = w(S), D = o.useId(), L = B ?? D, p = k !== void 0, [I, H] = o.useState($), l = o.useMemo(
|
|
34
|
+
() => p ? k ?? [] : I,
|
|
35
|
+
[p, k, I]
|
|
36
|
+
), P = i ? i.id ?? `${L}-helper` : void 0, m = o.useCallback(
|
|
37
|
+
(e) => {
|
|
38
|
+
p || H(e), d == null || d(e);
|
|
39
|
+
},
|
|
40
|
+
[p, d]
|
|
41
|
+
), T = o.useCallback(
|
|
42
|
+
(e, b) => {
|
|
43
|
+
m(b ? [...l, e] : l.filter((y) => y !== e));
|
|
44
|
+
},
|
|
45
|
+
[l, m]
|
|
46
|
+
), J = o.useMemo(
|
|
47
|
+
() => ({
|
|
48
|
+
name: N,
|
|
49
|
+
values: l,
|
|
50
|
+
onToggle: T,
|
|
51
|
+
disabled: g,
|
|
52
|
+
invalid: v,
|
|
53
|
+
size: x,
|
|
54
|
+
variant: u,
|
|
55
|
+
cardVariant: A
|
|
56
|
+
}),
|
|
57
|
+
[N, l, T, g, v, x, u, A]
|
|
58
|
+
), s = o.useMemo(() => {
|
|
59
|
+
const e = /* @__PURE__ */ new Set(), b = (y) => {
|
|
60
|
+
o.Children.forEach(y, (c) => {
|
|
61
|
+
o.isValidElement(c) && (c.props.value !== void 0 && !c.props.disabled && e.add(c.props.value), b(c.props.children));
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
return b(C), [...e];
|
|
65
|
+
}, [C]), a = s.length > 0 && s.every((e) => l.includes(e)), q = s.every((e) => !l.includes(e)), K = !a && !q, O = typeof t == "string" ? t : typeof t == "function" ? t(a ? "all" : q ? "none" : "some") : a ? z ?? f("checkbox-group.remove-all") : F ?? f("checkbox-group.select-all"), Q = o.useCallback(() => {
|
|
66
|
+
m(
|
|
67
|
+
a ? l.filter((e) => !s.includes(e)) : [.../* @__PURE__ */ new Set([...l, ...s])]
|
|
68
|
+
);
|
|
69
|
+
}, [a, l, s, m]);
|
|
70
|
+
return /* @__PURE__ */ h(
|
|
71
|
+
"fieldset",
|
|
72
|
+
{
|
|
73
|
+
className: _(
|
|
74
|
+
r["tedi-checkbox-group"],
|
|
75
|
+
r[`tedi-checkbox-group--${E}`],
|
|
76
|
+
{ [r["tedi-checkbox-group--card"]]: u === "card" },
|
|
77
|
+
M
|
|
78
|
+
),
|
|
79
|
+
disabled: g,
|
|
80
|
+
"aria-invalid": v || void 0,
|
|
81
|
+
"aria-describedby": P,
|
|
82
|
+
children: [
|
|
83
|
+
V && /* @__PURE__ */ h("legend", { className: _(r["tedi-checkbox-group__legend"], { "sr-only": G }), children: [
|
|
84
|
+
V,
|
|
85
|
+
j && /* @__PURE__ */ h(U, { children: [
|
|
86
|
+
/* @__PURE__ */ n("span", { "aria-hidden": "true", className: r["tedi-checkbox-group__required"], children: "*" }),
|
|
87
|
+
/* @__PURE__ */ h("span", { className: "sr-only", children: [
|
|
88
|
+
" ",
|
|
89
|
+
f("required")
|
|
90
|
+
] })
|
|
91
|
+
] })
|
|
92
|
+
] }),
|
|
93
|
+
t && /* @__PURE__ */ n(
|
|
94
|
+
X,
|
|
95
|
+
{
|
|
96
|
+
id: `${L}-select-all`,
|
|
97
|
+
...R,
|
|
98
|
+
value: "select-all",
|
|
99
|
+
label: O,
|
|
100
|
+
checked: a,
|
|
101
|
+
indeterminate: K,
|
|
102
|
+
onChange: Q,
|
|
103
|
+
size: x
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ n(Y.Provider, { value: J, children: /* @__PURE__ */ n(
|
|
107
|
+
"div",
|
|
108
|
+
{
|
|
109
|
+
className: _(r["tedi-checkbox-group__items"], {
|
|
110
|
+
[r["tedi-checkbox-group__items--indented"]]: !!t
|
|
111
|
+
}),
|
|
112
|
+
children: C
|
|
113
|
+
}
|
|
114
|
+
) }),
|
|
115
|
+
i && /* @__PURE__ */ n(W, { id: P, ...i })
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
};
|
|
120
|
+
le.displayName = "Checkbox.Group";
|
|
121
|
+
export {
|
|
122
|
+
le as CheckboxGroup,
|
|
123
|
+
le as default
|
|
124
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-checkbox-group":"tedi-checkbox-group-8c1eff4a","tedi-checkbox-group__legend":"tedi-checkbox-group__legend-78f7c383","tedi-checkbox-group__required":"tedi-checkbox-group__required-0ef1066e","tedi-checkbox-group__items":"tedi-checkbox-group__items-55131f62","tedi-checkbox-group--column":"tedi-checkbox-group--column-72f10a57","tedi-checkbox-group__items--indented":"tedi-checkbox-group__items--indented-47a5f592","tedi-checkbox-group--row":"tedi-checkbox-group--row-824f71cf","tedi-checkbox-group--card":"tedi-checkbox-group--card-e304e3dd"};exports.default=e;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"tedi-checkbox-group": "tedi-checkbox-group-8c1eff4a",
|
|
3
|
+
"tedi-checkbox-group__legend": "tedi-checkbox-group__legend-78f7c383",
|
|
4
|
+
"tedi-checkbox-group__required": "tedi-checkbox-group__required-0ef1066e",
|
|
5
|
+
"tedi-checkbox-group__items": "tedi-checkbox-group__items-55131f62",
|
|
6
|
+
"tedi-checkbox-group--column": "tedi-checkbox-group--column-72f10a57",
|
|
7
|
+
"tedi-checkbox-group__items--indented": "tedi-checkbox-group__items--indented-47a5f592",
|
|
8
|
+
"tedi-checkbox-group--row": "tedi-checkbox-group--row-824f71cf",
|
|
9
|
+
"tedi-checkbox-group--card": "tedi-checkbox-group--card-e304e3dd"
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
e as default
|
|
13
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),t=require("../../../../../external/classnames/index.cjs.js"),s=require("react"),v=require("../../base/icon/icon.cjs.js"),M=require("../feedback-text/feedback-text.cjs.js"),de=require("../form-label/form-label.cjs.js"),c=require("./checkbox.module.scss.cjs.js"),te=require("./checkbox-group/checkbox-group-context.cjs.js"),ie=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),se=require("../../layout/grid/row.cjs.js"),S=require("../../layout/grid/col.cjs.js"),N=C=>{const e=s.useContext(te.CheckboxGroupContext),{getCurrentBreakpointProps:V}=ie.useBreakpointProps(C.defaultServerBreakpoint),{id:E,label:h,value:r,className:q,onChange:o,hideLabel:y=!1,helper:i,checked:b,defaultChecked:F,indeterminate:n,hover:G,name:D,tooltip:I,description:k,icon:m,labelProps:H,size:O,variant:U,cardVariant:A,disabled:J,invalid:P,required:K,...w}=V(C),l=O??(e==null?void 0:e.size)??"default",z=U??(e==null?void 0:e.variant)??"default",Q=A??(e==null?void 0:e.cardVariant)??"primary";z==="card"&&I&&console.warn('Checkbox: `tooltip` is not supported with `variant="card"` and will be ignored. Use `description`.');const f=J??(e==null?void 0:e.disabled)??!1,W=P??(e==null?void 0:e.invalid),B=K,X=s.useId(),u=E??X,Y=D??(e==null?void 0:e.name),[$,Z]=s.useState(F||!1),_=s.useRef(null),p=e!==null,j=s.useMemo(()=>n?"mixed":p?!!(e!=null&&e.values.includes(r)):o&&typeof b<"u"?b:$,[n,p,e,r,o,b,$]);s.useEffect(()=>{_.current&&(_.current.indeterminate=!!n)},[n,j]);const g=d=>{p?e==null||e.onToggle(r,d.target.checked):typeof b>"u"&&Z(d==null?void 0:d.target.checked),o==null||o(r,d==null?void 0:d.target.checked)},x=i?i.id??`${u}-helper`:void 0,ee=x,L=a.jsx("input",{ref:_,id:u,value:r,name:Y,type:"checkbox",disabled:f,checked:j!=="mixed"?j:!1,required:B,"aria-invalid":P||void 0,onChange:g,className:c.default["tedi-checkbox__input"],"aria-describedby":ee}),R=d=>a.jsxs("div",{"aria-hidden":"true",className:t.default(c.default["tedi-checkbox__indicator"],{[c.default["tedi-checkbox__indicator--hover"]]:G,[c.default["tedi-checkbox__indicator--indeterminate"]]:n,[c.default[`tedi-checkbox__indicator--size-${l}`]]:l,[c.default["tedi-checkbox__indicator--invalid"]]:W},d),"data-testid":"checkbox-indicator",children:[a.jsx(v.Icon,{size:l==="default"?16:18,name:"remove",className:t.default(c.default["tedi-checkbox__icon"],c.default["tedi-checkbox__icon--indeterminate"])}),a.jsx(v.Icon,{size:l==="default"?16:18,name:"check",className:t.default(c.default["tedi-checkbox__icon"],c.default["tedi-checkbox__icon--check"])})]});if(z==="card"){const d=`${u}-label`,T=k?`${u}-description`:void 0,ae=[T,x].filter(Boolean).join(" ")||void 0;return a.jsxs("label",{"data-name":"check",className:t.default(c.default["tedi-checkbox"],c.default["tedi-checkbox--card"],c.default[`tedi-checkbox--card-${Q}`],{[c.default["tedi-checkbox--card-with-icon"]]:!!m},{[c.default["tedi-checkbox--disabled"]]:f},q),...w,children:[a.jsxs("span",{className:c.default["tedi-checkbox__card-control"],children:[s.cloneElement(L,{"aria-labelledby":h?d:void 0,"aria-describedby":ae}),R(),m&&a.jsx(v.Icon,{name:m,size:l==="default"?18:24,className:c.default["tedi-checkbox__card-icon"]}),a.jsx("span",{id:d,className:t.default(c.default["tedi-checkbox__card-label"],{"sr-only":y}),children:h})]}),k&&a.jsx("span",{id:T,className:c.default["tedi-checkbox__card-description"],children:k}),i&&a.jsx(M.FeedbackText,{id:x,...i,className:t.default(c.default["tedi-checkbox__helper"],i.className)})]})}const ce=t.default(c.default["tedi-checkbox__label"],{[c.default["tedi-checkbox--disabled"]]:f});return a.jsxs("div",{className:t.default(c.default["tedi-checkbox"],{[c.default["tedi-checkbox--disabled"]]:f}),"data-name":"check",...w,children:[a.jsxs(se.Row,{gutter:0,children:[a.jsx(S.Col,{width:"auto",children:a.jsxs("div",{className:c.default["tedi-checkbox__outer-indicator-wrapper"],children:[L,R(q)]})}),h&&a.jsx(S.Col,{children:a.jsx(de.FormLabel,{className:ce,id:u,"data-testid":"checkbox-label",hideLabel:y,label:h,tooltip:I,required:B,labelProps:H})})]}),i&&a.jsx(M.FeedbackText,{id:x,...i,className:t.default(c.default["tedi-checkbox__helper"],i.className)})]})};N.displayName="Checkbox";exports.Checkbox=N;exports.default=N;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { BreakpointSupport } from '../../../helpers';
|
|
1
2
|
import { ChoiceInputProps } from '../choice-input.types';
|
|
2
|
-
export
|
|
3
|
+
export type CheckboxBaseProps = ChoiceInputProps & {
|
|
3
4
|
/**
|
|
4
5
|
* If the check is in indeterminate state. (Not checked or unchecked)
|
|
5
6
|
* When this is true then the checked prop is ignored
|
|
6
7
|
*/
|
|
7
8
|
indeterminate?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type CheckboxProps = BreakpointSupport<CheckboxBaseProps>;
|
|
11
|
+
interface CheckboxComponent {
|
|
12
|
+
(props: CheckboxProps): JSX.Element;
|
|
13
|
+
displayName?: string;
|
|
8
14
|
}
|
|
9
|
-
export declare const Checkbox:
|
|
15
|
+
export declare const Checkbox: CheckboxComponent;
|
|
10
16
|
export default Checkbox;
|