@tedi-design-system/react 19.1.0-rc.5 → 19.1.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bundle-stats.html +1 -1
  2. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.cjs.js +1 -1
  3. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.development.es.js +1 -1
  4. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
  5. package/external/hoist-non-react-statics/external/react-is/cjs/react-is.production.min.es.js +1 -1
  6. package/external/hoist-non-react-statics/external/react-is/index.cjs.js +1 -1
  7. package/external/hoist-non-react-statics/external/react-is/index.es.js +1 -1
  8. package/external/prop-types/external/react-is/cjs/react-is.development.cjs.js +1 -1
  9. package/external/prop-types/external/react-is/cjs/react-is.development.es.js +1 -1
  10. package/external/prop-types/external/react-is/cjs/react-is.production.min.cjs.js +1 -1
  11. package/external/prop-types/external/react-is/cjs/react-is.production.min.es.js +1 -1
  12. package/external/prop-types/external/react-is/index.cjs.js +1 -1
  13. package/external/prop-types/external/react-is/index.es.js +1 -1
  14. package/index.css +1 -1
  15. package/package.json +2 -2
  16. package/src/tedi/components/content/card/card.module.scss.cjs.js +1 -1
  17. package/src/tedi/components/content/card/card.module.scss.es.js +3 -2
  18. package/src/tedi/components/misc/affix/affix.cjs.js +1 -1
  19. package/src/tedi/components/misc/affix/affix.es.js +20 -8
  20. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.cjs.js +1 -1
  21. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.d.ts +9 -1
  22. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.es.js +78 -39
  23. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-item/table-of-contents-item.d.ts +6 -0
  24. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.cjs.js +1 -1
  25. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.es.js +23 -28
  26. package/src/tedi/components/navigation/table-of-contents/table-of-contents.cjs.js +1 -1
  27. package/src/tedi/components/navigation/table-of-contents/table-of-contents.d.ts +32 -21
  28. package/src/tedi/components/navigation/table-of-contents/table-of-contents.es.js +58 -55
  29. package/src/tedi/components/navigation/table-of-contents/table-of-contents.module.scss.cjs.js +1 -1
  30. package/src/tedi/components/navigation/table-of-contents/table-of-contents.module.scss.es.js +4 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tedi-design-system/react",
3
- "version": "19.1.0-rc.5",
3
+ "version": "19.1.0-rc.7",
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,
@@ -47,7 +47,7 @@
47
47
  "@mui/material": "^5.15.13",
48
48
  "@mui/x-date-pickers": "^5.0.20",
49
49
  "@tanstack/react-table": "^8.13.2",
50
- "@tedi-design-system/core": "^6.8.1",
50
+ "@tedi-design-system/core": "^6.9.0",
51
51
  "classnames": "^2.5.1",
52
52
  "draft-js": "^0.11.7",
