@datum-cloud/datum-ui 2.4.0 → 2.6.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 (99) hide show
  1. package/dist/app-navigation/index.mjs +2 -2
  2. package/dist/{app-navigation--tEBCrfl.mjs → app-navigation-DhPaPFnN.mjs} +3 -7
  3. package/dist/assistant/index.mjs +15 -6
  4. package/dist/autocomplete/index.mjs +1 -1
  5. package/dist/{autocomplete-DZ_HSBak.mjs → autocomplete-BxtzndxZ.mjs} +1 -1
  6. package/dist/autosearch/index.mjs +3 -3
  7. package/dist/avatar-stack/index.mjs +1 -1
  8. package/dist/{avatar-stack-BZK6zUJr.mjs → avatar-stack-BUcsjhA6.mjs} +1 -1
  9. package/dist/button/index.mjs +2 -2
  10. package/dist/{button-H_8dI-Ib.mjs → button-CDPui_Ov.mjs} +1 -1
  11. package/dist/{button-A1qTjZ8U.mjs → button-DoMqfQLu.mjs} +1 -1
  12. package/dist/{calendar-date-picker-ynSGADfR.mjs → calendar-date-picker-bpTUcGu_.mjs} +1 -1
  13. package/dist/components/base/hover-card/hover-card.d.ts +13 -0
  14. package/dist/components/base/hover-card/index.d.ts +1 -1
  15. package/dist/components/base/popover/index.d.ts +1 -1
  16. package/dist/components/base/popover/popover.d.ts +15 -0
  17. package/dist/components/features/logs/components/columns.d.ts +15 -0
  18. package/dist/components/features/logs/components/root.d.ts +1 -1
  19. package/dist/components/features/logs/components/status-badge.d.ts +5 -0
  20. package/dist/components/features/logs/components/timeline.d.ts +3 -0
  21. package/dist/components/features/logs/fixtures/index.d.ts +2 -0
  22. package/dist/components/features/logs/index.d.ts +3 -2
  23. package/dist/components/features/logs/logs.d.ts +2 -0
  24. package/dist/components/features/logs/types.d.ts +51 -3
  25. package/dist/components/features/logs/utils/detail-width.d.ts +3 -0
  26. package/dist/components/features/logs/utils/facets.d.ts +7 -0
  27. package/dist/components/features/logs/utils/format-timestamp.d.ts +4 -0
  28. package/dist/components/features/logs/utils/histogram.d.ts +16 -0
  29. package/dist/components/features/logs/utils/host.d.ts +7 -0
  30. package/dist/components/features/logs/utils/index.d.ts +6 -4
  31. package/dist/components/features/logs/utils/parse-log-line.d.ts +17 -3
  32. package/dist/components/features/logs/utils/time-range.d.ts +19 -0
  33. package/dist/data-table/index.mjs +1 -1
  34. package/dist/{data-table-ClfRpyHq.mjs → data-table-BaWOHdZX.mjs} +6 -6
  35. package/dist/date-picker/index.mjs +3 -3
  36. package/dist/date-time/index.mjs +1 -1
  37. package/dist/{date-time-CA-09lnw.mjs → date-time-lZdefM4H.mjs} +2 -2
  38. package/dist/date-time-picker/index.mjs +1 -1
  39. package/dist/{date-time-picker-BzcHrf-A.mjs → date-time-picker-Bd7qSZVr.mjs} +1 -1
  40. package/dist/{date-time-range-picker-Dog33Ry0.mjs → date-time-range-picker-DlFTh3DF.mjs} +14 -5
  41. package/dist/dialog/index.mjs +1 -1
  42. package/dist/{dialog-N2pkQIc4.mjs → dialog-Gu70fban.mjs} +1 -1
  43. package/dist/dropdown/index.mjs +1 -1
  44. package/dist/{dropdown-B0znsOlu.mjs → dropdown-Xvduih96.mjs} +6 -6
  45. package/dist/dropzone/index.mjs +1 -1
  46. package/dist/{dropzone-DrWVd7OI.mjs → dropzone-ihksfjN2.mjs} +1 -1
  47. package/dist/empty-content/index.mjs +1 -1
  48. package/dist/{empty-content-DvaelFpJ.mjs → empty-content-CmuVcU0P.mjs} +2 -2
  49. package/dist/form/index.mjs +1 -1
  50. package/dist/form/stepper/index.mjs +1 -1
  51. package/dist/{form-BhBsoMFA.mjs → form-BKxvdIKB.mjs} +10 -10
  52. package/dist/grouped-table/index.mjs +1 -1
  53. package/dist/{grouped-table-Bb9KoI1e.mjs → grouped-table-DWtEx18V.mjs} +4 -8
  54. package/dist/hover-card/index.mjs +1 -1
  55. package/dist/{hover-card-08jU9cD8.mjs → hover-card-BNOE5vT5.mjs} +20 -3
  56. package/dist/index.mjs +35 -34
  57. package/dist/logs/fixtures/index.mjs +770 -3
  58. package/dist/logs/index.mjs +1044 -249
  59. package/dist/mobile-sheet/index.mjs +1 -1
  60. package/dist/{mobile-sheet-BYp-QQmn.mjs → mobile-sheet-9TootJGg.mjs} +1 -1
  61. package/dist/more-actions/index.mjs +1 -1
  62. package/dist/{more-actions-B1FUf2rm.mjs → more-actions-C3DYWO0a.mjs} +3 -3
  63. package/dist/motion-DvGRWdsm.mjs +46 -0
  64. package/dist/multi-select/index.mjs +1 -1
  65. package/dist/{multi-select-PtdMChPF.mjs → multi-select-CH8KERkt.mjs} +1 -1
  66. package/dist/picker/index.mjs +2 -2
  67. package/dist/{picker-raVuDxsh.mjs → picker-DbKukBkk.mjs} +1 -1
  68. package/dist/popover/index.mjs +1 -33
  69. package/dist/popover-X82NwhX9.mjs +53 -0
  70. package/dist/responsive-dropdown/index.mjs +1 -1
  71. package/dist/{responsive-dropdown-n0Txkax5.mjs → responsive-dropdown-C_KKgLbH.mjs} +2 -2
  72. package/dist/responsive-popover/index.mjs +1 -1
  73. package/dist/{responsive-popover-C_1nzIvm.mjs → responsive-popover-8VcjBM2d.mjs} +2 -2
  74. package/dist/rich-text-editor/index.mjs +1 -1
  75. package/dist/{rich-text-editor-Dohp-pbf.mjs → rich-text-editor-DVga5upM.mjs} +3 -3
  76. package/dist/select/index.mjs +1 -1
  77. package/dist/{select-DCU44UO6.mjs → select-CQsG8Kju.mjs} +1 -1
  78. package/dist/sheet/index.mjs +1 -1
  79. package/dist/{sheet-C2i2k5i2.mjs → sheet-DHn6C_rs.mjs} +1 -1
  80. package/dist/sidebar/index.mjs +1 -1
  81. package/dist/{sidebar-D6BoAr6C.mjs → sidebar-BeWEEu7P.mjs} +1 -1
  82. package/dist/styles/motion.css +61 -0
  83. package/dist/styles/root.css +6 -0
  84. package/dist/switch/index.mjs +1 -1
  85. package/dist/{switch-DPHr3TcN.mjs → switch-Z2pJMckf.mjs} +1 -1
  86. package/dist/tabs/index.mjs +1 -1
  87. package/dist/task-queue/index.mjs +1 -1
  88. package/dist/{task-queue-dropdown-ClLLTMxU.mjs → task-queue-dropdown-BJS3snfZ.mjs} +4 -4
  89. package/dist/time-picker/index.mjs +1 -1
  90. package/dist/{time-picker-CFhaHTtI.mjs → time-picker-rVTkmbIG.mjs} +1 -1
  91. package/dist/{to-api-format-WC7b9Mcv.mjs → to-api-format-Bm1VcKkS.mjs} +4 -4
  92. package/dist/tooltip/index.mjs +1 -1
  93. package/dist/{tooltip-C_SL1imw.mjs → tooltip-DhbN1BDK.mjs} +1 -1
  94. package/dist/transfer/index.mjs +1 -1
  95. package/dist/{transfer-CEq9AhL7.mjs → transfer-DsshYgIk.mjs} +1 -1
  96. package/dist/utils/index.d.ts +2 -0
  97. package/dist/utils/index.mjs +2 -1
  98. package/dist/utils/motion.d.ts +30 -0
  99. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import { C as SidebarProvider, S as SidebarGroupLabel, _ as SidebarMenuSubButton, a as SidebarInput, b as SidebarGroupAction, c as SidebarSeparator, d as SidebarMenuAction, f as SidebarMenuBadge, g as SidebarMenuSub, h as SidebarMenuSkeleton, i as SidebarHeader, l as SidebarTrigger, m as SidebarMenuItem, n as SidebarContent, o as SidebarInset, p as SidebarMenuButton, r as SidebarFooter, s as SidebarRail, t as Sidebar, u as SidebarMenu, v as SidebarMenuSubItem, w as useSidebar, x as SidebarGroupContent, y as SidebarGroup } from "../sidebar-D6BoAr6C.mjs";
