@camunda/design-system 0.49.0 → 0.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/src/components/ui/app-header.d.ts.map +1 -1
  2. package/dist/src/components/ui/app-header.js +72 -1
  3. package/dist/src/components/ui/app-header.js.map +1 -1
  4. package/dist/src/components/ui/data-table.d.ts.map +1 -1
  5. package/dist/src/components/ui/data-table.js +49 -19
  6. package/dist/src/components/ui/data-table.js.map +1 -1
  7. package/dist/src/components/ui/inline-edit.d.ts.map +1 -1
  8. package/dist/src/components/ui/inline-edit.js +36 -5
  9. package/dist/src/components/ui/inline-edit.js.map +1 -1
  10. package/dist/src/components/ui/nav-breadcrumb.d.ts +66 -1
  11. package/dist/src/components/ui/nav-breadcrumb.d.ts.map +1 -1
  12. package/dist/src/components/ui/nav-breadcrumb.js +407 -34
  13. package/dist/src/components/ui/nav-breadcrumb.js.map +1 -1
  14. package/dist/src/components/ui/tooltip.d.ts +7 -1
  15. package/dist/src/components/ui/tooltip.d.ts.map +1 -1
  16. package/dist/src/components/ui/tooltip.js +19 -2
  17. package/dist/src/components/ui/tooltip.js.map +1 -1
  18. package/dist/src/examples/project-detail/ProjectDetailPage.d.ts.map +1 -1
  19. package/dist/src/examples/project-detail/ProjectDetailPage.js.map +1 -1
  20. package/dist/src/hooks/use-is-truncated.d.ts +16 -0
  21. package/dist/src/hooks/use-is-truncated.d.ts.map +1 -0
  22. package/dist/src/hooks/use-is-truncated.js +24 -0
  23. package/dist/src/hooks/use-is-truncated.js.map +1 -0
  24. package/dist/src/icons/custom/AiIcon.d.ts.map +1 -1
  25. package/dist/src/icons/custom/AiIcon.js +1 -1
  26. package/dist/src/icons/custom/AiIcon.js.map +1 -1
  27. package/dist/src/icons/custom/BpmnDiagramIcon.d.ts.map +1 -1
  28. package/dist/src/icons/custom/BpmnDiagramIcon.js +1 -1
  29. package/dist/src/icons/custom/BpmnDiagramIcon.js.map +1 -1
  30. package/dist/src/icons/custom/ConnectorIcon.js +1 -1
  31. package/dist/src/icons/custom/ConnectorIcon.js.map +1 -1
  32. package/dist/src/icons/custom/ConnectorTemplateIcon.d.ts.map +1 -1
  33. package/dist/src/icons/custom/ConnectorTemplateIcon.js +2 -2
  34. package/dist/src/icons/custom/ConnectorTemplateIcon.js.map +1 -1
  35. package/dist/src/icons/custom/DecisionIcon.d.ts.map +1 -1
  36. package/dist/src/icons/custom/DecisionIcon.js +1 -1
  37. package/dist/src/icons/custom/DecisionIcon.js.map +1 -1
  38. package/dist/src/icons/custom/FormIcon.d.ts.map +1 -1
  39. package/dist/src/icons/custom/FormIcon.js +1 -1
  40. package/dist/src/icons/custom/FormIcon.js.map +1 -1
  41. package/dist/src/icons/custom/ModelerIcon.d.ts.map +1 -1
  42. package/dist/src/icons/custom/ModelerIcon.js +1 -1
  43. package/dist/src/icons/custom/ModelerIcon.js.map +1 -1
  44. package/dist/src/icons/index.d.ts +1 -9
  45. package/dist/src/icons/index.d.ts.map +1 -1
  46. package/dist/src/icons/index.js +1 -9
  47. package/dist/src/icons/index.js.map +1 -1
  48. package/dist/src/icons/registry.d.ts +8 -0
  49. package/dist/src/icons/registry.d.ts.map +1 -1
  50. package/dist/src/icons/registry.js +17 -17
  51. package/dist/src/icons/registry.js.map +1 -1
  52. package/dist/src/icons/registry.json +16 -16
  53. package/dist/styles.css +78 -3
  54. package/package.json +3 -3
  55. package/dist/src/icons/custom/ApiClientIcon.d.ts +0 -2
  56. package/dist/src/icons/custom/ApiClientIcon.d.ts.map +0 -1
  57. package/dist/src/icons/custom/ApiClientIcon.js +0 -5
  58. package/dist/src/icons/custom/ApiClientIcon.js.map +0 -1
  59. package/dist/src/icons/custom/AuditLogIcon.d.ts +0 -2
  60. package/dist/src/icons/custom/AuditLogIcon.d.ts.map +0 -1
  61. package/dist/src/icons/custom/AuditLogIcon.js +0 -5
  62. package/dist/src/icons/custom/AuditLogIcon.js.map +0 -1
  63. package/dist/src/icons/custom/BackupIcon.d.ts +0 -2
  64. package/dist/src/icons/custom/BackupIcon.d.ts.map +0 -1
  65. package/dist/src/icons/custom/BackupIcon.js +0 -5
  66. package/dist/src/icons/custom/BackupIcon.js.map +0 -1
  67. package/dist/src/icons/custom/ClusterIcon.d.ts +0 -2
  68. package/dist/src/icons/custom/ClusterIcon.d.ts.map +0 -1
  69. package/dist/src/icons/custom/ClusterIcon.js +0 -5
  70. package/dist/src/icons/custom/ClusterIcon.js.map +0 -1
  71. package/dist/src/icons/custom/DeploymentIcon.d.ts +0 -2
  72. package/dist/src/icons/custom/DeploymentIcon.d.ts.map +0 -1
  73. package/dist/src/icons/custom/DeploymentIcon.js +0 -5
  74. package/dist/src/icons/custom/DeploymentIcon.js.map +0 -1
  75. package/dist/src/icons/custom/IpAllowlistIcon.d.ts +0 -2
  76. package/dist/src/icons/custom/IpAllowlistIcon.d.ts.map +0 -1
  77. package/dist/src/icons/custom/IpAllowlistIcon.js +0 -5
  78. package/dist/src/icons/custom/IpAllowlistIcon.js.map +0 -1
  79. package/dist/src/icons/custom/ProcessApplicationIcon.d.ts +0 -2
  80. package/dist/src/icons/custom/ProcessApplicationIcon.d.ts.map +0 -1
  81. package/dist/src/icons/custom/ProcessApplicationIcon.js +0 -5
  82. package/dist/src/icons/custom/ProcessApplicationIcon.js.map +0 -1
  83. package/dist/src/icons/custom/ProjectIcon.d.ts +0 -2
  84. package/dist/src/icons/custom/ProjectIcon.d.ts.map +0 -1
  85. package/dist/src/icons/custom/ProjectIcon.js +0 -5
  86. package/dist/src/icons/custom/ProjectIcon.js.map +0 -1
@@ -1,13 +1,95 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { ChevronDown, MoreVertical } from "lucide-react";
4
+ import { ChevronDown, MoreHorizontal, MoreVertical } from "lucide-react";
5
5
  import { cn } from "../../lib/utils.js";
6
+ import { useIsTruncated } from "../../hooks/use-is-truncated.js";
6
7
  import { camundaAppIcons, camundaIcons } from "../../icons/index.js";
7
8
  import { Button } from "./button.js";
8
9
  import { typographyVariants } from "./typography.js";
9
10
  import { linkDestination, resolveActive, resolveLinkProps, } from "./nav-data.js";
