@underverse-ui/underverse 1.0.211 → 2.0.1

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 (30) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +243 -706
  4. package/api-reference.json +1 -1
  5. package/dist/{EmojiPicker-FEJJDAWZ.js → EmojiPicker-34YATB7Z.js} +4 -4
  6. package/dist/{chunk-F6A7HJE4.js → chunk-A7XL4RDV.js} +3 -3
  7. package/dist/{chunk-CYCBSKWI.js → chunk-KGNYK5YF.js} +2 -2
  8. package/dist/{chunk-BRDGIALS.js → chunk-PLHJWXCW.js} +24 -30
  9. package/dist/{chunk-BRDGIALS.js.map → chunk-PLHJWXCW.js.map} +1 -1
  10. package/dist/{chunk-GKY5DHGR.js → chunk-UNDGI6ZI.js} +3 -3
  11. package/dist/{chunk-4E43DRP2.js → chunk-Y7SQKJ7X.js} +95 -31
  12. package/dist/chunk-Y7SQKJ7X.js.map +1 -0
  13. package/dist/{chunk-AMAILXHP.js → chunk-Z6WE65J2.js} +44 -18
  14. package/dist/chunk-Z6WE65J2.js.map +1 -0
  15. package/dist/index.cjs +280 -159
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.js +140 -103
  18. package/dist/index.js.map +1 -1
  19. package/dist/{menu-bar-6GS5LLTD.js → menu-bar-AAD3LQTN.js} +4 -4
  20. package/dist/ueditor.cjs +132 -42
  21. package/dist/ueditor.cjs.map +1 -1
  22. package/dist/ueditor.js +4 -4
  23. package/package.json +3 -1
  24. package/dist/chunk-4E43DRP2.js.map +0 -1
  25. package/dist/chunk-AMAILXHP.js.map +0 -1
  26. /package/dist/{EmojiPicker-FEJJDAWZ.js.map → EmojiPicker-34YATB7Z.js.map} +0 -0
  27. /package/dist/{chunk-F6A7HJE4.js.map → chunk-A7XL4RDV.js.map} +0 -0
  28. /package/dist/{chunk-CYCBSKWI.js.map → chunk-KGNYK5YF.js.map} +0 -0
  29. /package/dist/{chunk-GKY5DHGR.js.map → chunk-UNDGI6ZI.js.map} +0 -0
  30. /package/dist/{menu-bar-6GS5LLTD.js.map → menu-bar-AAD3LQTN.js.map} +0 -0
package/dist/index.js CHANGED
@@ -4,19 +4,19 @@ import {
4
4
  extractImageSrcsFromHtml,
5
5
  normalizeImageUrl,
6
6
  prepareUEditorContentForSave
7
- } from "./chunk-4E43DRP2.js";
7
+ } from "./chunk-Y7SQKJ7X.js";
8
8
  import {
9
9
  EmojiPicker_default
10
- } from "./chunk-F6A7HJE4.js";
10
+ } from "./chunk-A7XL4RDV.js";
11
11
  import {
12
12
  getEmojiImageUrl,
13
13
  getEmojiUnifiedCode,
14
14
  setEmojiBaseUrl
15
- } from "./chunk-CYCBSKWI.js";
15
+ } from "./chunk-KGNYK5YF.js";
16
16
  import "./chunk-4TYW5K4J.js";
17
17
  import {
18
18
  Modal_default
19
- } from "./chunk-GKY5DHGR.js";
19
+ } from "./chunk-UNDGI6ZI.js";
20
20
  import {
21
21
  DropdownMenuItem,
22
22
  DropdownMenuSeparator,
@@ -34,7 +34,7 @@ import {
34
34
  shadcnAnimationStyles,
35
35
  useShadCNAnimations,
36
36
  useUnderverseUIConfig
37
- } from "./chunk-AMAILXHP.js";
37
+ } from "./chunk-Z6WE65J2.js";
38
38
  import {
39
39
  ForceInternalTranslationsProvider,
40
40
  NextIntlAdapter,
@@ -54,7 +54,7 @@ import {
54
54
  useUnderverseLocale,
55
55
  useUnderverseTranslations,
56
56
  vi_default
57
- } from "./chunk-BRDGIALS.js";
57
+ } from "./chunk-PLHJWXCW.js";
58
58
  import {
59
59
  __export,
60
60
  __require
@@ -846,19 +846,7 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
846
846
  return () => {
847
847
  controller.destroy();
848
848
  };
849
- }, [
850
- targetRef,
851
- resolved.enabled,
852
- resolved.theme,
853
- resolved.visibility,
854
- resolved.autoHide,
855
- resolved.autoHideDelay,
856
- resolved.dragScroll,
857
- resolved.clickScroll,
858
- resolved.overflowX,
859
- resolved.overflowY,
860
- resolved.exclude
861
- ]);
849
+ }, [resolved, targetRef]);
862
850
  }
