@7onic-ui/react 0.3.10 → 0.3.12

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 (54) hide show
  1. package/README.md +2 -2
  2. package/dist/{chunk-GRCJ35DX.mjs → chunk-2WIIXHOV.mjs} +7 -3
  3. package/dist/chunk-2WIIXHOV.mjs.map +1 -0
  4. package/dist/{chunk-DTLNWOTR.mjs → chunk-C5D3VRNJ.mjs} +29 -7
  5. package/dist/chunk-C5D3VRNJ.mjs.map +1 -0
  6. package/dist/{chunk-T546XBQG.mjs → chunk-EG2GTK65.mjs} +3 -3
  7. package/dist/{chunk-T546XBQG.mjs.map → chunk-EG2GTK65.mjs.map} +1 -1
  8. package/dist/{chunk-UWTT5AE6.mjs → chunk-HS2VRYSX.mjs} +7 -4
  9. package/dist/chunk-HS2VRYSX.mjs.map +1 -0
  10. package/dist/{chunk-N4K2BDGM.mjs → chunk-IHHI3LIN.mjs} +5 -3
  11. package/dist/chunk-IHHI3LIN.mjs.map +1 -0
  12. package/dist/{chunk-VUPGBB5X.mjs → chunk-IJ2FZ3L5.mjs} +11 -2
  13. package/dist/chunk-IJ2FZ3L5.mjs.map +1 -0
  14. package/dist/{chunk-IY3R2VGB.mjs → chunk-L55ABE4H.mjs} +14 -3
  15. package/dist/chunk-L55ABE4H.mjs.map +1 -0
  16. package/dist/{chunk-DRVHHEAY.mjs → chunk-ND6TUVP2.mjs} +7 -4
  17. package/dist/chunk-ND6TUVP2.mjs.map +1 -0
  18. package/dist/{chunk-234NAXGV.mjs → chunk-R7FJEO4K.mjs} +1 -1
  19. package/dist/chunk-R7FJEO4K.mjs.map +1 -0
  20. package/dist/{chunk-WWSN5YME.mjs → chunk-SDDAGZWA.mjs} +5 -3
  21. package/dist/chunk-SDDAGZWA.mjs.map +1 -0
  22. package/dist/{chunk-Z6JWWCNL.mjs → chunk-T5A4APEL.mjs} +35 -3
  23. package/dist/chunk-T5A4APEL.mjs.map +1 -0
  24. package/dist/{chunk-MRUVGHGP.mjs → chunk-YZ7HHFKA.mjs} +7 -7
  25. package/dist/chunk-YZ7HHFKA.mjs.map +1 -0
  26. package/dist/components/chat-input.mjs +1 -1
  27. package/dist/components/chat-message.mjs +1 -1
  28. package/dist/components/checkbox.mjs +2 -2
  29. package/dist/components/field.mjs +5 -3
  30. package/dist/components/input.mjs +2 -2
  31. package/dist/components/navigation-menu.mjs +1 -1
  32. package/dist/components/pagination.mjs +1 -1
  33. package/dist/components/radio-group.mjs +2 -2
  34. package/dist/components/select.mjs +2 -1
  35. package/dist/components/slider.mjs +2 -1
  36. package/dist/components/switch.mjs +2 -2
  37. package/dist/components/textarea.mjs +2 -2
  38. package/dist/index.d.ts +11 -2
  39. package/dist/index.js +95 -21
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +12 -12
  42. package/llms.txt +27 -9
  43. package/package.json +12 -12
  44. package/dist/chunk-234NAXGV.mjs.map +0 -1
  45. package/dist/chunk-DRVHHEAY.mjs.map +0 -1
  46. package/dist/chunk-DTLNWOTR.mjs.map +0 -1
  47. package/dist/chunk-GRCJ35DX.mjs.map +0 -1
  48. package/dist/chunk-IY3R2VGB.mjs.map +0 -1
  49. package/dist/chunk-MRUVGHGP.mjs.map +0 -1
  50. package/dist/chunk-N4K2BDGM.mjs.map +0 -1
  51. package/dist/chunk-UWTT5AE6.mjs.map +0 -1
  52. package/dist/chunk-VUPGBB5X.mjs.map +0 -1
  53. package/dist/chunk-WWSN5YME.mjs.map +0 -1
  54. package/dist/chunk-Z6JWWCNL.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1492,6 +1492,14 @@ var FieldContext = React10.createContext(null);
