@exsto/ds 0.0.1-rc.5 → 0.0.1-rc.7

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 (27) hide show
  1. package/README.md +33 -0
  2. package/dist/chunks/toggle-C2c5oDaE.js +629 -0
  3. package/dist/chunks/toggle-C2c5oDaE.js.map +1 -0
  4. package/dist/ds/src/rich-text-editor.d.ts +8 -0
  5. package/dist/index.js +174 -576
  6. package/dist/index.js.map +1 -1
  7. package/dist/rich-text-editor.js +846 -0
  8. package/dist/rich-text-editor.js.map +1 -0
  9. package/dist/styles.css +221 -51
  10. package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.d.ts +7 -1
  11. package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +10 -2
  12. package/dist/ui/src/components/edyn/rich-text-content/allow-list.d.ts +11 -0
  13. package/dist/ui/src/components/edyn/rich-text-content/index.d.ts +2 -0
  14. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.d.ts +22 -0
  15. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.test.d.ts +8 -0
  16. package/dist/ui/src/components/edyn/rich-text-editor/extensions.d.ts +18 -0
  17. package/dist/ui/src/components/edyn/rich-text-editor/index.d.ts +3 -0
  18. package/dist/ui/src/components/edyn/rich-text-editor/mention-list.d.ts +17 -0
  19. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.d.ts +53 -0
  20. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.test.d.ts +6 -0
  21. package/dist/ui/src/components/edyn/rich-text-editor/serialize.d.ts +13 -0
  22. package/dist/ui/src/components/edyn/rich-text-editor/toolbar.d.ts +20 -0
  23. package/dist/ui/src/components/edyn/rich-text-editor/types.d.ts +68 -0
  24. package/dist/ui/src/components/ui/popover/popover.d.ts +1 -1
  25. package/dist/ui/src/components/ui/progress/progress.d.ts +38 -4
  26. package/dist/ui/src/index.d.ts +1 -0
  27. package/package.json +21 -1
package/dist/index.js CHANGED
@@ -1,17 +1,14 @@
1
+ import { A as ScrollBar, B as cn, C as RICH_TEXT_ATTRIBUTES, D as POPUP_ITEM_INDICATOR_CLASS, E as isAllowedRichTextHref, F as PopoverHeader, I as PopoverTitle, L as PopoverTrigger, M as Popover, N as PopoverContent, O as popupItemClass, P as PopoverDescription, R as Button, S as richTextToNodes, T as RICH_TEXT_LINK_PROTOCOLS, V as cssLength, _ as DropdownMenuTrigger, a as DropdownMenuContent, b as RICH_TEXT_MENTION_CLASS, c as DropdownMenuLabel, d as DropdownMenuRadioItem, f as DropdownMenuSeparator, g as DropdownMenuSubTrigger, h as DropdownMenuSubContent, i as DropdownMenuCheckboxItem, j as useMergedRefs, k as ScrollArea, l as DropdownMenuPortal, m as DropdownMenuSub, n as toggleVariants, o as DropdownMenuGroup, p as DropdownMenuShortcut, r as DropdownMenu, s as DropdownMenuItem, t as Toggle, u as DropdownMenuRadioGroup, v as Input, w as RICH_TEXT_ELEMENTS, x as RichTextContent, y as RICH_TEXT_BODY_CLASS, z as buttonVariants } from "./chunks/toggle-C2c5oDaE.js";
1
2
  import * as React from "react";
2
- import { createContext, isValidElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
- import { Button as Button$1 } from "@base-ui/react/button";
5
- import { clsx } from "clsx";
6
- import { twMerge } from "tailwind-merge";
7
5
  import { cva } from "class-variance-authority";
8
6
  import { Slider as Slider$1 } from "@base-ui/react/slider";
9
7
  import { IconAlertOctagon, IconAlertTriangle, IconArrowDown, IconCalendar, IconCheck, IconChevronDown, IconChevronLeft, IconChevronRight, IconCircleCheck, IconDots, IconInfoCircle, IconLayoutSidebar, IconLoader, IconMaximize, IconMinus, IconPlayerPauseFilled, IconPlayerPlayFilled, IconSearch, IconSelector, IconVolume, IconVolumeOff, IconX } from "@tabler/icons-react";
10
8
  import { DayPicker, getDefaultClassNames } from "react-day-picker";
11
- import { Popover as Popover$1 } from "@base-ui/react/popover";
12
9
  import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
13
10
  import { Combobox as Combobox$1 } from "@base-ui/react/combobox";
14
- import { ScrollArea as ScrollArea$1 } from "@base-ui/react/scroll-area";
11
+ import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
15
12
  import { useVirtualizer } from "@tanstack/react-virtual";
16
13
  import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
17
14
  import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
@@ -23,7 +20,6 @@ import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
23
20
  import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
24
21
  import { Command as Command$1 } from "cmdk";
25
22
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
26
- import { Input as Input$1 } from "@base-ui/react/input";
27
23
  import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
28
24
  import { DirectionProvider, useDirection } from "@base-ui/react/direction-provider";
29
25
  import { Menu } from "@base-ui/react/menu";
@@ -40,7 +36,6 @@ import { Radio } from "@base-ui/react/radio";
40
36
  import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
41
37
  import * as ResizablePrimitive from "react-resizable-panels";
42
38
  import { Select as Select$1 } from "@base-ui/react/select";
43
- import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
44
39
  import { Switch as Switch$1 } from "@base-ui/react/switch";
45
40
  import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
46
41
  import { Toast as Toast$1 } from "@base-ui/react/toast";
@@ -147,87 +142,6 @@ var NumberText = ({ element, shown, value, format = formatCount, className }) =>
147
142
  });
148
143
  };
149
144
  //#endregion