863
851
  var OverlayScrollbarProvider_default = OverlayScrollbarProvider;
864
852
 
@@ -4220,19 +4208,19 @@ var variantStyles4 = {
4220
4208
  },
4221
4209
  underline: {
4222
4210
  container: "relative border-b border-border/60",
4223
- tab: "relative transition-colors duration-200 pb-3 border-b-2 border-transparent hover:border-primary/30",
4211
+ tab: "relative transition-colors duration-200 border-b-2 border-transparent hover:border-primary/30",
4224
4212
  activeTab: "text-primary border-primary font-semibold",
4225
4213
  inactiveTab: "text-muted-foreground hover:text-foreground"
4226
4214
  },
4227
4215
  card: {
4228
- container: "space-y-1.5 bg-muted/20 p-2 rounded-2xl border border-border/30",
4216
+ container: "bg-muted/20 p-1.5 rounded-2xl border border-border/30",
4229
4217
  tab: "rounded-xl border border-transparent transition-all duration-200",
4230
4218
  activeTab: "bg-primary text-primary-foreground border-primary shadow-md",
4231
4219
  inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-accent/50 hover:border-border/50"
4232
4220
  },
4233
4221
  "underline-card": {
4234
4222
  container: "border-b border-border/60 bg-card/80 backdrop-blur-sm rounded-t-2xl p-1",
4235
- tab: "relative transition-all duration-200 pb-3 px-4 rounded-t-xl border-b-2 border-transparent hover:border-primary/30 hover:bg-accent/30",
4223
+ tab: "relative transition-all duration-200 rounded-t-xl border-b-2 border-transparent hover:border-primary/30 hover:bg-accent/30",
4236
4224
  activeTab: "text-primary border-primary font-semibold bg-accent/30",
4237
4225
  inactiveTab: "text-muted-foreground hover:text-foreground"
4238
4226
  }
@@ -4342,7 +4330,7 @@ var Tabs = ({
4342
4330
  }, [baseId, tabs]);
4343
4331
  const containerClasses = cn(
4344
4332
  "relative",
4345
- orientation === "horizontal" ? "w-full flex space-x-1 overflow-x-auto" : "flex flex-col space-y-1 shrink-0",
4333
+ orientation === "horizontal" ? "w-full flex items-center space-x-1 overflow-x-auto" : "flex flex-col space-y-1 shrink-0",
4346
4334
  variantStyles4[variant].container,
4347
4335
  className
4348
4336
  );
