@salt-ds/lab 1.0.0-alpha.101 → 1.0.0-alpha.102
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/CHANGELOG.md +19 -0
- package/css/salt-lab.css +10 -241
- package/dist-cjs/color-chooser/Swatch.css.js +1 -1
- package/dist-cjs/index.js +0 -12
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/list/List.css.js +1 -1
- package/dist-cjs/list-deprecated/List.css.js +1 -1
- package/dist-cjs/list-next/ListNext.css.js +1 -1
- package/dist-cjs/query-input/QueryInput.css.js +1 -1
- package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
- package/dist-es/color-chooser/Swatch.css.js +1 -1
- package/dist-es/index.js +0 -6
- package/dist-es/index.js.map +1 -1
- package/dist-es/list/List.css.js +1 -1
- package/dist-es/list-deprecated/List.css.js +1 -1
- package/dist-es/list-next/ListNext.css.js +1 -1
- package/dist-es/query-input/QueryInput.css.js +1 -1
- package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
- package/dist-types/button-bar/internal/DescendantContext.d.ts +1 -1
- package/dist-types/combo-box-deprecated/internal/MultiSelectComboBox.d.ts +1 -1
- package/dist-types/common-hooks/collectionProvider.d.ts +1 -1
- package/dist-types/contact-details/MailLinkComponent.d.ts +1 -1
- package/dist-types/form-field-legacy/FormActivationIndicator.d.ts +1 -1
- package/dist-types/form-field-legacy/FormHelperText.d.ts +1 -1
- package/dist-types/form-field-legacy/FormLabel.d.ts +1 -1
- package/dist-types/form-field-legacy/NecessityIndicator.d.ts +1 -1
- package/dist-types/form-field-legacy/StatusIndicator.d.ts +1 -1
- package/dist-types/index.d.ts +0 -2
- package/dist-types/list-deprecated/internal/DescendantContext.d.ts +1 -1
- package/dist-types/list-deprecated/internal/Highlighter.d.ts +1 -1
- package/dist-types/query-input/internal/CategoryList.d.ts +1 -1
- package/dist-types/query-input/internal/SearchList.d.ts +1 -1
- package/dist-types/query-input/internal/ValueList.d.ts +1 -1
- package/dist-types/query-input/internal/ValueSelector.d.ts +1 -1
- package/dist-types/responsive/overflowUtils.d.ts +1 -1
- package/dist-types/tabs/TabActivationIndicator.d.ts +1 -1
- package/dist-types/tokenized-input/internal/InputPill.d.ts +1 -1
- package/dist-types/tokenized-input-next/internal/InputPill.d.ts +1 -1
- package/dist-types/toolbar/Tooltray.d.ts +1 -1
- package/package.json +2 -2
- package/dist-cjs/breadcrumbs/Breadcrumb.css.js +0 -6
- package/dist-cjs/breadcrumbs/Breadcrumb.css.js.map +0 -1
- package/dist-cjs/breadcrumbs/Breadcrumb.js +0 -90
- package/dist-cjs/breadcrumbs/Breadcrumb.js.map +0 -1
- package/dist-cjs/breadcrumbs/Breadcrumbs.css.js +0 -6
- package/dist-cjs/breadcrumbs/Breadcrumbs.css.js.map +0 -1
- package/dist-cjs/breadcrumbs/Breadcrumbs.js +0 -140
- package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +0 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js +0 -63
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +0 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js +0 -20
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +0 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js +0 -9
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js.map +0 -1
- package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js +0 -22
- package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbNext.css.js +0 -6
- package/dist-cjs/breadcrumbs-next/BreadcrumbNext.css.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbNext.js +0 -99
- package/dist-cjs/breadcrumbs-next/BreadcrumbNext.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbNextLabel.js +0 -21
- package/dist-cjs/breadcrumbs-next/BreadcrumbNextLabel.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbNextTrigger.js +0 -48
- package/dist-cjs/breadcrumbs-next/BreadcrumbNextTrigger.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbsNext.css.js +0 -6
- package/dist-cjs/breadcrumbs-next/BreadcrumbsNext.css.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/BreadcrumbsNext.js +0 -146
- package/dist-cjs/breadcrumbs-next/BreadcrumbsNext.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/internal/BreadcrumbNextContext.js +0 -12
- package/dist-cjs/breadcrumbs-next/internal/BreadcrumbNextContext.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.js +0 -236
- package/dist-cjs/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.js.map +0 -1
- package/dist-cjs/breadcrumbs-next/internal/breadcrumbItems.js +0 -21
- package/dist-cjs/breadcrumbs-next/internal/breadcrumbItems.js.map +0 -1
- package/dist-es/breadcrumbs/Breadcrumb.css.js +0 -4
- package/dist-es/breadcrumbs/Breadcrumb.css.js.map +0 -1
- package/dist-es/breadcrumbs/Breadcrumb.js +0 -88
- package/dist-es/breadcrumbs/Breadcrumb.js.map +0 -1
- package/dist-es/breadcrumbs/Breadcrumbs.css.js +0 -4
- package/dist-es/breadcrumbs/Breadcrumbs.css.js.map +0 -1
- package/dist-es/breadcrumbs/Breadcrumbs.js +0 -138
- package/dist-es/breadcrumbs/Breadcrumbs.js.map +0 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js +0 -61
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +0 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js +0 -17
- package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +0 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js +0 -7
- package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js.map +0 -1
- package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js +0 -20
- package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbNext.css.js +0 -4
- package/dist-es/breadcrumbs-next/BreadcrumbNext.css.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbNext.js +0 -97
- package/dist-es/breadcrumbs-next/BreadcrumbNext.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbNextLabel.js +0 -19
- package/dist-es/breadcrumbs-next/BreadcrumbNextLabel.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbNextTrigger.js +0 -46
- package/dist-es/breadcrumbs-next/BreadcrumbNextTrigger.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbsNext.css.js +0 -4
- package/dist-es/breadcrumbs-next/BreadcrumbsNext.css.js.map +0 -1
- package/dist-es/breadcrumbs-next/BreadcrumbsNext.js +0 -144
- package/dist-es/breadcrumbs-next/BreadcrumbsNext.js.map +0 -1
- package/dist-es/breadcrumbs-next/internal/BreadcrumbNextContext.js +0 -9
- package/dist-es/breadcrumbs-next/internal/BreadcrumbNextContext.js.map +0 -1
- package/dist-es/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.js +0 -234
- package/dist-es/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.js.map +0 -1
- package/dist-es/breadcrumbs-next/internal/breadcrumbItems.js +0 -19
- package/dist-es/breadcrumbs-next/internal/breadcrumbItems.js.map +0 -1
- package/dist-types/breadcrumbs/Breadcrumb.d.ts +0 -18
- package/dist-types/breadcrumbs/Breadcrumbs.d.ts +0 -17
- package/dist-types/breadcrumbs/index.d.ts +0 -2
- package/dist-types/breadcrumbs/internal/BreadcrumbsCollapsed.d.ts +0 -10
- package/dist-types/breadcrumbs/internal/BreadcrumbsContext.d.ts +0 -8
- package/dist-types/breadcrumbs/internal/BreadcrumbsSeparator.d.ts +0 -2
- package/dist-types/breadcrumbs/internal/useFocusMenuRemount.d.ts +0 -4
- package/dist-types/breadcrumbs-next/BreadcrumbNext.d.ts +0 -23
- package/dist-types/breadcrumbs-next/BreadcrumbNextLabel.d.ts +0 -4
- package/dist-types/breadcrumbs-next/BreadcrumbNextTrigger.d.ts +0 -8
- package/dist-types/breadcrumbs-next/BreadcrumbsNext.d.ts +0 -32
- package/dist-types/breadcrumbs-next/index.d.ts +0 -4
- package/dist-types/breadcrumbs-next/internal/BreadcrumbNextContext.d.ts +0 -14
- package/dist-types/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.d.ts +0 -9
- package/dist-types/breadcrumbs-next/internal/breadcrumbItems.d.ts +0 -9
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbOverflowDisclosure.js","sources":["../src/breadcrumbs-next/internal/BreadcrumbOverflowDisclosure.tsx"],"sourcesContent":["import {\n flip,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n Button,\n makePrefixer,\n type RenderPropsType,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type FocusEvent,\n type KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { BreadcrumbNextContext } from \"./BreadcrumbNextContext\";\nimport type { NormalizedBreadcrumb } from \"./breadcrumbItems\";\n\nconst withBaseName = makePrefixer(\"saltBreadcrumbsNext\");\n\ninterface BreadcrumbOverflowDisclosureProps {\n currentIndex: number;\n items: NormalizedBreadcrumb[];\n render?: RenderPropsType[\"render\"];\n}\n\nexport function BreadcrumbOverflowDisclosure({\n currentIndex,\n items,\n render,\n}: BreadcrumbOverflowDisclosureProps) {\n const [open, setOpen] = useState(false);\n const targetWindow = useWindow();\n const itemElements = useRef(new Map<number, HTMLAnchorElement>());\n const triggerRef = useRef<HTMLButtonElement>(null);\n const disclosureId = useId();\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const focusTrigger = useCallback(() => {\n targetWindow?.requestAnimationFrame(() => {\n triggerRef.current?.focus({ preventScroll: true });\n });\n }, [targetWindow]);\n\n const getFocusableItems = useCallback(\n () =>\n items\n .map((_, index) => itemElements.current.get(index))\n .filter((item): item is HTMLAnchorElement => item !== undefined),\n [items],\n );\n\n const focusItem = useCallback(\n (position: \"first\" | \"last\") => {\n const focusableItems = getFocusableItems();\n const item =\n position === \"first\"\n ? focusableItems[0]\n : focusableItems[focusableItems.length - 1];\n\n item?.focus({ preventScroll: true });\n return item !== undefined;\n },\n [getFocusableItems],\n );\n\n const focusItemByOffset = useCallback(\n (offset: number) => {\n const focusableItems = getFocusableItems();\n const activeIndex = focusableItems.indexOf(\n targetWindow?.document.activeElement as HTMLAnchorElement,\n );\n\n if (activeIndex === -1) {\n return focusItem(offset > 0 ? \"first\" : \"last\");\n }\n\n const nextIndex = Math.min(\n Math.max(activeIndex + offset, 0),\n focusableItems.length - 1,\n );\n\n focusableItems[nextIndex]?.focus({ preventScroll: true });\n return focusableItems[nextIndex] !== undefined;\n },\n [focusItem, getFocusableItems, targetWindow],\n );\n\n const { context, elements, refs, strategy, x, y } = useFloatingUI({\n open,\n onOpenChange(nextOpen, _event, reason) {\n setOpen(nextOpen);\n\n if (!nextOpen && reason === \"escape-key\") {\n focusTrigger();\n }\n },\n placement: \"bottom-start\",\n middleware: [\n offset(1),\n size({\n apply({ availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n flip(),\n shift({\n padding: 8,\n }),\n ],\n });\n\n const { getFloatingProps, getReferenceProps } = useInteractions([\n useClick(context),\n useDismiss(context),\n ]);\n const handleTriggerRef = useForkRef<HTMLButtonElement>(\n triggerRef,\n refs.setReference,\n );\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (open && (event.key === \"ArrowDown\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n focusItem(\"first\");\n return;\n }\n\n if (open && (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\")) {\n event.preventDefault();\n focusItem(\"last\");\n return;\n }\n\n if (event.key === \"Tab\" && open && !event.shiftKey) {\n if (focusItem(\"first\")) {\n event.preventDefault();\n }\n return;\n }\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n\n if (nextFocusedElement && elements.floating?.contains(nextFocusedElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n const handleDisclosureKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Tab\") {\n const focusableItems = getFocusableItems();\n const activeIndex = focusableItems.indexOf(\n targetWindow?.document.activeElement as HTMLAnchorElement,\n );\n const shouldReturnToTrigger = event.shiftKey\n ? activeIndex === 0\n : activeIndex === focusableItems.length - 1;\n\n if (shouldReturnToTrigger) {\n event.preventDefault();\n setOpen(false);\n focusTrigger();\n }\n\n return;\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowRight\") {\n event.preventDefault();\n focusItemByOffset(1);\n return;\n }\n\n if (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\") {\n event.preventDefault();\n focusItemByOffset(-1);\n return;\n }\n\n if (event.key === \"Home\") {\n event.preventDefault();\n focusItem(\"first\");\n return;\n }\n\n if (event.key === \"End\") {\n event.preventDefault();\n focusItem(\"last\");\n }\n };\n\n const handleDisclosureBlur = (event: FocusEvent<HTMLDivElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n\n if (\n nextFocusedElement &&\n (event.currentTarget.contains(nextFocusedElement) ||\n triggerRef.current?.contains(nextFocusedElement))\n ) {\n return;\n }\n\n setOpen(false);\n };\n\n return (\n <>\n <Button\n aria-controls={disclosureId}\n aria-expanded={open}\n aria-label=\"Additional breadcrumbs\"\n appearance=\"transparent\"\n className={withBaseName(\"collapseButton\")}\n ref={handleTriggerRef}\n {...getReferenceProps({\n onBlur: handleTriggerBlur,\n onKeyDown: handleTriggerKeyDown,\n })}\n >\n <OverflowMenuIcon aria-hidden />\n </Button>\n <FloatingComponent\n className={withBaseName(\"disclosure\")}\n focusManagerProps={\n context\n ? {\n closeOnFocusOut: true,\n context,\n initialFocus: -1,\n modal: false,\n returnFocus: false,\n }\n : undefined\n }\n height={elements.floating?.offsetHeight}\n left={x ?? 0}\n open={open}\n position={strategy}\n ref={refs.setFloating}\n top={y ?? 0}\n width={elements.floating?.offsetWidth}\n {...getFloatingProps({\n id: disclosureId,\n onBlur: handleDisclosureBlur,\n onKeyDown: handleDisclosureKeyDown,\n })}\n >\n <ol\n aria-label=\"Hidden breadcrumb levels\"\n className={withBaseName(\"disclosureList\")}\n >\n {items.map((item, index) => (\n <BreadcrumbNextContext.Provider\n key={item.key}\n value={{\n current: item.index === currentIndex,\n onNavigate: () => setOpen(false),\n placement: \"disclosure\",\n render,\n showSeparator: false,\n triggerRef: (element) => {\n // Placeholder anchors (no href) are not focusable, so only\n // navigable items take part in disclosure focus movement.\n if (\n element?.tagName === \"A\" &&\n element.hasAttribute(\"href\")\n ) {\n itemElements.current.set(index, element);\n } else {\n itemElements.current.delete(index);\n }\n },\n }}\n >\n {item.element}\n </BreadcrumbNextContext.Provider>\n ))}\n </ol>\n </FloatingComponent>\n </>\n );\n}\n"],"names":["makePrefixer","useState","useWindow","useRef","useId","useFloatingComponent","useCallback","_a","offset","useFloatingUI","size","elements","flip","shift","useInteractions","useClick","useDismiss","useForkRef","jsxs","Fragment","jsx","Button","OverflowMenuIcon","BreadcrumbNextContext"],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var react = require('react');
|
|
4
|
-
|
|
5
|
-
function isFragmentElement(child) {
|
|
6
|
-
return react.isValidElement(child) && child.type === react.Fragment;
|
|
7
|
-
}
|
|
8
|
-
function flattenBreadcrumbItems(children) {
|
|
9
|
-
const flattenedChildren = [];
|
|
10
|
-
react.Children.forEach(children, (child) => {
|
|
11
|
-
if (isFragmentElement(child)) {
|
|
12
|
-
flattenedChildren.push(...flattenBreadcrumbItems(child.props.children));
|
|
13
|
-
} else if (child !== null && child !== void 0 && typeof child !== "boolean") {
|
|
14
|
-
flattenedChildren.push(child);
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
return flattenedChildren;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
exports.flattenBreadcrumbItems = flattenBreadcrumbItems;
|
|
21
|
-
//# sourceMappingURL=breadcrumbItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumbItems.js","sources":["../src/breadcrumbs-next/internal/breadcrumbItems.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n type Key,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type { BreadcrumbNextProps } from \"../BreadcrumbNext\";\n\nexport interface NormalizedBreadcrumb {\n element: ReactElement<BreadcrumbNextProps>;\n index: number;\n key: Key;\n props: BreadcrumbNextProps;\n}\n\nfunction isFragmentElement(\n child: ReactNode,\n): child is ReactElement<{ children?: ReactNode }> {\n return (\n isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment\n );\n}\n\nexport function flattenBreadcrumbItems(children: ReactNode): ReactNode[] {\n const flattenedChildren: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenedChildren.push(...flattenBreadcrumbItems(child.props.children));\n } else if (\n child !== null &&\n child !== undefined &&\n typeof child !== \"boolean\"\n ) {\n flattenedChildren.push(child);\n }\n });\n\n return flattenedChildren;\n}\n"],"names":["isValidElement","Fragment","Children"],"mappings":";;;;AAiBA,SAAS,kBACP,KAAA,EACiD;AACjD,EAAA,OACEA,oBAAA,CAAyC,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,KAASC,cAAA;AAEtE;AAEO,SAAS,uBAAuB,QAAA,EAAkC;AACvE,EAAA,MAAM,oBAAiC,EAAC;AAExC,EAAAC,cAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AACpC,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,iBAAA,CAAkB,KAAK,GAAG,sBAAA,CAAuB,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,IACxE,WACE,KAAA,KAAU,IAAA,IACV,UAAU,MAAA,IACV,OAAO,UAAU,SAAA,EACjB;AACA,MAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,iBAAA;AACT;;;;"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var css_248z = ".saltBreadcrumb {\n --breadcrumbs-crumb-color: var(--saltBreadcrumbs-crumb-color, var(--salt-actionable-primary-foreground));\n --breadcrumbs-crumb-color-hover: var(--saltBreadcrumbs-crumb-color-hover, var(--salt-actionable-primary-foreground-hover));\n --breadcrumbs-crumb-color-active: var(--saltBreadcrumbs-crumb-color-active, var(--salt-actionable-primary-foreground-active));\n --breadcrumbs-crumb-icon-color: var(--saltBreadcrumbs-crumb-icon-color, var(--breadcrumbs-crumb-color));\n --breadcrumbs-crumb-marginLeft: 0px;\n}\n\n.saltBreadcrumb {\n padding: 0px;\n}\n\n.saltBreadcrumb-regular {\n display: flex;\n gap: calc(var(--salt-size-unit) / 2);\n align-items: center;\n color: var(--breadcrumbs-crumb-color);\n}\n\n.saltBreadcrumb-regular:visited {\n color: currentColor;\n}\n\n.saltBreadcrumb-regular:visited .saltBreadcrumb-icon {\n color: currentColor;\n}\n\n.saltBreadcrumb-regular:hover {\n color: var(--breadcrumbs-crumb-color-hover);\n}\n\n.saltBreadcrumb-regular:hover .saltBreadcrumb-icon {\n color: var(--breadcrumbs-crumb-color-hover);\n}\n\n.saltBreadcrumb-regular:active {\n color: var(--breadcrumbs-crumb-color-active);\n}\n\n.saltBreadcrumb-regular:active .saltBreadcrumb-icon {\n color: var(--breadcrumbs-crumb-color-active);\n}\n\n.saltBreadcrumb-currentLevel {\n color: var(--breadcrumbs-crumb-color);\n}\n\n.saltBreadcrumb-icon {\n color: var(--breadcrumbs-crumb-icon-color);\n margin-left: var(--saltBreadcrumbs-crumb-marginLeft, var(--breadcrumbs-crumb-marginLeft));\n}\n\n.saltBreadcrumb-justifyContentCenter {\n justify-content: center;\n}\n\n.saltBreadcrumb-text {\n text-decoration: underline;\n}\n";
|
|
2
|
-
|
|
3
|
-
export { css_248z as default };
|
|
4
|
-
//# sourceMappingURL=Breadcrumb.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { makePrefixer, Text, Link } from '@salt-ds/core';
|
|
3
|
-
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
-
import { useWindow } from '@salt-ds/window';
|
|
5
|
-
import { clsx } from 'clsx';
|
|
6
|
-
import { forwardRef, Children } from 'react';
|
|
7
|
-
import css_248z from './Breadcrumb.css.js';
|
|
8
|
-
import { useBreadcrumbsContext } from './internal/BreadcrumbsContext.js';
|
|
9
|
-
|
|
10
|
-
const withBaseName = makePrefixer("saltBreadcrumb");
|
|
11
|
-
const Breadcrumb = forwardRef(
|
|
12
|
-
function Breadcrumb2({
|
|
13
|
-
children,
|
|
14
|
-
ContainerProps = {},
|
|
15
|
-
tooltipText,
|
|
16
|
-
tooltipProps,
|
|
17
|
-
isCurrentLevel,
|
|
18
|
-
onItemClick,
|
|
19
|
-
overflowLabel,
|
|
20
|
-
maxWidth,
|
|
21
|
-
Icon,
|
|
22
|
-
minWidth,
|
|
23
|
-
className,
|
|
24
|
-
...props
|
|
25
|
-
}, ref) {
|
|
26
|
-
const targetWindow = useWindow();
|
|
27
|
-
useComponentCssInjection({
|
|
28
|
-
testId: "salt-breadcrumb",
|
|
29
|
-
css: css_248z,
|
|
30
|
-
window: targetWindow
|
|
31
|
-
});
|
|
32
|
-
const { itemsMaxWidth, itemsMinWidth, liClass } = useBreadcrumbsContext();
|
|
33
|
-
const hasChildren = Children.count(children) !== 0;
|
|
34
|
-
const hasOnlyIcon = Icon && !hasChildren;
|
|
35
|
-
const getDefaultBreadcrumb = () => isCurrentLevel ? /* @__PURE__ */ jsx(
|
|
36
|
-
Text,
|
|
37
|
-
{
|
|
38
|
-
maxRows: 1,
|
|
39
|
-
className: clsx(
|
|
40
|
-
withBaseName(),
|
|
41
|
-
className,
|
|
42
|
-
withBaseName("currentLevel")
|
|
43
|
-
),
|
|
44
|
-
styleAs: "label",
|
|
45
|
-
children
|
|
46
|
-
}
|
|
47
|
-
) : /* @__PURE__ */ jsxs(
|
|
48
|
-
"div",
|
|
49
|
-
{
|
|
50
|
-
className: clsx(
|
|
51
|
-
withBaseName(),
|
|
52
|
-
className,
|
|
53
|
-
{
|
|
54
|
-
[withBaseName("justifyContentCenter")]: hasOnlyIcon
|
|
55
|
-
},
|
|
56
|
-
withBaseName("regular")
|
|
57
|
-
),
|
|
58
|
-
children: [
|
|
59
|
-
Icon && /* @__PURE__ */ jsx(Icon, { className: withBaseName("icon") }),
|
|
60
|
-
hasChildren && /* @__PURE__ */ jsx(Link, { maxRows: 1, styleAs: "label", ...props, children })
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
);
|
|
64
|
-
const content = getDefaultBreadcrumb();
|
|
65
|
-
const {
|
|
66
|
-
style: containerStyle,
|
|
67
|
-
className: containerClassName,
|
|
68
|
-
...containerPropsRest
|
|
69
|
-
} = ContainerProps;
|
|
70
|
-
return /* @__PURE__ */ jsx(
|
|
71
|
-
"li",
|
|
72
|
-
{
|
|
73
|
-
ref,
|
|
74
|
-
style: {
|
|
75
|
-
...containerStyle,
|
|
76
|
-
minWidth: minWidth ?? itemsMinWidth,
|
|
77
|
-
maxWidth: maxWidth ?? itemsMaxWidth
|
|
78
|
-
},
|
|
79
|
-
className: clsx(liClass, containerClassName),
|
|
80
|
-
...containerPropsRest,
|
|
81
|
-
children: content
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
export { Breadcrumb };
|
|
88
|
-
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../src/breadcrumbs/Breadcrumb.tsx"],"sourcesContent":["import { Link, makePrefixer, Text, type TooltipProps } from \"@salt-ds/core\";\nimport type { IconProps } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentType,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport type { CascadingMenuProps } from \"../cascading-menu/CascadingMenuProps\";\nimport breadcrumbCss from \"./Breadcrumb.css\";\nimport { useBreadcrumbsContext } from \"./internal/BreadcrumbsContext\";\n\nconst withBaseName = makePrefixer(\"saltBreadcrumb\");\n\nexport interface BreadcrumbProps\n extends Pick<CascadingMenuProps, \"onItemClick\"> {\n children?: ReactNode;\n ContainerProps?: HTMLAttributes<HTMLLIElement>;\n tooltipText?: string;\n tooltipProps?: TooltipProps;\n className?: string;\n href?: string;\n isCurrentLevel?: boolean;\n maxWidth?: number;\n minWidth?: number;\n overflowLabel?: string;\n Icon?: ComponentType<IconProps>;\n}\n\nexport const Breadcrumb = forwardRef<HTMLLIElement, BreadcrumbProps>(\n function Breadcrumb(\n {\n children,\n ContainerProps = {},\n tooltipText,\n tooltipProps,\n isCurrentLevel,\n onItemClick,\n overflowLabel,\n maxWidth,\n Icon,\n minWidth,\n className,\n ...props\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-breadcrumb\",\n css: breadcrumbCss,\n window: targetWindow,\n });\n\n const { itemsMaxWidth, itemsMinWidth, liClass } = useBreadcrumbsContext();\n\n const hasChildren = Children.count(children) !== 0;\n const hasOnlyIcon = Icon && !hasChildren;\n\n const getDefaultBreadcrumb = () =>\n isCurrentLevel ? (\n <Text\n maxRows={1}\n className={clsx(\n withBaseName(),\n className,\n withBaseName(\"currentLevel\"),\n )}\n styleAs=\"label\"\n >\n {children}\n </Text>\n ) : (\n <div\n className={clsx(\n withBaseName(),\n className,\n {\n [withBaseName(\"justifyContentCenter\")]: hasOnlyIcon,\n },\n withBaseName(\"regular\"),\n )}\n >\n {Icon && <Icon className={withBaseName(\"icon\")} />}\n {hasChildren && (\n <Link maxRows={1} styleAs=\"label\" {...props}>\n {children}\n </Link>\n )}\n </div>\n );\n\n const content = getDefaultBreadcrumb();\n\n const {\n style: containerStyle,\n className: containerClassName,\n ...containerPropsRest\n } = ContainerProps;\n\n return (\n <li\n ref={ref}\n style={{\n ...containerStyle,\n minWidth: minWidth ?? itemsMinWidth,\n maxWidth: maxWidth ?? itemsMaxWidth,\n }}\n className={clsx(liClass, containerClassName)}\n {...containerPropsRest}\n >\n {content}\n </li>\n );\n },\n);\n"],"names":["Breadcrumb","breadcrumbCss"],"mappings":";;;;;;;;;AAgBA,MAAM,YAAA,GAAe,aAAa,gBAAgB,CAAA;AAiB3C,MAAM,UAAA,GAAa,UAAA;AAAA,EACxB,SAASA,WAAAA,CACP;AAAA,IACE,QAAA;AAAA,IACA,iBAAiB,EAAC;AAAA,IAClB,WAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,aAAA,EAAe,aAAA,EAAe,OAAA,KAAY,qBAAA,EAAsB;AAExE,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,KAAM,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,QAAQ,CAAC,WAAA;AAE7B,IAAA,MAAM,oBAAA,GAAuB,MAC3B,cAAA,mBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA;AAAA,QACT,SAAA,EAAW,IAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb,SAAA;AAAA,UACA,aAAa,cAAc;AAAA,SAC7B;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QAEP;AAAA;AAAA,KACH,mBAEA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb,SAAA;AAAA,UACA;AAAA,YACE,CAAC,YAAA,CAAa,sBAAsB,CAAC,GAAG;AAAA,WAC1C;AAAA,UACA,aAAa,SAAS;AAAA,SACxB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,oBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,MAAM,CAAA,EAAG,CAAA;AAAA,UAC/C,WAAA,wBACE,IAAA,EAAA,EAAK,OAAA,EAAS,GAAG,OAAA,EAAQ,OAAA,EAAS,GAAG,KAAA,EACnC,QAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAGJ,IAAA,MAAM,UAAU,oBAAA,EAAqB;AAErC,IAAA,MAAM;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,SAAA,EAAW,kBAAA;AAAA,MACX,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAG,cAAA;AAAA,UACH,UAAU,QAAA,IAAY,aAAA;AAAA,UACtB,UAAU,QAAA,IAAY;AAAA,SACxB;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,OAAA,EAAS,kBAAkB,CAAA;AAAA,QAC1C,GAAG,kBAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var css_248z = ".saltBreadcrumbs-ol {\n --breadcrumbs-ol-gap: var(--salt-size-unit);\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0;\n margin: 0;\n gap: var(--breadcrumbs-ol-gap);\n}\n\n.saltBreadcrumbs-li {\n --breadcrumbs-li-marginRight: 0px;\n --breadcrumbs-li-padding: 0px;\n\n flex: 0 1 auto;\n list-style: none;\n margin-right: var(--breadcrumbs-li-marginRight);\n padding: var(--breadcrumbs-li-padding);\n}\n\n.saltBreadcrumbs-separator {\n --breadcrumbs-separator-marginRight: 0px;\n\n display: flex;\n margin-right: var(--breadcrumbs-separator-marginRight);\n user-select: none;\n}\n\n.saltBreadcrumbs-ol-wrap {\n flex-wrap: wrap;\n}\n\n.saltBreadcrumbs-ol-wrap .saltBreadcrumbs-li,\n.saltBreadcrumbs-ol-wrap .saltBreadcrumbs-separator {\n --breadcrumbs-ol-wrap-li-marginBottom: 0px;\n\n margin-bottom: var(--breadcrumbs-ol-wrap-li-marginBottom);\n}\n";
|
|
2
|
-
|
|
3
|
-
export { css_248z as default };
|
|
4
|
-
//# sourceMappingURL=Breadcrumbs.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { makePrefixer } from '@salt-ds/core';
|
|
3
|
-
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
-
import { useWindow } from '@salt-ds/window';
|
|
5
|
-
import { clsx } from 'clsx';
|
|
6
|
-
import { forwardRef, useMemo, Children, isValidElement, cloneElement } from 'react';
|
|
7
|
-
import css_248z from './Breadcrumbs.css.js';
|
|
8
|
-
import { BreadcrumbsCollapsed } from './internal/BreadcrumbsCollapsed.js';
|
|
9
|
-
import { BreadcrumbsContext } from './internal/BreadcrumbsContext.js';
|
|
10
|
-
import { BreadcrumbsSeparator } from './internal/BreadcrumbsSeparator.js';
|
|
11
|
-
|
|
12
|
-
const iconWidth = 12;
|
|
13
|
-
const withBaseName = makePrefixer("saltBreadcrumbs");
|
|
14
|
-
function insertSeparators(items, className, separator, hideCurrentLevel, shouldRenderAllItems, itemsAfterCollapse) {
|
|
15
|
-
return items.reduce((acc, current, index) => {
|
|
16
|
-
if (index < items.length - 1) {
|
|
17
|
-
return acc.concat(
|
|
18
|
-
current,
|
|
19
|
-
/* @__PURE__ */ jsx(
|
|
20
|
-
"li",
|
|
21
|
-
{
|
|
22
|
-
"aria-hidden": true,
|
|
23
|
-
className,
|
|
24
|
-
children: separator
|
|
25
|
-
},
|
|
26
|
-
`separator-${// biome-ignore lint/suspicious/noArrayIndexKey: Using index as key is acceptable here
|
|
27
|
-
index}`
|
|
28
|
-
)
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
const skipLastElement = hideCurrentLevel && shouldRenderAllItems || hideCurrentLevel && !shouldRenderAllItems && itemsAfterCollapse !== 0;
|
|
32
|
-
return skipLastElement ? acc : acc.concat(current);
|
|
33
|
-
}, []);
|
|
34
|
-
}
|
|
35
|
-
const Breadcrumbs = forwardRef(
|
|
36
|
-
function Breadcrumbs2(props, ref) {
|
|
37
|
-
const {
|
|
38
|
-
children,
|
|
39
|
-
className,
|
|
40
|
-
itemsAfterCollapse = 1,
|
|
41
|
-
itemsBeforeCollapse = 1,
|
|
42
|
-
maxItems = 3,
|
|
43
|
-
separator: separatorProp,
|
|
44
|
-
hideCurrentLevel,
|
|
45
|
-
itemsMinWidth: itemsMinWidthProp,
|
|
46
|
-
itemsMaxWidth,
|
|
47
|
-
wrap,
|
|
48
|
-
Menu: _Menu,
|
|
49
|
-
SeparatorProps = {},
|
|
50
|
-
...other
|
|
51
|
-
} = props;
|
|
52
|
-
const targetWindow = useWindow();
|
|
53
|
-
useComponentCssInjection({
|
|
54
|
-
testId: "salt-breadcrumbs",
|
|
55
|
-
css: css_248z,
|
|
56
|
-
window: targetWindow
|
|
57
|
-
});
|
|
58
|
-
const itemsMinWidth = itemsMinWidthProp != null ? itemsMinWidthProp : iconWidth;
|
|
59
|
-
const breadcrumbsContext = useMemo(
|
|
60
|
-
() => ({
|
|
61
|
-
wrap,
|
|
62
|
-
itemsMinWidth,
|
|
63
|
-
itemsMaxWidth,
|
|
64
|
-
liClass: withBaseName("li")
|
|
65
|
-
}),
|
|
66
|
-
[wrap, itemsMaxWidth, itemsMinWidth]
|
|
67
|
-
);
|
|
68
|
-
const separator = separatorProp || /* @__PURE__ */ jsx(BreadcrumbsSeparator, { ...SeparatorProps });
|
|
69
|
-
const childrenArray = Children.toArray(children);
|
|
70
|
-
const shouldRenderAllItems = wrap || maxItems == null || childrenArray.length <= maxItems;
|
|
71
|
-
const allItems = childrenArray.filter(isValidElement).map((child, index) => {
|
|
72
|
-
const isLastChild = index === childrenArray.length - 1;
|
|
73
|
-
return cloneElement(child, {
|
|
74
|
-
isCurrentLevel: isLastChild
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
const renderItemsBeforeAndAfter = () => {
|
|
78
|
-
if (itemsBeforeCollapse + itemsAfterCollapse >= allItems.length) {
|
|
79
|
-
console.warn(
|
|
80
|
-
[
|
|
81
|
-
"You have provided an invalid combination of properties to the Breadcrumbs.",
|
|
82
|
-
`itemsAfterCollapse={${itemsAfterCollapse}} +itemsBeforeCollapse={${itemsBeforeCollapse}} >= maxItems={${maxItems}}`
|
|
83
|
-
].join("\n")
|
|
84
|
-
);
|
|
85
|
-
return allItems;
|
|
86
|
-
}
|
|
87
|
-
const hiddenItems = allItems.slice(
|
|
88
|
-
itemsBeforeCollapse,
|
|
89
|
-
allItems.length - itemsAfterCollapse
|
|
90
|
-
);
|
|
91
|
-
return [
|
|
92
|
-
...allItems.slice(0, itemsBeforeCollapse),
|
|
93
|
-
/* @__PURE__ */ jsx("li", { className: withBaseName("li"), children: /* @__PURE__ */ jsx(
|
|
94
|
-
BreadcrumbsCollapsed,
|
|
95
|
-
{
|
|
96
|
-
accessibleText: `Breadcrumb levels ${itemsBeforeCollapse + 1} to ${allItems.length - itemsAfterCollapse}`,
|
|
97
|
-
className: withBaseName("overflowButton"),
|
|
98
|
-
children: hiddenItems
|
|
99
|
-
}
|
|
100
|
-
) }, "breadcrumbs-collapsed"),
|
|
101
|
-
...allItems.slice(
|
|
102
|
-
allItems.length - itemsAfterCollapse,
|
|
103
|
-
allItems.length
|
|
104
|
-
)
|
|
105
|
-
];
|
|
106
|
-
};
|
|
107
|
-
const itemsToRender = shouldRenderAllItems ? allItems : renderItemsBeforeAndAfter();
|
|
108
|
-
return /* @__PURE__ */ jsx(BreadcrumbsContext.Provider, { value: breadcrumbsContext, children: /* @__PURE__ */ jsx(
|
|
109
|
-
"nav",
|
|
110
|
-
{
|
|
111
|
-
"aria-label": "Breadcrumb",
|
|
112
|
-
className: clsx(withBaseName(), className),
|
|
113
|
-
"data-testid": "breadcrumbs",
|
|
114
|
-
ref,
|
|
115
|
-
...other,
|
|
116
|
-
children: /* @__PURE__ */ jsx(
|
|
117
|
-
"ol",
|
|
118
|
-
{
|
|
119
|
-
className: clsx(withBaseName("ol"), {
|
|
120
|
-
[withBaseName("ol-wrap")]: wrap
|
|
121
|
-
}),
|
|
122
|
-
children: insertSeparators(
|
|
123
|
-
itemsToRender,
|
|
124
|
-
withBaseName("separator"),
|
|
125
|
-
separator,
|
|
126
|
-
hideCurrentLevel,
|
|
127
|
-
shouldRenderAllItems,
|
|
128
|
-
itemsAfterCollapse
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
)
|
|
132
|
-
}
|
|
133
|
-
) });
|
|
134
|
-
}
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
export { Breadcrumbs };
|
|
138
|
-
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.js","sources":["../src/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { IconProps } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentType,\n cloneElement,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport type { BreadcrumbProps } from \"./Breadcrumb\";\nimport breadcrumbsCss from \"./Breadcrumbs.css\";\nimport { BreadcrumbsCollapsed } from \"./internal/BreadcrumbsCollapsed\";\nimport { BreadcrumbsContext } from \"./internal/BreadcrumbsContext\";\nimport { BreadcrumbsSeparator } from \"./internal/BreadcrumbsSeparator\";\n\nconst iconWidth = 12;\n\nconst withBaseName = makePrefixer(\"saltBreadcrumbs\");\n\nfunction insertSeparators(\n items: ReactNode[],\n className?: string,\n separator?: ReactNode,\n hideCurrentLevel?: boolean,\n shouldRenderAllItems?: boolean,\n itemsAfterCollapse?: number,\n) {\n return items.reduce((acc: ReactNode[], current: ReactNode, index: number) => {\n if (index < items.length - 1) {\n return acc.concat(\n current,\n <li\n aria-hidden\n className={className}\n key={`separator-${\n // biome-ignore lint/suspicious/noArrayIndexKey: Using index as key is acceptable here\n index\n }`}\n >\n {separator}\n </li>,\n );\n }\n const skipLastElement =\n (hideCurrentLevel && shouldRenderAllItems) ||\n (hideCurrentLevel && !shouldRenderAllItems && itemsAfterCollapse !== 0);\n return skipLastElement ? acc : acc.concat(current);\n }, []);\n}\n\nexport interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {\n Menu?: ComponentType;\n SeparatorProps?: IconProps;\n hideCurrentLevel?: boolean;\n itemsAfterCollapse?: number;\n itemsBeforeCollapse?: number;\n itemsMaxWidth?: number | string;\n itemsMinWidth?: number | string;\n maxItems?: number;\n separator?: ReactNode;\n wrap?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n function Breadcrumbs(props, ref) {\n const {\n children,\n className,\n itemsAfterCollapse = 1,\n itemsBeforeCollapse = 1,\n maxItems = 3,\n separator: separatorProp,\n hideCurrentLevel,\n itemsMinWidth: itemsMinWidthProp,\n itemsMaxWidth,\n wrap,\n Menu: _Menu,\n SeparatorProps = {},\n ...other\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-breadcrumbs\",\n css: breadcrumbsCss,\n window: targetWindow,\n });\n\n const itemsMinWidth =\n itemsMinWidthProp != null ? itemsMinWidthProp : iconWidth;\n\n const breadcrumbsContext = useMemo(\n () => ({\n wrap,\n itemsMinWidth,\n itemsMaxWidth,\n liClass: withBaseName(\"li\"),\n }),\n [wrap, itemsMaxWidth, itemsMinWidth],\n );\n\n const separator = separatorProp || (\n <BreadcrumbsSeparator {...SeparatorProps} />\n );\n\n const childrenArray = Children.toArray(children);\n const shouldRenderAllItems =\n wrap || maxItems == null || childrenArray.length <= maxItems;\n\n const allItems = childrenArray\n .filter(isValidElement)\n .map((child, index) => {\n const isLastChild = index === childrenArray.length - 1;\n\n return cloneElement(child, {\n isCurrentLevel: isLastChild,\n } as BreadcrumbProps);\n });\n\n const renderItemsBeforeAndAfter = () => {\n // This defends against someone passing weird input, to ensure that if all\n // items would be shown anyway, we just show all items without the EllipsisItem\n if (itemsBeforeCollapse + itemsAfterCollapse >= allItems.length) {\n console.warn(\n [\n \"You have provided an invalid combination of properties to the Breadcrumbs.\",\n `itemsAfterCollapse={${itemsAfterCollapse}} +itemsBeforeCollapse={${itemsBeforeCollapse}} >= maxItems={${maxItems}}`,\n ].join(\"\\n\"),\n );\n return allItems;\n }\n\n const hiddenItems = allItems.slice(\n itemsBeforeCollapse,\n allItems.length - itemsAfterCollapse,\n );\n return [\n ...allItems.slice(0, itemsBeforeCollapse),\n <li className={withBaseName(\"li\")} key=\"breadcrumbs-collapsed\">\n <BreadcrumbsCollapsed\n accessibleText={`Breadcrumb levels ${itemsBeforeCollapse + 1} to ${\n allItems.length - itemsAfterCollapse\n }`}\n className={withBaseName(\"overflowButton\")}\n >\n {hiddenItems}\n </BreadcrumbsCollapsed>\n </li>,\n ...allItems.slice(\n allItems.length - itemsAfterCollapse,\n allItems.length,\n ),\n ];\n };\n\n const itemsToRender = shouldRenderAllItems\n ? allItems\n : renderItemsBeforeAndAfter();\n return (\n <BreadcrumbsContext.Provider value={breadcrumbsContext}>\n <nav\n aria-label=\"Breadcrumb\"\n className={clsx(withBaseName(), className)}\n data-testid=\"breadcrumbs\"\n ref={ref}\n {...other}\n >\n <ol\n className={clsx(withBaseName(\"ol\"), {\n [withBaseName(\"ol-wrap\")]: wrap,\n })}\n >\n {insertSeparators(\n itemsToRender,\n withBaseName(\"separator\"),\n separator,\n hideCurrentLevel,\n shouldRenderAllItems,\n itemsAfterCollapse,\n )}\n </ol>\n </nav>\n </BreadcrumbsContext.Provider>\n );\n },\n);\n"],"names":["Breadcrumbs","breadcrumbsCss"],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useIcon } from '@salt-ds/core';
|
|
3
|
-
import { Children, isValidElement, useCallback } from 'react';
|
|
4
|
-
import { MenuButton } from '../../menu-button/MenuButton.js';
|
|
5
|
-
import { useFocusMenuRemount } from './useFocusMenuRemount.js';
|
|
6
|
-
|
|
7
|
-
const BreadcrumbsCollapsed = ({
|
|
8
|
-
children,
|
|
9
|
-
CascadingMenuProps,
|
|
10
|
-
accessibleText,
|
|
11
|
-
...rest
|
|
12
|
-
}) => {
|
|
13
|
-
const keys = Children.map(children, (child) => {
|
|
14
|
-
if (isValidElement(child)) {
|
|
15
|
-
return child.key;
|
|
16
|
-
}
|
|
17
|
-
return "";
|
|
18
|
-
});
|
|
19
|
-
const { OverflowIcon } = useIcon();
|
|
20
|
-
const key = keys ? keys.join("") : "";
|
|
21
|
-
const { ref, shouldFocusOnMount } = useFocusMenuRemount(key);
|
|
22
|
-
const itemToString = useCallback((child) => {
|
|
23
|
-
if (!child) {
|
|
24
|
-
return "";
|
|
25
|
-
}
|
|
26
|
-
const { overflowLabel, tooltipText, children: children2 } = child.props;
|
|
27
|
-
return overflowLabel || tooltipText || String(children2);
|
|
28
|
-
}, []);
|
|
29
|
-
const onItemClick = useCallback(() => {
|
|
30
|
-
shouldFocusOnMount.current = true;
|
|
31
|
-
}, [shouldFocusOnMount]);
|
|
32
|
-
const menuItems = [];
|
|
33
|
-
Children.forEach(children, (x) => {
|
|
34
|
-
if (isValidElement(x)) {
|
|
35
|
-
menuItems.push({ props: x.props });
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
return /* @__PURE__ */ jsx(
|
|
39
|
-
MenuButton,
|
|
40
|
-
{
|
|
41
|
-
CascadingMenuProps: {
|
|
42
|
-
initialSource: {
|
|
43
|
-
// Only `props` is required for `itemToString`. Otherwise causing circular JSON conversion in useControlled.js
|
|
44
|
-
// This is not reproducible in unit tests, where react / react-dom is partially mocked without circular reference
|
|
45
|
-
menuItems
|
|
46
|
-
},
|
|
47
|
-
itemToString,
|
|
48
|
-
onItemClick,
|
|
49
|
-
minWidth: 0,
|
|
50
|
-
...CascadingMenuProps
|
|
51
|
-
},
|
|
52
|
-
hideCaret: true,
|
|
53
|
-
...rest,
|
|
54
|
-
ref,
|
|
55
|
-
children: /* @__PURE__ */ jsx(OverflowIcon, {})
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export { BreadcrumbsCollapsed };
|
|
61
|
-
//# sourceMappingURL=BreadcrumbsCollapsed.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbsCollapsed.js","sources":["../src/breadcrumbs/internal/BreadcrumbsCollapsed.tsx"],"sourcesContent":["import { useIcon } from \"@salt-ds/core\";\nimport {\n Children,\n type Component,\n isValidElement,\n type ReactNode,\n useCallback,\n} from \"react\";\nimport type { CascadingMenuProps, MenuDescriptor } from \"../../cascading-menu\";\nimport { MenuButton, type MenuButtonProps } from \"../../menu-button\";\nimport type { BreadcrumbProps } from \"../Breadcrumb\";\nimport { useFocusMenuRemount } from \"./useFocusMenuRemount\";\n\nexport interface BreadcrumbsCollapsedProps\n extends Omit<MenuButtonProps, \"CascadingMenuProps\"> {\n CascadingMenuProps?: CascadingMenuProps;\n accessibleText?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport const BreadcrumbsCollapsed = ({\n children,\n CascadingMenuProps,\n accessibleText,\n ...rest\n}: BreadcrumbsCollapsedProps) => {\n const keys = Children.map(children, (child) => {\n if (isValidElement(child)) {\n return child.key;\n }\n return \"\";\n });\n\n const { OverflowIcon } = useIcon();\n const key = keys ? keys.join(\"\") : \"\";\n const { ref, shouldFocusOnMount } =\n useFocusMenuRemount<HTMLButtonElement>(key);\n\n const itemToString = useCallback((child: Component<BreadcrumbProps>) => {\n if (!child) {\n return \"\";\n }\n const { overflowLabel, tooltipText, children } = child.props;\n return overflowLabel || tooltipText || String(children);\n }, []) as (item: MenuDescriptor) => string;\n\n const onItemClick = useCallback((): void => {\n shouldFocusOnMount.current = true;\n }, [shouldFocusOnMount]);\n\n const menuItems: MenuDescriptor[] = [];\n Children.forEach(children, (x) => {\n if (isValidElement(x)) {\n menuItems.push({ props: x.props } as MenuDescriptor);\n }\n });\n\n return (\n <MenuButton\n CascadingMenuProps={{\n initialSource: {\n // Only `props` is required for `itemToString`. Otherwise causing circular JSON conversion in useControlled.js\n // This is not reproducible in unit tests, where react / react-dom is partially mocked without circular reference\n menuItems,\n },\n itemToString,\n onItemClick,\n minWidth: 0,\n ...CascadingMenuProps,\n }}\n hideCaret\n {...rest}\n ref={ref}\n >\n <OverflowIcon />\n </MenuButton>\n );\n};\n"],"names":["children"],"mappings":";;;;;;AAqBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAiC;AAC/B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,KAAA,KAAU;AAC7C,IAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,MAAA,OAAO,KAAA,CAAM,GAAA;AAAA,IACf;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,OAAA,EAAQ;AACjC,EAAA,MAAM,GAAA,GAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,GAAI,EAAA;AACnC,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAA,EAAmB,GAC9B,oBAAuC,GAAG,CAAA;AAE5C,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,CAAC,KAAA,KAAsC;AACtE,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAE,aAAA,EAAe,WAAA,EAAa,QAAA,EAAAA,SAAAA,KAAa,KAAA,CAAM,KAAA;AACvD,IAAA,OAAO,aAAA,IAAiB,WAAA,IAAe,MAAA,CAAOA,SAAQ,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,YAAY,MAAY;AAC1C,IAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAA,MAAM,YAA8B,EAAC;AACrC,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,KAAM;AAChC,IAAA,IAAI,cAAA,CAAe,CAAC,CAAA,EAAG;AACrB,MAAA,SAAA,CAAU,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,CAAE,OAAyB,CAAA;AAAA,IACrD;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,kBAAA,EAAoB;AAAA,QAClB,aAAA,EAAe;AAAA;AAAA;AAAA,UAGb;AAAA,SACF;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA,EAAU,CAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,MACA,SAAA,EAAS,IAAA;AAAA,MACR,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MAEA,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,GAChB;AAEJ;;;;"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext } from 'react';
|
|
2
|
-
|
|
3
|
-
const BreadcrumbsContext = createContext(
|
|
4
|
-
void 0
|
|
5
|
-
);
|
|
6
|
-
const useBreadcrumbsContext = () => {
|
|
7
|
-
const context = useContext(BreadcrumbsContext);
|
|
8
|
-
if (!context) {
|
|
9
|
-
throw new Error(
|
|
10
|
-
"BreadcrumbsItem compound components cannot be rendered outside the Breadcrumbs component"
|
|
11
|
-
);
|
|
12
|
-
}
|
|
13
|
-
return context;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export { BreadcrumbsContext, useBreadcrumbsContext };
|
|
17
|
-
//# sourceMappingURL=BreadcrumbsContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbsContext.js","sources":["../src/breadcrumbs/internal/BreadcrumbsContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface BreadcrumbsContext {\n wrap?: boolean;\n itemsMaxWidth?: number | string;\n itemsMinWidth?: number | string;\n liClass?: string;\n}\n\nexport const BreadcrumbsContext = createContext<BreadcrumbsContext | undefined>(\n undefined,\n);\n\nexport const useBreadcrumbsContext = () => {\n const context = useContext(BreadcrumbsContext);\n if (!context) {\n throw new Error(\n \"BreadcrumbsItem compound components cannot be rendered outside the Breadcrumbs component\",\n );\n }\n return context;\n};\n"],"names":[],"mappings":";;AASO,MAAM,kBAAA,GAAqB,aAAA;AAAA,EAChC;AACF;AAEO,MAAM,wBAAwB,MAAM;AACzC,EAAA,MAAM,OAAA,GAAU,WAAW,kBAAkB,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { ChevronRightIcon } from '@salt-ds/icons';
|
|
3
|
-
|
|
4
|
-
const BreadcrumbsSeparator = (props) => /* @__PURE__ */ jsx(ChevronRightIcon, { ...props });
|
|
5
|
-
|
|
6
|
-
export { BreadcrumbsSeparator };
|
|
7
|
-
//# sourceMappingURL=BreadcrumbsSeparator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbsSeparator.js","sources":["../src/breadcrumbs/internal/BreadcrumbsSeparator.tsx"],"sourcesContent":["import { ChevronRightIcon, type IconProps } from \"@salt-ds/icons\";\n\nexport const BreadcrumbsSeparator = (props: IconProps) => (\n <ChevronRightIcon {...props} />\n);\n"],"names":[],"mappings":";;;AAEO,MAAM,uBAAuB,CAAC,KAAA,qBACnC,GAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO;;;;"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { usePrevious } from '@salt-ds/core';
|
|
2
|
-
import { useRef, useEffect } from 'react';
|
|
3
|
-
|
|
4
|
-
function useFocusMenuRemount(key) {
|
|
5
|
-
const ref = useRef(null);
|
|
6
|
-
const shouldFocusOnMount = useRef(false);
|
|
7
|
-
const previousKey = usePrevious(key);
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
if (ref.current && shouldFocusOnMount.current && previousKey !== key) {
|
|
10
|
-
ref.current.focus();
|
|
11
|
-
shouldFocusOnMount.current = false;
|
|
12
|
-
} else {
|
|
13
|
-
shouldFocusOnMount.current = false;
|
|
14
|
-
}
|
|
15
|
-
}, [previousKey, key]);
|
|
16
|
-
return { ref, shouldFocusOnMount };
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export { useFocusMenuRemount };
|
|
20
|
-
//# sourceMappingURL=useFocusMenuRemount.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusMenuRemount.js","sources":["../src/breadcrumbs/internal/useFocusMenuRemount.ts"],"sourcesContent":["import { usePrevious } from \"@salt-ds/core\";\nimport { useEffect, useRef } from \"react\";\n\nexport function useFocusMenuRemount<T extends HTMLElement>(key: string) {\n const ref = useRef<T>(null);\n const shouldFocusOnMount = useRef(false);\n const previousKey = usePrevious(key);\n\n useEffect(() => {\n if (ref.current && shouldFocusOnMount.current && previousKey !== key) {\n ref.current.focus();\n shouldFocusOnMount.current = false;\n } else {\n shouldFocusOnMount.current = false;\n }\n }, [previousKey, key]);\n\n return { ref, shouldFocusOnMount };\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,oBAA2C,GAAA,EAAa;AACtE,EAAA,MAAM,GAAA,GAAM,OAAU,IAAI,CAAA;AAC1B,EAAA,MAAM,kBAAA,GAAqB,OAAO,KAAK,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,YAAY,GAAG,CAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,GAAA,CAAI,OAAA,IAAW,kBAAA,CAAmB,OAAA,IAAW,gBAAgB,GAAA,EAAK;AACpE,MAAA,GAAA,CAAI,QAAQ,KAAA,EAAM;AAClB,MAAA,kBAAA,CAAmB,OAAA,GAAU,KAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,OAAA,GAAU,KAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,GAAG,CAAC,CAAA;AAErB,EAAA,OAAO,EAAE,KAAK,kBAAA,EAAmB;AACnC;;;;"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var css_248z = ".saltBreadcrumbNext {\n align-items: center;\n display: inline-flex;\n flex: 0 1 auto;\n gap: var(--salt-spacing-100);\n list-style: none;\n min-width: 0;\n}\n\n.saltBreadcrumbNext-current,\n.saltBreadcrumbNext-label,\n.saltBreadcrumbNext-link,\n.saltBreadcrumbNext-trigger {\n min-width: 0;\n}\n\n.saltBreadcrumbNext-trigger {\n align-items: center;\n color: var(--salt-content-primary-foreground);\n display: inline-flex;\n font-family: var(--salt-text-label-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n font-weight: var(--salt-text-fontWeight);\n gap: var(--salt-spacing-50);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-label-lineHeight);\n max-width: 100%;\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumbNext-link:not(.saltBreadcrumbNext-current) {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumbNext-link:not(.saltBreadcrumbNext-current):hover {\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumbNext-link:not(.saltBreadcrumbNext-current):active {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumbNext-trigger:focus {\n outline: var(--salt-focused-outline);\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumbNext-current {\n cursor: var(--salt-cursor-text);\n}\n\n.saltBreadcrumbNext-separator {\n --saltIcon-color: var(--salt-content-secondary-foreground);\n --saltIcon-size: var(--salt-size-icon);\n\n flex: 0 0 auto;\n}\n";
|
|
2
|
-
|
|
3
|
-
export { css_248z as default };
|
|
4
|
-
//# sourceMappingURL=BreadcrumbNext.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbNext.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { makePrefixer, useIcon } from '@salt-ds/core';
|
|
3
|
-
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
-
import { useWindow } from '@salt-ds/window';
|
|
5
|
-
import { clsx } from 'clsx';
|
|
6
|
-
import { forwardRef, Children } from 'react';
|
|
7
|
-
import css_248z from './BreadcrumbNext.css.js';
|
|
8
|
-
import { BreadcrumbNextLabel } from './BreadcrumbNextLabel.js';
|
|
9
|
-
import { BreadcrumbNextTrigger } from './BreadcrumbNextTrigger.js';
|
|
10
|
-
import { useBreadcrumbNextContext, BreadcrumbNextContext } from './internal/BreadcrumbNextContext.js';
|
|
11
|
-
|
|
12
|
-
const withBaseName = makePrefixer("saltBreadcrumbNext");
|
|
13
|
-
const withBreadcrumbsBaseName = makePrefixer("saltBreadcrumbsNext");
|
|
14
|
-
function isPrimitiveBreadcrumbLabel(children) {
|
|
15
|
-
return typeof children === "string" && children.trim() !== "" || typeof children === "number";
|
|
16
|
-
}
|
|
17
|
-
function isMissingBreadcrumbContent(children) {
|
|
18
|
-
const childArray = Children.toArray(children);
|
|
19
|
-
return childArray.length === 0 || childArray.every(
|
|
20
|
-
(child) => typeof child === "string" && child.trim() === ""
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
let missingBreadcrumbContentWarningShown = false;
|
|
24
|
-
function warnIfMissingBreadcrumbContent() {
|
|
25
|
-
if (process.env.NODE_ENV === "production" || missingBreadcrumbContentWarningShown) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
missingBreadcrumbContentWarningShown = true;
|
|
29
|
-
console.warn(
|
|
30
|
-
"BreadcrumbNext requires children to render a named breadcrumb item. Use text children for simple items or BreadcrumbNextTrigger with BreadcrumbNextLabel for composed items."
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
const BreadcrumbNext = forwardRef(
|
|
34
|
-
function BreadcrumbNext2(props, ref) {
|
|
35
|
-
const {
|
|
36
|
-
children,
|
|
37
|
-
className,
|
|
38
|
-
current: currentProp,
|
|
39
|
-
href,
|
|
40
|
-
render,
|
|
41
|
-
...rest
|
|
42
|
-
} = props;
|
|
43
|
-
const targetWindow = useWindow();
|
|
44
|
-
useComponentCssInjection({
|
|
45
|
-
testId: "salt-breadcrumb-next",
|
|
46
|
-
css: css_248z,
|
|
47
|
-
window: targetWindow
|
|
48
|
-
});
|
|
49
|
-
const parentContext = useBreadcrumbNextContext();
|
|
50
|
-
const current = (parentContext == null ? void 0 : parentContext.current) ?? Boolean(currentProp);
|
|
51
|
-
const onNavigate = parentContext == null ? void 0 : parentContext.onNavigate;
|
|
52
|
-
const placement = (parentContext == null ? void 0 : parentContext.placement) ?? "trail";
|
|
53
|
-
const showSeparator = (parentContext == null ? void 0 : parentContext.showSeparator) ?? false;
|
|
54
|
-
const triggerRef = parentContext == null ? void 0 : parentContext.triggerRef;
|
|
55
|
-
const resolvedRender = render ?? (parentContext == null ? void 0 : parentContext.render);
|
|
56
|
-
const { LevelSeparatorIcon } = useIcon();
|
|
57
|
-
const missingContent = isMissingBreadcrumbContent(children);
|
|
58
|
-
if (missingContent) {
|
|
59
|
-
warnIfMissingBreadcrumbContent();
|
|
60
|
-
}
|
|
61
|
-
const primitiveChildren = isPrimitiveBreadcrumbLabel(children) ? children : void 0;
|
|
62
|
-
const content = missingContent ? null : primitiveChildren !== void 0 ? /* @__PURE__ */ jsx(BreadcrumbNextTrigger, { children: /* @__PURE__ */ jsx(BreadcrumbNextLabel, { children: primitiveChildren }) }) : children;
|
|
63
|
-
const context = {
|
|
64
|
-
current,
|
|
65
|
-
href,
|
|
66
|
-
onNavigate,
|
|
67
|
-
placement,
|
|
68
|
-
render: resolvedRender,
|
|
69
|
-
showSeparator,
|
|
70
|
-
triggerRef
|
|
71
|
-
};
|
|
72
|
-
return /* @__PURE__ */ jsx(
|
|
73
|
-
"li",
|
|
74
|
-
{
|
|
75
|
-
ref,
|
|
76
|
-
className: clsx(
|
|
77
|
-
placement === "disclosure" ? withBreadcrumbsBaseName("disclosureListItem") : withBaseName(),
|
|
78
|
-
className
|
|
79
|
-
),
|
|
80
|
-
...rest,
|
|
81
|
-
children: /* @__PURE__ */ jsxs(BreadcrumbNextContext.Provider, { value: context, children: [
|
|
82
|
-
content,
|
|
83
|
-
placement === "trail" && showSeparator ? /* @__PURE__ */ jsx(
|
|
84
|
-
LevelSeparatorIcon,
|
|
85
|
-
{
|
|
86
|
-
"aria-hidden": true,
|
|
87
|
-
className: withBaseName("separator")
|
|
88
|
-
}
|
|
89
|
-
) : null
|
|
90
|
-
] })
|
|
91
|
-
}
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
export { BreadcrumbNext };
|
|
97
|
-
//# sourceMappingURL=BreadcrumbNext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbNext.js","sources":["../src/breadcrumbs-next/BreadcrumbNext.tsx"],"sourcesContent":["import { makePrefixer, type RenderPropsType, useIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport breadcrumbNextCss from \"./BreadcrumbNext.css\";\nimport { BreadcrumbNextLabel } from \"./BreadcrumbNextLabel\";\nimport { BreadcrumbNextTrigger } from \"./BreadcrumbNextTrigger\";\nimport {\n BreadcrumbNextContext,\n useBreadcrumbNextContext,\n} from \"./internal/BreadcrumbNextContext\";\n\nconst withBaseName = makePrefixer(\"saltBreadcrumbNext\");\nconst withBreadcrumbsBaseName = makePrefixer(\"saltBreadcrumbsNext\");\n\nfunction isPrimitiveBreadcrumbLabel(children: ReactNode) {\n return (\n (typeof children === \"string\" && children.trim() !== \"\") ||\n typeof children === \"number\"\n );\n}\n\nfunction isMissingBreadcrumbContent(children: ReactNode) {\n const childArray = Children.toArray(children);\n\n return (\n childArray.length === 0 ||\n childArray.every(\n (child) => typeof child === \"string\" && child.trim() === \"\",\n )\n );\n}\n\nlet missingBreadcrumbContentWarningShown = false;\n\nfunction warnIfMissingBreadcrumbContent() {\n if (\n process.env.NODE_ENV === \"production\" ||\n missingBreadcrumbContentWarningShown\n ) {\n return;\n }\n\n missingBreadcrumbContentWarningShown = true;\n console.warn(\n \"BreadcrumbNext requires children to render a named breadcrumb item. Use text children for simple items or BreadcrumbNextTrigger with BreadcrumbNextLabel for composed items.\",\n );\n}\n\nexport interface BreadcrumbNextProps\n extends Omit<ComponentPropsWithoutRef<\"li\">, \"children\"> {\n /**\n * Custom breadcrumb content. Use this for advanced composition with\n * `BreadcrumbNextTrigger` and `BreadcrumbNextLabel`.\n */\n children?: ReactNode;\n /**\n * If `true`, the breadcrumb represents the current page.\n */\n current?: boolean;\n /**\n * The URL for the breadcrumb. Provide this for the current breadcrumb so it\n * renders as a focusable link with `aria-current=\"page\"`.\n */\n href?: string;\n /**\n * Render prop to enable customization of the underlying link element.\n */\n render?: RenderPropsType[\"render\"];\n}\n\nexport const BreadcrumbNext = forwardRef<HTMLLIElement, BreadcrumbNextProps>(\n function BreadcrumbNext(props, ref) {\n const {\n children,\n className,\n current: currentProp,\n href,\n render,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-breadcrumb-next\",\n css: breadcrumbNextCss,\n window: targetWindow,\n });\n\n const parentContext = useBreadcrumbNextContext();\n const current = parentContext?.current ?? Boolean(currentProp);\n const onNavigate = parentContext?.onNavigate;\n const placement = parentContext?.placement ?? \"trail\";\n const showSeparator = parentContext?.showSeparator ?? false;\n const triggerRef = parentContext?.triggerRef;\n const resolvedRender = render ?? parentContext?.render;\n const { LevelSeparatorIcon } = useIcon();\n const missingContent = isMissingBreadcrumbContent(children);\n\n if (missingContent) {\n warnIfMissingBreadcrumbContent();\n }\n\n const primitiveChildren = isPrimitiveBreadcrumbLabel(children)\n ? children\n : undefined;\n const content = missingContent ? null : primitiveChildren !== undefined ? (\n <BreadcrumbNextTrigger>\n <BreadcrumbNextLabel>{primitiveChildren}</BreadcrumbNextLabel>\n </BreadcrumbNextTrigger>\n ) : (\n children\n );\n const context = {\n current,\n href,\n onNavigate,\n placement,\n render: resolvedRender,\n showSeparator,\n triggerRef,\n };\n\n return (\n <li\n ref={ref}\n className={clsx(\n placement === \"disclosure\"\n ? withBreadcrumbsBaseName(\"disclosureListItem\")\n : withBaseName(),\n className,\n )}\n {...rest}\n >\n <BreadcrumbNextContext.Provider value={context}>\n {content}\n {placement === \"trail\" && showSeparator ? (\n <LevelSeparatorIcon\n aria-hidden\n className={withBaseName(\"separator\")}\n />\n ) : null}\n </BreadcrumbNextContext.Provider>\n </li>\n );\n },\n);\n"],"names":["BreadcrumbNext","breadcrumbNextCss"],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { makePrefixer } from '@salt-ds/core';
|
|
3
|
-
import { clsx } from 'clsx';
|
|
4
|
-
import { forwardRef } from 'react';
|
|
5
|
-
|
|
6
|
-
const withBaseName = makePrefixer("saltBreadcrumbNext");
|
|
7
|
-
const BreadcrumbNextLabel = forwardRef(function BreadcrumbNextLabel2({ className, ...rest }, ref) {
|
|
8
|
-
return /* @__PURE__ */ jsx(
|
|
9
|
-
"span",
|
|
10
|
-
{
|
|
11
|
-
ref,
|
|
12
|
-
className: clsx(withBaseName("label"), className),
|
|
13
|
-
...rest
|
|
14
|
-
}
|
|
15
|
-
);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export { BreadcrumbNextLabel };
|
|
19
|
-
//# sourceMappingURL=BreadcrumbNextLabel.js.map
|