@tedi-design-system/react 17.1.0 → 18.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_virtual/index.cjs10.js +1 -1
- package/_virtual/index.cjs11.js +1 -1
- package/_virtual/index.cjs12.js +1 -1
- package/_virtual/index.cjs13.js +1 -1
- package/_virtual/index.cjs5.js +1 -1
- package/_virtual/index.cjs6.js +1 -1
- package/_virtual/index.cjs7.js +1 -1
- package/_virtual/index.cjs8.js +1 -1
- package/_virtual/index.cjs9.js +1 -1
- package/_virtual/index.es10.js +1 -1
- package/_virtual/index.es11.js +1 -1
- package/_virtual/index.es12.js +1 -1
- package/_virtual/index.es13.js +4 -2
- package/_virtual/index.es14.js +2 -2
- package/_virtual/index.es5.js +2 -4
- package/_virtual/index.es6.js +1 -1
- package/_virtual/index.es7.js +1 -1
- package/_virtual/index.es8.js +1 -1
- package/_virtual/index.es9.js +1 -1
- package/bundle-stats.html +1 -1
- package/external/@mui/system/colorManipulator.cjs.js +1 -1
- package/external/@mui/system/colorManipulator.es.js +2 -2
- package/external/@mui/system/createStyled.cjs.js +1 -1
- package/external/@mui/system/createStyled.es.js +6 -6
- package/external/@mui/system/useThemeWithoutDefault.cjs.js +1 -1
- package/external/@mui/system/useThemeWithoutDefault.es.js +1 -1
- 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/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/community/components/layout/breadcrumbs/breadcrumbs.d.ts +6 -0
- package/src/community/components/layout/breadcrumbs/crumb/crumb.d.ts +6 -0
- package/src/tedi/components/form/number-field/number-field.cjs.js +1 -1
- package/src/tedi/components/form/number-field/number-field.d.ts +16 -3
- package/src/tedi/components/form/number-field/number-field.es.js +121 -97
- package/src/tedi/components/navigation/breadcrumbs/breadcrumbs.cjs.js +1 -0
- package/src/tedi/components/navigation/breadcrumbs/breadcrumbs.d.ts +66 -0
- package/src/tedi/components/navigation/breadcrumbs/breadcrumbs.es.js +65 -0
- package/src/tedi/components/navigation/breadcrumbs/breadcrumbs.module.scss.cjs.js +1 -0
- package/src/tedi/components/navigation/breadcrumbs/breadcrumbs.module.scss.es.js +11 -0
- package/src/tedi/components/navigation/breadcrumbs/index.d.ts +1 -0
- package/src/tedi/index.d.ts +1 -0
- package/src/tedi/providers/label-provider/label-provider.d.ts +5 -0
- package/src/tedi/providers/label-provider/labels-map.cjs.js +1 -1
- package/src/tedi/providers/label-provider/labels-map.d.ts +7 -0
- package/src/tedi/providers/label-provider/labels-map.es.js +7 -0
- package/tedi.cjs.js +1 -1
- package/tedi.es.js +103 -101
package/package.json
CHANGED
|
@@ -17,6 +17,9 @@ type ConditionalTypes<C extends React.ElementType> = {
|
|
|
17
17
|
linkAs?: never;
|
|
18
18
|
crumbs: CrumbProps<IntentionalAny>[];
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Use Breadcrumbs from `@tedi-design-system/react/tedi` instead.
|
|
22
|
+
*/
|
|
20
23
|
export type BreadcrumbsProps<C extends React.ElementType = 'a'> = ConditionalTypes<C> & {
|
|
21
24
|
/**
|
|
22
25
|
* Additional custom class.
|
|
@@ -29,5 +32,8 @@ export type BreadcrumbsProps<C extends React.ElementType = 'a'> = ConditionalTyp
|
|
|
29
32
|
*/
|
|
30
33
|
showMinimalCrumbs?: boolean | Layouts;
|
|
31
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use Breadcrumbs from `@tedi-design-system/react/tedi` instead.
|
|
37
|
+
*/
|
|
32
38
|
export declare const Breadcrumbs: <C extends React.ElementType = "a">(props: BreadcrumbsProps<C>) => JSX.Element | null;
|
|
33
39
|
export default Breadcrumbs;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { AnchorProps } from '../../../anchor/anchor';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use Breadcrumbs from `@tedi-design-system/react/tedi` instead.
|
|
5
|
+
*/
|
|
3
6
|
export type CrumbProps<C extends React.ElementType = 'a'> = {
|
|
4
7
|
/**
|
|
5
8
|
* If crumb is last/current page;
|
|
@@ -7,6 +10,9 @@ export type CrumbProps<C extends React.ElementType = 'a'> = {
|
|
|
7
10
|
*/
|
|
8
11
|
isLast?: boolean;
|
|
9
12
|
} & AnchorProps<C>;
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use Breadcrumbs from `@tedi-design-system/react/tedi` instead.
|
|
15
|
+
*/
|
|
10
16
|
declare const Crumb: <C extends React.ElementType = "a">(props: CrumbProps<C> & {
|
|
11
17
|
singleCrumb?: boolean;
|
|
12
18
|
}) => JSX.Element;
|
|
@@ -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 r=require("react/jsx-runtime"),B=require("../../../../../external/classnames/index.cjs.js"),u=require("react"),le=require("../../base/typography/text/text.cjs.js"),re=require("../../buttons/button/button.cjs.js"),se=require("../feedback-text/feedback-text.cjs.js"),ue=require("../form-label/form-label.cjs.js"),n=require("./number-field.module.scss.cjs.js"),de=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),oe=require("../../../providers/label-provider/use-labels.cjs.js"),S=L=>{const{getCurrentBreakpointProps:C}=de.useBreakpointProps(L.defaultServerBreakpoint),{getLabel:T,locale:D}=oe.useLabels(),W=D==="en"?".":",",{id:N,label:A,hideLabel:G,required:V,className:g,size:y,inputMode:H,decimalPlaces:p,decimalSeparator:F=W,min:d,max:o,step:I=1,defaultValue:w,value:c,onChange:a,suffix:h,fullWidth:J=!1,disabled:b=!1,invalid:k=!1,helper:i,input:v}=C(L),K=H??(p&&p>0||F===","?"decimal":"numeric"),m=u.useCallback(e=>e===void 0?"":F===","?String(e).replace(".",","):String(e),[F]),x=u.useRef(null),q=u.useRef(!1),[E,O]=u.useState(""),[Q,M]=u.useState(w),[X,_]=u.useState(()=>m(c??w)),l=a&&typeof c<"u"?c:Q;u.useEffect(()=>{!q.current&&typeof c<"u"&&_(m(c))},[c,m]);const P=i?`${N}-helper`:void 0,U=u.useCallback(e=>{if(e===void 0)return k||(i==null?void 0:i.type)==="error";const t=d!==void 0&&e<d,s=o!==void 0&&e>o;return k||t||s||(i==null?void 0:i.type)==="error"},[k,i,o,d]),R=e=>Math.min(o??1/0,Math.max(d??-1/0,e)),Y=e=>{const t=T("numberField.quantityUpdated",e);O(t),setTimeout(()=>{O("")},5e3)},$=e=>p!==void 0?parseFloat(e.toFixed(p)):e,Z=e=>{let t=l??0;e==="increment"&&(t=t+I),e==="decrement"&&(t=t-I),t=R(t),t=$(t),Y(t),a==null||a(t),M(t),_(m(t))},ee=({currentTarget:{value:e}})=>{if(_(e),e===""){l!==void 0&&(a==null||a(void 0),M(void 0));return}const t=e.replace(",",".");if(!/^-?(\d+(\.\d*)?|\.\d+)$/.test(t))return;const s=parseFloat(t);if(Number.isNaN(s))return;const f=R(s),j=$(f);j!==l&&(a==null||a(j),M(j))},te=()=>{q.current=!0},ne=()=>{q.current=!1,_(m(l))},z=e=>{const t=l!==void 0&&(e==="increment"?o!==void 0&&l>=o:d!==void 0&&l<=d),s=B.default(n.default["tedi-number-field__button"],n.default[`tedi-number-field__button--${e}`],{[n.default["tedi-number-field__button--disabled"]]:t||b}),f=T(`numberField.${e}`,I);return r.jsx(re.Button,{"aria-label":f,onClick:()=>Z(e),disabled:t||b,visualType:"secondary",className:s,icon:{name:e==="increment"?"add":"remove"},size:y==="small"?"small":void 0,children:e==="increment"?"+":"-"})},ae=()=>{const e=B.default(n.default["tedi-number-field__input-wrapper"],{[n.default["tedi-number-field__input-wrapper--with-suffix"]]:h,[n.default["tedi-number-field__input-wrapper--full-width"]]:J}),t=B.default(n.default["tedi-number-field__input"],v==null?void 0:v.className),s=()=>{var f;return(f=x==null?void 0:x.current)==null?void 0:f.focus()};return r.jsxs("div",{className:e,onClick:s,children:[r.jsx("input",{ref:x,id:N,role:"spinbutton","aria-valuemin":d,"aria-valuemax":o,"aria-valuenow":l,"aria-describedby":P,"aria-invalid":U(l)?"true":"false",type:"text",inputMode:K,value:X,required:V,disabled:b,onChange:ee,onFocus:te,onBlur:ne,className:t,...v}),h&&r.jsx(le.Text,{element:"span",modifiers:"small",color:"tertiary",className:n.default["tedi-number-field__suffix"],children:h})]})},ie=B.default(n.default["tedi-number-field"],{[n.default["tedi-number-field--invalid"]]:U(l)},{[n.default["tedi-number-field--disabled"]]:b},{[n.default["tedi-number-field--small"]]:y==="small"},g);return r.jsxs("div",{"data-name":"number-field",className:g,children:[r.jsx(ue.FormLabel,{id:N,label:A,required:V,hideLabel:G,size:y}),r.jsxs("div",{className:ie,children:[z("decrement"),ae(),z("increment")]}),i&&r.jsx(se.FeedbackText,{className:n.default["tedi-number-field__feedback"],...i,id:P}),E&&r.jsx("div",{"aria-live":"polite",className:"sr-only",children:E})]})};S.displayName="NumberField";exports.NumberField=S;exports.default=S;
|
|
@@ -36,18 +36,31 @@ export interface NumberFieldProps extends BreakpointSupport<NumberFieldBreakpoin
|
|
|
36
36
|
*/
|
|
37
37
|
value?: number;
|
|
38
38
|
/**
|
|
39
|
-
* Callback fired when the input value changes.
|
|
39
|
+
* Callback fired when the input value changes. Emits `undefined` when the
|
|
40
|
+
* field is cleared so consumers can distinguish *"user explicitly entered
|
|
41
|
+
* zero"* from *"field is empty"* — important for required-field validation
|
|
42
|
+
* and for fields where `0` is a meaningful selection.
|
|
40
43
|
*/
|
|
41
|
-
onChange?: (value: number) => void;
|
|
44
|
+
onChange?: (value: number | undefined) => void;
|
|
42
45
|
/**
|
|
43
46
|
* Specifies the input mode for the field (e.g., numeric or decimal).
|
|
44
|
-
*
|
|
47
|
+
* Defaults to `'decimal'` when `decimalPlaces > 0` or `decimalSeparator === ','`,
|
|
48
|
+
* otherwise numeric.
|
|
45
49
|
*/
|
|
46
50
|
inputMode?: 'numeric' | 'decimal';
|
|
47
51
|
/**
|
|
48
52
|
* Number of decimal places for rounding calculations.
|
|
49
53
|
*/
|
|
50
54
|
decimalPlaces?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Character used as the decimal separator when displaying the value.
|
|
57
|
+
* Both `.` and `,` are always accepted as input regardless of this setting.
|
|
58
|
+
*
|
|
59
|
+
* Defaults are derived from `<LabelProvider locale>`: `en` → `.`, `et` / `ru`
|
|
60
|
+
* → `,`. Pass the prop explicitly to override the locale-derived default for
|
|
61
|
+
* a single field.
|
|
62
|
+
*/
|
|
63
|
+
decimalSeparator?: '.' | ',';
|
|
51
64
|
/**
|
|
52
65
|
* Minimum allowed value. Disables decrementing below this value and restricts manual input.
|
|
53
66
|
*/
|
|
@@ -1,122 +1,146 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { Text as
|
|
5
|
-
import { Button as
|
|
6
|
-
import { FeedbackText as
|
|
7
|
-
import { FormLabel as
|
|
1
|
+
import { jsxs as L, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import _ from "../../../../../external/classnames/index.es.js";
|
|
3
|
+
import { useCallback as D, useRef as W, useState as S, useEffect as se } from "react";
|
|
4
|
+
import { Text as de } from "../../base/typography/text/text.es.js";
|
|
5
|
+
import { Button as oe } from "../../buttons/button/button.es.js";
|
|
6
|
+
import { FeedbackText as ue } from "../feedback-text/feedback-text.es.js";
|
|
7
|
+
import { FormLabel as ce } from "../form-label/form-label.es.js";
|
|
8
8
|
import n from "./number-field.module.scss.es.js";
|
|
9
|
-
import { useBreakpointProps as
|
|
10
|
-
import { useLabels as
|
|
11
|
-
const
|
|
12
|
-
const { getCurrentBreakpointProps:
|
|
13
|
-
id:
|
|
14
|
-
label:
|
|
15
|
-
hideLabel:
|
|
16
|
-
required:
|
|
17
|
-
className:
|
|
18
|
-
size:
|
|
19
|
-
inputMode:
|
|
20
|
-
decimalPlaces:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
import { useBreakpointProps as me } from "../../../helpers/hooks/use-breakpoint-props.es.js";
|
|
10
|
+
import { useLabels as fe } from "../../../providers/label-provider/use-labels.es.js";
|
|
11
|
+
const pe = (T) => {
|
|
12
|
+
const { getCurrentBreakpointProps: A } = me(T.defaultServerBreakpoint), { getLabel: w, locale: R } = fe(), G = R === "en" ? "." : ",", {
|
|
13
|
+
id: y,
|
|
14
|
+
label: H,
|
|
15
|
+
hideLabel: J,
|
|
16
|
+
required: E,
|
|
17
|
+
className: U,
|
|
18
|
+
size: B,
|
|
19
|
+
inputMode: K,
|
|
20
|
+
decimalPlaces: f,
|
|
21
|
+
decimalSeparator: I = G,
|
|
22
|
+
min: l,
|
|
23
|
+
max: s,
|
|
24
|
+
step: x = 1,
|
|
25
|
+
defaultValue: O,
|
|
26
|
+
value: o,
|
|
26
27
|
onChange: i,
|
|
27
|
-
suffix:
|
|
28
|
-
fullWidth:
|
|
29
|
-
disabled:
|
|
30
|
-
invalid:
|
|
31
|
-
helper:
|
|
32
|
-
input:
|
|
33
|
-
} =
|
|
34
|
-
() =>
|
|
35
|
-
[
|
|
36
|
-
),
|
|
28
|
+
suffix: h,
|
|
29
|
+
fullWidth: Q = !1,
|
|
30
|
+
disabled: p = !1,
|
|
31
|
+
invalid: F = !1,
|
|
32
|
+
helper: r,
|
|
33
|
+
input: b
|
|
34
|
+
} = A(T), X = K ?? (f && f > 0 || I === "," ? "decimal" : "numeric"), m = D(
|
|
35
|
+
(e) => e === void 0 ? "" : I === "," ? String(e).replace(".", ",") : String(e),
|
|
36
|
+
[I]
|
|
37
|
+
), v = W(null), M = W(!1), [$, g] = S(""), [Y, k] = S(O), [Z, N] = S(() => m(o ?? O)), a = i && typeof o < "u" ? o : Y;
|
|
38
|
+
se(() => {
|
|
39
|
+
!M.current && typeof o < "u" && N(m(o));
|
|
40
|
+
}, [o, m]);
|
|
41
|
+
const z = r ? `${y}-helper` : void 0, P = D(
|
|
37
42
|
(e) => {
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
if (e === void 0)
|
|
44
|
+
return F || (r == null ? void 0 : r.type) === "error";
|
|
45
|
+
const t = l !== void 0 && e < l, d = s !== void 0 && e > s;
|
|
46
|
+
return F || t || d || (r == null ? void 0 : r.type) === "error";
|
|
40
47
|
},
|
|
41
|
-
[
|
|
42
|
-
),
|
|
43
|
-
const t =
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
[F, r, s, l]
|
|
49
|
+
), j = (e) => Math.min(s ?? 1 / 0, Math.max(l ?? -1 / 0, e)), ee = (e) => {
|
|
50
|
+
const t = w("numberField.quantityUpdated", e);
|
|
51
|
+
g(t), setTimeout(() => {
|
|
52
|
+
g("");
|
|
46
53
|
}, 5e3);
|
|
47
|
-
},
|
|
48
|
-
let t =
|
|
49
|
-
e === "increment" && (t = t +
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
}, q = (e) => f !== void 0 ? parseFloat(e.toFixed(f)) : e, te = (e) => {
|
|
55
|
+
let t = a ?? 0;
|
|
56
|
+
e === "increment" && (t = t + x), e === "decrement" && (t = t - x), t = j(t), t = q(t), ee(t), i == null || i(t), k(t), N(m(t));
|
|
57
|
+
}, ne = ({ currentTarget: { value: e } }) => {
|
|
58
|
+
if (N(e), e === "") {
|
|
59
|
+
a !== void 0 && (i == null || i(void 0), k(void 0));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const t = e.replace(",", ".");
|
|
63
|
+
if (!/^-?(\d+(\.\d*)?|\.\d+)$/.test(t))
|
|
64
|
+
return;
|
|
65
|
+
const d = parseFloat(t);
|
|
66
|
+
if (Number.isNaN(d)) return;
|
|
67
|
+
const u = j(d), V = q(u);
|
|
68
|
+
V !== a && (i == null || i(V), k(V));
|
|
69
|
+
}, ie = () => {
|
|
70
|
+
M.current = !0;
|
|
71
|
+
}, re = () => {
|
|
72
|
+
M.current = !1, N(m(a));
|
|
73
|
+
}, C = (e) => {
|
|
74
|
+
const t = a !== void 0 && (e === "increment" ? s !== void 0 && a >= s : l !== void 0 && a <= l), d = _(n["tedi-number-field__button"], n[`tedi-number-field__button--${e}`], {
|
|
75
|
+
[n["tedi-number-field__button--disabled"]]: t || p
|
|
76
|
+
}), u = w(`numberField.${e}`, x);
|
|
77
|
+
return /* @__PURE__ */ c(
|
|
78
|
+
oe,
|
|
58
79
|
{
|
|
59
|
-
"aria-label":
|
|
60
|
-
onClick: () =>
|
|
61
|
-
disabled: t ||
|
|
80
|
+
"aria-label": u,
|
|
81
|
+
onClick: () => te(e),
|
|
82
|
+
disabled: t || p,
|
|
62
83
|
visualType: "secondary",
|
|
63
|
-
className:
|
|
84
|
+
className: d,
|
|
64
85
|
icon: { name: e === "increment" ? "add" : "remove" },
|
|
65
|
-
size:
|
|
86
|
+
size: B === "small" ? "small" : void 0,
|
|
66
87
|
children: e === "increment" ? "+" : "-"
|
|
67
88
|
}
|
|
68
89
|
);
|
|
69
|
-
},
|
|
70
|
-
const e =
|
|
71
|
-
[n["tedi-number-field__input-wrapper--with-suffix"]]:
|
|
72
|
-
[n["tedi-number-field__input-wrapper--full-width"]]:
|
|
73
|
-
}), t =
|
|
74
|
-
return /* @__PURE__ */
|
|
75
|
-
var
|
|
76
|
-
return (
|
|
90
|
+
}, ae = () => {
|
|
91
|
+
const e = _(n["tedi-number-field__input-wrapper"], {
|
|
92
|
+
[n["tedi-number-field__input-wrapper--with-suffix"]]: h,
|
|
93
|
+
[n["tedi-number-field__input-wrapper--full-width"]]: Q
|
|
94
|
+
}), t = _(n["tedi-number-field__input"], b == null ? void 0 : b.className);
|
|
95
|
+
return /* @__PURE__ */ L("div", { className: e, onClick: () => {
|
|
96
|
+
var u;
|
|
97
|
+
return (u = v == null ? void 0 : v.current) == null ? void 0 : u.focus();
|
|
77
98
|
}, children: [
|
|
78
|
-
/* @__PURE__ */
|
|
99
|
+
/* @__PURE__ */ c(
|
|
79
100
|
"input",
|
|
80
101
|
{
|
|
81
|
-
ref:
|
|
82
|
-
id:
|
|
83
|
-
"
|
|
84
|
-
"aria-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
ref: v,
|
|
103
|
+
id: y,
|
|
104
|
+
role: "spinbutton",
|
|
105
|
+
"aria-valuemin": l,
|
|
106
|
+
"aria-valuemax": s,
|
|
107
|
+
"aria-valuenow": a,
|
|
108
|
+
"aria-describedby": z,
|
|
109
|
+
"aria-invalid": P(a) ? "true" : "false",
|
|
110
|
+
type: "text",
|
|
111
|
+
inputMode: X,
|
|
112
|
+
value: Z,
|
|
113
|
+
required: E,
|
|
114
|
+
disabled: p,
|
|
115
|
+
onChange: ne,
|
|
116
|
+
onFocus: ie,
|
|
117
|
+
onBlur: re,
|
|
94
118
|
className: t,
|
|
95
|
-
...
|
|
119
|
+
...b
|
|
96
120
|
}
|
|
97
121
|
),
|
|
98
|
-
|
|
122
|
+
h && /* @__PURE__ */ c(de, { element: "span", modifiers: "small", color: "tertiary", className: n["tedi-number-field__suffix"], children: h })
|
|
99
123
|
] });
|
|
100
|
-
},
|
|
124
|
+
}, le = _(
|
|
101
125
|
n["tedi-number-field"],
|
|
102
|
-
{ [n["tedi-number-field--invalid"]]:
|
|
103
|
-
{ [n["tedi-number-field--disabled"]]:
|
|
104
|
-
{ [n["tedi-number-field--small"]]:
|
|
105
|
-
|
|
126
|
+
{ [n["tedi-number-field--invalid"]]: P(a) },
|
|
127
|
+
{ [n["tedi-number-field--disabled"]]: p },
|
|
128
|
+
{ [n["tedi-number-field--small"]]: B === "small" },
|
|
129
|
+
U
|
|
106
130
|
);
|
|
107
|
-
return /* @__PURE__ */
|
|
108
|
-
/* @__PURE__ */
|
|
109
|
-
/* @__PURE__ */
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
131
|
+
return /* @__PURE__ */ L("div", { "data-name": "number-field", className: U, children: [
|
|
132
|
+
/* @__PURE__ */ c(ce, { id: y, label: H, required: E, hideLabel: J, size: B }),
|
|
133
|
+
/* @__PURE__ */ L("div", { className: le, children: [
|
|
134
|
+
C("decrement"),
|
|
135
|
+
ae(),
|
|
136
|
+
C("increment")
|
|
113
137
|
] }),
|
|
114
|
-
|
|
115
|
-
|
|
138
|
+
r && /* @__PURE__ */ c(ue, { className: n["tedi-number-field__feedback"], ...r, id: z }),
|
|
139
|
+
$ && /* @__PURE__ */ c("div", { "aria-live": "polite", className: "sr-only", children: $ })
|
|
116
140
|
] });
|
|
117
141
|
};
|
|
118
|
-
|
|
142
|
+
pe.displayName = "NumberField";
|
|
119
143
|
export {
|
|
120
|
-
|
|
121
|
-
|
|
144
|
+
pe as NumberField,
|
|
145
|
+
pe as default
|
|
122
146
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),b=require("../../../../../external/classnames/index.cjs.js"),o=require("react"),I=require("../../base/icon/icon.cjs.js"),M=require("../../buttons/button/button.cjs.js"),t=require("./breadcrumbs.module.scss.cjs.js"),P=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),S=require("../../../providers/label-provider/use-labels.cjs.js"),d=require("../../overlays/dropdown/dropdown.cjs.js"),k=n=>{const l=[];return o.Children.forEach(n,a=>{if(o.isValidElement(a)){if(a.type===o.Fragment){l.push(...k(a.props.children));return}l.push(a)}}),l},D=e.jsx(I.Icon,{name:"chevron_right",size:16,color:"brand"}),h=n=>{const{children:l,ariaLabel:a,showMoreLabel:v,separator:w=D,className:p}=n,{getCurrentBreakpointProps:B}=P.useBreakpointProps(n.defaultServerBreakpoint),{variant:C="long",maxItems:f,itemsBeforeCollapse:q=1,itemsAfterCollapse:y=1}=B(n),{getLabel:x}=S.useLabels(),_=a??x("breadcrumbs"),L=v??x("breadcrumbs.show-more"),s=k(l);if(s.length===0)return null;if(C==="short"){if(s.length<2)return null;const r=s[s.length-2],i=r.props,c=typeof r.type!="string"&&i.iconLeft===void 0?o.cloneElement(r,{iconLeft:"arrow_back"}):r;return e.jsx("nav",{"aria-label":_,className:b.default(t.default["tedi-breadcrumbs"],p),children:e.jsx("ol",{className:t.default["tedi-breadcrumbs__list"],children:e.jsx("li",{className:t.default["tedi-breadcrumbs__item"],children:c})})})}const u=Math.max(0,q),m=Math.max(1,y),g=f!==void 0&&s.length>f&&s.length>u+m?[...s.slice(0,u).map(r=>({kind:"item",element:r})),{kind:"ellipsis",hidden:s.slice(u,s.length-m)},...s.slice(s.length-m).map(r=>({kind:"item",element:r}))]:s.map(r=>({kind:"item",element:r})),j=g.length-1;return e.jsx("nav",{"aria-label":_,className:b.default(t.default["tedi-breadcrumbs"],p),children:e.jsx("ol",{className:t.default["tedi-breadcrumbs__list"],children:g.map((r,i)=>e.jsxs(o.Fragment,{children:[r.kind==="item"?e.jsx("li",{className:b.default(t.default["tedi-breadcrumbs__item"],{[t.default["tedi-breadcrumbs__current"]]:i===j}),children:r.element}):e.jsx("li",{className:t.default["tedi-breadcrumbs__item"],children:e.jsxs(d.Dropdown,{children:[e.jsx(d.Dropdown.Trigger,{children:e.jsxs(M.Button,{noStyle:!0,className:t.default["tedi-breadcrumbs__ellipsis"],children:[e.jsx("span",{"aria-hidden":"true",children:"…"}),e.jsx("span",{className:"sr-only",children:L})]})}),e.jsx(d.Dropdown.Content,{children:r.hidden.map((c,N)=>e.jsx(d.Dropdown.Item,{index:N,asChild:!0,children:c},c.key??N))})]})}),i<j&&e.jsx("li",{className:t.default["tedi-breadcrumbs__separator"],"aria-hidden":"true",children:w})]},i))})})};h.displayName="Breadcrumbs";exports.Breadcrumbs=h;exports.default=h;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { default as React, ReactNode } from 'react';
|
|
2
|
+
import { BreakpointSupport } from '../../../helpers';
|
|
3
|
+
type BreadcrumbsBreakpointProps = {
|
|
4
|
+
/**
|
|
5
|
+
* - `'long'` — full trail of crumbs separated by chevrons.
|
|
6
|
+
* - `'short'` — only the second-to-last child rendered as a back-link with
|
|
7
|
+
* a left-pointing arrow. Useful on narrow viewports. Renders nothing when
|
|
8
|
+
* fewer than two crumbs are supplied.
|
|
9
|
+
* @default long
|
|
10
|
+
*/
|
|
11
|
+
variant?: 'long' | 'short';
|
|
12
|
+
/**
|
|
13
|
+
* Maximum number of crumbs to render before collapsing the middle into an
|
|
14
|
+
* ellipsis button. Clicking the button opens a dropdown listing the hidden
|
|
15
|
+
* crumbs. Only applies in the `'long'` variant. When omitted, all crumbs are
|
|
16
|
+
* rendered.
|
|
17
|
+
*/
|
|
18
|
+
maxItems?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Number of crumbs to keep visible at the start of the trail when collapsed.
|
|
21
|
+
* @default 1
|
|
22
|
+
*/
|
|
23
|
+
itemsBeforeCollapse?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Number of crumbs to keep visible at the end of the trail when collapsed.
|
|
26
|
+
* The current page (last crumb) should normally stay visible — keep this ≥ 1.
|
|
27
|
+
* @default 1
|
|
28
|
+
*/
|
|
29
|
+
itemsAfterCollapse?: number;
|
|
30
|
+
};
|
|
31
|
+
export interface BreadcrumbsProps extends BreakpointSupport<BreadcrumbsBreakpointProps> {
|
|
32
|
+
/**
|
|
33
|
+
* Crumbs in order from the root page to the current page. Each child becomes
|
|
34
|
+
* one crumb; chevron separators are inserted between them. Use a `Link` (or
|
|
35
|
+
* any anchor) for navigable crumbs and a plain element (e.g. `<span>`) for
|
|
36
|
+
* the current page — add `aria-current="page"` to it yourself.
|
|
37
|
+
*/
|
|
38
|
+
children: React.ReactNode;
|
|
39
|
+
/**
|
|
40
|
+
* Accessible label for the wrapping `<nav>` landmark. Falls back to the
|
|
41
|
+
* `breadcrumbs` entry from `LabelProvider`.
|
|
42
|
+
*/
|
|
43
|
+
ariaLabel?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Accessible label for the ellipsis button that opens the collapsed-crumbs
|
|
46
|
+
* dropdown. Only used when `maxItems` causes a collapse. Falls back to the
|
|
47
|
+
* `breadcrumbs.show-more` entry from `LabelProvider`.
|
|
48
|
+
*/
|
|
49
|
+
showMoreLabel?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Node rendered between crumbs. Pass a string (e.g. `'/'`, `'›'`) for text
|
|
52
|
+
* separators or any React node for custom markup. Hidden from assistive
|
|
53
|
+
* technology — screen readers announce only the crumbs themselves.
|
|
54
|
+
* @default <Icon name="chevron_right" size={16} color="brand" />
|
|
55
|
+
*/
|
|
56
|
+
separator?: ReactNode;
|
|
57
|
+
/**
|
|
58
|
+
* Additional class name applied to the `<nav>` element.
|
|
59
|
+
*/
|
|
60
|
+
className?: string;
|
|
61
|
+
}
|
|
62
|
+
export declare const Breadcrumbs: {
|
|
63
|
+
(props: BreadcrumbsProps): JSX.Element | null;
|
|
64
|
+
displayName: string;
|
|
65
|
+
};
|
|
66
|
+
export default Breadcrumbs;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as r, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import h from "../../../../../external/classnames/index.es.js";
|
|
3
|
+
import { cloneElement as E, Fragment as k, Children as P, isValidElement as S } from "react";
|
|
4
|
+
import { Icon as j } from "../../base/icon/icon.es.js";
|
|
5
|
+
import { Button as A } from "../../buttons/button/button.es.js";
|
|
6
|
+
import s from "./breadcrumbs.module.scss.es.js";
|
|
7
|
+
import { useBreakpointProps as T } from "../../../helpers/hooks/use-breakpoint-props.es.js";
|
|
8
|
+
import { useLabels as z } from "../../../providers/label-provider/use-labels.es.js";
|
|
9
|
+
import { Dropdown as c } from "../../overlays/dropdown/dropdown.es.js";
|
|
10
|
+
const v = (l) => {
|
|
11
|
+
const n = [];
|
|
12
|
+
return P.forEach(l, (a) => {
|
|
13
|
+
if (S(a)) {
|
|
14
|
+
if (a.type === k) {
|
|
15
|
+
n.push(...v(a.props.children));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
n.push(a);
|
|
19
|
+
}
|
|
20
|
+
}), n;
|
|
21
|
+
}, D = /* @__PURE__ */ r(j, { name: "chevron_right", size: 16, color: "brand" }), F = (l) => {
|
|
22
|
+
const { children: n, ariaLabel: a, showMoreLabel: y, separator: B = D, className: u } = l, { getCurrentBreakpointProps: L } = T(l.defaultServerBreakpoint), {
|
|
23
|
+
variant: w = "long",
|
|
24
|
+
maxItems: b,
|
|
25
|
+
itemsBeforeCollapse: x = 1,
|
|
26
|
+
itemsAfterCollapse: I = 1
|
|
27
|
+
} = L(l), { getLabel: f } = z(), _ = a ?? f("breadcrumbs"), M = y ?? f("breadcrumbs.show-more"), t = v(n);
|
|
28
|
+
if (t.length === 0) return null;
|
|
29
|
+
if (w === "short") {
|
|
30
|
+
if (t.length < 2) return null;
|
|
31
|
+
const e = t[t.length - 2], i = e.props, o = typeof e.type != "string" && i.iconLeft === void 0 ? E(e, { iconLeft: "arrow_back" }) : e;
|
|
32
|
+
return /* @__PURE__ */ r("nav", { "aria-label": _, className: h(s["tedi-breadcrumbs"], u), children: /* @__PURE__ */ r("ol", { className: s["tedi-breadcrumbs__list"], children: /* @__PURE__ */ r("li", { className: s["tedi-breadcrumbs__item"], children: o }) }) });
|
|
33
|
+
}
|
|
34
|
+
const m = Math.max(0, x), d = Math.max(1, I), g = b !== void 0 && t.length > b && t.length > m + d ? [
|
|
35
|
+
...t.slice(0, m).map((e) => ({ kind: "item", element: e })),
|
|
36
|
+
{
|
|
37
|
+
kind: "ellipsis",
|
|
38
|
+
hidden: t.slice(m, t.length - d)
|
|
39
|
+
},
|
|
40
|
+
...t.slice(t.length - d).map((e) => ({ kind: "item", element: e }))
|
|
41
|
+
] : t.map((e) => ({ kind: "item", element: e })), N = g.length - 1;
|
|
42
|
+
return /* @__PURE__ */ r("nav", { "aria-label": _, className: h(s["tedi-breadcrumbs"], u), children: /* @__PURE__ */ r("ol", { className: s["tedi-breadcrumbs__list"], children: g.map((e, i) => /* @__PURE__ */ p(k, { children: [
|
|
43
|
+
e.kind === "item" ? /* @__PURE__ */ r(
|
|
44
|
+
"li",
|
|
45
|
+
{
|
|
46
|
+
className: h(s["tedi-breadcrumbs__item"], {
|
|
47
|
+
[s["tedi-breadcrumbs__current"]]: i === N
|
|
48
|
+
}),
|
|
49
|
+
children: e.element
|
|
50
|
+
}
|
|
51
|
+
) : /* @__PURE__ */ r("li", { className: s["tedi-breadcrumbs__item"], children: /* @__PURE__ */ p(c, { children: [
|
|
52
|
+
/* @__PURE__ */ r(c.Trigger, { children: /* @__PURE__ */ p(A, { noStyle: !0, className: s["tedi-breadcrumbs__ellipsis"], children: [
|
|
53
|
+
/* @__PURE__ */ r("span", { "aria-hidden": "true", children: "…" }),
|
|
54
|
+
/* @__PURE__ */ r("span", { className: "sr-only", children: M })
|
|
55
|
+
] }) }),
|
|
56
|
+
/* @__PURE__ */ r(c.Content, { children: e.hidden.map((o, C) => /* @__PURE__ */ r(c.Item, { index: C, asChild: !0, children: o }, o.key ?? C)) })
|
|
57
|
+
] }) }),
|
|
58
|
+
i < N && /* @__PURE__ */ r("li", { className: s["tedi-breadcrumbs__separator"], "aria-hidden": "true", children: B })
|
|
59
|
+
] }, i)) }) });
|
|
60
|
+
};
|
|
61
|
+
F.displayName = "Breadcrumbs";
|
|
62
|
+
export {
|
|
63
|
+
F as Breadcrumbs,
|
|
64
|
+
F as default
|
|
65
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-breadcrumbs":"tedi-breadcrumbs-0247287c","tedi-breadcrumbs__list":"tedi-breadcrumbs__list-10d5a5f4","tedi-breadcrumbs__item":"tedi-breadcrumbs__item-d8534029","tedi-breadcrumbs__separator":"tedi-breadcrumbs__separator-7f7b6f95","tedi-breadcrumbs__current":"tedi-breadcrumbs__current-db9fd67c","tedi-breadcrumbs__ellipsis":"tedi-breadcrumbs__ellipsis-0b4cdcac"};exports.default=e;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"tedi-breadcrumbs": "tedi-breadcrumbs-0247287c",
|
|
3
|
+
"tedi-breadcrumbs__list": "tedi-breadcrumbs__list-10d5a5f4",
|
|
4
|
+
"tedi-breadcrumbs__item": "tedi-breadcrumbs__item-d8534029",
|
|
5
|
+
"tedi-breadcrumbs__separator": "tedi-breadcrumbs__separator-7f7b6f95",
|
|
6
|
+
"tedi-breadcrumbs__current": "tedi-breadcrumbs__current-db9fd67c",
|
|
7
|
+
"tedi-breadcrumbs__ellipsis": "tedi-breadcrumbs__ellipsis-0b4cdcac"
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
e as default
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './breadcrumbs';
|
package/src/tedi/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from './components/notifications/alert/alert';
|
|
|
25
25
|
export * from './components/misc/empty-state';
|
|
26
26
|
export * from './components/notifications/toast/toast';
|
|
27
27
|
export * from './components/cards/card';
|
|
28
|
+
export * from './components/navigation/breadcrumbs';
|
|
28
29
|
export * from './components/navigation/hash-trigger/hash-trigger';
|
|
29
30
|
export * from './components/navigation/link/link';
|
|
30
31
|
export * from './components/navigation/pagination';
|
|
@@ -3,6 +3,11 @@ import { TediLabelEntryRecord, TediLabels, TediLabelValuesRecord, TediLanguage }
|
|
|
3
3
|
export interface ILabelContext {
|
|
4
4
|
getLabel<TKey extends keyof TediLabels, TArgs extends TediLabels[TKey] extends Record<TediLanguage, infer FuncType> ? FuncType extends (...args: infer P) => string ? P : [] : TediLabels[TKey] extends (...args: infer P) => string ? P : []>(key: TKey, ...args: TArgs): string;
|
|
5
5
|
setLocale: (locale: TediLanguage) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Currently active locale. Exposed so components can derive locale-sensitive
|
|
8
|
+
* formatting defaults (e.g. `NumberField`'s `decimalSeparator`) without
|
|
9
|
+
* forcing every consumer to repeat the prop on every instance.
|
|
10
|
+
*/
|
|
6
11
|
locale: TediLanguage;
|
|
7
12
|
}
|
|
8
13
|
export declare const LabelContext: React.Context<ILabelContext>;
|