@tedi-design-system/react 19.1.0-rc.2 → 19.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +308 -0
- package/README.md +28 -0
- package/_virtual/index.es13.js +2 -2
- package/_virtual/index.es14.js +2 -2
- package/bundle-stats.html +1 -1
- package/component.manifest.json +1191 -0
- package/external/react-is/index.cjs.js +1 -1
- package/external/react-is/index.es.js +1 -1
- package/external/toposort/index.cjs.js +1 -1
- package/external/toposort/index.es.js +1 -1
- package/index.css +1 -1
- package/package.json +1 -1
- package/src/tedi/components/filter/filter/filter.cjs.js +1 -1
- package/src/tedi/components/filter/filter/filter.d.ts +5 -0
- package/src/tedi/components/filter/filter/filter.es.js +154 -144
- package/src/tedi/components/filter/filter/filter.module.scss.cjs.js +1 -1
- package/src/tedi/components/filter/filter/filter.module.scss.es.js +2 -1
- package/src/tedi/components/overlays/dropdown/dropdown.cjs.js +1 -1
- package/src/tedi/components/overlays/dropdown/dropdown.d.ts +8 -0
- package/src/tedi/components/overlays/dropdown/dropdown.es.js +82 -74
- package/src/tedi/components/overlays/dropdown/dropdown.module.scss.cjs.js +1 -1
- package/src/tedi/components/overlays/dropdown/dropdown.module.scss.es.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tedi-design-system/react",
|
|
3
|
-
"version": "19.1.0-rc.
|
|
3
|
+
"version": "19.1.0-rc.3",
|
|
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 t=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),W=require("../../../../../external/classnames/index.cjs.js"),l=require("react"),ue=require("../../base/icon/icon.cjs.js"),Z=require("../../buttons/button/button.cjs.js"),fe=require("../../form/checkbox/checkbox.cjs.js"),Ze=require("../../form/search/search.cjs.js"),c=require("../../overlays/dropdown/dropdown.cjs.js"),Je=require("../../tags/status-badge/status-badge.cjs.js"),r=require("./filter.module.scss.cjs.js"),Ke=require("./filter-group-context.cjs.js"),Qe=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),Ue=require("../../../providers/label-provider/use-labels.cjs.js"),he=b=>b==="large"?24:18,Ve=b=>{const x=l.useId();return b??`tedi-filter-${x.replace(/[^a-zA-Z0-9-]/g,"")}`},pe=l.forwardRef((b,x)=>{const{getCurrentBreakpointProps:me}=Qe.useBreakpointProps(b.defaultServerBreakpoint),{text:g,value:_,disabled:xe=!1,className:ve,id:J,selected:k,defaultSelected:K=!1,onSelectedChange:C,selectedValue:j,defaultSelectedValue:be,onSelectedValueChange:u,multiselect:Q=!1,selectedValues:f,defaultSelectedValues:ge,onSelectedValuesChange:a,options:S=[],searchable:je=!1,showSelectAll:Se=!1,selectAllLabel:we,showClear:U=!1,clearLabel:_e,preserveLabel:V=!1,children:X,onClear:B,prepend:D,hidePrependWhenSelected:ke=!0,append:P,placement:Ce="bottom-start",variant:Le="primary",size:$="default",searchLabel:Y,maxHeight:M}=me(b),{getLabel:ee}=Ue.useLabels(),ye=we??ee("filter.select-all"),te=_e??ee("filter.clear-selection"),L=M===void 0?void 0:typeof M=="number"?`${M}px`:M,i=l.useContext(Ke.FilterGroupContext),y=Ve(J),Ne=l.useRef(null),O=S.length>0,N=!!X,v=O||N,h=O&&!Q,p=O&&Q,F=!!(i!=null&&i.isManaged)&&_!==void 0&&!v,T=F&&!(i!=null&&i.multiselect),le=xe||((i==null?void 0:i.disabled)??!1),[Fe,Be]=l.useState(K),[Me,se]=l.useState(be??""),[qe,z]=l.useState(ge??[]);N&&(K||C)&&k===void 0&&console.warn("[Filter] `defaultSelected` and `onSelectedChange` are not honoured in custom-content mode (when `children` is provided). Drive the selected state yourself via the controlled `selected` prop, e.g. `selected={Boolean(value)}`.");const q=k!==void 0?k:Fe,m=j!==void 0?j:Me,n=f!==void 0?f:qe,w=l.useMemo(()=>F?i.isSelected(_):p?n.length>0:h?m!=="":q,[F,_,i,p,n,h,m,q]),I=l.useMemo(()=>{var e;return!h||!m?null:((e=S.find(s=>s.value===m))==null?void 0:e.label)??null},[h,m,S]),Ie=l.useMemo(()=>h?I&&V?`${g}: ${I}`:I??g:g,[h,I,V,g]),[R,re]=l.useState(!1),[A,ne]=l.useState("");l.useEffect(()=>{R||ne("")},[R]);const G=l.useMemo(()=>{const e=A.trim().toLowerCase();return e?S.filter(s=>s.label.toLowerCase().includes(e)):S},[A,S]),o=l.useMemo(()=>G.filter(e=>!e.disabled),[G]),H=l.useMemo(()=>o.length===0?!1:o.every(e=>n.includes(e.value)),[o,n]),De=l.useMemo(()=>{if(o.length===0)return!1;const e=o.filter(s=>n.includes(s.value)).length;return e>0&&e<o.length},[o,n]),Pe=l.useCallback(e=>{Ne.current=e,typeof x=="function"?x(e):x&&(x.current=e)},[x]),$e=l.useCallback(()=>{if(F){i.selectFilter(_);return}const e=!q;k===void 0&&Be(e),C==null||C(e)},[F,i,_,q,k,C]),Oe=l.useCallback(e=>{const s=m===e?"":e;j===void 0&&se(s),u==null||u(s)},[m,j,u]),Te=l.useCallback(e=>{const s=n.includes(e)?n.filter(d=>d!==e):[...n,e];f===void 0&&z(s),a==null||a(s)},[n,f,a]),ze=l.useCallback(()=>{let e;if(H){const s=new Set(o.map(d=>d.value));e=n.filter(d=>!s.has(d))}else{const s=new Set(n);o.forEach(d=>s.add(d.value)),e=[...s]}f===void 0&&z(e),a==null||a(e)},[H,o,n,f,a]),ie=l.useCallback(()=>{N?B==null||B():p?(f===void 0&&z([]),a==null||a([])):h&&(j===void 0&&se(""),u==null||u("")),re(!1)},[N,B,p,f,a,h,j,u]),Re=w&&ke,Ae=T?"radio":void 0,Ge=T?w:void 0,He=!v&&!T?w:void 0,Ee=t.jsxs(t.Fragment,{children:[!v&&w&&t.jsx(ue.Icon,{className:r.default["tedi-filter__icon"],name:"check",size:he($),color:"inherit"}),D!=null&&t.jsx("span",{className:W.default(r.default["tedi-filter__prepend"],{[r.default["tedi-filter__prepend--hidden"]]:Re}),children:D}),t.jsx("span",{className:r.default["tedi-filter__text"],children:Ie}),P!=null&&t.jsx("span",{className:r.default["tedi-filter__append"],children:P}),p&&w&&n.length>0&&t.jsx(Je.StatusBadge,{className:r.default["tedi-filter__count"],color:le?"neutral":"brand",children:String(n.length)}),v&&t.jsx(ue.Icon,{className:r.default["tedi-filter__icon"],name:"arrow_drop_down",filled:!0,size:he($),color:"inherit"})]}),ae=W.default(r.default["tedi-filter"],r.default[`tedi-filter--${Le}`],$==="large"&&r.default["tedi-filter--large"],w&&r.default["tedi-filter--selected"],ve),oe=t.jsx(Z.Button,{ref:Pe,id:J,type:"button",disabled:le,className:r.default["tedi-filter__button"],onClick:v?void 0:$e,role:v?void 0:Ae,"aria-checked":Ge,"aria-pressed":He,noStyle:!0,children:Ee});if(!v)return t.jsx("div",{className:ae,children:oe});const E=p&&Se?0:null,We=E!==null?1:0,de=()=>G.map((e,s)=>{const d=p?n.includes(e.value):m===e.value,ce=s+We;return p?t.jsx(c.Dropdown.Item,{index:ce,asChild:!0,disabled:e.disabled,closeOnSelect:!1,children:t.jsx(fe.Checkbox,{id:`${y}-option-${s}`,label:e.label,value:e.value,checked:d,disabled:e.disabled,onChange:()=>Te(e.value),name:`${y}-options`})},e.value):t.jsx(c.Dropdown.Item,{index:ce,disabled:e.disabled,active:d,onClick:()=>Oe(e.value),children:e.label},e.value)});return t.jsx("div",{className:ae,children:t.jsxs(c.Dropdown,{open:R,onOpenChange:re,placement:Ce,width:"auto",children:[t.jsx(c.Dropdown.Trigger,{children:oe}),t.jsx(c.Dropdown.Content,{children:N?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:W.default(r.default["tedi-filter-dropdown__custom-content"],{[r.default["tedi-filter-dropdown__options"]]:L!==void 0}),style:L!==void 0?{maxHeight:L}:void 0,children:X}),U&&t.jsxs(t.Fragment,{children:[t.jsx(c.Dropdown.Separator,{}),t.jsx("div",{className:r.default["tedi-filter-dropdown__clear"],children:t.jsx(Z.Button,{visualType:"neutral",size:"small",type:"button",iconLeft:"refresh",onClick:ie,children:te})})]})]}):t.jsxs(t.Fragment,{children:[je&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:r.default["tedi-filter-dropdown__search"],children:t.jsx(Ze.Search,{id:`${y}-search`,label:Y??g,hideLabel:!0,ariaLabel:Y??g,value:A,onChange:ne})}),t.jsx(c.Dropdown.Separator,{})]}),E!==null&&t.jsxs(t.Fragment,{children:[t.jsx(c.Dropdown.Item,{index:E,asChild:!0,closeOnSelect:!1,children:t.jsx(fe.Checkbox,{id:`${y}-select-all`,label:ye,value:"select-all",checked:H,indeterminate:De,onChange:ze,name:`${y}-select-all`})}),t.jsx(c.Dropdown.Separator,{})]}),L!==void 0?t.jsx("div",{className:r.default["tedi-filter-dropdown__options"],style:{maxHeight:L},children:de()}):de(),U&&t.jsxs(t.Fragment,{children:[t.jsx(c.Dropdown.Separator,{}),t.jsx("div",{className:r.default["tedi-filter-dropdown__clear"],children:t.jsx(Z.Button,{visualType:"neutral",size:"small",type:"button",iconLeft:"refresh",onClick:ie,children:te})})]})]})})]})})});pe.displayName="Filter";exports.Filter=pe;
|
|
@@ -93,6 +93,11 @@ export interface FilterProps extends BreakpointSupport<FilterBreakpointProps> {
|
|
|
93
93
|
placement?: React.ComponentProps<typeof Dropdown>['placement'];
|
|
94
94
|
/** Accessible label for the search input. Falls back to `text`. */
|
|
95
95
|
searchLabel?: string;
|
|
96
|
+
/**
|
|
97
|
+
* Caps the height of the dropdown's option list. The list scrolls when it's taller, while the
|
|
98
|
+
* search and "Clear selection" stay pinned. `number` = px, `string` = any CSS length.
|
|
99
|
+
*/
|
|
100
|
+
maxHeight?: React.ComponentProps<typeof Dropdown>['maxHeight'];
|
|
96
101
|
}
|
|
97
102
|
export declare const Filter: React.ForwardRefExoticComponent<FilterProps & React.RefAttributes<HTMLButtonElement>>;
|
|
98
103
|
export default Filter;
|
|
@@ -1,235 +1,245 @@
|
|
|
1
1
|
import { jsxs as p, Fragment as g, jsx as t } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { Icon as
|
|
5
|
-
import { Button as
|
|
6
|
-
import { Checkbox as
|
|
7
|
-
import { Search as
|
|
2
|
+
import Q from "../../../../../external/classnames/index.es.js";
|
|
3
|
+
import Qe, { forwardRef as Ue, useContext as Ve, useRef as Xe, useState as P, useMemo as _, useEffect as Ye, useCallback as y } from "react";
|
|
4
|
+
import { Icon as pe } from "../../base/icon/icon.es.js";
|
|
5
|
+
import { Button as U } from "../../buttons/button/button.es.js";
|
|
6
|
+
import { Checkbox as ve } from "../../form/checkbox/checkbox.es.js";
|
|
7
|
+
import { Search as et } from "../../form/search/search.es.js";
|
|
8
8
|
import { Dropdown as c } from "../../overlays/dropdown/dropdown.es.js";
|
|
9
|
-
import { StatusBadge as
|
|
10
|
-
import
|
|
11
|
-
import { FilterGroupContext as
|
|
12
|
-
import { useBreakpointProps as
|
|
13
|
-
import { useLabels as
|
|
14
|
-
const
|
|
15
|
-
const v =
|
|
16
|
-
return
|
|
17
|
-
},
|
|
18
|
-
const { getCurrentBreakpointProps:
|
|
9
|
+
import { StatusBadge as tt } from "../../tags/status-badge/status-badge.es.js";
|
|
10
|
+
import r from "./filter.module.scss.es.js";
|
|
11
|
+
import { FilterGroupContext as lt } from "./filter-group-context.es.js";
|
|
12
|
+
import { useBreakpointProps as rt } from "../../../helpers/hooks/use-breakpoint-props.es.js";
|
|
13
|
+
import { useLabels as it } from "../../../providers/label-provider/use-labels.es.js";
|
|
14
|
+
const be = (S) => S === "large" ? 24 : 18, nt = (S) => {
|
|
15
|
+
const v = Qe.useId();
|
|
16
|
+
return S ?? `tedi-filter-${v.replace(/[^a-zA-Z0-9-]/g, "")}`;
|
|
17
|
+
}, st = Ue((S, v) => {
|
|
18
|
+
const { getCurrentBreakpointProps: ge } = rt(S.defaultServerBreakpoint), {
|
|
19
19
|
text: w,
|
|
20
|
-
value:
|
|
21
|
-
disabled:
|
|
22
|
-
className:
|
|
23
|
-
id:
|
|
24
|
-
selected:
|
|
25
|
-
defaultSelected:
|
|
20
|
+
value: C,
|
|
21
|
+
disabled: _e = !1,
|
|
22
|
+
className: Se,
|
|
23
|
+
id: V,
|
|
24
|
+
selected: k,
|
|
25
|
+
defaultSelected: X = !1,
|
|
26
26
|
onSelectedChange: I,
|
|
27
|
-
selectedValue:
|
|
28
|
-
defaultSelectedValue:
|
|
27
|
+
selectedValue: x,
|
|
28
|
+
defaultSelectedValue: we,
|
|
29
29
|
onSelectedValueChange: d,
|
|
30
|
-
multiselect:
|
|
30
|
+
multiselect: Y = !1,
|
|
31
31
|
selectedValues: u,
|
|
32
|
-
defaultSelectedValues:
|
|
32
|
+
defaultSelectedValues: xe,
|
|
33
33
|
onSelectedValuesChange: s,
|
|
34
34
|
options: N = [],
|
|
35
|
-
searchable:
|
|
36
|
-
showSelectAll:
|
|
37
|
-
selectAllLabel:
|
|
38
|
-
showClear:
|
|
39
|
-
clearLabel:
|
|
40
|
-
preserveLabel:
|
|
41
|
-
children:
|
|
42
|
-
onClear:
|
|
43
|
-
prepend:
|
|
44
|
-
hidePrependWhenSelected:
|
|
45
|
-
append:
|
|
46
|
-
placement:
|
|
47
|
-
variant:
|
|
48
|
-
size:
|
|
49
|
-
searchLabel:
|
|
50
|
-
|
|
51
|
-
$
|
|
35
|
+
searchable: Ne = !1,
|
|
36
|
+
showSelectAll: Le = !1,
|
|
37
|
+
selectAllLabel: ye,
|
|
38
|
+
showClear: ee = !1,
|
|
39
|
+
clearLabel: Ce,
|
|
40
|
+
preserveLabel: te = !1,
|
|
41
|
+
children: le,
|
|
42
|
+
onClear: T,
|
|
43
|
+
prepend: R,
|
|
44
|
+
hidePrependWhenSelected: ke = !0,
|
|
45
|
+
append: G,
|
|
46
|
+
placement: Ie = "bottom-start",
|
|
47
|
+
variant: $e = "primary",
|
|
48
|
+
size: H = "default",
|
|
49
|
+
searchLabel: re,
|
|
50
|
+
maxHeight: z
|
|
51
|
+
} = ge(S), { getLabel: ie } = it(), Be = ye ?? ie("filter.select-all"), ne = Ce ?? ie("filter.clear-selection"), $ = z === void 0 ? void 0 : typeof z == "number" ? `${z}px` : z, n = Ve(lt), B = nt(V), Fe = Xe(null), D = N.length > 0, F = !!le, b = D || F, f = D && !Y, m = D && Y, O = !!(n != null && n.isManaged) && C !== void 0 && !b, j = O && !(n != null && n.multiselect), se = _e || ((n == null ? void 0 : n.disabled) ?? !1), [Oe, Pe] = P(X), [Te, oe] = P(we ?? ""), [ze, E] = P(xe ?? []);
|
|
52
|
+
F && (X || I) && k === void 0 && console.warn(
|
|
52
53
|
"[Filter] `defaultSelected` and `onSelectedChange` are not honoured in custom-content mode (when `children` is provided). Drive the selected state yourself via the controlled `selected` prop, e.g. `selected={Boolean(value)}`."
|
|
53
54
|
);
|
|
54
|
-
const
|
|
55
|
+
const A = k !== void 0 ? k : Oe, h = x !== void 0 ? x : Te, i = u !== void 0 ? u : ze, L = _(() => O ? n.isSelected(C) : m ? i.length > 0 : f ? h !== "" : A, [O, C, n, m, i, f, h, A]), M = _(() => {
|
|
55
56
|
var e;
|
|
56
57
|
return !f || !h ? null : ((e = N.find((l) => l.value === h)) == null ? void 0 : e.label) ?? null;
|
|
57
|
-
}, [f, h, N]),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}, [
|
|
61
|
-
const
|
|
62
|
-
const e =
|
|
58
|
+
}, [f, h, N]), Ae = _(() => f ? M && te ? `${w}: ${M}` : M ?? w : w, [f, M, te, w]), [W, ae] = P(!1), [Z, ce] = P("");
|
|
59
|
+
Ye(() => {
|
|
60
|
+
W || ce("");
|
|
61
|
+
}, [W]);
|
|
62
|
+
const q = _(() => {
|
|
63
|
+
const e = Z.trim().toLowerCase();
|
|
63
64
|
return e ? N.filter((l) => l.label.toLowerCase().includes(e)) : N;
|
|
64
|
-
}, [
|
|
65
|
-
if (
|
|
66
|
-
const e =
|
|
67
|
-
return e > 0 && e <
|
|
68
|
-
}, [
|
|
65
|
+
}, [Z, N]), o = _(() => q.filter((e) => !e.disabled), [q]), J = _(() => o.length === 0 ? !1 : o.every((e) => i.includes(e.value)), [o, i]), Me = _(() => {
|
|
66
|
+
if (o.length === 0) return !1;
|
|
67
|
+
const e = o.filter((l) => i.includes(l.value)).length;
|
|
68
|
+
return e > 0 && e < o.length;
|
|
69
|
+
}, [o, i]), Re = y(
|
|
69
70
|
(e) => {
|
|
70
|
-
|
|
71
|
+
Fe.current = e, typeof v == "function" ? v(e) : v && (v.current = e);
|
|
71
72
|
},
|
|
72
73
|
[v]
|
|
73
|
-
),
|
|
74
|
-
if (
|
|
75
|
-
n.selectFilter(
|
|
74
|
+
), Ge = y(() => {
|
|
75
|
+
if (O) {
|
|
76
|
+
n.selectFilter(C);
|
|
76
77
|
return;
|
|
77
78
|
}
|
|
78
|
-
const e = !
|
|
79
|
-
|
|
80
|
-
}, [
|
|
79
|
+
const e = !A;
|
|
80
|
+
k === void 0 && Pe(e), I == null || I(e);
|
|
81
|
+
}, [O, n, C, A, k, I]), He = y(
|
|
81
82
|
(e) => {
|
|
82
83
|
const l = h === e ? "" : e;
|
|
83
|
-
|
|
84
|
+
x === void 0 && oe(l), d == null || d(l);
|
|
84
85
|
},
|
|
85
|
-
[h,
|
|
86
|
-
),
|
|
86
|
+
[h, x, d]
|
|
87
|
+
), De = y(
|
|
87
88
|
(e) => {
|
|
88
|
-
const l =
|
|
89
|
-
u === void 0 &&
|
|
89
|
+
const l = i.includes(e) ? i.filter((a) => a !== e) : [...i, e];
|
|
90
|
+
u === void 0 && E(l), s == null || s(l);
|
|
90
91
|
},
|
|
91
|
-
[
|
|
92
|
-
),
|
|
92
|
+
[i, u, s]
|
|
93
|
+
), je = y(() => {
|
|
93
94
|
let e;
|
|
94
|
-
if (
|
|
95
|
-
const l = new Set(
|
|
96
|
-
e =
|
|
95
|
+
if (J) {
|
|
96
|
+
const l = new Set(o.map((a) => a.value));
|
|
97
|
+
e = i.filter((a) => !l.has(a));
|
|
97
98
|
} else {
|
|
98
|
-
const l = new Set(
|
|
99
|
-
|
|
99
|
+
const l = new Set(i);
|
|
100
|
+
o.forEach((a) => l.add(a.value)), e = [...l];
|
|
100
101
|
}
|
|
101
|
-
u === void 0 &&
|
|
102
|
-
}, [
|
|
103
|
-
|
|
102
|
+
u === void 0 && E(e), s == null || s(e);
|
|
103
|
+
}, [J, o, i, u, s]), de = y(() => {
|
|
104
|
+
F ? T == null || T() : m ? (u === void 0 && E([]), s == null || s([])) : f && (x === void 0 && oe(""), d == null || d("")), ae(!1);
|
|
104
105
|
}, [
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
F,
|
|
107
|
+
T,
|
|
107
108
|
m,
|
|
108
109
|
u,
|
|
109
110
|
s,
|
|
110
111
|
f,
|
|
111
|
-
|
|
112
|
+
x,
|
|
112
113
|
d
|
|
113
|
-
]),
|
|
114
|
-
!b &&
|
|
115
|
-
|
|
114
|
+
]), Ee = L && ke, We = j ? "radio" : void 0, Ze = j ? L : void 0, qe = !b && !j ? L : void 0, Je = /* @__PURE__ */ p(g, { children: [
|
|
115
|
+
!b && L && /* @__PURE__ */ t(pe, { className: r["tedi-filter__icon"], name: "check", size: be(H), color: "inherit" }),
|
|
116
|
+
R != null && /* @__PURE__ */ t(
|
|
116
117
|
"span",
|
|
117
118
|
{
|
|
118
|
-
className:
|
|
119
|
-
[
|
|
119
|
+
className: Q(r["tedi-filter__prepend"], {
|
|
120
|
+
[r["tedi-filter__prepend--hidden"]]: Ee
|
|
120
121
|
}),
|
|
121
|
-
children:
|
|
122
|
+
children: R
|
|
122
123
|
}
|
|
123
124
|
),
|
|
124
|
-
/* @__PURE__ */ t("span", { className:
|
|
125
|
-
|
|
126
|
-
m &&
|
|
125
|
+
/* @__PURE__ */ t("span", { className: r["tedi-filter__text"], children: Ae }),
|
|
126
|
+
G != null && /* @__PURE__ */ t("span", { className: r["tedi-filter__append"], children: G }),
|
|
127
|
+
m && L && i.length > 0 && /* @__PURE__ */ t(tt, { className: r["tedi-filter__count"], color: se ? "neutral" : "brand", children: String(i.length) }),
|
|
127
128
|
b && /* @__PURE__ */ t(
|
|
128
|
-
|
|
129
|
+
pe,
|
|
129
130
|
{
|
|
130
|
-
className:
|
|
131
|
+
className: r["tedi-filter__icon"],
|
|
131
132
|
name: "arrow_drop_down",
|
|
132
133
|
filled: !0,
|
|
133
|
-
size:
|
|
134
|
+
size: be(H),
|
|
134
135
|
color: "inherit"
|
|
135
136
|
}
|
|
136
137
|
)
|
|
137
|
-
] }),
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
),
|
|
144
|
-
|
|
138
|
+
] }), ue = Q(
|
|
139
|
+
r["tedi-filter"],
|
|
140
|
+
r[`tedi-filter--${$e}`],
|
|
141
|
+
H === "large" && r["tedi-filter--large"],
|
|
142
|
+
L && r["tedi-filter--selected"],
|
|
143
|
+
Se
|
|
144
|
+
), fe = /* @__PURE__ */ t(
|
|
145
|
+
U,
|
|
145
146
|
{
|
|
146
|
-
ref:
|
|
147
|
-
id:
|
|
147
|
+
ref: Re,
|
|
148
|
+
id: V,
|
|
148
149
|
type: "button",
|
|
149
|
-
disabled:
|
|
150
|
-
className:
|
|
151
|
-
onClick: b ? void 0 :
|
|
152
|
-
role: b ? void 0 :
|
|
153
|
-
"aria-checked":
|
|
154
|
-
"aria-pressed":
|
|
150
|
+
disabled: se,
|
|
151
|
+
className: r["tedi-filter__button"],
|
|
152
|
+
onClick: b ? void 0 : Ge,
|
|
153
|
+
role: b ? void 0 : We,
|
|
154
|
+
"aria-checked": Ze,
|
|
155
|
+
"aria-pressed": qe,
|
|
155
156
|
noStyle: !0,
|
|
156
|
-
children:
|
|
157
|
+
children: Je
|
|
157
158
|
}
|
|
158
159
|
);
|
|
159
160
|
if (!b)
|
|
160
|
-
return /* @__PURE__ */ t("div", { className:
|
|
161
|
-
const
|
|
162
|
-
const
|
|
163
|
-
return m ? /* @__PURE__ */ t(c.Item, { index:
|
|
164
|
-
|
|
161
|
+
return /* @__PURE__ */ t("div", { className: ue, children: fe });
|
|
162
|
+
const K = m && Le ? 0 : null, Ke = K !== null ? 1 : 0, me = () => q.map((e, l) => {
|
|
163
|
+
const a = m ? i.includes(e.value) : h === e.value, he = l + Ke;
|
|
164
|
+
return m ? /* @__PURE__ */ t(c.Item, { index: he, asChild: !0, disabled: e.disabled, closeOnSelect: !1, children: /* @__PURE__ */ t(
|
|
165
|
+
ve,
|
|
165
166
|
{
|
|
166
167
|
id: `${B}-option-${l}`,
|
|
167
168
|
label: e.label,
|
|
168
169
|
value: e.value,
|
|
169
|
-
checked:
|
|
170
|
+
checked: a,
|
|
170
171
|
disabled: e.disabled,
|
|
171
|
-
onChange: () =>
|
|
172
|
+
onChange: () => De(e.value),
|
|
172
173
|
name: `${B}-options`
|
|
173
174
|
}
|
|
174
175
|
) }, e.value) : /* @__PURE__ */ t(
|
|
175
176
|
c.Item,
|
|
176
177
|
{
|
|
177
|
-
index:
|
|
178
|
+
index: he,
|
|
178
179
|
disabled: e.disabled,
|
|
179
|
-
active:
|
|
180
|
-
onClick: () =>
|
|
180
|
+
active: a,
|
|
181
|
+
onClick: () => He(e.value),
|
|
181
182
|
children: e.label
|
|
182
183
|
},
|
|
183
184
|
e.value
|
|
184
185
|
);
|
|
185
186
|
});
|
|
186
|
-
return /* @__PURE__ */ t("div", { className:
|
|
187
|
-
/* @__PURE__ */ t(c.Trigger, { children:
|
|
188
|
-
/* @__PURE__ */ t(c.Content, { children:
|
|
189
|
-
/* @__PURE__ */ t(
|
|
190
|
-
|
|
187
|
+
return /* @__PURE__ */ t("div", { className: ue, children: /* @__PURE__ */ p(c, { open: W, onOpenChange: ae, placement: Ie, width: "auto", children: [
|
|
188
|
+
/* @__PURE__ */ t(c.Trigger, { children: fe }),
|
|
189
|
+
/* @__PURE__ */ t(c.Content, { children: F ? /* @__PURE__ */ p(g, { children: [
|
|
190
|
+
/* @__PURE__ */ t(
|
|
191
|
+
"div",
|
|
192
|
+
{
|
|
193
|
+
className: Q(r["tedi-filter-dropdown__custom-content"], {
|
|
194
|
+
[r["tedi-filter-dropdown__options"]]: $ !== void 0
|
|
195
|
+
}),
|
|
196
|
+
style: $ !== void 0 ? { maxHeight: $ } : void 0,
|
|
197
|
+
children: le
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
ee && /* @__PURE__ */ p(g, { children: [
|
|
191
201
|
/* @__PURE__ */ t(c.Separator, {}),
|
|
192
|
-
/* @__PURE__ */ t("div", { className:
|
|
202
|
+
/* @__PURE__ */ t("div", { className: r["tedi-filter-dropdown__clear"], children: /* @__PURE__ */ t(U, { visualType: "neutral", size: "small", type: "button", iconLeft: "refresh", onClick: de, children: ne }) })
|
|
193
203
|
] })
|
|
194
204
|
] }) : /* @__PURE__ */ p(g, { children: [
|
|
195
|
-
|
|
196
|
-
/* @__PURE__ */ t("div", { className:
|
|
197
|
-
|
|
205
|
+
Ne && /* @__PURE__ */ p(g, { children: [
|
|
206
|
+
/* @__PURE__ */ t("div", { className: r["tedi-filter-dropdown__search"], children: /* @__PURE__ */ t(
|
|
207
|
+
et,
|
|
198
208
|
{
|
|
199
209
|
id: `${B}-search`,
|
|
200
|
-
label:
|
|
210
|
+
label: re ?? w,
|
|
201
211
|
hideLabel: !0,
|
|
202
|
-
ariaLabel:
|
|
203
|
-
value:
|
|
204
|
-
onChange:
|
|
212
|
+
ariaLabel: re ?? w,
|
|
213
|
+
value: Z,
|
|
214
|
+
onChange: ce
|
|
205
215
|
}
|
|
206
216
|
) }),
|
|
207
217
|
/* @__PURE__ */ t(c.Separator, {})
|
|
208
218
|
] }),
|
|
209
|
-
|
|
210
|
-
/* @__PURE__ */ t(c.Item, { index:
|
|
211
|
-
|
|
219
|
+
K !== null && /* @__PURE__ */ p(g, { children: [
|
|
220
|
+
/* @__PURE__ */ t(c.Item, { index: K, asChild: !0, closeOnSelect: !1, children: /* @__PURE__ */ t(
|
|
221
|
+
ve,
|
|
212
222
|
{
|
|
213
223
|
id: `${B}-select-all`,
|
|
214
|
-
label:
|
|
224
|
+
label: Be,
|
|
215
225
|
value: "select-all",
|
|
216
|
-
checked:
|
|
217
|
-
indeterminate:
|
|
218
|
-
onChange:
|
|
226
|
+
checked: J,
|
|
227
|
+
indeterminate: Me,
|
|
228
|
+
onChange: je,
|
|
219
229
|
name: `${B}-select-all`
|
|
220
230
|
}
|
|
221
231
|
) }),
|
|
222
232
|
/* @__PURE__ */ t(c.Separator, {})
|
|
223
233
|
] }),
|
|
224
|
-
|
|
225
|
-
|
|
234
|
+
$ !== void 0 ? /* @__PURE__ */ t("div", { className: r["tedi-filter-dropdown__options"], style: { maxHeight: $ }, children: me() }) : me(),
|
|
235
|
+
ee && /* @__PURE__ */ p(g, { children: [
|
|
226
236
|
/* @__PURE__ */ t(c.Separator, {}),
|
|
227
|
-
/* @__PURE__ */ t("div", { className:
|
|
237
|
+
/* @__PURE__ */ t("div", { className: r["tedi-filter-dropdown__clear"], children: /* @__PURE__ */ t(U, { visualType: "neutral", size: "small", type: "button", iconLeft: "refresh", onClick: de, children: ne }) })
|
|
228
238
|
] })
|
|
229
239
|
] }) })
|
|
230
240
|
] }) });
|
|
231
241
|
});
|
|
232
|
-
|
|
242
|
+
st.displayName = "Filter";
|
|
233
243
|
export {
|
|
234
|
-
|
|
244
|
+
st as Filter
|
|
235
245
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-filter":"tedi-filter-e3f2f618","tedi-filter__button":"tedi-filter__button-b7abc5ed","tedi-filter__text":"tedi-filter__text-2c4eaab6","tedi-filter__icon":"tedi-filter__icon-1b8e93f2","tedi-filter__prepend":"tedi-filter__prepend-68dc0007","tedi-filter__append":"tedi-filter__append-bdb27679","tedi-filter__prepend--hidden":"tedi-filter__prepend--hidden-5039af1e","tedi-filter__count":"tedi-filter__count-d72acead","tedi-filter--primary":"tedi-filter--primary-837108e8","tedi-filter--selected":"tedi-filter--selected-7273f310","tedi-filter--secondary":"tedi-filter--secondary-8aaf488e","tedi-filter--large":"tedi-filter--large-f7f46174","tedi-filter-group":"tedi-filter-group-9d16304d","tedi-filter-dropdown__custom-content":"tedi-filter-dropdown__custom-content-6e851b26","tedi-filter-dropdown__search":"tedi-filter-dropdown__search-dbb4e1a3","tedi-filter-dropdown__clear":"tedi-filter-dropdown__clear-fa4e6a11"};exports.default=e;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-filter":"tedi-filter-e3f2f618","tedi-filter__button":"tedi-filter__button-b7abc5ed","tedi-filter__text":"tedi-filter__text-2c4eaab6","tedi-filter__icon":"tedi-filter__icon-1b8e93f2","tedi-filter__prepend":"tedi-filter__prepend-68dc0007","tedi-filter__append":"tedi-filter__append-bdb27679","tedi-filter__prepend--hidden":"tedi-filter__prepend--hidden-5039af1e","tedi-filter__count":"tedi-filter__count-d72acead","tedi-filter--primary":"tedi-filter--primary-837108e8","tedi-filter--selected":"tedi-filter--selected-7273f310","tedi-filter--secondary":"tedi-filter--secondary-8aaf488e","tedi-filter--large":"tedi-filter--large-f7f46174","tedi-filter-group":"tedi-filter-group-9d16304d","tedi-filter-dropdown__custom-content":"tedi-filter-dropdown__custom-content-6e851b26","tedi-filter-dropdown__search":"tedi-filter-dropdown__search-dbb4e1a3","tedi-filter-dropdown__clear":"tedi-filter-dropdown__clear-fa4e6a11","tedi-filter-dropdown__options":"tedi-filter-dropdown__options-45f2e9a4"};exports.default=e;
|
|
@@ -14,7 +14,8 @@ const e = {
|
|
|
14
14
|
"tedi-filter-group": "tedi-filter-group-9d16304d",
|
|
15
15
|
"tedi-filter-dropdown__custom-content": "tedi-filter-dropdown__custom-content-6e851b26",
|
|
16
16
|
"tedi-filter-dropdown__search": "tedi-filter-dropdown__search-dbb4e1a3",
|
|
17
|
-
"tedi-filter-dropdown__clear": "tedi-filter-dropdown__clear-fa4e6a11"
|
|
17
|
+
"tedi-filter-dropdown__clear": "tedi-filter-dropdown__clear-fa4e6a11",
|
|
18
|
+
"tedi-filter-dropdown__options": "tedi-filter-dropdown__options-45f2e9a4"
|
|
18
19
|
};
|
|
19
20
|
export {
|
|
20
21
|
e as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),e=require("../../../../../external/@floating-ui/react/dist/floating-ui.react.cjs.js"),A=require("../../../../../external/classnames/index.cjs.js"),t=require("react"),v=require("./dropdown.module.scss.cjs.js"),z=require("./dropdown-content/dropdown-content.cjs.js"),G=require("./dropdown-context.cjs.js"),J=require("./dropdown-helpers.cjs.js"),K=require("./dropdown-item/dropdown-item.cjs.js"),Q=require("./dropdown-separator/dropdown-separator.cjs.js"),V=require("./dropdown-trigger/dropdown-trigger.cjs.js"),X=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),Y=require("../../../providers/label-provider/use-labels.cjs.js"),Z=require("../../../../../external/@floating-ui/dom/dist/floating-ui.dom.cjs.js"),h=require("../../../../../external/@floating-ui/react-dom/dist/floating-ui.react-dom.cjs.js"),ee=4,a=x=>{var O;const{getCurrentBreakpointProps:F}=X.useBreakpointProps(x.defaultServerBreakpoint),{children:P,modal:q=!1,divided:R=!1,width:b="auto",variant:p="default",open:f,defaultOpen:y=!1,onOpenChange:l,defaultActiveIndex:n,placement:g="bottom-start",maxHeight:c,className:j}=F(x),{getLabel:N}=Y.useLabels(),_=e.useFloatingNodeId(),D=t.useRef([]),[u,m]=t.useState(n??null),[w,k]=t.useState(null),[B,T]=t.useState(y),o=f??B;t.useEffect(()=>{o||m(n??null)},[o,n]);const I=t.useCallback(i=>{f===void 0&&T(i),l==null||l(i)},[f,l]),U=e.useFloating({nodeId:_,open:o,placement:g,onOpenChange:I,middleware:[h.offset(ee),h.flip(),h.shift()],whileElementsMounted:Z.autoUpdate}),{context:r,refs:s,x:H,y:L,strategy:M}=U,C=e.useInteractions([e.useClick(r),e.useRole(r,{role:"menu"}),e.useDismiss(r),e.useListNavigation(r,{listRef:D,activeIndex:u,onNavigate:m,loop:!0,selectedIndex:n??null,focusItemOnOpen:n!==null?!0:"auto"})]),W={open:o,setOpen:I,refs:s,listItemsRef:D,activeIndex:u,setActiveIndex:m,placement:g,content:w,setContent:k,divided:R,variant:p,...C},E=(O=s.reference.current)==null?void 0:O.getBoundingClientRect().width,$=t.useMemo(()=>{const i=s.reference.current;if(!i)return;const S=i.offsetParent;if(S)return S.getBoundingClientRect().width},[s.reference.current]);return d.jsxs(G.DropdownContext.Provider,{value:W,children:[P,d.jsx(e.FloatingPortal,{children:o&&d.jsx(e.FloatingFocusManager,{context:r,modal:q,visuallyHiddenDismiss:q?N("close"):!1,children:d.jsx("div",{...C.getFloatingProps({ref:s.setFloating,className:A.default(v.default["tedi-dropdown"],{[v.default[`tedi-dropdown--${p}`]]:p==="tree"},j),style:{position:M,left:H??0,top:L??0,width:J.resolveDropdownWidth(b,E,$)},role:"menu","aria-orientation":"vertical","aria-activedescendant":u!==null?`dropdown-item-${u}`:void 0}),"data-placement":g,"data-state":o?"open":"closed",children:c!==void 0?d.jsx("div",{className:v.default["tedi-dropdown__scroll"],style:{maxHeight:typeof c=="number"?`${c}px`:c},children:w}):w})})})]})};a.Trigger=V.DropdownTrigger;a.Content=z.DropdownContent;a.Item=K.DropdownItem;a.Separator=Q.DropdownSeparator;exports.Dropdown=a;
|
|
@@ -34,6 +34,14 @@ type DropdownBreakpointProps = {
|
|
|
34
34
|
* @default 'default'
|
|
35
35
|
*/
|
|
36
36
|
variant?: 'default' | 'tree';
|
|
37
|
+
/**
|
|
38
|
+
* Restricts the height of the dropdown's scrollable body. When the content is taller,
|
|
39
|
+
* the body scrolls vertically while any sticky regions (e.g. a Filter search / clear) stay pinned.
|
|
40
|
+
* - `number` – fixed max height in pixels
|
|
41
|
+
* - `string` – any valid CSS length (e.g. `'20rem'`, `'50vh'`)
|
|
42
|
+
* @default undefined (no restriction)
|
|
43
|
+
*/
|
|
44
|
+
maxHeight?: number | string;
|
|
37
45
|
};
|
|
38
46
|
export interface DropdownProps extends BreakpointSupport<DropdownBreakpointProps> {
|
|
39
47
|
/**
|