@dt-dds/react-breadcrumb 1.0.0-beta.51

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/index.js ADDED
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __export = (target, all) => {
26
+ for (var name in all)
27
+ __defProp(target, name, { get: all[name], enumerable: true });
28
+ };
29
+ var __copyProps = (to, from, except, desc) => {
30
+ if (from && typeof from === "object" || typeof from === "function") {
31
+ for (let key of __getOwnPropNames(from))
32
+ if (!__hasOwnProp.call(to, key) && key !== except)
33
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
34
+ }
35
+ return to;
36
+ };
37
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
38
+ // If the importer is in node compatibility mode or this is not an ESM
39
+ // file that has been converted to a CommonJS file using a Babel-
40
+ // compatible transform (i.e. "__esModule" has not been set), then set
41
+ // "default" to the CommonJS "module.exports" for node compatibility.
42
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
43
+ mod
44
+ ));
45
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
46
+
47
+ // index.ts
48
+ var breadcrumb_exports = {};
49
+ __export(breadcrumb_exports, {
50
+ Breadcrumb: () => Breadcrumb
51
+ });
52
+ module.exports = __toCommonJS(breadcrumb_exports);
53
+
54
+ // src/Breadcrumb.tsx
55
+ var import_react_tooltip = require("@dt-dds/react-tooltip");
56
+ var import_react5 = require("react");
57
+
58
+ // ../../dt-dds-react/core/assets/svgs/AllOut.tsx
59
+ var import_jsx_runtime = require("react/jsx-runtime");
60
+
61
+ // ../../dt-dds-react/core/assets/svgs/Apis.tsx
62
+ var import_jsx_runtime2 = require("react/jsx-runtime");
63
+
64
+ // ../../dt-dds-react/core/assets/svgs/Apps.tsx
65
+ var import_jsx_runtime3 = require("react/jsx-runtime");
66
+
67
+ // ../../dt-dds-react/core/assets/svgs/ArrowDropDown.tsx
68
+ var import_jsx_runtime4 = require("react/jsx-runtime");
69
+
70
+ // ../../dt-dds-react/core/assets/svgs/ArrowDropUp.tsx
71
+ var import_jsx_runtime5 = require("react/jsx-runtime");
72
+
73
+ // ../../dt-dds-react/core/assets/svgs/ArrowLeft.tsx
74
+ var import_jsx_runtime6 = require("react/jsx-runtime");
75
+
76
+ // ../../dt-dds-react/core/assets/svgs/ArrowRight.tsx
77
+ var import_jsx_runtime7 = require("react/jsx-runtime");
78
+ var ArrowRight = (props) => {
79
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
80
+ "svg",
81
+ __spreadProps(__spreadValues({
82
+ fill: "none",
83
+ height: "12",
84
+ viewBox: "0 0 8 12",
85
+ width: "8",
86
+ xmlns: "http://www.w3.org/2000/svg"
87
+ }, props), {
88
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
89
+ "path",
90
+ {
91
+ clipRule: "evenodd",
92
+ d: "M6.99468 4.99507C7.18215 5.1826 7.28747 5.4369 7.28747 5.70207C7.28747 5.96723 7.18215 6.22154 6.99468 6.40907L2.40168 11.0021C2.21539 11.1846 1.96458 11.2863 1.70375 11.285C1.44292 11.2837 1.19315 11.1795 1.00871 10.995C0.824278 10.8106 0.72008 10.5608 0.718763 10.3C0.717445 10.0392 0.819115 9.78836 1.00168 9.60207L4.90168 5.70207L1.00168 1.80207C0.819115 1.61578 0.717445 1.36497 0.718763 1.10414C0.72008 0.843312 0.824278 0.593541 1.00871 0.409105C1.19315 0.224668 1.44292 0.120471 1.70375 0.119153C1.96458 0.117836 2.21539 0.219506 2.40168 0.402069L6.99468 4.99507Z",
93
+ fill: "currentColor",
94
+ fillRule: "evenodd"
95
+ }
96
+ )
97
+ })
98
+ );
99
+ };
100
+ var ArrowRight_default = ArrowRight;
101
+
102
+ // ../../dt-dds-react/core/assets/svgs/AvatarThumbnail.tsx
103
+ var import_jsx_runtime8 = require("react/jsx-runtime");
104
+
105
+ // ../../dt-dds-react/core/assets/svgs/Bolt.tsx
106
+ var import_jsx_runtime9 = require("react/jsx-runtime");
107
+
108
+ // ../../dt-dds-react/core/assets/svgs/CalendarMonth.tsx
109
+ var import_jsx_runtime10 = require("react/jsx-runtime");
110
+
111
+ // ../../dt-dds-react/core/assets/svgs/Cancel.tsx
112
+ var import_jsx_runtime11 = require("react/jsx-runtime");
113
+
114
+ // ../../dt-dds-react/core/assets/svgs/Check.tsx
115
+ var import_jsx_runtime12 = require("react/jsx-runtime");
116
+
117
+ // ../../dt-dds-react/core/assets/svgs/CheckCircle.tsx
118
+ var import_jsx_runtime13 = require("react/jsx-runtime");
119
+
120
+ // ../../dt-dds-react/core/assets/svgs/CheckCircleOutline.tsx
121
+ var import_jsx_runtime14 = require("react/jsx-runtime");
122
+
123
+ // ../../dt-dds-react/core/assets/svgs/Close.tsx
124
+ var import_jsx_runtime15 = require("react/jsx-runtime");
125
+
126
+ // ../../dt-dds-react/core/assets/svgs/Copy.tsx
127
+ var import_jsx_runtime16 = require("react/jsx-runtime");
128
+
129
+ // ../../dt-dds-react/core/assets/svgs/Delete.tsx
130
+ var import_jsx_runtime17 = require("react/jsx-runtime");
131
+
132
+ // ../../dt-dds-react/core/assets/svgs/Edit.tsx
133
+ var import_jsx_runtime18 = require("react/jsx-runtime");
134
+
135
+ // ../../dt-dds-react/core/assets/svgs/Email.tsx
136
+ var import_jsx_runtime19 = require("react/jsx-runtime");
137
+
138
+ // ../../dt-dds-react/core/assets/svgs/EmailSend.tsx
139
+ var import_jsx_runtime20 = require("react/jsx-runtime");
140
+
141
+ // ../../dt-dds-react/core/assets/svgs/Error.tsx
142
+ var import_react = require("@emotion/react");
143
+ var import_jsx_runtime21 = require("react/jsx-runtime");
144
+
145
+ // ../../dt-dds-react/core/assets/svgs/ErrorOutline.tsx
146
+ var import_jsx_runtime22 = require("react/jsx-runtime");
147
+
148
+ // ../../dt-dds-react/core/assets/svgs/EVStation.tsx
149
+ var import_jsx_runtime23 = require("react/jsx-runtime");
150
+
151
+ // ../../dt-dds-react/core/assets/svgs/Info.tsx
152
+ var import_jsx_runtime24 = require("react/jsx-runtime");
153
+
154
+ // ../../dt-dds-react/core/assets/svgs/InfoOutline.tsx
155
+ var import_jsx_runtime25 = require("react/jsx-runtime");
156
+
157
+ // ../../dt-dds-react/core/assets/svgs/Input.tsx
158
+ var import_jsx_runtime26 = require("react/jsx-runtime");
159
+
160
+ // ../../dt-dds-react/core/assets/svgs/Language.tsx
161
+ var import_jsx_runtime27 = require("react/jsx-runtime");
162
+
163
+ // ../../dt-dds-react/core/assets/svgs/LocationOn.tsx
164
+ var import_jsx_runtime28 = require("react/jsx-runtime");
165
+
166
+ // ../../dt-dds-react/core/assets/svgs/LocationSearching.tsx
167
+ var import_jsx_runtime29 = require("react/jsx-runtime");
168
+
169
+ // ../../dt-dds-react/core/assets/svgs/MenuCompact.tsx
170
+ var import_jsx_runtime30 = require("react/jsx-runtime");
171
+
172
+ // ../../dt-dds-react/core/assets/svgs/MenuExpand.tsx
173
+ var import_jsx_runtime31 = require("react/jsx-runtime");
174
+
175
+ // ../../dt-dds-react/core/assets/svgs/Menu.tsx
176
+ var import_jsx_runtime32 = require("react/jsx-runtime");
177
+
178
+ // ../../dt-dds-react/core/assets/svgs/MoreHorizontal.tsx
179
+ var import_jsx_runtime33 = require("react/jsx-runtime");
180
+ var MoreHorizontal = (props) => {
181
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
182
+ "svg",
183
+ __spreadProps(__spreadValues({
184
+ fill: "currentColor",
185
+ height: "24",
186
+ viewBox: "0 0 24 24",
187
+ width: "24",
188
+ xmlns: "http://www.w3.org/2000/svg"
189
+ }, props), {
190
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("path", { d: "M6 10C4.9 10 4 10.9 4 12C4 13.1 4.9 14 6 14C7.1 14 8 13.1 8 12C8 10.9 7.1 10 6 10ZM18 10C16.9 10 16 10.9 16 12C16 13.1 16.9 14 18 14C19.1 14 20 13.1 20 12C20 10.9 19.1 10 18 10ZM12 10C10.9 10 10 10.9 10 12C10 13.1 10.9 14 12 14C13.1 14 14 13.1 14 12C14 10.9 13.1 10 12 10Z" })
191
+ })
192
+ );
193
+ };
194
+ var MoreHorizontal_default = MoreHorizontal;
195
+
196
+ // ../../dt-dds-react/core/assets/svgs/MoreVertical.tsx
197
+ var import_jsx_runtime34 = require("react/jsx-runtime");
198
+
199
+ // ../../dt-dds-react/core/assets/svgs/NoData.tsx
200
+ var import_react2 = require("@emotion/react");
201
+ var import_jsx_runtime35 = require("react/jsx-runtime");
202
+
203
+ // ../../dt-dds-react/core/assets/svgs/NotFound.tsx
204
+ var import_jsx_runtime36 = require("react/jsx-runtime");
205
+
206
+ // ../../dt-dds-react/core/assets/svgs/OutlinedArrowDropDown.tsx
207
+ var import_jsx_runtime37 = require("react/jsx-runtime");
208
+
209
+ // ../../dt-dds-react/core/assets/svgs/OutlinedArrowDropUp.tsx
210
+ var import_jsx_runtime38 = require("react/jsx-runtime");
211
+
212
+ // ../../dt-dds-react/core/assets/svgs/PhoneOutlined.tsx
213
+ var import_jsx_runtime39 = require("react/jsx-runtime");
214
+
215
+ // ../../dt-dds-react/core/assets/svgs/Payments.tsx
216
+ var import_jsx_runtime40 = require("react/jsx-runtime");
217
+
218
+ // ../../dt-dds-react/core/assets/svgs/Products.tsx
219
+ var import_jsx_runtime41 = require("react/jsx-runtime");
220
+
221
+ // ../../dt-dds-react/core/assets/svgs/RemoveCircleOutline.tsx
222
+ var import_jsx_runtime42 = require("react/jsx-runtime");
223
+
224
+ // ../../dt-dds-react/core/assets/svgs/Share.tsx
225
+ var import_jsx_runtime43 = require("react/jsx-runtime");
226
+
227
+ // ../../dt-dds-react/core/assets/svgs/Signout.tsx
228
+ var import_jsx_runtime44 = require("react/jsx-runtime");
229
+
230
+ // ../../dt-dds-react/core/assets/svgs/Teams.tsx
231
+ var import_jsx_runtime45 = require("react/jsx-runtime");
232
+
233
+ // ../../dt-dds-react/core/assets/svgs/Timeline.tsx
234
+ var import_jsx_runtime46 = require("react/jsx-runtime");
235
+
236
+ // ../../dt-dds-react/core/assets/svgs/Topic.tsx
237
+ var import_jsx_runtime47 = require("react/jsx-runtime");
238
+
239
+ // ../../dt-dds-react/core/assets/svgs/UnfoldLess.tsx
240
+ var import_jsx_runtime48 = require("react/jsx-runtime");
241
+
242
+ // ../../dt-dds-react/core/assets/svgs/UnfoldMore.tsx
243
+ var import_jsx_runtime49 = require("react/jsx-runtime");
244
+
245
+ // ../../dt-dds-react/core/assets/svgs/Username.tsx
246
+ var import_jsx_runtime50 = require("react/jsx-runtime");
247
+
248
+ // ../../dt-dds-react/core/assets/svgs/ViewAgenda.tsx
249
+ var import_jsx_runtime51 = require("react/jsx-runtime");
250
+
251
+ // ../../dt-dds-react/core/assets/svgs/Visibility.tsx
252
+ var import_jsx_runtime52 = require("react/jsx-runtime");
253
+
254
+ // ../../dt-dds-react/core/assets/svgs/VisibilityOff.tsx
255
+ var import_jsx_runtime53 = require("react/jsx-runtime");
256
+
257
+ // ../../dt-dds-react/core/assets/svgs/WarningOutline.tsx
258
+ var import_jsx_runtime54 = require("react/jsx-runtime");
259
+
260
+ // ../../dt-dds-react/core/assets/svgs/Warning.tsx
261
+ var import_jsx_runtime55 = require("react/jsx-runtime");
262
+
263
+ // ../../dt-dds-react/core/assets/svgs/Wifi.tsx
264
+ var import_jsx_runtime56 = require("react/jsx-runtime");
265
+
266
+ // ../../dt-dds-react/core/assets/svgs/Settings.tsx
267
+ var import_jsx_runtime57 = require("react/jsx-runtime");
268
+
269
+ // src/Breadcrumb.styled.ts
270
+ var import_styled = __toESM(require("@emotion/styled"));
271
+ var BreadcrumbStyled = import_styled.default.nav`
272
+ ${({ theme }) => `
273
+ ${theme.fontStyles.body2}
274
+ color: ${theme.palette.secondary.default};
275
+ overflow: hidden;
276
+ `}
277
+ `;
278
+ var ListStyled = import_styled.default.ul`
279
+ padding: 0px;
280
+ margin: 0px;
281
+ width: 100%;
282
+ list-style: none;
283
+ display: flex;
284
+ align-items: center;
285
+ white-space: nowrap;
286
+ gap: ${({ theme }) => theme.spacing["4xs"]};
287
+ `;
288
+ var ItemStyled = import_styled.default.li`
289
+ ${({ theme }) => `
290
+ display: flex;
291
+
292
+ &:not(:last-child) {
293
+ ${theme.fontStyles.link2}
294
+ color: ${theme.palette.accent.default};
295
+ cursor: pointer;
296
+
297
+ svg {
298
+ color: ${theme.palette.accent.default};
299
+ }
300
+
301
+ & * {
302
+ text-decoration: underline;
303
+ }
304
+
305
+ &:hover {
306
+ color: ${theme.palette.accent.dark};
307
+
308
+ svg {
309
+ color: ${theme.palette.accent.dark};
310
+ }
311
+ }
312
+ }
313
+
314
+ a {
315
+ color: inherit;
316
+ }
317
+
318
+ svg {
319
+ color: ${theme.palette.secondary.default};
320
+ }
321
+
322
+ &:last-child * {
323
+ white-space: nowrap;
324
+ text-overflow: ellipsis;
325
+ overflow: hidden;
326
+ }
327
+ `}
328
+ `;
329
+ var ItemContainerStyled = import_styled.default.div`
330
+ ${({ theme }) => `
331
+ display: flex;
332
+ align-items: center;
333
+ gap: ${theme.spacing["5xs"]};
334
+ `}
335
+ `;
336
+
337
+ // src/hooks/useCollapsedBreadcrumb.tsx
338
+ var import_react_core = require("@dt-dds/react-core");
339
+ var import_react3 = require("@emotion/react");
340
+ var import_react4 = require("react");
341
+ var import_jsx_runtime58 = require("react/jsx-runtime");
342
+ var isBreadcrumbRefValid = (breadcrumbRef, breadcrumbListRef) => {
343
+ return !!breadcrumbRef.current && !!breadcrumbListRef.current;
344
+ };
345
+ var useCollapsedBreadcrumb = (children) => {
346
+ const breadcrumbRef = (0, import_react4.useRef)(null);
347
+ const breadcrumbListRef = (0, import_react4.useRef)(null);
348
+ const theme = (0, import_react3.useTheme)();
349
+ const isDesktop = (0, import_react_core.useMedia)(`(min-width: ${theme.breakpoints.m}px)`);
350
+ const [visibleChildren, setVisibleChildren] = (0, import_react4.useState)(children);
351
+ const breadcrumbResize = (0, import_react4.useCallback)(() => {
352
+ if (isDesktop || !isBreadcrumbRefValid(breadcrumbRef, breadcrumbListRef)) {
353
+ setVisibleChildren(children);
354
+ return;
355
+ }
356
+ const childrenArray = import_react4.Children.toArray(children);
357
+ const isBreadcrumbsTooLarge = breadcrumbListRef.current.scrollWidth > breadcrumbRef.current.clientWidth;
358
+ if (isBreadcrumbsTooLarge) {
359
+ const lastChild = childrenArray[childrenArray.length - 1];
360
+ const modifiedChildren = [
361
+ childrenArray[0],
362
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Breadcrumb.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(MoreHorizontal_default, {}) }, "more-icon"),
363
+ (0, import_react4.isValidElement)(lastChild) ? (0, import_react4.cloneElement)(lastChild, __spreadProps(__spreadValues({}, lastChild.props), {
364
+ style: { overflow: "hidden" }
365
+ })) : lastChild
366
+ ];
367
+ setVisibleChildren(modifiedChildren);
368
+ }
369
+ }, [children, isDesktop, breadcrumbRef, breadcrumbListRef]);
370
+ (0, import_react_core.useDebounceResize)(breadcrumbResize);
371
+ return { visibleChildren, breadcrumbRef, breadcrumbListRef };
372
+ };
373
+
374
+ // src/Breadcrumb.tsx
375
+ var import_jsx_runtime59 = require("react/jsx-runtime");
376
+ var BREADCRUMB_CHARACTER_LIMIT = 30;
377
+ var Breadcrumb = ({
378
+ children,
379
+ separator = "slash"
380
+ }) => {
381
+ const { visibleChildren, breadcrumbRef, breadcrumbListRef } = useCollapsedBreadcrumb(children);
382
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
383
+ BreadcrumbStyled,
384
+ {
385
+ "aria-label": "Breadcrumb",
386
+ "data-testid": "breadcrumb",
387
+ ref: breadcrumbRef,
388
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ListStyled, { ref: breadcrumbListRef, children: withSeparator(visibleChildren, separator) })
389
+ }
390
+ );
391
+ };
392
+ var BreadcrumbItem = ({ children, style }) => {
393
+ const { truncatedChildren, tooltip } = mapTruncateChildren(children);
394
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ItemStyled, { style, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_tooltip.Tooltip, { style: { overflow: "hidden" }, children: [
395
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ItemContainerStyled, { children: truncatedChildren }),
396
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_tooltip.Tooltip.Content, { children: tooltip })
397
+ ] }) });
398
+ };
399
+ var truncateText = (text) => {
400
+ if (text.length >= BREADCRUMB_CHARACTER_LIMIT) {
401
+ return `${text.substring(0, BREADCRUMB_CHARACTER_LIMIT)}...`;
402
+ }
403
+ return text;
404
+ };
405
+ var mapTruncateChildren = (children) => {
406
+ let tooltip = "";
407
+ return {
408
+ truncatedChildren: import_react5.Children.map(children, (child) => {
409
+ if (typeof child === "string") {
410
+ const truncatedText = truncateText(child);
411
+ tooltip = truncatedText !== child ? child : "";
412
+ return truncatedText;
413
+ } else if ((0, import_react5.isValidElement)(child)) {
414
+ const { truncatedChildren, tooltip: childTooltip } = mapTruncateChildren(child.props.children);
415
+ tooltip = childTooltip;
416
+ return (0, import_react5.cloneElement)(child, __spreadProps(__spreadValues({}, child.props), {
417
+ children: truncatedChildren
418
+ }));
419
+ } else {
420
+ return null;
421
+ }
422
+ }),
423
+ tooltip
424
+ };
425
+ };
426
+ var withSeparator = (children, separator) => {
427
+ const addSeparator = () => ({
428
+ slash: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { children: "/" }),
429
+ arrow: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ArrowRight_default, {})
430
+ })[separator];
431
+ const isLastBreadcrumb = (index) => import_react5.Children.count(children) - 1 === index;
432
+ return import_react5.Children.map(children, (child, index) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_jsx_runtime59.Fragment, { children: [
433
+ child,
434
+ !isLastBreadcrumb(index) && addSeparator()
435
+ ] }));
436
+ };
437
+ Breadcrumb.Item = BreadcrumbItem;
438
+ // Annotate the CommonJS export names for ESM import in node:
439
+ 0 && (module.exports = {
440
+ Breadcrumb
441
+ });