@snksergio/design-system 0.37.2 → 0.38.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-lib/chunks/{kpi-delta-0eogwK3C.mjs → kpi-delta-BQ6waavJ.mjs} +2 -2
- package/dist-lib/chunks/{kpi-delta-0eogwK3C.mjs.map → kpi-delta-BQ6waavJ.mjs.map} +1 -1
- package/dist-lib/chunks/{kpi-delta-Cz6qAe4c.cjs → kpi-delta-NM4hUgz4.cjs} +2 -2
- package/dist-lib/chunks/{kpi-delta-Cz6qAe4c.cjs.map → kpi-delta-NM4hUgz4.cjs.map} +1 -1
- package/dist-lib/chunks/{panel-NCZKvmDE.mjs → panel-BYgb6UTx.mjs} +2 -2
- package/dist-lib/chunks/{panel-NCZKvmDE.mjs.map → panel-BYgb6UTx.mjs.map} +1 -1
- package/dist-lib/chunks/{panel-DNobvn1Z.cjs → panel-CmmbJAIs.cjs} +2 -2
- package/dist-lib/chunks/{panel-DNobvn1Z.cjs.map → panel-CmmbJAIs.cjs.map} +1 -1
- package/dist-lib/chunks/{useTheme-BeD_2lZN.cjs → useTheme-C8eZFGSb.cjs} +175 -33
- package/dist-lib/chunks/useTheme-C8eZFGSb.cjs.map +1 -0
- package/dist-lib/chunks/{useTheme-CYMBVr3I.mjs → useTheme-Chash1gR.mjs} +178 -36
- package/dist-lib/chunks/useTheme-Chash1gR.mjs.map +1 -0
- package/dist-lib/index.cjs +7 -3
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +221 -217
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/preview/chat.cjs +1 -1
- package/dist-lib/preview/chat.mjs +1 -1
- package/dist-lib/preview/clientes.cjs +2 -2
- package/dist-lib/preview/clientes.mjs +2 -2
- package/dist-lib/preview/dashboard.cjs +2 -2
- package/dist-lib/preview/dashboard.mjs +2 -2
- package/dist-lib/src/components/ui/AppShell/app-shell.d.ts +1 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.d.ts.map +1 -1
- package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts +23 -3
- package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/index.d.ts +3 -1
- package/dist-lib/src/components/ui/MenuSidebar/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/menu-sidebar.d.ts +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/menu-sidebar.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/nav-link.d.ts +29 -0
- package/dist-lib/src/components/ui/MenuSidebar/nav-link.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-item.d.ts +16 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-item.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-panel.d.ts +6 -4
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-panel.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-rail.d.ts +7 -3
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-rail.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-section.d.ts +4 -2
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-section.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-subgroup.d.ts +6 -3
- package/dist-lib/src/components/ui/MenuSidebar/sidebar-subgroup.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts +56 -2
- package/dist-lib/src/components/ui/MenuSidebar/sidebar.types.d.ts.map +1 -1
- package/package.json +7 -4
- package/dist-lib/chunks/useTheme-BeD_2lZN.cjs.map +0 -1
- package/dist-lib/chunks/useTheme-CYMBVr3I.mjs.map +0 -1
|
@@ -1558,6 +1558,33 @@ function SidebarBrandIcon({ size = 18 }) {
|
|
|
1558
1558
|
}
|
|
1559
1559
|
);
|
|
1560
1560
|
}
|
|
1561
|
+
const EXTERNO = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
1562
|
+
function isExternalHref(href) {
|
|
1563
|
+
if (!href) return false;
|
|
1564
|
+
if (href.startsWith("#")) return false;
|
|
1565
|
+
return EXTERNO.test(href);
|
|
1566
|
+
}
|
|
1567
|
+
function isHashHref(href) {
|
|
1568
|
+
return !!href && href.startsWith("#");
|
|
1569
|
+
}
|
|
1570
|
+
function isModifiedClick(e) {
|
|
1571
|
+
return (e.button ?? 0) !== 0 || !!e.metaKey || !!e.ctrlKey || !!e.shiftKey || !!e.altKey;
|
|
1572
|
+
}
|
|
1573
|
+
function shouldPreventNavigation({
|
|
1574
|
+
href,
|
|
1575
|
+
hasHandler,
|
|
1576
|
+
target,
|
|
1577
|
+
event
|
|
1578
|
+
}) {
|
|
1579
|
+
if (!href) return false;
|
|
1580
|
+
if (!hasHandler) return false;
|
|
1581
|
+
if (event.defaultPrevented) return false;
|
|
1582
|
+
if (target && target !== "_self") return false;
|
|
1583
|
+
if (isHashHref(href)) return false;
|
|
1584
|
+
if (isExternalHref(href)) return false;
|
|
1585
|
+
if (isModifiedClick(event)) return false;
|
|
1586
|
+
return true;
|
|
1587
|
+
}
|
|
1561
1588
|
function SidebarRail({
|
|
1562
1589
|
contexts,
|
|
1563
1590
|
activeContextId,
|
|
@@ -1566,10 +1593,21 @@ function SidebarRail({
|
|
|
1566
1593
|
user,
|
|
1567
1594
|
showAdd = false,
|
|
1568
1595
|
onAddClick,
|
|
1596
|
+
brandHref = "/",
|
|
1597
|
+
onBrandClick,
|
|
1598
|
+
renderLink,
|
|
1569
1599
|
className
|
|
1570
1600
|
}) {
|
|
1571
1601
|
return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: avatar.cn(sidebarRail(), className), children: [
|
|
1572
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1602
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1603
|
+
SidebarBrandLink,
|
|
1604
|
+
{
|
|
1605
|
+
href: brandHref,
|
|
1606
|
+
onClick: onBrandClick,
|
|
1607
|
+
renderLink,
|
|
1608
|
+
children: brand ?? /* @__PURE__ */ jsxRuntime.jsx(SidebarBrandIcon, {})
|
|
1609
|
+
}
|
|
1610
|
+
),
|
|
1573
1611
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: sidebarRailList(), children: [
|
|
1574
1612
|
contexts.map((ctx) => {
|
|
1575
1613
|
const Icon = ctx.icon;
|
|
@@ -1605,8 +1643,52 @@ function SidebarRail({
|
|
|
1605
1643
|
user !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: sidebarRailUser(), children: user ?? /* @__PURE__ */ jsxRuntime.jsx("div", { className: sidebarRailUserDefault(), children: "SV" }) })
|
|
1606
1644
|
] });
|
|
1607
1645
|
}
|
|
1646
|
+
function SidebarBrandLink({
|
|
1647
|
+
href,
|
|
1648
|
+
onClick,
|
|
1649
|
+
renderLink,
|
|
1650
|
+
children
|
|
1651
|
+
}) {
|
|
1652
|
+
if (!href) {
|
|
1653
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1654
|
+
"button",
|
|
1655
|
+
{
|
|
1656
|
+
type: "button",
|
|
1657
|
+
className: sidebarRailBrand(),
|
|
1658
|
+
onClick,
|
|
1659
|
+
"aria-label": "Home",
|
|
1660
|
+
children
|
|
1661
|
+
}
|
|
1662
|
+
);
|
|
1663
|
+
}
|
|
1664
|
+
const handleClick = (e) => {
|
|
1665
|
+
if (!renderLink) {
|
|
1666
|
+
const prevent = shouldPreventNavigation({ href, hasHandler: !!onClick, event: e });
|
|
1667
|
+
if (prevent) e.preventDefault();
|
|
1668
|
+
}
|
|
1669
|
+
onClick?.(e);
|
|
1670
|
+
};
|
|
1671
|
+
const linkProps = {
|
|
1672
|
+
href,
|
|
1673
|
+
className: sidebarRailBrand(),
|
|
1674
|
+
onClick: handleClick,
|
|
1675
|
+
"aria-label": "Home",
|
|
1676
|
+
children
|
|
1677
|
+
};
|
|
1678
|
+
if (renderLink) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderLink(linkProps) });
|
|
1679
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", { ...linkProps });
|
|
1680
|
+
}
|
|
1608
1681
|
const SidebarItem = React.forwardRef(
|
|
1609
|
-
({
|
|
1682
|
+
({
|
|
1683
|
+
item,
|
|
1684
|
+
active,
|
|
1685
|
+
subitem,
|
|
1686
|
+
iconBrand,
|
|
1687
|
+
onClick,
|
|
1688
|
+
renderLink,
|
|
1689
|
+
interceptNavigation,
|
|
1690
|
+
className
|
|
1691
|
+
}, ref) => {
|
|
1610
1692
|
const Icon = item.icon;
|
|
1611
1693
|
const classes = avatar.cn(sidebarItem({ active, subitem }), className);
|
|
1612
1694
|
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -1622,21 +1704,30 @@ const SidebarItem = React.forwardRef(
|
|
|
1622
1704
|
item.badge && /* @__PURE__ */ jsxRuntime.jsx(SidebarPill, { kind: item.badgeKind, active, children: item.badge })
|
|
1623
1705
|
] });
|
|
1624
1706
|
const handleClick = (e) => {
|
|
1707
|
+
if (!renderLink) {
|
|
1708
|
+
const prevent = shouldPreventNavigation({
|
|
1709
|
+
href: item.href,
|
|
1710
|
+
hasHandler: interceptNavigation ?? !!(item.onClick || onClick),
|
|
1711
|
+
target: item.target,
|
|
1712
|
+
event: e
|
|
1713
|
+
});
|
|
1714
|
+
if (prevent) e.preventDefault();
|
|
1715
|
+
}
|
|
1625
1716
|
if (item.onClick) item.onClick(e);
|
|
1626
1717
|
onClick?.(e);
|
|
1627
1718
|
};
|
|
1628
1719
|
if (item.href) {
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
);
|
|
1720
|
+
const linkProps = {
|
|
1721
|
+
href: item.href,
|
|
1722
|
+
className: classes,
|
|
1723
|
+
onClick: handleClick,
|
|
1724
|
+
target: item.target,
|
|
1725
|
+
"aria-current": active ? "page" : void 0,
|
|
1726
|
+
ref,
|
|
1727
|
+
children: content
|
|
1728
|
+
};
|
|
1729
|
+
if (renderLink) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderLink(linkProps) });
|
|
1730
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", { ...linkProps });
|
|
1640
1731
|
}
|
|
1641
1732
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1642
1733
|
"button",
|
|
@@ -1664,6 +1755,8 @@ function SidebarSubgroup({
|
|
|
1664
1755
|
item,
|
|
1665
1756
|
activeItemHref,
|
|
1666
1757
|
onItemClick,
|
|
1758
|
+
renderLink,
|
|
1759
|
+
interceptNavigation,
|
|
1667
1760
|
open,
|
|
1668
1761
|
defaultOpen,
|
|
1669
1762
|
onOpenChange,
|
|
@@ -1718,7 +1811,9 @@ function SidebarSubgroup({
|
|
|
1718
1811
|
item: sub,
|
|
1719
1812
|
subitem: true,
|
|
1720
1813
|
active: sub.href !== void 0 && sub.href === activeItemHref,
|
|
1721
|
-
onClick: () => onItemClick?.(sub)
|
|
1814
|
+
onClick: (e) => onItemClick?.(sub, e),
|
|
1815
|
+
renderLink,
|
|
1816
|
+
interceptNavigation
|
|
1722
1817
|
},
|
|
1723
1818
|
sub.href ?? sub.name
|
|
1724
1819
|
)) })
|
|
@@ -1728,6 +1823,7 @@ function SidebarSection({
|
|
|
1728
1823
|
section,
|
|
1729
1824
|
open,
|
|
1730
1825
|
onOpenChange,
|
|
1826
|
+
renderLink,
|
|
1731
1827
|
className
|
|
1732
1828
|
}) {
|
|
1733
1829
|
const [internalOpen, setInternalOpen] = React.useState(section.defaultOpen ?? true);
|
|
@@ -1792,6 +1888,7 @@ function SidebarSection({
|
|
|
1792
1888
|
{
|
|
1793
1889
|
href: item.href,
|
|
1794
1890
|
onClick: item.onClick,
|
|
1891
|
+
renderLink,
|
|
1795
1892
|
title: item.name,
|
|
1796
1893
|
children: [
|
|
1797
1894
|
Icon ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1821,6 +1918,7 @@ function SidebarSection({
|
|
|
1821
1918
|
{
|
|
1822
1919
|
href: item.href,
|
|
1823
1920
|
onClick: item.onClick,
|
|
1921
|
+
renderLink,
|
|
1824
1922
|
title: `Conversar com ${item.name}`,
|
|
1825
1923
|
children: [
|
|
1826
1924
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1852,22 +1950,34 @@ function SidebarSectionLink({
|
|
|
1852
1950
|
href,
|
|
1853
1951
|
onClick,
|
|
1854
1952
|
title,
|
|
1953
|
+
renderLink,
|
|
1855
1954
|
children
|
|
1856
1955
|
}) {
|
|
1857
1956
|
const handleClick = (e) => {
|
|
1858
|
-
if (!href || href === "#")
|
|
1957
|
+
if (!href || href === "#") {
|
|
1958
|
+
e.preventDefault();
|
|
1959
|
+
onClick?.(e);
|
|
1960
|
+
return;
|
|
1961
|
+
}
|
|
1962
|
+
if (!renderLink) {
|
|
1963
|
+
const prevent = shouldPreventNavigation({
|
|
1964
|
+
href,
|
|
1965
|
+
hasHandler: !!onClick,
|
|
1966
|
+
event: e
|
|
1967
|
+
});
|
|
1968
|
+
if (prevent) e.preventDefault();
|
|
1969
|
+
}
|
|
1859
1970
|
onClick?.(e);
|
|
1860
1971
|
};
|
|
1861
|
-
|
|
1862
|
-
"
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
);
|
|
1972
|
+
const linkProps = {
|
|
1973
|
+
href: href ?? "#",
|
|
1974
|
+
className: sidebarSectionItem(),
|
|
1975
|
+
onClick: handleClick,
|
|
1976
|
+
title,
|
|
1977
|
+
children
|
|
1978
|
+
};
|
|
1979
|
+
if (renderLink && href && href !== "#") return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderLink(linkProps) });
|
|
1980
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", { ...linkProps });
|
|
1871
1981
|
}
|
|
1872
1982
|
function SidebarPanel({
|
|
1873
1983
|
context,
|
|
@@ -1876,6 +1986,8 @@ function SidebarPanel({
|
|
|
1876
1986
|
mobile,
|
|
1877
1987
|
activeItemHref,
|
|
1878
1988
|
onItemClick,
|
|
1989
|
+
renderLink,
|
|
1990
|
+
interceptNavigation,
|
|
1879
1991
|
contexts,
|
|
1880
1992
|
onContextChange,
|
|
1881
1993
|
onTitleClick,
|
|
@@ -1936,7 +2048,9 @@ function SidebarPanel({
|
|
|
1936
2048
|
{
|
|
1937
2049
|
item,
|
|
1938
2050
|
activeItemHref,
|
|
1939
|
-
onItemClick
|
|
2051
|
+
onItemClick,
|
|
2052
|
+
renderLink,
|
|
2053
|
+
interceptNavigation
|
|
1940
2054
|
},
|
|
1941
2055
|
item.name
|
|
1942
2056
|
);
|
|
@@ -1946,12 +2060,21 @@ function SidebarPanel({
|
|
|
1946
2060
|
{
|
|
1947
2061
|
item,
|
|
1948
2062
|
active: item.href !== void 0 && item.href === activeItemHref,
|
|
1949
|
-
onClick: () => onItemClick?.(item)
|
|
2063
|
+
onClick: (e) => onItemClick?.(item, e),
|
|
2064
|
+
renderLink,
|
|
2065
|
+
interceptNavigation
|
|
1950
2066
|
},
|
|
1951
2067
|
item.href ?? item.name
|
|
1952
2068
|
);
|
|
1953
2069
|
}) }),
|
|
1954
|
-
context.sections?.map((section) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2070
|
+
context.sections?.map((section) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2071
|
+
SidebarSection,
|
|
2072
|
+
{
|
|
2073
|
+
section,
|
|
2074
|
+
renderLink
|
|
2075
|
+
},
|
|
2076
|
+
section.id
|
|
2077
|
+
))
|
|
1955
2078
|
] }) })
|
|
1956
2079
|
]
|
|
1957
2080
|
}
|
|
@@ -2006,6 +2129,9 @@ function MenuSidebar({
|
|
|
2006
2129
|
defaultMobileOpen,
|
|
2007
2130
|
onMobileOpenChange,
|
|
2008
2131
|
mobileBreakpoint = "(max-width: 767px)",
|
|
2132
|
+
renderLink,
|
|
2133
|
+
brandHref,
|
|
2134
|
+
onBrandClick,
|
|
2009
2135
|
className
|
|
2010
2136
|
}) {
|
|
2011
2137
|
const isMobile = useMediaQuery(mobileBreakpoint);
|
|
@@ -2040,11 +2166,12 @@ function MenuSidebar({
|
|
|
2040
2166
|
}, []);
|
|
2041
2167
|
const shouldFloat = !isMobile && !!expandOnHover && collapsed && (hoverExpanded || hoverExiting);
|
|
2042
2168
|
const activeContext = contexts.find((c) => c.id === ctxId) ?? contexts[0];
|
|
2043
|
-
const
|
|
2169
|
+
const interceptNavigation = !renderLink && !!onItemClick;
|
|
2170
|
+
const handleItemClick = (item, event) => {
|
|
2044
2171
|
if (item.href && activeItemHref === void 0) {
|
|
2045
2172
|
setItemHref(item.href);
|
|
2046
2173
|
}
|
|
2047
|
-
onItemClick?.(item);
|
|
2174
|
+
onItemClick?.(item, event);
|
|
2048
2175
|
if (isMobile && item.href) setOpenMobile(false);
|
|
2049
2176
|
};
|
|
2050
2177
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -2094,7 +2221,10 @@ function MenuSidebar({
|
|
|
2094
2221
|
brand,
|
|
2095
2222
|
user,
|
|
2096
2223
|
showAdd: showRailAdd,
|
|
2097
|
-
onAddClick: onRailAddClick
|
|
2224
|
+
onAddClick: onRailAddClick,
|
|
2225
|
+
brandHref,
|
|
2226
|
+
onBrandClick,
|
|
2227
|
+
renderLink
|
|
2098
2228
|
}
|
|
2099
2229
|
),
|
|
2100
2230
|
activeContext && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2108,7 +2238,9 @@ function MenuSidebar({
|
|
|
2108
2238
|
onItemClick: handleItemClick,
|
|
2109
2239
|
contexts,
|
|
2110
2240
|
onContextChange: setCtxId,
|
|
2111
|
-
onTitleClick: onPanelTitleClick
|
|
2241
|
+
onTitleClick: onPanelTitleClick,
|
|
2242
|
+
renderLink,
|
|
2243
|
+
interceptNavigation
|
|
2112
2244
|
}
|
|
2113
2245
|
),
|
|
2114
2246
|
isMobile && openMobile && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2314,6 +2446,9 @@ function AppShell({
|
|
|
2314
2446
|
defaultActiveItemHref,
|
|
2315
2447
|
activeItemHref,
|
|
2316
2448
|
onItemClick,
|
|
2449
|
+
renderLink,
|
|
2450
|
+
brandHref,
|
|
2451
|
+
onBrandClick,
|
|
2317
2452
|
// Header
|
|
2318
2453
|
breadcrumb,
|
|
2319
2454
|
commandGroups,
|
|
@@ -2385,6 +2520,9 @@ function AppShell({
|
|
|
2385
2520
|
activeItemHref,
|
|
2386
2521
|
defaultActiveItemHref,
|
|
2387
2522
|
onItemClick,
|
|
2523
|
+
renderLink,
|
|
2524
|
+
brandHref,
|
|
2525
|
+
onBrandClick,
|
|
2388
2526
|
user: userNode,
|
|
2389
2527
|
panelCollapsed: menuCollapsed,
|
|
2390
2528
|
onPanelCollapseChange: (next) => {
|
|
@@ -2510,7 +2648,11 @@ exports.SidebarSubgroup = SidebarSubgroup;
|
|
|
2510
2648
|
exports.UserMenu = UserMenu;
|
|
2511
2649
|
exports.chipCount = chipCount;
|
|
2512
2650
|
exports.chipVariants = chipVariants;
|
|
2651
|
+
exports.isExternalHref = isExternalHref;
|
|
2652
|
+
exports.isHashHref = isHashHref;
|
|
2653
|
+
exports.isModifiedClick = isModifiedClick;
|
|
2654
|
+
exports.shouldPreventNavigation = shouldPreventNavigation;
|
|
2513
2655
|
exports.useControllable = useControllable;
|
|
2514
2656
|
exports.useMediaQuery = useMediaQuery;
|
|
2515
2657
|
exports.useTheme = useTheme;
|
|
2516
|
-
//# sourceMappingURL=useTheme-
|
|
2658
|
+
//# sourceMappingURL=useTheme-C8eZFGSb.cjs.map
|