@tedi-design-system/react 19.1.0-rc.6 → 19.1.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/bundle-stats.html +1 -1
  2. package/index.css +1 -1
  3. package/package.json +2 -2
  4. package/src/community/components/map-components/base-map-selection/base-map-option.cjs.js +1 -1
  5. package/src/community/components/map-components/base-map-selection/base-map-option.d.ts +8 -5
  6. package/src/community/components/map-components/base-map-selection/base-map-option.es.js +63 -65
  7. package/src/community/components/map-components/base-map-selection/base-map-selection.cjs.js +1 -1
  8. package/src/community/components/map-components/base-map-selection/base-map-selection.d.ts +1 -4
  9. package/src/community/components/map-components/base-map-selection/base-map-selection.es.js +55 -55
  10. package/src/community/components/map-components/map-button/map-button.cjs.js +1 -1
  11. package/src/community/components/map-components/map-button/map-button.d.ts +2 -3
  12. package/src/community/components/map-components/map-button/map-button.es.js +37 -36
  13. package/src/tedi/components/misc/affix/affix.cjs.js +1 -1
  14. package/src/tedi/components/misc/affix/affix.es.js +20 -8
  15. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.cjs.js +1 -1
  16. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.d.ts +9 -1
  17. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-collapsible/table-of-contents-collapsible.es.js +78 -39
  18. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-item/table-of-contents-item.d.ts +6 -0
  19. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.cjs.js +1 -1
  20. package/src/tedi/components/navigation/table-of-contents/components/table-of-contents-row/table-of-contents-row.es.js +23 -28
  21. package/src/tedi/components/navigation/table-of-contents/table-of-contents.cjs.js +1 -1
  22. package/src/tedi/components/navigation/table-of-contents/table-of-contents.d.ts +32 -21
  23. package/src/tedi/components/navigation/table-of-contents/table-of-contents.es.js +58 -55
  24. package/src/tedi/components/navigation/table-of-contents/table-of-contents.module.scss.cjs.js +1 -1
  25. package/src/tedi/components/navigation/table-of-contents/table-of-contents.module.scss.es.js +4 -1
  26. package/src/tedi/providers/label-provider/labels-map.cjs.js +1 -1
  27. package/src/tedi/providers/label-provider/labels-map.d.ts +7 -0
  28. package/src/tedi/providers/label-provider/labels-map.es.js +7 -0
@@ -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[];
@@ -1,70 +1,73 @@
1
- import { jsx as r, Fragment as w } from "react/jsx-runtime";
2
- import T from "../../../../../external/classnames/index.es.js";
3
- import { useMemo as m, createContext as E, Children as N, isValidElement as S } from "react";
4
- import { Affix as V } from "../../misc/affix/affix.es.js";
5
- import { TableOfContentsCollapsible as j } from "./components/table-of-contents-collapsible/table-of-contents-collapsible.es.js";
6
- import { TableOfContentsItem as x } from "./components/table-of-contents-item/table-of-contents-item.es.js";
7
- import { TableOfContentsList as F } from "./components/table-of-contents-list/table-of-contents-list.es.js";
8
- import f from "./table-of-contents.module.scss.es.js";
9
- import { useLabels as H } from "../../../providers/label-provider/use-labels.es.js";
1
+ import { jsx as o, Fragment as B } from "react/jsx-runtime";
2
+ import N from "../../../../../external/classnames/index.es.js";
3
+ import { useMemo as p, createContext as E, Children as k, isValidElement as P } from "react";
4
+ import { Affix as S } from "../../misc/affix/affix.es.js";
5
+ import { TableOfContentsCollapsible as V } from "./components/table-of-contents-collapsible/table-of-contents-collapsible.es.js";
6
+ import { TableOfContentsItem as O } from "./components/table-of-contents-item/table-of-contents-item.es.js";
7
+ import { TableOfContentsList as j } from "./components/table-of-contents-list/table-of-contents-list.es.js";
8
+ import m from "./table-of-contents.module.scss.es.js";
9
+ import { useLabels as F } from "../../../providers/label-provider/use-labels.es.js";
10
+ import { useBreakpointProps as H } from "../../../helpers/hooks/use-breakpoint-props.es.js";
10
11
  import { Card as M } from "../../content/card/card.es.js";
