@tedi-design-system/react 17.1.0-rc.1 → 17.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tedi-design-system/react",
3
- "version": "17.1.0-rc.1",
3
+ "version": "17.1.0-rc.3",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -43,7 +43,7 @@
43
43
  "@mui/material": "^5.15.13",
44
44
  "@mui/x-date-pickers": "^5.0.20",
45
45
  "@tanstack/react-table": "^8.13.2",
46
- "@tedi-design-system/core": "6.0.0",
46
+ "@tedi-design-system/core": "6.0.1",
47
47
  "classnames": "^2.5.1",
48
48
  "draft-js": "^0.11.7",
49
49
  "draftjs-md-converter": "^1.5.2",
@@ -81,16 +81,11 @@
81
81
  "@storybook/addon-a11y": "8.4.2",
82
82
  "@storybook/addon-designs": "^8.2.1",
83
83
  "@storybook/addon-essentials": "8.4.2",
84
- "@storybook/addon-mdx-gfm": "8.4.2",
85
84
  "@storybook/blocks": "8.4.2",
86
85
  "@storybook/builder-vite": "8.4.2",
87
86
  "@storybook/react": "8.4.2",
88
87
  "@storybook/react-vite": "8.4.2",
89
88
  "@storybook/theming": "8.6.14",
90
- "@svgr/webpack": "8.1.0",
91
- "@swc-node/register": "~1.11.1",
92
- "@swc/core": "~1.14.0",
93
- "@swc/helpers": "~0.5.19",
94
89
  "@testing-library/dom": "^9.3.4",
95
90
  "@testing-library/jest-dom": "^6.4.2",
96
91
  "@testing-library/react": "15.0.6",
@@ -103,18 +98,15 @@
103
98
  "@types/node": "20.11.28",
104
99
  "@types/react": "18.3.1",
105
100
  "@types/react-dom": "18.3.0",
106
- "@types/react-test-renderer": "^19.1.0",
107
101
  "@types/showdown": "^2.0.6",
108
102
  "@typescript-eslint/eslint-plugin": "^6.21.0",
109
103
  "@typescript-eslint/parser": "^6.21.0",
110
104
  "@vitejs/plugin-react": "^4.3.4",
111
- "baseline-browser-mapping": "^2.10.0",
112
105
  "chromatic": "^13.3.4",
113
- "cross-env": "^7.0.3",
114
106
  "dompurify": "^3.3.0",
115
107
  "eslint": "8.48.0",
116
108
  "eslint-config-next": "^13.4.6",
117
- "eslint-config-prettier": "9.1.0",
109
+ "eslint-config-prettier": "10.1.8",
118
110
  "eslint-plugin-import": "^2.27.5",
119
111
  "eslint-plugin-jsx-a11y": "^6.7.1",
120
112
  "eslint-plugin-prettier": "^4.2.1",
@@ -143,18 +135,14 @@
143
135
  "stylelint-config-recess-order": "^4.2.0",
144
136
  "stylelint-config-standard-scss": "^14.0.0",
145
137
  "stylelint-declaration-strict-value": "^1.9.2",
146
- "to-string-loader": "^1.2.0",
147
138
  "ts-jest": "29.1.2",
148
139
  "ts-node": "^10.9.2",
149
- "tslib": "^2.3.0",
140
+ "tslib": "^2.8.1",
150
141
  "typescript": "5.9.2",
151
- "typescript-plugin-css-modules": "^5.1.0",
152
142
  "vite": "^5.4.11",
153
143
  "vite-plugin-checker": "^0.6.4",
154
144
  "vite-plugin-dts": "4.5.4",
155
- "vite-plugin-eslint": "^1.8.1",
156
- "vite-plugin-static-copy": "^2.2.0",
157
- "vite-tsconfig-paths": "4.3.2"
145
+ "vite-plugin-static-copy": "^2.2.0"
158
146
  },
