@flamingo-stack/openframe-frontend-core 0.0.499 → 0.0.500
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/{chunk-XV22URNM.cjs → chunk-4NDGD2YH.cjs} +19 -19
- package/dist/{chunk-XV22URNM.cjs.map → chunk-4NDGD2YH.cjs.map} +1 -1
- package/dist/{chunk-YDNIQLAP.js → chunk-5CY6YKWY.js} +6 -6
- package/dist/{chunk-Q66TP2LY.js → chunk-6TJJFQ74.js} +6 -6
- package/dist/{chunk-47LHA4QI.cjs → chunk-C5R2OX7A.cjs} +7 -2
- package/dist/chunk-C5R2OX7A.cjs.map +1 -0
- package/dist/{chunk-NSDDV4F6.cjs → chunk-ETU6VFOL.cjs} +40 -40
- package/dist/{chunk-NSDDV4F6.cjs.map → chunk-ETU6VFOL.cjs.map} +1 -1
- package/dist/{chunk-WJ2S6I34.cjs → chunk-GDUWGCPP.cjs} +12 -12
- package/dist/{chunk-WJ2S6I34.cjs.map → chunk-GDUWGCPP.cjs.map} +1 -1
- package/dist/{chunk-44YXQBNM.cjs → chunk-I64ZGPA6.cjs} +3 -3
- package/dist/{chunk-44YXQBNM.cjs.map → chunk-I64ZGPA6.cjs.map} +1 -1
- package/dist/{chunk-7DUMNMED.cjs → chunk-IDRKW6MS.cjs} +12 -12
- package/dist/{chunk-7DUMNMED.cjs.map → chunk-IDRKW6MS.cjs.map} +1 -1
- package/dist/{chunk-SGL6URIJ.cjs → chunk-L5CI57RM.cjs} +9 -5
- package/dist/chunk-L5CI57RM.cjs.map +1 -0
- package/dist/{chunk-Q6B7VAHN.cjs → chunk-LN2X4XAB.cjs} +18 -18
- package/dist/{chunk-Q6B7VAHN.cjs.map → chunk-LN2X4XAB.cjs.map} +1 -1
- package/dist/{chunk-RAL274JM.js → chunk-P3B65FBX.js} +4 -4
- package/dist/{chunk-QWCW4Z75.js → chunk-P5UMIPKR.js} +5 -5
- package/dist/{chunk-QL5YB4F7.js → chunk-P7IOCYGD.js} +52 -47
- package/dist/chunk-P7IOCYGD.js.map +1 -0
- package/dist/{chunk-V2APV4E4.cjs → chunk-PAO45LBQ.cjs} +1113 -916
- package/dist/chunk-PAO45LBQ.cjs.map +1 -0
- package/dist/{chunk-3AXJESKA.js → chunk-QQAKDJPE.js} +3 -3
- package/dist/{chunk-O7JY7LRP.js → chunk-R2IGOYHU.js} +3 -3
- package/dist/{chunk-RBZOUGCL.cjs → chunk-S3COVC7H.cjs} +73 -73
- package/dist/{chunk-RBZOUGCL.cjs.map → chunk-S3COVC7H.cjs.map} +1 -1
- package/dist/{chunk-QUFB5SDZ.js → chunk-SOX7CGFX.js} +303 -106
- package/dist/{chunk-QUFB5SDZ.js.map → chunk-SOX7CGFX.js.map} +1 -1
- package/dist/{chunk-W42256FC.cjs → chunk-TJCUGL7S.cjs} +33 -33
- package/dist/{chunk-W42256FC.cjs.map → chunk-TJCUGL7S.cjs.map} +1 -1
- package/dist/{chunk-SSYE7BQC.js → chunk-UM2YFCPE.js} +3 -3
- package/dist/{chunk-2CEDCSYD.cjs → chunk-V5ALIJZ6.cjs} +32 -32
- package/dist/{chunk-2CEDCSYD.cjs.map → chunk-V5ALIJZ6.cjs.map} +1 -1
- package/dist/{chunk-EP7ELZTU.cjs → chunk-VLI6ESJN.cjs} +93 -93
- package/dist/{chunk-EP7ELZTU.cjs.map → chunk-VLI6ESJN.cjs.map} +1 -1
- package/dist/{chunk-BAMTV6GL.js → chunk-VMDQDD5Y.js} +2 -2
- package/dist/{chunk-IUP26OXG.js → chunk-VPQBQJ4S.js} +2 -2
- package/dist/{chunk-TTJSLIXA.js → chunk-W6Y66G4K.js} +3 -3
- package/dist/{chunk-QKWOBV55.js → chunk-WHJGRRK2.js} +9 -5
- package/dist/chunk-WHJGRRK2.js.map +1 -0
- package/dist/{chunk-AEZ5BXLJ.js → chunk-XBLRT3MX.js} +4 -4
- package/dist/{chunk-FLZTUE2T.cjs → chunk-YSN2AZJR.cjs} +5 -5
- package/dist/{chunk-FLZTUE2T.cjs.map → chunk-YSN2AZJR.cjs.map} +1 -1
- package/dist/{chunk-6QVV3OLL.cjs → chunk-ZLJCE75C.cjs} +40 -40
- package/dist/{chunk-6QVV3OLL.cjs.map → chunk-ZLJCE75C.cjs.map} +1 -1
- package/dist/{chunk-UD4IT3GY.js → chunk-ZU27I5NZ.js} +6 -6
- package/dist/components/case-studies/index.cjs +10 -10
- package/dist/components/case-studies/index.js +4 -4
- package/dist/components/chat/index.cjs +4 -4
- package/dist/components/chat/index.js +3 -3
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/contact/index.js +4 -4
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/index.js +4 -4
- package/dist/components/faq/index.cjs +6 -6
- package/dist/components/faq/index.js +5 -5
- package/dist/components/features/filters-dropdown.d.ts.map +1 -1
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +165 -161
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +16 -12
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/app-header.d.ts +48 -0
- package/dist/components/navigation/app-header.d.ts.map +1 -1
- package/dist/components/navigation/header-mingo-button.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +6 -4
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.d.ts +2 -2
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +5 -3
- package/dist/components/navigation/navigation-sidebar-item.d.ts +14 -0
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar-toggle.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar.d.ts +18 -0
- package/dist/components/navigation/navigation-sidebar.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +8 -8
- package/dist/components/onboarding-guides/index.js +7 -7
- package/dist/components/related-content/index.cjs +6 -6
- package/dist/components/related-content/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/button/button-styles.d.ts +1 -0
- package/dist/components/ui/button/button-styles.d.ts.map +1 -1
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-column-filter.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-header.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-row.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-skeleton.d.ts +12 -0
- package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/data-table/index.d.ts +1 -1
- package/dist/components/ui/data-table/index.d.ts.map +1 -1
- package/dist/components/ui/data-table/utils.d.ts +18 -0
- package/dist/components/ui/data-table/utils.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +6 -4
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +5 -3
- package/dist/hooks/index.cjs +4 -2
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts +17 -0
- package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/index.cjs +10 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -3
- package/dist/types/navigation.d.ts +24 -0
- package/dist/types/navigation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/features/filters-dropdown.tsx +17 -5
- package/src/components/navigation/app-header.tsx +178 -0
- package/src/components/navigation/header-mingo-button.tsx +5 -0
- package/src/components/navigation/index.ts +2 -2
- package/src/components/navigation/navigation-sidebar-item.tsx +22 -0
- package/src/components/navigation/navigation-sidebar-toggle.tsx +10 -6
- package/src/components/navigation/navigation-sidebar.tsx +187 -44
- package/src/components/ui/button/button-styles.ts +11 -0
- package/src/components/ui/button/button.tsx +6 -3
- package/src/components/ui/button/split-button.tsx +2 -2
- package/src/components/ui/data-table/data-table-body.tsx +5 -2
- package/src/components/ui/data-table/data-table-column-filter.tsx +54 -25
- package/src/components/ui/data-table/data-table-header.tsx +134 -45
- package/src/components/ui/data-table/data-table-row.tsx +3 -2
- package/src/components/ui/data-table/data-table-skeleton.tsx +17 -2
- package/src/components/ui/data-table/index.ts +1 -1
- package/src/components/ui/data-table/utils.ts +49 -3
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-isomorphic-layout-effect.ts +20 -0
- package/src/types/navigation.ts +21 -0
- package/dist/chunk-47LHA4QI.cjs.map +0 -1
- package/dist/chunk-QKWOBV55.js.map +0 -1
- package/dist/chunk-QL5YB4F7.js.map +0 -1
- package/dist/chunk-SGL6URIJ.cjs.map +0 -1
- package/dist/chunk-V2APV4E4.cjs.map +0 -1
- /package/dist/{chunk-YDNIQLAP.js.map → chunk-5CY6YKWY.js.map} +0 -0
- /package/dist/{chunk-Q66TP2LY.js.map → chunk-6TJJFQ74.js.map} +0 -0
- /package/dist/{chunk-RAL274JM.js.map → chunk-P3B65FBX.js.map} +0 -0
- /package/dist/{chunk-QWCW4Z75.js.map → chunk-P5UMIPKR.js.map} +0 -0
- /package/dist/{chunk-3AXJESKA.js.map → chunk-QQAKDJPE.js.map} +0 -0
- /package/dist/{chunk-O7JY7LRP.js.map → chunk-R2IGOYHU.js.map} +0 -0
- /package/dist/{chunk-SSYE7BQC.js.map → chunk-UM2YFCPE.js.map} +0 -0
- /package/dist/{chunk-BAMTV6GL.js.map → chunk-VMDQDD5Y.js.map} +0 -0
- /package/dist/{chunk-IUP26OXG.js.map → chunk-VPQBQJ4S.js.map} +0 -0
- /package/dist/{chunk-TTJSLIXA.js.map → chunk-W6Y66G4K.js.map} +0 -0
- /package/dist/{chunk-AEZ5BXLJ.js.map → chunk-XBLRT3MX.js.map} +0 -0
- /package/dist/{chunk-UD4IT3GY.js.map → chunk-ZU27I5NZ.js.map} +0 -0
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
useHumanitySignals,
|
|
24
24
|
useImageEdgeColor,
|
|
25
25
|
useIsTruncated,
|
|
26
|
+
useIsomorphicLayoutEffect,
|
|
26
27
|
useLgUp,
|
|
27
28
|
useLocalStorage,
|
|
28
29
|
useMarqueeEngine,
|
|
@@ -35,7 +36,7 @@ import {
|
|
|
35
36
|
useResetOnPageHidden,
|
|
36
37
|
useSuppressCloneFocus,
|
|
37
38
|
useToast
|
|
38
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-P7IOCYGD.js";
|
|
39
40
|
import {
|
|
40
41
|
AlertCircleIcon,
|
|
41
42
|
AnthropicLogoGreyIcon,
|
|
@@ -191,7 +192,7 @@ import {
|
|
|
191
192
|
init_button2,
|
|
192
193
|
init_split_button,
|
|
193
194
|
usePortalContainer
|
|
194
|
-
} from "./chunk-
|
|
195
|
+
} from "./chunk-WHJGRRK2.js";
|
|
195
196
|
import {
|
|
196
197
|
CheckboxCheckmarkIcon,
|
|
197
198
|
SearchIcon
|
|
@@ -29968,7 +29969,6 @@ var FiltersDropdown = ({
|
|
|
29968
29969
|
const handleClickOutside = (event) => {
|
|
29969
29970
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
29970
29971
|
setIsOpen(false);
|
|
29971
|
-
setActualPlacement(placement);
|
|
29972
29972
|
}
|
|
29973
29973
|
};
|
|
29974
29974
|
if (isOpen) {
|
|
@@ -29980,17 +29980,16 @@ var FiltersDropdown = ({
|
|
|
29980
29980
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
29981
29981
|
};
|
|
29982
29982
|
}
|
|
29983
|
-
}, [isOpen
|
|
29983
|
+
}, [isOpen]);
|
|
29984
29984
|
useEffect50(() => {
|
|
29985
29985
|
const handleEscape = (e) => {
|
|
29986
29986
|
if (e.key === "Escape" && isOpen) {
|
|
29987
29987
|
setIsOpen(false);
|
|
29988
|
-
setActualPlacement(placement);
|
|
29989
29988
|
}
|
|
29990
29989
|
};
|
|
29991
29990
|
document.addEventListener("keydown", handleEscape);
|
|
29992
29991
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
29993
|
-
}, [isOpen
|
|
29992
|
+
}, [isOpen]);
|
|
29994
29993
|
const handleToggleOption = (sectionId, optionId, sectionType) => {
|
|
29995
29994
|
setSelectedFilters((prev) => {
|
|
29996
29995
|
const current = prev[sectionId] || [];
|
|
@@ -30035,7 +30034,6 @@ var FiltersDropdown = ({
|
|
|
30035
30034
|
const handleApply = () => {
|
|
30036
30035
|
onApply(selectedFilters);
|
|
30037
30036
|
setIsOpen(false);
|
|
30038
|
-
setActualPlacement(placement);
|
|
30039
30037
|
};
|
|
30040
30038
|
const getActiveFiltersCount = () => {
|
|
30041
30039
|
return Object.values(selectedFilters).reduce((acc, curr) => acc + curr.length, 0);
|
|
@@ -38525,7 +38523,7 @@ function useSectionNavigation(sections, options) {
|
|
|
38525
38523
|
}
|
|
38526
38524
|
|
|
38527
38525
|
// src/components/navigation/navigation-sidebar.tsx
|
|
38528
|
-
import { useCallback as useCallback37, useEffect as useEffect70,
|
|
38526
|
+
import { useCallback as useCallback37, useEffect as useEffect70, useMemo as useMemo39, useState as useState93 } from "react";
|
|
38529
38527
|
|
|
38530
38528
|
// src/components/navigation/navigation-sidebar-header.tsx
|
|
38531
38529
|
import { jsx as jsx289, jsxs as jsxs227 } from "react/jsx-runtime";
|
|
@@ -38623,6 +38621,12 @@ var NavigationSidebarItemButton = memo6(function NavigationSidebarItemButton2({
|
|
|
38623
38621
|
}
|
|
38624
38622
|
return /* @__PURE__ */ jsx290(next_link_default, { href: item.path, onClick: (event) => onClick(item, event), ...shared, children: content });
|
|
38625
38623
|
});
|
|
38624
|
+
function NavigationSidebarItemSkeleton({ showLabel }) {
|
|
38625
|
+
return /* @__PURE__ */ jsxs228("div", { className: "w-full flex items-center justify-start h-14 p-[var(--spacing-system-m)]", "aria-hidden": "true", children: [
|
|
38626
|
+
/* @__PURE__ */ jsx290("div", { className: "relative flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx290("div", { className: "h-6 w-6 animate-pulse rounded bg-ods-border" }) }),
|
|
38627
|
+
showLabel && /* @__PURE__ */ jsx290("div", { className: "h-4 flex-1 ml-[var(--spacing-system-xs)] animate-pulse rounded bg-ods-border" })
|
|
38628
|
+
] });
|
|
38629
|
+
}
|
|
38626
38630
|
|
|
38627
38631
|
// src/components/navigation/navigation-sidebar-toggle.tsx
|
|
38628
38632
|
import { jsx as jsx291, jsxs as jsxs229 } from "react/jsx-runtime";
|
|
@@ -38645,15 +38649,7 @@ function NavigationSidebarToggle({
|
|
|
38645
38649
|
title: minimized ? "Hide Menu" : void 0,
|
|
38646
38650
|
"aria-label": "Hide Menu",
|
|
38647
38651
|
children: [
|
|
38648
|
-
/* @__PURE__ */ jsx291("div", { className: "flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx291(
|
|
38649
|
-
Chevrons03LeftIcon,
|
|
38650
|
-
{
|
|
38651
|
-
className: cn(
|
|
38652
|
-
"text-ods-text-secondary w-6 h-6 transition-transform duration-300",
|
|
38653
|
-
minimized && "rotate-180"
|
|
38654
|
-
)
|
|
38655
|
-
}
|
|
38656
|
-
) }),
|
|
38652
|
+
/* @__PURE__ */ jsx291("div", { className: "flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx291(Chevrons03LeftIcon, { className: "rotate-180 @[140px]/of-nav-sidebar:rotate-0 text-ods-text-secondary w-6 h-6 transition-transform duration-300" }) }),
|
|
38657
38653
|
/* @__PURE__ */ jsx291(
|
|
38658
38654
|
"span",
|
|
38659
38655
|
{
|
|
@@ -38675,6 +38671,20 @@ import { Fragment as Fragment61, jsx as jsx292, jsxs as jsxs230 } from "react/js
|
|
|
38675
38671
|
var MINIMIZED_WIDTH = 56;
|
|
38676
38672
|
var EXPANDED_WIDTH = 224;
|
|
38677
38673
|
var STORAGE_KEY = "of.navigationSidebar.minimized";
|
|
38674
|
+
var NAVIGATION_SIDEBAR_WIDTH_VAR = "--of-navigation-sidebar-width";
|
|
38675
|
+
var SIDEBAR_CONTAINER = "@container/of-nav-sidebar";
|
|
38676
|
+
var SIDEBAR_GEOMETRY_CLASSES = [
|
|
38677
|
+
// Tablet: float over the content, anchored to the layout row (`absolute`
|
|
38678
|
+
// within AppLayout's `relative` row) — NOT the viewport — so an optional
|
|
38679
|
+
// `topBar` above the row is not overlapped. With no topBar the row spans the
|
|
38680
|
+
// full viewport, so this is visually identical to a viewport-fixed sidebar.
|
|
38681
|
+
"md:absolute md:inset-y-0 md:left-0 md:z-[45]",
|
|
38682
|
+
// Desktop: back in the flex flow, width from the persisted preference. The
|
|
38683
|
+
// fallback IS the default, so the property needs no global declaration and an
|
|
38684
|
+
// unseeded consumer gets the full sidebar rather than a rail with no labels.
|
|
38685
|
+
"lg:relative lg:inset-auto lg:z-auto lg:h-full lg:w-[var(--of-navigation-sidebar-width,14rem)]"
|
|
38686
|
+
].join(" ");
|
|
38687
|
+
var SIDEBAR_TABLET_WIDTH = { rail: "md:w-14", overlay: "md:w-56" };
|
|
38678
38688
|
var isModifiedClick = (event) => !!event && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0);
|
|
38679
38689
|
function NavigationSidebar({ config, disabled = false }) {
|
|
38680
38690
|
const isMdUp = useMdUp() ?? false;
|
|
@@ -38688,7 +38698,9 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
38688
38698
|
useEffect70(() => {
|
|
38689
38699
|
if (isTablet) setTabletMinimized(true);
|
|
38690
38700
|
}, [isTablet]);
|
|
38691
|
-
const
|
|
38701
|
+
const [hydrated, setHydrated] = useState93(false);
|
|
38702
|
+
useEffect70(() => setHydrated(true), []);
|
|
38703
|
+
const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : config.minimized ?? false;
|
|
38692
38704
|
const [transitionsEnabled, setTransitionsEnabled] = useState93(false);
|
|
38693
38705
|
const isOverlayOpen = isTablet && !minimized;
|
|
38694
38706
|
const showLabel = !minimized;
|
|
@@ -38739,11 +38751,23 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
38739
38751
|
primaryItems: config.items.filter((item) => item.section !== "secondary"),
|
|
38740
38752
|
secondaryItems: config.items.filter((item) => item.section === "secondary")
|
|
38741
38753
|
}), [config.items]);
|
|
38754
|
+
const loadingRows = useMemo39(() => {
|
|
38755
|
+
if (!config.loading) return null;
|
|
38756
|
+
const primary = config.loadingRows?.primary ?? 7;
|
|
38757
|
+
const secondary = config.loadingRows?.secondary ?? 2;
|
|
38758
|
+
return {
|
|
38759
|
+
primary: Array.from({ length: Math.max(0, primary) }, (_, i) => `primary-${i}`),
|
|
38760
|
+
secondary: Array.from({ length: Math.max(0, secondary) }, (_, i) => `secondary-${i}`)
|
|
38761
|
+
};
|
|
38762
|
+
}, [config.loading, config.loadingRows?.primary, config.loadingRows?.secondary]);
|
|
38742
38763
|
const sidebarWidth = useMemo39(
|
|
38743
38764
|
() => minimized ? `${MINIMIZED_WIDTH}px` : `${EXPANDED_WIDTH}px`,
|
|
38744
38765
|
[minimized]
|
|
38745
38766
|
);
|
|
38746
|
-
|
|
38767
|
+
useIsomorphicLayoutEffect(() => {
|
|
38768
|
+
document.documentElement.style.setProperty(NAVIGATION_SIDEBAR_WIDTH_VAR, sidebarWidth);
|
|
38769
|
+
}, [sidebarWidth]);
|
|
38770
|
+
useIsomorphicLayoutEffect(() => {
|
|
38747
38771
|
if (!transitionsEnabled) {
|
|
38748
38772
|
const id = requestAnimationFrame(() => {
|
|
38749
38773
|
setTransitionsEnabled(true);
|
|
@@ -38765,35 +38789,27 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
38765
38789
|
"aria-hidden": "true"
|
|
38766
38790
|
}
|
|
38767
38791
|
),
|
|
38768
|
-
|
|
38769
|
-
"div",
|
|
38770
|
-
{
|
|
38771
|
-
className: "h-full hidden md:block flex-shrink-0",
|
|
38772
|
-
style: { width: `${MINIMIZED_WIDTH}px` },
|
|
38773
|
-
"aria-hidden": "true"
|
|
38774
|
-
}
|
|
38775
|
-
),
|
|
38792
|
+
/* @__PURE__ */ jsx292("div", { className: "h-full hidden md:block lg:hidden w-14 flex-shrink-0", "aria-hidden": "true" }),
|
|
38776
38793
|
/* @__PURE__ */ jsxs230(
|
|
38777
38794
|
"aside",
|
|
38778
38795
|
{
|
|
38779
38796
|
className: cn(
|
|
38797
|
+
SIDEBAR_CONTAINER,
|
|
38780
38798
|
"flex-col hidden md:flex flex-shrink-0",
|
|
38781
38799
|
"bg-ods-card border-r border-ods-border",
|
|
38782
|
-
|
|
38783
|
-
//
|
|
38784
|
-
//
|
|
38785
|
-
//
|
|
38786
|
-
|
|
38787
|
-
isTablet ? "absolute inset-y-0 left-0 z-[45]" : "relative h-full",
|
|
38800
|
+
SIDEBAR_GEOMETRY_CLASSES,
|
|
38801
|
+
// The one width a viewport cannot imply: an overlay the user opened on
|
|
38802
|
+
// tablet. Only ever true after a click, so the first paint always gets
|
|
38803
|
+
// the rail.
|
|
38804
|
+
isOverlayOpen ? SIDEBAR_TABLET_WIDTH.overlay : SIDEBAR_TABLET_WIDTH.rail,
|
|
38788
38805
|
transitionsEnabled && "transition-[width] duration-300",
|
|
38789
38806
|
config.className
|
|
38790
38807
|
),
|
|
38791
|
-
style: { width: sidebarWidth },
|
|
38792
38808
|
"aria-label": "Main navigation sidebar",
|
|
38793
38809
|
children: [
|
|
38794
38810
|
/* @__PURE__ */ jsx292(NavigationSidebarHeader, { minimized }),
|
|
38795
38811
|
/* @__PURE__ */ jsxs230("div", { className: "flex-1 flex flex-col justify-between py-4 overflow-y-auto", children: [
|
|
38796
|
-
/* @__PURE__ */ jsx292("nav", { className: "flex flex-col", "aria-label": "Primary navigation", children: primaryItems.map((item) => /* @__PURE__ */ jsx292(
|
|
38812
|
+
/* @__PURE__ */ jsx292("nav", { className: "flex flex-col", "aria-label": "Primary navigation", "aria-busy": !!loadingRows, children: loadingRows ? loadingRows.primary.map((key) => /* @__PURE__ */ jsx292(NavigationSidebarItemSkeleton, { showLabel }, key)) : primaryItems.map((item) => /* @__PURE__ */ jsx292(
|
|
38797
38813
|
NavigationSidebarItemButton,
|
|
38798
38814
|
{
|
|
38799
38815
|
item,
|
|
@@ -38805,7 +38821,7 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
38805
38821
|
},
|
|
38806
38822
|
item.id
|
|
38807
38823
|
)) }),
|
|
38808
|
-
secondaryItems.length > 0 && /* @__PURE__ */ jsx292("nav", { className: "flex flex-col", "aria-label": "Secondary navigation", children: secondaryItems.map((item) => /* @__PURE__ */ jsx292(
|
|
38824
|
+
(loadingRows ? loadingRows.secondary.length > 0 : secondaryItems.length > 0) && /* @__PURE__ */ jsx292("nav", { className: "flex flex-col", "aria-label": "Secondary navigation", "aria-busy": !!loadingRows, children: loadingRows ? loadingRows.secondary.map((key) => /* @__PURE__ */ jsx292(NavigationSidebarItemSkeleton, { showLabel }, key)) : secondaryItems.map((item) => /* @__PURE__ */ jsx292(
|
|
38809
38825
|
NavigationSidebarItemButton,
|
|
38810
38826
|
{
|
|
38811
38827
|
item,
|
|
@@ -38917,6 +38933,11 @@ function HeaderMingoButton({
|
|
|
38917
38933
|
"aria-pressed": isActive,
|
|
38918
38934
|
className: cn(
|
|
38919
38935
|
"flex items-center shrink-0 h-full gap-2 px-4",
|
|
38936
|
+
// Fixed 140px cell from md, so the header's right-hand cluster has a
|
|
38937
|
+
// known width and a loading placeholder can reserve it exactly
|
|
38938
|
+
// (`AppHeaderProps.loadingActionCells` → `'wide'`). Content-width below
|
|
38939
|
+
// md, and in `iconOnly` mode, where the control is a square affordance.
|
|
38940
|
+
!iconOnly && "md:w-[140px] md:justify-center",
|
|
38920
38941
|
"transition-colors duration-200",
|
|
38921
38942
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
|
|
38922
38943
|
// Transparent at rest so the cell inherits the bar's background
|
|
@@ -39025,9 +39046,32 @@ var AppHeader = React116.memo(function AppHeader2({
|
|
|
39025
39046
|
className,
|
|
39026
39047
|
isMobileMenuOpen,
|
|
39027
39048
|
onToggleMobileMenu,
|
|
39028
|
-
disabled = false
|
|
39049
|
+
disabled = false,
|
|
39050
|
+
loading = false,
|
|
39051
|
+
loadingActionCells
|
|
39029
39052
|
}) {
|
|
39030
39053
|
const isMdUp = useMdUp() ?? false;
|
|
39054
|
+
if (loading) {
|
|
39055
|
+
return /* @__PURE__ */ jsx296(
|
|
39056
|
+
AppHeaderSkeleton,
|
|
39057
|
+
{
|
|
39058
|
+
showSearch,
|
|
39059
|
+
actionCells: loadingActionCells ?? // Fallback: what the `show*` props imply, in the order the live cells are
|
|
39060
|
+
// mounted below. Only correct for a host that knows its header composition
|
|
39061
|
+
// before it starts loading. The cell types carry each control's own
|
|
39062
|
+
// breakpoint — the organization filter is `hidden lg:flex`, the avatar is
|
|
39063
|
+
// gated on `isMdUp`, and Mingo is `iconOnly` below md.
|
|
39064
|
+
[
|
|
39065
|
+
showOrganizations && "icon-lg",
|
|
39066
|
+
showTimeTracker && "icon",
|
|
39067
|
+
showNotifications && "icon",
|
|
39068
|
+
showUser && "icon-md",
|
|
39069
|
+
showMingoAI && "wide"
|
|
39070
|
+
].filter(Boolean),
|
|
39071
|
+
className
|
|
39072
|
+
}
|
|
39073
|
+
);
|
|
39074
|
+
}
|
|
39031
39075
|
const dimmedClass = disabled ? "pointer-events-none opacity-50" : "";
|
|
39032
39076
|
const cellDivider = "border-l border-ods-border";
|
|
39033
39077
|
return /* @__PURE__ */ jsx296(
|
|
@@ -39195,6 +39239,60 @@ function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass
|
|
|
39195
39239
|
}
|
|
39196
39240
|
);
|
|
39197
39241
|
}
|
|
39242
|
+
var CELL_VISIBILITY = {
|
|
39243
|
+
icon: void 0,
|
|
39244
|
+
"icon-md": "hidden md:flex",
|
|
39245
|
+
"icon-lg": "hidden lg:flex"
|
|
39246
|
+
};
|
|
39247
|
+
function HeaderCellSkeleton({ className }) {
|
|
39248
|
+
return /* @__PURE__ */ jsx296(
|
|
39249
|
+
"div",
|
|
39250
|
+
{
|
|
39251
|
+
className: cn(
|
|
39252
|
+
"flex h-full w-12 shrink-0 items-center justify-center border-l border-ods-border md:w-14",
|
|
39253
|
+
className
|
|
39254
|
+
),
|
|
39255
|
+
children: /* @__PURE__ */ jsx296("div", { className: "h-4 w-4 animate-pulse rounded bg-ods-border md:h-6 md:w-6" })
|
|
39256
|
+
}
|
|
39257
|
+
);
|
|
39258
|
+
}
|
|
39259
|
+
function HeaderWideCellSkeleton() {
|
|
39260
|
+
return /* @__PURE__ */ jsxs234("div", { className: "flex h-full w-12 shrink-0 items-center justify-center gap-2 border-l border-ods-border md:w-[140px] md:px-4", children: [
|
|
39261
|
+
/* @__PURE__ */ jsx296("div", { className: "h-4 w-4 shrink-0 animate-pulse rounded bg-ods-border md:h-6 md:w-6" }),
|
|
39262
|
+
/* @__PURE__ */ jsx296("div", { className: "hidden h-5 animate-pulse rounded bg-ods-border md:block md:w-[72px]" })
|
|
39263
|
+
] });
|
|
39264
|
+
}
|
|
39265
|
+
function AppHeaderSkeleton({
|
|
39266
|
+
showSearch,
|
|
39267
|
+
actionCells,
|
|
39268
|
+
className
|
|
39269
|
+
}) {
|
|
39270
|
+
const cells = typeof actionCells === "number" ? Array.from({ length: Math.max(0, actionCells) }, () => "icon") : actionCells;
|
|
39271
|
+
return /* @__PURE__ */ jsx296(
|
|
39272
|
+
TopNavigation,
|
|
39273
|
+
{
|
|
39274
|
+
className: cn("sticky top-0 z-40", className),
|
|
39275
|
+
centerBreakpoint: "md",
|
|
39276
|
+
"aria-busy": "true",
|
|
39277
|
+
leading: (
|
|
39278
|
+
// Burger cell: mobile only, in CSS.
|
|
39279
|
+
/* @__PURE__ */ jsx296("div", { className: "flex h-full w-12 shrink-0 items-center justify-center border-r border-ods-border md:hidden", children: /* @__PURE__ */ jsx296("div", { className: "h-4 w-4 animate-pulse rounded bg-ods-border" }) })
|
|
39280
|
+
),
|
|
39281
|
+
logo: /* @__PURE__ */ jsxs234(Fragment62, { children: [
|
|
39282
|
+
/* @__PURE__ */ jsx296("div", { className: "h-6 w-6 shrink-0 animate-pulse rounded bg-ods-border" }),
|
|
39283
|
+
/* @__PURE__ */ jsx296("div", { className: "h-4 w-24 animate-pulse rounded bg-ods-border" })
|
|
39284
|
+
] }),
|
|
39285
|
+
logoClassName: "gap-2 md:hidden",
|
|
39286
|
+
center: showSearch ? /* @__PURE__ */ jsx296("div", { className: "h-10 w-full animate-pulse rounded-md bg-ods-border" }) : void 0,
|
|
39287
|
+
sideActions: /* @__PURE__ */ jsxs234(Fragment62, { children: [
|
|
39288
|
+
showSearch && /* @__PURE__ */ jsx296(HeaderCellSkeleton, { className: "md:hidden" }),
|
|
39289
|
+
cells.map(
|
|
39290
|
+
(cell, i) => cell === "wide" ? /* @__PURE__ */ jsx296(HeaderWideCellSkeleton, {}, i) : /* @__PURE__ */ jsx296(HeaderCellSkeleton, { className: CELL_VISIBILITY[cell] }, i)
|
|
39291
|
+
)
|
|
39292
|
+
] })
|
|
39293
|
+
}
|
|
39294
|
+
);
|
|
39295
|
+
}
|
|
39198
39296
|
|
|
39199
39297
|
// src/components/navigation/app-layout.tsx
|
|
39200
39298
|
import { Suspense as Suspense2, useCallback as useCallback39, useMemo as useMemo40, useRef as useRef53, useState as useState94 } from "react";
|
|
@@ -42133,26 +42231,45 @@ function DataTableRoot({ table, children, className }) {
|
|
|
42133
42231
|
}
|
|
42134
42232
|
|
|
42135
42233
|
// src/components/ui/data-table/data-table-header.tsx
|
|
42136
|
-
import { flexRender } from "@tanstack/react-table";
|
|
42137
42234
|
init_cn();
|
|
42235
|
+
import { flexRender } from "@tanstack/react-table";
|
|
42138
42236
|
|
|
42139
42237
|
// src/components/ui/data-table/data-table-column-filter.tsx
|
|
42140
42238
|
init_cn();
|
|
42141
42239
|
import { useCallback as useCallback43, useMemo as useMemo43 } from "react";
|
|
42142
42240
|
|
|
42143
42241
|
// src/components/ui/data-table/utils.ts
|
|
42242
|
+
var BREAKPOINT_ORDER = ["md", "lg", "xl", "2xl"];
|
|
42144
42243
|
function getHideClasses2(hideAt) {
|
|
42145
42244
|
if (!hideAt) return "";
|
|
42146
42245
|
const breakpoints = Array.isArray(hideAt) ? hideAt : [hideAt];
|
|
42147
|
-
const order = ["md", "lg", "xl", "2xl"];
|
|
42148
42246
|
if (breakpoints.length === 1) {
|
|
42149
42247
|
return `hidden ${breakpoints[0]}:flex`;
|
|
42150
42248
|
}
|
|
42151
|
-
const maxIdx = Math.max(...breakpoints.map((bp) =>
|
|
42249
|
+
const maxIdx = Math.max(...breakpoints.map((bp) => BREAKPOINT_ORDER.indexOf(bp)));
|
|
42152
42250
|
const hideClasses = breakpoints.map((bp) => `${bp}:hidden`).join(" ");
|
|
42153
|
-
const showBreakpoint =
|
|
42251
|
+
const showBreakpoint = BREAKPOINT_ORDER[maxIdx + 1];
|
|
42154
42252
|
return showBreakpoint ? `${hideClasses} ${showBreakpoint}:flex` : hideClasses;
|
|
42155
42253
|
}
|
|
42254
|
+
function getHideAtVisibility(hideAt) {
|
|
42255
|
+
const steps = BREAKPOINT_ORDER.length + 1;
|
|
42256
|
+
if (!hideAt) return Array.from({ length: steps }, () => true);
|
|
42257
|
+
const breakpoints = Array.isArray(hideAt) ? hideAt : [hideAt];
|
|
42258
|
+
if (breakpoints.length === 1) {
|
|
42259
|
+
const showFrom = BREAKPOINT_ORDER.indexOf(breakpoints[0]) + 1;
|
|
42260
|
+
return Array.from({ length: steps }, (_, step) => step >= showFrom);
|
|
42261
|
+
}
|
|
42262
|
+
const maxIdx = Math.max(...breakpoints.map((bp) => BREAKPOINT_ORDER.indexOf(bp)));
|
|
42263
|
+
const showBreakpoint = BREAKPOINT_ORDER[maxIdx + 1];
|
|
42264
|
+
const visible = [true];
|
|
42265
|
+
for (const bp of BREAKPOINT_ORDER) {
|
|
42266
|
+
let state = visible[visible.length - 1];
|
|
42267
|
+
if (breakpoints.includes(bp)) state = false;
|
|
42268
|
+
if (bp === showBreakpoint) state = true;
|
|
42269
|
+
visible.push(state);
|
|
42270
|
+
}
|
|
42271
|
+
return visible;
|
|
42272
|
+
}
|
|
42156
42273
|
function alignJustify(align) {
|
|
42157
42274
|
switch (align) {
|
|
42158
42275
|
case "center":
|
|
@@ -42208,38 +42325,56 @@ function DataTableColumnFilter({
|
|
|
42208
42325
|
const handleReset = useCallback43(() => {
|
|
42209
42326
|
column.setFilterValue(void 0);
|
|
42210
42327
|
}, [column]);
|
|
42328
|
+
const isPending = options.length === 0;
|
|
42329
|
+
const trigger = /* @__PURE__ */ jsxs264(
|
|
42330
|
+
"div",
|
|
42331
|
+
{
|
|
42332
|
+
className: cn(
|
|
42333
|
+
// Fixed 48px per design, same as the plain header cell next to it —
|
|
42334
|
+
// NOT padding around the label. The two were drifting: 12px+20px+12px
|
|
42335
|
+
// came out 44px here while the sibling was pinned to 48, so in a
|
|
42336
|
+
// header mixing filterable and plain columns the labels sat on
|
|
42337
|
+
// different centre lines and the filter's hit area was 4px short of
|
|
42338
|
+
// the row it belongs to.
|
|
42339
|
+
"group flex w-full items-center gap-[var(--spacing-system-xsf)] h-12 rounded-sm transition-colors duration-200 select-none",
|
|
42340
|
+
alignJustify(align),
|
|
42341
|
+
isPending ? "cursor-default" : "cursor-pointer"
|
|
42342
|
+
),
|
|
42343
|
+
"aria-label": `Filter by ${label}`,
|
|
42344
|
+
"aria-disabled": isPending || void 0,
|
|
42345
|
+
children: [
|
|
42346
|
+
/* @__PURE__ */ jsx332(
|
|
42347
|
+
"span",
|
|
42348
|
+
{
|
|
42349
|
+
className: cn(
|
|
42350
|
+
"text-h5 text-ods-text-secondary whitespace-nowrap transition-colors duration-200",
|
|
42351
|
+
!isPending && "group-hover:text-ods-text-primary"
|
|
42352
|
+
),
|
|
42353
|
+
children: label
|
|
42354
|
+
}
|
|
42355
|
+
),
|
|
42356
|
+
/* @__PURE__ */ jsx332(
|
|
42357
|
+
Filter02Icon,
|
|
42358
|
+
{
|
|
42359
|
+
className: cn(
|
|
42360
|
+
"w-4 h-4 transition-colors",
|
|
42361
|
+
activeCount > 0 && "text-ods-accent",
|
|
42362
|
+
activeCount === 0 && "text-ods-text-secondary",
|
|
42363
|
+
activeCount === 0 && !isPending && "group-hover:text-ods-text-primary"
|
|
42364
|
+
)
|
|
42365
|
+
}
|
|
42366
|
+
)
|
|
42367
|
+
]
|
|
42368
|
+
}
|
|
42369
|
+
);
|
|
42370
|
+
if (isPending) {
|
|
42371
|
+
return /* @__PURE__ */ jsx332("div", { className: "block w-full", children: trigger });
|
|
42372
|
+
}
|
|
42211
42373
|
return /* @__PURE__ */ jsx332(
|
|
42212
42374
|
FiltersDropdown,
|
|
42213
42375
|
{
|
|
42214
42376
|
className: "!block w-full",
|
|
42215
|
-
triggerElement:
|
|
42216
|
-
"div",
|
|
42217
|
-
{
|
|
42218
|
-
className: cn(
|
|
42219
|
-
// Fixed 48px per design, same as the plain header cell next to it —
|
|
42220
|
-
// NOT padding around the label. The two were drifting: 12px+20px+12px
|
|
42221
|
-
// came out 44px here while the sibling was pinned to 48, so in a
|
|
42222
|
-
// header mixing filterable and plain columns the labels sat on
|
|
42223
|
-
// different centre lines and the filter's hit area was 4px short of
|
|
42224
|
-
// the row it belongs to.
|
|
42225
|
-
"group flex w-full items-center gap-[var(--spacing-system-xsf)] h-12 rounded-sm cursor-pointer transition-colors duration-200 select-none",
|
|
42226
|
-
alignJustify(align)
|
|
42227
|
-
),
|
|
42228
|
-
"aria-label": `Filter by ${label}`,
|
|
42229
|
-
children: [
|
|
42230
|
-
/* @__PURE__ */ jsx332("span", { className: "text-h5 text-ods-text-secondary whitespace-nowrap transition-colors duration-200 group-hover:text-ods-text-primary", children: label }),
|
|
42231
|
-
/* @__PURE__ */ jsx332(
|
|
42232
|
-
Filter02Icon,
|
|
42233
|
-
{
|
|
42234
|
-
className: cn(
|
|
42235
|
-
"w-4 h-4 transition-colors",
|
|
42236
|
-
activeCount > 0 ? "text-ods-accent" : "text-ods-text-secondary group-hover:text-ods-text-primary"
|
|
42237
|
-
)
|
|
42238
|
-
}
|
|
42239
|
-
)
|
|
42240
|
-
]
|
|
42241
|
-
}
|
|
42242
|
-
),
|
|
42377
|
+
triggerElement: trigger,
|
|
42243
42378
|
sections,
|
|
42244
42379
|
currentFilters,
|
|
42245
42380
|
onApply: handleApply,
|
|
@@ -42261,15 +42396,11 @@ function DataTableHeader({
|
|
|
42261
42396
|
onSortChange
|
|
42262
42397
|
}) {
|
|
42263
42398
|
const table = useDataTableContext();
|
|
42264
|
-
const isLgUp = useLgUp() ?? false;
|
|
42265
42399
|
const headerGroup = table.getHeaderGroups()[0];
|
|
42266
42400
|
if (!headerGroup) return null;
|
|
42267
|
-
const
|
|
42268
|
-
|
|
42269
|
-
|
|
42270
|
-
const meta = header.column.columnDef.meta;
|
|
42271
|
-
return Boolean(meta?.filter) || meta?.alwaysShowHeader === true;
|
|
42272
|
-
});
|
|
42401
|
+
const hasTabletVisibleCell = headerGroup.headers.some(
|
|
42402
|
+
(header) => !header.isPlaceholder && keepsCellOnTablet(header.column.columnDef.meta)
|
|
42403
|
+
);
|
|
42273
42404
|
return /* @__PURE__ */ jsx333(
|
|
42274
42405
|
"div",
|
|
42275
42406
|
{
|
|
@@ -42279,45 +42410,101 @@ function DataTableHeader({
|
|
|
42279
42410
|
className
|
|
42280
42411
|
),
|
|
42281
42412
|
children: /* @__PURE__ */ jsxs265("div", { className: "flex items-stretch gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)] relative", children: [
|
|
42282
|
-
headerGroup.headers.map((header) => /* @__PURE__ */ jsx333(
|
|
42283
|
-
|
|
42413
|
+
headerGroup.headers.map((header) => /* @__PURE__ */ jsx333(HeaderCell, { header, sort, onSortChange }, header.id)),
|
|
42414
|
+
rightSlot && /* @__PURE__ */ jsx333(
|
|
42415
|
+
"div",
|
|
42284
42416
|
{
|
|
42285
|
-
|
|
42286
|
-
|
|
42287
|
-
|
|
42288
|
-
|
|
42289
|
-
|
|
42290
|
-
|
|
42291
|
-
|
|
42292
|
-
|
|
42293
|
-
|
|
42294
|
-
|
|
42295
|
-
|
|
42296
|
-
|
|
42297
|
-
|
|
42417
|
+
className: cn(
|
|
42418
|
+
"flex items-center",
|
|
42419
|
+
hasTabletVisibleCell ? "absolute right-[var(--spacing-system-mf)] inset-y-0" : (
|
|
42420
|
+
// No cell is visible below lg, so there this slot is the only thing
|
|
42421
|
+
// giving the row height and carries the same fixed 48 rather than
|
|
42422
|
+
// padding out to 44. From lg the cells are back and it returns to
|
|
42423
|
+
// the absolute placement. Safe as a `max-lg:` override: nothing
|
|
42424
|
+
// else in this string sets margin or height, so it competes only
|
|
42425
|
+
// with unprefixed defaults, never with a `md:`/`lg:` class.
|
|
42426
|
+
"max-lg:ml-auto max-lg:h-12 lg:absolute lg:right-[var(--spacing-system-mf)] lg:inset-y-0"
|
|
42427
|
+
)
|
|
42428
|
+
),
|
|
42429
|
+
children: rightSlot
|
|
42430
|
+
}
|
|
42431
|
+
)
|
|
42298
42432
|
] })
|
|
42299
42433
|
}
|
|
42300
42434
|
);
|
|
42301
42435
|
}
|
|
42302
|
-
function
|
|
42436
|
+
function keepsCellOnTablet(meta) {
|
|
42437
|
+
return Boolean(meta?.filter) || meta?.alwaysShowHeader === true;
|
|
42438
|
+
}
|
|
42439
|
+
var SHOW_FROM = {
|
|
42440
|
+
md: "md:flex",
|
|
42441
|
+
lg: "lg:flex",
|
|
42442
|
+
xl: "xl:flex",
|
|
42443
|
+
"2xl": "2xl:flex"
|
|
42444
|
+
};
|
|
42445
|
+
var HIDE_FROM = {
|
|
42446
|
+
md: "md:hidden",
|
|
42447
|
+
lg: "lg:hidden",
|
|
42448
|
+
xl: "xl:hidden",
|
|
42449
|
+
"2xl": "2xl:hidden"
|
|
42450
|
+
};
|
|
42451
|
+
var LG_STEP = BREAKPOINT_ORDER.indexOf("lg") + 1;
|
|
42452
|
+
function getCellVisibilityClasses(keepOnTablet, hideAt) {
|
|
42453
|
+
const fromHideAt = getHideAtVisibility(hideAt);
|
|
42454
|
+
const visible = fromHideAt.map(
|
|
42455
|
+
(shown, step) => keepOnTablet ? (
|
|
42456
|
+
// Reachable below lg whatever `hideAt` says; from lg it governs again.
|
|
42457
|
+
step < LG_STEP || shown
|
|
42458
|
+
) : (
|
|
42459
|
+
// Otherwise lg is a floor `hideAt` can raise but never lower.
|
|
42460
|
+
shown && step >= LG_STEP
|
|
42461
|
+
)
|
|
42462
|
+
);
|
|
42463
|
+
const classes = [visible[0] ? "flex" : "hidden"];
|
|
42464
|
+
for (let step = 1; step < visible.length; step++) {
|
|
42465
|
+
if (visible[step] === visible[step - 1]) continue;
|
|
42466
|
+
const breakpoint = BREAKPOINT_ORDER[step - 1];
|
|
42467
|
+
classes.push(visible[step] ? SHOW_FROM[breakpoint] : HIDE_FROM[breakpoint]);
|
|
42468
|
+
}
|
|
42469
|
+
return classes.join(" ");
|
|
42470
|
+
}
|
|
42471
|
+
function HeaderCell({ header, sort, onSortChange }) {
|
|
42303
42472
|
if (header.isPlaceholder) return null;
|
|
42304
42473
|
const column = header.column;
|
|
42305
42474
|
const meta = column.columnDef.meta;
|
|
42306
42475
|
const hasFilter = Boolean(meta?.filter);
|
|
42307
|
-
const keepOnTablet =
|
|
42476
|
+
const keepOnTablet = keepsCellOnTablet(meta);
|
|
42308
42477
|
const align = meta?.align ?? "left";
|
|
42309
42478
|
const canSort = meta?.sortable === true;
|
|
42310
42479
|
const sortDir = sort?.id === column.id ? sort.desc ? "desc" : "asc" : false;
|
|
42311
|
-
if (!isLgUp && !keepOnTablet) return null;
|
|
42312
42480
|
return /* @__PURE__ */ jsx333(
|
|
42313
42481
|
"div",
|
|
42314
42482
|
{
|
|
42315
42483
|
className: cn(
|
|
42316
|
-
"
|
|
42317
|
-
|
|
42318
|
-
|
|
42319
|
-
|
|
42320
|
-
|
|
42484
|
+
"items-stretch",
|
|
42485
|
+
// Cells are hidden rather than dropped from the tree, so which columns
|
|
42486
|
+
// exist never depends on when an effect ran.
|
|
42487
|
+
getCellVisibilityClasses(keepOnTablet, meta?.hideAt),
|
|
42488
|
+
// Width applies from lg only. Stated as "always, neutralized below lg"
|
|
42489
|
+
// because `meta.width` is an opaque consumer string that cannot be
|
|
42490
|
+
// prefixed. Only `keepOnTablet` cells need the override — the rest are
|
|
42491
|
+
// hidden below lg anyway.
|
|
42492
|
+
//
|
|
42493
|
+
// `[&&]` doubles the class in the selector (`.cls.cls`, specificity 0-2-0),
|
|
42494
|
+
// and it is load-bearing: consumers routinely write a RESPONSIVE width
|
|
42495
|
+
// (`w-[80px] md:w-1/5` is the common shape), and between md and lg that
|
|
42496
|
+
// `md:` rule and this `max-lg:` one both match. At equal specificity source
|
|
42497
|
+
// order decides, and Tailwind emits the `max-lg` block BEFORE the `md` one
|
|
42498
|
+
// — the same ordering documented for visibility above — so the tablet would
|
|
42499
|
+
// keep a width the design drops there, leaving the cells spread across the
|
|
42500
|
+
// row instead of packed beside their filters. An opaque consumer string
|
|
42501
|
+
// cannot be outranked by ordering, so this wins on the cascade's other axis.
|
|
42502
|
+
// Specificity rather than `!important`: it stays a normal declaration, so a
|
|
42503
|
+
// consumer that genuinely needs a tablet width can still take it back with a
|
|
42504
|
+
// more specific rule — `!important` could only be answered with another one.
|
|
42505
|
+
meta?.width || "flex-1 min-w-0",
|
|
42506
|
+
keepOnTablet && "max-lg:[&&]:w-auto max-lg:[&&]:flex-none max-lg:[&&]:basis-auto",
|
|
42507
|
+
meta?.headerClassName
|
|
42321
42508
|
),
|
|
42322
42509
|
children: hasFilter ? /* @__PURE__ */ jsx333(
|
|
42323
42510
|
DataTableColumnFilter,
|
|
@@ -42335,7 +42522,9 @@ function HeaderCell({ header, isLgUp, sort, onSortChange }) {
|
|
|
42335
42522
|
// Fixed 48px header height per design (20px label centered inside)
|
|
42336
42523
|
// instead of the padding-driven 44px.
|
|
42337
42524
|
"flex w-full items-center gap-[var(--spacing-system-xsf)] h-12 rounded-sm select-none transition-colors duration-200",
|
|
42338
|
-
|
|
42525
|
+
// Same "always, neutralized below lg" shape as the width above.
|
|
42526
|
+
alignJustify(align),
|
|
42527
|
+
keepOnTablet && "max-lg:justify-start",
|
|
42339
42528
|
canSort && "group cursor-pointer"
|
|
42340
42529
|
),
|
|
42341
42530
|
onClick: canSort ? () => onSortChange?.(column.id) : void 0,
|
|
@@ -42396,6 +42585,7 @@ init_cn();
|
|
|
42396
42585
|
import { Fragment as Fragment69, jsx as jsx335, jsxs as jsxs266 } from "react/jsx-runtime";
|
|
42397
42586
|
var ROW_HEIGHT_DESKTOP2 = "h-[66px] md:h-[78px]";
|
|
42398
42587
|
var ROW_HEIGHT_MOBILE2 = "h-[66px]";
|
|
42588
|
+
var ROW_SHELL_CLASSES = "items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)]";
|
|
42399
42589
|
function DataTableSkeleton({
|
|
42400
42590
|
rows = 10,
|
|
42401
42591
|
className,
|
|
@@ -42416,7 +42606,8 @@ function DataTableSkeleton({
|
|
|
42416
42606
|
"div",
|
|
42417
42607
|
{
|
|
42418
42608
|
className: cn(
|
|
42419
|
-
"hidden md:flex
|
|
42609
|
+
"hidden md:flex py-0",
|
|
42610
|
+
ROW_SHELL_CLASSES,
|
|
42420
42611
|
ROW_HEIGHT_DESKTOP2,
|
|
42421
42612
|
rowClassName
|
|
42422
42613
|
),
|
|
@@ -42449,7 +42640,8 @@ function DataTableSkeleton({
|
|
|
42449
42640
|
"div",
|
|
42450
42641
|
{
|
|
42451
42642
|
className: cn(
|
|
42452
|
-
"flex md:hidden
|
|
42643
|
+
"flex md:hidden justify-start py-0",
|
|
42644
|
+
ROW_SHELL_CLASSES,
|
|
42453
42645
|
ROW_HEIGHT_MOBILE2,
|
|
42454
42646
|
rowClassName
|
|
42455
42647
|
),
|
|
@@ -42505,7 +42697,8 @@ function DataTableRowImpl({
|
|
|
42505
42697
|
"div",
|
|
42506
42698
|
{
|
|
42507
42699
|
className: cn(
|
|
42508
|
-
"flex
|
|
42700
|
+
"flex",
|
|
42701
|
+
ROW_SHELL_CLASSES,
|
|
42509
42702
|
compact ? "py-[var(--spacing-system-xsf)]" : autoHeight ? "py-[var(--spacing-system-sf)] min-h-[66px] md:min-h-[78px]" : `py-0 ${ROW_HEIGHT_DESKTOP2}`,
|
|
42510
42703
|
hasSubRow && "border-b border-ods-border"
|
|
42511
42704
|
),
|
|
@@ -42625,7 +42818,8 @@ function DataTableBody({
|
|
|
42625
42818
|
"div",
|
|
42626
42819
|
{
|
|
42627
42820
|
className: cn(
|
|
42628
|
-
"hidden md:flex
|
|
42821
|
+
"hidden md:flex py-0",
|
|
42822
|
+
ROW_SHELL_CLASSES,
|
|
42629
42823
|
ROW_HEIGHT_DESKTOP2
|
|
42630
42824
|
)
|
|
42631
42825
|
}
|
|
@@ -42634,7 +42828,8 @@ function DataTableBody({
|
|
|
42634
42828
|
"div",
|
|
42635
42829
|
{
|
|
42636
42830
|
className: cn(
|
|
42637
|
-
"flex md:hidden
|
|
42831
|
+
"flex md:hidden justify-start py-0",
|
|
42832
|
+
ROW_SHELL_CLASSES,
|
|
42638
42833
|
ROW_HEIGHT_MOBILE2
|
|
42639
42834
|
)
|
|
42640
42835
|
}
|
|
@@ -57212,6 +57407,7 @@ export {
|
|
|
57212
57407
|
DataTableEmpty,
|
|
57213
57408
|
ROW_HEIGHT_DESKTOP2 as ROW_HEIGHT_DESKTOP,
|
|
57214
57409
|
ROW_HEIGHT_MOBILE2 as ROW_HEIGHT_MOBILE,
|
|
57410
|
+
ROW_SHELL_CLASSES,
|
|
57215
57411
|
DataTableSkeleton,
|
|
57216
57412
|
DataTableRow,
|
|
57217
57413
|
DataTableBody,
|
|
@@ -57265,6 +57461,7 @@ export {
|
|
|
57265
57461
|
SlidingSidebar,
|
|
57266
57462
|
StickySectionNav,
|
|
57267
57463
|
useSectionNavigation,
|
|
57464
|
+
NAVIGATION_SIDEBAR_WIDTH_VAR,
|
|
57268
57465
|
NavigationSidebar,
|
|
57269
57466
|
HeaderGlobalSearch,
|
|
57270
57467
|
HeaderMingoButton,
|
|
@@ -57289,4 +57486,4 @@ export {
|
|
|
57289
57486
|
LogsList,
|
|
57290
57487
|
assets
|
|
57291
57488
|
};
|
|
57292
|
-
//# sourceMappingURL=chunk-
|
|
57489
|
+
//# sourceMappingURL=chunk-SOX7CGFX.js.map
|