11
- import { CardContent as P } from "../../content/card/card-content/card-content.es.js";
12
- const $ = E({
12
+ import { CardContent as q } from "../../content/card/card-content/card-content.es.js";
13
+ const z = E({
13
14
  activeTrail: /* @__PURE__ */ new Set()
14
- }), p = (e) => S(e) && e.type === x, O = (e) => N.toArray(e).filter(p).map((l) => {
15
- const { id: n, separator: i, children: s } = l.props, o = N.toArray(s), t = o.filter(p), a = o.filter((c) => !p(c));
15
+ }), u = (e) => P(e) && e.type === O, x = (e) => k.toArray(e).filter(u).map((a) => {
16
+ const { id: i, separator: s, slot: l, children: r } = a.props, t = k.toArray(r), n = t.filter(u), c = t.filter((d) => !u(d));
16
17
  return {
17
- id: n,
18
- separator: i,
19
- content: /* @__PURE__ */ r(w, { children: a }),
20
- children: t.length ? O(s) : void 0
18
+ id: i,
19
+ separator: s,
20
+ slot: l,
21
+ content: /* @__PURE__ */ o(B, { children: c }),
22
+ children: n.length ? x(r) : void 0
21
23
  };
22
- }), q = (e, l) => {
23
- const n = /* @__PURE__ */ new Set();
24
- if (!l) return n;
25
- const i = (s, o) => {
26
- for (const t of s) {
27
- const a = t.id ? [...o, t.id] : o;
28
- if (t.id === l || t.children && i(t.children, a))
29
- return a.forEach((c) => n.add(c)), !0;
24
+ }), D = (e, a) => {
25
+ const i = /* @__PURE__ */ new Set();
26
+ if (!a) return i;
27
+ const s = (l, r) => {
28
+ for (const t of l) {
29
+ const n = t.id ? [...r, t.id] : r;
30
+ if (t.id === a || t.children && s(t.children, n))
31
+ return n.forEach((c) => i.add(c)), !0;
30
32
  }
31
33
  return !1;
32
34
  };
33
- return i(e, []), n;
35
+ return s(e, []), i;
34
36
  };
35
- function h(e) {
36
- const { getLabel: l } = H(), {
37
- children: n,
38
- heading: i,
39
- headingLevel: s = "h3",
40
- ariaLabel: o,
41
- activeId: t,
42
- numbered: a = !1,
43
- sticky: c = !0,
44
- variant: b = "default",
45
- padding: u,
46
- className: A
47
- } = e, L = i === void 0 ? l("table-of-contents.title") : i, d = m(() => O(n), [n]), C = m(() => q(d, t), [d, t]), k = m(
48
- () => ({ activeId: t, numbered: a, headingLevel: s, ariaLabel: o, activeTrail: C }),
49
- [t, a, s, o, C]
50
- ), I = u !== void 0 ? { "--tedi-table-of-contents-padding": `${u}rem` } : void 0, v = /* @__PURE__ */ r(
37
+ function b(e) {
38
+ const { getLabel: a } = F(), { getCurrentBreakpointProps: i } = H(e.defaultServerBreakpoint), {
39
+ children: s,
40
+ heading: l,
41
+ headingLevel: r = "h3",
42
+ ariaLabel: t,
43
+ activeId: n,
44
+ defaultOpen: c = !0,
45
+ numbered: d = !1,
46
+ sticky: h = !0,
47
+ variant: C = "default",
48
+ bordered: A = !1,
49
+ className: L
50
+ } = i(e), I = l === void 0 ? a("table-of-contents.title") : l, f = p(() => x(s), [s]), v = p(() => D(f, n), [f, n]), w = p(
51
+ () => ({ activeId: n, numbered: d, headingLevel: r, ariaLabel: t, activeTrail: v, defaultOpen: c }),
52
+ [n, d, r, t, v, c]
53
+ ), T = /* @__PURE__ */ o(
51
54
  "div",
52
55
  {
53
- className: T(f["tedi-table-of-contents"], {
54
- [f["tedi-table-of-contents--transparent"]]: b === "transparent"
56
+ className: N(m["tedi-table-of-contents"], {
57
+ [m["tedi-table-of-contents--transparent"]]: C === "transparent",
58
+ [m["tedi-table-of-contents--bordered"]]: A
55
59
  }),
56
- style: I,
57
- children: /* @__PURE__ */ r(F, { nodes: d, heading: L })
60
+ children: /* @__PURE__ */ o(j, { nodes: f, heading: I })
58
61
  }
59
- ), y = T({ [f["tedi-table-of-contents--sticky"]]: c }, A), g = b === "transparent" ? /* @__PURE__ */ r("div", { className: y, children: v }) : /* @__PURE__ */ r(M, { className: y, children: /* @__PURE__ */ r(P, { padding: 0, children: v }) });
60
- return /* @__PURE__ */ r($.Provider, { value: k, children: c ? /* @__PURE__ */ r(V, { position: "sticky", top: 1.5, bottom: 1.5, children: g }) : g });
62
+ ), g = N({ [m["tedi-table-of-contents--sticky"]]: h }, L), y = C === "transparent" ? /* @__PURE__ */ o("div", { className: g, children: T }) : /* @__PURE__ */ o(M, { className: g, children: /* @__PURE__ */ o(q, { padding: 0, children: T }) });
63
+ return /* @__PURE__ */ o(z.Provider, { value: w, children: h ? /* @__PURE__ */ o(S, { position: "sticky", top: 1.5, bottom: 1.5, children: y }) : y });
61
64
  }
62
- h.displayName = "TableOfContents";
63
- h.Item = x;
64
- h.Collapsible = j;
65
+ b.displayName = "TableOfContents";
66
+ b.Item = O;
67
+ b.Collapsible = V;
65
68
  export {
66
- h as TableOfContents,
67
- $ as TableOfContentsContext,
68
- q as buildActiveTrail,
69
- O as childrenToNodes
69
+ b as TableOfContents,
70
+ z as TableOfContentsContext,
71
+ D as buildActiveTrail,
72
+ x as childrenToNodes
70
73
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t={"tedi-table-of-contents":"tedi-table-of-contents-ce55e86d","tedi-table-of-contents--transparent":"tedi-table-of-contents--transparent-067ea2c2","tedi-table-of-contents__list":"tedi-table-of-contents__list-94025876","tedi-table-of-contents--sticky":"tedi-table-of-contents--sticky-1ee87047","tedi-table-of-contents__heading":"tedi-table-of-contents__heading-c6b7a6df","tedi-table-of-contents__group":"tedi-table-of-contents__group-590e4963","tedi-table-of-contents__list--headless":"tedi-table-of-contents__list--headless-99c1bab5","tedi-table-of-contents__item":"tedi-table-of-contents__item-29f072b5","tedi-table-of-contents__row":"tedi-table-of-contents__row-fb686650","tedi-table-of-contents__row--level-2":"tedi-table-of-contents__row--level-2-4fec675b","tedi-table-of-contents__number":"tedi-table-of-contents__number-693b03b7","tedi-table-of-contents__content":"tedi-table-of-contents__content-8a05ad59","tedi-table-of-contents__item--selected":"tedi-table-of-contents__item--selected-632958d1","tedi-table-of-contents__bar":"tedi-table-of-contents__bar-f4daef0b","tedi-table-of-contents__bar--static":"tedi-table-of-contents__bar--static-f919cf73","tedi-table-of-contents__bar-title":"tedi-table-of-contents__bar-title-b82ab4ed","tedi-table-of-contents__sheet":"tedi-table-of-contents__sheet-16e41b54","tedi-table-of-contents__sheet-header":"tedi-table-of-contents__sheet-header-ec904c54"};exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t={"tedi-table-of-contents":"tedi-table-of-contents-ce55e86d","tedi-table-of-contents--bordered":"tedi-table-of-contents--bordered-90b16d0b","tedi-table-of-contents--transparent":"tedi-table-of-contents--transparent-067ea2c2","tedi-table-of-contents__list":"tedi-table-of-contents__list-94025876","tedi-table-of-contents--sticky":"tedi-table-of-contents--sticky-1ee87047","tedi-table-of-contents__heading":"tedi-table-of-contents__heading-c6b7a6df","tedi-table-of-contents__group":"tedi-table-of-contents__group-590e4963","tedi-table-of-contents__item":"tedi-table-of-contents__item-29f072b5","tedi-table-of-contents__row":"tedi-table-of-contents__row-fb686650","tedi-table-of-contents__row--level-2":"tedi-table-of-contents__row--level-2-4fec675b","tedi-table-of-contents__number":"tedi-table-of-contents__number-693b03b7","tedi-table-of-contents__content":"tedi-table-of-contents__content-8a05ad59","tedi-table-of-contents__slot":"tedi-table-of-contents__slot-53aefc57","tedi-table-of-contents__item--selected":"tedi-table-of-contents__item--selected-632958d1","tedi-table-of-contents__separator":"tedi-table-of-contents__separator-b824eeee","tedi-table-of-contents__bar":"tedi-table-of-contents__bar-f4daef0b","tedi-table-of-contents__bar--static":"tedi-table-of-contents__bar--static-f919cf73","tedi-table-of-contents__bar--hidden":"tedi-table-of-contents__bar--hidden-53dd04a2","tedi-table-of-contents__bar-title":"tedi-table-of-contents__bar-title-b82ab4ed","tedi-table-of-contents__sheet":"tedi-table-of-contents__sheet-16e41b54","tedi-table-of-contents__sheet-header":"tedi-table-of-contents__sheet-header-ec904c54"};exports.default=t;
@@ -1,19 +1,22 @@
1
1
  const t = {
2
2
  "tedi-table-of-contents": "tedi-table-of-contents-ce55e86d",
3
+ "tedi-table-of-contents--bordered": "tedi-table-of-contents--bordered-90b16d0b",
3
4
  "tedi-table-of-contents--transparent": "tedi-table-of-contents--transparent-067ea2c2",
4
5
  "tedi-table-of-contents__list": "tedi-table-of-contents__list-94025876",
5
6
  "tedi-table-of-contents--sticky": "tedi-table-of-contents--sticky-1ee87047",
6
7
  "tedi-table-of-contents__heading": "tedi-table-of-contents__heading-c6b7a6df",
7
8
  "tedi-table-of-contents__group": "tedi-table-of-contents__group-590e4963",
8
- "tedi-table-of-contents__list--headless": "tedi-table-of-contents__list--headless-99c1bab5",
9
9
  "tedi-table-of-contents__item": "tedi-table-of-contents__item-29f072b5",
10
10
  "tedi-table-of-contents__row": "tedi-table-of-contents__row-fb686650",
11
11
  "tedi-table-of-contents__row--level-2": "tedi-table-of-contents__row--level-2-4fec675b",
12
12
  "tedi-table-of-contents__number": "tedi-table-of-contents__number-693b03b7",
13
13
  "tedi-table-of-contents__content": "tedi-table-of-contents__content-8a05ad59",
14
+ "tedi-table-of-contents__slot": "tedi-table-of-contents__slot-53aefc57",
14
15
  "tedi-table-of-contents__item--selected": "tedi-table-of-contents__item--selected-632958d1",
16
+ "tedi-table-of-contents__separator": "tedi-table-of-contents__separator-b824eeee",
15
17
  "tedi-table-of-contents__bar": "tedi-table-of-contents__bar-f4daef0b",
16
18
  "tedi-table-of-contents__bar--static": "tedi-table-of-contents__bar--static-f919cf73",
19
+ "tedi-table-of-contents__bar--hidden": "tedi-table-of-contents__bar--hidden-53dd04a2",
17
20
  "tedi-table-of-contents__bar-title": "tedi-table-of-contents__bar-title-b82ab4ed",
18
21
  "tedi-table-of-contents__sheet": "tedi-table-of-contents__sheet-16e41b54",
19
22
  "tedi-table-of-contents__sheet-header": "tedi-table-of-contents__sheet-header-ec904c54"