53
53
  "draftjs-md-converter": "^1.5.2",
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r={"tedi-card":"tedi-card-46f8f767","tedi-card--background--accent":"tedi-card--background--accent-930871c7","tedi-card--border--accent":"tedi-card--border--accent-90f35e66","tedi-card--background--brand-primary":"tedi-card--background--brand-primary-01c89a1e","tedi-card--border--brand-primary":"tedi-card--border--brand-primary-987cfd48","tedi-card--background--brand-secondary":"tedi-card--background--brand-secondary-52a2d6ee","tedi-card--border--brand-secondary":"tedi-card--border--brand-secondary-155df9fc","tedi-card--background--brand-tertiary":"tedi-card--background--brand-tertiary-6e531e52","tedi-card--border--brand-tertiary":"tedi-card--border--brand-tertiary-90e59b2f","tedi-card--background--brand-quaternary":"tedi-card--background--brand-quaternary-302574ef","tedi-card--border--brand-quaternary":"tedi-card--border--brand-quaternary-8fecab3d","tedi-card--background--primary":"tedi-card--background--primary-97377456","tedi-card--border--primary":"tedi-card--border--primary-6fb38184","tedi-card--background--secondary":"tedi-card--background--secondary-03bafe87","tedi-card--border--secondary":"tedi-card--border--secondary-a2efb368","tedi-card--background--tertiary":"tedi-card--background--tertiary-9aaed047","tedi-card--border--tertiary":"tedi-card--border--tertiary-36ed56dc","tedi-card--background--info-primary":"tedi-card--background--info-primary-a447d86c","tedi-card--border--info-primary":"tedi-card--border--info-primary-3a459b1a","tedi-card--background--info-secondary":"tedi-card--background--info-secondary-ccb381f3","tedi-card--border--info-secondary":"tedi-card--border--info-secondary-b177e078","tedi-card--background--neutral-primary":"tedi-card--background--neutral-primary-e8462085","tedi-card--border--neutral-primary":"tedi-card--border--neutral-primary-0e494a3a","tedi-card--background--neutral-secondary":"tedi-card--background--neutral-secondary-78f69323","tedi-card--border--neutral-secondary":"tedi-card--border--neutral-secondary-2eacfcf2","tedi-card--background--success-primary":"tedi-card--background--success-primary-74cc128e","tedi-card--border--success-primary":"tedi-card--border--success-primary-ad13f6a9","tedi-card--background--success-secondary":"tedi-card--background--success-secondary-2e51dbc2","tedi-card--border--success-secondary":"tedi-card--border--success-secondary-d2d310bf","tedi-card--background--danger-primary":"tedi-card--background--danger-primary-24f9b394","tedi-card--border--danger-primary":"tedi-card--border--danger-primary-ca67a077","tedi-card--background--danger-secondary":"tedi-card--background--danger-secondary-d7d418a7","tedi-card--border--danger-secondary":"tedi-card--border--danger-secondary-58c75b3c","tedi-card--background--warning-primary":"tedi-card--background--warning-primary-0c9bdb9e","tedi-card--border--warning-primary":"tedi-card--border--warning-primary-67735d46","tedi-card--background--warning-secondary":"tedi-card--background--warning-secondary-ade88bae","tedi-card--border--warning-secondary":"tedi-card--border--warning-secondary-04a1f223","tedi-card--border-left":"tedi-card--border-left-55222a12","tedi-card--border-top":"tedi-card--border-top-4a483c06","tedi-card--borderless":"tedi-card--borderless-66eb216d","tedi-card--no-radius-tl":"tedi-card--no-radius-tl-fc11f3e6","tedi-card__header":"tedi-card__header-e3ceedf1","tedi-card__content":"tedi-card__content-79613a61","tedi-card--no-radius-tr":"tedi-card--no-radius-tr-89903519","tedi-card--no-radius-br":"tedi-card--no-radius-br-06b8b7e4","tedi-card--no-radius-bl":"tedi-card--no-radius-bl-b5a6dd25","tedi-card__content--separator":"tedi-card__content--separator-2fb649b6"};exports.default=r;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r={"tedi-card":"tedi-card-46f8f767","tedi-card__header":"tedi-card__header-e3ceedf1","tedi-card__content":"tedi-card__content-79613a61","tedi-card__notification-content":"tedi-card__notification-content-b8dbce7e","tedi-card--background--accent":"tedi-card--background--accent-930871c7","tedi-card--border--accent":"tedi-card--border--accent-90f35e66","tedi-card--background--brand-primary":"tedi-card--background--brand-primary-01c89a1e","tedi-card--border--brand-primary":"tedi-card--border--brand-primary-987cfd48","tedi-card--background--brand-secondary":"tedi-card--background--brand-secondary-52a2d6ee","tedi-card--border--brand-secondary":"tedi-card--border--brand-secondary-155df9fc","tedi-card--background--brand-tertiary":"tedi-card--background--brand-tertiary-6e531e52","tedi-card--border--brand-tertiary":"tedi-card--border--brand-tertiary-90e59b2f","tedi-card--background--brand-quaternary":"tedi-card--background--brand-quaternary-302574ef","tedi-card--border--brand-quaternary":"tedi-card--border--brand-quaternary-8fecab3d","tedi-card--background--primary":"tedi-card--background--primary-97377456","tedi-card--border--primary":"tedi-card--border--primary-6fb38184","tedi-card--background--secondary":"tedi-card--background--secondary-03bafe87","tedi-card--border--secondary":"tedi-card--border--secondary-a2efb368","tedi-card--background--tertiary":"tedi-card--background--tertiary-9aaed047","tedi-card--border--tertiary":"tedi-card--border--tertiary-36ed56dc","tedi-card--background--info-primary":"tedi-card--background--info-primary-a447d86c","tedi-card--border--info-primary":"tedi-card--border--info-primary-3a459b1a","tedi-card--background--info-secondary":"tedi-card--background--info-secondary-ccb381f3","tedi-card--border--info-secondary":"tedi-card--border--info-secondary-b177e078","tedi-card--background--neutral-primary":"tedi-card--background--neutral-primary-e8462085","tedi-card--border--neutral-primary":"tedi-card--border--neutral-primary-0e494a3a","tedi-card--background--neutral-secondary":"tedi-card--background--neutral-secondary-78f69323","tedi-card--border--neutral-secondary":"tedi-card--border--neutral-secondary-2eacfcf2","tedi-card--background--success-primary":"tedi-card--background--success-primary-74cc128e","tedi-card--border--success-primary":"tedi-card--border--success-primary-ad13f6a9","tedi-card--background--success-secondary":"tedi-card--background--success-secondary-2e51dbc2","tedi-card--border--success-secondary":"tedi-card--border--success-secondary-d2d310bf","tedi-card--background--danger-primary":"tedi-card--background--danger-primary-24f9b394","tedi-card--border--danger-primary":"tedi-card--border--danger-primary-ca67a077","tedi-card--background--danger-secondary":"tedi-card--background--danger-secondary-d7d418a7","tedi-card--border--danger-secondary":"tedi-card--border--danger-secondary-58c75b3c","tedi-card--background--warning-primary":"tedi-card--background--warning-primary-0c9bdb9e","tedi-card--border--warning-primary":"tedi-card--border--warning-primary-67735d46","tedi-card--background--warning-secondary":"tedi-card--background--warning-secondary-ade88bae","tedi-card--border--warning-secondary":"tedi-card--border--warning-secondary-04a1f223","tedi-card--border-left":"tedi-card--border-left-55222a12","tedi-card--border-top":"tedi-card--border-top-4a483c06","tedi-card--borderless":"tedi-card--borderless-66eb216d","tedi-card--no-radius-tl":"tedi-card--no-radius-tl-fc11f3e6","tedi-card--no-radius-tr":"tedi-card--no-radius-tr-89903519","tedi-card--no-radius-br":"tedi-card--no-radius-br-06b8b7e4","tedi-card--no-radius-bl":"tedi-card--no-radius-bl-b5a6dd25","tedi-card__content--separator":"tedi-card__content--separator-2fb649b6"};exports.default=r;
@@ -1,5 +1,8 @@
1
1
  const r = {
2
2
  "tedi-card": "tedi-card-46f8f767",
3
+ "tedi-card__header": "tedi-card__header-e3ceedf1",
4
+ "tedi-card__content": "tedi-card__content-79613a61",
5
+ "tedi-card__notification-content": "tedi-card__notification-content-b8dbce7e",
3
6
  "tedi-card--background--accent": "tedi-card--background--accent-930871c7",
4
7
  "tedi-card--border--accent": "tedi-card--border--accent-90f35e66",
5
8
  "tedi-card--background--brand-primary": "tedi-card--background--brand-primary-01c89a1e",
@@ -40,8 +43,6 @@ const r = {
40
43
  "tedi-card--border-top": "tedi-card--border-top-4a483c06",
41
44
  "tedi-card--borderless": "tedi-card--borderless-66eb216d",
42
45
  "tedi-card--no-radius-tl": "tedi-card--no-radius-tl-fc11f3e6",
43
- "tedi-card__header": "tedi-card__header-e3ceedf1",
44
- "tedi-card__content": "tedi-card__content-79613a61",
45
46
  "tedi-card--no-radius-tr": "tedi-card--no-radius-tr-89903519",
46
47
  "tedi-card--no-radius-br": "tedi-card--no-radius-br-06b8b7e4",
47
48
  "tedi-card--no-radius-bl": "tedi-card--no-radius-bl-b5a6dd25",
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),h=require("../../../../../external/classnames/index.cjs.js"),q=require("react"),b=require("../../../../../external/react-sticky-box/dist/index.cjs.js"),e=require("./affix.module.scss.cjs.js"),g=require("../../../../community/components/layout/layout-context.cjs.js"),$=require("../../../helpers/hooks/use-element-size.cjs.js"),j=c=>{const{children:n,relative:l=["header"],className:x,position:f="sticky",top:t=1.5,bottom:i,right:a,left:d}=c,{headerBottomElement:p}=q.useContext(g.LayoutContext),o=$.useElementSize(p),r=h.default(e.default["tedi-affix"],x,e.default[`tedi-affix--${f}`],{[e.default[`tedi-affix--top-${t}`.replace(".","-")]]:typeof t<"u"&&f==="fixed",[e.default[`tedi-affix--bottom-${i}`.replace(".","-")]]:typeof i<"u",[e.default[`tedi-affix--left-${d}`.replace(".","-")]]:typeof d<"u",[e.default[`tedi-affix--right-${a}`.replace(".","-")]]:typeof a<"u"});if(f==="fixed")return u.jsx("div",{className:r,children:n});const s=(typeof t=="number"?t:0)*16,m=l.includes("header")?s+((o==null?void 0:o.height)||0):s,y=(typeof i=="number"?i:0)*16;return u.jsx(b.default,{offsetTop:m,offsetBottom:y,className:r,children:n})};exports.Affix=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),$=require("../../../../../external/classnames/index.cjs.js"),b=require("react"),h=require("../../../../../external/react-sticky-box/dist/index.cjs.js"),e=require("./affix.module.scss.cjs.js"),q=require("../../../../community/components/layout/layout-context.cjs.js"),g=require("../../../helpers/hooks/use-element-size.cjs.js"),j=x=>{const{children:n,relative:p=["header"],className:m,position:i="sticky",top:t=1.5,bottom:f,right:s,left:a}=x,{headerBottomElement:y}=b.useContext(q.LayoutContext),o=g.useElementSize(y),d=$.default(e.default["tedi-affix"],m,e.default[`tedi-affix--${i}`],{[e.default[`tedi-affix--top-${t}`.replace(".","-")]]:typeof t<"u"&&i==="fixed",[e.default[`tedi-affix--bottom-${f}`.replace(".","-")]]:typeof f<"u",[e.default[`tedi-affix--left-${a}`.replace(".","-")]]:typeof a<"u",[e.default[`tedi-affix--right-${s}`.replace(".","-")]]:typeof s<"u"});if(i==="fixed")return l.jsx("div",{className:d,children:n});const r=(typeof t=="number"?t:0)*16,u=p.includes("header")?r+((o==null?void 0:o.height)||0):r,c=(typeof f=="number"?f:0)*16;return l.jsx(h.default,{offsetTop:u,offsetBottom:c,className:d,style:{"--tedi-affix-offset-top":`${u}px`,"--tedi-affix-offset-bottom":`${c}px`},children:n})};exports.Affix=j;
@@ -1,21 +1,33 @@
1
- import { jsx as p } from "react/jsx-runtime";
1
+ import { jsx as c } from "react/jsx-runtime";
2
2
  import h from "../../../../../external/classnames/index.es.js";