1492
1492
  function useFieldContext() {
1493
1493
  return React10.useContext(FieldContext);
1494
1494
  }
1495
+ function useFieldControl(kind, enabled) {
1496
+ const context = useFieldContext();
1497
+ const register = context?.registerControl;
1498
+ React10.useEffect(() => {
1499
+ if (!enabled || !register) return;
1500
+ return register(kind);
1501
+ }, [enabled, register, kind]);
1502
+ }
1495
1503
  var fieldVariants = (0, import_class_variance_authority8.cva)("flex flex-col", {
1496
1504
  variants: {
1497
1505
  gap: {
@@ -1509,10 +1517,30 @@ var fieldVariants = (0, import_class_variance_authority8.cva)("flex flex-col", {
1509
1517
  var Field = React10.forwardRef(
1510
1518
  ({ className, gap, error, disabled, children, ...props }, ref) => {
1511
1519
  const id = React10.useId();
1512
- return /* @__PURE__ */ React10.createElement(FieldContext.Provider, { value: { id, error, disabled } }, /* @__PURE__ */ React10.createElement(
1520
+ const labelId = `${id}-label`;
1521
+ const [labelCount, setLabelCount] = React10.useState(0);
1522
+ const [counts, setCounts] = React10.useState({ single: 0, group: 0, labelled: 0 });
1523
+ const registerLabel = React10.useCallback(() => {
1524
+ setLabelCount((n) => n + 1);
1525
+ return () => setLabelCount((n) => n - 1);
1526
+ }, []);
1527
+ const registerControl = React10.useCallback((kind) => {
1528
+ setCounts((c) => ({ ...c, [kind]: c[kind] + 1 }));
1529
+ return () => setCounts((c) => ({ ...c, [kind]: c[kind] - 1 }));
1530
+ }, []);
1531
+ const hasLabel = labelCount > 0;
1532
+ const isGroup = counts.single === 0 && (counts.group > 0 || counts.labelled > 0);
1533
+ const asGroup = counts.single === 0 && counts.group > 0;
1534
+ const contextValue = React10.useMemo(
1535
+ () => ({ id, labelId, error, disabled, hasLabel, isGroup, registerLabel, registerControl }),
1536
+ [id, labelId, error, disabled, hasLabel, isGroup, registerLabel, registerControl]
1537
+ );
1538
+ return /* @__PURE__ */ React10.createElement(FieldContext.Provider, { value: contextValue }, /* @__PURE__ */ React10.createElement(
1513
1539
  "div",
1514
1540
  {
1515
1541
  ref,
1542
+ role: asGroup ? "group" : void 0,
1543
+ "aria-labelledby": asGroup && hasLabel ? labelId : void 0,
1516
1544
  className: cn(fieldVariants({ gap }), className),
1517
1545
  "data-error": error || void 0,
1518
1546
  "data-disabled": disabled || void 0,
@@ -1526,11 +1554,14 @@ Field.displayName = "Field";
1526
1554
  var FieldLabel = React10.forwardRef(
1527
1555
  ({ className, required, children, ...props }, ref) => {
1528
1556
  const context = useFieldContext();
1557
+ const registerLabel = context?.registerLabel;
1558
+ React10.useEffect(() => registerLabel?.(), [registerLabel]);
1529
1559
  return /* @__PURE__ */ React10.createElement(
1530
1560
  "label",
1531
1561
  {
1532
1562
  ref,
1533
- htmlFor: context?.id,
1563
+ id: context?.labelId,
1564
+ htmlFor: context && !context.isGroup ? context.id : void 0,
1534
1565
  className: cn(
1535
1566
  "text-md font-semibold text-foreground",
1536
1567
  // 14px - primary field identifier
@@ -1691,6 +1722,7 @@ var Input = React11.forwardRef(
1691
1722
  const resolvedError = error ?? fieldContext?.error;
1692
1723
  const resolvedState = resolvedError ? "error" : state;
1693
1724
  const inputId = id ?? fieldContext?.id;
1725
+ useFieldControl("single", Boolean(fieldContext) && !id);
1694
1726
  const isDisabled = props.disabled ?? fieldContext?.disabled;
1695
1727
  const pointerRef = React11.useRef(false);
1696
1728
  const windowBlurredRef = React11.useRef(false);
@@ -1864,6 +1896,7 @@ var Textarea = React12.forwardRef(
1864
1896
  const resolvedError = error ?? fieldContext?.error;
1865
1897
  const resolvedState = resolvedError ? "error" : state;
1866
1898
  const textareaId = id ?? fieldContext?.id;
1899
+ useFieldControl("single", Boolean(fieldContext) && !id);
1867
1900
  const isDisabled = props.disabled ?? fieldContext?.disabled;
1868
1901
  const pointerRef = React12.useRef(false);
1869
1902
  const windowBlurredRef = React12.useRef(false);
@@ -2001,7 +2034,9 @@ var Checkbox = React13.forwardRef(({ className, size, radius, weight, color = "d
2001
2034
  const resolvedSize = size || "default";
2002
2035
  const resolvedDisabled = disabled ?? fieldContext?.disabled;
2003
2036
  const generatedId = React13.useId();
2004
- const checkboxId = id ?? fieldContext?.id ?? generatedId;
2037
+ const hasOwnLabel = Boolean(label);
2038
+ const checkboxId = id ?? (hasOwnLabel ? generatedId : fieldContext?.id ?? generatedId);
2039
+ useFieldControl(hasOwnLabel ? "group" : "single", Boolean(fieldContext) && (hasOwnLabel || !id));
2005
2040
  const checkbox = /* @__PURE__ */ React13.createElement(
2006
2041
  CheckboxPrimitive.Root,
2007
2042
  {
@@ -2088,6 +2123,8 @@ var radioGroupVariants = (0, import_class_variance_authority12.cva)("grid gap-3"
2088
2123
  var RadioGroup = React14.forwardRef(({ className, orientation, size = "default", weight = "bold", color = "default", disabled, ...props }, ref) => {
2089
2124
  const fieldContext = useFieldContext();
2090
2125
  const resolvedDisabled = disabled ?? fieldContext?.disabled;
2126
+ useFieldControl("labelled", Boolean(fieldContext));
2127
+ const labelledBy = fieldContext?.hasLabel && !props["aria-label"] ? fieldContext.labelId : void 0;
2091
2128
  return /* @__PURE__ */ React14.createElement(RadioGroupContext.Provider, { value: { size, weight, color, disabled: resolvedDisabled } }, /* @__PURE__ */ React14.createElement(
2092
2129
  RadioGroupPrimitive2.Root,
2093
2130
  {
@@ -2095,6 +2132,7 @@ var RadioGroup = React14.forwardRef(({ className, orientation, size = "default",
2095
2132
  className: cn(radioGroupVariants({ orientation }), className),
2096
2133
  orientation: orientation || void 0,
2097
2134
  disabled: resolvedDisabled,
2135
+ "aria-labelledby": labelledBy,
2098
2136
  ...props
2099
2137
  }
2100
2138
  ));
@@ -2266,7 +2304,9 @@ var Switch = React15.forwardRef(({ className, size, label, labelPosition = "end"
2266
2304
  const resolvedSize = size || "default";
2267
2305
  const resolvedDisabled = disabled ?? fieldContext?.disabled;
2268
2306
  const generatedId = React15.useId();
2269
- const switchId = id ?? fieldContext?.id ?? generatedId;
2307
+ const hasOwnLabel = Boolean(label || startLabel || endLabel);
2308
+ const switchId = id ?? (hasOwnLabel ? generatedId : fieldContext?.id ?? generatedId);
2309
+ useFieldControl(hasOwnLabel ? "group" : "single", Boolean(fieldContext) && (hasOwnLabel || !id));
2270
2310
  const switchEl = /* @__PURE__ */ React15.createElement(
2271
2311
  SwitchPrimitive.Root,
2272
2312
  {
@@ -2368,8 +2408,11 @@ var sliderColorMap = {
2368
2408
  thumbActive: "active:shadow-[0_0_0_6px_color-mix(in_srgb,var(--color-primary)_16%,transparent)]"
2369
2409
  }
2370
2410
  };
2371
- var Slider = React16.forwardRef(({ className, size, color = "default", value, defaultValue, onValueChange, showTooltip = "never", formatLabel, startContent, endContent, orientation, ...props }, ref) => {
2411
+ var Slider = React16.forwardRef(({ className, size, color = "default", value, defaultValue, onValueChange, showTooltip = "never", formatLabel, startContent, endContent, orientation, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }, ref) => {
2372
2412
  const resolvedSize = size || "default";
2413
+ const fieldContext = useFieldContext();
2414
+ useFieldControl("labelled", Boolean(fieldContext));
2415
+ const thumbLabelledBy = ariaLabelledBy ?? (!ariaLabel && fieldContext?.hasLabel ? fieldContext.labelId : void 0);
2373
2416
  const thumbCount = value?.length ?? defaultValue?.length ?? 1;
2374
2417
  const hasTooltip = showTooltip !== "never";
2375
2418
  const hasWrapper = !!(startContent || endContent);
@@ -2422,6 +2465,8 @@ var Slider = React16.forwardRef(({ className, size, color = "default", value, de
2422
2465
  SliderPrimitive.Thumb,
2423
2466
  {
2424
2467
  key: i,
2468
+ "aria-label": ariaLabel,
2469
+ "aria-labelledby": thumbLabelledBy,
2425
2470
  className: cn(
2426
2471
  "group/thumb block rounded-full border-2 shadow-sm",
2427
2472
  sliderColorMap[color].thumb,
@@ -2800,16 +2845,23 @@ var SelectStyleContext = React18.createContext({ contentRadius: "xl", itemSize:
2800
2845
  var Select = ({
2801
2846
  size = "default",
2802
2847
  radius = "default",
2848
+ disabled,
2803
2849
  ...props
2804
- }) => /* @__PURE__ */ React18.createElement(SelectRootContext.Provider, { value: { size, radius } }, /* @__PURE__ */ React18.createElement(SelectPrimitive.Root, { ...props }));
2850
+ }) => {
2851
+ const fieldContext = useFieldContext();
2852
+ return /* @__PURE__ */ React18.createElement(SelectRootContext.Provider, { value: { size, radius } }, /* @__PURE__ */ React18.createElement(SelectPrimitive.Root, { disabled: disabled ?? fieldContext?.disabled, ...props }));
2853
+ };
2805
2854
  var SelectValue = SelectPrimitive.Value;
2806
2855
  var SelectGroup = SelectPrimitive.Group;
2807
- var SelectTrigger = React18.forwardRef(({ className, children, ...props }, ref) => {
2856
+ var SelectTrigger = React18.forwardRef(({ className, children, id, ...props }, ref) => {
2808
2857
  const { size, radius } = React18.useContext(SelectRootContext);
2858
+ const fieldContext = useFieldContext();
2859
+ useFieldControl("single", Boolean(fieldContext) && !id);
2809
2860
  return /* @__PURE__ */ React18.createElement(
2810
2861
  SelectPrimitive.Trigger,
2811
2862
  {
2812
2863
  ref,
2864
+ id: id ?? fieldContext?.id,
2813
2865
  className: cn(
2814
2866
  "flex w-full items-center justify-between bg-background text-foreground hover:bg-background-muted",
2815
2867
  "border border-border",
@@ -4357,9 +4409,11 @@ var NavigationMenuItem = React25.forwardRef(
4357
4409
  ({ className, value, defaultOpen = false, children, ...props }, ref) => {
4358
4410
  const { orientation, collapsed } = useNavigationMenuContext();
4359
4411
  const [open, setOpen] = React25.useState(defaultOpen);
4360
- React25.useEffect(() => {
4412
+ const [prevCollapsed, setPrevCollapsed] = React25.useState(collapsed);
4413
+ if (collapsed !== prevCollapsed) {
4414
+ setPrevCollapsed(collapsed);
4361
4415
  if (collapsed) setOpen(false);
4362
- }, [collapsed]);
4416
+ }
4363
4417
  if (orientation === "horizontal") {
4364
4418
  return /* @__PURE__ */ React25.createElement(
4365
4419
  NavigationMenuPrimitive.Item,
@@ -4591,10 +4645,30 @@ var NavigationMenuGroup = React25.forwardRef(
4591
4645
  ({ className, label, children, ...props }, ref) => {
4592
4646
  const { size, collapsed } = useNavigationMenuContext();
4593
4647
  const s = navigationMenuSizeMap[size];
4594
- return /* @__PURE__ */ React25.createElement("div", { ref, role: "group", className: cn(label && !collapsed && s.groupMargin, className), ...props }, label && !collapsed && /* @__PURE__ */ React25.createElement("div", { className: cn(
4595
- "font-semibold text-text-subtle uppercase tracking-wider select-none",
4596
- s.groupLabel
4597
- ) }, label), /* @__PURE__ */ React25.createElement("ul", { className: "flex flex-col gap-0.5" }, children));
4648
+ const labelId = React25.useId();
4649
+ const showLabel = Boolean(label) && !collapsed;
4650
+ return /* @__PURE__ */ React25.createElement("li", { className: cn(showLabel && s.groupMargin) }, /* @__PURE__ */ React25.createElement(
4651
+ "div",
4652
+ {
4653
+ ref,
4654
+ role: "group",
4655
+ "aria-labelledby": showLabel && !props["aria-label"] ? labelId : void 0,
4656
+ className,
4657
+ ...props
4658
+ },
4659
+ showLabel && /* @__PURE__ */ React25.createElement(
4660
+ "div",
4661
+ {
4662
+ id: labelId,
4663
+ className: cn(
4664
+ "font-semibold text-text-subtle uppercase tracking-wider select-none",
4665
+ s.groupLabel
4666
+ )
4667
+ },
4668
+ label
4669
+ ),
4670
+ /* @__PURE__ */ React25.createElement("ul", { className: "flex flex-col gap-0.5" }, children)
4671
+ ));
4598
4672
  }
4599
4673
  );
4600
4674
  NavigationMenuGroup.displayName = "NavigationMenuGroup";
@@ -5062,9 +5136,9 @@ var PaginationEllipsis = React26.forwardRef(
5062
5136
  );
5063
5137
  PaginationEllipsis.displayName = "PaginationEllipsis";
5064
5138
  var PaginationItems = React26.forwardRef(
5065
- ({ className, ...props }, ref) => {
5139
+ (_props, _ref) => {
5066
5140
  const ctx = usePaginationContext();
5067
- return /* @__PURE__ */ React26.createElement("div", { ref, className: cn("contents", className), ...props }, ctx.paginationRange.map((item, index) => /* @__PURE__ */ React26.createElement(PaginationItem, { key: `${item}-${index}` }, item === "dots" ? /* @__PURE__ */ React26.createElement(PaginationEllipsis, null) : /* @__PURE__ */ React26.createElement(PaginationLink, { page: item }))));
5141
+ return /* @__PURE__ */ React26.createElement(React26.Fragment, null, ctx.paginationRange.map((item, index) => /* @__PURE__ */ React26.createElement(PaginationItem, { key: `${item}-${index}` }, item === "dots" ? /* @__PURE__ */ React26.createElement(PaginationEllipsis, null) : /* @__PURE__ */ React26.createElement(PaginationLink, { page: item }))));
5068
5142
  }
5069
5143
  );
5070
5144
  PaginationItems.displayName = "PaginationItems";
@@ -7382,6 +7456,10 @@ var ChatInput = React38.forwardRef(
7382
7456
  }
7383
7457
  );
7384
7458
  ChatInput.displayName = "ChatInput";
7459
+ function assignRef(ref, value) {
7460
+ if (typeof ref === "function") ref(value);
7461
+ else if (ref) ref.current = value;
7462
+ }
7385
7463
  var ChatInputField = React38.forwardRef(
7386
7464
  ({
7387
7465
  className,
@@ -7404,12 +7482,8 @@ var ChatInputField = React38.forwardRef(
7404
7482
  const setRef = React38.useCallback(
7405
7483
  (el) => {
7406
7484
  internalRef.current = el;
7407
- ctx._fieldRef.current = el;
7408
- if (typeof forwardedRef === "function") {
7409
- forwardedRef(el);
7410
- } else if (forwardedRef) {
7411
- forwardedRef.current = el;
7412
- }
7485
+ assignRef(ctx._fieldRef, el);
7486
+ assignRef(forwardedRef, el);
7413
7487
  },
7414
7488
  // eslint-disable-next-line react-hooks/exhaustive-deps
7415
7489
  [forwardedRef]