@helpwave/hightide 0.9.2 → 0.9.3

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
@@ -8336,6 +8336,7 @@ var hightideTranslation = {
8336
8336
  "de-DE": {
8337
8337
  "add": `Hinzuf\xFCgen`,
8338
8338
  "addFilter": `Filter hinzuf\xFCgen`,
8339
+ "addSorting": `Sortierung hinzuf\xFCgen`,
8339
8340
  "addTime": `Uhrzeit hinzuf\xFCgen`,
8340
8341
  "after": `Nach`,
8341
8342
  "age": `Alter`,
@@ -8547,6 +8548,8 @@ var hightideTranslation = {
8547
8548
  "slideOf": ({ index, length }) => {
8548
8549
  return `Slide ${index} von ${length} slides`;
8549
8550
  },
8551
+ "sortAsc": `ASC`,
8552
+ "sortDesc": `DESC`,
8550
8553
  "sorting": `Sortierung`,
8551
8554
  "sSortingState": ({ sortDirection }) => {
8552
8555
  return TranslationGen.resolveSelect(sortDirection, {
@@ -8703,6 +8706,7 @@ var hightideTranslation = {
8703
8706
  "en-US": {
8704
8707
  "add": `Add`,
8705
8708
  "addFilter": `Add filter`,
8709
+ "addSorting": `Add sorting`,
8706
8710
  "addTime": `Add Time`,
8707
8711
  "after": `After`,
8708
8712
  "age": `Age`,
@@ -8914,6 +8918,8 @@ var hightideTranslation = {
8914
8918
  "slideOf": ({ index, length }) => {
8915
8919
  return `Slide ${index} of ${length} slides`;
8916
8920
  },
8921
+ "sortAsc": `ASC`,
8922
+ "sortDesc": `DESC`,
8917
8923
  "sorting": `Sorting`,
8918
8924
  "sSortingState": ({ sortDirection }) => {
8919
8925
  return TranslationGen.resolveSelect(sortDirection, {
@@ -17860,7 +17866,7 @@ var TableHeader = ({ isSticky = false }) => {
17860
17866
  "data-name": "table-header-cell",
17861
17867
  className: clsx28("group/table-header-cell", header.column.columnDef.meta?.className),
17862
17868
  children: [
17863
- /* @__PURE__ */ jsx78(Visibility, { isVisible: !header.isPlaceholder, children: /* @__PURE__ */ jsxs48("div", { className: "flex-row-1 items-center", children: [
17869
+ /* @__PURE__ */ jsx78(Visibility, { isVisible: !header.isPlaceholder, children: /* @__PURE__ */ jsxs48("div", { className: "flex-row-1 items-center truncate", children: [
17864
17870
  /* @__PURE__ */ jsx78(Visibility, { isVisible: header.column.getCanSort(), children: /* @__PURE__ */ jsx78(
17865
17871
  TableSortButton,
17866
17872
  {
@@ -18153,7 +18159,7 @@ var TableColumn = (props) => {
18153
18159
 
18154
18160
  // src/components/layout/table/TableColumnSwitcher.tsx
18155
18161
  import { useMemo as useMemo37, useRef as useRef35, useId as useId19 } from "react";
18156
- import { ChevronUp as ChevronUp3, ChevronDown as ChevronDown5, ChevronLeft as ChevronLeft5, ChevronRight as ChevronRight5, Eye, EyeOff, Pin, PinOff, ArrowLeftRightIcon } from "lucide-react";
18162
+ import { ChevronUp as ChevronUp3, ChevronDown as ChevronDown5, ChevronLeft as ChevronLeft5, ChevronRight as ChevronRight5, Eye, EyeOff, Pin, PinOff, Columns3Cog } from "lucide-react";
18157
18163
  import { Fragment as Fragment10, jsx as jsx84, jsxs as jsxs52 } from "react/jsx-runtime";
18158
18164
  var TableColumnSwitcherPopUp = ({ ...props }) => {
18159
18165
  const { table } = useTableStateWithoutSizingContext();
@@ -18164,6 +18170,8 @@ var TableColumnSwitcherPopUp = ({ ...props }) => {
18164
18170
  popup: props.id ?? `table-column-picker-popup-${generatedId}`,
18165
18171
  label: `table-column-picker-label-${generatedId}`
18166
18172
  }), [generatedId, props.id]);
18173
+ const enableHiding = table.options.enableHiding !== false;
18174
+ const enableColumnPinning = table.options.enableColumnPinning !== false;
18167
18175
  const tableState = table.getState();
18168
18176
  const columnOrder = tableState.columnOrder;
18169
18177
  const columnPinning = tableState.columnPinning;
@@ -18368,7 +18376,7 @@ var TableColumnSwitcherPopUp = ({ ...props }) => {
18368
18376
  ] }) }),
18369
18377
  /* @__PURE__ */ jsx84("div", { className: "flex-1 typography-label-lg", children: getColumnHeader(columnId) }),
18370
18378
  /* @__PURE__ */ jsxs52(Fragment10, { children: [
18371
- /* @__PURE__ */ jsx84(
18379
+ /* @__PURE__ */ jsx84(Visibility, { isVisible: enableHiding, children: /* @__PURE__ */ jsx84(
18372
18380
  IconButton,
18373
18381
  {
18374
18382
  tooltip: translation("changeVisibility"),
@@ -18380,8 +18388,8 @@ var TableColumnSwitcherPopUp = ({ ...props }) => {
18380
18388
  "aria-label": isVisible ? translation("hideColumn") : translation("showColumn"),
18381
18389
  children: isVisible ? /* @__PURE__ */ jsx84(Eye, { className: "size-4" }) : /* @__PURE__ */ jsx84(EyeOff, { className: "size-4" })
18382
18390
  }
18383
- ),
18384
- /* @__PURE__ */ jsx84(
18391
+ ) }),
18392
+ /* @__PURE__ */ jsx84(Visibility, { isVisible: enableColumnPinning, children: /* @__PURE__ */ jsx84(
18385
18393
  IconButton,
18386
18394
  {
18387
18395
  tooltip: translation("changePinning"),
@@ -18399,7 +18407,7 @@ var TableColumnSwitcherPopUp = ({ ...props }) => {
18399
18407
  "aria-label": isPinned ? translation("unpin") : translation("pinLeft"),
18400
18408
  children: !isPinned ? /* @__PURE__ */ jsx84(PinOff, { className: "size-4" }) : /* @__PURE__ */ jsx84(Pin, { className: "size-4" })
18401
18409
  }
18402
- )
18410
+ ) })
18403
18411
  ] })
18404
18412
  ] }, columnId);
18405
18413
  }) })
@@ -18417,7 +18425,7 @@ var TableColumnSwitcher = ({ buttonProps, ...props }) => {
18417
18425
  color: "neutral",
18418
18426
  tooltip: translation("changeColumnDisplay"),
18419
18427
  ...buttonProps,
18420
- children: /* @__PURE__ */ jsx84(ArrowLeftRightIcon, { className: "size-4" })
18428
+ children: /* @__PURE__ */ jsx84(Columns3Cog, { className: "size-5" })
18421
18429
  }
18422
18430
  ) }),
18423
18431
  /* @__PURE__ */ jsx84(TableColumnSwitcherPopUp, { ...props })
@@ -19402,7 +19410,7 @@ var TextareaWithHeadline = ({
19402
19410
  // src/components/user-interaction/data/FilterList.tsx
19403
19411
  import { useMemo as useMemo40, useState as useState39 } from "react";
19404
19412
  import { PlusIcon } from "lucide-react";
19405
- import { jsx as jsx96, jsxs as jsxs60 } from "react/jsx-runtime";
19413
+ import { Fragment as Fragment12, jsx as jsx96, jsxs as jsxs60 } from "react/jsx-runtime";
19406
19414
  var FilterList = ({ value, onValueChange, availableItems }) => {
19407
19415
  const translation = useHightideTranslation();
19408
19416
  const filterValueToLabel = useFilterValueTranslation();
@@ -19426,9 +19434,9 @@ var FilterList = ({ value, onValueChange, availableItems }) => {
19426
19434
  }
19427
19435
  return value;
19428
19436
  }, [value, editState]);
19429
- return /* @__PURE__ */ jsxs60("div", { className: "flex-row-1 flex-wrap gap-y-1", children: [
19437
+ return /* @__PURE__ */ jsxs60("div", { className: "flex-row-2 flex-wrap gap-y-2", children: [
19430
19438
  /* @__PURE__ */ jsxs60(PopUpRoot, { children: [
19431
- /* @__PURE__ */ jsx96(PopUpOpener, { children: ({ toggleOpen, props }) => /* @__PURE__ */ jsxs60(Button, { ...props, onClick: toggleOpen, color: "neutral", size: "md", children: [
19439
+ /* @__PURE__ */ jsx96(PopUpOpener, { children: ({ toggleOpen, props }) => /* @__PURE__ */ jsxs60(Button, { ...props, onClick: toggleOpen, color: "neutral", size: "sm", className: "min-w-36", children: [
19432
19440
  translation("addFilter"),
19433
19441
  /* @__PURE__ */ jsx96(PlusIcon, { className: "size-4" })
19434
19442
  ] }) }),
@@ -19477,10 +19485,10 @@ var FilterList = ({ value, onValueChange, availableItems }) => {
19477
19485
  }
19478
19486
  },
19479
19487
  children: [
19480
- /* @__PURE__ */ jsx96(PopUpOpener, { children: ({ toggleOpen, props, isOpen }) => /* @__PURE__ */ jsxs60(Button, { ...props, onClick: toggleOpen, color: "primary", coloringStyle: "tonal-outline", size: "md", children: [
19481
- item.activeLabelBuilder ? item.activeLabelBuilder(columnFilter.value) : item.label + ": " + filterValueToLabel(columnFilter.value, { tags: item.tags }),
19482
- /* @__PURE__ */ jsx96(ExpansionIcon, { isExpanded: isOpen })
19483
- ] }) }),
19488
+ /* @__PURE__ */ jsx96(PopUpOpener, { children: ({ toggleOpen, props }) => /* @__PURE__ */ jsx96(Button, { ...props, onClick: toggleOpen, color: "primary", coloringStyle: "tonal-outline", size: "sm", children: item.activeLabelBuilder ? item.activeLabelBuilder(columnFilter.value) : /* @__PURE__ */ jsxs60(Fragment12, { children: [
19489
+ /* @__PURE__ */ jsx96("span", { className: "font-bold", children: item.label }),
19490
+ filterValueToLabel(columnFilter.value, { tags: item.tags })
19491
+ ] }) }) }),
19484
19492
  /* @__PURE__ */ jsx96(PopUpContext.Consumer, { children: ({ isOpen, setIsOpen }) => item.popUpBuilder ? item.popUpBuilder({
19485
19493
  value: editState?.id === columnFilter.id ? editState.value : columnFilter.value,
19486
19494
  onValueChange: (value2) => setEditState({ ...columnFilter, value: value2 }),
@@ -19518,8 +19526,142 @@ var FilterList = ({ value, onValueChange, availableItems }) => {
19518
19526
  ] });
19519
19527
  };
19520
19528
 
19529
+ // src/components/user-interaction/data/SortingList.tsx
19530
+ import { useMemo as useMemo41 } from "react";
19531
+ import { ArrowDownWideNarrow, ArrowUpNarrowWide, PlusIcon as PlusIcon2, TrashIcon as TrashIcon2, XIcon as XIcon4 } from "lucide-react";
19532
+ import clsx37 from "clsx";
19533
+ import { jsx as jsx97, jsxs as jsxs61 } from "react/jsx-runtime";
19534
+ var SortingList = ({ sorting, onSortingChange, availableItems }) => {
19535
+ const translation = useHightideTranslation();
19536
+ const activeIds = useMemo41(() => sorting.map((item) => item.id), [sorting]);
19537
+ const inactiveItems = useMemo41(
19538
+ () => availableItems.filter((item) => !activeIds.includes(item.id)).sort((a, b) => a.label.localeCompare(b.label)),
19539
+ [availableItems, activeIds]
19540
+ );
19541
+ const itemRecord = useMemo41(
19542
+ () => availableItems.reduce(
19543
+ (acc, item) => {
19544
+ acc[item.id] = item;
19545
+ return acc;
19546
+ },
19547
+ {}
19548
+ ),
19549
+ [availableItems]
19550
+ );
19551
+ const setSortDirection = (columnId, desc) => {
19552
+ onSortingChange(sorting.map((s) => s.id === columnId ? { ...s, desc } : s));
19553
+ };
19554
+ const removeSort = (columnId) => {
19555
+ onSortingChange(sorting.filter((s) => s.id !== columnId));
19556
+ };
19557
+ return /* @__PURE__ */ jsxs61("div", { className: "flex-row-2 flex-wrap gap-y-2", children: [
19558
+ /* @__PURE__ */ jsxs61(PopUpRoot, { children: [
19559
+ /* @__PURE__ */ jsx97(PopUpOpener, { children: ({ toggleOpen, props }) => /* @__PURE__ */ jsxs61(Button, { ...props, onClick: toggleOpen, color: "neutral", size: "sm", className: "min-w-36", children: [
19560
+ translation("addSorting"),
19561
+ /* @__PURE__ */ jsx97(PlusIcon2, { className: "size-4" })
19562
+ ] }) }),
19563
+ /* @__PURE__ */ jsx97(PopUp, { className: "flex-col-2 p-2", children: /* @__PURE__ */ jsx97(PopUpContext.Consumer, { children: ({ setIsOpen }) => /* @__PURE__ */ jsx97(
19564
+ Combobox,
19565
+ {
19566
+ onItemClick: (id) => {
19567
+ const item = itemRecord[id];
19568
+ if (!item) return;
19569
+ onSortingChange([...sorting, { id: item.id, desc: false }]);
19570
+ setIsOpen(false);
19571
+ },
19572
+ children: inactiveItems.map((item) => /* @__PURE__ */ jsxs61(ComboboxOption, { value: item.id, label: item.label, children: [
19573
+ DataTypeUtils.toIcon(item.dataType),
19574
+ item.label
19575
+ ] }, item.id))
19576
+ }
19577
+ ) }) })
19578
+ ] }),
19579
+ sorting.map((columnSort) => {
19580
+ const item = itemRecord[columnSort.id];
19581
+ if (!item) return null;
19582
+ return /* @__PURE__ */ jsxs61(PopUpRoot, { children: [
19583
+ /* @__PURE__ */ jsx97(PopUpOpener, { children: ({ toggleOpen, props }) => /* @__PURE__ */ jsxs61(Button, { ...props, onClick: toggleOpen, color: "secondary", coloringStyle: "tonal-outline", size: "sm", children: [
19584
+ /* @__PURE__ */ jsx97("span", { className: "font-bold", children: item.label }),
19585
+ columnSort.desc ? /* @__PURE__ */ jsx97(ArrowDownWideNarrow, { className: "size-5" }) : /* @__PURE__ */ jsx97(ArrowUpNarrowWide, { className: "size-5" })
19586
+ ] }) }),
19587
+ /* @__PURE__ */ jsx97(PopUpContext.Consumer, { children: ({ setIsOpen }) => /* @__PURE__ */ jsxs61(
19588
+ PopUp,
19589
+ {
19590
+ className: clsx37("flex-col-3 p-3 min-w-64"),
19591
+ onClose: () => setIsOpen(false),
19592
+ children: [
19593
+ /* @__PURE__ */ jsxs61("div", { className: "flex-row-4 justify-between w-full items-center gap-2", children: [
19594
+ /* @__PURE__ */ jsx97("span", { className: "typography-title-sm font-semibold", children: item.label }),
19595
+ /* @__PURE__ */ jsxs61("div", { className: "flex-row-0 shrink-0 items-center", children: [
19596
+ /* @__PURE__ */ jsx97(
19597
+ IconButton,
19598
+ {
19599
+ tooltip: translation("removeFilter"),
19600
+ onClick: () => {
19601
+ removeSort(columnSort.id);
19602
+ setIsOpen(false);
19603
+ },
19604
+ color: "negative",
19605
+ coloringStyle: "text",
19606
+ size: "sm",
19607
+ children: /* @__PURE__ */ jsx97(TrashIcon2, { className: "size-4" })
19608
+ }
19609
+ ),
19610
+ /* @__PURE__ */ jsx97(
19611
+ IconButton,
19612
+ {
19613
+ tooltip: translation("close"),
19614
+ onClick: () => setIsOpen(false),
19615
+ color: "neutral",
19616
+ coloringStyle: "text",
19617
+ size: "sm",
19618
+ children: /* @__PURE__ */ jsx97(XIcon4, { className: "size-4" })
19619
+ }
19620
+ )
19621
+ ] })
19622
+ ] }),
19623
+ /* @__PURE__ */ jsxs61("div", { className: "flex-row-1 w-full gap-2", children: [
19624
+ /* @__PURE__ */ jsxs61(
19625
+ Button,
19626
+ {
19627
+ type: "button",
19628
+ className: "flex-1 flex-row-1 items-center justify-center gap-2",
19629
+ color: columnSort.desc ? "neutral" : "primary",
19630
+ coloringStyle: "solid",
19631
+ size: "md",
19632
+ onClick: () => setSortDirection(columnSort.id, false),
19633
+ children: [
19634
+ /* @__PURE__ */ jsx97(ArrowUpNarrowWide, { className: "size-4" }),
19635
+ translation("sortAsc")
19636
+ ]
19637
+ }
19638
+ ),
19639
+ /* @__PURE__ */ jsxs61(
19640
+ Button,
19641
+ {
19642
+ type: "button",
19643
+ className: "flex-1 flex-row-1 items-center justify-center gap-2",
19644
+ color: columnSort.desc ? "primary" : "neutral",
19645
+ coloringStyle: "solid",
19646
+ size: "md",
19647
+ onClick: () => setSortDirection(columnSort.id, true),
19648
+ children: [
19649
+ /* @__PURE__ */ jsx97(ArrowDownWideNarrow, { className: "size-4" }),
19650
+ translation("sortDesc")
19651
+ ]
19652
+ }
19653
+ )
19654
+ ] })
19655
+ ]
19656
+ }
19657
+ ) })
19658
+ ] }, columnSort.id);
19659
+ })
19660
+ ] });
19661
+ };
19662
+
19521
19663
  // src/components/user-interaction/date/TimeDisplay.tsx
19522
- import { jsx as jsx97 } from "react/jsx-runtime";
19664
+ import { jsx as jsx98 } from "react/jsx-runtime";
19523
19665
  var TimeDisplay = ({
19524
19666
  date,
19525
19667
  mode = "daysFromToday"
@@ -19556,13 +19698,13 @@ var TimeDisplay = ({
19556
19698
  } else {
19557
19699
  fullString = `${date.getDate()}. ${monthToTranslation[date.getMonth()]} ${date.getFullYear()}`;
19558
19700
  }
19559
- return /* @__PURE__ */ jsx97("span", { children: fullString });
19701
+ return /* @__PURE__ */ jsx98("span", { children: fullString });
19560
19702
  };
19561
19703
 
19562
19704
  // src/components/user-interaction/input/FlexibleDateTimeInput.tsx
19563
- import { forwardRef as forwardRef30, useMemo as useMemo41, useState as useState40 } from "react";
19705
+ import { forwardRef as forwardRef30, useMemo as useMemo42, useState as useState40 } from "react";
19564
19706
  import { ClockFading, ClockPlus } from "lucide-react";
19565
- import { jsx as jsx98 } from "react/jsx-runtime";
19707
+ import { jsx as jsx99 } from "react/jsx-runtime";
19566
19708
  var FlexibleDateTimeInput = forwardRef30(function FlexibleDateTimeInput2({
19567
19709
  defaultMode = "date",
19568
19710
  value: controlledValue,
@@ -19578,16 +19720,16 @@ var FlexibleDateTimeInput = forwardRef30(function FlexibleDateTimeInput2({
19578
19720
  onValueChange,
19579
19721
  defaultValue: initialValue
19580
19722
  });
19581
- const fixedTime = useMemo41(() => fixedTimeOverride ?? new Date(23, 59, 59, 999), [fixedTimeOverride]);
19723
+ const fixedTime = useMemo42(() => fixedTimeOverride ?? new Date(23, 59, 59, 999), [fixedTimeOverride]);
19582
19724
  const [preferredMode, setPreferredMode] = useState40(defaultMode);
19583
- const mode = useMemo41(() => {
19725
+ const mode = useMemo42(() => {
19584
19726
  if (!value) return preferredMode;
19585
19727
  if (DateUtils.sameTime(value, fixedTime, true, true)) {
19586
19728
  return "date";
19587
19729
  }
19588
19730
  return "dateTime";
19589
19731
  }, [preferredMode, value, fixedTime]);
19590
- return /* @__PURE__ */ jsx98(
19732
+ return /* @__PURE__ */ jsx99(
19591
19733
  DateTimeInput,
19592
19734
  {
19593
19735
  ...props,
@@ -19597,7 +19739,7 @@ var FlexibleDateTimeInput = forwardRef30(function FlexibleDateTimeInput2({
19597
19739
  onValueChange: setValue,
19598
19740
  actions: [
19599
19741
  ...actions,
19600
- /* @__PURE__ */ jsx98(
19742
+ /* @__PURE__ */ jsx99(
19601
19743
  IconButton,
19602
19744
  {
19603
19745
  size: "sm",
@@ -19615,7 +19757,7 @@ var FlexibleDateTimeInput = forwardRef30(function FlexibleDateTimeInput2({
19615
19757
  }
19616
19758
  }
19617
19759
  },
19618
- children: preferredMode === "date" ? /* @__PURE__ */ jsx98(ClockPlus, { className: "size-5" }) : /* @__PURE__ */ jsx98(ClockFading, { className: "size-5" })
19760
+ children: preferredMode === "date" ? /* @__PURE__ */ jsx99(ClockPlus, { className: "size-5" }) : /* @__PURE__ */ jsx99(ClockFading, { className: "size-5" })
19619
19761
  },
19620
19762
  "date-mode"
19621
19763
  )
@@ -19627,8 +19769,8 @@ var FlexibleDateTimeInput = forwardRef30(function FlexibleDateTimeInput2({
19627
19769
  // src/components/user-interaction/input/InsideLabelInput.tsx
19628
19770
  import { useId as useId23 } from "react";
19629
19771
  import { forwardRef as forwardRef31, useState as useState41 } from "react";
19630
- import clsx37 from "clsx";
19631
- import { jsx as jsx99, jsxs as jsxs61 } from "react/jsx-runtime";
19772
+ import clsx38 from "clsx";
19773
+ import { jsx as jsx100, jsxs as jsxs62 } from "react/jsx-runtime";
19632
19774
  var InsideLabelInput = forwardRef31(function InsideLabelInput2({
19633
19775
  id: customId,
19634
19776
  value: controlledValue,
@@ -19645,8 +19787,8 @@ var InsideLabelInput = forwardRef31(function InsideLabelInput2({
19645
19787
  const [isFocused, setIsFocused] = useState41(false);
19646
19788
  const generatedId = useId23();
19647
19789
  const id = customId ?? generatedId;
19648
- return /* @__PURE__ */ jsxs61("div", { className: clsx37("relative"), children: [
19649
- /* @__PURE__ */ jsx99(
19790
+ return /* @__PURE__ */ jsxs62("div", { className: clsx38("relative"), children: [
19791
+ /* @__PURE__ */ jsx100(
19650
19792
  Input,
19651
19793
  {
19652
19794
  ...props,
@@ -19663,16 +19805,16 @@ var InsideLabelInput = forwardRef31(function InsideLabelInput2({
19663
19805
  setIsFocused(false);
19664
19806
  },
19665
19807
  "aria-labelledby": id + "-label",
19666
- className: clsx37("h-14 px-4 pb-2 py-6.5", props.className)
19808
+ className: clsx38("h-14 px-4 pb-2 py-6.5", props.className)
19667
19809
  }
19668
19810
  ),
19669
- /* @__PURE__ */ jsx99(
19811
+ /* @__PURE__ */ jsx100(
19670
19812
  "label",
19671
19813
  {
19672
19814
  id: id + "-label",
19673
19815
  "aria-hidden": true,
19674
19816
  "data-display": isFocused || !!value ? "small" : "full",
19675
- className: clsx37(
19817
+ className: clsx38(
19676
19818
  // margin left to account for the border which is ignored for absolute positions
19677
19819
  "absolute left-4 ml-0.5 top-2 transition-all delay-25 pointer-events-none touch-none",
19678
19820
  "data-[display=small]:top-2 data-[display=small]:h-force-4.5 data-[display=small]:typography-caption-sm data-[display=small]:overflow-y-hidden",
@@ -19686,8 +19828,8 @@ var InsideLabelInput = forwardRef31(function InsideLabelInput2({
19686
19828
 
19687
19829
  // src/components/user-interaction/input/SearchBar.tsx
19688
19830
  import { Search } from "lucide-react";
19689
- import { clsx as clsx38 } from "clsx";
19690
- import { jsx as jsx100, jsxs as jsxs62 } from "react/jsx-runtime";
19831
+ import { clsx as clsx39 } from "clsx";
19832
+ import { jsx as jsx101, jsxs as jsxs63 } from "react/jsx-runtime";
19691
19833
  var SearchBar = ({
19692
19834
  value: controlledValue,
19693
19835
  initialValue,
@@ -19703,8 +19845,8 @@ var SearchBar = ({
19703
19845
  onValueChange,
19704
19846
  defaultValue: initialValue
19705
19847
  });
19706
- return /* @__PURE__ */ jsxs62("div", { ...containerProps, className: clsx38("relative", containerProps?.className), children: [
19707
- /* @__PURE__ */ jsx100(
19848
+ return /* @__PURE__ */ jsxs63("div", { ...containerProps, className: clsx39("relative", containerProps?.className), children: [
19849
+ /* @__PURE__ */ jsx101(
19708
19850
  Input,
19709
19851
  {
19710
19852
  ...inputProps,
@@ -19712,10 +19854,10 @@ var SearchBar = ({
19712
19854
  onValueChange: setValue,
19713
19855
  onEditComplete: onSearch,
19714
19856
  placeholder: inputProps.placeholder ?? translation("search"),
19715
- className: clsx38("pr-10 w-full", inputProps.className)
19857
+ className: clsx39("pr-10 w-full", inputProps.className)
19716
19858
  }
19717
19859
  ),
19718
- /* @__PURE__ */ jsx100(
19860
+ /* @__PURE__ */ jsx101(
19719
19861
  IconButton,
19720
19862
  {
19721
19863
  ...searchButtonProps,
@@ -19724,8 +19866,8 @@ var SearchBar = ({
19724
19866
  color: "neutral",
19725
19867
  coloringStyle: "text",
19726
19868
  onClick: () => onSearch(value),
19727
- className: clsx38("absolute right-1.5 top-1/2 -translate-y-1/2", searchButtonProps?.className),
19728
- children: /* @__PURE__ */ jsx100(Search, { className: "w-full h-full" })
19869
+ className: clsx39("absolute right-1.5 top-1/2 -translate-y-1/2", searchButtonProps?.className),
19870
+ children: /* @__PURE__ */ jsx101(Search, { className: "w-full h-full" })
19729
19871
  }
19730
19872
  )
19731
19873
  ] });
@@ -19734,8 +19876,8 @@ var SearchBar = ({
19734
19876
  // src/components/user-interaction/input/ToggleableInput.tsx
19735
19877
  import { forwardRef as forwardRef32, useEffect as useEffect48, useImperativeHandle as useImperativeHandle16, useRef as useRef40, useState as useState42 } from "react";
19736
19878
  import { Pencil } from "lucide-react";
19737
- import clsx39 from "clsx";
19738
- import { jsx as jsx101, jsxs as jsxs63 } from "react/jsx-runtime";
19879
+ import clsx40 from "clsx";
19880
+ import { jsx as jsx102, jsxs as jsxs64 } from "react/jsx-runtime";
19739
19881
  var ToggleableInput = forwardRef32(function ToggleableInput2({
19740
19882
  value: controlledValue,
19741
19883
  initialValue,
@@ -19757,8 +19899,8 @@ var ToggleableInput = forwardRef32(function ToggleableInput2({
19757
19899
  innerRef.current?.focus();
19758
19900
  }
19759
19901
  }, [isEditing]);
19760
- return /* @__PURE__ */ jsxs63("div", { className: clsx39("relative flex-row-2", { "flex-1": isEditing }), children: [
19761
- /* @__PURE__ */ jsx101(
19902
+ return /* @__PURE__ */ jsxs64("div", { className: clsx40("relative flex-row-2", { "flex-1": isEditing }), children: [
19903
+ /* @__PURE__ */ jsx102(
19762
19904
  Input,
19763
19905
  {
19764
19906
  ...props,
@@ -19782,9 +19924,9 @@ var ToggleableInput = forwardRef32(function ToggleableInput2({
19782
19924
  "data-name": props["data-name"] ?? "togglable-input"
19783
19925
  }
19784
19926
  ),
19785
- !isEditing && /* @__PURE__ */ jsxs63("div", { className: "absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden", children: [
19786
- /* @__PURE__ */ jsx101("span", { className: clsx39(" truncate"), children: value }),
19787
- /* @__PURE__ */ jsx101(Pencil, { className: clsx39(`size-force-4`, { "text-transparent": isEditing }) })
19927
+ !isEditing && /* @__PURE__ */ jsxs64("div", { className: "absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden", children: [
19928
+ /* @__PURE__ */ jsx102("span", { className: clsx40(" truncate"), children: value }),
19929
+ /* @__PURE__ */ jsx102(Pencil, { className: clsx40(`size-force-4`, { "text-transparent": isEditing }) })
19788
19930
  ] })
19789
19931
  ] });
19790
19932
  });
@@ -19793,9 +19935,9 @@ var ToggleableInput = forwardRef32(function ToggleableInput2({
19793
19935
  import { Check as Check4 } from "lucide-react";
19794
19936
 
19795
19937
  // src/components/user-interaction/properties/PropertyBase.tsx
19796
- import clsx40 from "clsx";
19938
+ import clsx41 from "clsx";
19797
19939
  import { AlertTriangle, Trash, X as X3 } from "lucide-react";
19798
- import { jsx as jsx102, jsxs as jsxs64 } from "react/jsx-runtime";
19940
+ import { jsx as jsx103, jsxs as jsxs65 } from "react/jsx-runtime";
19799
19941
  var PropertyBase = ({
19800
19942
  name,
19801
19943
  children,
@@ -19814,36 +19956,36 @@ var PropertyBase = ({
19814
19956
  const isClearEnabled = allowClear && !readOnly;
19815
19957
  const isRemoveEnabled = allowRemove && !readOnly;
19816
19958
  const showActionsContainer = isClearEnabled || isRemoveEnabled;
19817
- return /* @__PURE__ */ jsxs64(
19959
+ return /* @__PURE__ */ jsxs65(
19818
19960
  "div",
19819
19961
  {
19820
- className: clsx40("group/property", className),
19962
+ className: clsx41("group/property", className),
19821
19963
  "data-name": "property-root",
19822
19964
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
19823
19965
  children: [
19824
- /* @__PURE__ */ jsxs64(
19966
+ /* @__PURE__ */ jsxs65(
19825
19967
  "div",
19826
19968
  {
19827
19969
  "data-name": "property-title",
19828
19970
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
19829
19971
  children: [
19830
- /* @__PURE__ */ jsx102(Tooltip, { tooltip: name, containerClassName: "min-w-0", children: /* @__PURE__ */ jsxs64("div", { className: "flex-row-1 items-center", children: [
19831
- /* @__PURE__ */ jsx102("div", { "data-name": "property-title-icon", children: icon }),
19832
- /* @__PURE__ */ jsx102("span", { "data-name": "property-title-text", children: name })
19972
+ /* @__PURE__ */ jsx103(Tooltip, { tooltip: name, containerClassName: "min-w-0", children: /* @__PURE__ */ jsxs65("div", { className: "flex-row-1 items-center", children: [
19973
+ /* @__PURE__ */ jsx103("div", { "data-name": "property-title-icon", children: icon }),
19974
+ /* @__PURE__ */ jsx103("span", { "data-name": "property-title-text", children: name })
19833
19975
  ] }) }),
19834
- invalid && /* @__PURE__ */ jsx102(AlertTriangle, { className: "size-force-6" })
19976
+ invalid && /* @__PURE__ */ jsx103(AlertTriangle, { className: "size-force-6" })
19835
19977
  ]
19836
19978
  }
19837
19979
  ),
19838
- /* @__PURE__ */ jsxs64(
19980
+ /* @__PURE__ */ jsxs65(
19839
19981
  "div",
19840
19982
  {
19841
19983
  "data-name": "property-content",
19842
19984
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
19843
19985
  children: [
19844
19986
  children({ required, hasValue, invalid }),
19845
- showActionsContainer && /* @__PURE__ */ jsxs64("div", { "data-name": "property-actions", children: [
19846
- isClearEnabled && /* @__PURE__ */ jsx102(
19987
+ showActionsContainer && /* @__PURE__ */ jsxs65("div", { "data-name": "property-actions", children: [
19988
+ isClearEnabled && /* @__PURE__ */ jsx103(
19847
19989
  IconButton,
19848
19990
  {
19849
19991
  tooltip: translation("clearValue"),
@@ -19852,10 +19994,10 @@ var PropertyBase = ({
19852
19994
  color: "negative",
19853
19995
  coloringStyle: "text",
19854
19996
  size: "sm",
19855
- children: /* @__PURE__ */ jsx102(X3, { className: "size-force-5" })
19997
+ children: /* @__PURE__ */ jsx103(X3, { className: "size-force-5" })
19856
19998
  }
19857
19999
  ),
19858
- isRemoveEnabled && /* @__PURE__ */ jsx102(
20000
+ isRemoveEnabled && /* @__PURE__ */ jsx103(
19859
20001
  IconButton,
19860
20002
  {
19861
20003
  tooltip: translation("removeProperty"),
@@ -19863,7 +20005,7 @@ var PropertyBase = ({
19863
20005
  color: "negative",
19864
20006
  coloringStyle: "text",
19865
20007
  size: "sm",
19866
- children: /* @__PURE__ */ jsx102(Trash, { className: "size-force-5" })
20008
+ children: /* @__PURE__ */ jsx103(Trash, { className: "size-force-5" })
19867
20009
  }
19868
20010
  )
19869
20011
  ] })
@@ -19876,7 +20018,7 @@ var PropertyBase = ({
19876
20018
  };
19877
20019
 
19878
20020
  // src/components/user-interaction/properties/CheckboxProperty.tsx
19879
- import { jsx as jsx103, jsxs as jsxs65 } from "react/jsx-runtime";
20021
+ import { jsx as jsx104, jsxs as jsxs66 } from "react/jsx-runtime";
19880
20022
  var CheckboxProperty = ({
19881
20023
  value,
19882
20024
  onValueChange,
@@ -19885,15 +20027,15 @@ var CheckboxProperty = ({
19885
20027
  ...baseProps
19886
20028
  }) => {
19887
20029
  const translation = useHightideTranslation();
19888
- return /* @__PURE__ */ jsx103(
20030
+ return /* @__PURE__ */ jsx104(
19889
20031
  PropertyBase,
19890
20032
  {
19891
20033
  ...baseProps,
19892
20034
  hasValue: value !== void 0,
19893
20035
  readOnly,
19894
- icon: /* @__PURE__ */ jsx103(Check4, { size: 24 }),
19895
- children: () => /* @__PURE__ */ jsxs65("div", { className: "flex-row-2 items-center", children: [
19896
- /* @__PURE__ */ jsx103(
20036
+ icon: /* @__PURE__ */ jsx104(Check4, { size: 24 }),
20037
+ children: () => /* @__PURE__ */ jsxs66("div", { className: "flex-row-2 items-center", children: [
20038
+ /* @__PURE__ */ jsx104(
19897
20039
  Button,
19898
20040
  {
19899
20041
  color: value ? "positive" : "neutral",
@@ -19906,7 +20048,7 @@ var CheckboxProperty = ({
19906
20048
  children: translation("yes")
19907
20049
  }
19908
20050
  ),
19909
- /* @__PURE__ */ jsx103(
20051
+ /* @__PURE__ */ jsx104(
19910
20052
  Button,
19911
20053
  {
19912
20054
  color: !value && value !== void 0 ? "negative" : "neutral",
@@ -19926,7 +20068,7 @@ var CheckboxProperty = ({
19926
20068
 
19927
20069
  // src/components/user-interaction/properties/DateProperty.tsx
19928
20070
  import { CalendarDays } from "lucide-react";
19929
- import { jsx as jsx104 } from "react/jsx-runtime";
20071
+ import { jsx as jsx105 } from "react/jsx-runtime";
19930
20072
  var DateProperty = ({
19931
20073
  value,
19932
20074
  onValueChange,
@@ -19936,13 +20078,13 @@ var DateProperty = ({
19936
20078
  ...baseProps
19937
20079
  }) => {
19938
20080
  const hasValue = !!value;
19939
- return /* @__PURE__ */ jsx104(
20081
+ return /* @__PURE__ */ jsx105(
19940
20082
  PropertyBase,
19941
20083
  {
19942
20084
  ...baseProps,
19943
20085
  hasValue,
19944
- icon: /* @__PURE__ */ jsx104(CalendarDays, { size: 24 }),
19945
- children: ({ invalid }) => /* @__PURE__ */ jsx104(
20086
+ icon: /* @__PURE__ */ jsx105(CalendarDays, { size: 24 }),
20087
+ children: ({ invalid }) => /* @__PURE__ */ jsx105(
19946
20088
  DateTimeInput,
19947
20089
  {
19948
20090
  value,
@@ -19960,7 +20102,7 @@ var DateProperty = ({
19960
20102
 
19961
20103
  // src/components/user-interaction/properties/MultiSelectProperty.tsx
19962
20104
  import { List } from "lucide-react";
19963
- import { jsx as jsx105 } from "react/jsx-runtime";
20105
+ import { jsx as jsx106 } from "react/jsx-runtime";
19964
20106
  var MultiSelectProperty = ({
19965
20107
  children,
19966
20108
  value,
@@ -19969,18 +20111,18 @@ var MultiSelectProperty = ({
19969
20111
  ...props
19970
20112
  }) => {
19971
20113
  const hasValue = value.length > 0;
19972
- return /* @__PURE__ */ jsx105(
20114
+ return /* @__PURE__ */ jsx106(
19973
20115
  PropertyBase,
19974
20116
  {
19975
20117
  ...props,
19976
20118
  hasValue,
19977
- icon: /* @__PURE__ */ jsx105(List, { size: 24 }),
19978
- children: ({ invalid }) => /* @__PURE__ */ jsx105(
20119
+ icon: /* @__PURE__ */ jsx106(List, { size: 24 }),
20120
+ children: ({ invalid }) => /* @__PURE__ */ jsx106(
19979
20121
  "div",
19980
20122
  {
19981
20123
  "data-name": "property-input-wrapper",
19982
20124
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
19983
- children: /* @__PURE__ */ jsx105(
20125
+ children: /* @__PURE__ */ jsx106(
19984
20126
  MultiSelectChipDisplay,
19985
20127
  {
19986
20128
  value,
@@ -20007,7 +20149,7 @@ var MultiSelectProperty = ({
20007
20149
 
20008
20150
  // src/components/user-interaction/properties/NumberProperty.tsx
20009
20151
  import { Binary as Binary2 } from "lucide-react";
20010
- import { jsx as jsx106, jsxs as jsxs66 } from "react/jsx-runtime";
20152
+ import { jsx as jsx107, jsxs as jsxs67 } from "react/jsx-runtime";
20011
20153
  var NumberProperty = ({
20012
20154
  value,
20013
20155
  onValueChange,
@@ -20019,20 +20161,20 @@ var NumberProperty = ({
20019
20161
  }) => {
20020
20162
  const translation = useHightideTranslation();
20021
20163
  const hasValue = value !== void 0;
20022
- return /* @__PURE__ */ jsx106(
20164
+ return /* @__PURE__ */ jsx107(
20023
20165
  PropertyBase,
20024
20166
  {
20025
20167
  ...baseProps,
20026
20168
  onValueClear,
20027
20169
  hasValue,
20028
- icon: /* @__PURE__ */ jsx106(Binary2, { size: 24 }),
20029
- children: ({ invalid }) => /* @__PURE__ */ jsxs66(
20170
+ icon: /* @__PURE__ */ jsx107(Binary2, { size: 24 }),
20171
+ children: ({ invalid }) => /* @__PURE__ */ jsxs67(
20030
20172
  "div",
20031
20173
  {
20032
20174
  "data-name": "property-input-wrapper",
20033
20175
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
20034
20176
  children: [
20035
- /* @__PURE__ */ jsx106(
20177
+ /* @__PURE__ */ jsx107(
20036
20178
  Input,
20037
20179
  {
20038
20180
  "data-name": "property-input",
@@ -20060,7 +20202,7 @@ var NumberProperty = ({
20060
20202
  }
20061
20203
  }
20062
20204
  ),
20063
- suffix && /* @__PURE__ */ jsx106(
20205
+ suffix && /* @__PURE__ */ jsx107(
20064
20206
  "span",
20065
20207
  {
20066
20208
  "data-name": "property-suffix",
@@ -20077,7 +20219,7 @@ var NumberProperty = ({
20077
20219
 
20078
20220
  // src/components/user-interaction/properties/SelectProperty.tsx
20079
20221
  import { List as List2 } from "lucide-react";
20080
- import { jsx as jsx107, jsxs as jsxs67 } from "react/jsx-runtime";
20222
+ import { jsx as jsx108, jsxs as jsxs68 } from "react/jsx-runtime";
20081
20223
  var SingleSelectProperty = ({
20082
20224
  children,
20083
20225
  value,
@@ -20086,18 +20228,18 @@ var SingleSelectProperty = ({
20086
20228
  ...props
20087
20229
  }) => {
20088
20230
  const hasValue = value !== void 0;
20089
- return /* @__PURE__ */ jsx107(
20231
+ return /* @__PURE__ */ jsx108(
20090
20232
  PropertyBase,
20091
20233
  {
20092
20234
  ...props,
20093
20235
  hasValue,
20094
- icon: /* @__PURE__ */ jsx107(List2, { size: 24 }),
20095
- children: ({ invalid }) => /* @__PURE__ */ jsx107(
20236
+ icon: /* @__PURE__ */ jsx108(List2, { size: 24 }),
20237
+ children: ({ invalid }) => /* @__PURE__ */ jsx108(
20096
20238
  "div",
20097
20239
  {
20098
20240
  "data-name": "property-input-wrapper",
20099
20241
  "data-invalid": PropsUtil.dataAttributes.bool(invalid),
20100
- children: /* @__PURE__ */ jsxs67(
20242
+ children: /* @__PURE__ */ jsxs68(
20101
20243
  SelectRoot,
20102
20244
  {
20103
20245
  value,
@@ -20107,7 +20249,7 @@ var SingleSelectProperty = ({
20107
20249
  },
20108
20250
  disabled: props.readOnly,
20109
20251
  children: [
20110
- /* @__PURE__ */ jsx107(
20252
+ /* @__PURE__ */ jsx108(
20111
20253
  SelectButton,
20112
20254
  {
20113
20255
  className: "flex-row-2 w-full items-center justify-between",
@@ -20115,7 +20257,7 @@ var SingleSelectProperty = ({
20115
20257
  "data-name": "property-input"
20116
20258
  }
20117
20259
  ),
20118
- /* @__PURE__ */ jsx107(SelectContent, { children })
20260
+ /* @__PURE__ */ jsx108(SelectContent, { children })
20119
20261
  ]
20120
20262
  }
20121
20263
  )
@@ -20127,7 +20269,7 @@ var SingleSelectProperty = ({
20127
20269
 
20128
20270
  // src/components/user-interaction/properties/TextProperty.tsx
20129
20271
  import { Text } from "lucide-react";
20130
- import { jsx as jsx108 } from "react/jsx-runtime";
20272
+ import { jsx as jsx109 } from "react/jsx-runtime";
20131
20273
  var TextProperty = ({
20132
20274
  value,
20133
20275
  readOnly,
@@ -20137,13 +20279,13 @@ var TextProperty = ({
20137
20279
  }) => {
20138
20280
  const translation = useHightideTranslation();
20139
20281
  const hasValue = value !== void 0;
20140
- return /* @__PURE__ */ jsx108(
20282
+ return /* @__PURE__ */ jsx109(
20141
20283
  PropertyBase,
20142
20284
  {
20143
20285
  ...baseProps,
20144
20286
  hasValue,
20145
- icon: /* @__PURE__ */ jsx108(Text, { size: 24 }),
20146
- children: ({ invalid }) => /* @__PURE__ */ jsx108(
20287
+ icon: /* @__PURE__ */ jsx109(Text, { size: 24 }),
20288
+ children: ({ invalid }) => /* @__PURE__ */ jsx109(
20147
20289
  Textarea,
20148
20290
  {
20149
20291
  "data-name": "property-input",
@@ -20164,7 +20306,7 @@ var TextProperty = ({
20164
20306
  // src/components/utils/Polymorphic.tsx
20165
20307
  import { Slot } from "@radix-ui/react-slot";
20166
20308
  import { forwardRef as forwardRef33 } from "react";
20167
- import { jsx as jsx109 } from "react/jsx-runtime";
20309
+ import { jsx as jsx110 } from "react/jsx-runtime";
20168
20310
  var PolymorphicSlot = forwardRef33(function PolymorphicSlot2({
20169
20311
  children,
20170
20312
  asChild,
@@ -20172,7 +20314,7 @@ var PolymorphicSlot = forwardRef33(function PolymorphicSlot2({
20172
20314
  ...props
20173
20315
  }, ref) {
20174
20316
  const Component = asChild ? Slot : defaultComponent;
20175
- return /* @__PURE__ */ jsx109(Component, { ...props, ref, children });
20317
+ return /* @__PURE__ */ jsx110(Component, { ...props, ref, children });
20176
20318
  });
20177
20319
 
20178
20320
  // src/components/utils/Transition.tsx
@@ -20210,14 +20352,14 @@ function Transition({
20210
20352
  }
20211
20353
 
20212
20354
  // src/global-contexts/HightideProvider.tsx
20213
- import { jsx as jsx110 } from "react/jsx-runtime";
20355
+ import { jsx as jsx111 } from "react/jsx-runtime";
20214
20356
  var HightideProvider = ({
20215
20357
  children,
20216
20358
  theme,
20217
20359
  locale,
20218
20360
  config
20219
20361
  }) => {
20220
- return /* @__PURE__ */ jsx110(LocaleProvider, { ...locale, children: /* @__PURE__ */ jsx110(ThemeProvider, { ...theme, children: /* @__PURE__ */ jsx110(HightideConfigProvider, { ...config, children }) }) });
20362
+ return /* @__PURE__ */ jsx111(LocaleProvider, { ...locale, children: /* @__PURE__ */ jsx111(ThemeProvider, { ...theme, children: /* @__PURE__ */ jsx111(HightideConfigProvider, { ...config, children }) }) });
20221
20363
  };
20222
20364
 
20223
20365
  // src/hooks/focus/useFocusGuards.ts
@@ -20420,7 +20562,7 @@ var validateEmail = (email) => {
20420
20562
  };
20421
20563
 
20422
20564
  // src/hooks/useValidators.ts
20423
- import { useMemo as useMemo42 } from "react";
20565
+ import { useMemo as useMemo43 } from "react";
20424
20566
  var notEmpty = (value) => {
20425
20567
  if (!value) {
20426
20568
  return "notEmpty";
@@ -20470,7 +20612,7 @@ var UseValidators = {
20470
20612
  };
20471
20613
  var useTranslatedValidators = () => {
20472
20614
  const translation = useHightideTranslation();
20473
- return useMemo42(() => ({
20615
+ return useMemo43(() => ({
20474
20616
  notEmpty: (value) => {
20475
20617
  const result = notEmpty(value);
20476
20618
  if (result) {
@@ -20871,6 +21013,7 @@ export {
20871
21013
  SimpleSearch,
20872
21014
  SimpleSearchWithMapping,
20873
21015
  SingleSelectProperty,
21016
+ SortingList,
20874
21017
  StepperBar,
20875
21018
  StorageListener,
20876
21019
  Switch,