10
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "./dropdown.js";
11
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "./dropdown.js";
12
+ import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
13
+ /**
14
+ * Which segments stay inline, in index order.
15
+ *
16
+ * Priority for staying inline: the LAST segment (the user's current location, never
17
+ * moved into the overflow), then the FIRST (the root identity), then the middles
18
+ * from the one nearest the last, outward. Segments are taken in that order while the
19
+ * running total still fits, and the loop STOPS at the first one that does not —
20
+ * it does not skip ahead to a narrower segment further out. Stopping is what makes
21
+ * the inline set `{first} ∪ {k..last}`: one contiguous run ending at the current
22
+ * location, plus the root. Skipping would punch holes in the middle of the chain and
23
+ * put the trigger in more than one place.
24
+ *
25
+ * The running total charges the LAST segment its full natural width even though it
26
+ * is the one segment allowed to shrink. That is the point: a segment is only ever
27
+ * truncated when the measurement says it genuinely does not fit, so we never keep an
28
+ * extra passed context by spending the current location's readable width on it.
29
+ *
30
+ * It also charges the overflow trigger a separator of its own, because the trigger is
31
+ * punctuated like any other link in the chain — see the `chainLength` comment below
32
+ * and the `<ol>` assembly in `NavBreadcrumb`.
33
+ */
34
+ function fitInlineIndices(metrics, count) {
35
+ const lastIndex = count - 1;
36
+ if (count <= 1)
37
+ return [lastIndex];
38
+ const priority = [lastIndex, 0];
39
+ for (let index = lastIndex - 1; index > 0; index--)
40
+ priority.push(index);
41
+ const kept = [lastIndex];
42
+ let naturalSum = metrics.segments[lastIndex] ?? 0;
43
+ for (let step = 1; step < priority.length; step++) {
44
+ const index = priority[step];
45
+ const nextSum = naturalSum + (metrics.segments[index] ?? 0);
46
+ const segmentCount = kept.length + 1;
47
+ // A trigger is needed exactly when this candidate set still leaves something out.
48
+ const withTrigger = segmentCount < count;
49
+ // The trigger is a LINK IN THE CHAIN, punctuated like one, so it is counted here
50
+ // exactly like a segment: `chainLength` items with a separator between every
51
+ // adjacent pair. Charging the separators against `segmentCount` instead would
52
+ // under-count by one whenever a trigger renders, and the row would overflow by a
53
+ // separator's width at the very widths the fit exists to get right.
54
+ const chainLength = segmentCount + (withTrigger ? 1 : 0);
55
+ const separatorCount = chainLength - 1;
56
+ // `gap-1` sits between every adjacent pair of `<ol>` children, whatever they are.
57
+ const childCount = chainLength + separatorCount;
58
+ const width = nextSum +
59
+ separatorCount * metrics.separator +
60
+ (withTrigger ? metrics.trigger : 0) +
61
+ (childCount - 1) * metrics.gap;
62
+ if (width > metrics.available)
63
+ break;
64
+ kept.push(index);
65
+ naturalSum = nextSum;
66
+ }
67
+ return kept.sort((a, b) => a - b);
68
+ }
69
+ /**
70
+ * Reads the natural widths out of a measurement render's `<ol>`.
71
+ *
72
+ * Classifies children by `data-slot` rather than by position, so a consumer's own
73
+ * custom `<li>` (the composition escape hatch the spec documents) is counted as a
74
+ * segment instead of shifting every index after it.
75
+ */
76
+ function readMetrics(ol) {
77
+ const segments = [];
78
+ let separator = 0;
79
+ let trigger = 0;
80
+ for (const child of Array.from(ol.children)) {
81
+ const width = child.getBoundingClientRect().width;
82
+ const slot = child.getAttribute("data-slot");
83
+ if (slot === "nav-breadcrumb-separator")
84
+ separator = width;
85
+ else if (slot === "nav-breadcrumb-overflow")
86
+ trigger = width;
87
+ else
88
+ segments.push(width);
89
+ }
90
+ const gap = Number.parseFloat(getComputedStyle(ol).columnGap);
91
+ return { segments, separator, trigger, gap: Number.isFinite(gap) ? gap : 0 };
92
+ }
11
93
  /**
12
94
  * Top-nav context switcher — chain of split-button segments separated by `/`.
13
95
  *
@@ -26,22 +108,185 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel,
26
108
  function NavBreadcrumb({ className, children, "aria-label": ariaLabel = "Context navigation", ...props }) {
27
109
  const items = React.Children.toArray(children).filter(Boolean);
28
110
  const lastIndex = items.length - 1;
29
- return (_jsx("nav", { "data-slot": "nav-breadcrumb", "aria-label": ariaLabel, className: className, ...props, children: _jsx("ol", { className: cn("m-0 flex list-none items-center gap-1 p-0", typographyVariants({ variant: "body-subtle" })), children: items.map((child, index) => {
30
- const childKey = React.isValidElement(child) && child.key != null
31
- ? child.key
32
- : `item-${index}`;
33
- // TODO(#507): hard collapse below `md`, not truncation no "…" affordance back to
34
- // the dropped segments.
35
- const isLast = index === lastIndex;
36
- return (_jsxs(React.Fragment, { children: [index > 0 ? (_jsx("li", { "data-slot": "nav-breadcrumb-separator", role: "presentation", "aria-hidden": "true",
37
- // Faded + smaller — separators are decorative; the segments
38
- // themselves carry the visual weight.
39
- className: "hidden select-none text-xs text-neutral-foreground-subtle/40 md:list-item", children: "/" })) : null, isLast || !React.isValidElement(child)
40
- ? child
41
- : React.cloneElement(child, {
42
- className: cn(child.props.className, "hidden md:inline-flex"),
43
- })] }, childKey));
44
- }) }) }));
111
+ const responsive = items.length > 1;
112
+ const navRef = React.useRef(null);
113
+ const olRef = React.useRef(null);
114
+ const [fit, setFit] = React.useState(null);
115
+ // Only key identity and string labelsa ReactNode label would produce a fresh
116
+ // signature every render and re-measure forever.
117
+ const signature = items
118
+ .map((child, index) => {
119
+ if (!React.isValidElement(child))
120
+ return `#${index}`;
121
+ const label = child.props.label;
122
+ return `${String(child.key ?? index)}${typeof label === "string" ? label : ""}`;
123
+ })
124
+ .join(" ");
125
+ // Measurements are stored WITH the chain they describe, so a changed segment set
126
+ // invalidates them during render rather than being detected after the fact. No stale
127
+ // fit ever reaches the DOM, and no state has to be reset from a render.
128
+ const metrics = fit !== null && fit.signature === signature ? fit.metrics : null;
129
+ // The MEASUREMENT pass: every segment inline, every one `shrink-0` so it sits at its
130
+ // natural width, and the overflow trigger present so its own footprint can be read.
131
+ // It is never painted — see the layout effect below. A single-segment breadcrumb has
132
+ // nothing to fit and never enters it: that segment is the current location, and it
133
+ // shrinks and truncates against the container like any last segment.
134
+ const measuring = responsive && metrics === null;
135
+ const inlineIndices = measuring || metrics === null
136
+ ? items.map((_, index) => index)
137
+ : fitInlineIndices(metrics, items.length);
138
+ const inlineSet = new Set(inlineIndices);
139
+ // ONLY what was actually dropped, which is the second defect this rework fixes: the
140
+ // ladder had to list every non-last segment here, because CSS owned the visibility
141
+ // decision and JavaScript could not read it, so the menu offered entries the user
142
+ // could already see. The measurement pass is the exception — it needs the trigger
143
+ // rendered in order to measure it, and nothing is dropped yet.
144
+ const overflowIndices = items
145
+ .map((_, index) => index)
146
+ .filter((index) => measuring ? index !== lastIndex : !inlineSet.has(index));
147
+ const overflowSegments = [];
148
+ for (const index of overflowIndices) {
149
+ const child = items[index];
150
+ if (!React.isValidElement(child))
151
+ continue;
152
+ const childProps = child.props;
153
+ overflowSegments.push({
154
+ key: String(child.key ?? `item-${index}`),
155
+ label: childProps.label,
156
+ icon: childProps.icon,
157
+ switcher: childProps.children,
158
+ actions: childProps.actions,
159
+ navigate: childProps.onClick,
160
+ linkProps: childProps.linkProps,
161
+ linkComponent: childProps.linkComponent,
162
+ trailingElement: childProps.trailingElement,
163
+ });
164
+ }
165
+ const hasOverflow = overflowSegments.length > 0;
166
+ // useLayoutEffect, NOT useEffect: it runs after the DOM is mutated but before the
167
+ // browser paints, and a state update made here is flushed in the same frame. With
168
+ // useEffect the measurement pass — every segment inline, overflowing the container —
169
+ // would be committed, painted, and only then collapsed: a visible jump on every
170
+ // mount. That reflow is the objection that ruled measurement out in the original
171
+ // design, and it is the whole reason this is a layout effect.
172
+ React.useLayoutEffect(() => {
173
+ const nav = navRef.current;
174
+ const ol = olRef.current;
175
+ if (!nav || !ol || !responsive)
176
+ return;
177
+ // Integer, and never the bounding rect: a sub-pixel width would let this effect
178
+ // and the observer below trade updates back and forth forever.
179
+ const available = nav.clientWidth;
180
+ // A breadcrumb inside a `display: none` subtree (an inactive docs tab) measures 0.
181
+ // Fitting against that would drop every segment and stay dropped, since nothing
182
+ // resizes when the subtree is shown again.
183
+ if (available <= 0)
184
+ return;
185
+ if (metrics === null) {
186
+ const measured = readMetrics(ol);
187
+ // A mismatch means the DOM is not the measurement pass this assumes it is;
188
+ // fitting on misaligned indices would drop the wrong segments.
189
+ if (measured.segments.length !== items.length)
190
+ return;
191
+ setFit({ signature, metrics: { ...measured, available } });
192
+ }
193
+ else if (metrics.available !== available) {
194
+ setFit({ signature, metrics: { ...metrics, available } });
195
+ }
196
+ }, [items.length, metrics, responsive, signature]);
197
+ // The container's width comes from the flex layout, not from its content
198
+ // (`flex-1 basis-0`), so dropping a segment cannot narrow the box being measured.
199
+ // That is what makes observing it safe rather than oscillating.
200
+ React.useLayoutEffect(() => {
201
+ const nav = navRef.current;
202
+ if (!nav || !responsive)
203
+ return;
204
+ const observer = new ResizeObserver(() => {
205
+ const available = nav.clientWidth;
206
+ if (available <= 0)
207
+ return;
208
+ setFit((current) => current === null || current.metrics.available === available
209
+ ? current
210
+ : { ...current, metrics: { ...current.metrics, available } });
211
+ });
212
+ observer.observe(nav);
213
+ return () => observer.disconnect();
214
+ }, [responsive]);
215
+ // Natural widths measured against a fallback font are wrong once the real one
216
+ // arrives — usually narrower, so too many segments are kept and the row visibly
217
+ // overflows, with nothing to correct it since widths are re-read only when the
218
+ // segment set changes. Discarding them forces one more measurement pass.
219
+ React.useEffect(() => {
220
+ if (!responsive || document.fonts === undefined)
221
+ return;
222
+ if (document.fonts.status === "loaded")
223
+ return;
224
+ let active = true;
225
+ void document.fonts.ready.then(() => {
226
+ if (active)
227
+ setFit(null);
228
+ });
229
+ return () => {
230
+ active = false;
231
+ };
232
+ }, [responsive]);
233
+ // Conventionally after the root segment. When even the root did not fit, the
234
+ // trigger leads the row instead — it is the only route to everything behind it,
235
+ // and it must not end up on the far side of the clip boundary.
236
+ const triggerLeads = inlineIndices[0] !== 0;
237
+ // The whole chain as one ordered list — segments and the overflow trigger together,
238
+ // because the trigger is a link in the chain and is punctuated like one. Assembling
239
+ // it first, then putting a separator between every adjacent pair, is what makes both
240
+ // "the trigger gets its own preceding `/`" and "no orphan `/` at either end" fall out
241
+ // of the same rule instead of being two conditions to keep in sync. The previous
242
+ // per-segment rule ("render the separator that precedes ME, if I am not index 0")
243
+ // could not see the trigger at all, so the trigger was glued to whatever came before
244
+ // it while every real segment was separated from its predecessor.
245
+ //
246
+ // The trigger is never the LAST entry: `!triggerLeads` means index 0 is inline, and a
247
+ // trigger only exists when something was dropped, which needs depth >= 2 — so the
248
+ // last segment is always inline after it.
249
+ const chain = [];
250
+ const triggerEntry = {
251
+ key: "nav-breadcrumb-overflow",
252
+ node: _jsx(NavBreadcrumbOverflow, { segments: overflowSegments }),
253
+ };
254
+ if (hasOverflow && triggerLeads)
255
+ chain.push(triggerEntry);
256
+ inlineIndices.forEach((index, position) => {
257
+ const child = items[index];
258
+ const childKey = React.isValidElement(child) && child.key != null
259
+ ? child.key
260
+ : `item-${index}`;
261
+ chain.push({
262
+ key: childKey,
263
+ node: !React.isValidElement(child)
264
+ ? child
265
+ : React.cloneElement(child, {
266
+ className: cn(child.props.className,
267
+ // Truncation is a consequence of the measurement, not a policy: every
268
+ // inline segment sits at its natural width, and the LAST one — already
269
+ // the only one guaranteed to be here — absorbs whatever is left over by
270
+ // shrinking and ellipsing its label. During the measurement pass nothing
271
+ // may shrink, or the widths read back are not natural ones.
272
+ measuring || index !== lastIndex ? "shrink-0" : "min-w-0"),
273
+ }),
274
+ });
275
+ if (hasOverflow && !triggerLeads && position === 0)
276
+ chain.push(triggerEntry);
277
+ });
278
+ return (_jsx("nav", { ref: navRef, "data-slot": "nav-breadcrumb", "aria-label": ariaLabel, className: cn(className,
279
+ // Structural classes go LAST, after `className`, so twMerge lets them win over
280
+ // a consumer's conflicting utility (e.g. `flex-none`, a width class) instead of
281
+ // being silently cancelled by it. This is a load-bearing sizing contract, not a
282
+ // style preference a consumer should be able to override.
283
+ //
284
+ // Takes the leftover space in the header row rather than sizing from its
285
+ // content. Required, not cosmetic: with `basis-0` and `min-w-0` the measured
286
+ // width is decided entirely by the flex line, so hiding a segment cannot feed
287
+ // back into the measurement and start an oscillation. A content-sized
288
+ // container would.
289
+ "min-w-0 flex-1 basis-0 overflow-hidden"), ...props, children: _jsx("ol", { ref: olRef, className: cn("m-0 flex list-none items-center gap-1 p-0", typographyVariants({ variant: "body-subtle" })), children: chain.map((entry, position) => (_jsxs(React.Fragment, { children: [position > 0 ? (_jsx("li", { "data-slot": "nav-breadcrumb-separator", role: "presentation", "aria-hidden": "true", className: "shrink-0 select-none text-xs text-neutral-foreground-subtle/40", children: "/" })) : null, entry.node] }, entry.key))) }) }));
45
290
  }
46
291
  function NavBreadcrumbItem({ icon, label, onClick, switchLabel = "Switch context", linkProps, linkComponent, children, actions, actionsLabel, trailingElement, menuElement, active = false, className, }) {
47
292
  // Clone the user's icon so it carries the `data-icon` attribute the
@@ -64,24 +309,152 @@ function NavBreadcrumbItem({ icon, label, onClick, switchLabel = "Switch context
64
309
  const destination = linkDestination(linkProps);
65
310
  const isLink = destination !== undefined;
66
311
  const LinkEl = linkComponent ?? "a";
67
- const labelContent = (_jsxs(_Fragment, { children: [iconWithData, _jsx("span", { className: "inline-block max-w-48 truncate align-bottom", children: label }), trailingElement] }));
68
- return (_jsxs("li", { "data-slot": "nav-breadcrumb-item", className: cn("inline-flex items-center", className), children: [_jsx(Button, { variant: "ghost", size: "sm",
69
- // A link segment renders through Button's Slot so it keeps the ghost styling while
70
- // being a real anchor hoverable href, Cmd-click, "open in new tab", and announced
71
- // as a link rather than a button.
72
- asChild: isLink, onClick: onClick,
73
- // Padding rules:
74
- // • icon present → Button's `has-data-[icon=inline-start]:pl-2`
75
- // already tightens the left; tighten the right when there's a
76
- // switcher so the segment reads as paired.
77
- // no icon force `px-2` so left and right match the same
78
- // 8px the icon variant uses.
79
- className: cn(!icon ? "px-2" : (hasSwitcher || hasActions) && "pr-2", active && "font-medium"), children: isLink ? (_jsx(LinkEl, { ...resolveLinkProps(linkProps, linkComponent !== undefined), children: labelContent })) : (labelContent) }), menuElement, hasActions ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-xs", "aria-label": resolvedActionsLabel, className: "-ml-0.5 text-neutral-foreground-subtle", children: _jsx(MoreVertical, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: visibleActions.map((action) => (_jsxs(React.Fragment, { children: [action.hasDivider ? _jsx(DropdownMenuSeparator, {}) : null, _jsx(DropdownMenuItem, { variant: action.isDanger ? "destructive" : "default", disabled: action.disabled, onClick: action.onClick, children: action.label })] }, action.key))) })] })) : null, hasSwitcher ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-xs", "aria-label": switchLabel,
312
+ // Same condition the overflow menu already uses to fall back to a disabled item
313
+ // (`showNavigateEntry || hasSwitcher || hasActions`, inverted) a segment with none
314
+ // of these has nothing to do when activated. Inline, that segment still rendered at
315
+ // full label strength, indistinguishable from a real destination, so a depth marker
316
+ // like a bare "…" and the overflow trigger's own icon looked like two navigable
317
+ // things sitting side by side. Muting it is the same signal the overflow path already
318
+ // gives for free.
319
+ //
320
+ // `!active` guards the current-location segment specifically: it commonly has none of
321
+ // onClick/linkProps (there is no point linking to the page you are already on) and no
322
+ // switcher or actions either, on a route with neither. That segment is never a
323
+ // placeholder — it IS where the user is — so it must never read as muted regardless of
324
+ // what else it does or doesn't carry.
325
+ const isInert = !active && !onClick && !isLink && !hasSwitcher && !hasActions;
326
+ const { ref: labelRef, isTruncated, measure, } = useIsTruncated();
327
+ // Every commit, not just on a `label` change: whether this label is clipped is now
328
+ // decided by how much room `NavBreadcrumb`'s measurement left this segment, and a
329
+ // container resize changes that with no label change to key on. `NavBreadcrumb`
330
+ // re-renders its children whenever the fit changes, so this runs exactly when the
331
+ // answer can have moved. `setIsTruncated` bails on an unchanged value, so a commit
332
+ // that changed nothing costs two layout reads and no re-render.
333
+ //
334
+ // The `onPointerEnter`/`onFocus` calls on the button below stay as a freshness check
335
+ // for anything that resizes the label without re-rendering it (a font swap, a zoom
336
+ // change).
337
+ React.useLayoutEffect(() => {
338
+ measure();
339
+ });
340
+ const labelSpan = (_jsx("span", { ref: labelRef,
341
+ // No max-width: a cap applied at every width is exactly what made short names
342
+ // truncate with room to spare. The span ellipses only when its segment is the
343
+ // one absorbing the leftover space and there genuinely is not enough — see the
344
+ // `shrink-0`/`min-w-0` split in `NavBreadcrumb`. `truncate`'s own
345
+ // `overflow: hidden` is what lets it shrink below its content width as a flex
346
+ // item at all.
347
+ className: "inline-block truncate align-bottom", children: label }));
348
+ const labelContent = (_jsxs(_Fragment, { children: [iconWithData, labelSpan, trailingElement] }));
349
+ // The label BUTTON, not the inner label span: the button (or, when `isLink`, the anchor it
350
+ // slots into) is the element Tab actually lands on, so it must be the same element Radix opens
351
+ // the tooltip from and the one `measure()` fires on — attaching either to the inner span would
352
+ // leave both dead on a keyboard, since the span itself is never a focus stop.
353
+ const labelButton = (_jsx(Button, { variant: "ghost", size: "sm",
354
+ // A link segment renders through Button's Slot so it keeps the ghost styling while
355
+ // being a real anchor — hoverable href, Cmd-click, "open in new tab", and announced
356
+ // as a link rather than a button.
357
+ asChild: isLink, onClick: onClick, onPointerEnter: measure, onFocus: measure,
358
+ // Padding rules:
359
+ // • icon present → Button's `has-data-[icon=inline-start]:pl-2`
360
+ // already tightens the left; tighten the right when there's a
361
+ // switcher so the segment reads as paired.
362
+ // • no icon → force `px-2` so left and right match the same
363
+ // 8px the icon variant uses.
364
+ className: cn(
365
+ // `ring-inset`: this button lives inside `<nav>`'s own `overflow-hidden` —
366
+ // a flush ring there clips exactly like the AppHeader breadcrumb-wrapper bug
367
+ // #522 fixed, one DOM level deeper. Same fix as that PR's Scroll/dense-rows
368
+ // rule (`docs/specs/shadcn/accessibility.md`), applied here for the same reason.
369
+ "focus-visible:ring-inset",
370
+ // Button is `shrink-0` by default. The label button has to be the part that
371
+ // yields when `NavBreadcrumb` hands this segment less than its natural width,
372
+ // and `min-w-0` is what lets it shrink past its content — without it the
373
+ // `truncate` on the span inside can never engage.
374
+ "min-w-0 shrink", !icon ? "px-2" : (hasSwitcher || hasActions) && "pr-2", active && "font-medium",
375
+ // Same muted tone the overflow trigger's own icon uses — an inert segment
376
+ // reads as a label, not as a second navigable thing next to it. `ghost`'s own
377
+ // hover/active backgrounds are cancelled too: a background swap on pointer-over
378
+ // is itself a promise that something happens on click, which is exactly what an
379
+ // inert segment cannot make good on.
380
+ isInert &&
381
+ "text-neutral-foreground-subtle hover:bg-transparent active:bg-transparent"), children: isLink ? (_jsx(LinkEl, { ...resolveLinkProps(linkProps, linkComponent !== undefined), children: labelContent })) : (labelContent) }));
382
+ // Mounted ONLY when clipped, not merely visually gated behind a controlled `open`: an
383
+ // uncontrolled `<Tooltip>` present unconditionally would still run Radix's own open machinery
384
+ // on every hover/focus of a SHORT label too, dispatching its document-level `tooltip.open`
385
+ // event and touching the shared `TooltipProvider` delay-skip state — app-wide side effects a
386
+ // segment that never clips has no business causing. A controlled `open={openState &&
387
+ // isTruncated}` was tried and reverted for the same reason plus a second one: Radix's
388
+ // `useControllableState` only calls `onChange` when the requested value actually differs from
389
+ // the current controlled prop, so the CLOSE request — which asks for the same `false` the prop
390
+ // already was — never fires `onOpenChange`, permanently stranding an internal "open" flag at
391
+ // `true`; the OPEN request still fires once regardless, which is the same document-dispatch
392
+ // problem this paragraph opens with, just with an extra piece of leaking state besides. Not
393
+ // rendering the subtree at all is what actually removes both, and lets `<Tooltip>` stay fully
394
+ // uncontrolled with Radix's own normal delay behavior intact.
395
+ const labelElement = isTruncated ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: labelButton }), _jsx(TooltipContent, { children: label })] })) : (labelButton);
396
+ return (_jsxs("li", { "data-slot": "nav-breadcrumb-item", className: cn("inline-flex items-center", className), children: [labelElement, menuElement, hasActions ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-xs", "aria-label": resolvedActionsLabel,
397
+ // `ring-inset` — see the label button's comment above; same nav, same clip.
398
+ className: "-ml-0.5 text-neutral-foreground-subtle focus-visible:ring-inset", children: _jsx(MoreVertical, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: visibleActions.map((action) => (_jsxs(React.Fragment, { children: [action.hasDivider ? _jsx(DropdownMenuSeparator, {}) : null, _jsx(DropdownMenuItem, { variant: action.isDanger ? "destructive" : "default", disabled: action.disabled, onClick: action.onClick, children: action.label })] }, action.key))) })] })) : null, hasSwitcher ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-xs", "aria-label": switchLabel,
80
399
  // Tighten the gap so the chevron reads as paired with the
81
400
  // label, not a sibling segment. `text-neutral-foreground-subtle`
82
401
  // matches the `/` separator — secondary affordance,
83
- // but readable.
84
- className: "-ml-0.5 text-neutral-foreground-subtle", children: _jsx(ChevronDown, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: children })] })) : null] }));
402
+ // but readable. `ring-inset` — see the label button's comment above.
403
+ className: "-ml-0.5 text-neutral-foreground-subtle focus-visible:ring-inset", children: _jsx(ChevronDown, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: children })] })) : null] }));
404
+ }
405
+ /**
406
+ * The segments that did not fit, as a two-level menu.
407
+ *
408
+ * Not `BreadcrumbEllipsis` from `breadcrumb.tsx`: that is `role="presentation"` and
409
+ * `aria-hidden`, so it would announce hidden content while offering no way to reach
410
+ * it. This is a real button, and each entry keeps the segment's navigation (including
411
+ * link semantics), switcher rows, actions (including per-action dividers) and trailing
412
+ * element — see `OverflowSegment`'s own doc comment for the two capabilities this
413
+ * deliberately does NOT carry over (`active`, `menuElement`) and why.
414
+ *
415
+ * Radix submenu primitives carry the keyboard and focus behavior, so none of it is
416
+ * reimplemented here.
417
+ *
418
+ * `NavBreadcrumb` renders this only when its measurement actually dropped something,
419
+ * and passes exactly what it dropped — so the trigger's `Show N hidden levels` name
420
+ * is an exact count, not an upper bound.
421
+ */
422
+ function NavBreadcrumbOverflow({ segments, label, className, }) {
423
+ if (segments.length === 0)
424
+ return null;
425
+ const triggerLabel = label ??
426
+ `Show ${segments.length} hidden ${segments.length === 1 ? "level" : "levels"}`;
427
+ return (_jsx("li", { "data-slot": "nav-breadcrumb-overflow", className: cn("inline-flex shrink-0 items-center", className), children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-xs", "aria-label": triggerLabel,
428
+ // `ring-inset` — see the label button's comment in NavBreadcrumbItem;
429
+ // this trigger is also inside the same `overflow-hidden` <nav>.
430
+ className: "text-neutral-foreground-subtle focus-visible:ring-inset", children: _jsx(MoreHorizontal, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: segments.map((segment) => {
431
+ // Same aria-hidden clone the inline path applies (see NavBreadcrumbItem's
432
+ // `iconWithData`) — without it the icon's raw SVG can bleed into the
433
+ // SubTrigger's computed accessible name.
434
+ const iconWithData = segment.icon && React.isValidElement(segment.icon)
435
+ ? React.cloneElement(segment.icon, { "aria-hidden": "true" })
436
+ : null;
437
+ // `switcher={[]}` (or `children` filtered to empty) is truthy — same hazard
438
+ // NavBreadcrumbItem's own `hasSwitcher` guards against, and the exact shape
439
+ // Task 7 will pass straight through from a segment's inline `children`.
440
+ const hasSwitcher = React.Children.toArray(segment.switcher).filter(Boolean).length >
441
+ 0;
442
+ const visibleActions = segment.actions?.filter(Boolean) ?? [];
443
+ const hasActions = visibleActions.length > 0;
444
+ const destination = linkDestination(segment.linkProps);
445
+ const isLink = destination !== undefined;
446
+ const LinkEl = segment.linkComponent ?? "a";
447
+ const showNavigateEntry = Boolean(segment.navigate) || isLink;
448
+ const goToContent = (_jsxs(_Fragment, { children: [typeof segment.label === "string"
449
+ ? `Go to ${segment.label}`
450
+ : "Go to this level", segment.trailingElement] }));
451
+ // An honest empty state: a segment with nothing to navigate to, switch to, or
452
+ // act on gets a plain, disabled item instead of a submenu that opens onto nothing.
453
+ if (!showNavigateEntry && !hasSwitcher && !hasActions) {
454
+ return (_jsxs(DropdownMenuItem, { disabled: true, children: [iconWithData, segment.label] }, segment.key));
455
+ }
456
+ return (_jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { children: [iconWithData, segment.label] }), _jsxs(DropdownMenuSubContent, { children: [showNavigateEntry ? (_jsx(DropdownMenuItem, { asChild: isLink, onClick: segment.navigate, children: isLink ? (_jsx(LinkEl, { ...resolveLinkProps(segment.linkProps, segment.linkComponent !== undefined), children: goToContent })) : (goToContent) })) : null, showNavigateEntry && hasSwitcher ? (_jsx(DropdownMenuSeparator, {})) : null, segment.switcher, (showNavigateEntry || hasSwitcher) && hasActions ? (_jsx(DropdownMenuSeparator, {})) : null, visibleActions.map((action) => (_jsxs(React.Fragment, { children: [action.hasDivider ? _jsx(DropdownMenuSeparator, {}) : null, _jsx(DropdownMenuItem, { variant: action.isDanger ? "destructive" : "default", disabled: action.disabled, onClick: action.onClick, children: action.label })] }, action.key)))] })] }, segment.key));
457
+ }) })] }) }));
85
458
  }