2
- import { a as hasActiveDescendant, i as findItemByHref, n as NavMenu, o as isNavItemActive, r as NavMenuItem, s as normalizePath, t as AppNavigation } from "../app-navigation--tEBCrfl.mjs";
1
+ import { C as SidebarProvider, S as SidebarGroupLabel, _ as SidebarMenuSubButton, a as SidebarInput, b as SidebarGroupAction, c as SidebarSeparator, d as SidebarMenuAction, f as SidebarMenuBadge, g as SidebarMenuSub, h as SidebarMenuSkeleton, i as SidebarHeader, l as SidebarTrigger, m as SidebarMenuItem, n as SidebarContent, o as SidebarInset, p as SidebarMenuButton, r as SidebarFooter, s as SidebarRail, t as Sidebar, u as SidebarMenu, v as SidebarMenuSubItem, w as useSidebar, x as SidebarGroupContent, y as SidebarGroup } from "../sidebar-BeWEEu7P.mjs";
2
+ import { a as hasActiveDescendant, i as findItemByHref, n as NavMenu, o as isNavItemActive, r as NavMenuItem, s as normalizePath, t as AppNavigation } from "../app-navigation-DhPaPFnN.mjs";
3
3
  export { AppNavigation, NavMenu, NavMenuItem, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, findItemByHref, hasActiveDescendant, isNavItemActive, normalizePath, useSidebar };
@@ -1,7 +1,8 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { t as Icon } from "./icon-wrapper-DKfJlJd0.mjs";
3
3
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./collapsible/index.mjs";
4
- import { c as SidebarSeparator, g as SidebarMenuSub, h as SidebarMenuSkeleton, i as SidebarHeader, l as SidebarTrigger, m as SidebarMenuItem, n as SidebarContent, p as SidebarMenuButton, r as SidebarFooter, t as Sidebar, u as SidebarMenu, w as useSidebar, x as SidebarGroupContent, y as SidebarGroup } from "./sidebar-D6BoAr6C.mjs";
4
+ import { c as SidebarSeparator, g as SidebarMenuSub, h as SidebarMenuSkeleton, i as SidebarHeader, l as SidebarTrigger, m as SidebarMenuItem, n as SidebarContent, p as SidebarMenuButton, r as SidebarFooter, t as Sidebar, u as SidebarMenu, w as useSidebar, x as SidebarGroupContent, y as SidebarGroup } from "./sidebar-BeWEEu7P.mjs";
5
+ import { n as EASE } from "./motion-DvGRWdsm.mjs";
5
6
  import { ChevronRight, ExternalLinkIcon } from "lucide-react";