@@ -4377,10 +4365,7 @@ var Tabs = ({
4377
4365
  tab.href && tab.disabled && "pointer-events-none cursor-not-allowed opacity-50"
4378
4366
  );
4379
4367
  const sharedStyle = {
4380
- boxShadow: "none",
4381
- transform: "none",
4382
- outline: "none",
4383
- border: "none"
4368
+ outline: "none"
4384
4369
  };
4385
4370
  const sharedProps = {
4386
4371
  ref: (el) => {
@@ -5799,6 +5784,10 @@ import { Calendar, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3, S
5799
5784
  import * as React23 from "react";
5800
5785
  import { useId as useId5 } from "react";
5801
5786
  import { Fragment as Fragment4, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
5787
+ function normalizeToLocalDate(date) {
5788
+ if (!date) return null;
5789
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
5790
+ }
5802
5791
  var DatePicker = ({
5803
5792
  id,
5804
5793
  value,
@@ -5832,16 +5821,15 @@ var DatePicker = ({
5832
5821
  const [isFocused, setIsFocused] = React23.useState(false);
5833
5822
  const [inputValue, setInputValue] = React23.useState("");
5834
5823
  React23.useEffect(() => {
5835
- if (value) {
5836
- const parsed = parseDateString(inputValue, locale);
5837
- const isSame = parsed && parsed.getTime() === value.getTime();
5838
- if (!isSame) {
5839
- setInputValue(formatDateShort(value, locale));
5824
+ setInputValue((currentInput) => {
5825
+ if (value) {
5826
+ const parsed = parseDateString(currentInput, locale);
5827
+ const isSame = parsed && parsed.getTime() === value.getTime();
5828
+ return isSame ? currentInput : formatDateShort(value, locale);
5840
5829
  }
5841
- } else if (!isFocused) {
5842
- setInputValue("");
5843
- }
5844
- }, [value, locale, isFocused]);
5830
+ return isFocused ? currentInput : "";
5831
+ });
5832
+ }, [isFocused, locale, value]);
5845
5833
  const handleInputChange = (e) => {
5846
5834
  const text = e.target.value;
5847
5835
  setInputValue(text);
@@ -5860,7 +5848,7 @@ var DatePicker = ({
5860
5848
  if (required) {
5861
5849
  setLocalRequiredError(tv("required"));
5862
5850
  } else {
5863
- onChange(void 0);
5851
+ if (value) onChange(void 0);
5864
5852
  setLocalRequiredError(void 0);
5865
5853
  }
5866
5854
  } else {
@@ -6258,6 +6246,7 @@ var DatePicker = ({
6258
6246
  const autoId = useId5();
6259
6247
  const resolvedId = id ? String(id) : `datepicker-${autoId}`;
6260
6248
  const labelId = label ? `${resolvedId}-label` : void 0;
6249
+ const panelId = `${resolvedId}-panel`;
6261
6250
  const labelSize = sizeStyles7[size].label;
6262
6251
  const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
6263
6252
  const verticalGap = size === "sm" ? "space-y-1.5" : size === "lg" ? "space-y-2.5" : "space-y-2";
@@ -6306,6 +6295,7 @@ var DatePicker = ({
6306
6295
  {
6307
6296
  open: isOpen,
6308
6297
  onOpenChange: setIsOpen,
6298
+ contentProps: { id: panelId },
6309
6299
  placement: "bottom-start",
6310
6300
  disabled,
6311
6301
  contentWidth: sizeStyles7[size].contentWidth,
@@ -6322,12 +6312,6 @@ var DatePicker = ({
6322
6312
  "div",
6323
6313
  {
6324
6314
  ref: triggerRef,
6325
- id: resolvedId,
6326
- role: "button",
6327
- "aria-label": value ? formatDateDisplay(value) : placeholder || t("placeholder"),
6328
- "aria-labelledby": labelId,
6329
- "aria-required": required,
6330
- "aria-invalid": !!effectiveError,
6331
6315
  className: cn(
6332
6316
  "group flex w-full items-center justify-between border bg-background/80 backdrop-blur-sm",
6333
6317
  formControlFixedClass,
@@ -6359,8 +6343,16 @@ var DatePicker = ({
6359
6343
  "input",
6360
6344
  {
6361
6345
  ref: inputRef,
6346
+ id: resolvedId,
6362
6347
  type: "text",
6348
+ role: "combobox",
6363
6349
  "aria-label": value ? formatDateDisplay(value) : placeholder || t("placeholder"),
6350
+ "aria-labelledby": labelId,
6351
+ "aria-haspopup": "dialog",
6352
+ "aria-expanded": isOpen,
6353
+ "aria-controls": panelId,
6354
+ "aria-required": required,
6355
+ "aria-invalid": !!effectiveError,
6364
6356
  disabled,
6365
6357
  placeholder: placeholder || t("placeholder"),
6366
6358
  value: isFocused ? inputValue : value ? formatDateDisplay(value) : "",
@@ -6467,19 +6459,18 @@ var DateRangePicker = ({
6467
6459
  return `${startStr} - ${formatDateShort(e, locale)}`;
6468
6460
  }, [locale]);
6469
6461
  React23.useEffect(() => {
6470
- if (startDate) {
6471
- const parts = inputValue.split(/\s*-\s*/);
6472
- const inputStart = parts[0] ? parseDateString(parts[0], locale) : null;
6473
- const inputEnd = parts[1] ? parseDateString(parts[1], locale) : null;
6474
- const startSame = inputStart && startDate && inputStart.getTime() === startDate.getTime();
6475
- const endSame = !endDate && !inputEnd || endDate && inputEnd && endDate.getTime() === inputEnd.getTime();
6476
- if (!(startSame && endSame)) {
6477
- setInputValue(getRangeString(startDate, endDate));
6478
- }
6479
- } else if (!isFocused) {
6480
- setInputValue("");
6481
- }
6482
- }, [startDate, endDate, locale, isFocused, getRangeString]);
6462
+ setInputValue((currentInput) => {
6463
+ if (startDate) {
6464
+ const parts = currentInput.split(/\s*-\s*/);
6465
+ const inputStart = parts[0] ? parseDateString(parts[0], locale) : null;
6466
+ const inputEnd = parts[1] ? parseDateString(parts[1], locale) : null;
6467
+ const startSame = inputStart && inputStart.getTime() === startDate.getTime();
6468
+ const endSame = !endDate && !inputEnd || endDate && inputEnd && endDate.getTime() === inputEnd.getTime();
6469
+ return startSame && endSame ? currentInput : getRangeString(startDate, endDate);
6470
+ }
6471
+ return isFocused ? currentInput : "";
6472
+ });
6473
+ }, [endDate, getRangeString, isFocused, locale, startDate]);
6483
6474
  const handleInputChange = (e) => {
6484
6475
  const text = e.target.value;
6485
6476
  setInputValue(text);
@@ -6528,7 +6519,7 @@ var DateRangePicker = ({
6528
6519
  } else {
6529
6520
  setTempStart(null);
6530
6521
  setTempEnd(null);
6531
- onChange(void 0, void 0);
6522
+ if (startDate || endDate) onChange(void 0, void 0);
6532
6523
  setLocalRequiredError(void 0);
6533
6524
  }
6534
6525
  } else {
@@ -6559,8 +6550,8 @@ var DateRangePicker = ({
6559
6550
  }
6560
6551
  }
6561
6552
  if (startDate) {
6562
- setTempStart(normalizeToLocal(startDate));
6563
- setTempEnd(normalizeToLocal(endDate));
6553
+ setTempStart(normalizeToLocalDate(startDate));
6554
+ setTempEnd(normalizeToLocalDate(endDate));
6564
6555
  setInputValue(getRangeString(startDate, endDate));
6565
6556
  setLocalRequiredError(void 0);
6566
6557
  } else {
@@ -6664,21 +6655,17 @@ var DateRangePicker = ({
6664
6655
  footerMargin: "mt-5 pt-4 gap-2.5"
6665
6656
  }
6666
6657
  };
6667
- const normalizeToLocal = (date) => {
6668
- if (!date) return null;
6669
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
6670
- };
6671
- const minDay = React23.useMemo(() => normalizeToLocal(minDate), [minDate]);
6672
- const maxDay = React23.useMemo(() => normalizeToLocal(maxDate), [maxDate]);
6658
+ const minDay = normalizeToLocalDate(minDate);
6659
+ const maxDay = normalizeToLocalDate(maxDate);
6673
6660
  const [viewDate, setViewDate] = React23.useState(startDate || /* @__PURE__ */ new Date());
6674
- const [tempStart, setTempStart] = React23.useState(normalizeToLocal(startDate));
6675
- const [tempEnd, setTempEnd] = React23.useState(normalizeToLocal(endDate));
6661
+ const [tempStart, setTempStart] = React23.useState(normalizeToLocalDate(startDate));
6662
+ const [tempEnd, setTempEnd] = React23.useState(normalizeToLocalDate(endDate));
6676
6663
  const [hoveredDate, setHoveredDate] = React23.useState(null);
6677
6664
  React23.useEffect(() => {
6678
- setTempStart(normalizeToLocal(startDate));
6665
+ setTempStart(normalizeToLocalDate(startDate));
6679
6666
  }, [startDate]);
6680
6667
  React23.useEffect(() => {
6681
- setTempEnd(normalizeToLocal(endDate));
6668
+ setTempEnd(normalizeToLocalDate(endDate));
6682
6669
  }, [endDate]);
6683
6670
  React23.useEffect(() => {
6684
6671
  if (!isOpen) {
@@ -6697,12 +6684,12 @@ var DateRangePicker = ({
6697
6684
  const inRange = (d, s, e) => d > s && d < e;
6698
6685
  const getDaysInMonth = (d) => new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();
6699
6686
  const getFirstDayOfMonth = (d) => new Date(d.getFullYear(), d.getMonth(), 1).getDay();
6700
- const navigateMonth = React23.useCallback((direction) => {
6687
+ const navigateMonth = (direction) => {
6701
6688
  setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() + (direction === "next" ? 1 : -1), 1));
6702
- }, []);
6703
- const navigateYearRange = React23.useCallback((direction) => {
6689
+ };
6690
+ const navigateYearRange = (direction) => {
6704
6691
  setViewDate((prev) => new Date(prev.getFullYear() + (direction === "next" ? 12 : -12), prev.getMonth(), 1));
6705
- }, []);
6692
+ };
6706
6693
  const isElementVerticallyScrollable = (el) => {
6707
6694
  const style = window.getComputedStyle(el);
6708
6695
  const overflowY = style.overflowY;
@@ -6731,11 +6718,13 @@ var DateRangePicker = ({
6731
6718
  const steps = Math.trunc(wheelDeltaRef.current / threshold);
6732
6719
  wheelDeltaRef.current -= steps * threshold;
6733
6720
  const direction = steps > 0 ? "next" : "prev";
6734
- for (let i = 0; i < Math.abs(steps); i++) navigateMonth(direction);
6721
+ for (let i = 0; i < Math.abs(steps); i++) {
6722
+ setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() + (direction === "next" ? 1 : -1), 1));
6723
+ }
6735
6724
  };
6736
6725
  container.addEventListener("wheel", onWheel, { passive: false });
6737
6726
  return () => container.removeEventListener("wheel", onWheel);
6738
- }, [isOpen, navigateMonth]);
6727
+ }, [isOpen]);
6739
6728
  const handleSelect = (date) => {
6740
6729
  const localDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
6741
6730
  if (!tempStart || tempStart && tempEnd) {
@@ -7018,6 +7007,7 @@ var DateRangePicker = ({
7018
7007
  const autoId = useId5();
7019
7008
  const resolvedId = id ? String(id) : `daterangepicker-${autoId}`;
7020
7009
  const labelId = label ? `${resolvedId}-label` : void 0;
7010
+ const panelId = `${resolvedId}-panel`;
7021
7011
  const globalConfig = useUnderverseUIConfig();
7022
7012
  const resolvedBorderMode = borderMode ?? globalConfig.borderMode ?? "full";
7023
7013
  return /* @__PURE__ */ jsxs20("div", { className: cn("space-y-1.5", className), children: [
@@ -7062,6 +7052,7 @@ var DateRangePicker = ({
7062
7052
  {
7063
7053
  open: isOpen,
7064
7054
  onOpenChange: setIsOpen,
7055
+ contentProps: { id: panelId },
7065
7056
  placement: "bottom-start",
7066
7057
  disabled,
7067
7058
  contentWidth: sizeStyles7[size].contentWidth,
@@ -7077,12 +7068,6 @@ var DateRangePicker = ({
7077
7068
  "div",
7078
7069
  {
7079
7070
  ref: triggerRef,
7080
- id: resolvedId,
7081
- role: "button",
7082
- "aria-label": tempStart ? displayLabel : placeholder,
7083
- "aria-labelledby": labelId,
7084
- "aria-required": required,
7085
- "aria-invalid": !!effectiveError,
7086
7071
  className: cn(
7087
7072
  "group flex w-full items-center justify-between border bg-background/80 backdrop-blur-sm",
7088
7073
  formControlFixedClass,
@@ -7113,8 +7098,16 @@ var DateRangePicker = ({
7113
7098
  "input",
7114
7099
  {
7115
7100
  ref: inputRef,
7101
+ id: resolvedId,
7116
7102
  type: "text",
7103
+ role: "combobox",
7117
7104
  "aria-label": tempStart ? displayLabel : placeholder,
7105
+ "aria-labelledby": labelId,
7106
+ "aria-haspopup": "dialog",
7107
+ "aria-expanded": isOpen,
7108
+ "aria-controls": panelId,
7109
+ "aria-required": required,
7110
+ "aria-invalid": !!effectiveError,
7118
7111
  disabled,
7119
7112
  placeholder,
7120
7113
  value: isFocused ? inputValue : tempStart ? displayLabel : "",
@@ -7949,6 +7942,7 @@ var LunarDatePicker = ({
7949
7942
  const autoId = useId6();
7950
7943
  const resolvedId = id ? String(id) : `lunar-datepicker-${autoId}`;
7951
7944
  const labelId = label ? `${resolvedId}-label` : void 0;
7945
+ const panelId = `${resolvedId}-panel`;
7952
7946
  const labelSize = sizeStyles7[size].label;
7953
7947
  const verticalGap = size === "sm" ? "space-y-1.5" : size === "lg" ? "space-y-2.5" : "space-y-2";
7954
7948
  const effectiveError = localRequiredError;
@@ -7994,6 +7988,7 @@ var LunarDatePicker = ({
7994
7988
  {
7995
7989
  open: isOpen,
7996
7990
  onOpenChange: setIsOpen,
7991
+ contentProps: { id: panelId },
7997
7992
  placement: "bottom-start",
7998
7993
  borderMode: resolvedBorderMode,
7999
7994
  disabled,
@@ -8010,12 +8005,6 @@ var LunarDatePicker = ({
8010
8005
  "div",
8011
8006
  {
8012
8007
  ref: triggerRef,
8013
- id: resolvedId,
8014
- role: "button",
8015
- "aria-label": value ? formatDateDisplay(value) : placeholder || t("placeholder"),
8016
- "aria-labelledby": labelId,
8017
- "aria-required": required,
8018
- "aria-invalid": !!effectiveError,
8019
8008
  className: cn(
8020
8009
  "group flex w-full items-center justify-between border bg-background/80 backdrop-blur-sm",
8021
8010
  formControlFixedClass,
@@ -8047,8 +8036,16 @@ var LunarDatePicker = ({
8047
8036
  "input",
8048
8037
  {
8049
8038
  ref: inputRef,
8039
+ id: resolvedId,
8050
8040
  type: "text",
8041
+ role: "combobox",
8051
8042
  "aria-label": value ? formatDateDisplay(value) : placeholder || t("placeholder"),
8043
+ "aria-labelledby": labelId,
8044
+ "aria-haspopup": "dialog",
8045
+ "aria-expanded": isOpen,
8046
+ "aria-controls": panelId,
8047
+ "aria-required": required,
8048
+ "aria-invalid": !!effectiveError,
8052
8049
  disabled,
8053
8050
  placeholder: placeholder || t("placeholder"),
8054
8051
  value: isFocused ? inputValue : value ? formatDateDisplay(value) : "",
@@ -8575,6 +8572,7 @@ var LunarDateRangePicker = ({
8575
8572
  const autoId = useId6();
8576
8573
  const resolvedId = id ? String(id) : `lunardaterangepicker-${autoId}`;
8577
8574
  const labelId = label ? `${resolvedId}-label` : void 0;
8575
+ const panelId = `${resolvedId}-panel`;
8578
8576
  return /* @__PURE__ */ jsxs21("div", { className: cn("space-y-1.5", className), children: [
8579
8577
  label && /* @__PURE__ */ jsxs21(
8580
8578
  "label",
@@ -8617,6 +8615,7 @@ var LunarDateRangePicker = ({
8617
8615
  {
8618
8616
  open: isOpen,
8619
8617
  onOpenChange: setIsOpen,
8618
+ contentProps: { id: panelId },
8620
8619
  placement: "bottom-start",
8621
8620
  disabled,
8622
8621
  contentWidth: sizeStyles7[size].contentWidth,
@@ -8629,13 +8628,18 @@ var LunarDateRangePicker = ({
8629
8628
  "animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
8630
8629
  ),
8631
8630
  trigger: /* @__PURE__ */ jsxs21(
8632
- "div",
8631
+ "button",
8633
8632
  {
8634
8633
  ref: triggerRef,
8635
8634
  id: resolvedId,
8636
- role: "button",
8635
+ type: "button",
8636
+ role: "combobox",
8637
+ disabled,
8637
8638
  "aria-label": tempStart ? displayLabel : placeholder,
8638
8639
  "aria-labelledby": labelId,
8640
+ "aria-haspopup": "dialog",
8641
+ "aria-expanded": isOpen,
8642
+ "aria-controls": panelId,
8639
8643
  "aria-required": required,
8640
8644
  "aria-invalid": !!effectiveError,
8641
8645
  className: cn(
@@ -9167,6 +9171,9 @@ function MonthYearPicker({
9167
9171
  const resolvedBorderMode = borderMode ?? globalConfig.input?.borderMode ?? globalConfig.borderMode ?? "full";
9168
9172
  const gi18n = useGlobalI18n();
9169
9173
  const tv = useSmartTranslations("ValidationInput");
9174
+ const autoId = React25.useId();
9175
+ const triggerId = `month-year-picker-trigger-${autoId}`;
9176
+ const panelId = `${triggerId}-panel`;
9170
9177
  const now = /* @__PURE__ */ new Date();
9171
9178
  const currentYear = now.getFullYear();
9172
9179
  const resolvedMinYear = minYear ?? minDate?.getFullYear() ?? currentYear - 50;
@@ -9314,11 +9321,14 @@ function MonthYearPicker({
9314
9321
  const trigger = variant === "inline" ? null : /* @__PURE__ */ jsxs22(
9315
9322
  "button",
9316
9323
  {
9324
+ id: triggerId,
9317
9325
  type: "button",
9326
+ role: "combobox",
9318
9327
  disabled,
9319
9328
  "aria-label": gi18n.selectMonthYear ?? "Select month and year",
9320
9329
  "aria-haspopup": "dialog",
9321
9330
  "aria-expanded": open,
9331
+ "aria-controls": panelId,
9322
9332
  "aria-required": required,
9323
9333
  "aria-invalid": !!effectiveError,
9324
9334
  className: cn(
@@ -9542,6 +9552,7 @@ function MonthYearPicker({
9542
9552
  trigger,
9543
9553
  open,
9544
9554
  onOpenChange: handleOpenChange,
9555
+ contentProps: { id: panelId },
9545
9556
  placement: "bottom",
9546
9557
  contentWidth,
9547
9558
  matchTriggerWidth,
@@ -10714,6 +10725,7 @@ function TimePicker({
10714
10725
  const directEditInputRef = React27.useRef(null);
10715
10726
  const triggerId = `time-picker-trigger-${autoId}`;
10716
10727
  const labelId = label ? `time-picker-label-${autoId}` : void 0;
10728
+ const panelId = `${triggerId}-panel`;
10717
10729
  React27.useEffect(() => {
10718
10730
  if (isControlled) {
10719
10731
  const parsed = parseTime(value, format, includeSeconds);
@@ -11024,11 +11036,13 @@ function TimePicker({
11024
11036
  {
11025
11037
  id: triggerId,
11026
11038
  type: "button",
11039
+ role: "combobox",
11027
11040
  disabled,
11028
11041
  "aria-label": gi18n.selectTime ?? "Select time",
11029
11042
  "aria-labelledby": labelId,
11030
11043
  "aria-haspopup": "dialog",
11031
11044
  "aria-expanded": open,
11045
+ "aria-controls": panelId,
11032
11046
  "aria-required": required,
11033
11047
  "aria-invalid": !!effectiveError,
11034
11048
  className: cn(
@@ -11468,6 +11482,7 @@ function TimePicker({
11468
11482
  trigger,
11469
11483
  open,
11470
11484
  onOpenChange: handleOpenChange,
11485
+ contentProps: { id: panelId },
11471
11486
  placement: "bottom-start",
11472
11487
  matchTriggerWidth: shouldMatchTriggerWidth,
11473
11488
  contentWidth: shouldMatchTriggerWidth ? void 0 : contentWidth,
@@ -11523,6 +11538,10 @@ var DateTimePicker = ({
11523
11538
  const t = useSmartTranslations("DateTimePicker");
11524
11539
  const tv = useSmartTranslations("ValidationInput");
11525
11540
  const locale = useSmartLocale();
11541
+ const autoId = React28.useId();
11542
+ const triggerId = `date-time-picker-trigger-${autoId}`;
11543
+ const panelId = `${triggerId}-panel`;
11544
+ const labelId = label ? `${triggerId}-label` : void 0;
11526
11545
  const [open, setOpen] = React28.useState(false);
11527
11546
  const [localRequiredError, setLocalRequiredError] = React28.useState();
11528
11547
  const sizeStyles7 = {
@@ -11663,11 +11682,19 @@ var DateTimePicker = ({
11663
11682
  const weekdays = getWeekdays(locale);
11664
11683
  const effectiveError = localRequiredError;
11665
11684
  return /* @__PURE__ */ jsxs25("div", { className: cn("space-y-1.5", className), children: [
11666
- label && /* @__PURE__ */ jsxs25("label", { className: cn(sizeStyles7[size].label, "font-medium text-foreground flex items-center gap-1", effectiveError && "text-destructive", labelClassName), children: [
11667
- label,
11668
- " ",
11669
- required && /* @__PURE__ */ jsx32("span", { className: "text-destructive", children: "*" })
11670
- ] }),
11685
+ label && /* @__PURE__ */ jsxs25(
11686
+ "label",
11687
+ {
11688
+ id: labelId,
11689
+ htmlFor: triggerId,
11690
+ className: cn(sizeStyles7[size].label, "font-medium text-foreground flex items-center gap-1", effectiveError && "text-destructive", labelClassName),
11691
+ children: [
11692
+ label,
11693
+ " ",
11694
+ required && /* @__PURE__ */ jsx32("span", { className: "text-destructive", children: "*" })
11695
+ ]
11696
+ }
11697
+ ),
11671
11698
  /* @__PURE__ */ jsx32(
11672
11699
  "input",
11673
11700
  {
@@ -11690,11 +11717,19 @@ var DateTimePicker = ({
11690
11717
  {
11691
11718
  open,
11692
11719
  onOpenChange: setOpen,
11720
+ contentProps: { id: panelId },
11693
11721
  trigger: /* @__PURE__ */ jsxs25(
11694
11722
  "button",
11695
11723
  {
11724
+ id: triggerId,
11696
11725
  type: "button",
11726
+ role: "combobox",
11697
11727
  disabled,
11728
+ "aria-haspopup": "dialog",
11729
+ "aria-expanded": open,
11730
+ "aria-controls": panelId,
11731
+ "aria-label": labelId ? void 0 : displayValue || placeholder || "Select date & time",
11732
+ "aria-labelledby": labelId,
11698
11733
  "aria-required": required,
11699
11734
  "aria-invalid": !!effectiveError,
11700
11735
  className: cn(
@@ -14701,7 +14736,7 @@ function CalendarTimeline({
14701
14736
 
14702
14737
  // src/components/MultiCombobox.tsx
14703
14738
  import * as React35 from "react";
14704
- import { useId as useId8 } from "react";
14739
+ import { useId as useId10 } from "react";
14705
14740
  import { useVirtualizer as useVirtualizer2 } from "@tanstack/react-virtual";
14706
14741
  import { ChevronDown as ChevronDown4, Search as Search5, Check as Check6, SearchX as SearchX2, Loader2 as Loader23, X as X12, Sparkles as Sparkles3 } from "lucide-react";
14707
14742
  import { Fragment as Fragment11, jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
@@ -14932,7 +14967,7 @@ var MultiCombobox = ({
14932
14967
  outline: "border-2 border-input bg-transparent hover:border-primary",
14933
14968
  ghost: "border border-transparent bg-muted/50 hover:bg-muted"
14934
14969
  };
14935
- const autoId = useId8();
14970
+ const autoId = useId10();
14936
14971
  const resolvedId = id ? String(id) : `multicombobox-${autoId}`;
14937
14972
  const labelId = label ? `${resolvedId}-label` : void 0;
14938
14973
  const labelSize = formControlSizeStyles[size].label;
@@ -15213,7 +15248,7 @@ var MultiCombobox = ({
15213
15248
  );
15214
15249
  }),
15215
15250
  hiddenCount > 0 && /* @__PURE__ */ jsx39("span", { className: cn("inline-flex items-center bg-muted text-muted-foreground rounded-lg shrink-0", sizeStyles7[size].tag), children: gi18n.moreCount ? gi18n.moreCount(hiddenCount) : `+${hiddenCount} more` })
15216
- ] }) : /* @__PURE__ */ jsx39("span", { className: cn(formControlValueClass, "font-medium"), children: gi18n.selectedCount ? gi18n.selectedCount(value.length) : `${value.length} item${value.length > 1 ? "s" : ""} selected` }) : /* @__PURE__ */ jsx39("span", { className: cn(formControlValueClass, "text-muted-foreground"), children: placeholder }) }),
15251
+ ] }) : /* @__PURE__ */ jsx39("span", { className: cn(formControlValueClass, "font-medium"), children: gi18n.selectedCount ? gi18n.selectedCount(value.length) : `${value.length} item${value.length > 1 ? "s" : ""} selected` }) : /* @__PURE__ */ jsx39("span", { className: cn(formControlValueClass, "text-left text-muted-foreground"), children: placeholder }) }),
15217
15252
  /* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-1.5 shrink-0", children: [
15218
15253
  showClear && value.length > 0 && /* @__PURE__ */ jsx39(
15219
15254
  "div",
@@ -16637,7 +16672,7 @@ function OverlayControls({
16637
16672
  }
16638
16673
 
16639
16674
  // src/components/CategoryTreeSelect.tsx
16640
- import { useEffect as useEffect20, useId as useId10, useMemo as useMemo18, useRef as useRef17, useState as useState27 } from "react";
16675
+ import { useEffect as useEffect20, useId as useId12, useMemo as useMemo18, useRef as useRef17, useState as useState27 } from "react";
16641
16676
  import { useVirtualizer as useVirtualizer3 } from "@tanstack/react-virtual";
16642
16677
  import { ChevronRight as ChevronRight7, ChevronDown as ChevronDown5, FolderTree, Layers, Search as Search6, SearchX as SearchX3, X as X13 } from "lucide-react";
16643
16678
  import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
@@ -16807,7 +16842,7 @@ function CategoryTreeSelect(props) {
16807
16842
  useOverlayScrollbarTarget(dropdownViewportRef, {
16808
16843
  enabled: isOpen && useOverlayScrollbar && !virtualized && !inline && !viewOnly
16809
16844
  });
16810
- const autoId = useId10();
16845
+ const autoId = useId12();
16811
16846
  const resolvedId = id ? String(id) : `category-tree-select-${autoId}`;
16812
16847
  const labelId = label ? `${resolvedId}-label` : void 0;
16813
16848
  const effectiveError = error ?? localRequiredError;
@@ -20792,7 +20827,7 @@ var MusicPlayer = ({
20792
20827
  var MusicPlayer_default = MusicPlayer;
20793
20828
 
20794
20829
  // src/components/Grid.tsx
20795
- import React47, { useId as useId11 } from "react";
20830
+ import React47, { useId as useId13 } from "react";
20796
20831
  import { Fragment as Fragment18, jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
20797
20832
  var BP_MIN = {
20798
20833
  sm: 640,
@@ -20857,7 +20892,7 @@ var GridRoot = React47.forwardRef(
20857
20892
  children,
20858
20893
  ...rest
20859
20894
  }, ref) => {
20860
- const id = useId11().replace(/[:]/g, "");
20895
+ const id = useId13().replace(/[:]/g, "");
20861
20896
  const baseClass = `uv-grid-${id}`;
20862
20897
  const baseCols = toTemplateCols(columns, minColumnWidth);
20863
20898
  const baseRows = toTemplateRows(rows);
@@ -21624,6 +21659,7 @@ function DataTableHeader({
21624
21659
  },
21625
21660
  [
21626
21661
  filters,
21662
+ gi18n,
21627
21663
  headerAlign,
21628
21664
  headerMinHeightClass,
21629
21665
  headerTitleClass,
@@ -21632,6 +21668,7 @@ function DataTableHeader({
21632
21668
  setFilters,
21633
21669
  setSort,
21634
21670
  sort,
21671
+ sortByLabel,
21635
21672
  sortIconClass,
21636
21673
  t
21637
21674
  ]
@@ -22950,7 +22987,7 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
22950
22987
  var NotificationModal_default = NotificationModal;
22951
22988
 
22952
22989
  // src/components/AccessDenied.tsx
22953
- import { useState as useState36, useEffect as useEffect26, useId as useId13, useRef as useRef22 } from "react";
22990
+ import { useState as useState36, useEffect as useEffect26, useId as useId15, useRef as useRef22 } from "react";
22954
22991
  import { jsx as jsx64, jsxs as jsxs56 } from "react/jsx-runtime";
22955
22992
  var VARIANT_COLOR_VARS = {
22956
22993
  destructive: "var(--destructive)",
@@ -22992,7 +23029,7 @@ function AccessDenied({
22992
23029
  }) {
22993
23030
  const design = VARIANT_DESIGNS[variant];
22994
23031
  const colorVar = VARIANT_COLOR_VARS[variant];
22995
- const reactId = useId13();
23032
+ const reactId = useId15();
22996
23033
  const cleanId = reactId.replace(/:/g, "");
22997
23034
  const clipId = `white-clip-${cleanId}`;
22998
23035
  const textId = `text-s-${cleanId}`;