159
147
  "commitlint": {
160
148
  "extends": "@commitlint/config-conventional",
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),m=require("../../../../../external/classnames/index.cjs.js"),e=require("react"),ne=require("../../overlays/tooltip/tooltip.cjs.js"),de=require("../../overlays/tooltip/tooltip-content.cjs.js"),oe=require("../../overlays/tooltip/tooltip-trigger.cjs.js"),ue=require("../feedback-text/feedback-text.cjs.js"),ce=require("../form-label/form-label.cjs.js"),t=require("./slider.module.scss.cjs.js"),fe=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),F=e.forwardRef((h,M)=>{const{getCurrentBreakpointProps:V}=fe.useBreakpointProps(h.defaultServerBreakpoint),{id:E,name:P,label:x,hideLabel:R,required:_,min:l=0,max:d=100,step:D=1,value:c,defaultValue:$,onChange:o,disabled:s=!1,invalid:H=!1,minLabel:f,maxLabel:O,showCurrentValue:p=!1,valueFormatter:k,tooltip:U=!0,addonRight:j,helper:r,className:z,"aria-label":A,"aria-labelledby":G,"aria-valuetext":J}=V(h),K=e.useId(),b=E??`tedi-slider-${K}`,w=r?r.id??`${b}-helper`:void 0,[Q,W]=e.useState($??l),u=Math.min(d,Math.max(l,c??Q)),[X,L]=e.useState(!1),[Y,N]=e.useState(!1),[i,C]=e.useState(!1),S=!!U&&!s,Z=S&&(X||Y||i),ee=e.useCallback(()=>L(!0),[]),ae=e.useCallback(()=>L(!1),[]),te=e.useCallback(()=>N(!0),[]),re=e.useCallback(()=>N(!1),[]),T=e.useRef(null),n=e.useCallback(()=>{T.current=null,C(!1)},[]);e.useEffect(()=>{if(i)return window.addEventListener("pointerup",n),window.addEventListener("pointercancel",n),()=>{window.removeEventListener("pointerup",n),window.removeEventListener("pointercancel",n)}},[i,n]);const le=e.useCallback(g=>{s||(T.current=g.pointerId,C(!0))},[s]),se=e.useCallback(g=>{const B=Number(g.target.value);c===void 0&&W(B),o==null||o(B)},[o,c]),q=H||(r==null?void 0:r.type)==="error",I=d===l?0:(u-l)/(d-l)*100,y=k?k(u):u,v=p?y:O,ie=m.default(t.default["tedi-slider"],{[t.default["tedi-slider--disabled"]]:s,[t.default["tedi-slider--invalid"]]:q,[t.default["tedi-slider--dragging"]]:i&&!s},z);return a.jsxs("div",{"data-name":"slider",className:ie,children:[x&&a.jsx(ce.FormLabel,{id:b,label:x,required:_,hideLabel:R}),a.jsxs("div",{className:t.default["tedi-slider__container"],children:[a.jsxs("div",{className:t.default["tedi-slider__track-row"],children:[f!=null&&a.jsx("span",{className:t.default["tedi-slider__range-label"],"aria-hidden":"true",children:f}),a.jsxs("div",{className:t.default["tedi-slider__track"],style:{"--tedi-slider-progress":`${I}%`,"--tedi-slider-progress-ratio":`${I/100}`},children:[a.jsx("input",{ref:M,id:b,name:P,type:"range",min:l,max:d,step:D,value:u,disabled:s,required:_,"aria-invalid":q?"true":void 0,"aria-describedby":w,"aria-label":A,"aria-labelledby":G,"aria-valuetext":J,onChange:se,onMouseEnter:ee,onMouseLeave:ae,onPointerDown:le,onFocus:te,onBlur:re,className:m.default(t.default["tedi-slider__input"],{[t.default["tedi-slider__input--dragging"]]:i})}),S&&a.jsxs(ne.Tooltip,{open:Z,onToggle:()=>{},focusManager:{returnFocus:!1,initialFocus:-1},placement:"top",trackReferencePosition:!0,children:[a.jsx(oe.TooltipTrigger,{children:a.jsx("span",{className:t.default["tedi-slider__thumb-anchor"],"aria-hidden":"true",tabIndex:-1})}),a.jsx(de.TooltipContent,{children:y})]})]}),v!=null&&a.jsx("span",{className:t.default["tedi-slider__range-label"],"aria-hidden":p?void 0:"true","aria-live":p?"polite":void 0,children:v})]}),j&&a.jsx("div",{className:t.default["tedi-slider__addon"],children:j})]}),r&&a.jsx(ue.FeedbackText,{...r,id:w,className:m.default(t.default["tedi-slider__feedback"],r.className)})]})});F.displayName="Slider";exports.Slider=F;
@@ -0,0 +1,116 @@
1
+ import { default as React } from 'react';
2
+ import { BreakpointSupport } from '../../../helpers';
3
+ import { FeedbackTextProps } from '../feedback-text/feedback-text';
4
+ type SliderBreakpointProps = {
5
+ /**
6
+ * Text/element rendered to the left of the track (e.g. the minimum value).
7
+ */
8
+ minLabel?: React.ReactNode;
9
+ /**
10
+ * Text/element rendered to the right of the track (e.g. the maximum value).
11
+ * Ignored when `showCurrentValue` is `true`.
12
+ */
13
+ maxLabel?: React.ReactNode;
14
+ /**
15
+ * When `true`, renders the current value to the right of the track instead of `maxLabel`.
16
+ * @default false
17
+ */
18
+ showCurrentValue?: boolean;
19
+ /**
20
+ * Formats the current value, used by both the thumb tooltip and the `showCurrentValue` label.
21
+ * @default (value) => value
22
+ */
23
+ valueFormatter?: (value: number) => React.ReactNode;
24
+ /**
25
+ * Renders a tooltip above the thumb showing the current value. Shown only while the slider is
26
+ * hovered, focused, or being dragged. Value is formatted via `valueFormatter`.
27
+ * @default true
28
+ */
29
+ tooltip?: boolean;
30
+ /**
31
+ * Node rendered to the right of the slider, typically a NumberField used to edit the same value.
32
+ */
33
+ addonRight?: React.ReactNode;
34
+ /**
35
+ * Helper text rendered below the slider.
36
+ */
37
+ helper?: FeedbackTextProps;
38
+ /**
39
+ * Additional class name(s) applied to the root element.
40
+ */
41
+ className?: string;
42
+ };
43
+ export interface SliderProps extends BreakpointSupport<SliderBreakpointProps> {
44
+ /**
45
+ * Unique identifier for the underlying input element.
46
+ * Generated automatically if not provided.
47
+ */
48
+ id?: string;
49
+ /**
50
+ * Name attribute of the underlying input element.
51
+ */
52
+ name?: string;
53
+ /**
54
+ * Label text rendered above the slider.
55
+ */
56
+ label?: React.ReactNode;
57
+ /**
58
+ * Controls the visibility of the label. Pass `true` to hide it visually while keeping it
59
+ * available to assistive technology, or `'keep-space'` to reserve the vertical space.
60
+ */
61
+ hideLabel?: boolean | 'keep-space';
62
+ /**
63
+ * Marks the field as required.
64
+ */
65
+ required?: boolean;
66
+ /**
67
+ * Minimum allowed value.
68
+ * @default 0
69
+ */
70
+ min?: number;
71
+ /**
72
+ * Maximum allowed value.
73
+ * @default 100
74
+ */
75
+ max?: number;
76
+ /**
77
+ * Step size.
78
+ * @default 1
79
+ */
80
+ step?: number;
81
+ /**
82
+ * Controlled value. Use together with `onChange`.
83
+ */
84
+ value?: number;
85
+ /**
86
+ * Default value for uncontrolled usage.
87
+ * @default min
88
+ */
89
+ defaultValue?: number;
90
+ /**
91
+ * Callback fired when the value changes.
92
+ */
93
+ onChange?: (value: number) => void;
94
+ /**
95
+ * Disables the slider.
96
+ */
97
+ disabled?: boolean;
98
+ /**
99
+ * Marks the slider as invalid for validation purposes.
100
+ */
101
+ invalid?: boolean;
102
+ /**
103
+ * Accessible label used when no visible `label` is provided.
104
+ */
105
+ 'aria-label'?: string;
106
+ /**
107
+ * ID of an element that labels the slider, used when no visible `label` is provided.
108
+ */
109
+ 'aria-labelledby'?: string;
110
+ /**
111
+ * Human-readable text alternative of the current value.
112
+ */
113
+ 'aria-valuetext'?: string;
114
+ }
115
+ export declare const Slider: React.ForwardRefExoticComponent<SliderProps & React.RefAttributes<HTMLInputElement>>;
116
+ export default Slider;
@@ -0,0 +1,145 @@
1
+ import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
+ import _ from "../../../../../external/classnames/index.es.js";
3
+ import { forwardRef as oe, useId as de, useState as m, useCallback as i, useRef as ce, useEffect as ue } from "react";
4
+ import { Tooltip as me } from "../../overlays/tooltip/tooltip.es.js";
5
+ import { TooltipContent as pe } from "../../overlays/tooltip/tooltip-content.es.js";
6
+ import { TooltipTrigger as fe } from "../../overlays/tooltip/tooltip-trigger.es.js";
7
+ import { FeedbackText as ve } from "../feedback-text/feedback-text.es.js";
8
+ import { FormLabel as ge } from "../form-label/form-label.es.js";
9
+ import e from "./slider.module.scss.es.js";
10
+ import { useBreakpointProps as he } from "../../../helpers/hooks/use-breakpoint-props.es.js";
11
+ const be = oe((N, S) => {
12
+ const { getCurrentBreakpointProps: D } = he(N.defaultServerBreakpoint), {
13
+ id: R,
14
+ name: $,
15
+ label: w,
16
+ hideLabel: j,
17
+ required: L,
18
+ min: t = 0,
19
+ max: d = 100,
20
+ step: H = 1,
21
+ value: p,
22
+ defaultValue: q,
23
+ onChange: c,
24
+ disabled: n = !1,
25
+ invalid: O = !1,
26
+ minLabel: f,
27
+ maxLabel: U,
28
+ showCurrentValue: v = !1,
29
+ valueFormatter: x,
30
+ tooltip: z = !0,
31
+ addonRight: I,
32
+ helper: a,
33
+ className: A,
34
+ "aria-label": G,
35
+ "aria-labelledby": J,
36
+ "aria-valuetext": K
37
+ } = D(N), Q = de(), g = R ?? `tedi-slider-${Q}`, k = a ? a.id ?? `${g}-helper` : void 0, [W, X] = m(q ?? t), u = Math.min(d, Math.max(t, p ?? W)), [Y, y] = m(!1), [Z, F] = m(!1), [l, T] = m(!1), V = !!z && !n, ee = V && (Y || Z || l), re = i(() => y(!0), []), ae = i(() => y(!1), []), ie = i(() => F(!0), []), te = i(() => F(!1), []), B = ce(null), s = i(() => {
38
+ B.current = null, T(!1);
39
+ }, []);
40
+ ue(() => {
41
+ if (l)
42
+ return window.addEventListener("pointerup", s), window.addEventListener("pointercancel", s), () => {
43
+ window.removeEventListener("pointerup", s), window.removeEventListener("pointercancel", s);
44
+ };
45
+ }, [l, s]);
46
+ const ne = i(
47
+ (b) => {
48
+ n || (B.current = b.pointerId, T(!0));
49
+ },
50
+ [n]
51
+ ), le = i(
52
+ (b) => {
53
+ const P = Number(b.target.value);
54
+ p === void 0 && X(P), c == null || c(P);
55
+ },
56
+ [c, p]
57
+ ), E = O || (a == null ? void 0 : a.type) === "error", M = d === t ? 0 : (u - t) / (d - t) * 100, C = x ? x(u) : u, h = v ? C : U, se = _(
58
+ e["tedi-slider"],
59
+ {
60
+ [e["tedi-slider--disabled"]]: n,
61
+ [e["tedi-slider--invalid"]]: E,
62
+ [e["tedi-slider--dragging"]]: l && !n
63
+ },
64
+ A
65
+ );
66
+ return /* @__PURE__ */ o("div", { "data-name": "slider", className: se, children: [
67
+ w && /* @__PURE__ */ r(ge, { id: g, label: w, required: L, hideLabel: j }),
68
+ /* @__PURE__ */ o("div", { className: e["tedi-slider__container"], children: [
69
+ /* @__PURE__ */ o("div", { className: e["tedi-slider__track-row"], children: [
70
+ f != null && /* @__PURE__ */ r("span", { className: e["tedi-slider__range-label"], "aria-hidden": "true", children: f }),
71
+ /* @__PURE__ */ o(
72
+ "div",
73
+ {
74
+ className: e["tedi-slider__track"],
75
+ style: {
76
+ "--tedi-slider-progress": `${M}%`,
77
+ "--tedi-slider-progress-ratio": `${M / 100}`
78
+ },
79
+ children: [
80
+ /* @__PURE__ */ r(
81
+ "input",
82
+ {
83
+ ref: S,
84
+ id: g,
85
+ name: $,
86
+ type: "range",
87
+ min: t,
88
+ max: d,
89
+ step: H,
90
+ value: u,
91
+ disabled: n,
92
+ required: L,
93
+ "aria-invalid": E ? "true" : void 0,
94
+ "aria-describedby": k,
95
+ "aria-label": G,
96
+ "aria-labelledby": J,
97
+ "aria-valuetext": K,
98
+ onChange: le,
99
+ onMouseEnter: re,
100
+ onMouseLeave: ae,
101
+ onPointerDown: ne,
102
+ onFocus: ie,
103
+ onBlur: te,
104
+ className: _(e["tedi-slider__input"], {
105
+ [e["tedi-slider__input--dragging"]]: l
106
+ })
107
+ }
108
+ ),
109
+ V && /* @__PURE__ */ o(
110
+ me,
111
+ {
112
+ open: ee,
113
+ onToggle: () => {
114
+ },
115
+ focusManager: { returnFocus: !1, initialFocus: -1 },
116
+ placement: "top",
117
+ trackReferencePosition: !0,
118
+ children: [
119
+ /* @__PURE__ */ r(fe, { children: /* @__PURE__ */ r("span", { className: e["tedi-slider__thumb-anchor"], "aria-hidden": "true", tabIndex: -1 }) }),
120
+ /* @__PURE__ */ r(pe, { children: C })
121
+ ]
122
+ }
123
+ )
124
+ ]
125
+ }
126
+ ),
127
+ h != null && /* @__PURE__ */ r(
128
+ "span",
129
+ {
130
+ className: e["tedi-slider__range-label"],
131
+ "aria-hidden": v ? void 0 : "true",
132
+ "aria-live": v ? "polite" : void 0,
133
+ children: h
134
+ }
135
+ )
136
+ ] }),
137
+ I && /* @__PURE__ */ r("div", { className: e["tedi-slider__addon"], children: I })
138
+ ] }),
139
+ a && /* @__PURE__ */ r(ve, { ...a, id: k, className: _(e["tedi-slider__feedback"], a.className) })
140
+ ] });
141
+ });
142
+ be.displayName = "Slider";
143
+ export {
144
+ be as Slider
145
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-slider":"tedi-slider-90e24e7d","tedi-slider__container":"tedi-slider__container-525c4b64","tedi-slider__track-row":"tedi-slider__track-row-95e9c2d5","tedi-slider__range-label":"tedi-slider__range-label-a2a6a43b","tedi-slider__track":"tedi-slider__track-a7afc8d6","tedi-slider__thumb-anchor":"tedi-slider__thumb-anchor-7e282370","tedi-slider__input":"tedi-slider__input-b2d1c042","tedi-slider__input--dragging":"tedi-slider__input--dragging-6a2f5f85","tedi-slider__addon":"tedi-slider__addon-6b259d81","tedi-slider__feedback":"tedi-slider__feedback-dad1545e","tedi-slider--disabled":"tedi-slider--disabled-d1da914a","tedi-slider--dragging":"tedi-slider--dragging-c82f4f25","tedi-slider--invalid":"tedi-slider--invalid-e5adda94"};exports.default=e;
@@ -0,0 +1,18 @@
1
+ const d = {
2
+ "tedi-slider": "tedi-slider-90e24e7d",
3
+ "tedi-slider__container": "tedi-slider__container-525c4b64",
4
+ "tedi-slider__track-row": "tedi-slider__track-row-95e9c2d5",
5
+ "tedi-slider__range-label": "tedi-slider__range-label-a2a6a43b",
6
+ "tedi-slider__track": "tedi-slider__track-a7afc8d6",
7
+ "tedi-slider__thumb-anchor": "tedi-slider__thumb-anchor-7e282370",
8
+ "tedi-slider__input": "tedi-slider__input-b2d1c042",
9
+ "tedi-slider__input--dragging": "tedi-slider__input--dragging-6a2f5f85",
10
+ "tedi-slider__addon": "tedi-slider__addon-6b259d81",
11
+ "tedi-slider__feedback": "tedi-slider__feedback-dad1545e",
12
+ "tedi-slider--disabled": "tedi-slider--disabled-d1da914a",
13
+ "tedi-slider--dragging": "tedi-slider--dragging-c82f4f25",
14
+ "tedi-slider--invalid": "tedi-slider--invalid-e5adda94"
15
+ };
16
+ export {
17
+ d as default
18
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),p=require("../../../../../external/classnames/index.cjs.js"),n=require("../../base/icon/icon.cjs.js"),y=require("../../base/typography/heading/heading.cjs.js"),f=require("../../base/typography/text/text.cjs.js"),t=require("./empty-state.module.scss.cjs.js"),l=({type:c="separate",size:o="default",icon:s="spa",heading:a,children:d,actions:r,className:m})=>{const u=p.default(t.default["tedi-empty-state"],t.default[`tedi-empty-state--${c}`],t.default[`tedi-empty-state--${o}`],m),i=s===null?null:typeof s=="string"?e.jsx(n.Icon,{name:s,size:36,color:"brand"}):e.jsx(n.Icon,{size:36,color:"brand",...s});return e.jsxs("div",{"data-name":"tedi-empty-state",className:u,children:[e.jsxs("div",{className:t.default["tedi-empty-state__text"],children:[i&&e.jsx("div",{className:t.default["tedi-empty-state__icon"],children:i}),(a||d)&&e.jsxs("div",{className:t.default["tedi-empty-state__content"],children:[a&&e.jsx(y.Heading,{className:t.default["tedi-empty-state__heading"],element:"h3",modifiers:"h3",color:"brand",children:a}),d&&e.jsx(f.Text,{className:t.default["tedi-empty-state__description"],color:"secondary",modifiers:"center",children:d})]})]}),r&&e.jsx("div",{className:t.default["tedi-empty-state__actions"],children:r})]})};l.displayName="EmptyState";exports.EmptyState=l;
@@ -0,0 +1,51 @@
1
+ import { default as React } from 'react';
2
+ import { IconWithoutBackgroundProps } from '../../base/icon/icon';
3
+ export type EmptyStateType = 'separate' | 'attached' | 'inside';
4
+ export type EmptyStateSize = 'default' | 'small';
5
+ export interface EmptyStateProps {
6
+ /**
7
+ * Container variant — matches the Figma "Types" section.
8
+ * - `'separate'` (default) — full border + radius, stands on its own.
9
+ * - `'attached'` — top border omitted so the block sits flush beneath a
10
+ * preceding card or table (same width + same bottom-radius).
11
+ * - `'inside'` — no border, no radius; intended to be placed inside another
12
+ * container such as a `<Card>` or `<Table>`.
13
+ * @default separate
14
+ */
15
+ type?: EmptyStateType;
16
+ /**
17
+ * Padding scale. `default` = 24px, `small` = 16px.
18
+ * @default default
19
+ */
20
+ size?: EmptyStateSize;
21
+ /**
22
+ * Icon rendered above the text block. Pass a Material icon name, a full
23
+ * `IconWithoutBackgroundProps` object to configure the underlying `Icon`,
24
+ * or `null` to hide the icon.
25
+ * @default spa
26
+ */
27
+ icon?: string | IconWithoutBackgroundProps | null;
28
+ /**
29
+ * Optional heading rendered above the description — appears as an H3 in
30
+ * brand-primary text color.
31
+ */
32
+ heading?: React.ReactNode;
33
+ /**
34
+ * Main body text describing why there is nothing to show.
35
+ */
36
+ children?: React.ReactNode;
37
+ /**
38
+ * Call-to-action slot. Typically a `<Button>` (or two) or a `<Link>`.
39
+ * Rendered below the text block.
40
+ */
41
+ actions?: React.ReactNode;
42
+ /**
43
+ * Additional class name on the root element.
44
+ */
45
+ className?: string;
46
+ }
47
+ export declare const EmptyState: {
48
+ ({ type, size, icon, heading, children, actions, className, }: EmptyStateProps): JSX.Element;
49
+ displayName: string;
50
+ };
51
+ export default EmptyState;
@@ -0,0 +1,36 @@
1
+ import { jsx as t, jsxs as m } from "react/jsx-runtime";
2
+ import y from "../../../../../external/classnames/index.es.js";
3
+ import { Icon as d } from "../../base/icon/icon.es.js";
4
+ import { Heading as f } from "../../base/typography/heading/heading.es.js";
5
+ import { Text as _ } from "../../base/typography/text/text.es.js";
6
+ import e from "./empty-state.module.scss.es.js";
7
+ const N = ({
8
+ type: n = "separate",
9
+ size: l = "default",
10
+ icon: s = "spa",
11
+ heading: a,
12
+ children: r,
13
+ actions: i,
14
+ className: p
15
+ }) => {
16
+ const c = y(
17
+ e["tedi-empty-state"],
18
+ e[`tedi-empty-state--${n}`],
19
+ e[`tedi-empty-state--${l}`],
20
+ p
21
+ ), o = s === null ? null : typeof s == "string" ? /* @__PURE__ */ t(d, { name: s, size: 36, color: "brand" }) : /* @__PURE__ */ t(d, { size: 36, color: "brand", ...s });
22
+ return /* @__PURE__ */ m("div", { "data-name": "tedi-empty-state", className: c, children: [
23
+ /* @__PURE__ */ m("div", { className: e["tedi-empty-state__text"], children: [
24
+ o && /* @__PURE__ */ t("div", { className: e["tedi-empty-state__icon"], children: o }),
25
+ (a || r) && /* @__PURE__ */ m("div", { className: e["tedi-empty-state__content"], children: [
26
+ a && /* @__PURE__ */ t(f, { className: e["tedi-empty-state__heading"], element: "h3", modifiers: "h3", color: "brand", children: a }),
27
+ r && /* @__PURE__ */ t(_, { className: e["tedi-empty-state__description"], color: "secondary", modifiers: "center", children: r })
28
+ ] })
29
+ ] }),
30
+ i && /* @__PURE__ */ t("div", { className: e["tedi-empty-state__actions"], children: i })
31
+ ] });
32
+ };
33
+ N.displayName = "EmptyState";
34
+ export {
35
+ N as EmptyState
36
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t={"tedi-empty-state":"tedi-empty-state-fa18a0c7","tedi-empty-state--small":"tedi-empty-state--small-cd55192d","tedi-empty-state--attached":"tedi-empty-state--attached-34f9494f","tedi-empty-state--inside":"tedi-empty-state--inside-59a35f4a","tedi-empty-state__text":"tedi-empty-state__text-3356405a","tedi-empty-state__icon":"tedi-empty-state__icon-b7c0b65c","tedi-empty-state__content":"tedi-empty-state__content-8f9e9b61","tedi-empty-state__heading":"tedi-empty-state__heading-a8adf6aa","tedi-empty-state__description":"tedi-empty-state__description-4c540947","tedi-empty-state__actions":"tedi-empty-state__actions-bff9b270"};exports.default=t;
@@ -0,0 +1,15 @@
1
+ const t = {
2
+ "tedi-empty-state": "tedi-empty-state-fa18a0c7",
3
+ "tedi-empty-state--small": "tedi-empty-state--small-cd55192d",
4
+ "tedi-empty-state--attached": "tedi-empty-state--attached-34f9494f",
5
+ "tedi-empty-state--inside": "tedi-empty-state--inside-59a35f4a",
6
+ "tedi-empty-state__text": "tedi-empty-state__text-3356405a",
7
+ "tedi-empty-state__icon": "tedi-empty-state__icon-b7c0b65c",
8
+ "tedi-empty-state__content": "tedi-empty-state__content-8f9e9b61",
9
+ "tedi-empty-state__heading": "tedi-empty-state__heading-a8adf6aa",
10
+ "tedi-empty-state__description": "tedi-empty-state__description-4c540947",
11
+ "tedi-empty-state__actions": "tedi-empty-state__actions-bff9b270"
12
+ };
13
+ export {
14
+ t as default
15
+ };
@@ -0,0 +1 @@
1
+ export * from './empty-state';
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const V=require("react/jsx-runtime"),t=require("../../../../../external/@floating-ui/react/dist/floating-ui.react.cjs.js"),n=require("react"),z=require("./overlay-content.cjs.js"),B=require("./overlay-trigger.cjs.js"),J=require("../../../helpers/hooks/use-is-touch-device.cjs.js"),K=require("../../../helpers/hooks/use-is-mounted.cjs.js"),N=require("../../../../../external/@floating-ui/dom/dist/floating-ui.dom.cjs.js"),a=require("../../../../../external/@floating-ui/react-dom/dist/floating-ui.react-dom.cjs.js"),Q=3,j=n.createContext({open:!1,onOpenChange:()=>{},isMounted:!1,openWith:"hover",reference:()=>{},floating:()=>{},focusManager:{},arrowRef:{current:null},x:0,y:0,strategy:"absolute",getReferenceProps:()=>({}),getFloatingProps:()=>({}),arrow:{width:0,height:0,x:0,y:0,centerOffset:0},placement:"top",context:{},scrollLock:void 0,contentId:""}),i=S=>{const E=J.useIsTouchDevice(),{children:L,placement:W="top",openWith:s=E?"click":"hover",defaultOpen:A=!1,open:c,onToggle:r,role:u="tooltip",arrowDimensions:e,offset:G=Q+((e==null?void 0:e.height)??0),focusManager:d,dismissible:v,scrollLock:y}=S,{order:O=["reference","content"],initialFocus:M,modal:f,...x}=d??{},C=M!==void 0?M:f?0:void 0,[m,F]=n.useState(A),g=n.useRef(null),R=K.useIsMounted(),p=n.useMemo(()=>r&&typeof c<"u"?c:m,[r,c,m]),h=n.useCallback(U=>{typeof c>"u"&&F(U),r==null||r(U)},[c,F,r]),{x:q,y:I,refs:l,strategy:P,context:o,middlewareData:b,placement:w}=t.useFloating({placement:W,open:p,onOpenChange:h,middleware:[a.offset(G),a.flip(),a.shift({padding:8}),a.arrow({element:g,padding:4})],whileElementsMounted:N.autoUpdate}),{getReferenceProps:k,getFloatingProps:T}=t.useInteractions([t.useHover(o,{enabled:s==="hover",handleClose:t.safePolygon()}),t.useClick(o,{toggle:v}),t.useFocus(o,{enabled:s==="hover"}),t.useRole(o,{role:u}),t.useDismiss(o,{enabled:v,outsidePressEvent:s==="click"?"mousedown":"pointerdown"})]),_=n.useId(),H=n.useMemo(()=>({open:p,onOpenChange:h,isMounted:R,openWith:s,focusManager:d?{order:O,modal:f,initialFocus:C,...x}:void 0,reference:l.setReference,floating:l.setFloating,arrowRef:g,x:q,y:I,strategy:P,getReferenceProps:k,getFloatingProps:T,arrow:{width:e==null?void 0:e.width,height:e==null?void 0:e.height,...b.arrow},context:o,placement:w,scrollLock:y,role:u,contentId:_}),[p,h,R,s,d,l.setReference,l.setFloating,g,q,I,P,k,T,e==null?void 0:e.width,e==null?void 0:e.height,b.arrow,o,w,y,u,_,f,O,C,x]);return V.jsx(j.Provider,{value:H,children:L})};i.Trigger=B.OverlayTrigger;i.Content=z.OverlayContent;exports.Overlay=i;exports.OverlayContext=j;exports.default=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const K=require("react/jsx-runtime"),t=require("../../../../../external/@floating-ui/react/dist/floating-ui.react.cjs.js"),n=require("react"),N=require("./overlay-content.cjs.js"),Q=require("./overlay-trigger.cjs.js"),X=require("../../../helpers/hooks/use-is-touch-device.cjs.js"),Y=require("../../../helpers/hooks/use-is-mounted.cjs.js"),j=require("../../../../../external/@floating-ui/dom/dist/floating-ui.dom.cjs.js"),i=require("../../../../../external/@floating-ui/react-dom/dist/floating-ui.react-dom.cjs.js"),Z=3,S=n.createContext({open:!1,onOpenChange:()=>{},isMounted:!1,openWith:"hover",reference:()=>{},floating:()=>{},focusManager:{},arrowRef:{current:null},x:0,y:0,strategy:"absolute",getReferenceProps:()=>({}),getFloatingProps:()=>({}),arrow:{width:0,height:0,x:0,y:0,centerOffset:0},placement:"top",context:{},scrollLock:void 0,contentId:""}),u=E=>{const L=X.useIsTouchDevice(),{children:W,placement:A="top",openWith:s=L?"click":"hover",defaultOpen:G=!1,open:c,onToggle:r,role:d="tooltip",arrowDimensions:e,offset:H=Z+((e==null?void 0:e.height)??0),focusManager:f,dismissible:y,scrollLock:O,trackReferencePosition:V=!1}=E,{order:M=["reference","content"],initialFocus:m,modal:g,...x}=f??{},C=m!==void 0?m:g?0:void 0,[F,R]=n.useState(G),p=n.useRef(null),P=Y.useIsMounted(),h=n.useMemo(()=>r&&typeof c<"u"?c:F,[r,c,F]),v=n.useCallback(l=>{typeof c>"u"&&R(l),r==null||r(l)},[c,R,r]),{x:q,y:I,refs:a,strategy:b,context:o,middlewareData:k,placement:w}=t.useFloating({placement:A,open:h,onOpenChange:v,middleware:[i.offset(H),i.flip(),i.shift({padding:8}),i.arrow({element:p,padding:4})],whileElementsMounted:V?(l,B,J)=>j.autoUpdate(l,B,J,{animationFrame:!0}):j.autoUpdate}),{getReferenceProps:T,getFloatingProps:U}=t.useInteractions([t.useHover(o,{enabled:s==="hover",handleClose:t.safePolygon()}),t.useClick(o,{toggle:y}),t.useFocus(o,{enabled:s==="hover"}),t.useRole(o,{role:d}),t.useDismiss(o,{enabled:y,outsidePressEvent:s==="click"?"mousedown":"pointerdown"})]),_=n.useId(),z=n.useMemo(()=>({open:h,onOpenChange:v,isMounted:P,openWith:s,focusManager:f?{order:M,modal:g,initialFocus:C,...x}:void 0,reference:a.setReference,floating:a.setFloating,arrowRef:p,x:q,y:I,strategy:b,getReferenceProps:T,getFloatingProps:U,arrow:{width:e==null?void 0:e.width,height:e==null?void 0:e.height,...k.arrow},context:o,placement:w,scrollLock:O,role:d,contentId:_}),[h,v,P,s,f,a.setReference,a.setFloating,p,q,I,b,T,U,e==null?void 0:e.width,e==null?void 0:e.height,k.arrow,o,w,O,d,_,g,M,C,x]);return K.jsx(S.Provider,{value:z,children:W})};u.Trigger=Q.OverlayTrigger;u.Content=N.OverlayContent;exports.Overlay=u;exports.OverlayContext=S;exports.default=u;
@@ -63,6 +63,18 @@ export interface OverlayProps {
63
63
  * @default GAP + arrow height
64
64
  */
65
65
  offset?: OffsetOptions;
66
+ /**
67
+ * Re-measure the floating element every animation frame while mounted.
68
+ *
69
+ * Enable this when the trigger/reference element's position can change without a
70
+ * DOM-observable event (e.g. position driven by an inherited CSS custom property on an
71
+ * ancestor). The default `autoUpdate` only reacts to scroll, resize, and element-size
72
+ * changes, so position-only movement goes unnoticed and the overlay lags behind.
73
+ *
74
+ * Opt-in because animation-frame tracking is more expensive than the default.
75
+ * @default false
76
+ */
77
+ trackReferencePosition?: boolean;
66
78
  }
67
79
  export interface OverlayContextType {
68
80
  open: boolean;