6
7
  import { createContext, memo, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
7
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -152,12 +153,7 @@ const COLLAPSIBLE_CHILD_VARIANTS = {
152
153
  y: 0,
153
154
  transition: {
154
155
  duration: .2,
155
- ease: [
156
- .32,
157
- .72,
158
- 0,
159
- 1
160
- ]
156
+ ease: EASE.drawer
161
157
  }
162
158
  }
163
159
  };
@@ -1,7 +1,8 @@
1
1
  import { t as cn } from "../utils-Bu32wN-x.mjs";
2
2
  import { t as Icon } from "../icon-wrapper-DKfJlJd0.mjs";
3
3
  import { a as DropdownMenuRadioGroup, c as DropdownMenuTrigger, i as DropdownMenuLabel, o as DropdownMenuRadioItem, r as DropdownMenuContent, s as DropdownMenuSeparator, t as DropdownMenu } from "../dropdown-menu-b8zY5Cs6.mjs";
4
- import { t as Tooltip } from "../tooltip-C_SL1imw.mjs";
4
+ import { t as Tooltip } from "../tooltip-DhbN1BDK.mjs";
5
+ import { n as EASE, t as DURATION } from "../motion-DvGRWdsm.mjs";
5
6
  import { ArrowDown, ArrowRight, ArrowUp, Brain, Check, ChevronDown, Copy, Download, MessagesSquare, Mic, MicOff, PanelLeft, Plus, RotateCw, Square, Trash2 } from "lucide-react";
6
7
  import { Fragment, createContext, useCallback, useContext, useMemo, useRef, useState } from "react";
7
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -536,7 +537,10 @@ function ScrollToBottomButton({ show, onClick }) {
536
537
  opacity: 0,
537
538
  y: 8
538
539
  },
539
- transition: { duration: .15 },
540
+ transition: {
541
+ duration: DURATION.fast,
542
+ ease: EASE.out
543
+ },
540
544
  onClick,
541
545
  "aria-label": "Scroll to bottom",
542
546
  className: "ring-border bg-card text-muted-foreground hover:text-foreground absolute -top-10 left-1/2 z-10 -translate-x-1/2 rounded-full p-1.5 ring-1 transition-colors",
@@ -736,7 +740,10 @@ function EmptyState({ name, isReady, onSuggestion, children }) {
736
740
  opacity: 1,
737
741
  y: 0
738
742
  },
739
- transition: { duration: .3 },
743
+ transition: {
744
+ duration: .3,
745
+ ease: EASE.out
746
+ },
740
747
  className: "mb-8 flex flex-col items-center text-center",
741
748
  children: [/* @__PURE__ */ jsx(BrainGlyph, { className: "mb-4 size-16" }), /* @__PURE__ */ jsx("h1", {
742
749
  className: "text-foreground font-title text-3xl leading-[34px] font-normal tracking-[-1.2px]",
@@ -754,7 +761,8 @@ function EmptyState({ name, isReady, onSuggestion, children }) {
754
761
  },
755
762
  transition: {
756
763
  duration: .3,
757
- delay: .05
764
+ delay: .05,
765
+ ease: EASE.out
758
766
  },
759
767
  children
760
768
  }),
@@ -771,8 +779,9 @@ function EmptyState({ name, isReady, onSuggestion, children }) {
771
779
  y: 0
772
780
  },
773
781
  transition: {
774
- duration: .25,
775
- delay: .1 + .05 * i
782
+ duration: DURATION.medium,
783
+ delay: .1 + .05 * i,
784
+ ease: EASE.out
776
785
  },
777
786
  disabled: !isReady,
778
787
  onClick: () => onSuggestion(suggestion),
@@ -1,2 +1,2 @@
1
- import { t as Autocomplete } from "../autocomplete-DZ_HSBak.mjs";
1
+ import { t as Autocomplete } from "../autocomplete-BxtzndxZ.mjs";
2
2
  export { Autocomplete };
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as ResponsivePopover } from "./responsive-popover-C_1nzIvm.mjs";
2
+ import { t as ResponsivePopover } from "./responsive-popover-8VcjBM2d.mjs";
3
3
  import { t as LoaderOverlay } from "./loader-overlay-DD94azZX.mjs";
4
4
  import { n as OptionList, t as useOptionPicker } from "./use-option-picker-s2bUYwXC.mjs";
5
5
  import { ChevronDown } from "lucide-react";
@@ -1,8 +1,8 @@
1
1
  import { t as cn } from "../utils-Bu32wN-x.mjs";
2
- import { t as Button } from "../button-A1qTjZ8U.mjs";
2
+ import { t as Button } from "../button-DoMqfQLu.mjs";
3
3
  import { t as Input } from "../input-j4tbmYYz.mjs";
4
- import { t as ResponsivePopover } from "../responsive-popover-C_1nzIvm.mjs";
5
- import { t as Tooltip } from "../tooltip-C_SL1imw.mjs";
4
+ import { t as ResponsivePopover } from "../responsive-popover-8VcjBM2d.mjs";
5
+ import { t as Tooltip } from "../tooltip-DhbN1BDK.mjs";
6
6
  import { n as OptionList, t as useOptionPicker } from "../use-option-picker-s2bUYwXC.mjs";
7
7
  import { AlertCircle, Loader2, X } from "lucide-react";
8
8
  import * as React from "react";
@@ -1,2 +1,2 @@
1
- import { n as avatarStackVariants, t as AvatarStack } from "../avatar-stack-BZK6zUJr.mjs";
1
+ import { n as avatarStackVariants, t as AvatarStack } from "../avatar-stack-BUcsjhA6.mjs";
2
2
  export { AvatarStack, avatarStackVariants };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { Avatar, AvatarFallback, AvatarImage } from "./avatar/index.mjs";
3
- import { t as Tooltip } from "./tooltip-C_SL1imw.mjs";
3
+ import { t as Tooltip } from "./tooltip-DhbN1BDK.mjs";
4
4
  import { cva } from "class-variance-authority";