3
3
  import { useContext as $ } from "react";
4
4
  import b from "../../../../../external/react-sticky-box/dist/index.es.js";
5
5
  import e from "./affix.module.scss.es.js";
6
6
  import { LayoutContext as g } from "../../../../community/components/layout/layout-context.es.js";
7
7
  import { useElementSize as N } from "../../../helpers/hooks/use-element-size.es.js";
8
- const L = (d) => {
9
- const { children: r, relative: c = ["header"], className: l, position: f = "sticky", top: t = 1.5, bottom: o, right: n, left: s } = d, { headerBottomElement: u } = $(g), i = N(u), m = h(e["tedi-affix"], l, e[`tedi-affix--${f}`], {
8
+ const L = (l) => {
9
+ const { children: r, relative: x = ["header"], className: u, position: f = "sticky", top: t = 1.5, bottom: o, right: s, left: n } = l, { headerBottomElement: y } = $(g), i = N(y), p = h(e["tedi-affix"], u, e[`tedi-affix--${f}`], {
10
10
  [e[`tedi-affix--top-${t}`.replace(".", "-")]]: typeof t < "u" && f === "fixed",
11
11
  [e[`tedi-affix--bottom-${o}`.replace(".", "-")]]: typeof o < "u",
12
- [e[`tedi-affix--left-${s}`.replace(".", "-")]]: typeof s < "u",
13
- [e[`tedi-affix--right-${n}`.replace(".", "-")]]: typeof n < "u"
12
+ [e[`tedi-affix--left-${n}`.replace(".", "-")]]: typeof n < "u",
13
+ [e[`tedi-affix--right-${s}`.replace(".", "-")]]: typeof s < "u"
14
14
  });
15
15
  if (f === "fixed")
16
- return /* @__PURE__ */ p("div", { className: m, children: r });
17
- const a = (typeof t == "number" ? t : 0) * 16, x = c.includes("header") ? a + ((i == null ? void 0 : i.height) || 0) : a, y = (typeof o == "number" ? o : 0) * 16;
18
- return /* @__PURE__ */ p(b, { offsetTop: x, offsetBottom: y, className: m, children: r });
16
+ return /* @__PURE__ */ c("div", { className: p, children: r });
17
+ const a = (typeof t == "number" ? t : 0) * 16, m = x.includes("header") ? a + ((i == null ? void 0 : i.height) || 0) : a, d = (typeof o == "number" ? o : 0) * 16;
18
+ return /* @__PURE__ */ c(
19
+ b,
20
+ {
21
+ offsetTop: m,
22
+ offsetBottom: d,
23
+ className: p,
24
+ style: {
25
+ "--tedi-affix-offset-top": `${m}px`,
26
+ "--tedi-affix-offset-bottom": `${d}px`
27
+ },
28
+ children: r
29
+ }
30
+ );
19
31
  };
20
32
  export {
21
33
  L as Affix
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),N=require("../../../../../../../external/classnames/index.cjs.js"),s=require("react"),x=require("../../../../base/typography/text/text.cjs.js"),C=require("../../../../buttons/collapse-button/collapse-button.cjs.js"),E=require("../../../../overlays/sheet/sheet.cjs.js"),c=require("../../table-of-contents.cjs.js"),t=require("../../table-of-contents.module.scss.cjs.js"),S=require("../table-of-contents-list/table-of-contents-list.cjs.js"),y=require("../../../../../providers/label-provider/use-labels.cjs.js"),p=g=>{const{children:d,heading:u,ariaLabel:_,activeId:l,numbered:b=!1,sticky:j=!0,className:L}=g,{getLabel:f}=y.useLabels(),[n,a]=s.useState(!1),[o,O]=s.useState(null);s.useEffect(()=>{if(!n||!o)return;const v=q=>{q.target.closest("a, button")&&a(!1)};return o.addEventListener("click",v),()=>o.removeEventListener("click",v)},[n,o]);const i=(u===void 0?f("table-of-contents.title"):u)??f("table-of-contents.title"),h=_||i,r=s.useMemo(()=>c.childrenToNodes(d),[d]),m=s.useMemo(()=>c.buildActiveTrail(r,l),[r,l]),T=s.useMemo(()=>({activeId:l,numbered:b,ariaLabel:h,activeTrail:m}),[l,b,h,m]);return e.jsxs(c.TableOfContentsContext.Provider,{value:T,children:[e.jsxs("div",{className:N.default(t.default["tedi-table-of-contents__bar"],{[t.default["tedi-table-of-contents__bar--static"]]:!j},L),children:[e.jsx(x.Text,{modifiers:"bold",className:t.default["tedi-table-of-contents__bar-title"],children:i}),e.jsx(C.CollapseButton,{open:n,onOpenChange:a,underline:!1,"aria-haspopup":"dialog"})]}),e.jsx(E.Sheet,{open:n,onToggle:a,ariaLabel:i,className:t.default["tedi-table-of-contents__sheet"],header:e.jsxs("div",{className:t.default["tedi-table-of-contents__sheet-header"],children:[e.jsx(x.Text,{modifiers:"bold",className:t.default["tedi-table-of-contents__bar-title"],children:i}),e.jsx(C.CollapseButton,{open:n,onOpenChange:a,underline:!1})]}),children:e.jsx("div",{ref:O,className:t.default["tedi-table-of-contents"],children:e.jsx(S.TableOfContentsList,{nodes:r,heading:null})})})]})};p.displayName="TableOfContentsCollapsible";exports.TableOfContentsCollapsible=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),w=require("../../../../../../../external/classnames/index.cjs.js"),n=require("react"),T=require("../../../../base/typography/text/text.cjs.js"),q=require("../../../../buttons/collapse-button/collapse-button.cjs.js"),H=require("../../../../overlays/sheet/sheet.cjs.js"),b=require("../../table-of-contents.cjs.js"),t=require("../../table-of-contents.module.scss.cjs.js"),Y=require("../table-of-contents-list/table-of-contents-list.cjs.js"),F=require("../../../../../providers/label-provider/use-labels.cjs.js"),N=E=>{const{children:m,heading:h,ariaLabel:S,activeId:o,numbered:v=!1,bordered:y=!1,defaultOpen:p=!0,sticky:c=!0,hideOnScroll:x=!1,className:M}=E,{getLabel:C}=F.useLabels(),[l,i]=n.useState(!1),[k,_]=n.useState(!1),[r,A]=n.useState(null);n.useEffect(()=>{if(!x||!c){_(!1);return}let a=window.scrollY,s=0;const O=()=>{s||(s=window.requestAnimationFrame(()=>{s=0;const f=window.scrollY,j=f-a;Math.abs(j)>4&&(_(j>0&&f>0),a=f)}))};return window.addEventListener("scroll",O,{passive:!0}),()=>{window.removeEventListener("scroll",O),s&&window.cancelAnimationFrame(s)}},[x,c]),n.useEffect(()=>{if(!l||!r)return;const a=s=>{s.target.closest("a, button")&&i(!1)};return r.addEventListener("click",a),()=>r.removeEventListener("click",a)},[l,r]);const d=(h===void 0?C("table-of-contents.title"):h)??C("table-of-contents.title"),g=S||d,u=n.useMemo(()=>b.childrenToNodes(m),[m]),L=n.useMemo(()=>b.buildActiveTrail(u,o),[u,o]),B=n.useMemo(()=>({activeId:o,numbered:v,ariaLabel:g,activeTrail:L,defaultOpen:p}),[o,v,g,L,p]);return e.jsxs(b.TableOfContentsContext.Provider,{value:B,children:[e.jsxs("div",{className:w.default(t.default["tedi-table-of-contents__bar"],{[t.default["tedi-table-of-contents__bar--static"]]:!c,[t.default["tedi-table-of-contents__bar--hidden"]]:k&&!l},M),children:[e.jsx(T.Text,{modifiers:"bold",className:t.default["tedi-table-of-contents__bar-title"],children:d}),e.jsx(q.CollapseButton,{open:l,onOpenChange:i,underline:!1,"aria-haspopup":"dialog"})]}),e.jsx(H.Sheet,{open:l,onToggle:i,ariaLabel:d,className:t.default["tedi-table-of-contents__sheet"],header:e.jsxs("div",{className:t.default["tedi-table-of-contents__sheet-header"],children:[e.jsx(T.Text,{modifiers:"bold",className:t.default["tedi-table-of-contents__bar-title"],children:d}),e.jsx(q.CollapseButton,{open:l,onOpenChange:i,underline:!1})]}),children:e.jsx("div",{ref:A,className:w.default(t.default["tedi-table-of-contents"],{[t.default["tedi-table-of-contents--bordered"]]:y}),children:e.jsx(Y.TableOfContentsList,{nodes:u,heading:null})})})]})};N.displayName="TableOfContentsCollapsible";exports.TableOfContentsCollapsible=N;
@@ -1,10 +1,18 @@
1
1
  import { TableOfContentsProps } from '../../table-of-contents';
2
- export interface TableOfContentsCollapsibleProps extends Pick<TableOfContentsProps, 'children' | 'heading' | 'ariaLabel' | 'activeId' | 'numbered' | 'className'> {
2
+ export interface TableOfContentsCollapsibleProps extends Pick<TableOfContentsProps, 'children' | 'heading' | 'ariaLabel' | 'activeId' | 'numbered' | 'bordered' | 'defaultOpen' | 'className'> {
3
3
  /**
4
4
  * Pin the bar to the bottom of the viewport. Set `false` to render it inline.
5
5
  * @default true
6
6
  */
7
7
  sticky?: boolean;
8
+ /**
9
+ * Mobile-only behaviour of this `TableOfContents.Collapsible` bar — there is no desktop equivalent.
10
+ * When the bar is pinned (`sticky`), auto-hide it while the page scrolls down and reveal it again on
11
+ * scroll up, so it stays out of the way while reading but is one gesture away. No effect when
12
+ * `sticky` is `false`.
13
+ * @default false
14
+ */
15
+ hideOnScroll?: boolean;
8
16
  }
9
17
  /**
10
18
  * Mobile variant of `TableOfContents`: a bottom bar that opens the list in a bottom-sheet overlay.
@@ -1,58 +1,97 @@
1
- import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
- import k from "../../../../../../../external/classnames/index.es.js";
3
- import { useState as v, useEffect as y, useMemo as c } from "react";
4
- import { Text as g } from "../../../../base/typography/text/text.es.js";
5
- import { CollapseButton as _ } from "../../../../buttons/collapse-button/collapse-button.es.js";
6
- import { Sheet as j } from "../../../../overlays/sheet/sheet.es.js";
7
- import { childrenToNodes as H, buildActiveTrail as S, TableOfContentsContext as A } from "../../table-of-contents.es.js";
8
- import t from "../../table-of-contents.module.scss.es.js";
9
- import { TableOfContentsList as B } from "../table-of-contents-list/table-of-contents-list.es.js";
10
- import { useLabels as I } from "../../../../../providers/label-provider/use-labels.es.js";
11
- const M = (N) => {
12
- const { children: d, heading: m, ariaLabel: C, activeId: n, numbered: f = !1, sticky: L = !0, className: T } = N, { getLabel: b } = I(), [o, a] = v(!1), [s, O] = v(null);
13
- y(() => {
14
- if (!o || !s) return;
15
- const u = (E) => {
16
- E.target.closest("a, button") && a(!1);
1
+ import { jsxs as m, jsx as n } from "react/jsx-runtime";
2
+ import E from "../../../../../../../external/classnames/index.es.js";
3
+ import { useState as b, useEffect as x, useMemo as u } from "react";
4
+ import { Text as y } from "../../../../base/typography/text/text.es.js";
5
+ import { CollapseButton as S } from "../../../../buttons/collapse-button/collapse-button.es.js";
6
+ import { Sheet as q } from "../../../../overlays/sheet/sheet.es.js";
7
+ import { childrenToNodes as B, buildActiveTrail as I, TableOfContentsContext as P } from "../../table-of-contents.es.js";
8
+ import e from "../../table-of-contents.module.scss.es.js";
9
+ import { TableOfContentsList as V } from "../table-of-contents-list/table-of-contents-list.es.js";
10
+ import { useLabels as z } from "../../../../../providers/label-provider/use-labels.es.js";
11
+ const D = (k) => {
12
+ const {
13
+ children: h,
14
+ heading: p,
15
+ ariaLabel: A,
16
+ activeId: s,
17
+ numbered: v = !1,
18
+ bordered: H = !1,
19
+ defaultOpen: _ = !0,
20
+ sticky: d = !0,
21
+ hideOnScroll: g = !1,
22
+ className: Y
23
+ } = k, { getLabel: w } = z(), [o, a] = b(!1), [j, L] = b(!1), [i, F] = b(null);
24
+ x(() => {
25
+ if (!g || !d) {
26
+ L(!1);
27
+ return;
28
+ }
29
+ let l = window.scrollY, t = 0;
30
+ const O = () => {
31
+ t || (t = window.requestAnimationFrame(() => {
32
+ t = 0;
33
+ const f = window.scrollY, T = f - l;
34
+ Math.abs(T) > 4 && (L(T > 0 && f > 0), l = f);
35
+ }));
17
36
  };
18
- return s.addEventListener("click", u), () => s.removeEventListener("click", u);
19
- }, [o, s]);
20
- const l = (m === void 0 ? b("table-of-contents.title") : m) ?? b("table-of-contents.title"), p = C || l, i = c(() => H(d), [d]), h = c(() => S(i, n), [i, n]), x = c(
21
- () => ({ activeId: n, numbered: f, ariaLabel: p, activeTrail: h }),
22
- [n, f, p, h]
37
+ return window.addEventListener("scroll", O, { passive: !0 }), () => {
38
+ window.removeEventListener("scroll", O), t && window.cancelAnimationFrame(t);
39
+ };
40
+ }, [g, d]), x(() => {
41
+ if (!o || !i) return;
42
+ const l = (t) => {
43
+ t.target.closest("a, button") && a(!1);
44
+ };
45
+ return i.addEventListener("click", l), () => i.removeEventListener("click", l);
46
+ }, [o, i]);
47
+ const r = (p === void 0 ? w("table-of-contents.title") : p) ?? w("table-of-contents.title"), N = A || r, c = u(() => B(h), [h]), C = u(() => I(c, s), [c, s]), M = u(
48
+ () => ({ activeId: s, numbered: v, ariaLabel: N, activeTrail: C, defaultOpen: _ }),
49
+ [s, v, N, C, _]
23
50
  );
24
- return /* @__PURE__ */ r(A.Provider, { value: x, children: [
25
- /* @__PURE__ */ r(
51
+ return /* @__PURE__ */ m(P.Provider, { value: M, children: [
52
+ /* @__PURE__ */ m(
26
53
  "div",
27
54
  {
28
- className: k(
29
- t["tedi-table-of-contents__bar"],
30
- { [t["tedi-table-of-contents__bar--static"]]: !L },
31
- T
55
+ className: E(
56
+ e["tedi-table-of-contents__bar"],
57
+ {
58
+ [e["tedi-table-of-contents__bar--static"]]: !d,
59
+ [e["tedi-table-of-contents__bar--hidden"]]: j && !o
60
+ },
61
+ Y
32
62
  ),
33
63
  children: [
34
- /* @__PURE__ */ e(g, { modifiers: "bold", className: t["tedi-table-of-contents__bar-title"], children: l }),
35
- /* @__PURE__ */ e(_, { open: o, onOpenChange: a, underline: !1, "aria-haspopup": "dialog" })
64
+ /* @__PURE__ */ n(y, { modifiers: "bold", className: e["tedi-table-of-contents__bar-title"], children: r }),
65
+ /* @__PURE__ */ n(S, { open: o, onOpenChange: a, underline: !1, "aria-haspopup": "dialog" })
36
66
  ]
37
67
  }
38
68
  ),
39
- /* @__PURE__ */ e(
40
- j,
69
+ /* @__PURE__ */ n(
70
+ q,
41
71
  {
42
72
  open: o,
43
73
  onToggle: a,
44
- ariaLabel: l,
45
- className: t["tedi-table-of-contents__sheet"],
46
- header: /* @__PURE__ */ r("div", { className: t["tedi-table-of-contents__sheet-header"], children: [
47
- /* @__PURE__ */ e(g, { modifiers: "bold", className: t["tedi-table-of-contents__bar-title"], children: l }),
48
- /* @__PURE__ */ e(_, { open: o, onOpenChange: a, underline: !1 })
74
+ ariaLabel: r,
75
+ className: e["tedi-table-of-contents__sheet"],
76
+ header: /* @__PURE__ */ m("div", { className: e["tedi-table-of-contents__sheet-header"], children: [
77
+ /* @__PURE__ */ n(y, { modifiers: "bold", className: e["tedi-table-of-contents__bar-title"], children: r }),
78
+ /* @__PURE__ */ n(S, { open: o, onOpenChange: a, underline: !1 })
49
79
  ] }),
50
- children: /* @__PURE__ */ e("div", { ref: O, className: t["tedi-table-of-contents"], children: /* @__PURE__ */ e(B, { nodes: i, heading: null }) })
80
+ children: /* @__PURE__ */ n(
81
+ "div",
82
+ {
83
+ ref: F,
84
+ className: E(e["tedi-table-of-contents"], {
85
+ [e["tedi-table-of-contents--bordered"]]: H
86
+ }),
87
+ children: /* @__PURE__ */ n(V, { nodes: c, heading: null })
88
+ }
89
+ )
51
90
  }
52
91
  )
53
92
  ] });
54
93
  };
55
- M.displayName = "TableOfContentsCollapsible";
94
+ D.displayName = "TableOfContentsCollapsible";
56
95
  export {
57
- M as TableOfContentsCollapsible
96
+ D as TableOfContentsCollapsible
58
97
  };
@@ -15,6 +15,12 @@ export interface TableOfContentsItemProps {
15
15
  * Render a separator below the item.
16
16
  */
17
17
  separator?: boolean;
18
+ /**
19
+ * Trailing content shown at the end of the item's row (right-aligned) — e.g. a
20
+ * count `Tag` or `StatusBadge`. Kept out of the link so it isn't part of the
21
+ * link's accessible name.
22
+ */
23
+ slot?: React.ReactNode;
18
24
  }
19
25
  export declare const TableOfContentsItem: {
20
26
  (_props: TableOfContentsItemProps): JSX.Element | null;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("../../../../../../../external/classnames/index.cjs.js"),N=require("react"),T=require("../../../../misc/separator/separator.cjs.js"),w=require("../../table-of-contents.cjs.js"),t=require("../../table-of-contents.module.scss.cjs.js"),r=({node:m,depth:c,index:i,numberPrefix:a})=>{const{activeId:_,numbered:o,activeTrail:p}=N.useContext(w.TableOfContentsContext),{id:n,content:x,children:s,separator:j}=m,C=!!(s!=null&&s.length),d=!!n&&n===_,h=C&&!!n&&p.has(n),O=Math.min(c,2),l=a?`${a}.${i+1}`:`${i+1}`,v=a?l:`${l}.`,q=o?"ol":"ul";return e.jsxs("li",{"aria-current":d?"true":void 0,className:b.default(t.default["tedi-table-of-contents__item"],{[t.default["tedi-table-of-contents__item--selected"]]:d}),children:[e.jsxs("span",{className:b.default(t.default["tedi-table-of-contents__row"],t.default[`tedi-table-of-contents__row--level-${O}`]),children:[o&&e.jsx("span",{className:t.default["tedi-table-of-contents__number"],"aria-hidden":"true",children:v}),e.jsx("span",{className:t.default["tedi-table-of-contents__content"],children:x})]}),h&&e.jsx(q,{className:t.default["tedi-table-of-contents__group"],children:s.map((u,f)=>e.jsx(r,{node:u,depth:c+1,index:f,numberPrefix:o?l:void 0},u.id??f))}),j&&e.jsx(T.Separator,{})]})};r.displayName="TableOfContentsRow";exports.TableOfContentsRow=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),_=require("../../../../../../../external/classnames/index.cjs.js"),w=require("react"),R=require("../../../../misc/separator/separator.cjs.js"),$=require("../../table-of-contents.cjs.js"),e=require("../../table-of-contents.module.scss.cjs.js"),r=({node:m,depth:c,index:d,numberPrefix:a})=>{const{activeId:p,numbered:o,activeTrail:x,defaultOpen:j}=w.useContext($.TableOfContentsContext),{id:n,content:v,children:s,separator:h,slot:i}=m,C=!!(s!=null&&s.length),u=!!n&&n===p,O=C&&(j||!!n&&x.has(n)),N=Math.min(c,2),l=a?`${a}.${d+1}`:`${d+1}`,q=a?l:`${l}.`,T=o?"ol":"ul";return t.jsxs("li",{"aria-current":u?"true":void 0,className:_.default(e.default["tedi-table-of-contents__item"],{[e.default["tedi-table-of-contents__item--selected"]]:u}),children:[t.jsxs("div",{className:_.default(e.default["tedi-table-of-contents__row"],e.default[`tedi-table-of-contents__row--level-${N}`]),children:[o&&t.jsx("span",{className:e.default["tedi-table-of-contents__number"],"aria-hidden":"true",children:q}),t.jsx("span",{className:e.default["tedi-table-of-contents__content"],children:v}),i!==void 0&&t.jsx("div",{className:e.default["tedi-table-of-contents__slot"],children:i})]}),O&&t.jsx(T,{className:e.default["tedi-table-of-contents__group"],children:s.map((f,b)=>t.jsx(r,{node:f,depth:c+1,index:b,numberPrefix:o?l:void 0},f.id??b))}),h&&t.jsx(R.Separator,{className:e.default["tedi-table-of-contents__separator"]})]})};r.displayName="TableOfContentsRow";exports.TableOfContentsRow=r;
@@ -1,45 +1,40 @@
1
1
  import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
- import f from "../../../../../../../external/classnames/index.es.js";
3
- import { useContext as x } from "react";
4
- import { Separator as g } from "../../../../misc/separator/separator.es.js";
5
- import { TableOfContentsContext as j } from "../../table-of-contents.es.js";
2
+ import _ from "../../../../../../../external/classnames/index.es.js";
3
+ import { useContext as j } from "react";
4
+ import { Separator as y } from "../../../../misc/separator/separator.es.js";
5
+ import { TableOfContentsContext as R } from "../../table-of-contents.es.js";
6
6
  import t from "../../table-of-contents.module.scss.es.js";
7
- const _ = ({ node: b, depth: i, index: l, numberPrefix: s }) => {
8
- const { activeId: u, numbered: a, activeTrail: h } = x(j), { id: o, content: N, children: n, separator: v } = b, C = !!(n != null && n.length), c = !!o && o === u, $ = C && !!o && h.has(o), w = Math.min(i, 2), r = s ? `${s}.${l + 1}` : `${l + 1}`, O = s ? r : `${r}.`, T = a ? "ol" : "ul";
7
+ const b = ({ node: u, depth: r, index: i, numberPrefix: s }) => {
8
+ const { activeId: h, numbered: a, activeTrail: v, defaultOpen: N } = j(R), { id: o, content: C, children: n, separator: O, slot: c } = u, $ = !!(n != null && n.length), d = !!o && o === h, w = $ && (N || !!o && v.has(o)), T = Math.min(r, 2), l = s ? `${s}.${i + 1}` : `${i + 1}`, x = s ? l : `${l}.`, g = a ? "ol" : "ul";
9
9
  return /* @__PURE__ */ p(
10
10
  "li",
11
11
  {
12
- "aria-current": c ? "true" : void 0,
13
- className: f(t["tedi-table-of-contents__item"], {
14
- [t["tedi-table-of-contents__item--selected"]]: c
12
+ "aria-current": d ? "true" : void 0,
13
+ className: _(t["tedi-table-of-contents__item"], {
14
+ [t["tedi-table-of-contents__item--selected"]]: d
15
15
  }),
16
16
  children: [
17
- /* @__PURE__ */ p(
18
- "span",
19
- {
20
- className: f(t["tedi-table-of-contents__row"], t[`tedi-table-of-contents__row--level-${w}`]),
21
- children: [
22
- a && /* @__PURE__ */ e("span", { className: t["tedi-table-of-contents__number"], "aria-hidden": "true", children: O }),
23
- /* @__PURE__ */ e("span", { className: t["tedi-table-of-contents__content"], children: N })
24
- ]
25
- }
26
- ),
27
- $ && /* @__PURE__ */ e(T, { className: t["tedi-table-of-contents__group"], children: n.map((m, d) => /* @__PURE__ */ e(
28
- _,
17
+ /* @__PURE__ */ p("div", { className: _(t["tedi-table-of-contents__row"], t[`tedi-table-of-contents__row--level-${T}`]), children: [
18
+ a && /* @__PURE__ */ e("span", { className: t["tedi-table-of-contents__number"], "aria-hidden": "true", children: x }),
19
+ /* @__PURE__ */ e("span", { className: t["tedi-table-of-contents__content"], children: C }),
20
+ c !== void 0 && /* @__PURE__ */ e("div", { className: t["tedi-table-of-contents__slot"], children: c })
21
+ ] }),
22
+ w && /* @__PURE__ */ e(g, { className: t["tedi-table-of-contents__group"], children: n.map((m, f) => /* @__PURE__ */ e(
23
+ b,
29
24
  {
30
25
  node: m,
31
- depth: i + 1,
32
- index: d,
33
- numberPrefix: a ? r : void 0
26
+ depth: r + 1,
27
+ index: f,
28
+ numberPrefix: a ? l : void 0
34
29
  },
35
- m.id ?? d
30
+ m.id ?? f
36
31
  )) }),
37
- v && /* @__PURE__ */ e(g, {})
32
+ O && /* @__PURE__ */ e(y, { className: t["tedi-table-of-contents__separator"] })
38
33
  ]
39
34
  }
40
35
  );
41
36
  };
42
- _.displayName = "TableOfContentsRow";
37
+ b.displayName = "TableOfContentsRow";
43
38
  export {
44
- _ as TableOfContentsRow
39
+ b as TableOfContentsRow
45
40
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),g=require("../../../../../external/classnames/index.cjs.js"),l=require("react"),S=require("../../misc/affix/affix.cjs.js"),k=require("./components/table-of-contents-collapsible/table-of-contents-collapsible.cjs.js"),y=require("./components/table-of-contents-item/table-of-contents-item.cjs.js"),M=require("./components/table-of-contents-list/table-of-contents-list.cjs.js"),b=require("./table-of-contents.module.scss.cjs.js"),w=require("../../../providers/label-provider/use-labels.cjs.js"),E=require("../../content/card/card.cjs.js"),P=require("../../content/card/card-content/card-content.cjs.js"),q=l.createContext({activeTrail:new Set}),C=n=>l.isValidElement(n)&&n.type===y.TableOfContentsItem,m=n=>l.Children.toArray(n).filter(C).map(c=>{const{id:s,separator:r,children:a}=c.props,o=l.Children.toArray(a),e=o.filter(C),i=o.filter(d=>!C(d));return{id:s,separator:r,content:t.jsx(t.Fragment,{children:i}),children:e.length?m(a):void 0}}),j=(n,c)=>{const s=new Set;if(!c)return s;const r=(a,o)=>{for(const e of a){const i=e.id?[...o,e.id]:o;if(e.id===c||e.children&&r(e.children,i))return i.forEach(d=>s.add(d)),!0}return!1};return r(n,[]),s};function u(n){const{getLabel:c}=w.useLabels(),{children:s,heading:r,headingLevel:a="h3",ariaLabel:o,activeId:e,numbered:i=!1,sticky:d=!0,variant:h="default",padding:p,className:N}=n,L=r===void 0?c("table-of-contents.title"):r,f=l.useMemo(()=>m(s),[s]),v=l.useMemo(()=>j(f,e),[f,e]),A=l.useMemo(()=>({activeId:e,numbered:i,headingLevel:a,ariaLabel:o,activeTrail:v}),[e,i,a,o,v]),I=p!==void 0?{"--tedi-table-of-contents-padding":`${p}rem`}:void 0,x=t.jsx("div",{className:g.default(b.default["tedi-table-of-contents"],{[b.default["tedi-table-of-contents--transparent"]]:h==="transparent"}),style:I,children:t.jsx(M.TableOfContentsList,{nodes:f,heading:L})}),T=g.default({[b.default["tedi-table-of-contents--sticky"]]:d},N),O=h==="transparent"?t.jsx("div",{className:T,children:x}):t.jsx(E.Card,{className:T,children:t.jsx(P.CardContent,{padding:0,children:x})});return t.jsx(q.Provider,{value:A,children:d?t.jsx(S.Affix,{position:"sticky",top:1.5,bottom:1.5,children:O}):O})}u.displayName="TableOfContents";u.Item=y.TableOfContentsItem;u.Collapsible=k.TableOfContentsCollapsible;exports.TableOfContents=u;exports.TableOfContentsContext=q;exports.buildActiveTrail=j;exports.childrenToNodes=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),g=require("../../../../../external/classnames/index.cjs.js"),i=require("react"),P=require("../../misc/affix/affix.cjs.js"),S=require("./components/table-of-contents-collapsible/table-of-contents-collapsible.cjs.js"),j=require("./components/table-of-contents-item/table-of-contents-item.cjs.js"),B=require("./components/table-of-contents-list/table-of-contents-list.cjs.js"),f=require("./table-of-contents.module.scss.cjs.js"),M=require("../../../providers/label-provider/use-labels.cjs.js"),w=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),E=require("../../content/card/card.cjs.js"),R=require("../../content/card/card-content/card-content.cjs.js"),y=i.createContext({activeTrail:new Set}),m=t=>i.isValidElement(t)&&t.type===j.TableOfContentsItem,h=t=>i.Children.toArray(t).filter(m).map(l=>{const{id:o,separator:a,slot:c,children:s}=l.props,e=i.Children.toArray(s),n=e.filter(m),d=e.filter(u=>!m(u));return{id:o,separator:a,slot:c,content:r.jsx(r.Fragment,{children:d}),children:n.length?h(s):void 0}}),k=(t,l)=>{const o=new Set;if(!l)return o;const a=(c,s)=>{for(const e of c){const n=e.id?[...s,e.id]:s;if(e.id===l||e.children&&a(e.children,n))return n.forEach(d=>o.add(d)),!0}return!1};return a(t,[]),o};function b(t){const{getLabel:l}=M.useLabels(),{getCurrentBreakpointProps:o}=w.useBreakpointProps(t.defaultServerBreakpoint),{children:a,heading:c,headingLevel:s="h3",ariaLabel:e,activeId:n,defaultOpen:d=!0,numbered:u=!1,sticky:p=!0,variant:x="default",bordered:N=!1,className:L}=o(t),A=c===void 0?l("table-of-contents.title"):c,C=i.useMemo(()=>h(a),[a]),T=i.useMemo(()=>k(C,n),[C,n]),I=i.useMemo(()=>({activeId:n,numbered:u,headingLevel:s,ariaLabel:e,activeTrail:T,defaultOpen:d}),[n,u,s,e,T,d]),v=r.jsx("div",{className:g.default(f.default["tedi-table-of-contents"],{[f.default["tedi-table-of-contents--transparent"]]:x==="transparent",[f.default["tedi-table-of-contents--bordered"]]:N}),children:r.jsx(B.TableOfContentsList,{nodes:C,heading:A})}),O=g.default({[f.default["tedi-table-of-contents--sticky"]]:p},L),q=x==="transparent"?r.jsx("div",{className:O,children:v}):r.jsx(E.Card,{className:O,children:r.jsx(R.CardContent,{padding:0,children:v})});return r.jsx(y.Provider,{value:I,children:p?r.jsx(P.Affix,{position:"sticky",top:1.5,bottom:1.5,children:q}):q})}b.displayName="TableOfContents";b.Item=j.TableOfContentsItem;b.Collapsible=S.TableOfContentsCollapsible;exports.TableOfContents=b;exports.TableOfContentsContext=y;exports.buildActiveTrail=k;exports.childrenToNodes=h;
@@ -1,8 +1,24 @@
1
1
  import { ReactNode } from 'react';
2
+ import { BreakpointSupport } from '../../../helpers';
2
3
  import { TableOfContentsItemProps } from './components/table-of-contents-item/table-of-contents-item';
3
- /** Semantic level of the `TableOfContents` heading element. */
4
4
  export type TableOfContentsHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
5
- export interface TableOfContentsProps {
5
+ type TableOfContentsBreakpointProps = {
6
+ /**
7
+ * Visual variant:
8
+ * - `default` — rendered inside a bordered `Card`.
9
+ * - `transparent` — no card chrome (border / background); the list sits
10
+ * directly on the page, with a continuous grey left rail (the active item's
11
+ * segment turns blue).
12
+ * @default default
13
+ */
14
+ variant?: 'default' | 'transparent';
15
+ /**
16
+ * Stick the card to the viewport while scrolling.
17
+ * @default true
18
+ */
19
+ sticky?: boolean;
20
+ };
21
+ export interface TableOfContentsProps extends BreakpointSupport<TableOfContentsBreakpointProps> {
6
22
  /**
7
23
  * `TableOfContents.Item` elements. An item's non-`Item` children are its
8
24
  * link / label; nested `TableOfContents.Item` children become its sub-items.
@@ -28,36 +44,29 @@ export interface TableOfContentsProps {
28
44
  */
29
45
  ariaLabel?: string;
30
46
  /**
31
- * Visual variant:
32
- * - `default` — rendered inside a bordered `Card`.
33
- * - `transparent` — no card chrome (border / background); the list sits
34
- * directly on the page, with a continuous grey left rail (the active item's
35
- * segment turns blue).
36
- * @default default
47
+ * Id of the currently active item. The active item gets the left accent bar
48
+ * and active link colour. When `defaultOpen` is `false`, the branch leading
49
+ * to it is the only one kept expanded.
37
50
  */
38
- variant?: 'default' | 'transparent';
51
+ activeId?: string;
39
52
  /**
40
- * Inner padding of the container, in rem — the spacing between the card edge and the
41
- * heading / items. Defaults to the card's medium padding token.
53
+ * Draws a divider between items so the list reads as a set of separated rows. The last item has no
54
+ * divider — the card border closes the list.
55
+ * @default false
42
56
  */
43
- padding?: number;
57
+ bordered?: boolean;
44
58
  /**
45
- * Id of the currently active item. The active item gets the left accent bar
46
- * and active link colour; the branch leading to it auto-expands its nested
47
- * children.
59
+ * Whether every item's sub-items are expanded by default. Set `false` to make the list behave like
60
+ * an accordion: only the branch leading to `activeId` keeps its nested children visible.
61
+ * @default true
48
62
  */
49
- activeId?: string;
63
+ defaultOpen?: boolean;
50
64
  /**
51
65
  * Render the list as an ordered list with auto-generated hierarchical numbers
52
66
  * (`1.`, `2.`, `2.1`, …) shown before each item.
53
67
  * @default false
54
68
  */
55
69
  numbered?: boolean;
56
- /**
57
- * Stick the card to the viewport while scrolling.
58
- * @default true
59
- */
60
- sticky?: boolean;
61
70
  /**
62
71
  * Additional class name on the root element.
63
72
  */
@@ -69,6 +78,7 @@ export interface TableOfContentsNode {
69
78
  content: ReactNode;
70
79
  children?: TableOfContentsNode[];
71
80
  separator?: boolean;
81
+ slot?: ReactNode;
72
82
  }
73
83
  interface TableOfContentsContextValue {
74
84
  activeId?: string;
@@ -76,6 +86,7 @@ interface TableOfContentsContextValue {
76
86
  headingLevel?: TableOfContentsHeadingLevel;
77
87
  ariaLabel?: string;
78
88
  activeTrail: Set<string>;
89
+ defaultOpen?: boolean;
79
90
  }
80
91
  export declare const TableOfContentsContext: import('react').Context<TableOfContentsContextValue>;
81
92
  export declare const childrenToNodes: (children: ReactNode) => TableOfContentsNode[];