@carlonicora/nextjs-jsonapi 1.135.1 → 1.137.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.
Files changed (29) hide show
  1. package/dist/{BlockNoteEditor-FAPCNKXZ.mjs → BlockNoteEditor-DFBJOA4C.mjs} +2 -2
  2. package/dist/{BlockNoteEditor-PYRHKBF3.js → BlockNoteEditor-WX2W67GH.js} +9 -9
  3. package/dist/{BlockNoteEditor-PYRHKBF3.js.map → BlockNoteEditor-WX2W67GH.js.map} +1 -1
  4. package/dist/billing/index.js +310 -310
  5. package/dist/billing/index.mjs +1 -1
  6. package/dist/{chunk-DNWYHP4V.js → chunk-CTKZM2YC.js} +381 -311
  7. package/dist/chunk-CTKZM2YC.js.map +1 -0
  8. package/dist/{chunk-EF2HVXOV.mjs → chunk-EWAOWYT5.mjs} +273 -203
  9. package/dist/chunk-EWAOWYT5.mjs.map +1 -0
  10. package/dist/client/index.js +2 -2
  11. package/dist/client/index.mjs +1 -1
  12. package/dist/components/index.d.mts +52 -3
  13. package/dist/components/index.d.ts +52 -3
  14. package/dist/components/index.js +4 -2
  15. package/dist/components/index.js.map +1 -1
  16. package/dist/components/index.mjs +3 -1
  17. package/dist/contexts/index.js +2 -2
  18. package/dist/contexts/index.mjs +1 -1
  19. package/dist/features/help/index.js +31 -31
  20. package/dist/features/help/index.mjs +1 -1
  21. package/package.json +1 -1
  22. package/src/components/containers/RoundPageContainer.tsx +99 -14
  23. package/src/components/containers/RoundPageContainerTitle.tsx +19 -9
  24. package/src/components/navigations/Header.tsx +15 -1
  25. package/src/components/pages/PageContentContainer.tsx +2 -2
  26. package/src/features/oauth/components/consent/OAuthConsentScreen.tsx +3 -3
  27. package/dist/chunk-DNWYHP4V.js.map +0 -1
  28. package/dist/chunk-EF2HVXOV.mjs.map +0 -1
  29. /package/dist/{BlockNoteEditor-FAPCNKXZ.mjs.map → BlockNoteEditor-DFBJOA4C.mjs.map} +0 -0
@@ -10117,7 +10117,7 @@ import { useRef as useRef17 } from "react";
10117
10117
  import dynamic from "next/dynamic";
10118
10118
  import React17 from "react";
10119
10119
  import { jsx as jsx86 } from "react/jsx-runtime";
10120
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-FAPCNKXZ.mjs"), {
10120
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-DFBJOA4C.mjs"), {
10121
10121
  ssr: false
10122
10122
  });