5
5
  import "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,3 +1,3 @@
1
- import { n as buttonVariants, t as Button } from "../button-A1qTjZ8U.mjs";
2
- import { t as LinkButton } from "../button-H_8dI-Ib.mjs";
1
+ import { n as buttonVariants, t as Button } from "../button-DoMqfQLu.mjs";
2
+ import { t as LinkButton } from "../button-CDPui_Ov.mjs";
3
3
  export { Button, LinkButton, buttonVariants };
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { n as buttonVariants, r as getIconOnlyClass } from "./button-A1qTjZ8U.mjs";
2
+ import { n as buttonVariants, r as getIconOnlyClass } from "./button-DoMqfQLu.mjs";
3
3
  import "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/base/button/link-button.tsx
@@ -24,7 +24,7 @@ function getIconOnlyClass(size, isIconOnly) {
24
24
  }
25
25
  //#endregion
26
26
  //#region src/components/base/button/button.tsx
27
- const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-50", {
27
+ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-[color,background-color,border-color,opacity,transform] duration-[var(--duration-fast)] ease-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-50 active:scale-[0.98] disabled:active:scale-100", {
28
28
  variants: {
29
29
  type: {
30
30
  primary: "",
@@ -1,5 +1,5 @@
1
1
  import { t as useDeprecationWarning } from "./use-deprecation-warning-DXrGc0jX.mjs";
2
- import { a as DateRangePicker } from "./picker-raVuDxsh.mjs";
2
+ import { a as DateRangePicker } from "./picker-DbKukBkk.mjs";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/features/calendar-date-picker/calendar-date-picker.tsx
5
5
  /**
@@ -0,0 +1,13 @@
1
+ import { HoverCardContent as ShadcnHoverCardContent, HoverCard as ShadcnHoverCardRoot, HoverCardTrigger as ShadcnHoverCardTrigger } from '../../../_shadcn/ui/hover-card';
2
+ import * as React from 'react';
3
+ /**
4
+ * Datum HoverCard
5
+ *
6
+ * Thin wrapper over the shadcn hover card. Standardises `HoverCardContent`
7
+ * motion on the shared fast/ease-out tokens (shadcn already sets the
8
+ * trigger-anchored transform-origin). Root/Trigger pass through unchanged.
9
+ */
10
+ declare const HoverCard: typeof ShadcnHoverCardRoot;
11
+ declare const HoverCardTrigger: typeof ShadcnHoverCardTrigger;
12
+ declare function HoverCardContent({ className, ...props }: React.ComponentProps<typeof ShadcnHoverCardContent>): React.JSX.Element;
13
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -1 +1 @@
1
- export * from '../../../_shadcn/ui/hover-card';
1
+ export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';
@@ -1 +1 @@
1
- export * from '../../../_shadcn/ui/popover';
1
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './popover';
@@ -0,0 +1,15 @@
1
+ import { PopoverAnchor as ShadcnPopoverAnchor, PopoverContent as ShadcnPopoverContent, Popover as ShadcnPopoverRoot, PopoverTrigger as ShadcnPopoverTrigger } from '../../../_shadcn/ui/popover';
2
+ import * as React from 'react';
3
+ /**
4
+ * Datum Popover
5
+ *
6
+ * Thin wrapper over the shadcn popover. Adds trigger-anchored motion to
7
+ * `PopoverContent` (scale from the trigger, not the centre) with the shared
8
+ * fast/ease-out motion tokens. Root/Trigger/Anchor are passed through
9
+ * unchanged so this stays a drop-in replacement.
10
+ */
11
+ declare const Popover: typeof ShadcnPopoverRoot;
12
+ declare const PopoverTrigger: typeof ShadcnPopoverTrigger;
13
+ declare const PopoverAnchor: typeof ShadcnPopoverAnchor;
14
+ declare function PopoverContent({ className, ...props }: React.ComponentProps<typeof ShadcnPopoverContent>): React.JSX.Element;
15
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,15 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import type { LogColumn, LogColumnSize, LogColumnSpec } from '../types';
3
+ /**
4
+ * Expand column specs into renderable columns. Unknown built-in ids are
5
+ * skipped (with a one-time dev warning) so a typo or a stale URL-driven
6
+ * column list degrades to a narrower table instead of a crash.
7
+ */
8
+ export declare function resolveLogColumns(specs: readonly LogColumnSpec[]): LogColumn[];
9
+ export declare function columnSize(column: LogColumn): LogColumnSize;
10
+ export declare function columnWidth(column: LogColumn): number;
11
+ export declare function columnHeadClass(column: LogColumn): string;
12
+ export declare function columnCellClass(column: LogColumn): string;
13
+ export declare function columnWidthStyle(column: LogColumn): CSSProperties | undefined;
14
+ export declare function columnSkeleton(column: LogColumn, row: number): ReactNode;
15
+ export declare function columnHeader(column: LogColumn): ReactNode;
@@ -1,2 +1,2 @@
1
1
  import type { LogsRootProps } from '../types';
2
- export declare function LogsRoot({ entries, facets, timeRange, defaultTimeRange, filters, defaultFilters, search, defaultSearch, live, defaultLive, selectedId, defaultSelectedId, isLoading, error, columns, onTimeRangeChange, onFiltersChange, onSearchChange, onLiveChange, onSelectedIdChange, onRefresh, onExport, className, children, }: LogsRootProps): import("react").JSX.Element;
2
+ export declare function LogsRoot({ entries, facets, histogram, timeRange, defaultTimeRange, filters, defaultFilters, search, defaultSearch, live, defaultLive, selectedId, defaultSelectedId, isLoading, error, columns, onTimeRangeChange, onFiltersChange, onSearchChange, onLiveChange, onSelectedIdChange, onRefresh, onExport, className, children, }: LogsRootProps): import("react").JSX.Element;
@@ -2,6 +2,11 @@ import type { ParsedLogLine } from '../types';
2
2
  export declare function LogsSeverityBadge({ severity }: {
3
3
  severity?: string;
4
4
  }): import("react").JSX.Element;
5
+ /** Compact HTTP status chip, used inline next to the detail title. */
6
+ export declare function LogsHttpStatusChip({ status, className }: {
7
+ status: number;
8
+ className?: string;
9
+ }): import("react").JSX.Element;
5
10
  export declare function LogsStatusBadge({ parsed }: {
6
11
  parsed: ParsedLogLine;
7
12
  }): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare function LogsTimeline({ className }: {
2
+ className?: string;
3
+ }): import("react").JSX.Element;
@@ -1,2 +1,4 @@
1
1
  import type { LokiQueryRangeResponse } from '../types';
2
2
  export declare const queryRangeFixture: LokiQueryRangeResponse;
3
+ /** Staging Envoy OTEL access logs: empty Body, HTTP fields on stream labels. */
4
+ export declare const albQueryRangeFixture: LokiQueryRangeResponse;
@@ -1,4 +1,5 @@
1
+ export { resolveLogColumns } from './components/columns';
1
2
  export { useLogs } from './hooks/use-logs';
2
3
  export { Logs } from './logs';
3
- export type { BuildLogQLOptions, LogColumnId, LogEntry, LogFacet, LogFacetOption, LogFilters, LogsContextValue, LogsRootProps, LogTimeRange, LokiQueryRangeResponse, LokiStream, ParsedHttpLogLine, ParsedLogLine, ParsedTextLogLine, } from './types';
4
- export { buildLogQL, facetsFromEntries, filterEntries, flattenLokiStreams, httpStatusBadgeType, httpStatusTextClass, lastThirtyMinutes, logLineDisplay, nsToDate, parseLogLine, severityBadgeType, } from './utils';
4
+ export type { BuildLogQLOptions, LogColumn, LogColumnCellContext, LogColumnId, LogColumnSize, LogColumnSkeletonContext, LogColumnSpec, LogEntry, LogFacet, LogFacetOption, LogFilters, LogHistogramBucket, LogsContextValue, LogsRootProps, LogTimeRange, LokiQueryRangeResponse, LokiStream, ParsedHttpLogLine, ParsedLogLine, ParsedTextLogLine, } from './types';
5
+ export { buildLogQL, facetsFromEntries, filterEntries, flattenLokiStreams, formatHttpLogLine, histogramFromEntries, httpStatusBadgeType, httpStatusTextClass, lastThirtyMinutes, LOG_TIME_PRESETS, logLineDisplay, logRequestHost, logTimeRangeLabel, nsToDate, parseLogLine, resolveLogTimeRange, searchableLogText, severityBadgeType, splitPathQuery, } from './utils';
@@ -3,6 +3,7 @@ import { LogsExplorer } from './components/explorer';
3
3
  import { LogsFilterGroup, LogsFilters, LogsTimeRangeFilter } from './components/filters';
4
4
  import { LogsRoot } from './components/root';
5
5
  import { LogsTable } from './components/table';
6
+ import { LogsTimeline } from './components/timeline';
6
7
  import { LogsLiveToggle, LogsSearch, LogsToolbar } from './components/toolbar';
7
8
  export declare const Logs: {
8
9
  readonly Root: typeof LogsRoot;
@@ -13,6 +14,7 @@ export declare const Logs: {
13
14
  readonly Toolbar: typeof LogsToolbar;
14
15
  readonly Search: typeof LogsSearch;
15
16
  readonly LiveToggle: typeof LogsLiveToggle;
17
+ readonly Timeline: typeof LogsTimeline;
16
18
  readonly Table: typeof LogsTable;
17
19
  readonly Detail: typeof LogsDetail;
18
20
  };
@@ -31,9 +31,49 @@ export interface LogFacet {
31
31
  export interface LogTimeRange {
32
32
  from: string;
33
33
  to: string;
34
+ /**
35
+ * Key of the relative preset this range came from (e.g. `last-30m`).
36
+ * Absent for hand-picked absolute ranges. Pass through
37
+ * `resolveLogTimeRange` to slide a preset window forward to "now".
38
+ */
39
+ preset?: string;
34
40
  }
35
41
  export type LogFilters = Record<string, string[]>;
36
- export type LogColumnId = 'time' | 'severity' | 'status' | 'service' | 'resource' | 'path' | 'message';
42
+ /** One bar of the timeline histogram. `start` is inclusive, `end` exclusive. */
43
+ export interface LogHistogramBucket {
44
+ start: string;
45
+ end: string;
46
+ count: number;
47
+ }
48
+ export type LogColumnId = 'time' | 'severity' | 'status' | 'service' | 'resource' | 'host' | 'path' | 'message';
49
+ /** How a column behaves in a full-width table. */
50
+ export type LogColumnSize = 'hug' | 'fixed' | 'fill';
51
+ export interface LogColumnCellContext {
52
+ entry: LogEntry;
53
+ parsed: ParsedLogLine;
54
+ path: string | null;
55
+ message: string;
56
+ }
57
+ /**
58
+ * A logs table column. Pass a built-in `LogColumnId` or a custom column
59
+ * so consumers can add Host / Request without CSS overrides.
60
+ */
61
+ export interface LogColumnSkeletonContext {
62
+ row: number;
63
+ }
64
+ export interface LogColumn {
65
+ id: string;
66
+ header: ReactNode;
67
+ size?: LogColumnSize;
68
+ /** Pixel width when `size` is `fixed`. Defaults to 160. */
69
+ width?: number;
70
+ className?: string;
71
+ headerClassName?: string;
72
+ cell: (ctx: LogColumnCellContext) => ReactNode;
73
+ /** Placeholder that mirrors this cell's real content while logs load. */
74
+ skeleton?: (ctx: LogColumnSkeletonContext) => ReactNode;
75
+ }
76
+ export type LogColumnSpec = LogColumnId | LogColumn;
37
77
  export interface ParsedHttpLogLine {
38
78
  kind: 'http';
39
79
  method: string;
@@ -54,6 +94,13 @@ export type LogSeverity = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL' | (strin
54
94
  export interface LogsRootProps {
55
95
  entries: readonly LogEntry[];
56
96
  facets?: readonly LogFacet[];
97
+ /**
98
+ * Bucketed counts for `Logs.Timeline`. Supply server-side counts (e.g. a
99
+ * LogQL `count_over_time` range query) so the histogram reflects the whole
100
+ * window rather than the loaded page. Defaults to bucketing `entries`
101
+ * across `timeRange`.
102
+ */
103
+ histogram?: readonly LogHistogramBucket[];
57
104
  timeRange?: LogTimeRange;
58
105
  defaultTimeRange?: LogTimeRange;
59
106
  filters?: LogFilters;
@@ -66,7 +113,7 @@ export interface LogsRootProps {
66
113
  defaultSelectedId?: string | null;
67
114
  isLoading?: boolean;
68
115
  error?: ReactNode;
69
- columns?: readonly LogColumnId[];
116
+ columns?: readonly LogColumnSpec[];
70
117
  onTimeRangeChange?: (range: LogTimeRange) => void;
71
118
  onFiltersChange?: (filters: LogFilters) => void;
72
119
  onSearchChange?: (search: string) => void;
@@ -80,6 +127,7 @@ export interface LogsRootProps {
80
127
  export interface LogsContextValue {
81
128
  entries: readonly LogEntry[];
82
129
  facets: readonly LogFacet[];
130
+ histogram: readonly LogHistogramBucket[];
83
131
  timeRange: LogTimeRange;
84
132
  setTimeRange: (range: LogTimeRange) => void;
85
133
  filters: LogFilters;
@@ -98,7 +146,7 @@ export interface LogsContextValue {
98
146
  selectNext: () => void;
99
147
  isLoading: boolean;
100
148
  error: ReactNode;
101
- columns: readonly LogColumnId[];
149
+ columns: readonly LogColumn[];
102
150
  hasActiveFilters: boolean;
103
151
  onRefresh?: () => void;
104
152
  onExport?: (entries: readonly LogEntry[]) => void;
@@ -0,0 +1,3 @@
1
+ export declare const LOGS_DETAIL_MIN_WIDTH = 400;
2
+ export declare function clampLogsDetailWidth(width: number, maxWidth: number): number;
3
+ export declare function logsDetailMaxWidth(node: HTMLElement | null): number;
@@ -1,3 +1,10 @@
1
1
  import type { LogEntry, LogFacet, LogFilters } from '../types';
2
2
  export declare function facetsFromEntries(entries: readonly LogEntry[], names?: readonly string[]): LogFacet[];
3
3
  export declare function filterEntries(entries: readonly LogEntry[], filters: LogFilters, search?: string): LogEntry[];
4
+ /**
5
+ * Text a search term is matched against: the line, plus the fields the table
6
+ * actually shows for a label-only access log (method, path, status, host).
7
+ * Other labels (request ids, user agents, pod names) are deliberately not
8
+ * searched so a hit is always visible on screen.
9
+ */
10
+ export declare function searchableLogText(entry: LogEntry): string;
@@ -1,3 +1,7 @@
1
+ export declare function formatLogTimestampParts(date: Date): {
2
+ date: string;
3
+ time: string;
4
+ };
1
5
  export declare function formatLogTimestamp(date: Date): string;
2
6
  export declare function formatRelativeTimestamp(date: Date, now?: Date): string;
3
7
  export declare function formatUtcTimestamp(date: Date): string;
@@ -0,0 +1,16 @@
1
+ import type { LogEntry, LogHistogramBucket, LogTimeRange } from '../types';
2
+ export declare const DEFAULT_HISTOGRAM_BUCKETS = 60;
3
+ /**
4
+ * Bucket `entries` into `bucketCount` equal-width bars across `range`.
5
+ * Entries outside the range are ignored. Returns `[]` when the range is
6
+ * invalid or empty so the timeline can fall back to an axis-only state.
7
+ */
8
+ export declare function histogramFromEntries(entries: readonly LogEntry[], range: LogTimeRange, bucketCount?: number): LogHistogramBucket[];
9
+ /** Index of the bucket containing `date`, or `-1`. */
10
+ export declare function histogramBucketIndex(histogram: readonly LogHistogramBucket[], date: Date): number;
11
+ /** Total span covered by a histogram, in ms. `0` when empty. */
12
+ export declare function histogramSpanMs(histogram: readonly LogHistogramBucket[]): number;
13
+ /** Axis tick label whose precision follows the span being displayed. */
14
+ export declare function formatTimelineTick(date: Date, spanMs: number): string;
15
+ /** Tooltip text for a bucket: count plus its window. */
16
+ export declare function formatBucketSummary(bucket: LogHistogramBucket, spanMs: number): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Host shown for an HTTP access log. An explicit `host` label (set by the
3
+ * host app) wins; otherwise prefer the name the client asked for
4
+ * (`requested_server_name`, `x_forwarded_host`) over the upstream
5
+ * `authority`, then fall back to `resource_name`.
6
+ */
7
+ export declare function logRequestHost(labels: Record<string, string>): string | undefined;
@@ -1,8 +1,10 @@
1
1
  export { buildLogQL } from './build-logql';
2
2
  export { CANONICAL_FACET_NAMES, DEFAULT_LOG_COLUMNS, DEFAULT_LOGQL_MATCHER, FACET_LABELS, SEVERITY_ORDER, } from './constants';
3
- export { facetsFromEntries, filterEntries } from './facets';
3
+ export { facetsFromEntries, filterEntries, searchableLogText } from './facets';
4
4
  export { flattenLokiStreams, nsToDate } from './flatten-loki';
5
- export { formatLocalTimestamp, formatLogTimestamp, formatRelativeTimestamp, formatUtcTimestamp, } from './format-timestamp';
6
- export { logLineDisplay, parseLogLine } from './parse-log-line';
5
+ export { formatLocalTimestamp, formatLogTimestamp, formatLogTimestampParts, formatRelativeTimestamp, formatUtcTimestamp, } from './format-timestamp';
6
+ export { DEFAULT_HISTOGRAM_BUCKETS, formatBucketSummary, formatTimelineTick, histogramBucketIndex, histogramFromEntries, histogramSpanMs, } from './histogram';
7
+ export { logRequestHost } from './host';
8
+ export { formatHttpLogLine, logLineDisplay, parseLogLine, splitPathQuery } from './parse-log-line';
7
9
  export { httpStatusBadgeType, httpStatusTextClass, severityBadgeType } from './severity';
8
- export { filtersAreActive, lastThirtyMinutes } from './time-range';
10
+ export { filtersAreActive, lastThirtyMinutes, LOG_TIME_PRESETS, logTimeRangeLabel, resolveLogTimeRange, } from './time-range';
@@ -1,6 +1,20 @@
1
- import type { ParsedLogLine } from '../types';
2
- export declare function parseLogLine(line: string): ParsedLogLine;
3
- export declare function logLineDisplay(line: string): {
1
+ import type { ParsedHttpLogLine, ParsedLogLine } from '../types';
2
+ /**
3
+ * Parse an access-log line, falling back to Envoy/OTEL stream labels when the
4
+ * body is empty (queryapi stores method/path/status as attributes).
5
+ */
6
+ export declare function parseLogLine(line: string, labels?: Record<string, string>): ParsedLogLine;
7
+ export declare function formatHttpLogLine(parsed: ParsedHttpLogLine): string;
8
+ export interface SplitPath {
9
+ pathname: string;
10
+ /** Raw query string without the leading `?`, or `''`. */
11
+ search: string;
12
+ /** Decoded key/value pairs in order of appearance; repeated keys are kept. */
13
+ params: Array<[key: string, value: string]>;
14
+ }
15
+ /** Separate `/a/b?x=1&y=2` into its pathname and decoded search params. */
16
+ export declare function splitPathQuery(path: string): SplitPath;
17
+ export declare function logLineDisplay(line: string, labels?: Record<string, string>): {
4
18
  parsed: ParsedLogLine;
5
19
  path: string | null;
6
20
  message: string;
@@ -1,3 +1,22 @@
1
+ import type { PickerPreset } from '../../picker/types';
1
2
  import type { LogTimeRange } from '../types';
3
+ /**
4
+ * Relative "Last N" windows offered by `Logs.Filters`. Keys are persisted on
5
+ * `LogTimeRange.preset` so hosts can slide the window forward with
6
+ * `resolveLogTimeRange` on refresh or while live tailing.
7
+ *
8
+ * Shortcuts follow the `picker` datetime presets (`1` / `2` / `H` / `W`) that
9
+ * the logs picker is built on. Keys that mean something else in the pickers
10
+ * (`3` is "Last 30 minutes" in `time-range-picker`, `D` is "Today") are not
11
+ * reused, so muscle memory carries over between the two.
12
+ */
13
+ export declare const LOG_TIME_PRESETS: readonly PickerPreset[];
2
14
  export declare function lastThirtyMinutes(now?: Date): LogTimeRange;
15
+ /**
16
+ * Re-anchor a preset range to `now`. Absolute ranges (no `preset`, or an
17
+ * unknown key) are returned unchanged.
18
+ */
19
+ export declare function resolveLogTimeRange(range: LogTimeRange, now?: Date): LogTimeRange;
20
+ /** Human label for the time-range trigger: preset name, or a compact absolute range. */
21
+ export declare function logTimeRangeLabel(range: LogTimeRange): string;
3
22
  export declare function filtersAreActive(filters: Record<string, string[]>): boolean;
@@ -1,2 +1,2 @@
1
- import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "../data-table-ClfRpyHq.mjs";
1
+ import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "../data-table-BaWOHdZX.mjs";
2
2
  export { DEFAULT_DEBOUNCE_MS, DEFAULT_LOADING_ROWS, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZES, DataTable, DataTableColumnHeader, DataTableRowActions, createDataTableStore, createSelectionColumn, dataTableFeatures, resolvePath, rowMatchesSearch, useDataTableFilters, useDataTableInlineContents, useDataTableLoading, useDataTablePagination, useDataTableRows, useDataTableSearch, useDataTableSelection, useDataTableSorting, useNuqsAdapter };
@@ -1,17 +1,17 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { t as Badge } from "./badge-BTNW_FEU.mjs";
3
- import { t as Button } from "./button-A1qTjZ8U.mjs";
3
+ import { t as Button } from "./button-DoMqfQLu.mjs";
4
4
  import { t as Checkbox } from "./checkbox-C6P12fio.mjs";
5
5
  import { t as Input } from "./input-j4tbmYYz.mjs";
6
- import { t as ResponsiveDropdown } from "./responsive-dropdown-n0Txkax5.mjs";
7
- import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-DCU44UO6.mjs";
6
+ import { t as ResponsiveDropdown } from "./responsive-dropdown-C_KKgLbH.mjs";
7
+ import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-CQsG8Kju.mjs";
8
8
  import { Skeleton } from "./skeleton/index.mjs";
9
9
  import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table/index.mjs";
10
- import { t as Autocomplete } from "./autocomplete-DZ_HSBak.mjs";
11
- import { t as CalendarDatePicker } from "./calendar-date-picker-ynSGADfR.mjs";
10
+ import { t as Autocomplete } from "./autocomplete-BxtzndxZ.mjs";
11
+ import { t as CalendarDatePicker } from "./calendar-date-picker-bpTUcGu_.mjs";
12
12
  import { t as ActionRow } from "./action-row-DTvs91_3.mjs";
13
13
  import { n as useDebouncedSearchInput } from "./use-debounced-search-input-yu_F0QBt.mjs";
14
- import { t as MultiSelect } from "./multi-select-PtdMChPF.mjs";
14
+ import { t as MultiSelect } from "./multi-select-CH8KERkt.mjs";
15
15
  import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight, MoreHorizontal, X } from "lucide-react";
16
16
  import { createContext, memo, use, useCallback, useContext, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from "react";
17
17
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { M as getBrowserTimezone, N as getTimezoneOffset, j as formatTimezoneLabel } from "../date-time-range-picker-Dog33Ry0.mjs";
2
- import { t as CalendarDatePicker } from "../calendar-date-picker-ynSGADfR.mjs";
3
- import { _ as getShortTimezoneDisplay, a as TimeRangePicker, b as utcToLocalInputString, c as getPresetByKey, d as TimezoneSelector, f as QuickRangesPanel, g as getDefaultTimezoneOptions, h as formatUtcForDisplay, i as formatTimeRangeDisplay, l as getPresetByShortcut, m as createTimezoneOption, n as formatDateForInput, o as DEFAULT_PRESETS, p as CustomRangePanel, r as formatSingleTimeDisplay, s as getDefaultPreset, t as toApiTimeRange, u as getPresetRange, v as localInputStringToUtc, x as zonedDateToUtcString, y as utcStringToZonedDate } from "../to-api-format-WC7b9Mcv.mjs";
1
+ import { M as getBrowserTimezone, N as getTimezoneOffset, j as formatTimezoneLabel } from "../date-time-range-picker-DlFTh3DF.mjs";
2
+ import { t as CalendarDatePicker } from "../calendar-date-picker-bpTUcGu_.mjs";
3
+ import { _ as getShortTimezoneDisplay, a as TimeRangePicker, b as utcToLocalInputString, c as getPresetByKey, d as TimezoneSelector, f as QuickRangesPanel, g as getDefaultTimezoneOptions, h as formatUtcForDisplay, i as formatTimeRangeDisplay, l as getPresetByShortcut, m as createTimezoneOption, n as formatDateForInput, o as DEFAULT_PRESETS, p as CustomRangePanel, r as formatSingleTimeDisplay, s as getDefaultPreset, t as toApiTimeRange, u as getPresetRange, v as localInputStringToUtc, x as zonedDateToUtcString, y as utcStringToZonedDate } from "../to-api-format-Bm1VcKkS.mjs";
4
4
  export { CustomRangePanel as AbsoluteRangePanel, CustomRangePanel, CalendarDatePicker, DEFAULT_PRESETS, QuickRangesPanel, TimeRangePicker, TimezoneSelector, createTimezoneOption, formatDateForInput, formatSingleTimeDisplay, formatTimeRangeDisplay, formatTimezoneLabel, formatUtcForDisplay, getBrowserTimezone, getDefaultPreset, getDefaultTimezoneOptions, getPresetByKey, getPresetByShortcut, getPresetRange, getShortTimezoneDisplay, getTimezoneOffset, localInputStringToUtc, toApiTimeRange, utcStringToZonedDate, utcToLocalInputString, zonedDateToUtcString };
@@ -1,2 +1,2 @@
1
- import { a as formatRelativeDate, c as getTimestamp, i as formatCombinedDate, l as getTimezoneAbbreviation, n as DEFAULT_DATE_FORMAT, o as formatTimezoneDate, r as formatAbsoluteDate, s as formatUTCDate, t as DateTime, u as parseDate } from "../date-time-CA-09lnw.mjs";
1
+ import { a as formatRelativeDate, d as parseDate, i as formatCombinedDate, l as getTimestamp, n as DEFAULT_DATE_FORMAT, o as formatTimezoneDate, r as formatAbsoluteDate, s as formatUTCDate, t as DateTime, u as getTimezoneAbbreviation } from "../date-time-lZdefM4H.mjs";
2
2
  export { DEFAULT_DATE_FORMAT, DateTime, formatAbsoluteDate, formatCombinedDate, formatRelativeDate, formatTimezoneDate, formatUTCDate, getTimestamp, getTimezoneAbbreviation, parseDate };
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as Tooltip } from "./tooltip-C_SL1imw.mjs";
2
+ import { t as Tooltip } from "./tooltip-DhbN1BDK.mjs";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { formatInTimeZone } from "date-fns-tz";
5
5
  import { format, formatDistanceToNowStrict } from "date-fns";
@@ -131,4 +131,4 @@ function getTooltipContent(date, variant, tooltip, options, timeZone, timestamp)
131
131
  return null;
132
132
  }
133
133
  //#endregion
134
- export { formatRelativeDate as a, getTimestamp as c, formatCombinedDate as i, getTimezoneAbbreviation as l, DEFAULT_DATE_FORMAT as n, formatTimezoneDate as o, formatAbsoluteDate as r, formatUTCDate as s, DateTime as t, parseDate as u };
134
+ export { formatRelativeDate as a, getBrowserTimezone as c, parseDate as d, formatCombinedDate as i, getTimestamp as l, DEFAULT_DATE_FORMAT as n, formatTimezoneDate as o, formatAbsoluteDate as r, formatUTCDate as s, DateTime as t, getTimezoneAbbreviation as u };
@@ -1,2 +1,2 @@
1
- import { t as DateTimePicker } from "../date-time-picker-BzcHrf-A.mjs";
1
+ import { t as DateTimePicker } from "../date-time-picker-Bd7qSZVr.mjs";
2
2
  export { DateTimePicker };
@@ -1,5 +1,5 @@
1
1
  import { t as useDeprecationWarning } from "./use-deprecation-warning-DXrGc0jX.mjs";
2
- import { r as DateTimePicker$1 } from "./picker-raVuDxsh.mjs";
2
+ import { r as DateTimePicker$1 } from "./picker-DbKukBkk.mjs";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/features/date-time-picker/date-time-picker.tsx
5
5
  /**