150
- //#region ../ui/src/lib/utils.ts
151
- var cn = (...inputs) => twMerge(clsx(inputs));
152
- /**
153
- * Normalise a size prop to a CSS length.
154
- *
155
- * Bare numbers become px, which is also what a bare numeric *string* means: an
156
- * element attribute arrives as a string, so `width="480"` and `width={480}` have
157
- * to land on the same value. Anything with a unit, a percentage or a keyword
158
- * passes through untouched.
159
- */
160
- var cssLength = (value) => {
161
- if (value == null || value === "") return;
162
- if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
163
- return /^-?\d*\.?\d+$/.test(value.trim()) ? `${value.trim()}px` : value;
164
- };
165
- //#endregion
166
- //#region ../ui/src/components/ui/button/button.tsx
167
- var buttonVariants = cva("group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all motion-reduce:transition-none motion-reduce:transform-none outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
168
- variants: {
169
- variant: {
170
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
171
- outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
172
- secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
173
- ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
174
- destructive: "bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/15 dark:hover:bg-destructive/20 dark:focus-visible:ring-destructive/40",
175
- link: "text-primary underline-offset-4 hover:underline"
176
- },
177
- size: {
178
- default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
179
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
180
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
181
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
182
- icon: "size-8",
183
- "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
184
- "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
185
- "icon-lg": "size-9"
186
- }
187
- },
188
- defaultVariants: {
189
- variant: "default",
190
- size: "default"
191
- }
192
- });
193
- /**
194
- * Whether this Button is rendering a link rather than a button, so it can keep
195
- * link semantics. Covers `render={<a href="..." />}` and a routing component
196
- * that takes an `href` (Next's Link). A component with a different prop for its
197
- * destination (react-router's `to`) cannot be recognised from here: give those
198
- * `nativeButton={false} role={undefined}` directly.
199
- */
200
- var rendersALink = (render) => isValidElement(render) && (render.type === "a" || typeof render.props.href === "string");
201
- /**
202
- * A link that looks like a button is still a link, and has to be announced as
203
- * one: it opens in a new tab, it has an address, Enter follows it and Space
204
- * scrolls the page.
205
- *
206
- * Base UI needs telling, in two steps. Rendering an anchor while `nativeButton`
207
- * is true (its default) warns in development and puts `type="button"` on the
208
- * anchor; following the warning and passing `nativeButton={false}` then adds
209
- * `role="button"`, which is what takes the link semantics away. So this does
210
- * both: non-native, with the role and the tabindex Base UI would add cleared
211
- * again. An explicit prop from the caller still wins over either.
212
- */
213
- var LINK_PROPS = {
214
- nativeButton: false,
215
- role: void 0,
216
- tabIndex: void 0
217
- };
218
- var Button = ({ className, variant = "default", size = "default", ...props }) => {
219
- return /* @__PURE__ */ jsx(Button$1, {
220
- "data-slot": "button",
221
- ...rendersALink(props.render) ? LINK_PROPS : {},
222
- className: cn(buttonVariants({
223
- variant,
224
- size,
225
- className
226
- })),
227
- ...props
228
- });
229
- };
230
- //#endregion
231
145
  //#region ../ui/src/components/ui/slider/slider.tsx
232
146
  var Slider = ({ className, value, defaultValue, min, max, step, disabled, onValueChange, onValueCommitted, name, minStepsBetweenValues, "aria-label": ariaLabel, ...props }) => {
233
147
  const thumbValues = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [value ?? defaultValue ?? min ?? 0];
@@ -581,55 +495,6 @@ var CalendarDayButton = ({ className, day, modifiers, locale, ...props }) => {
581
495
  });
582
496
  };
583
497
  //#endregion
584
- //#region ../ui/src/components/ui/popover/popover.tsx
585
- var Popover = ({ ...props }) => {
586
- return /* @__PURE__ */ jsx(Popover$1.Root, {
587
- "data-slot": "popover",
588
- ...props
589
- });
590
- };
591
- var PopoverTrigger = ({ ...props }) => {
592
- return /* @__PURE__ */ jsx(Popover$1.Trigger, {
593
- "data-slot": "popover-trigger",
594
- ...props
595
- });
596
- };
597
- var PopoverContent = ({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) => {
598
- return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, {
599
- align,
600
- alignOffset,
601
- side,
602
- sideOffset,
603
- className: "isolate z-50",
604
- children: /* @__PURE__ */ jsx(Popover$1.Popup, {
605
- "data-slot": "popover-content",
606
- className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 motion-reduce:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
607
- ...props
608
- })
609
- }) });
610
- };
611
- var PopoverHeader = ({ className, ...props }) => {
612
- return /* @__PURE__ */ jsx("div", {
613
- "data-slot": "popover-header",
614
- className: cn("flex flex-col gap-0.5 text-sm", className),
615
- ...props
616
- });
617
- };
618
- var PopoverTitle = ({ className, ...props }) => {
619
- return /* @__PURE__ */ jsx(Popover$1.Title, {
620
- "data-slot": "popover-title",
621
- className: cn("font-medium", className),
622
- ...props
623
- });
624
- };
625
- var PopoverDescription = ({ className, ...props }) => {
626
- return /* @__PURE__ */ jsx(Popover$1.Description, {
627
- "data-slot": "popover-description",
628
- className: cn("text-muted-foreground", className),
629
- ...props
630
- });
631
- };
632
- //#endregion
633
498
  //#region ../ui/src/hooks/use-mobile.ts
634
499
  var MOBILE_BREAKPOINT = 768;