86
459
  /**
87
460
  * `NavBreadcrumb` built from data instead of composition.
@@ -205,5 +578,5 @@ function buildSegmentDescriptor(segment) {
205
578
  export function NavSwitcher({ segments, activeItemKey, linkComponent, "aria-label": ariaLabel, className, }) {
206
579
  return (_jsx(NavBreadcrumbSwitcher, { items: segments.map(buildSegmentDescriptor), activeItemKey: activeItemKey, linkComponent: linkComponent, "aria-label": ariaLabel, className: className }));
207
580
  }
208
- export { NavBreadcrumb, NavBreadcrumbItem };
581
+ export { NavBreadcrumb, NavBreadcrumbItem, NavBreadcrumbOverflow };
209
582
  //# sourceMappingURL=nav-breadcrumb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav-breadcrumb.js","sourceRoot":"","sources":["../../../../src/components/ui/nav-breadcrumb.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nav-breadcrumb.js","sourceRoot":"","sources":["../../../../src/components/ui/nav-breadcrumb.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA+BpE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,gBAAgB,CACvB,OAA6B,EAC7B,KAAa;IAEb,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChC,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzE,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAElD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,kFAAkF;QAClF,MAAM,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC;QACzC,iFAAiF;QACjF,6EAA6E;QAC7E,8EAA8E;QAC9E,iFAAiF;QACjF,oEAAoE;QACpE,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC;QACvC,kFAAkF;QAClF,MAAM,UAAU,GAAG,WAAW,GAAG,cAAc,CAAC;QAChD,MAAM,KAAK,GACT,OAAO;YACP,cAAc,GAAG,OAAO,CAAC,SAAS;YAClC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QAEjC,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS;YAAE,MAAM;QAErC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAClB,EAAoB;IAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,IAAI,KAAK,0BAA0B;YAAE,SAAS,GAAG,KAAK,CAAC;aACtD,IAAI,IAAI,KAAK,yBAAyB;YAAE,OAAO,GAAG,KAAK,CAAC;;YACxD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/E,CAAC;AAmBD;;;;;;;;;;;;;;GAcG;AACH,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,YAAY,EAAE,SAAS,GAAG,oBAAoB,EAC9C,GAAG,KAAK,EACoB;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAqB,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAA0B,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAG1B,IAAI,CAAC,CAAC;IAEhB,gFAAgF;IAChF,iDAAiD;IACjD,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,KAAK,EAAE,CAAC;QACrD,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgC,CAAC,KAAK,CAAC;QAC5D,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,iFAAiF;IACjF,qFAAqF;IACrF,wEAAwE;IACxE,MAAM,OAAO,GACX,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnE,qFAAqF;IACrF,oFAAoF;IACpF,qFAAqF;IACrF,mFAAmF;IACnF,qEAAqE;IACrE,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,KAAK,IAAI,CAAC;IACjD,MAAM,aAAa,GACjB,SAAS,IAAI,OAAO,KAAK,IAAI;QAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAEzC,oFAAoF;IACpF,mFAAmF;IACnF,kFAAkF;IAClF,kFAAkF;IAClF,+DAA+D;IAC/D,MAAM,eAAe,GAAG,KAAK;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAChB,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CACxD,CAAC;IAEJ,MAAM,gBAAgB,GAAsB,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,SAAS;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,KAA+B,CAAC;QACzD,gBAAgB,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,KAAK,EAAE,CAAC;YACzC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,QAAQ,EAAE,UAAU,CAAC,OAAmC;YACxD,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,eAAe,EAAE,UAAU,CAAC,eAAe;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhD,kFAAkF;IAClF,kFAAkF;IAClF,qFAAqF;IACrF,gFAAgF;IAChF,iFAAiF;IACjF,8DAA8D;IAC9D,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU;YAAE,OAAO;QAEvC,gFAAgF;QAChF,+DAA+D;QAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC;QAClC,mFAAmF;QACnF,gFAAgF;QAChF,2CAA2C;QAC3C,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO;QAE3B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,2EAA2E;YAC3E,+DAA+D;YAC/D,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAAE,OAAO;YACtD,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnD,yEAAyE;IACzE,kFAAkF;IAClF,gEAAgE;IAChE,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU;YAAE,OAAO;QAChC,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC;YAClC,IAAI,SAAS,IAAI,CAAC;gBAAE,OAAO;YAC3B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACjB,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;gBACzD,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAC/D,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,8EAA8E;IAC9E,gFAAgF;IAChF,+EAA+E;IAC/E,yEAAyE;IACzE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QAC/C,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,6EAA6E;IAC7E,gFAAgF;IAChF,+DAA+D;IAC/D,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE5C,oFAAoF;IACpF,oFAAoF;IACpF,qFAAqF;IACrF,sFAAsF;IACtF,iFAAiF;IACjF,kFAAkF;IAClF,qFAAqF;IACrF,kEAAkE;IAClE,EAAE;IACF,sFAAsF;IACtF,kFAAkF;IAClF,0CAA0C;IAC1C,MAAM,KAAK,GAAgD,EAAE,CAAC;IAC9D,MAAM,YAAY,GAAG;QACnB,GAAG,EAAE,yBAAyB;QAC9B,IAAI,EAAE,KAAC,qBAAqB,IAAC,QAAQ,EAAE,gBAAgB,GAAI;KAC5D,CAAC;IACF,IAAI,WAAW,IAAI,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GACZ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;YAC9C,CAAC,CAAC,KAAK,CAAC,GAAG;YACX,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;QAEtB,KAAK,CAAC,IAAI,CAAC;YACT,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;gBAChC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,KAAK,CAAC,YAAY,CAChB,KAAmD,EACnD;oBACE,SAAS,EAAE,EAAE,CACV,KAAK,CAAC,KAAgC,CAAC,SAAS;oBACjD,sEAAsE;oBACtE,uEAAuE;oBACvE,wEAAwE;oBACxE,yEAAyE;oBACzE,4DAA4D;oBAC5D,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAC1D;iBACF,CACF;SACN,CAAC,CAAC;QAEH,IAAI,WAAW,IAAI,CAAC,YAAY,IAAI,QAAQ,KAAK,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,cACE,GAAG,EAAE,MAAM,eACD,gBAAgB,gBACd,SAAS,EACrB,SAAS,EAAE,EAAE,CACX,SAAS;QACT,+EAA+E;QAC/E,gFAAgF;QAChF,gFAAgF;QAChF,0DAA0D;QAC1D,EAAE;QACF,yEAAyE;QACzE,6EAA6E;QAC7E,8EAA8E;QAC9E,sEAAsE;QACtE,mBAAmB;QACnB,wCAAwC,CACzC,KACG,KAAK,YAET,aACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,EAAE,CACX,2CAA2C,EAC3C,kBAAkB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAC/C,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAC9B,MAAC,KAAK,CAAC,QAAQ,eAIZ,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CACd,0BACY,0BAA0B,EACpC,IAAI,EAAC,cAAc,iBACP,MAAM,EAClB,SAAS,EAAC,gEAAgE,kBAGvE,CACN,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,KAdQ,KAAK,CAAC,GAAG,CAeb,CAClB,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC;AAsED,SAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,WAAW,GAAG,gBAAgB,EAC9B,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,MAAM,GAAG,KAAK,EACd,SAAS,GACc;IACvB,oEAAoE;IACpE,iDAAiD;IACjD,MAAM,YAAY,GAChB,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,YAAY,CAChB,IAAmD,EACnD,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,CACvD;QACH,CAAC,CAAC,IAAI,CAAC;IAEX,sEAAsE;IACtE,uEAAuE;IACvE,mEAAmE;IACnE,yBAAyB;IACzB,EAAE;IACF,0FAA0F;IAC1F,6FAA6F;IAC7F,MAAM,WAAW,GACf,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GACxB,YAAY;QACZ,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC;IACzC,MAAM,MAAM,GAAsB,aAAa,IAAI,GAAG,CAAC;IAEvD,gFAAgF;IAChF,qFAAqF;IACrF,oFAAoF;IACpF,oFAAoF;IACpF,gFAAgF;IAChF,sFAAsF;IACtF,kBAAkB;IAClB,EAAE;IACF,sFAAsF;IACtF,sFAAsF;IACtF,+EAA+E;IAC/E,uFAAuF;IACvF,sCAAsC;IACtC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC;IAE9E,MAAM,EACJ,GAAG,EAAE,QAAQ,EACb,WAAW,EACX,OAAO,GACR,GAAG,cAAc,EAAmB,CAAC;IAEtC,mFAAmF;IACnF,kFAAkF;IAClF,gFAAgF;IAChF,kFAAkF;IAClF,mFAAmF;IACnF,gEAAgE;IAChE,EAAE;IACF,qFAAqF;IACrF,mFAAmF;IACnF,WAAW;IACX,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAChB,eACE,GAAG,EAAE,QAAQ;QACb,8EAA8E;QAC9E,8EAA8E;QAC9E,+EAA+E;QAC/E,kEAAkE;QAClE,8EAA8E;QAC9E,eAAe;QACf,SAAS,EAAC,oCAAoC,YAE7C,KAAK,GACD,CACR,CAAC;IAEF,MAAM,YAAY,GAAG,CACnB,8BACG,YAAY,EACZ,SAAS,EACT,eAAe,IACf,CACJ,CAAC;IAEF,2FAA2F;IAC3F,+FAA+F;IAC/F,+FAA+F;IAC/F,8EAA8E;IAC9E,MAAM,WAAW,GAAG,CAClB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI;QACT,mFAAmF;QACnF,oFAAoF;QACpF,kCAAkC;QAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,OAAO;QAChB,iBAAiB;QACjB,kEAAkE;QAClE,kEAAkE;QAClE,+CAA+C;QAC/C,8DAA8D;QAC9D,iCAAiC;QACjC,SAAS,EAAE,EAAE;QACX,2EAA2E;QAC3E,6EAA6E;QAC7E,4EAA4E;QAC5E,iFAAiF;QACjF,0BAA0B;QAC1B,4EAA4E;QAC5E,8EAA8E;QAC9E,yEAAyE;QACzE,kDAAkD;QAClD,gBAAgB,EAChB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,MAAM,EACtD,MAAM,IAAI,aAAa;QACvB,0EAA0E;QAC1E,8EAA8E;QAC9E,gFAAgF;QAChF,gFAAgF;QAChF,qCAAqC;QACrC,OAAO;YACL,2EAA2E,CAC9E,YAEA,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,MAAM,OAAK,gBAAgB,CAAC,SAAS,EAAE,aAAa,KAAK,SAAS,CAAC,YACjE,YAAY,GACN,CACV,CAAC,CAAC,CAAC,CACF,YAAY,CACb,GACM,CACV,CAAC;IAEF,sFAAsF;IACtF,8FAA8F;IAC9F,2FAA2F;IAC3F,6FAA6F;IAC7F,qFAAqF;IACrF,sFAAsF;IACtF,8FAA8F;IAC9F,+FAA+F;IAC/F,6FAA6F;IAC7F,4FAA4F;IAC5F,4FAA4F;IAC5F,8FAA8F;IAC9F,8DAA8D;IAC9D,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CACjC,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBAAE,WAAW,GAAkB,EACtD,KAAC,cAAc,cAAE,KAAK,GAAkB,IAChC,CACX,CAAC,CAAC,CAAC,CACF,WAAW,CACZ,CAAC;IAEF,OAAO,CACL,2BACY,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,aAEnD,YAAY,EACZ,WAAW,EACX,UAAU,CAAC,CAAC,CAAC,CACZ,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,gBACF,oBAAoB;4BAChC,4EAA4E;4BAC5E,SAAS,EAAC,iEAAiE,YAE3E,KAAC,YAAY,KAAG,GACT,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,OAAO,YAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC9B,MAAC,KAAK,CAAC,QAAQ,eACZ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAC,qBAAqB,KAAG,CAAC,CAAC,CAAC,IAAI,EACrD,KAAC,gBAAgB,IACf,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACpD,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,OAAO,YAEtB,MAAM,CAAC,KAAK,GACI,KARA,MAAM,CAAC,GAAG,CASd,CAClB,CAAC,GACkB,IACT,CAChB,CAAC,CAAC,CAAC,IAAI,EACP,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,gBACF,WAAW;4BACvB,0DAA0D;4BAC1D,iEAAiE;4BACjE,oDAAoD;4BACpD,qEAAqE;4BACrE,SAAS,EAAC,iEAAiE,YAE3E,KAAC,WAAW,KAAG,GACR,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,OAAO,YAAE,QAAQ,GAAuB,IACtD,CAChB,CAAC,CAAC,CAAC,IAAI,IACL,CACN,CAAC;AACJ,CAAC;AAgDD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,qBAAqB,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,SAAS,GAKV;IACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,YAAY,GAChB,KAAK;QACL,QAAQ,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEjF,OAAO,CACL,0BACY,yBAAyB,EACnC,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,YAE7D,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,gBACF,YAAY;wBACxB,sEAAsE;wBACtE,gEAAgE;wBAChE,SAAS,EAAC,yDAAyD,YAEnE,KAAC,cAAc,KAAG,GACX,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,OAAO,YAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;wBACxB,0EAA0E;wBAC1E,qEAAqE;wBACrE,yCAAyC;wBACzC,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;4BAChD,CAAC,CAAC,KAAK,CAAC,YAAY,CAChB,OAAO,CAAC,IAAmD,EAC3D,EAAE,aAAa,EAAE,MAAM,EAAE,CAC1B;4BACH,CAAC,CAAC,IAAI,CAAC;wBAEX,4EAA4E;wBAC5E,4EAA4E;wBAC5E,wEAAwE;wBACxE,MAAM,WAAW,GACf,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;4BAC/D,CAAC,CAAC;wBACJ,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;wBAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;wBAE7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBACvD,MAAM,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC;wBACzC,MAAM,MAAM,GAAsB,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;wBAC/D,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;wBAE9D,MAAM,WAAW,GAAG,CAClB,8BACG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;oCAChC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE;oCAC1B,CAAC,CAAC,kBAAkB,EACrB,OAAO,CAAC,eAAe,IACvB,CACJ,CAAC;wBAEF,8EAA8E;wBAC9E,mFAAmF;wBACnF,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;4BACtD,OAAO,CACL,MAAC,gBAAgB,IAAmB,QAAQ,mBACzC,YAAY,EACZ,OAAO,CAAC,KAAK,KAFO,OAAO,CAAC,GAAG,CAGf,CACpB,CAAC;wBACJ,CAAC;wBAED,OAAO,CACL,MAAC,eAAe,eACd,MAAC,sBAAsB,eACpB,YAAY,EACZ,OAAO,CAAC,KAAK,IACS,EACzB,MAAC,sBAAsB,eACpB,iBAAiB,CAAC,CAAC,CAAC,CACnB,KAAC,gBAAgB,IACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,QAAQ,YAExB,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,MAAM,OACD,gBAAgB,CAClB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,KAAK,SAAS,CACpC,YAEA,WAAW,GACL,CACV,CAAC,CAAC,CAAC,CACF,WAAW,CACZ,GACgB,CACpB,CAAC,CAAC,CAAC,IAAI,EAEP,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC,CAClC,KAAC,qBAAqB,KAAG,CAC1B,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,CAAC,QAAQ,EAEhB,CAAC,iBAAiB,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAClD,KAAC,qBAAqB,KAAG,CAC1B,CAAC,CAAC,CAAC,IAAI,EACP,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC9B,MAAC,KAAK,CAAC,QAAQ,eACZ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAC,qBAAqB,KAAG,CAAC,CAAC,CAAC,IAAI,EACrD,KAAC,gBAAgB,IACf,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACpD,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,OAAO,YAEtB,MAAM,CAAC,KAAK,GACI,KARA,MAAM,CAAC,GAAG,CASd,CAClB,CAAC,IACqB,KA9CL,OAAO,CAAC,GAAG,CA+Cf,CACnB,CAAC;oBACJ,CAAC,CAAC,GACkB,IACT,GACZ,CACN,CAAC;AACJ,CAAC;AAuDD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,KAAK,EACL,aAAa,EACb,aAAa,EACb,YAAY,EAAE,SAAS,EACvB,SAAS,GACkB;IAC3B,OAAO,CACL,KAAC,aAAa,kBAAa,SAAS,EAAE,SAAS,EAAE,SAAS,YACvD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;gBAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;YAEtC,OAAO,CACL,KAAC,iBAAiB,IAEhB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,KAAG,CAAC,CAAC,CAAC,SAAS,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,eAAe,EAAE,IAAI,CAAC,eAAe,EACrC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,WAAW,EAAE,IAAI,CAAC,iBAAiB,YAElC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjB,8BACG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CACpB,KAAC,iBAAiB,cAAE,IAAI,CAAC,aAAa,GAAqB,CAC5D,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IACrB,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,YAE/C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,KAAC,WAAW,IAEV,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,IAFvB,GAAG,CAAC,GAAG,CAGZ,CACH,CAAC,GACqB,IACxB,CACJ,CAAC,CAAC,CAAC,IAAI,IA7BH,IAAI,CAAC,GAAG,CA8BK,CACrB,CAAC;QACJ,CAAC,CAAC,GACY,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAC3B,IAAiC,EACjC,aAAiC;IAEjC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,gFAAgF;QAChF,MAAM,QAAQ,GACZ,GAAG,CAAC,UAAU,KAAK,SAAS;YAC1B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,QAAQ;YAAE,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,GAAG,EACH,aAAa,GAId;IACC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,MAAM,MAAM,GAAsB,aAAa,IAAI,GAAG,CAAC;IAEvD,MAAM,OAAO,GAAG,CACd,8BACG,OAAO,CAAC,CAAC,CAAC,KAAC,OAAO,yBAAa,SAAS,EAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,IAAI,EACrE,eAAM,SAAS,EAAC,iBAAiB,YAAE,GAAG,CAAC,KAAK,GAAQ,EACnD,GAAG,CAAC,eAAe,IACnB,CACJ,CAAC;IAEF,OAAO,CACL,KAAC,qBAAqB,IACpB,KAAK,EAAE,GAAG,CAAC,GAAG,EACd,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,OAAO,EAAE,WAAW,KAAK,SAAS,YAEjC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3B,KAAC,MAAM,OACD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,KAAK,SAAS,CAAC,YAE/D,OAAO,GACD,CACV,CAAC,CAAC,CAAC,CACF,OAAO,CACR,GACqB,CACzB,CAAC;AACJ,CAAC;AAkDD,SAAS,eAAe,CACtB,KAAkC,EAClC,UAA8B;IAE9B,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,CAAC,UAAU,KAAK,SAAS;QAC3B,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,KAAK,UAAU,EAAE;QAClD,CAAC,CAAC,IAAI,CACT,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAA2B,EAC3B,QAAiC;IAEjC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa;QAC5D,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;QACxE,uFAAuF;QACvF,uCAAuC;QACvC,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACnD,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED,qIAAqI;AACrI,MAAM,UAAU,2BAA2B,CACzC,KAA0B;IAE1B,OAAO,uBAAuB,CAAC,KAAK,EAAE;QACpC,IAAI,EAAE,YAAY,CAAC,YAAY;QAC/B,iBAAiB,EAAE,qBAAqB;QACxC,aAAa,EAAE,eAAe;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,+BAA+B,CAC7C,KAA8B;IAE9B,OAAO,uBAAuB,CAAC,KAAK,EAAE;QACpC,IAAI,EAAE,YAAY,CAAC,OAAO;QAC1B,iBAAiB,EAAE,gBAAgB;QACnC,aAAa,EAAE,UAAU;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA0B;IAE1B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAClC,OAAO,uBAAuB,CAAC,IAAI,EAAE;QACnC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAChE,iBAAiB,EAAE,YAAY;QAC/B,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAYD,SAAS,sBAAsB,CAC7B,OAA2B;IAE3B,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1C,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1C,OAAO,+BAA+B,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1C,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAWD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,EACb,aAAa,EACb,YAAY,EAAE,SAAS,EACvB,SAAS,GACQ;IACjB,OAAO,CACL,KAAC,qBAAqB,IACpB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAC3C,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,gBAChB,SAAS,EACrB,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,8 +1,14 @@
1
1
  import * as React from "react";
2
2
  import { Tooltip as TooltipPrimitive } from "radix-ui";
3
+ /**
4
+ * Whether a `TooltipProvider` sits above this subtree. Radix does not expose
5
+ * provider presence, so we track it ourselves to warn on the silent-failure
6
+ * case. Exported for stories only — deliberately absent from `src/index.ts`.
7
+ */
8
+ declare const TooltipProviderPresenceContext: React.Context<boolean>;
3
9
  declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>): React.JSX.Element;