10123
10123
  var BlockNoteEditorContainer = React17.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -14527,13 +14527,33 @@ function Header({ children, mobileChildren, leftContent, logo, className }) {
14527
14527
  const { breadcrumbs } = useSharedContext();
14528
14528
  const rootLabel = useHeaderRootLabel();
14529
14529
  const isMobile = useIsMobile();
14530
- return /* @__PURE__ */ jsx153("header", { className: `sticky top-0 z-10 flex h-12 flex-col items-center justify-start gap-x-4 ${className ?? ""}`, children: /* @__PURE__ */ jsxs87("div", { className: "bg-sidebar flex h-12 w-full flex-row items-center justify-between pl-2 pr-4", children: [
14531
- isMobile && logo && /* @__PURE__ */ jsx153("div", { className: "flex shrink-0 flex-row items-center pr-1", children: logo }),
14532
- /* @__PURE__ */ jsx153(SidebarTrigger, { "aria-label": "Toggle sidebar", id: "sidebar-trigger" }),
14533
- leftContent,
14534
- /* @__PURE__ */ jsx153("div", { className: "flex w-full flex-row items-center justify-start", children: /* @__PURE__ */ jsx153(BreadcrumbNavigation, { items: breadcrumbs, rootLabel: rootLabel ?? void 0 }) }),
14535
- isMobile ? mobileChildren && /* @__PURE__ */ jsx153("div", { className: "flex shrink-0 flex-row items-center justify-end gap-x-2 whitespace-nowrap", children: mobileChildren }) : children && /* @__PURE__ */ jsx153("div", { className: "flex w-64 flex-row items-center justify-end gap-x-4 whitespace-nowrap", children: /* @__PURE__ */ jsx153("div", { className: "flex flex-row items-center justify-end gap-x-4 whitespace-nowrap", children }) })
14536
- ] }) });
14530
+ return (
14531
+ // Outer element owns the safe-area inset; the inner row keeps h-12 so the
14532
+ // content height is unchanged and only the notch padding is added above.
14533
+ // bg-sidebar: the outer element has no background of its own, and a padded
14534
+ // transparent strip would show scrolled content behind the status bar.
14535
+ // The fallback is MANDATORY in this package: other consumers (neural-erp)
14536
+ // never define --app-header-h, and a var() referencing an undefined
14537
+ // property invalidates the whole declaration. The fallback MUST include the
14538
+ // safe-area inset, because the padding below is unconditional: a consumer
14539
+ // that never defines the variable but does set viewportFit: "cover" would
14540
+ // otherwise get 3rem of height plus inset padding, squeezing the inner
14541
+ // h-12 row. (Tailwind arbitrary values need _ for spaces; CSS calc needs
14542
+ // whitespace around the +.)
14543
+ /* @__PURE__ */ jsx153(
14544
+ "header",
14545
+ {
14546
+ className: `bg-sidebar sticky top-0 z-10 flex h-[var(--app-header-h,calc(3rem_+_env(safe-area-inset-top)))] flex-col items-center justify-start gap-x-4 pt-[env(safe-area-inset-top)] ${className ?? ""}`,
14547
+ children: /* @__PURE__ */ jsxs87("div", { className: "bg-sidebar flex h-12 w-full flex-row items-center justify-between pl-2 pr-4", children: [
14548
+ isMobile && logo && /* @__PURE__ */ jsx153("div", { className: "flex shrink-0 flex-row items-center pr-1", children: logo }),
14549
+ /* @__PURE__ */ jsx153(SidebarTrigger, { "aria-label": "Toggle sidebar", id: "sidebar-trigger" }),
14550
+ leftContent,
14551
+ /* @__PURE__ */ jsx153("div", { className: "flex w-full flex-row items-center justify-start", children: /* @__PURE__ */ jsx153(BreadcrumbNavigation, { items: breadcrumbs, rootLabel: rootLabel ?? void 0 }) }),
14552
+ isMobile ? mobileChildren && /* @__PURE__ */ jsx153("div", { className: "flex shrink-0 flex-row items-center justify-end gap-x-2 whitespace-nowrap", children: mobileChildren }) : children && /* @__PURE__ */ jsx153("div", { className: "flex w-64 flex-row items-center justify-end gap-x-4 whitespace-nowrap", children: /* @__PURE__ */ jsx153("div", { className: "flex flex-row items-center justify-end gap-x-4 whitespace-nowrap", children }) })
14553
+ ] })
14554
+ }
14555
+ )
14556
+ );
14537
14557
  }
14538
14558
  __name(Header, "Header");
14539
14559
 
@@ -14812,16 +14832,19 @@ __name(ReactMarkdownContainer, "ReactMarkdownContainer");
14812
14832
  // src/components/containers/RoundPageContainerTitle.tsx
14813
14833
  import { InfoIcon as InfoIcon2 } from "lucide-react";
14814
14834
  import { jsx as jsx160, jsxs as jsxs93 } from "react/jsx-runtime";
