@l3mpire/ui 2.7.2 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -4857,7 +4857,7 @@ var FilterChip = React35.forwardRef(
4857
4857
  ref,
4858
4858
  className: cn(
4859
4859
  "flex items-center overflow-clip",
4860
- "bg-filter-chip-bg border border-filter-chip-border rounded-md",
4860
+ "bg-filter-chip-bg border border-filter-chip-border rounded-md shadow-sm",
4861
4861
  className
4862
4862
  ),
4863
4863
  ...props,
@@ -5046,6 +5046,7 @@ var SortButton = ({
5046
5046
  activeField,
5047
5047
  direction,
5048
5048
  onChange,
5049
+ iconOnly = false,
5049
5050
  ...props
5050
5051
  }) => {
5051
5052
  const [open, setOpen] = React37.useState(false);
@@ -5057,12 +5058,13 @@ var SortButton = ({
5057
5058
  {
5058
5059
  type: "button",
5059
5060
  className: cn(
5060
- "flex items-center gap-xs px-md py-sm",
5061
- "min-h-[32px] max-h-[32px] min-w-[80px]",
5061
+ "flex items-center gap-xs",
5062
+ "min-h-[32px] max-h-[32px]",
5062
5063
  "bg-gradient-to-t from-[var(--color-btn-outlined-neutral-bg-default)] to-[var(--color-btn-outlined-neutral-bg-gradient-to-default)]",
5063
5064
  "border border-[var(--color-btn-outlined-neutral-border-default)] rounded-md shadow-sm",
5064
5065
  "cursor-pointer transition-colors",
5065
5066
  "hover:from-[var(--color-btn-outlined-neutral-bg-hover)] hover:to-[var(--color-btn-outlined-neutral-bg-gradient-to-hover)]",
5067
+ iconOnly ? "size-8 justify-center p-0" : "px-md py-sm min-w-[80px]",
5066
5068
  className
5067
5069
  ),
5068
5070
  children: [
@@ -5074,7 +5076,7 @@ var SortButton = ({
5074
5076
  className: "shrink-0 text-[var(--color-foreground)]"
5075
5077
  }
5076
5078
  ),
5077
- /* @__PURE__ */ jsxs32("span", { className: "text-sm font-medium leading-sm whitespace-nowrap", children: [
5079
+ !iconOnly && /* @__PURE__ */ jsxs32("span", { className: "text-sm font-medium leading-sm whitespace-nowrap", children: [
5078
5080
  /* @__PURE__ */ jsxs32("span", { className: "text-[var(--color-muted-foreground)]", children: [
5079
5081
  "Sort by",
5080
5082
  " "
@@ -5227,18 +5229,19 @@ SortButton.displayName = "SortButton";
5227
5229
  import * as React38 from "react";
5228
5230
  import { Icon as Icon24, faSlidersOutline } from "@l3mpire/icons";
5229
5231
  import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
5230
- var FilterBarButton = React38.forwardRef(({ className, count, children, ...props }, ref) => /* @__PURE__ */ jsxs33(
5232
+ var FilterBarButton = React38.forwardRef(({ className, count, iconOnly = false, children, ...props }, ref) => /* @__PURE__ */ jsxs33(
5231
5233
  "button",
5232
5234
  {
5233
5235
  ref,
5234
5236
  type: "button",
5235
5237
  className: cn(
5236
- "flex items-center gap-sm px-base py-sm",
5237
- "min-h-[32px] max-h-[32px] min-w-[80px]",
5238
+ "flex items-center gap-sm",
5239
+ "min-h-[32px] max-h-[32px]",
5238
5240
  "bg-gradient-to-t from-[var(--color-btn-outlined-neutral-bg-default)] to-[var(--color-btn-outlined-neutral-bg-gradient-to-default)]",
5239
5241
  "border border-[var(--color-btn-outlined-neutral-border-default)] rounded-md shadow-sm",
5240
5242
  "cursor-pointer transition-colors",
5241
5243
  "hover:from-[var(--color-btn-outlined-neutral-bg-hover)] hover:to-[var(--color-btn-outlined-neutral-bg-gradient-to-hover)]",
5244
+ iconOnly ? count ? "px-sm justify-center" : "size-8 justify-center p-0" : "px-base py-sm min-w-[80px]",
5242
5245
  className
5243
5246
  ),
5244
5247
  ...props,
@@ -5251,7 +5254,7 @@ var FilterBarButton = React38.forwardRef(({ className, count, children, ...props
5251
5254
  className: "shrink-0 text-[var(--color-foreground)]"
5252
5255
  }
5253
5256
  ),
5254
- /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium leading-sm whitespace-nowrap text-[var(--color-foreground)]", children: children ?? "Filters" }),
5257
+ !iconOnly && /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium leading-sm whitespace-nowrap text-[var(--color-foreground)]", children: children ?? "Filters" }),
5255
5258
  count != null && count > 0 && /* @__PURE__ */ jsx38("span", { className: "flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg", children: /* @__PURE__ */ jsx38("span", { className: "text-[10px] font-medium leading-2xs text-filter-chip-badge-text", children: count }) })
5256
5259
  ]
5257
5260
  }
@@ -6192,7 +6195,7 @@ var InteractiveFilterChip = ({
6192
6195
  {
6193
6196
  className: cn(
6194
6197
  "inline-flex items-center overflow-clip",
6195
- "bg-filter-chip-bg border border-filter-chip-border rounded-md",
6198
+ "bg-filter-chip-bg border border-filter-chip-border rounded-md shadow-sm",
6196
6199
  className
6197
6200
  ),
6198
6201
  children: [
@@ -6314,7 +6317,7 @@ var InteractiveFilterChip = ({
6314
6317
  InteractiveFilterChip.displayName = "InteractiveFilterChip";
6315
6318
 
6316
6319
  // src/components/ui/filter/filter-system.tsx
6317
- import * as React46 from "react";
6320
+ import * as React48 from "react";
6318
6321
 
6319
6322
  // src/components/ui/filter/advanced-chip.tsx
6320
6323
  import * as React43 from "react";
@@ -6643,20 +6646,182 @@ var AdvancedPopover = ({
6643
6646
  };
6644
6647
  AdvancedPopover.displayName = "AdvancedPopover";
6645
6648
 
6646
- // src/components/ui/filter/filter-system.tsx
6649
+ // src/components/ui/filter/summary-chip.tsx
6650
+ import * as React46 from "react";
6651
+ import * as PopoverPrimitive11 from "@radix-ui/react-popover";
6652
+ import { Icon as Icon31, faFilterOutline as faFilterOutline2, faPlusOutline as faPlusOutline2 } from "@l3mpire/icons";
6647
6653
  import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
6654
+ var SummaryChip = ({
6655
+ count,
6656
+ filters,
6657
+ properties,
6658
+ onFiltersChange,
6659
+ onClearAll,
6660
+ className
6661
+ }) => {
6662
+ const [open, setOpen] = React46.useState(false);
6663
+ const [addSelectorOpen, setAddSelectorOpen] = React46.useState(false);
6664
+ const getPropertyDef = (propertyId) => properties.find((p) => p.id === propertyId);
6665
+ const handleUpdateFilter = (updated) => {
6666
+ onFiltersChange(filters.map((f) => f.id === updated.id ? updated : f));
6667
+ };
6668
+ const handleDeleteFilter = (id) => {
6669
+ const next = filters.filter((f) => f.id !== id);
6670
+ onFiltersChange(next);
6671
+ if (next.length === 0) setOpen(false);
6672
+ };
6673
+ const handlePropertyChange = (filterId, newProp) => {
6674
+ const newCondition = createFilterWithDefaults(newProp.id, newProp.type);
6675
+ onFiltersChange(
6676
+ filters.map((f) => f.id === filterId ? { ...newCondition, id: filterId } : f)
6677
+ );
6678
+ };
6679
+ const handleAddFilter = (property) => {
6680
+ const newFilter = createFilterWithDefaults(property.id, property.type);
6681
+ onFiltersChange([...filters, newFilter]);
6682
+ setAddSelectorOpen(false);
6683
+ };
6684
+ return /* @__PURE__ */ jsxs44(PopoverPrimitive11.Root, { open, onOpenChange: setOpen, children: [
6685
+ /* @__PURE__ */ jsx49(PopoverPrimitive11.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs44(
6686
+ "button",
6687
+ {
6688
+ type: "button",
6689
+ className: cn(
6690
+ "inline-flex items-center gap-sm px-base py-sm",
6691
+ "min-h-[32px] max-h-[32px]",
6692
+ count > 0 ? "bg-[var(--color-primary)]/5 border border-[var(--color-primary)]/30 text-[var(--color-primary)]" : "bg-filter-chip-bg border border-filter-chip-border text-[var(--color-foreground)]",
6693
+ "rounded-md text-sm font-medium leading-sm",
6694
+ "cursor-pointer transition-colors hover:opacity-80",
6695
+ className
6696
+ ),
6697
+ children: [
6698
+ /* @__PURE__ */ jsx49(
6699
+ Icon31,
6700
+ {
6701
+ icon: faFilterOutline2,
6702
+ size: "sm",
6703
+ className: count > 0 ? "text-[var(--color-primary)]" : "text-[var(--color-muted-foreground)]"
6704
+ }
6705
+ ),
6706
+ /* @__PURE__ */ jsxs44("span", { className: "whitespace-nowrap", children: [
6707
+ "Filters",
6708
+ count > 0 && ` (${count})`
6709
+ ] })
6710
+ ]
6711
+ }
6712
+ ) }),
6713
+ /* @__PURE__ */ jsx49(PopoverPrimitive11.Portal, { children: /* @__PURE__ */ jsxs44(
6714
+ PopoverPrimitive11.Content,
6715
+ {
6716
+ sideOffset: 4,
6717
+ align: "start",
6718
+ className: cn(
6719
+ "z-50 flex flex-col overflow-clip",
6720
+ "bg-[var(--color-dropdown-bg)] border border-[var(--color-dropdown-border)] rounded-md shadow-lg",
6721
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
6722
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
6723
+ "data-[side=bottom]:slide-in-from-top-2",
6724
+ "min-w-[420px] max-w-[90vw]"
6725
+ ),
6726
+ children: [
6727
+ /* @__PURE__ */ jsxs44("div", { className: "flex flex-col px-base pt-base", children: [
6728
+ filters.map((filter, i) => {
6729
+ const propDef = getPropertyDef(filter.propertyId);
6730
+ if (!propDef) return null;
6731
+ return /* @__PURE__ */ jsx49(
6732
+ AdvancedRow,
6733
+ {
6734
+ connector: i === 0 ? "Where" : "And",
6735
+ propertyDef: propDef,
6736
+ condition: filter,
6737
+ properties,
6738
+ onUpdate: handleUpdateFilter,
6739
+ onPropertyChange: (p) => handlePropertyChange(filter.id, p),
6740
+ onDelete: () => handleDeleteFilter(filter.id)
6741
+ },
6742
+ filter.id
6743
+ );
6744
+ }),
6745
+ filters.length === 0 && /* @__PURE__ */ jsx49("p", { className: "py-base text-sm text-[var(--color-muted-foreground)]", children: "No active filters." })
6746
+ ] }),
6747
+ /* @__PURE__ */ jsxs44("div", { className: "flex items-center justify-between px-base py-base border-t border-[var(--color-border)]", children: [
6748
+ /* @__PURE__ */ jsx49(
6749
+ PropertySelector,
6750
+ {
6751
+ properties,
6752
+ onSelect: handleAddFilter,
6753
+ open: addSelectorOpen,
6754
+ onOpenChange: setAddSelectorOpen,
6755
+ children: /* @__PURE__ */ jsxs44(
6756
+ "button",
6757
+ {
6758
+ type: "button",
6759
+ className: "flex items-center gap-xs text-sm font-regular leading-sm text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] cursor-pointer transition-colors",
6760
+ children: [
6761
+ /* @__PURE__ */ jsx49(Icon31, { icon: faPlusOutline2, size: "xs" }),
6762
+ "Add filter"
6763
+ ]
6764
+ }
6765
+ )
6766
+ }
6767
+ ),
6768
+ filters.length > 0 && /* @__PURE__ */ jsx49(
6769
+ "button",
6770
+ {
6771
+ type: "button",
6772
+ onClick: () => {
6773
+ onClearAll();
6774
+ setOpen(false);
6775
+ },
6776
+ className: "text-sm font-regular leading-sm text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] cursor-pointer transition-colors",
6777
+ children: "Clear all filters"
6778
+ }
6779
+ )
6780
+ ] })
6781
+ ]
6782
+ }
6783
+ ) })
6784
+ ] });
6785
+ };
6786
+ SummaryChip.displayName = "SummaryChip";
6787
+
6788
+ // src/components/ui/filter/use-filter-bar-mode.ts
6789
+ import * as React47 from "react";
6790
+ function useFilterBarMode(ref, override) {
6791
+ const [mode, setMode] = React47.useState("default");
6792
+ React47.useEffect(() => {
6793
+ if (override) return;
6794
+ const el = ref.current;
6795
+ if (!el) return;
6796
+ const observer = new ResizeObserver((entries) => {
6797
+ const width = entries[0]?.contentRect.width ?? 0;
6798
+ setMode(width > 600 ? "default" : "minimal");
6799
+ });
6800
+ observer.observe(el);
6801
+ return () => observer.disconnect();
6802
+ }, [ref, override]);
6803
+ return override ?? mode;
6804
+ }
6805
+
6806
+ // src/components/ui/filter/filter-system.tsx
6807
+ import { Fragment as Fragment5, jsx as jsx50, jsxs as jsxs45 } from "react/jsx-runtime";
6648
6808
  var FilterSystem = ({
6649
6809
  properties,
6650
6810
  filterState,
6651
6811
  onFilterStateChange,
6652
6812
  sortFields,
6813
+ mode: modeOverride,
6653
6814
  children,
6654
6815
  actions,
6655
6816
  className
6656
6817
  }) => {
6657
- const [propertySelectorOpen, setPropertySelectorOpen] = React46.useState(false);
6658
- const [advancedOpen, setAdvancedOpen] = React46.useState(false);
6659
- const [pendingFilterId, setPendingFilterId] = React46.useState(null);
6818
+ const containerRef = React48.useRef(null);
6819
+ const mode = useFilterBarMode(containerRef, modeOverride);
6820
+ const [propertySelectorOpen, setPropertySelectorOpen] = React48.useState(false);
6821
+ const [advancedOpen, setAdvancedOpen] = React48.useState(false);
6822
+ const [pendingFilterId, setPendingFilterId] = React48.useState(null);
6823
+ const allFilters = [...filterState.basicFilters, ...filterState.advancedFilters];
6824
+ const totalCount = allFilters.length;
6660
6825
  const handleAddFilter = (property) => {
6661
6826
  const newFilter = createFilterWithDefaults(property.id, property.type);
6662
6827
  if (newFilter.operator && isNoValueOperator(newFilter.operator)) {
@@ -6711,106 +6876,141 @@ var FilterSystem = ({
6711
6876
  });
6712
6877
  };
6713
6878
  const handleAdvancedFiltersChange = (filters) => {
6714
- onFilterStateChange({
6715
- ...filterState,
6716
- advancedFilters: filters
6717
- });
6879
+ onFilterStateChange({ ...filterState, advancedFilters: filters });
6718
6880
  };
6719
6881
  const handleClearAdvanced = () => {
6882
+ onFilterStateChange({ ...filterState, advancedFilters: [] });
6883
+ };
6884
+ const handleClearAll = () => {
6720
6885
  onFilterStateChange({
6721
6886
  ...filterState,
6887
+ basicFilters: [],
6722
6888
  advancedFilters: []
6723
6889
  });
6724
6890
  };
6725
6891
  const handleSortChange = (field, direction) => {
6726
- onFilterStateChange({
6727
- ...filterState,
6728
- sort: { field, direction }
6729
- });
6892
+ onFilterStateChange({ ...filterState, sort: { field, direction } });
6730
6893
  };
6731
6894
  const getPropertyDef = (propertyId) => properties.find((p) => p.id === propertyId);
6732
6895
  const hasAdvanced = filterState.advancedFilters.length > 0;
6733
- return /* @__PURE__ */ jsxs44(FilterBar, { className, children: [
6734
- /* @__PURE__ */ jsxs44(FilterBarLeft, { children: [
6896
+ const isMinimal = mode === "minimal";
6897
+ return /* @__PURE__ */ jsxs45(FilterBar, { ref: containerRef, className, children: [
6898
+ /* @__PURE__ */ jsxs45(FilterBarLeft, { children: [
6735
6899
  children,
6736
- sortFields && filterState.sort && /* @__PURE__ */ jsx49(
6900
+ sortFields && filterState.sort && /* @__PURE__ */ jsx50(
6737
6901
  SortButton,
6738
6902
  {
6739
6903
  fields: sortFields,
6740
6904
  activeField: filterState.sort.field,
6741
6905
  direction: filterState.sort.direction,
6742
- onChange: handleSortChange
6743
- }
6744
- ),
6745
- hasAdvanced && /* @__PURE__ */ jsx49(
6746
- AdvancedPopover,
6747
- {
6748
- filters: filterState.advancedFilters,
6749
- properties,
6750
- onFiltersChange: handleAdvancedFiltersChange,
6751
- open: advancedOpen,
6752
- onOpenChange: setAdvancedOpen,
6753
- children: /* @__PURE__ */ jsx49(
6754
- AdvancedChip,
6755
- {
6756
- count: filterState.advancedFilters.length,
6757
- onClick: () => setAdvancedOpen(true),
6758
- onClear: handleClearAdvanced
6759
- }
6760
- )
6906
+ onChange: handleSortChange,
6907
+ iconOnly: isMinimal
6761
6908
  }
6762
6909
  ),
6763
- filterState.basicFilters.map((filter) => {
6764
- const propDef = getPropertyDef(filter.propertyId);
6765
- if (!propDef) return null;
6766
- return /* @__PURE__ */ jsx49(
6767
- InteractiveFilterChip,
6910
+ isMinimal ? totalCount > 0 ? (
6911
+ /* Has filters → SummaryChip (interactive popover) */
6912
+ /* @__PURE__ */ jsx50(
6913
+ SummaryChip,
6768
6914
  {
6769
- propertyDef: propDef,
6770
- condition: filter,
6915
+ count: totalCount,
6916
+ filters: allFilters,
6771
6917
  properties,
6772
- mode: pendingFilterId === filter.id ? "add" : "edit",
6773
- autoOpen: pendingFilterId === filter.id,
6774
- onUpdate: handleUpdateFilter,
6775
- onPropertyChange: (newProp) => handlePropertyChange(filter.id, newProp),
6776
- onDelete: () => handleDeleteFilter(filter.id),
6777
- onConvertToAdvanced: () => handleConvertToAdvanced(filter.id)
6778
- },
6779
- filter.id
6780
- );
6781
- }),
6782
- /* @__PURE__ */ jsx49(
6783
- PropertySelector,
6784
- {
6785
- properties,
6786
- onSelect: handleAddFilter,
6787
- open: propertySelectorOpen,
6788
- onOpenChange: setPropertySelectorOpen,
6789
- children: /* @__PURE__ */ jsx49(
6790
- FilterBarButton,
6918
+ onFiltersChange: (filters) => {
6919
+ onFilterStateChange({
6920
+ ...filterState,
6921
+ basicFilters: filters,
6922
+ advancedFilters: []
6923
+ });
6924
+ },
6925
+ onClearAll: handleClearAll
6926
+ }
6927
+ )
6928
+ ) : (
6929
+ /* No filters → same FilterBarButton as default, icon-only */
6930
+ /* @__PURE__ */ jsx50(
6931
+ PropertySelector,
6932
+ {
6933
+ properties,
6934
+ onSelect: handleAddFilter,
6935
+ open: propertySelectorOpen,
6936
+ onOpenChange: setPropertySelectorOpen,
6937
+ children: /* @__PURE__ */ jsx50(FilterBarButton, { iconOnly: true })
6938
+ }
6939
+ )
6940
+ ) : (
6941
+ /* ── DEFAULT MODE ────────────────────────────────────── */
6942
+ /* @__PURE__ */ jsxs45(Fragment5, { children: [
6943
+ hasAdvanced && /* @__PURE__ */ jsx50(
6944
+ AdvancedPopover,
6791
6945
  {
6792
- count: filterState.basicFilters.length + filterState.advancedFilters.length || void 0
6946
+ filters: filterState.advancedFilters,
6947
+ properties,
6948
+ onFiltersChange: handleAdvancedFiltersChange,
6949
+ open: advancedOpen,
6950
+ onOpenChange: setAdvancedOpen,
6951
+ children: /* @__PURE__ */ jsx50(
6952
+ AdvancedChip,
6953
+ {
6954
+ count: filterState.advancedFilters.length,
6955
+ onClick: () => setAdvancedOpen(true),
6956
+ onClear: handleClearAdvanced
6957
+ }
6958
+ )
6959
+ }
6960
+ ),
6961
+ filterState.basicFilters.map((filter) => {
6962
+ const propDef = getPropertyDef(filter.propertyId);
6963
+ if (!propDef) return null;
6964
+ return /* @__PURE__ */ jsx50(
6965
+ InteractiveFilterChip,
6966
+ {
6967
+ propertyDef: propDef,
6968
+ condition: filter,
6969
+ properties,
6970
+ mode: pendingFilterId === filter.id ? "add" : "edit",
6971
+ autoOpen: pendingFilterId === filter.id,
6972
+ onUpdate: handleUpdateFilter,
6973
+ onPropertyChange: (newProp) => handlePropertyChange(filter.id, newProp),
6974
+ onDelete: () => handleDeleteFilter(filter.id),
6975
+ onConvertToAdvanced: () => handleConvertToAdvanced(filter.id)
6976
+ },
6977
+ filter.id
6978
+ );
6979
+ }),
6980
+ /* @__PURE__ */ jsx50(
6981
+ PropertySelector,
6982
+ {
6983
+ properties,
6984
+ onSelect: handleAddFilter,
6985
+ open: propertySelectorOpen,
6986
+ onOpenChange: setPropertySelectorOpen,
6987
+ children: /* @__PURE__ */ jsx50(
6988
+ FilterBarButton,
6989
+ {
6990
+ count: totalCount || void 0
6991
+ }
6992
+ )
6793
6993
  }
6794
6994
  )
6795
- }
6995
+ ] })
6796
6996
  )
6797
6997
  ] }),
6798
- actions && /* @__PURE__ */ jsx49(FilterBarRight, { children: actions })
6998
+ actions && /* @__PURE__ */ jsx50(FilterBarRight, { children: actions })
6799
6999
  ] });
6800
7000
  };
6801
7001
  FilterSystem.displayName = "FilterSystem";
6802
7002
 
6803
7003
  // src/components/ui/date-picker.tsx
6804
- import * as React47 from "react";
6805
- import * as PopoverPrimitive11 from "@radix-ui/react-popover";
7004
+ import * as React49 from "react";
7005
+ import * as PopoverPrimitive12 from "@radix-ui/react-popover";
6806
7006
  import {
6807
- Icon as Icon31,
7007
+ Icon as Icon32,
6808
7008
  faChevronLeftOutline as faChevronLeftOutline3,
6809
7009
  faChevronRightOutline as faChevronRightOutline3,
6810
7010
  faArrowRightOutline as faArrowRightOutline2,
6811
7011
  faCalendarOutline
6812
7012
  } from "@l3mpire/icons";
6813
- import { jsx as jsx50, jsxs as jsxs45 } from "react/jsx-runtime";
7013
+ import { jsx as jsx51, jsxs as jsxs46 } from "react/jsx-runtime";
6814
7014
  function getDaysInMonth(year, month) {
6815
7015
  return new Date(year, month + 1, 0).getDate();
6816
7016
  }
@@ -6842,16 +7042,16 @@ var MONTH_NAMES = [
6842
7042
  "November",
6843
7043
  "December"
6844
7044
  ];
6845
- var DatePickerContext = React47.createContext(
7045
+ var DatePickerContext = React49.createContext(
6846
7046
  null
6847
7047
  );
6848
7048
  function useDatePickerContext() {
6849
- const ctx = React47.useContext(DatePickerContext);
7049
+ const ctx = React49.useContext(DatePickerContext);
6850
7050
  if (!ctx)
6851
7051
  throw new Error("DatePicker compound components must be used within <DatePicker>");
6852
7052
  return ctx;
6853
7053
  }
6854
- var DatePicker = React47.forwardRef(
7054
+ var DatePicker = React49.forwardRef(
6855
7055
  ({
6856
7056
  className,
6857
7057
  mode = "single",
@@ -6862,22 +7062,22 @@ var DatePicker = React47.forwardRef(
6862
7062
  children,
6863
7063
  ...props
6864
7064
  }, ref) => {
6865
- const today = React47.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
6866
- const initialDate = React47.useMemo(() => {
7065
+ const today = React49.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
7066
+ const initialDate = React49.useMemo(() => {
6867
7067
  if (value) {
6868
7068
  if (value instanceof Date) return value;
6869
7069
  return value.from;
6870
7070
  }
6871
7071
  return today;
6872
7072
  }, []);
6873
- const [month, setMonth] = React47.useState(
7073
+ const [month, setMonth] = React49.useState(
6874
7074
  defaultMonth ?? initialDate.getMonth()
6875
7075
  );
6876
- const [year, setYear] = React47.useState(
7076
+ const [year, setYear] = React49.useState(
6877
7077
  defaultYear ?? initialDate.getFullYear()
6878
7078
  );
6879
- const [hoveredDate, setHoveredDate] = React47.useState();
6880
- const goToPrevMonth = React47.useCallback(() => {
7079
+ const [hoveredDate, setHoveredDate] = React49.useState();
7080
+ const goToPrevMonth = React49.useCallback(() => {
6881
7081
  setMonth((m) => {
6882
7082
  if (m === 0) {
6883
7083
  setYear((y) => y - 1);
@@ -6886,7 +7086,7 @@ var DatePicker = React47.forwardRef(
6886
7086
  return m - 1;
6887
7087
  });
6888
7088
  }, []);
6889
- const goToNextMonth = React47.useCallback(() => {
7089
+ const goToNextMonth = React49.useCallback(() => {
6890
7090
  setMonth((m) => {
6891
7091
  if (m === 11) {
6892
7092
  setYear((y) => y + 1);
@@ -6895,7 +7095,7 @@ var DatePicker = React47.forwardRef(
6895
7095
  return m + 1;
6896
7096
  });
6897
7097
  }, []);
6898
- const onSelect = React47.useCallback(
7098
+ const onSelect = React49.useCallback(
6899
7099
  (date) => {
6900
7100
  if (mode === "single") {
6901
7101
  onValueChange?.(date);
@@ -6914,7 +7114,7 @@ var DatePicker = React47.forwardRef(
6914
7114
  },
6915
7115
  [mode, value, onValueChange]
6916
7116
  );
6917
- const ctxValue = React47.useMemo(
7117
+ const ctxValue = React49.useMemo(
6918
7118
  () => ({
6919
7119
  mode,
6920
7120
  selected: value,
@@ -6941,7 +7141,7 @@ var DatePicker = React47.forwardRef(
6941
7141
  hoveredDate
6942
7142
  ]
6943
7143
  );
6944
- return /* @__PURE__ */ jsx50(DatePickerContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsx50(
7144
+ return /* @__PURE__ */ jsx51(DatePickerContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsx51(
6945
7145
  "div",
6946
7146
  {
6947
7147
  ref,
@@ -6964,32 +7164,32 @@ function defaultFormatDate(date) {
6964
7164
  year: "numeric"
6965
7165
  });
6966
7166
  }
6967
- var DatePickerSelects = React47.forwardRef(({ className, formatDate = defaultFormatDate, ...props }, ref) => {
7167
+ var DatePickerSelects = React49.forwardRef(({ className, formatDate = defaultFormatDate, ...props }, ref) => {
6968
7168
  const { selected } = useDatePickerContext();
6969
7169
  const fromDate = selected instanceof Date ? selected : selected?.from;
6970
7170
  const toDate = selected instanceof Date ? void 0 : selected?.to;
6971
- return /* @__PURE__ */ jsx50(
7171
+ return /* @__PURE__ */ jsx51(
6972
7172
  "div",
6973
7173
  {
6974
7174
  ref,
6975
7175
  className: cn("flex flex-col items-start pt-lg px-lg", className),
6976
7176
  ...props,
6977
- children: /* @__PURE__ */ jsxs45("div", { className: "flex items-center gap-base w-full", children: [
6978
- /* @__PURE__ */ jsxs45("div", { className: "flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm", children: [
6979
- /* @__PURE__ */ jsx50("span", { className: "flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate", children: fromDate ? formatDate(fromDate) : "Start date" }),
6980
- /* @__PURE__ */ jsx50(Icon31, { icon: faCalendarOutline, size: "sm", className: "shrink-0 text-datepicker-header-text" })
7177
+ children: /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-base w-full", children: [
7178
+ /* @__PURE__ */ jsxs46("div", { className: "flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm", children: [
7179
+ /* @__PURE__ */ jsx51("span", { className: "flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate", children: fromDate ? formatDate(fromDate) : "Start date" }),
7180
+ /* @__PURE__ */ jsx51(Icon32, { icon: faCalendarOutline, size: "sm", className: "shrink-0 text-datepicker-header-text" })
6981
7181
  ] }),
6982
- /* @__PURE__ */ jsx50(
6983
- Icon31,
7182
+ /* @__PURE__ */ jsx51(
7183
+ Icon32,
6984
7184
  {
6985
7185
  icon: faArrowRightOutline2,
6986
7186
  size: "sm",
6987
7187
  className: "shrink-0 text-datepicker-header-weekday"
6988
7188
  }
6989
7189
  ),
6990
- /* @__PURE__ */ jsxs45("div", { className: "flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm", children: [
6991
- /* @__PURE__ */ jsx50("span", { className: "flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate", children: toDate ? formatDate(toDate) : "End date" }),
6992
- /* @__PURE__ */ jsx50(Icon31, { icon: faCalendarOutline, size: "sm", className: "shrink-0 text-datepicker-header-text" })
7190
+ /* @__PURE__ */ jsxs46("div", { className: "flex-1 flex items-center gap-base min-w-0 px-base py-sm bg-gradient-to-t from-[var(--color-select-bg-default)] to-[var(--color-select-bg-gradient-to)] border border-[var(--color-select-border-default)] rounded-base shadow-sm", children: [
7191
+ /* @__PURE__ */ jsx51("span", { className: "flex-1 text-sm font-regular leading-sm text-datepicker-header-text truncate", children: toDate ? formatDate(toDate) : "End date" }),
7192
+ /* @__PURE__ */ jsx51(Icon32, { icon: faCalendarOutline, size: "sm", className: "shrink-0 text-datepicker-header-text" })
6993
7193
  ] })
6994
7194
  ] })
6995
7195
  }
@@ -7005,7 +7205,7 @@ var DatePickerDay = ({ date, isOutside }) => {
7005
7205
  const inRange = mode === "range" && selected && !(selected instanceof Date) && selected.from && selected.to && !isSelected && isInRange(date, selected.from, selected.to);
7006
7206
  const inPreviewRange = mode === "range" && selected && !(selected instanceof Date) && selected.from && !selected.to && hoveredDate && !isSelected && hoveredDate.getTime() > selected.from.getTime() && isInRange(date, selected.from, hoveredDate);
7007
7207
  const isInRangeOrPreview = inRange || inPreviewRange;
7008
- return /* @__PURE__ */ jsxs45(
7208
+ return /* @__PURE__ */ jsxs46(
7009
7209
  "button",
7010
7210
  {
7011
7211
  type: "button",
@@ -7029,14 +7229,14 @@ var DatePickerDay = ({ date, isOutside }) => {
7029
7229
  ),
7030
7230
  children: [
7031
7231
  date.getDate(),
7032
- isToday && !isOutside && /* @__PURE__ */ jsx50("span", { className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 size-1.5 rounded-full bg-datepicker-day-today" })
7232
+ isToday && !isOutside && /* @__PURE__ */ jsx51("span", { className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 size-1.5 rounded-full bg-datepicker-day-today" })
7033
7233
  ]
7034
7234
  }
7035
7235
  );
7036
7236
  };
7037
- var DatePickerCalendar = React47.forwardRef(({ className, header, ...props }, ref) => {
7237
+ var DatePickerCalendar = React49.forwardRef(({ className, header, ...props }, ref) => {
7038
7238
  const { month, year, goToPrevMonth, goToNextMonth } = useDatePickerContext();
7039
- const weeks = React47.useMemo(() => {
7239
+ const weeks = React49.useMemo(() => {
7040
7240
  const firstDay = new Date(year, month, 1);
7041
7241
  const startOffset = getWeekdayIndex(firstDay);
7042
7242
  const daysInMonth = getDaysInMonth(year, month);
@@ -7076,7 +7276,7 @@ var DatePickerCalendar = React47.forwardRef(({ className, header, ...props }, re
7076
7276
  }
7077
7277
  return result;
7078
7278
  }, [month, year]);
7079
- return /* @__PURE__ */ jsxs45(
7279
+ return /* @__PURE__ */ jsxs46(
7080
7280
  "div",
7081
7281
  {
7082
7282
  ref,
@@ -7084,38 +7284,38 @@ var DatePickerCalendar = React47.forwardRef(({ className, header, ...props }, re
7084
7284
  ...props,
7085
7285
  children: [
7086
7286
  header,
7087
- /* @__PURE__ */ jsxs45("div", { className: "flex flex-col gap-lg p-lg", children: [
7088
- /* @__PURE__ */ jsxs45("div", { className: "flex items-center justify-between", children: [
7089
- /* @__PURE__ */ jsxs45("span", { className: "text-base font-medium leading-base text-datepicker-header-text", children: [
7287
+ /* @__PURE__ */ jsxs46("div", { className: "flex flex-col gap-lg p-lg", children: [
7288
+ /* @__PURE__ */ jsxs46("div", { className: "flex items-center justify-between", children: [
7289
+ /* @__PURE__ */ jsxs46("span", { className: "text-base font-medium leading-base text-datepicker-header-text", children: [
7090
7290
  MONTH_NAMES[month],
7091
7291
  " ",
7092
7292
  year
7093
7293
  ] }),
7094
- /* @__PURE__ */ jsxs45("div", { className: "flex items-center gap-xs", children: [
7095
- /* @__PURE__ */ jsx50(
7294
+ /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-xs", children: [
7295
+ /* @__PURE__ */ jsx51(
7096
7296
  "button",
7097
7297
  {
7098
7298
  type: "button",
7099
7299
  onClick: goToPrevMonth,
7100
7300
  className: "flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer",
7101
7301
  "aria-label": "Previous month",
7102
- children: /* @__PURE__ */ jsx50(Icon31, { icon: faChevronLeftOutline3, size: "xs", className: "text-datepicker-header-nav" })
7302
+ children: /* @__PURE__ */ jsx51(Icon32, { icon: faChevronLeftOutline3, size: "xs", className: "text-datepicker-header-nav" })
7103
7303
  }
7104
7304
  ),
7105
- /* @__PURE__ */ jsx50(
7305
+ /* @__PURE__ */ jsx51(
7106
7306
  "button",
7107
7307
  {
7108
7308
  type: "button",
7109
7309
  onClick: goToNextMonth,
7110
7310
  className: "flex items-center justify-center p-xs rounded-base hover:bg-datepicker-day-bg-hover transition-colors cursor-pointer",
7111
7311
  "aria-label": "Next month",
7112
- children: /* @__PURE__ */ jsx50(Icon31, { icon: faChevronRightOutline3, size: "xs", className: "text-datepicker-header-nav" })
7312
+ children: /* @__PURE__ */ jsx51(Icon32, { icon: faChevronRightOutline3, size: "xs", className: "text-datepicker-header-nav" })
7113
7313
  }
7114
7314
  )
7115
7315
  ] })
7116
7316
  ] }),
7117
- /* @__PURE__ */ jsxs45("div", { className: "flex flex-col", children: [
7118
- /* @__PURE__ */ jsx50("div", { className: "grid grid-cols-7 gap-base py-sm", children: WEEKDAYS.map((day) => /* @__PURE__ */ jsx50(
7317
+ /* @__PURE__ */ jsxs46("div", { className: "flex flex-col", children: [
7318
+ /* @__PURE__ */ jsx51("div", { className: "grid grid-cols-7 gap-base py-sm", children: WEEKDAYS.map((day) => /* @__PURE__ */ jsx51(
7119
7319
  "span",
7120
7320
  {
7121
7321
  className: "w-9 text-center text-xs font-regular leading-xs text-datepicker-header-weekday",
@@ -7123,7 +7323,7 @@ var DatePickerCalendar = React47.forwardRef(({ className, header, ...props }, re
7123
7323
  },
7124
7324
  day
7125
7325
  )) }),
7126
- /* @__PURE__ */ jsx50("div", { className: "flex flex-col", children: weeks.map((week, wi) => /* @__PURE__ */ jsx50("div", { className: "grid grid-cols-7 gap-base", children: week.map((day, di) => /* @__PURE__ */ jsx50(
7326
+ /* @__PURE__ */ jsx51("div", { className: "flex flex-col", children: weeks.map((week, wi) => /* @__PURE__ */ jsx51("div", { className: "grid grid-cols-7 gap-base", children: week.map((day, di) => /* @__PURE__ */ jsx51(
7127
7327
  DatePickerDay,
7128
7328
  {
7129
7329
  date: day.date,
@@ -7138,10 +7338,10 @@ var DatePickerCalendar = React47.forwardRef(({ className, header, ...props }, re
7138
7338
  );
7139
7339
  });
7140
7340
  DatePickerCalendar.displayName = "DatePickerCalendar";
7141
- var DatePickerSuggestions = React47.forwardRef(
7341
+ var DatePickerSuggestions = React49.forwardRef(
7142
7342
  ({ className, suggestions, formatDate = defaultFormatDate, ...props }, ref) => {
7143
7343
  const { onSelect, mode } = useDatePickerContext();
7144
- const onValueChange = React47.useContext(DatePickerContext) ? void 0 : void 0;
7344
+ const onValueChange = React49.useContext(DatePickerContext) ? void 0 : void 0;
7145
7345
  const ctx = useDatePickerContext();
7146
7346
  const handleClick = (suggestion) => {
7147
7347
  const val = suggestion.getValue();
@@ -7163,7 +7363,7 @@ var DatePickerSuggestions = React47.forwardRef(
7163
7363
  const to = val.to ? formatDate(val.to) : "";
7164
7364
  return to ? `${from} - ${to}` : from;
7165
7365
  };
7166
- return /* @__PURE__ */ jsxs45(
7366
+ return /* @__PURE__ */ jsxs46(
7167
7367
  "div",
7168
7368
  {
7169
7369
  ref,
@@ -7173,16 +7373,16 @@ var DatePickerSuggestions = React47.forwardRef(
7173
7373
  ),
7174
7374
  ...props,
7175
7375
  children: [
7176
- /* @__PURE__ */ jsx50("div", { className: "pt-lg px-base", children: /* @__PURE__ */ jsx50("div", { className: "flex items-center p-base rounded-base", children: /* @__PURE__ */ jsx50("span", { className: "flex-1 text-xs font-medium leading-xs text-datepicker-suggestion-heading uppercase truncate", children: "Suggestions" }) }) }),
7177
- /* @__PURE__ */ jsx50("div", { className: "flex flex-1 flex-col p-base min-w-[222px]", children: suggestions.map((suggestion, i) => /* @__PURE__ */ jsxs45(
7376
+ /* @__PURE__ */ jsx51("div", { className: "pt-lg px-base", children: /* @__PURE__ */ jsx51("div", { className: "flex items-center p-base rounded-base", children: /* @__PURE__ */ jsx51("span", { className: "flex-1 text-xs font-medium leading-xs text-datepicker-suggestion-heading uppercase truncate", children: "Suggestions" }) }) }),
7377
+ /* @__PURE__ */ jsx51("div", { className: "flex flex-1 flex-col p-base min-w-[222px]", children: suggestions.map((suggestion, i) => /* @__PURE__ */ jsxs46(
7178
7378
  "button",
7179
7379
  {
7180
7380
  type: "button",
7181
7381
  onClick: () => handleClick(suggestion),
7182
7382
  className: "flex items-center gap-sm p-base rounded-base hover:bg-datepicker-suggestion-hover transition-colors cursor-pointer text-left",
7183
7383
  children: [
7184
- /* @__PURE__ */ jsx50("span", { className: "text-sm font-regular leading-sm text-datepicker-suggestion-text truncate shrink-0", children: suggestion.label }),
7185
- /* @__PURE__ */ jsx50("span", { className: "text-xs font-regular leading-xs text-datepicker-suggestion-date truncate", children: formatSuggestionDate(suggestion) })
7384
+ /* @__PURE__ */ jsx51("span", { className: "text-sm font-regular leading-sm text-datepicker-suggestion-text truncate shrink-0", children: suggestion.label }),
7385
+ /* @__PURE__ */ jsx51("span", { className: "text-xs font-regular leading-xs text-datepicker-suggestion-date truncate", children: formatSuggestionDate(suggestion) })
7186
7386
  ]
7187
7387
  },
7188
7388
  i
@@ -7193,8 +7393,8 @@ var DatePickerSuggestions = React47.forwardRef(
7193
7393
  }
7194
7394
  );
7195
7395
  DatePickerSuggestions.displayName = "DatePickerSuggestions";
7196
- var DatePickerFooter = React47.forwardRef(
7197
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx50(
7396
+ var DatePickerFooter = React49.forwardRef(
7397
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx51(
7198
7398
  "div",
7199
7399
  {
7200
7400
  ref,
@@ -7210,8 +7410,8 @@ var DatePickerFooter = React47.forwardRef(
7210
7410
  )
7211
7411
  );
7212
7412
  DatePickerFooter.displayName = "DatePickerFooter";
7213
- var DatePickerPanel = React47.forwardRef(
7214
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx50(
7413
+ var DatePickerPanel = React49.forwardRef(
7414
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx51(
7215
7415
  "div",
7216
7416
  {
7217
7417
  ref,
@@ -7222,10 +7422,10 @@ var DatePickerPanel = React47.forwardRef(
7222
7422
  )
7223
7423
  );
7224
7424
  DatePickerPanel.displayName = "DatePickerPanel";
7225
- var DatePickerRoot = PopoverPrimitive11.Root;
7226
- var DatePickerTrigger = PopoverPrimitive11.Trigger;
7227
- var DatePickerPopover = React47.forwardRef(({ className, sideOffset = 4, align = "start", children, ...props }, ref) => /* @__PURE__ */ jsx50(PopoverPrimitive11.Portal, { children: /* @__PURE__ */ jsx50(
7228
- PopoverPrimitive11.Content,
7425
+ var DatePickerRoot = PopoverPrimitive12.Root;
7426
+ var DatePickerTrigger = PopoverPrimitive12.Trigger;
7427
+ var DatePickerPopover = React49.forwardRef(({ className, sideOffset = 4, align = "start", children, ...props }, ref) => /* @__PURE__ */ jsx51(PopoverPrimitive12.Portal, { children: /* @__PURE__ */ jsx51(
7428
+ PopoverPrimitive12.Content,
7229
7429
  {
7230
7430
  ref,
7231
7431
  sideOffset,
@@ -7384,6 +7584,7 @@ export {
7384
7584
  SidebarSection,
7385
7585
  SortButton,
7386
7586
  StatusCell,
7587
+ SummaryChip,
7387
7588
  Switch,
7388
7589
  TabContent,
7389
7590
  TabList,
@@ -7438,6 +7639,7 @@ export {
7438
7639
  toastVariants,
7439
7640
  tooltipContentVariants,
7440
7641
  typographyVariants,
7642
+ useFilterBarMode,
7441
7643
  useSidebarContext
7442
7644
  };
7443
7645
  //# sourceMappingURL=index.mjs.map