635
500
  var useIsMobile = () => {
@@ -650,7 +515,7 @@ var useIsMobile = () => {
650
515
  var dayToDate = (value) => value === void 0 ? void 0 : /* @__PURE__ */ new Date(`${value}T12:00:00`);
651
516
  var dateToDay = (date) => date === void 0 ? void 0 : `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`;
652
517
  /** A range of calendar days, either end optional; two months side by side, one on a phone. */
653
- var DateRangePicker = ({ id, value, onValueChange, placeholder = "Select date range", locale = "en-GB", "aria-label": ariaLabel, className }) => {
518
+ var DateRangePicker = ({ id, value, onValueChange, placeholder = "Select date range", locale = "en-GB", summary = "range", "aria-label": ariaLabel, className }) => {
654
519
  const isMobile = useIsMobile();
655
520
  const from = dayToDate(value.from);
656
521
  const to = dayToDate(value.to);
@@ -665,12 +530,13 @@ var DateRangePicker = ({ id, value, onValueChange, placeholder = "Select date ra
665
530
  id,
666
531
  "aria-label": ariaLabel,
667
532
  "data-slot": "date-range-picker-trigger",
533
+ "data-set": ends.length > 0 ? "" : void 0,
668
534
  variant: "outline",
669
535
  className: cn("w-full min-w-0 justify-start font-normal", ends.length === 0 && "text-muted-foreground", className)
670
536
  }),
671
537
  children: [/* @__PURE__ */ jsx(IconCalendar, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", {
672
538
  className: "truncate",
673
- children: ends.length === 0 ? placeholder : ends.join(" – ")
539
+ children: ends.length === 0 || summary === "label" ? placeholder : ends.join(" – ")
674
540
  })]
675
541
  }), /* @__PURE__ */ jsx(PopoverContent, {
676
542
  align: "start",
@@ -814,146 +680,41 @@ var InitialsAvatar = ({ name, photoUrl, size = "md", className, autoColor = true
814
680
  });
815
681
  };
816
682
  //#endregion
817
- //#region ../ui/src/hooks/use-merged-refs.ts
818
- var assignRef = (ref, value) => {
819
- if (typeof ref === "function") ref(value);
820
- else if (ref !== null) ref.current = value;
821
- };
822
- var mergeRefs = (...refs) => {
823
- return (node) => {
824
- for (const ref of refs) if (ref) assignRef(ref, node);
825
- };
826
- };
827
- var useMergedRefs = (...refs) => {
828
- return useCallback(mergeRefs(...refs), [...refs]);
829
- };
830
- //#endregion
831
- //#region ../ui/src/components/ui/scroll-area/scroll-area.tsx
832
- var ScrollBar = ({ className, orientation = "vertical", visibility = "hover", ...props }) => {
833
- return /* @__PURE__ */ jsx(ScrollArea$1.Scrollbar, {
834
- "data-slot": "scroll-area-scrollbar",
835
- orientation,
836
- className: cn("peer/scrollbar z-100 flex touch-none select-none motion-safe:transition-opacity motion-safe:duration-150", orientation === "vertical" && "h-full w-2 border-l border-l-transparent p-px", orientation === "horizontal" && "h-2 flex-col border-t border-t-transparent p-px", visibility !== "always" && "opacity-0 data-scrolling:opacity-100", visibility === "hover" && "data-hovering:opacity-100 group-hover/scroll-area:opacity-100", className),
837
- ...props,
838
- children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, { className: "relative flex-1 rounded-full bg-muted-foreground/50 transition-colors hover:bg-muted-foreground/70 data-scrolling:bg-muted-foreground/70" })
683
+ //#region ../ui/src/components/ui/tooltip/tooltip.tsx
684
+ var TooltipProvider = ({ delay = 0, ...props }) => {
685
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
686
+ "data-slot": "tooltip-provider",
687
+ delay,
688
+ ...props
839
689
  });
840
690
  };
841
- /**
842
- * Which axes fade, published for scroll-fade.css to key its mask off. The
843
- * stylesheet reaches this element's own viewport through a child combinator, so a
844
- * ScrollArea nested in another one cannot pick up its ancestor's edges.
845
- */
846
- /**
847
- * Base UI gives the root, the viewport and the content `role="presentation"`. On
848
- * a div that changes nothing for a screen reader, but it is an EXPLICIT role, and
849
- * axe treats explicit presentation children as foreign to a parent that owns
850
- * required children. A ScrollArea inside `role="menu"` or `role="listbox"` then
851
- * fails as a critical aria-required-children violation, while the same div with
852
- * no role passes straight through. Clearing it is what makes a ScrollArea legal
853
- * in a popup list. A spread because the literal `role={undefined}` is flagged by
854
- * the a11y lint rule, which cannot tell it from an invalid role.
855
- */
856
- var NO_ROLE = { role: void 0 };
857
- /** Base UI makes the viewport a tab stop (0, or -1 with nothing to scroll); undefined takes that away. */
858
- var NO_TAB_STOP = { tabIndex: void 0 };
859
- var FADE_AXIS = {
860
- vertical: "block",
861
- horizontal: "inline",
862
- both: "both"
691
+ var Tooltip = ({ ...props }) => {
692
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, {
693
+ "data-slot": "tooltip",
694
+ ...props
695
+ });
863
696
  };
864
- /**
865
- * Themed scroll container (Base UI): overflowing content scrolls INSIDE the component
866
- * with a slim overlay scrollbar instead of exposing a native browser scrollbar. House
867
- * rule: wide/tall content (tables, lists, code) always goes through this, never a bare
868
- * overflow-* utility.
869
- *
870
- * Cap the height with a plain class on the component itself, e.g.
871
- * `<ScrollArea className="max-h-88">`. The viewport picks the cap up through
872
- * `max-h-inherit`, which matters because the viewport is the element that actually
873
- * scrolls: a cap that lands only on the root leaves tall content spilling out
874
- * underneath with no scrollbar, and that reads as a working height right up until the
875
- * content outgrows it.
876
- *
877
- * `fade` fades out each edge that is currently hiding content, rather than always
878
- * fading one: a permanent fade is a lie half the time, dimming the last row that fits
879
- * and promising more below when the reader is already at the end. It is cut into the
880
- * content by a mask (@edyn/theme/scroll-fade.css), so it needs no surface colour and
881
- * reads correctly over a tint, a gradient or a glow. A host that keeps something
882
- * unscrolled at the top, such as a sticky table header, exempts that band by setting
883
- * --scroll-fade-offset on the ScrollArea. The static faded-* utilities in
884
- * @edyn/theme/utilities.css are the other tool, for DECORATIVE edges that do not
885
- * track scroll position.
886
- *
887
- * The viewport publishes its size as --scroll-area-width/--scroll-area-height CSS vars
888
- * so children can size against the visible area.
889
- */
890
- var ScrollArea = ({ className, children, orientation = "vertical", type = "hover", fade = false, fadeFrom = "card", scrollbarClassName, viewportId, viewportRef, viewportClassName, scrollRestorationId, focusable = true, viewPortId, viewPortRef, viewPortClassName, scrollVerticalClassName, scrollHorizontalClassName, ...props }) => {
891
- const refInner = useRef(null);
892
- const refsViewport = useMergedRefs(refInner, viewportRef ?? viewPortRef);
893
- useEffect(() => {
894
- const el = refInner.current;
895
- if (!el) return;
896
- const observer = new ResizeObserver(() => {
897
- el.style.setProperty("--scroll-area-width", `${el.clientWidth}px`);
898
- el.style.setProperty("--scroll-area-height", `${el.clientHeight}px`);
899
- });
900
- observer.observe(el);
901
- return () => {
902
- observer.disconnect();
903
- };
904
- }, []);
905
- return /* @__PURE__ */ jsxs(ScrollArea$1.Root, {
906
- "data-slot": "scroll-area",
907
- "data-focus": "inset",
908
- className: cn("group/scroll-area relative grid min-w-0 grid-rows-1 overflow-hidden", className),
909
- "data-fade": fade ? FADE_AXIS[orientation] : void 0,
910
- ...NO_ROLE,
911
- ...props,
912
- children: [
913
- (orientation === "vertical" || orientation === "both") && /* @__PURE__ */ jsx(ScrollBar, {
914
- orientation: "vertical",
915
- visibility: type,
916
- className: cn(scrollbarClassName, scrollVerticalClassName)
917
- }),
918
- (orientation === "horizontal" || orientation === "both") && /* @__PURE__ */ jsx(ScrollBar, {
919
- orientation: "horizontal",
920
- visibility: type,
921
- className: cn(scrollbarClassName, scrollHorizontalClassName)
922
- }),
923
- /* @__PURE__ */ jsx(ScrollArea$1.Corner, {}),
924
- /* @__PURE__ */ jsx(ScrollArea$1.Viewport, {
925
- "data-slot": "scroll-area-viewport",
926
- id: viewportId ?? viewPortId,
927
- ref: refsViewport,
928
- "data-scroll-restoration-id": scrollRestorationId,
929
- ...NO_ROLE,
930
- ...focusable ? null : NO_TAB_STOP,
931
- className: cn("max-h-inherit w-full rounded-[inherit]", orientation === "vertical" && "overflow-x-hidden!", orientation === "horizontal" && "overflow-y-hidden!", viewportClassName ?? viewPortClassName),
932
- children: /* @__PURE__ */ jsx(ScrollArea$1.Content, {
933
- ...NO_ROLE,
934
- style: orientation === "vertical" ? { minWidth: 0 } : void 0,
935
- children
936
- })
937
- })
938
- ]
697
+ var TooltipTrigger = ({ ...props }) => {
698
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
699
+ "data-slot": "tooltip-trigger",
700
+ ...props
939
701
  });
940
702
  };
941
- //#endregion
942
- //#region ../ui/src/lib/popup-list.ts
943
- var ITEM_BASE = "relative flex min-h-8 cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none select-none [&>svg]:pointer-events-none [&>svg]:shrink-0 [&>svg]:text-muted-foreground [&>svg:not([class*='size-'])]:size-4";
944
- var ITEM_STATES = {
945
- "base-ui": "data-highlighted:bg-foreground/6 data-highlighted:[&>svg]:text-foreground data-[selected]:font-medium data-disabled:pointer-events-none data-disabled:opacity-50",
946
- cmdk: "data-[selected=true]:bg-foreground/6 data-[selected=true]:[&>svg]:text-foreground data-[checked=true]:font-medium data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50"
947
- };
948
- /** The shared item look. `checkable` leaves room at the end for the check. */
949
- var popupItemClass = (flavor = "base-ui", checkable = false) => cn(ITEM_BASE, ITEM_STATES[flavor], checkable && "pr-8");
950
- /**
951
- * The check's slot, at the end of the item and the same size whether or not the
952
- * check is in it, so a list does not shift as the choice moves.
953
- */
954
- var POPUP_ITEM_INDICATOR_CLASS = "pointer-events-none absolute right-2 flex size-4 items-center justify-center text-foreground";
955
- /** A group's heading in any of these lists. */
956
- var POPUP_GROUP_LABEL_CLASS = "px-2 py-1.5 text-xs font-medium text-muted-foreground";
703
+ var TooltipContent = ({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) => {
704
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
705
+ align,
706
+ alignOffset,
707
+ side,
708
+ sideOffset,
709
+ className: "isolate z-50",
710
+ children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
711
+ "data-slot": "tooltip-content",
712
+ className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", "motion-reduce:animate-none", className),
713
+ ...props,
714
+ children: [children, /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
715
+ })
716
+ }) });
717
+ };
957
718
  //#endregion