14835
+ var HEADER_ROW_MIN_H = "min-h-[53px]";
14815
14836
  function RoundPageContainerTitle({
14816
14837
  module,
14817
14838
  details,
14839
+ detailsTitle,
14840
+ detailsIcon,
14818
14841
  showDetails,
14819
14842
  setShowDetails
14820
14843
  }) {
14821
14844
  const { title } = useSharedContext();
14822
14845
  const isMobile = useIsMobile();
14823
14846
  return /* @__PURE__ */ jsxs93("div", { className: "flex w-full flex-col border-b", children: [
14824
- /* @__PURE__ */ jsxs93("div", { className: cn(`flex w-full flex-row items-center gap-x-2 p-4 justify-between`), children: [
14847
+ /* @__PURE__ */ jsxs93("div", { className: cn(`flex w-full flex-row items-center gap-x-2 p-4 justify-between`, HEADER_ROW_MIN_H), children: [
14825
14848
  !isMobile ? /* @__PURE__ */ jsxs93("div", { className: "flex w-full gap-x-4", children: [
14826
14849
  /* @__PURE__ */ jsxs93("div", { className: "text-muted-foreground flex items-center gap-x-2 text-lg font-light whitespace-nowrap", children: [
14827
14850
  title.titleActions,
@@ -14845,10 +14868,14 @@ function RoundPageContainerTitle({
14845
14868
  variant: showDetails ? `ghost` : `default`,
14846
14869
  onClick: () => setShowDetails(!showDetails),
14847
14870
  className: cn(`cursor-pointer`),
14848
- children: /* @__PURE__ */ jsx160(InfoIcon2, {})
14871
+ children: detailsIcon ?? /* @__PURE__ */ jsx160(InfoIcon2, {})
14849
14872
  }
14850
14873
  ) }),
14851
- /* @__PURE__ */ jsx160(TooltipContent, { children: showDetails ? "Hide details" : "Show details" })
14874
+ /* @__PURE__ */ jsxs93(TooltipContent, { children: [
14875
+ showDetails ? "Hide" : "Show",
14876
+ " ",
14877
+ detailsTitle ?? "details"
14878
+ ] })
14852
14879
  ] })
14853
14880
  ] })
14854
14881
  ] }),
@@ -14881,26 +14908,36 @@ function RoundPageContainer({
14881
14908
  forceHeader,
14882
14909
  header,
14883
14910
  layout: layout2 = "tabs",
14884
- onSectionChange
14911
+ onSectionChange,
14912
+ testId,
14913
+ defaultDetailsOpen = false,
14914
+ detailsTitle,
14915
+ detailsIcon
14885
14916
  }) {
14886
14917
  const headerChildren = useHeaderChildren();
14887
14918
  const headerLeftContent = useHeaderLeftContent();
14888
14919
  const headerLogo = useHeaderLogo();
14889
14920
  const headerMobileChildren = useHeaderMobileChildren();
14890
- const [showDetails, setShowDetailsState] = useState51(false);
14921
+ const [showDetails, setShowDetailsState] = useState51(defaultDetailsOpen);
14891
14922
  const isMobile = useIsMobile();
14892
14923
  const [mounted, setMounted] = useState51(false);
14893
14924
  useEffect41(() => {
14894
- const match = document.cookie.split("; ").find((row) => row.startsWith(`${DETAILS_COOKIE_NAME}=`));
14895
- if (match?.split("=")[1] === "true") setShowDetailsState(true);
14925
+ const match = document.cookie.split("; ").find((row) => row.startsWith(`${detailsCookieName}=`));
14926
+ const stored = match?.split("=")[1];
14927
+ if (stored === "true") setShowDetailsState(true);
14928
+ else if (stored === "false") setShowDetailsState(false);
14896
14929
  }, []);
14897
14930
  useEffect41(() => {
14898
14931
  setMounted(true);
14899
14932
  }, []);
14900
- const setShowDetails = useCallback27((value) => {
14901
- setShowDetailsState(value);
14902
- document.cookie = `${DETAILS_COOKIE_NAME}=${value}; path=/; max-age=${DETAILS_COOKIE_MAX_AGE}`;
14903
- }, []);
14933
+ const detailsCookieName = module?.name ? `${DETAILS_COOKIE_NAME}_${module.name}` : DETAILS_COOKIE_NAME;
14934
+ const setShowDetails = useCallback27(
14935
+ (value) => {
14936
+ setShowDetailsState(value);
14937
+ document.cookie = `${detailsCookieName}=${value}; path=/; max-age=${DETAILS_COOKIE_MAX_AGE}`;
14938
+ },
14939
+ [detailsCookieName]
14940
+ );
14904
14941
  const searchParams = useSearchParams();
14905
14942
  const section = searchParams.get("section");
14906
14943
  const rewriteUrl = useUrlRewriter();
@@ -14945,10 +14982,20 @@ function RoundPageContainer({
14945
14982
  children: headerChildren
14946
14983
  }
14947
14984
  ),
14948
- /* @__PURE__ */ jsxs94("div", { className: cn("flex h-[calc(100vh-3rem)] w-full flex-col", isMobile ? "gap-1 p-1 pt-0" : "p-2 pt-0 pl-0"), children: [
14949
- /* @__PURE__ */ jsx161("div", { className: cn("bg-background flex min-h-0 w-full flex-1", isMobile ? "" : "rounded-lg border p-0"), children: /* @__PURE__ */ jsx161("div", { className: "flex w-full flex-col" }) }),
14950
- /* @__PURE__ */ jsx161(MobileNavigationBar, {})
14951
- ] })
14985
+ /* @__PURE__ */ jsxs94(
14986
+ "div",
14987
+ {
14988
+ "data-testid": testId,
14989
+ className: cn(
14990
+ "flex h-[calc(100dvh-var(--app-header-h,3rem))] w-full flex-col",
14991
+ isMobile ? "gap-1 p-1 pt-0" : "p-2 pt-0 pl-0"
14992
+ ),
14993
+ children: [
14994
+ /* @__PURE__ */ jsx161("div", { className: cn("bg-background flex min-h-0 w-full flex-1", isMobile ? "" : "rounded-lg border p-0"), children: /* @__PURE__ */ jsx161("div", { className: "flex w-full flex-col" }) }),
14995
+ /* @__PURE__ */ jsx161(MobileNavigationBar, {})
14996
+ ]
14997
+ }
14998
+ )
14952
14999
  ] });
14953
15000
  }
14954
15001
  return /* @__PURE__ */ jsxs94(Fragment24, { children: [
@@ -14962,194 +15009,216 @@ function RoundPageContainer({
14962
15009
  children: headerChildren
14963
15010
  }
14964
15011
  ),
14965
- /* @__PURE__ */ jsxs94("div", { className: cn(`flex h-[calc(100vh-3rem)] w-full flex-col`, isMobile ? "gap-1 p-1 pt-0" : "p-2 pt-0 pl-0"), children: [
14966
- /* @__PURE__ */ jsxs94("div", { className: "bg-background flex min-h-0 w-full flex-1 rounded-lg border p-0", children: [
14967
- /* @__PURE__ */ jsxs94("div", { className: "flex w-full flex-col", children: [
14968
- (!fullWidth || forceHeader) && /* @__PURE__ */ jsx161(
14969
- RoundPageContainerTitle,
14970
- {
14971
- module,
14972
- details,
14973
- showDetails,
14974
- setShowDetails,
14975
- fullWidth
14976
- }
14977
- ),
14978
- /* @__PURE__ */ jsx161("div", { className: "flex h-full w-full overflow-hidden", children: layout2 === "rail" && tabs ? (
14979
- // Rail layout: the vertical-tab navigation is a flush-left
14980
- // sidebar of the card and the content fills the full remaining
14981
- // width (like `fullWidth`) — NOT the centred max-w-6xl column.
14982
- /* @__PURE__ */ jsxs94(
14983
- Tabs,
14984
- {
14985
- value: activeTab,
14986
- onValueChange: handleTabChange,
14987
- orientation: "horizontal",
14988
- className: "flex h-full min-w-0 grow overflow-hidden data-[orientation=horizontal]:flex-row",
14989
- children: [
14990
- /* @__PURE__ */ jsx161(
14991
- "aside",
14992
- {
14993
- "data-testid": "round-page-rail",
14994
- className: "hidden shrink-0 border-r p-4 md:flex md:w-56 md:flex-col md:overflow-y-auto",
14995
- children: /* @__PURE__ */ jsxs94(TabsList, { className: "flex h-auto flex-col items-stretch gap-0.5 bg-transparent p-0", children: [
14996
- ungrouped.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tab.label)),
14997
- groups.map((group) => /* @__PURE__ */ jsxs94(Fragment23, { children: [
14998
- /* @__PURE__ */ jsx161(
14999
- "div",
15000
- {
15001
- role: "presentation",
15002
- className: "text-muted-foreground px-3 pt-3 pb-1 text-[10px] font-bold tracking-wider uppercase",
15003
- children: group.label
15004
- }
15005
- ),
15006
- group.items.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tab.label))
15007
- ] }, group.label))
15008
- ] })
15009
- }
15010
- ),
15011
- /* @__PURE__ */ jsxs94("div", { className: "flex min-w-0 grow flex-col overflow-hidden", children: [
15012
- /* @__PURE__ */ jsx161("div", { "data-testid": "round-page-rail-select", className: "p-2 md:hidden", children: /* @__PURE__ */ jsxs94(
15013
- Select,
15014
- {
15015
- items: tabItems,
15016
- value: activeTab,
15017
- onValueChange: (value) => {
15018
- if (value) handleTabChange(value);
15019
- },
15020
- children: [
15021
- /* @__PURE__ */ jsx161(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx161(SelectValue, {}) }),
15022
- /* @__PURE__ */ jsxs94(SelectContent, { children: [
15023
- ungrouped.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label)),
15024
- groups.map((group) => /* @__PURE__ */ jsxs94(SelectGroup, { children: [
15025
- /* @__PURE__ */ jsx161(SelectLabel, { children: group.label }),
15026
- group.items.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label))
15012
+ /* @__PURE__ */ jsxs94(
15013
+ "div",
15014
+ {
15015
+ "data-testid": testId,
15016
+ className: cn(
15017
+ `flex h-[calc(100dvh-var(--app-header-h,3rem))] w-full flex-col`,
15018
+ isMobile ? "gap-1 p-1 pt-0" : "p-2 pt-0 pl-0"
15019
+ ),
15020
+ children: [
15021
+ /* @__PURE__ */ jsxs94("div", { className: "bg-background flex min-h-0 w-full flex-1 rounded-lg border p-0", children: [
15022
+ /* @__PURE__ */ jsxs94("div", { className: "flex w-full flex-col", children: [
15023
+ (!fullWidth || forceHeader) && /* @__PURE__ */ jsx161(
15024
+ RoundPageContainerTitle,
15025
+ {
15026
+ module,
15027
+ details,
15028
+ detailsTitle,
15029
+ detailsIcon,
15030
+ showDetails,
15031
+ setShowDetails,
15032
+ fullWidth
15033
+ }
15034
+ ),
15035
+ /* @__PURE__ */ jsx161("div", { className: "flex h-full w-full overflow-hidden", children: layout2 === "rail" && tabs ? (
15036
+ // Rail layout: the vertical-tab navigation is a flush-left
15037
+ // sidebar of the card and the content fills the full remaining
15038
+ // width (like `fullWidth`) — NOT the centred max-w-6xl column.
15039
+ /* @__PURE__ */ jsxs94(
15040
+ Tabs,
15041
+ {
15042
+ value: activeTab,
15043
+ onValueChange: handleTabChange,
15044
+ orientation: "horizontal",
15045
+ className: "flex h-full min-w-0 grow overflow-hidden data-[orientation=horizontal]:flex-row",
15046
+ children: [
15047
+ /* @__PURE__ */ jsx161(
15048
+ "aside",
15049
+ {
15050
+ "data-testid": "round-page-rail",
15051
+ className: "hidden shrink-0 border-r p-4 md:flex md:w-56 md:flex-col md:overflow-y-auto",
15052
+ children: /* @__PURE__ */ jsxs94(TabsList, { className: "flex h-auto flex-col items-stretch gap-0.5 bg-transparent p-0", children: [
15053
+ ungrouped.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tab.label)),
15054
+ groups.map((group) => /* @__PURE__ */ jsxs94(Fragment23, { children: [
15055
+ /* @__PURE__ */ jsx161(
15056
+ "div",
15057
+ {
15058
+ role: "presentation",
15059
+ className: "text-muted-foreground px-3 pt-3 pb-1 text-[10px] font-bold tracking-wider uppercase",
15060
+ children: group.label
15061
+ }
15062
+ ),
15063
+ group.items.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: railTriggerClass, children: tab.contentLabel ?? tab.label }, tab.label))
15027
15064
  ] }, group.label))
15028
15065
  ] })
15029
- ]
15030
- }
15031
- ) }),
15032
- /* @__PURE__ */ jsx161(
15033
- "div",
15034
- {
15035
- className: cn(
15036
- `min-w-0 grow`,
15037
- activeFillHeight ? `flex flex-col overflow-hidden` : `overflow-y-auto p-4`
15038
- ),
15039
- children: /* @__PURE__ */ jsxs94(
15040
- "div",
15066
+ }
15067
+ ),
15068
+ /* @__PURE__ */ jsxs94("div", { className: "flex min-w-0 grow flex-col overflow-hidden", children: [
15069
+ /* @__PURE__ */ jsx161("div", { "data-testid": "round-page-rail-select", className: "p-2 md:hidden", children: /* @__PURE__ */ jsxs94(
15070
+ Select,
15041
15071
  {
15042
- className: cn(
15043
- activeFillHeight ? `flex min-h-0 w-full flex-1 flex-col` : `mx-auto w-full max-w-6xl`
15044
- ),
15072
+ items: tabItems,
15073
+ value: activeTab,
15074
+ onValueChange: (value) => {
15075
+ if (value) handleTabChange(value);
15076
+ },
15045
15077
  children: [
15046
- header,
15047
- tabs.map((tab) => /* @__PURE__ */ jsx161(
15048
- TabsContent,
15049
- {
15050
- value: tabValue(tab),
15051
- className: tab.fillHeight ? `flex min-h-0 w-full flex-1 flex-col` : ``,
15052
- children: tab.content
15053
- },
15054
- tab.label
15055
- )),
15056
- children && /* @__PURE__ */ jsx161("div", { className: "flex", children })
15078
+ /* @__PURE__ */ jsx161(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx161(SelectValue, {}) }),
15079
+ /* @__PURE__ */ jsxs94(SelectContent, { children: [
15080
+ ungrouped.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label)),
15081
+ groups.map((group) => /* @__PURE__ */ jsxs94(SelectGroup, { children: [
15082
+ /* @__PURE__ */ jsx161(SelectLabel, { children: group.label }),
15083
+ group.items.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label))
15084
+ ] }, group.label))
15085
+ ] })
15057
15086
  ]
15058
15087
  }
15059
- )
15060
- }
15061
- )
15062
- ] })
15063
- ]
15064
- }
15065
- )
15066
- ) : /* @__PURE__ */ jsx161(
15067
- "div",
15068
- {
15069
- className: cn(
15070
- `grow`,
15071
- isMobile ? `p-2` : `p-4`,
15072
- activeFillHeight ? `flex flex-col overflow-hidden` : `overflow-y-auto`,
15073
- fullWidth && `p-0`
15074
- ),
15075
- children: /* @__PURE__ */ jsxs94(
15076
- "div",
15077
- {
15078
- className: cn(
15079
- `mx-auto max-w-6xl space-y-8`,
15080
- activeFillHeight && `flex w-full flex-1 min-h-0 flex-col space-y-0`,
15081
- fullWidth && `max-w-full w-full p-0 h-full`
15082
- ),
15083
- children: [
15084
- header,
15085
- tabs ? /* @__PURE__ */ jsxs94(Fragment24, { children: [
15086
- /* @__PURE__ */ jsxs94(
15087
- Tabs,
15088
- {
15089
- value: activeTab,
15090
- className: cn(`w-full`, activeFillHeight && `flex flex-1 min-h-0 flex-col`),
15091
- onValueChange: handleTabChange,
15092
- children: [
15093
- isMobile ? /* @__PURE__ */ jsx161("div", { className: "p-0", children: /* @__PURE__ */ jsxs94(
15094
- Select,
15095
- {
15096
- items: tabItems,
15097
- value: activeTab,
15098
- onValueChange: (value) => {
15099
- if (value) handleTabChange(value);
15100
- },
15101
- children: [
15102
- /* @__PURE__ */ jsx161(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx161(SelectValue, {}) }),
15103
- /* @__PURE__ */ jsx161(SelectContent, { children: tabs.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label)) })
15104
- ]
15105
- }
15106
- ) }) : /* @__PURE__ */ jsx161("div", { className: "p-4", children: /* @__PURE__ */ jsx161(TabsList, { children: tabs.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: "px-4", children: tab.contentLabel ?? tab.label }, tab.label)) }) }),
15107
- /* @__PURE__ */ jsx161(
15088
+ ) }),
15089
+ /* @__PURE__ */ jsx161(
15090
+ "div",
15091
+ {
15092
+ className: cn(
15093
+ `min-w-0 grow`,
15094
+ activeFillHeight ? `flex flex-col overflow-hidden` : `overflow-y-auto p-4`
15095
+ ),
15096
+ children: /* @__PURE__ */ jsxs94(
15108
15097
  "div",
15109
15098
  {
15110
15099
  className: cn(
15111
- `flex w-full `,
15112
- isMobile ? `` : `px-4`,
15113
- activeFillHeight ? `flex-1 min-h-0` : `overflow-y-auto`
15100
+ activeFillHeight ? `flex min-h-0 w-full flex-1 flex-col` : `mx-auto w-full max-w-6xl`
15114
15101
  ),
15115
- children: tabs.map((tab) => /* @__PURE__ */ jsx161(
15116
- TabsContent,
15117
- {
15118
- value: tabValue(tab),
15119
- className: tab.fillHeight ? `flex flex-1 min-h-0 w-full flex-col` : `pb-20`,
15120
- children: tab.content
15121
- },
15122
- tab.label
15123
- ))
15102
+ children: [
15103
+ header,
15104
+ tabs.map((tab) => /* @__PURE__ */ jsx161(
15105
+ TabsContent,
15106
+ {
15107
+ value: tabValue(tab),
15108
+ className: tab.fillHeight ? `flex min-h-0 w-full flex-1 flex-col` : ``,
15109
+ children: tab.content
15110
+ },
15111
+ tab.label
15112
+ )),
15113
+ children && /* @__PURE__ */ jsx161("div", { className: "flex", children })
15114
+ ]
15124
15115
  }
15125
15116
  )
15126
- ]
15127
- }
15117
+ }
15118
+ )
15119
+ ] })
15120
+ ]
15121
+ }
15122
+ )
15123
+ ) : /* @__PURE__ */ jsx161(
15124
+ "div",
15125
+ {
15126
+ className: cn(
15127
+ `grow`,
15128
+ isMobile ? `p-2` : `p-4`,
15129
+ activeFillHeight ? `flex flex-col overflow-hidden` : `overflow-y-auto`,
15130
+ fullWidth && `p-0`
15131
+ ),
15132
+ children: /* @__PURE__ */ jsxs94(
15133
+ "div",
15134
+ {
15135
+ className: cn(
15136
+ `mx-auto max-w-6xl space-y-8`,
15137
+ activeFillHeight && `flex w-full flex-1 min-h-0 flex-col space-y-0`,
15138
+ fullWidth && `max-w-full w-full p-0 h-full`
15128
15139
  ),
15129
- children && /* @__PURE__ */ jsx161("div", { className: cn(`flex`, isMobile ? `px-2` : `px-4`), children })
15130
- ] }) : children
15131
- ]
15140
+ children: [
15141
+ header,
15142
+ tabs ? /* @__PURE__ */ jsxs94(Fragment24, { children: [
15143
+ /* @__PURE__ */ jsxs94(
15144
+ Tabs,
15145
+ {
15146
+ value: activeTab,
15147
+ className: cn(`w-full`, activeFillHeight && `flex flex-1 min-h-0 flex-col`),
15148
+ onValueChange: handleTabChange,
15149
+ children: [
15150
+ isMobile ? /* @__PURE__ */ jsx161("div", { className: "p-0", children: /* @__PURE__ */ jsxs94(
15151
+ Select,
15152
+ {
15153
+ items: tabItems,
15154
+ value: activeTab,
15155
+ onValueChange: (value) => {
15156
+ if (value) handleTabChange(value);
15157
+ },
15158
+ children: [
15159
+ /* @__PURE__ */ jsx161(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx161(SelectValue, {}) }),
15160
+ /* @__PURE__ */ jsx161(SelectContent, { children: tabs.map((tab) => /* @__PURE__ */ jsx161(SelectItem, { value: tabValue(tab), children: tab.contentLabel ?? tab.label }, tab.label)) })
15161
+ ]
15162
+ }
15163
+ ) }) : /* @__PURE__ */ jsx161("div", { className: "p-4", children: /* @__PURE__ */ jsx161(TabsList, { children: tabs.map((tab) => /* @__PURE__ */ jsx161(TabsTrigger, { value: tabValue(tab), className: "px-4", children: tab.contentLabel ?? tab.label }, tab.label)) }) }),
15164
+ /* @__PURE__ */ jsx161(
15165
+ "div",
15166
+ {
15167
+ className: cn(
15168
+ `flex w-full `,
15169
+ isMobile ? `` : `px-4`,
15170
+ activeFillHeight ? `flex-1 min-h-0` : `overflow-y-auto`
15171
+ ),
15172
+ children: tabs.map((tab) => /* @__PURE__ */ jsx161(
15173
+ TabsContent,
15174
+ {
15175
+ value: tabValue(tab),
15176
+ className: tab.fillHeight ? `flex flex-1 min-h-0 w-full flex-col` : `pb-20`,
15177
+ children: tab.content
15178
+ },
15179
+ tab.label
15180
+ ))
15181
+ }
15182
+ )
15183
+ ]
15184
+ }
15185
+ ),
15186
+ children && /* @__PURE__ */ jsx161("div", { className: cn(`flex`, isMobile ? `px-2` : `px-4`), children })
15187
+ ] }) : children
15188
+ ]
15189
+ }
15190
+ )
15132
15191
  }
15133
- )
15134
- }
15135
- ) })
15136
- ] }),
15137
- details && (isMobile ? /* @__PURE__ */ jsx161(Sheet, { open: showDetails, onOpenChange: setShowDetails, children: /* @__PURE__ */ jsxs94(SheetContent, { side: "right", children: [
15138
- /* @__PURE__ */ jsx161(SheetHeader, { children: /* @__PURE__ */ jsx161(SheetTitle, { children: "Details" }) }),
15139
- /* @__PURE__ */ jsx161("div", { className: "overflow-y-auto p-6 pt-0", children: details })
15140
- ] }) }) : /* @__PURE__ */ jsx161(
15141
- "div",
15142
- {
15143
- className: cn(
15144
- "h-full shrink-0 overflow-hidden overflow-y-auto transition-all duration-300 ease-in-out",
15145
- showDetails ? "w-96 border-l p-4 opacity-100" : "ml-0 w-0 border-l-0 p-0 opacity-0"
15146
- ),
15147
- children: details
15148
- }
15149
- ))
15150
- ] }),
15151
- /* @__PURE__ */ jsx161(MobileNavigationBar, {})
15152
- ] })
15192
+ ) })
15193
+ ] }),
15194
+ details && (isMobile ? /* @__PURE__ */ jsx161(Sheet, { open: showDetails, onOpenChange: setShowDetails, children: /* @__PURE__ */ jsxs94(SheetContent, { side: "right", children: [
15195
+ /* @__PURE__ */ jsx161(SheetHeader, { children: /* @__PURE__ */ jsx161(SheetTitle, { children: detailsTitle ?? "Details" }) }),
15196
+ /* @__PURE__ */ jsx161("div", { className: "overflow-y-auto p-6 pt-0", children: details })
15197
+ ] }) }) : /* @__PURE__ */ jsxs94(
15198
+ "div",
15199
+ {
15200
+ className: cn(
15201
+ // `flex-col` + a separate scroll body below: the header must stay
15202
+ // put while the panel content scrolls. Scrolling on this element
15203
+ // (as it did before) would carry the header away with the content.
15204
+ "flex h-full shrink-0 flex-col overflow-hidden transition-all duration-300 ease-in-out",
15205
+ showDetails ? "w-96 border-l opacity-100" : "ml-0 w-0 border-l-0 opacity-0"
15206
+ ),
15207
+ children: [
15208
+ detailsTitle && // Mirrors RoundPageContainerTitle's structure exactly — border on an
15209
+ // OUTER wrapper, height floor on the INNER row. Putting the border
15210
+ // inside the measured row instead leaves this header 1px short of
15211
+ // the page title bar, since `box-sizing: border-box` absorbs it.
15212
+ /* @__PURE__ */ jsx161("div", { className: "shrink-0 border-b", children: /* @__PURE__ */ jsx161("div", { className: cn("flex items-center p-4", HEADER_ROW_MIN_H), children: /* @__PURE__ */ jsx161("span", { className: "text-primary truncate text-sm font-semibold", children: detailsTitle }) }) }),
15213
+ /* @__PURE__ */ jsx161("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: details })
15214
+ ]
15215
+ }
15216
+ ))
15217
+ ] }),
15218
+ /* @__PURE__ */ jsx161(MobileNavigationBar, {})
15219
+ ]
15220
+ }
15221
+ )
15153
15222
  ] });