4
10
  declare function Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>): React.JSX.Element;
5
11
  declare function TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>): React.JSX.Element;
6
12
  declare function TooltipContent({ className, sideOffset, children, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content>): React.JSX.Element;
7
- export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
13
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipProviderPresenceContext, };
8
14
  //# sourceMappingURL=tooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAKvD,iBAAS,eAAe,CAAC,EACvB,aAAiB,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,qBAQxD;AAED,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,qBAOpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,qBAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,qBAuBvD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAKvD;;;;GAIG;AACH,QAAA,MAAM,8BAA8B,wBAA6B,CAAC;AAElE,iBAAS,eAAe,CAAC,EACvB,aAAiB,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,qBAUxD;AAED,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,qBAsBpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,qBAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,qBAuBvD;AAED,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,EACf,8BAA8B,GAC/B,CAAC"}
@@ -4,8 +4,14 @@ import * as React from "react";
4
4
  import { Tooltip as TooltipPrimitive } from "radix-ui";
5
5
  import { cn } from "../../lib/utils.js";
6
6
  import { C4Provider } from "./c4-provider.js";
7
+ /**
8
+ * Whether a `TooltipProvider` sits above this subtree. Radix does not expose
9
+ * provider presence, so we track it ourselves to warn on the silent-failure
10
+ * case. Exported for stories only — deliberately absent from `src/index.ts`.
11
+ */
12
+ const TooltipProviderPresenceContext = React.createContext(false);
7
13
  function TooltipProvider({ delayDuration = 0, ...props }) {
8
- return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }));
14
+ return (_jsx(TooltipProviderPresenceContext.Provider, { value: true, children: _jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }) }));
9
15
  }