958
719
  //#region ../ui/src/components/edyn/multi-select/multi-select.tsx
959
720
  var DEFAULT_MULTI_SELECT_LABELS = {
@@ -983,42 +744,68 @@ var resolveChosen = (value, options, selectedOptions = []) => {
983
744
  });
984
745
  };
985
746
  /** What the trigger says: the placeholder, the one picked, or a count. */
986
- var summarize = (chosen, placeholder, labels) => {
747
+ var summarize = (chosen, placeholder, labels, summary = "selection") => {
987
748
  if (chosen.length === 0) return placeholder;
749
+ if (summary === "label") return labels.selectedCount(chosen.length);
988
750
  return chosen.length === 1 ? chosen[0]?.label ?? "" : labels.selectedCount(chosen.length);
989
751
  };
752
+ /** Every chosen name, for a tooltip on a trigger whose text is cut. With `label` the names are not shown, so it is the text itself. */
753
+ var fullSelection = (chosen, placeholder, labels, summary = "selection") => summary === "selection" && chosen.length > 0 ? chosen.map((option) => option.label).join(", ") : summarize(chosen, placeholder, labels, summary);
990
754
  var POPUP = "flex max-h-(--available-height) w-(--anchor-width) min-w-64 max-w-sm origin-(--transform-origin) flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md outline-none duration-100 motion-reduce:animate-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95";
991
755
  var TRIGGER = "flex h-8 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-lg border border-input bg-transparent px-2.5 text-sm text-foreground transition-colors outline-none focus-visible:border-ring disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive data-popup-open:border-ring dark:bg-input/30";
992
- var Option = ({ option, index, style, measure }) => /* @__PURE__ */ jsxs(Combobox$1.Item, {
993
- value: option,
994
- index,
995
- ref: measure,
996
- "data-index": index,
997
- style,
998
- "data-slot": "multi-select-item",
999
- className: cn(popupItemClass("base-ui"), "group"),
1000
- children: [
1001
- /* @__PURE__ */ jsx("span", {
1002
- "data-slot": "multi-select-item-indicator",
1003
- "aria-hidden": "true",
1004
- className: "flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground transition-colors group-data-[selected]:border-primary group-data-[selected]:bg-primary",
1005
- children: /* @__PURE__ */ jsx(IconCheck, {
1006
- className: "size-3 opacity-0 group-data-[selected]:opacity-100",
1007
- stroke: 3
756
+ var Option = ({ option, index, style, measure, highlighted }) => {
757
+ const [cut, setCut] = useState(false);
758
+ const measureLabel = useCallback((element) => {
759
+ if (!element) return;
760
+ const measureCut = () => setCut(element.scrollWidth > element.clientWidth);
761
+ measureCut();
762
+ if (typeof ResizeObserver === "undefined") return;
763
+ const observer = new ResizeObserver(measureCut);
764
+ observer.observe(element);
765
+ return () => observer.disconnect();
766
+ }, []);
767
+ return /* @__PURE__ */ jsxs(Combobox$1.Item, {
768
+ value: option,
769
+ index,
770
+ ref: measure,
771
+ "data-index": index,
772
+ style,
773
+ "data-slot": "multi-select-item",
774
+ className: cn(popupItemClass("base-ui"), "group"),
775
+ children: [
776
+ /* @__PURE__ */ jsx("span", {
777
+ "data-slot": "multi-select-item-indicator",
778
+ "aria-hidden": "true",
779
+ className: "flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground transition-colors group-data-[selected]:border-primary group-data-[selected]:bg-primary",
780
+ children: /* @__PURE__ */ jsx(IconCheck, {
781
+ className: "size-3 opacity-0 group-data-[selected]:opacity-100",
782
+ stroke: 3
783
+ })
784
+ }),
785
+ option.leading,
786
+ /* @__PURE__ */ jsxs(Tooltip, {
787
+ open: highlighted && cut,
788
+ children: [/* @__PURE__ */ jsx(TooltipTrigger, {
789
+ "data-slot": "multi-select-item-label",
790
+ "data-overflowing": cut ? "" : void 0,
791
+ render: /* @__PURE__ */ jsx("span", {
792
+ ref: measureLabel,
793
+ className: "min-w-0 flex-1 truncate"
794
+ }),
795
+ children: option.label
796
+ }, option.label), /* @__PURE__ */ jsx(TooltipContent, {
797
+ side: "right",
798
+ children: option.label
799
+ })]
800
+ }),
801
+ option.count !== void 0 && /* @__PURE__ */ jsx("span", {
802
+ className: "text-xs text-muted-foreground tabular-nums",
803
+ children: option.count
1008
804
  })
1009
- }),
1010
- option.leading,
1011
- /* @__PURE__ */ jsx("span", {
1012
- className: "min-w-0 flex-1 truncate",
1013
- children: option.label
1014
- }),
1015
- option.count !== void 0 && /* @__PURE__ */ jsx("span", {
1016
- className: "text-xs text-muted-foreground tabular-nums",
1017
- children: option.count
1018
- })
1019
- ]
1020
- });
1021
- var Options = ({ scroller, scrollTo, busy }) => {
805
+ ]
806
+ });
807
+ };
808
+ var Options = ({ scroller, scrollTo, busy, highlightedValue }) => {
1022
809
  const items = Combobox$1.useFilteredItems();
1023
810
  const virtual = items.length > 100;
1024
811
  const [mounted, setMounted] = useState(false);
@@ -1042,7 +829,8 @@ var Options = ({ scroller, scrollTo, busy }) => {
1042
829
  className: "p-1 outline-none",
1043
830
  children: items.map((option, index) => /* @__PURE__ */ jsx(Option, {
1044
831
  option,
1045
- index
832
+ index,
833
+ highlighted: highlightedValue === option.value
1046
834
  }, option.value))
1047
835
  });
1048
836
  return /* @__PURE__ */ jsx(Combobox$1.List, {
@@ -1055,6 +843,7 @@ var Options = ({ scroller, scrollTo, busy }) => {
1055
843
  return option === void 0 ? null : /* @__PURE__ */ jsx(Option, {
1056
844
  option,
1057
845
  index: row.index,
846
+ highlighted: highlightedValue === option.value,
1058
847
  measure: virtualizer.measureElement,
1059
848
  style: {
1060
849
  position: "absolute",
@@ -1078,7 +867,7 @@ var Options = ({ scroller, scrollTo, busy }) => {
1078
867
  * server: the caller fetches the options for the typed text, and says when they are loading,
1079
868
  * failed, or have another page.
1080
869
  */
1081
- var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChange, id, disabled = false, className, onSearchChange, searchDelay = 250, selectedOptions, loading = false, error = false, onRetry, hasMore = false, onLoadMore, loadingMore = false, labels: labelOverrides, ...rest }) => {
870
+ var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChange, id, disabled = false, className, onSearchChange, searchDelay = 250, selectedOptions, loading = false, error = false, onRetry, hasMore = false, onLoadMore, loadingMore = false, labels: labelOverrides, summary = "selection", ...rest }) => {
1082
871
  const labels = useMemo(() => ({
1083
872
  ...DEFAULT_MULTI_SELECT_LABELS,
1084
873
  ...labelOverrides
@@ -1096,6 +885,9 @@ var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChan
1096
885
  const refScroller = useRef(null);
1097
886
  const refScrollTo = useRef(() => void 0);
1098
887
  const refTimer = useRef(void 0);
888
+ const refTriggerText = useRef(null);
889
+ const [popupOpen, setPopupOpen] = useState(false);
890
+ const [highlightedValue, setHighlightedValue] = useState(null);
1099
891
  const refReported = useRef(void 0);
1100
892
  const refOpen = useRef(false);
1101
893
  const errorMessage = typeof error === "string" ? error : labels.error;
@@ -1119,6 +911,8 @@ var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChan
1119
911
  },
1120
912
  onOpenChange: (open) => {
1121
913
  window.clearTimeout(refTimer.current);
914
+ setPopupOpen(open);
915
+ if (!open) setHighlightedValue(null);
1122
916
  refOpen.current = open;
1123
917
  refReported.current = open ? "" : void 0;
1124
918
  if (open && onSearchChange !== void 0) onSearchChange("");
@@ -1126,21 +920,33 @@ var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChan
1126
920
  itemToStringLabel: (option) => option.label,
1127
921
  isItemEqualToValue: (a, b) => a.value === b.value,
1128
922
  virtualized: items.length > 100,
1129
- onItemHighlighted: (_, details) => {
923
+ onItemHighlighted: (item, details) => {
924
+ setHighlightedValue(item?.value ?? null);
1130
925
  if (details.reason === "keyboard" && details.index >= 0) refScrollTo.current(details.index);
1131
926
  },
1132
- children: [/* @__PURE__ */ jsxs(Combobox$1.Trigger, {
1133
- id,
1134
- "aria-label": rest["aria-label"],
1135
- "data-slot": "multi-select-trigger",
1136
- className: cn(TRIGGER, className),
1137
- children: [/* @__PURE__ */ jsx("span", {
1138
- className: cn("min-w-0 flex-1 truncate text-left", chosen.length === 0 && "text-muted-foreground"),
1139
- children: summarize(chosen, placeholder, labels)
1140
- }), /* @__PURE__ */ jsx(IconChevronDown, {
1141
- "aria-hidden": "true",
1142
- className: "size-4 shrink-0 text-muted-foreground"
1143
- })]
927
+ children: [/* @__PURE__ */ jsxs(Tooltip, {
928
+ disabled: popupOpen,
929
+ onOpenChange: (open, details) => {
930
+ const element = refTriggerText.current;
931
+ if (open && !(element && element.scrollWidth > element.clientWidth)) details.cancel();
932
+ },
933
+ children: [/* @__PURE__ */ jsxs(TooltipTrigger, {
934
+ "data-slot": "multi-select-trigger",
935
+ render: /* @__PURE__ */ jsx(Combobox$1.Trigger, {
936
+ id,
937
+ "aria-label": rest["aria-label"],
938
+ "data-set": chosen.length > 0 ? "" : void 0,
939
+ className: cn(TRIGGER, className)
940
+ }),
941
+ children: [/* @__PURE__ */ jsx("span", {
942
+ ref: refTriggerText,
943
+ className: cn("min-w-0 flex-1 truncate text-left", chosen.length === 0 && "text-muted-foreground"),
944
+ children: summarize(chosen, placeholder, labels, summary)
945
+ }), /* @__PURE__ */ jsx(IconChevronDown, {
946
+ "aria-hidden": "true",
947
+ className: "size-4 shrink-0 text-muted-foreground"
948
+ })]
949
+ }), /* @__PURE__ */ jsx(TooltipContent, { children: fullSelection(chosen, placeholder, labels, summary) })]
1144
950
  }), /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
1145
951
  sideOffset: 4,
1146
952
  align: "start",
@@ -1185,7 +991,8 @@ var MultiSelect = ({ placeholder, searchPlaceholder, options, value, onValueChan
1185
991
  children: /* @__PURE__ */ jsx(Options, {
1186
992
  scroller: refScroller,
1187
993
  scrollTo: refScrollTo,
1188
- busy: loading
994
+ busy: loading,
995
+ highlightedValue
1189
996
  })
1190
997
  }),
1191
998
  hasMore && onLoadMore !== void 0 && /* @__PURE__ */ jsx("div", {
@@ -2470,16 +2277,6 @@ var DialogDescription = ({ className, ...props }) => {
2470
2277
  });
2471
2278
  };
2472
2279
  //#endregion
2473
- //#region ../ui/src/components/ui/input/input.tsx
2474
- var Input = ({ className, type, ...props }) => {
2475
- return /* @__PURE__ */ jsx(Input$1, {
2476
- type,
2477
- "data-slot": "input",
2478
- className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
2479
- ...props
2480
- });
2481
- };
2482
- //#endregion
2483
2280
  //#region ../ui/src/components/ui/textarea/textarea.tsx
2484
2281
  var Textarea = ({ className, ...props }) => {
2485
2282
  return /* @__PURE__ */ jsx("textarea", {
@@ -2583,7 +2380,7 @@ var CommandInput = ({ className, ...props }) => {
2583
2380
  "data-slot": "command-input-wrapper",
2584
2381
  className: "border-b border-border p-1",
2585
2382
  children: /* @__PURE__ */ jsxs(InputGroup, {
2586
- className: "h-8 border-transparent bg-transparent shadow-none *:data-[slot=input-group-addon]:pl-2",
2383
+ className: "h-8 border-transparent bg-transparent shadow-none *:data-[slot=input-group-addon]:pl-2 dark:bg-transparent",
2587
2384
  children: [/* @__PURE__ */ jsx(Command$1.Input, {
2588
2385
  "data-slot": "command-input",
2589
2386
  className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
@@ -2867,157 +2664,6 @@ var DrawerDescription = ({ className, ...props }) => {
2867
2664
  });
2868
2665
  };
2869
2666
  //#endregion
2870
- //#region ../ui/src/components/ui/dropdown-menu/dropdown-menu.tsx
2871
- var DropdownMenu = ({ ...props }) => {
2872
- return /* @__PURE__ */ jsx(Menu.Root, {
2873
- "data-slot": "dropdown-menu",
2874
- ...props
2875
- });
2876
- };
2877
- var DropdownMenuPortal = ({ ...props }) => {
2878
- return /* @__PURE__ */ jsx(Menu.Portal, {
2879
- "data-slot": "dropdown-menu-portal",
2880
- ...props
2881
- });
2882
- };
2883
- var DropdownMenuTrigger = ({ ...props }) => {
2884
- return /* @__PURE__ */ jsx(Menu.Trigger, {
2885
- "data-slot": "dropdown-menu-trigger",
2886
- ...props
2887
- });
2888
- };
2889
- /**
2890
- * Scrolls inside a DS ScrollArea like the other popup lists, with the bar shown
2891
- * for as long as the menu overflows and a fade on whichever end is cut off.
2892
- *
2893
- * Base UI puts `role="menu"` on this popup itself and offers no inner list part
2894
- * to move it onto, so the ScrollArea sits INSIDE the role. That is only legal
2895
- * because ScrollArea drops the `role="presentation"` Base UI gives its root,
2896
- * viewport and content: a menu may not own presentation wrappers (axe reports
2897
- * a critical aria-required-children violation), but it may own plain divs.
2898
- * e2e/a11y.spec.ts scans the open menu in both themes to keep it that way.
2899
- */
2900
- var DropdownMenuContent = ({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, children, ...props }) => {
2901
- return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
2902
- className: "isolate z-50 outline-none",
2903
- align,
2904
- alignOffset,
2905
- side,
2906
- sideOffset,
2907
- children: /* @__PURE__ */ jsx(Menu.Popup, {
2908
- "data-slot": "dropdown-menu-content",
2909
- className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", "motion-reduce:animate-none", className),
2910
- ...props,
2911
- children: /* @__PURE__ */ jsx(ScrollArea, {
2912
- type: "always",
2913
- fade: true,
2914
- focusable: false,
2915
- className: "max-h-inherit",
2916
- children: /* @__PURE__ */ jsx("div", {
2917
- className: "p-1",
2918
- children
2919
- })
2920
- })
2921
- })
2922
- }) });
2923
- };
2924
- var DropdownMenuGroup = ({ ...props }) => {
2925
- return /* @__PURE__ */ jsx(Menu.Group, {
2926
- "data-slot": "dropdown-menu-group",
2927
- ...props
2928
- });
2929
- };
2930
- var DropdownMenuLabel = ({ className, inset, ...props }) => {
2931
- return /* @__PURE__ */ jsx(Menu.GroupLabel, {
2932
- "data-slot": "dropdown-menu-label",
2933
- "data-inset": inset,
2934
- className: cn(POPUP_GROUP_LABEL_CLASS, "data-[inset=true]:pl-7", className),
2935
- ...props
2936
- });
2937
- };
2938
- var DropdownMenuItem = ({ className, inset, variant = "default", ...props }) => {
2939
- return /* @__PURE__ */ jsx(Menu.Item, {
2940
- "data-slot": "dropdown-menu-item",
2941
- "data-inset": inset,
2942
- "data-variant": variant,
2943
- className: cn("group/dropdown-menu-item", popupItemClass(), "data-[inset=true]:pl-7", "data-[variant=destructive]:text-destructive data-[variant=destructive]:[&>svg]:text-destructive", "data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive", className),
2944
- ...props
2945
- });
2946
- };
2947
- var DropdownMenuSub = ({ ...props }) => {
2948
- return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
2949
- "data-slot": "dropdown-menu-sub",
2950
- ...props
2951
- });
2952
- };
2953
- var DropdownMenuSubTrigger = ({ className, inset, children, ...props }) => {
2954
- return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
2955
- "data-slot": "dropdown-menu-sub-trigger",
2956
- "data-inset": inset,
2957
- className: cn(popupItemClass(), "data-[inset=true]:pl-7 data-popup-open:bg-foreground/6 data-popup-open:[&>svg]:text-foreground", className),
2958
- ...props,
2959
- children: [children, /* @__PURE__ */ jsx(IconChevronRight, { className: "ml-auto" })]
2960
- });
2961
- };
2962
- var DropdownMenuSubContent = ({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) => {
2963
- return /* @__PURE__ */ jsx(DropdownMenuContent, {
2964
- "data-slot": "dropdown-menu-sub-content",
2965
- className: cn("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", "motion-reduce:animate-none", className),
2966
- align,
2967
- alignOffset,
2968
- side,
2969
- sideOffset,
2970
- ...props
2971
- });
2972
- };
2973
- var DropdownMenuCheckboxItem = ({ className, children, checked, inset, ...props }) => {
2974
- return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
2975
- "data-slot": "dropdown-menu-checkbox-item",
2976
- "data-inset": inset,
2977
- className: cn(popupItemClass("base-ui", true), "data-checked:font-medium data-[inset=true]:pl-7", className),
2978
- checked,
2979
- ...props,
2980
- children: [/* @__PURE__ */ jsx("span", {
2981
- className: POPUP_ITEM_INDICATOR_CLASS,
2982
- "data-slot": "dropdown-menu-checkbox-item-indicator",
2983
- children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
2984
- }), children]
2985
- });
2986
- };
2987
- var DropdownMenuRadioGroup = ({ ...props }) => {
2988
- return /* @__PURE__ */ jsx(Menu.RadioGroup, {
2989
- "data-slot": "dropdown-menu-radio-group",
2990
- ...props
2991
- });
2992
- };
2993
- var DropdownMenuRadioItem = ({ className, children, inset, ...props }) => {
2994
- return /* @__PURE__ */ jsxs(Menu.RadioItem, {
2995
- "data-slot": "dropdown-menu-radio-item",
2996
- "data-inset": inset,
2997
- className: cn(popupItemClass("base-ui", true), "data-checked:font-medium data-[inset=true]:pl-7", className),
2998
- ...props,
2999
- children: [/* @__PURE__ */ jsx("span", {
3000
- className: POPUP_ITEM_INDICATOR_CLASS,
3001
- "data-slot": "dropdown-menu-radio-item-indicator",
3002
- children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
3003
- }), children]
3004
- });
3005
- };
3006
- var DropdownMenuSeparator = ({ className, ...props }) => {
3007
- return /* @__PURE__ */ jsx(Menu.Separator, {
3008
- "data-slot": "dropdown-menu-separator",
3009
- className: cn("-mx-1 my-1 h-px bg-border", className),
3010
- ...props
3011
- });
3012
- };
3013
- var DropdownMenuShortcut = ({ className, ...props }) => {
3014
- return /* @__PURE__ */ jsx("span", {
3015
- "data-slot": "dropdown-menu-shortcut",
3016
- className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
3017
- ...props
3018
- });
3019
- };
3020
- //#endregion
3021
2667
  //#region ../ui/src/components/ui/empty/empty.tsx
3022
2668
  var Empty = ({ className, ...props }) => {
3023
2669
  return /* @__PURE__ */ jsx("div", {
@@ -3877,31 +3523,48 @@ var Pagination = ({ page, count, onPageChange, siblingCount = 1, className }) =>
3877
3523
  //#endregion
3878
3524
  //#region ../ui/src/components/ui/progress/progress.tsx
3879
3525
  /**
3880
- * The fill's colour, and the track's tint of the same colour. A closed set of semantic
3881
- * tones rather than a class string, so a bar cannot carry a colour the theme does not
3882
- * define and dark mode and a re-theme keep working.
3526
+ * The tones: a closed set of semantic colours rather than a class string, so a bar cannot carry a
3527
+ * colour the theme does not define and dark mode and a re-theme keep working. Each is the theme token
3528
+ * the fill uses; the track is a 20% tint of the same token.
3883
3529
  */
3884
- var progressTrackVariants = cva("relative h-2 w-full overflow-hidden rounded-full", {
3885
- variants: { tone: {
3886
- default: "bg-primary/20",
3887
- info: "bg-info/20",
3888
- success: "bg-success/20",
3889
- warning: "bg-warning/20",
3890
- destructive: "bg-destructive/20"
3891
- } },
3892
- defaultVariants: { tone: "default" }
3893
- });
3894
- var progressIndicatorVariants = cva("h-full rounded-full transition-[width] duration-300 ease-in-out motion-reduce:transition-none motion-reduce:animate-none data-indeterminate:w-1/3 data-indeterminate:animate-[progress-indeterminate_1.5s_ease-in-out_infinite]", {
3895
- variants: { tone: {
3896
- default: "bg-primary",
3897
- info: "bg-info",
3898
- success: "bg-success",
3899
- warning: "bg-warning",
3900
- destructive: "bg-destructive"
3530
+ var TONE_TOKEN = {
3531
+ default: "var(--primary)",
3532
+ info: "var(--info)",
3533
+ success: "var(--success)",
3534
+ warning: "var(--warning)",
3535
+ destructive: "var(--destructive)"
3536
+ };
3537
+ /**
3538
+ * Colours an app can set without a class string. --progress-color replaces the fill (any colour, such as an
3539
+ * app's own status tokens); --progress-track replaces the track, which does not follow the fill: an app
3540
+ * that wants a neutral track sets it to var(--muted). Both are read where the bar is, so they follow the
3541
+ * theme and can be set on :root or on any ancestor.
3542
+ */
3543
+ var progressFill = (tone) => `var(--progress-color, ${TONE_TOKEN[tone]})`;
3544
+ var progressTrack = (tone) => `var(--progress-track, color-mix(in oklab, ${TONE_TOKEN[tone]} 20%, transparent))`;
3545
+ /**
3546
+ * How the fill eases its width. The defaults are the 300ms ease-in-out it always had; an app retunes them
3547
+ * with --progress-duration and --progress-ease, or turns the easing off with `animated={false}` when the
3548
+ * number it shows is itself animated and the bar is driven from the same clock.
3549
+ */
3550
+ var PROGRESS_DURATION = "var(--progress-duration, 300ms)";
3551
+ var PROGRESS_EASE = "var(--progress-ease, cubic-bezier(0.4, 0, 0.2, 1))";
3552
+ var progressTrackVariants = cva("relative w-full overflow-hidden rounded-full", {
3553
+ variants: { size: {
3554
+ sm: "h-1",
3555
+ default: "h-2"
3901
3556
  } },
3902
- defaultVariants: { tone: "default" }
3557
+ defaultVariants: { size: "default" }
3903
3558
  });
3904
- var Progress = ({ value = null, tone, className, ...props }) => {
3559
+ var Progress = ({ value = null, tone = "default", size, animated = true, className, ...props }) => {
3560
+ const fillStyle = {
3561
+ backgroundColor: progressFill(tone),
3562
+ ...value != null ? { width: `${value}%` } : null,
3563
+ ...animated ? {
3564
+ transitionDuration: PROGRESS_DURATION,
3565
+ transitionTimingFunction: PROGRESS_EASE
3566
+ } : null
3567
+ };
3905
3568
  return /* @__PURE__ */ jsx(Progress$1.Root, {
3906
3569
  "data-slot": "progress",
3907
3570
  value: value ?? null,
@@ -3909,12 +3572,13 @@ var Progress = ({ value = null, tone, className, ...props }) => {
3909
3572
  ...props,
3910
3573
  children: /* @__PURE__ */ jsx(Progress$1.Track, {
3911
3574
  "data-slot": "progress-track",
3912
- className: progressTrackVariants({ tone }),
3575
+ className: progressTrackVariants({ size }),
3576
+ style: { backgroundColor: progressTrack(tone) },
3913
3577
  children: /* @__PURE__ */ jsx(Progress$1.Indicator, {
3914
3578
  "data-slot": "progress-indicator",
3915
- "data-tone": tone ?? "default",
3916
- className: progressIndicatorVariants({ tone }),
3917
- style: value != null ? { width: `${value}%` } : void 0
3579
+ "data-tone": tone,
3580
+ className: cn("h-full rounded-full motion-reduce:transition-none motion-reduce:animate-none data-indeterminate:w-1/3 data-indeterminate:animate-[progress-indeterminate_1.5s_ease-in-out_infinite]", animated ? "transition-[width] duration-300 ease-in-out" : "transition-none"),
3581
+ style: fillStyle
3918
3582
  })
3919
3583
  })
3920
3584
  });
@@ -4306,42 +3970,6 @@ var Skeleton = ({ className, ...props }) => {
4306
3970
  });
4307
3971
  };
4308
3972
  //#endregion
4309
- //#region ../ui/src/components/ui/tooltip/tooltip.tsx
4310
- var TooltipProvider = ({ delay = 0, ...props }) => {
4311
- return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
4312
- "data-slot": "tooltip-provider",
4313
- delay,
4314
- ...props
4315
- });
4316
- };
4317
- var Tooltip = ({ ...props }) => {
4318
- return /* @__PURE__ */ jsx(Tooltip$1.Root, {
4319
- "data-slot": "tooltip",
4320
- ...props
4321
- });
4322
- };
4323
- var TooltipTrigger = ({ ...props }) => {
4324
- return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
4325
- "data-slot": "tooltip-trigger",
4326
- ...props
4327
- });
4328
- };
4329
- var TooltipContent = ({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) => {
4330
- return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
4331
- align,
4332
- alignOffset,
4333
- side,
4334
- sideOffset,
4335
- className: "isolate z-50",
4336
- children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
4337
- "data-slot": "tooltip-content",
4338
- className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", "motion-reduce:animate-none", className),
4339
- ...props,
4340
- children: [children, /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
4341
- })
4342
- }) });
4343
- };
4344
- //#endregion
4345
3973
  //#region ../ui/src/components/ui/sidebar/sidebar.tsx
4346
3974
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
4347
3975
  var SIDEBAR_COOKIE_MAX_AGE = 604800;
@@ -4960,36 +4588,6 @@ var Toaster = ({ children, toastManager = toast, ...props }) => {
4960
4588
  var createToastManager = Toast$1.createToastManager;
4961
4589
  var useToastManager = Toast$1.useToastManager;
4962
4590
  //#endregion
4963
- //#region ../ui/src/components/ui/toggle/toggle.tsx
4964
- var toggleVariants = cva("inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-pressed:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4", {
4965
- variants: {
4966
- variant: {
4967
- default: "bg-transparent hover:bg-muted hover:text-foreground data-pressed:bg-muted",
4968
- outline: "border-border bg-background hover:bg-muted hover:text-foreground data-pressed:bg-muted dark:border-input dark:bg-input/30 dark:hover:bg-input/50"
4969
- },
4970
- size: {
4971
- sm: "h-7 px-2.5 text-[0.8rem]",
4972
- default: "h-8 px-2.5",
4973
- lg: "h-9 px-3"
4974
- }
4975
- },
4976
- defaultVariants: {
4977
- variant: "default",
4978
- size: "default"
4979
- }
4980
- });
4981
- var Toggle = ({ className, variant = "default", size = "default", ...props }) => {
4982
- return /* @__PURE__ */ jsx(Toggle$1, {
4983
- "data-slot": "toggle",
4984
- className: cn(toggleVariants({
4985
- variant,
4986
- size,
4987
- className
4988
- })),
4989
- ...props
4990
- });
4991
- };
4992
- //#endregion
4993
4591
  //#region ../ui/src/components/ui/toggle-group/toggle-group.tsx
4994
4592
  var ToggleGroupContext = createContext({
4995
4593
  variant: "default",
@@ -5037,6 +4635,6 @@ var ToggleGroupItem = ({ className, variant, size, ...props }) => {
5037
4635
  });
5038
4636
  };
5039
4637
  //#endregion
5040
- export { AVATAR_TONES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AudioPlayer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_MULTI_SELECT_LABELS, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldDescription, FieldError, FieldLabel, HoverCard, HoverCardContent, HoverCardTrigger, Indicator, InitialsAvatar, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MultiSelect, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NumberText, PROGRESS_LINE_COLOR, Pagination, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressLine, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIRTUALIZE_FROM, VideoPlayer, avatarTone, badgeVariants, buttonVariants, clampPage, cn, createToastManager, dateToDay, dayToDate, formatCount, formatMediaTime, getPaginationRange, indicatorVariants, initialsOf, markerVariants, navigationMenuTriggerStyle, resolveChosen, spinnerVariants, summarize, tabsListVariants, toast, toggleVariants, useAnimatedValues, useCarousel, useDirection, useIsMobile, useMediaPlayer, useMergedRefs, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };
4638
+ export { AVATAR_TONES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AudioPlayer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_MULTI_SELECT_LABELS, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldDescription, FieldError, FieldLabel, HoverCard, HoverCardContent, HoverCardTrigger, Indicator, InitialsAvatar, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MultiSelect, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NumberText, PROGRESS_DURATION, PROGRESS_EASE, PROGRESS_LINE_COLOR, Pagination, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressLine, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RICH_TEXT_ATTRIBUTES, RICH_TEXT_BODY_CLASS, RICH_TEXT_ELEMENTS, RICH_TEXT_LINK_PROTOCOLS, RICH_TEXT_MENTION_CLASS, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTextContent, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIRTUALIZE_FROM, VideoPlayer, avatarTone, badgeVariants, buttonVariants, clampPage, cn, createToastManager, dateToDay, dayToDate, formatCount, formatMediaTime, fullSelection, getPaginationRange, indicatorVariants, initialsOf, isAllowedRichTextHref, markerVariants, navigationMenuTriggerStyle, progressFill, progressTrack, resolveChosen, richTextToNodes, spinnerVariants, summarize, tabsListVariants, toast, toggleVariants, useAnimatedValues, useCarousel, useDirection, useIsMobile, useMediaPlayer, useMergedRefs, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };
5041
4639
 
5042
4640
  //# sourceMappingURL=index.js.map