15154
15223
  }
15155
15224
  __name(RoundPageContainer, "RoundPageContainer");
@@ -15538,13 +15607,13 @@ function PageContentContainer({ header, details, footer, content, fullBleed }) {
15538
15607
  storage: typeof window !== "undefined" ? localStorage : void 0
15539
15608
  });
15540
15609
  if (!isReady) {
15541
- return /* @__PURE__ */ jsx169("div", { className: "flex h-[calc(100vh-4rem)] w-full flex-col" });
15610
+ return /* @__PURE__ */ jsx169("div", { className: "flex h-[calc(100dvh-4rem)] w-full flex-col" });
15542
15611
  }
15543
15612
  const leftPanelDefaultSize = isMobile ? "10%" : "32%";
15544
15613
  const leftPanelMinSize = isMobile ? "10%" : "20%";
15545
15614
  const leftPanelMaxSize = isMobile ? "90%" : "40%";
15546
15615
  const rightPanelDefaultSize = isMobile ? "90%" : "68%";
15547
- return /* @__PURE__ */ jsxs99("div", { className: "flex h-[calc(100vh-4rem)] w-full flex-col transition-opacity duration-150 animate-in fade-in", children: [
15616
+ return /* @__PURE__ */ jsxs99("div", { className: "flex h-[calc(100dvh-4rem)] w-full flex-col transition-opacity duration-150 animate-in fade-in", children: [
15548
15617
  header && /* @__PURE__ */ jsx169("div", { className: "mb-4 flex w-full shrink-0 border-b pr-4", children: header }),
15549
15618
  /* @__PURE__ */ jsx169("div", { className: "min-h-0 flex-1", children: details || footer ? /* @__PURE__ */ jsxs99(
15550
15619
  ResizablePanelGroup,
@@ -22070,19 +22139,19 @@ function OAuthConsentScreen({
22070
22139
  }) {
22071
22140
  const { clientInfo, isLoading, error, approve, deny, isSubmitting } = useOAuthConsent(params);
22072
22141
  if (isLoading) {
22073
- return /* @__PURE__ */ jsx264("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx264(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs165(CardContent, { className: "flex flex-col items-center justify-center py-12", children: [
22142
+ return /* @__PURE__ */ jsx264("div", { className: "min-h-dvh flex items-center justify-center p-4", children: /* @__PURE__ */ jsx264(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs165(CardContent, { className: "flex flex-col items-center justify-center py-12", children: [
22074
22143
  /* @__PURE__ */ jsx264(Loader26, { className: "h-8 w-8 animate-spin text-muted-foreground" }),
22075
22144
  /* @__PURE__ */ jsx264("p", { className: "mt-4 text-muted-foreground", children: "Loading authorization request..." })
22076
22145
  ] }) }) });
22077
22146
  }
22078
22147
  if (error || !clientInfo) {
22079
- return /* @__PURE__ */ jsx264("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx264(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx264(CardContent, { className: "py-8", children: /* @__PURE__ */ jsxs165(Alert, { variant: "destructive", children: [
22148
+ return /* @__PURE__ */ jsx264("div", { className: "min-h-dvh flex items-center justify-center p-4", children: /* @__PURE__ */ jsx264(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx264(CardContent, { className: "py-8", children: /* @__PURE__ */ jsxs165(Alert, { variant: "destructive", children: [
22080
22149
  /* @__PURE__ */ jsx264(AlertTriangle2, { className: "h-4 w-4" }),
22081
22150
  /* @__PURE__ */ jsx264(AlertDescription, { children: error?.message || "Invalid authorization request. Please try again." })
22082
22151
  ] }) }) }) });
22083
22152
  }
22084
22153
  const { client, scopes } = clientInfo;
22085
- return /* @__PURE__ */ jsx264("div", { className: "min-h-screen flex items-center justify-center p-4 bg-muted/30", children: /* @__PURE__ */ jsxs165(Card, { className: "w-full max-w-md", children: [
22154
+ return /* @__PURE__ */ jsx264("div", { className: "min-h-dvh flex items-center justify-center p-4 bg-muted/30", children: /* @__PURE__ */ jsxs165(Card, { className: "w-full max-w-md", children: [
22086
22155
  /* @__PURE__ */ jsxs165(CardContent, { className: "pt-6 space-y-6", children: [
22087
22156
  /* @__PURE__ */ jsx264(OAuthConsentHeader, { client, logoUrl, appName }),
22088
22157
  /* @__PURE__ */ jsx264(Separator, {}),
@@ -23572,6 +23641,7 @@ export {
23572
23641
  PageContainer,
23573
23642
  partitionTabs,
23574
23643
  ReactMarkdownContainer,
23644
+ HEADER_ROW_MIN_H,
23575
23645
  RoundPageContainerTitle,
23576
23646
  RoundPageContainer,
23577
23647
  TabsContainer,
@@ -23799,4 +23869,4 @@ export {
23799
23869
  useOAuthClients,
23800
23870
  useOAuthClient
23801
23871
  };
23802
- //# sourceMappingURL=chunk-EF2HVXOV.mjs.map
23872
+ //# sourceMappingURL=chunk-EWAOWYT5.mjs.map