10
16
  function Tooltip({ ...props }) {
11
17
  // No per-tooltip Provider wrapper — that creates nested providers when a
@@ -13,6 +19,17 @@ function Tooltip({ ...props }) {
13
19
  // misfire (tooltip never reaches `data-state="open"`). Consumers must
14
20
  // render exactly one `<TooltipProvider>` at the app/page root, or rely on
15
21
  // Storybook's preview decorator to provide it.
22
+ const hasProvider = React.useContext(TooltipProviderPresenceContext);
23
+ // In an effect rather than inline in the render body: this fires once per
24
+ // mount instead of on every re-render, so a busy parent cannot flood the
25
+ // console with the same message.
26
+ React.useEffect(() => {
27
+ if (process.env.NODE_ENV === "development" && !hasProvider) {
28
+ console.warn("Tooltip: no <TooltipProvider> found above this tooltip. Radix needs exactly " +
29
+ "one at the app root; without it the tooltip never opens. Render " +
30
+ "<TooltipProvider> once, at the root of your app.");
31
+ }
32
+ }, [hasProvider]);
16
33
  return _jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
17
34
  }
18
35
  function TooltipTrigger({ ...props }) {
@@ -27,5 +44,5 @@ function TooltipContent({ className, sideOffset = 4, children, ...props }) {
27
44
  // as conflicts on the same property and silently drops one.
28
45
  "z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md bg-foreground px-2 py-1 text-xs text-background text-balance shadow-md ring-1 ring-border transition-opacity duration-150", className), ...props, children: children }) }) }));
29
46
  }
30
- export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
47
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipProviderPresenceContext, };
31
48
  //# sourceMappingURL=tooltip.js.map