@camunda/design-system 0.49.0 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/ui/app-header.d.ts.map +1 -1
- package/dist/src/components/ui/app-header.js +72 -1
- package/dist/src/components/ui/app-header.js.map +1 -1
- package/dist/src/components/ui/data-table.js +22 -2
- package/dist/src/components/ui/data-table.js.map +1 -1
- package/dist/src/components/ui/inline-edit.d.ts.map +1 -1
- package/dist/src/components/ui/inline-edit.js +33 -5
- package/dist/src/components/ui/inline-edit.js.map +1 -1
- package/dist/src/components/ui/nav-breadcrumb.d.ts +66 -1
- package/dist/src/components/ui/nav-breadcrumb.d.ts.map +1 -1
- package/dist/src/components/ui/nav-breadcrumb.js +386 -34
- package/dist/src/components/ui/nav-breadcrumb.js.map +1 -1
- package/dist/src/components/ui/tooltip.d.ts +7 -1
- package/dist/src/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/components/ui/tooltip.js +19 -2
- package/dist/src/components/ui/tooltip.js.map +1 -1
- package/dist/src/examples/project-detail/ProjectDetailPage.d.ts.map +1 -1
- package/dist/src/examples/project-detail/ProjectDetailPage.js.map +1 -1
- package/dist/src/hooks/use-is-truncated.d.ts +16 -0
- package/dist/src/hooks/use-is-truncated.d.ts.map +1 -0
- package/dist/src/hooks/use-is-truncated.js +24 -0
- package/dist/src/hooks/use-is-truncated.js.map +1 -0
- package/dist/src/icons/custom/AiIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/AiIcon.js +1 -1
- package/dist/src/icons/custom/AiIcon.js.map +1 -1
- package/dist/src/icons/custom/BpmnDiagramIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/BpmnDiagramIcon.js +1 -1
- package/dist/src/icons/custom/BpmnDiagramIcon.js.map +1 -1
- package/dist/src/icons/custom/ConnectorIcon.js +1 -1
- package/dist/src/icons/custom/ConnectorIcon.js.map +1 -1
- package/dist/src/icons/custom/ConnectorTemplateIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/ConnectorTemplateIcon.js +2 -2
- package/dist/src/icons/custom/ConnectorTemplateIcon.js.map +1 -1
- package/dist/src/icons/custom/DecisionIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/DecisionIcon.js +1 -1
- package/dist/src/icons/custom/DecisionIcon.js.map +1 -1
- package/dist/src/icons/custom/FormIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/FormIcon.js +1 -1
- package/dist/src/icons/custom/FormIcon.js.map +1 -1
- package/dist/src/icons/custom/ModelerIcon.d.ts.map +1 -1
- package/dist/src/icons/custom/ModelerIcon.js +1 -1
- package/dist/src/icons/custom/ModelerIcon.js.map +1 -1
- package/dist/src/icons/index.d.ts +1 -9
- package/dist/src/icons/index.d.ts.map +1 -1
- package/dist/src/icons/index.js +1 -9
- package/dist/src/icons/index.js.map +1 -1
- package/dist/src/icons/registry.d.ts +8 -0
- package/dist/src/icons/registry.d.ts.map +1 -1
- package/dist/src/icons/registry.js +17 -17
- package/dist/src/icons/registry.js.map +1 -1
- package/dist/src/icons/registry.json +16 -16
- package/dist/styles.css +72 -0
- package/package.json +3 -3
- package/dist/src/icons/custom/ApiClientIcon.d.ts +0 -2
- package/dist/src/icons/custom/ApiClientIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/ApiClientIcon.js +0 -5
- package/dist/src/icons/custom/ApiClientIcon.js.map +0 -1
- package/dist/src/icons/custom/AuditLogIcon.d.ts +0 -2
- package/dist/src/icons/custom/AuditLogIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/AuditLogIcon.js +0 -5
- package/dist/src/icons/custom/AuditLogIcon.js.map +0 -1
- package/dist/src/icons/custom/BackupIcon.d.ts +0 -2
- package/dist/src/icons/custom/BackupIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/BackupIcon.js +0 -5
- package/dist/src/icons/custom/BackupIcon.js.map +0 -1
- package/dist/src/icons/custom/ClusterIcon.d.ts +0 -2
- package/dist/src/icons/custom/ClusterIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/ClusterIcon.js +0 -5
- package/dist/src/icons/custom/ClusterIcon.js.map +0 -1
- package/dist/src/icons/custom/DeploymentIcon.d.ts +0 -2
- package/dist/src/icons/custom/DeploymentIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/DeploymentIcon.js +0 -5
- package/dist/src/icons/custom/DeploymentIcon.js.map +0 -1
- package/dist/src/icons/custom/IpAllowlistIcon.d.ts +0 -2
- package/dist/src/icons/custom/IpAllowlistIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/IpAllowlistIcon.js +0 -5
- package/dist/src/icons/custom/IpAllowlistIcon.js.map +0 -1
- package/dist/src/icons/custom/ProcessApplicationIcon.d.ts +0 -2
- package/dist/src/icons/custom/ProcessApplicationIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/ProcessApplicationIcon.js +0 -5
- package/dist/src/icons/custom/ProcessApplicationIcon.js.map +0 -1
- package/dist/src/icons/custom/ProjectIcon.d.ts +0 -2
- package/dist/src/icons/custom/ProjectIcon.d.ts.map +0 -1
- package/dist/src/icons/custom/ProjectIcon.js +0 -5
- 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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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 labels — a 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,131 @@ 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
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
312
|
+
const { ref: labelRef, isTruncated, measure, } = useIsTruncated();
|
|
313
|
+
// Every commit, not just on a `label` change: whether this label is clipped is now
|
|
314
|
+
// decided by how much room `NavBreadcrumb`'s measurement left this segment, and a
|
|
315
|
+
// container resize changes that with no label change to key on. `NavBreadcrumb`
|
|
316
|
+
// re-renders its children whenever the fit changes, so this runs exactly when the
|
|
317
|
+
// answer can have moved. `setIsTruncated` bails on an unchanged value, so a commit
|
|
318
|
+
// that changed nothing costs two layout reads and no re-render.
|
|
319
|
+
//
|
|
320
|
+
// The `onPointerEnter`/`onFocus` calls on the button below stay as a freshness check
|
|
321
|
+
// for anything that resizes the label without re-rendering it (a font swap, a zoom
|
|
322
|
+
// change).
|
|
323
|
+
React.useLayoutEffect(() => {
|
|
324
|
+
measure();
|
|
325
|
+
});
|
|
326
|
+
const labelSpan = (_jsx("span", { ref: labelRef,
|
|
327
|
+
// No max-width: a cap applied at every width is exactly what made short names
|
|
328
|
+
// truncate with room to spare. The span ellipses only when its segment is the
|
|
329
|
+
// one absorbing the leftover space and there genuinely is not enough — see the
|
|
330
|
+
// `shrink-0`/`min-w-0` split in `NavBreadcrumb`. `truncate`'s own
|
|
331
|
+
// `overflow: hidden` is what lets it shrink below its content width as a flex
|
|
332
|
+
// item at all.
|
|
333
|
+
className: "inline-block truncate align-bottom", children: label }));
|
|
334
|
+
const labelContent = (_jsxs(_Fragment, { children: [iconWithData, labelSpan, trailingElement] }));
|
|
335
|
+
// The label BUTTON, not the inner label span: the button (or, when `isLink`, the anchor it
|
|
336
|
+
// slots into) is the element Tab actually lands on, so it must be the same element Radix opens
|
|
337
|
+
// the tooltip from and the one `measure()` fires on — attaching either to the inner span would
|
|
338
|
+
// leave both dead on a keyboard, since the span itself is never a focus stop.
|
|
339
|
+
const labelButton = (_jsx(Button, { variant: "ghost", size: "sm",
|
|
340
|
+
// A link segment renders through Button's Slot so it keeps the ghost styling while
|
|
341
|
+
// being a real anchor — hoverable href, Cmd-click, "open in new tab", and announced
|
|
342
|
+
// as a link rather than a button.
|
|
343
|
+
asChild: isLink, onClick: onClick, onPointerEnter: measure, onFocus: measure,
|
|
344
|
+
// Padding rules:
|
|
345
|
+
// • icon present → Button's `has-data-[icon=inline-start]:pl-2`
|
|
346
|
+
// already tightens the left; tighten the right when there's a
|
|
347
|
+
// switcher so the segment reads as paired.
|
|
348
|
+
// • no icon → force `px-2` so left and right match the same
|
|
349
|
+
// 8px the icon variant uses.
|
|
350
|
+
className: cn(
|
|
351
|
+
// `ring-inset`: this button lives inside `<nav>`'s own `overflow-hidden` —
|
|
352
|
+
// a flush ring there clips exactly like the AppHeader breadcrumb-wrapper bug
|
|
353
|
+
// #522 fixed, one DOM level deeper. Same fix as that PR's Scroll/dense-rows
|
|
354
|
+
// rule (`docs/specs/shadcn/accessibility.md`), applied here for the same reason.
|
|
355
|
+
"focus-visible:ring-inset",
|
|
356
|
+
// Button is `shrink-0` by default. The label button has to be the part that
|
|
357
|
+
// yields when `NavBreadcrumb` hands this segment less than its natural width,
|
|
358
|
+
// and `min-w-0` is what lets it shrink past its content — without it the
|
|
359
|
+
// `truncate` on the span inside can never engage.
|
|
360
|
+
"min-w-0 shrink", !icon ? "px-2" : (hasSwitcher || hasActions) && "pr-2", active && "font-medium"), children: isLink ? (_jsx(LinkEl, { ...resolveLinkProps(linkProps, linkComponent !== undefined), children: labelContent })) : (labelContent) }));
|
|
361
|
+
// Mounted ONLY when clipped, not merely visually gated behind a controlled `open`: an
|
|
362
|
+
// uncontrolled `<Tooltip>` present unconditionally would still run Radix's own open machinery
|
|
363
|
+
// on every hover/focus of a SHORT label too, dispatching its document-level `tooltip.open`
|
|
364
|
+
// event and touching the shared `TooltipProvider` delay-skip state — app-wide side effects a
|
|
365
|
+
// segment that never clips has no business causing. A controlled `open={openState &&
|
|
366
|
+
// isTruncated}` was tried and reverted for the same reason plus a second one: Radix's
|
|
367
|
+
// `useControllableState` only calls `onChange` when the requested value actually differs from
|
|
368
|
+
// the current controlled prop, so the CLOSE request — which asks for the same `false` the prop
|
|
369
|
+
// already was — never fires `onOpenChange`, permanently stranding an internal "open" flag at
|
|
370
|
+
// `true`; the OPEN request still fires once regardless, which is the same document-dispatch
|
|
371
|
+
// problem this paragraph opens with, just with an extra piece of leaking state besides. Not
|
|
372
|
+
// rendering the subtree at all is what actually removes both, and lets `<Tooltip>` stay fully
|
|
373
|
+
// uncontrolled with Radix's own normal delay behavior intact.
|
|
374
|
+
const labelElement = isTruncated ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: labelButton }), _jsx(TooltipContent, { children: label })] })) : (labelButton);
|
|
375
|
+
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,
|
|
376
|
+
// `ring-inset` — see the label button's comment above; same nav, same clip.
|
|
377
|
+
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
378
|
// Tighten the gap so the chevron reads as paired with the
|
|
81
379
|
// label, not a sibling segment. `text-neutral-foreground-subtle`
|
|
82
380
|
// 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] }));
|
|
381
|
+
// but readable. `ring-inset` — see the label button's comment above.
|
|
382
|
+
className: "-ml-0.5 text-neutral-foreground-subtle focus-visible:ring-inset", children: _jsx(ChevronDown, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: children })] })) : null] }));
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* The segments that did not fit, as a two-level menu.
|
|
386
|
+
*
|
|
387
|
+
* Not `BreadcrumbEllipsis` from `breadcrumb.tsx`: that is `role="presentation"` and
|
|
388
|
+
* `aria-hidden`, so it would announce hidden content while offering no way to reach
|
|
389
|
+
* it. This is a real button, and each entry keeps the segment's navigation (including
|
|
390
|
+
* link semantics), switcher rows, actions (including per-action dividers) and trailing
|
|
391
|
+
* element — see `OverflowSegment`'s own doc comment for the two capabilities this
|
|
392
|
+
* deliberately does NOT carry over (`active`, `menuElement`) and why.
|
|
393
|
+
*
|
|
394
|
+
* Radix submenu primitives carry the keyboard and focus behavior, so none of it is
|
|
395
|
+
* reimplemented here.
|
|
396
|
+
*
|
|
397
|
+
* `NavBreadcrumb` renders this only when its measurement actually dropped something,
|
|
398
|
+
* and passes exactly what it dropped — so the trigger's `Show N hidden levels` name
|
|
399
|
+
* is an exact count, not an upper bound.
|
|
400
|
+
*/
|
|
401
|
+
function NavBreadcrumbOverflow({ segments, label, className, }) {
|
|
402
|
+
if (segments.length === 0)
|
|
403
|
+
return null;
|
|
404
|
+
const triggerLabel = label ??
|
|
405
|
+
`Show ${segments.length} hidden ${segments.length === 1 ? "level" : "levels"}`;
|
|
406
|
+
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,
|
|
407
|
+
// `ring-inset` — see the label button's comment in NavBreadcrumbItem;
|
|
408
|
+
// this trigger is also inside the same `overflow-hidden` <nav>.
|
|
409
|
+
className: "text-neutral-foreground-subtle focus-visible:ring-inset", children: _jsx(MoreHorizontal, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: segments.map((segment) => {
|
|
410
|
+
// Same aria-hidden clone the inline path applies (see NavBreadcrumbItem's
|
|
411
|
+
// `iconWithData`) — without it the icon's raw SVG can bleed into the
|
|
412
|
+
// SubTrigger's computed accessible name.
|
|
413
|
+
const iconWithData = segment.icon && React.isValidElement(segment.icon)
|
|
414
|
+
? React.cloneElement(segment.icon, { "aria-hidden": "true" })
|
|
415
|
+
: null;
|
|
416
|
+
// `switcher={[]}` (or `children` filtered to empty) is truthy — same hazard
|
|
417
|
+
// NavBreadcrumbItem's own `hasSwitcher` guards against, and the exact shape
|
|
418
|
+
// Task 7 will pass straight through from a segment's inline `children`.
|
|
419
|
+
const hasSwitcher = React.Children.toArray(segment.switcher).filter(Boolean).length >
|
|
420
|
+
0;
|
|
421
|
+
const visibleActions = segment.actions?.filter(Boolean) ?? [];
|
|
422
|
+
const hasActions = visibleActions.length > 0;
|
|
423
|
+
const destination = linkDestination(segment.linkProps);
|
|
424
|
+
const isLink = destination !== undefined;
|
|
425
|
+
const LinkEl = segment.linkComponent ?? "a";
|
|
426
|
+
const showNavigateEntry = Boolean(segment.navigate) || isLink;
|
|
427
|
+
const goToContent = (_jsxs(_Fragment, { children: [typeof segment.label === "string"
|
|
428
|
+
? `Go to ${segment.label}`
|
|
429
|
+
: "Go to this level", segment.trailingElement] }));
|
|
430
|
+
// An honest empty state: a segment with nothing to navigate to, switch to, or
|
|
431
|
+
// act on gets a plain, disabled item instead of a submenu that opens onto nothing.
|
|
432
|
+
if (!showNavigateEntry && !hasSwitcher && !hasActions) {
|
|
433
|
+
return (_jsxs(DropdownMenuItem, { disabled: true, children: [iconWithData, segment.label] }, segment.key));
|
|
434
|
+
}
|
|
435
|
+
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));
|
|
436
|
+
}) })] }) }));
|
|
85
437
|
}
|
|
86
438
|
/**
|
|
87
439
|
* `NavBreadcrumb` built from data instead of composition.
|
|
@@ -205,5 +557,5 @@ function buildSegmentDescriptor(segment) {
|
|
|
205
557
|
export function NavSwitcher({ segments, activeItemKey, linkComponent, "aria-label": ariaLabel, className, }) {
|
|
206
558
|
return (_jsx(NavBreadcrumbSwitcher, { items: segments.map(buildSegmentDescriptor), activeItemKey: activeItemKey, linkComponent: linkComponent, "aria-label": ariaLabel, className: className }));
|
|
207
559
|
}
|
|
208
|
-
export { NavBreadcrumb, NavBreadcrumbItem };
|
|
560
|
+
export { NavBreadcrumb, NavBreadcrumbItem, NavBreadcrumbOverflow };
|
|
209
561
|
//# sourceMappingURL=nav-breadcrumb.js.map
|
|
@@ -1 +1 @@
|
|
|
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,YAAY,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,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,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAmBpB;;;;;;;;;;;;;;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,OAAO,CACL,2BACY,gBAAgB,gBACd,SAAS,EACrB,SAAS,EAAE,SAAS,KAChB,KAAK,YAET,aACE,SAAS,EAAE,EAAE,CACX,2CAA2C,EAC3C,kBAAkB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAC/C,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,QAAQ,GACZ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;oBAC9C,CAAC,CAAC,KAAK,CAAC,GAAG;oBACX,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;gBACtB,mFAAmF;gBACnF,wBAAwB;gBACxB,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC;gBACnC,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACZ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CACX,0BACY,0BAA0B,EACpC,IAAI,EAAC,cAAc,iBACP,MAAM;4BAClB,4DAA4D;4BAC5D,sCAAsC;4BACtC,SAAS,EAAC,2EAA2E,kBAGlF,CACN,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;4BACrC,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,KAAK,CAAC,YAAY,CAChB,KAAmD,EACnD;gCACE,SAAS,EAAE,EAAE,CACV,KAAK,CAAC,KAAgC,CAAC,SAAS,EACjD,uBAAuB,CACxB;6BACF,CACF,KAvBc,QAAQ,CAwBZ,CAClB,CAAC;YACJ,CAAC,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;IACvD,MAAM,YAAY,GAAG,CACnB,8BACG,YAAY,EACb,eAAM,SAAS,EAAC,6CAA6C,YAC1D,KAAK,GACD,EACN,eAAe,IACf,CACJ,CAAC;IAEF,OAAO,CACL,2BACY,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,aAEpD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI;gBACT,mFAAmF;gBACnF,oFAAoF;gBACpF,kCAAkC;gBAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO;gBAChB,iBAAiB;gBACjB,kEAAkE;gBAClE,kEAAkE;gBAClE,+CAA+C;gBAC/C,8DAA8D;gBAC9D,iCAAiC;gBACjC,SAAS,EAAE,EAAE,CACX,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,MAAM,EACtD,MAAM,IAAI,aAAa,CACxB,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,EACR,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,EAChC,SAAS,EAAC,wCAAwC,YAElD,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,gBAAgB;4BAChB,SAAS,EAAC,wCAAwC,YAElD,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;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,CAAC"}
|
|
1
|
+
{"version":3,"file":"nav-breadcrumb.js","sourceRoot":"","sources":["../../../../src/components/ui/nav-breadcrumb.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,SAAS,eAAe,CAAC,EACvB,aAAa,GAAG,CAAC,EACjB,GAAG,KAAK,EAC+C;IACvD,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,iBACd,kBAAkB,EAC5B,aAAa,EAAE,aAAa,KACxB,KAAK,GACT,
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;GAIG;AACH,MAAM,8BAA8B,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAElE,SAAS,eAAe,CAAC,EACvB,aAAa,GAAG,CAAC,EACjB,GAAG,KAAK,EAC+C;IACvD,OAAO,CACL,KAAC,8BAA8B,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAClD,KAAC,gBAAgB,CAAC,QAAQ,iBACd,kBAAkB,EAC5B,aAAa,EAAE,aAAa,KACxB,KAAK,GACT,GACsC,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EACf,GAAG,KAAK,EAC2C;IACnD,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,0EAA0E;IAC1E,+CAA+C;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAErE,0EAA0E;IAC1E,yEAAyE;IACzE,iCAAiC;IACjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CACV,8EAA8E;gBAC5E,kEAAkE;gBAClE,kDAAkD,CACrD,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,KAAC,gBAAgB,CAAC,IAAI,iBAAW,SAAS,KAAK,KAAK,GAAI,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EAC8C;IACtD,OAAO,KAAC,gBAAgB,CAAC,OAAO,iBAAW,iBAAiB,KAAK,KAAK,GAAI,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAU,GAAG,CAAC,EACd,QAAQ,EACR,GAAG,KAAK,EAC8C;IACtD,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,UAAU,cACT,KAAC,gBAAgB,CAAC,OAAO,iBACb,iBAAiB,EAC3B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE;gBACX,6DAA6D;gBAC7D,mEAAmE;gBACnE,+DAA+D;gBAC/D,sEAAsE;gBACtE,4DAA4D;gBAC5D,mMAAmM,EACnM,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACgB,GAChB,GACW,CAC3B,CAAC;AACJ,CAAC;AAED,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,EACf,8BAA8B,GAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/examples/project-detail/ProjectDetailPage.tsx"],"names":[],"mappings":"AA6HA,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ProjectDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/examples/project-detail/ProjectDetailPage.tsx"],"names":[],"mappings":"AA6HA,wBAAgB,iBAAiB,gCA8ThC"}
|