@umami/react-zen 0.239.0 → 0.241.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -385,6 +385,37 @@ var toast = tailwindVariants.tv({
385
385
  }
386
386
  }
387
387
  });
388
+ var tag = tailwindVariants.tv({
389
+ slots: {
390
+ base: [
391
+ "inline-flex items-center gap-1 px-2 py-0.5 rounded text-sm",
392
+ "cursor-default outline-none",
393
+ "focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-1"
394
+ ],
395
+ removeButton: [
396
+ "flex items-center justify-center rounded-full p-0.5 -mr-1",
397
+ "cursor-pointer outline-none",
398
+ "hover:bg-black/10 dark:hover:bg-white/10",
399
+ "pressed:bg-black/20 dark:pressed:bg-white/20"
400
+ ]
401
+ },
402
+ variants: {
403
+ variant: {
404
+ default: {
405
+ base: "bg-interactive text-foreground-primary"
406
+ },
407
+ outline: {
408
+ base: "bg-transparent border border-edge text-foreground-primary"
409
+ },
410
+ primary: {
411
+ base: "bg-primary text-primary-foreground"
412
+ }
413
+ }
414
+ },
415
+ defaultVariants: {
416
+ variant: "default"
417
+ }
418
+ });
388
419
  function Button({
389
420
  variant,
390
421
  size = "md",
@@ -1120,7 +1151,11 @@ var semanticColorMap = {
1120
1151
  "surface-sunken": { text: "", bg: "bg-surface-sunken" },
1121
1152
  "surface-overlay": { text: "", bg: "bg-surface-overlay" },
1122
1153
  "surface-inverted": { text: "", bg: "bg-surface-inverted" },
1123
- "surface-disabled": { text: "", bg: "bg-surface-disabled" }
1154
+ "surface-disabled": { text: "", bg: "bg-surface-disabled" },
1155
+ // Interactive colors
1156
+ interactive: { text: "", bg: "bg-interactive" },
1157
+ "interactive-hover": { text: "", bg: "bg-interactive-hover" },
1158
+ "interactive-pressed": { text: "", bg: "bg-interactive-pressed" }
1124
1159
  };
1125
1160
  var tailwindColors = /* @__PURE__ */ new Set([
1126
1161
  "gray",
@@ -2396,7 +2431,6 @@ function Text({
2396
2431
  const colorStr = color === true ? "true" : color;
2397
2432
  const decorationColorStr = decorationColor === true ? "true" : decorationColor;
2398
2433
  const classes = cn(
2399
- "text-foreground-primary",
2400
2434
  mapFontSize(size),
2401
2435
  mapFontWeight(weight),
2402
2436
  mapTextAlign(align),
@@ -2520,6 +2554,7 @@ var Box = react.forwardRef(function Box2({
2520
2554
  flexBasis,
2521
2555
  flexGrow,
2522
2556
  flexShrink,
2557
+ fill,
2523
2558
  gridArea,
2524
2559
  gridRow,
2525
2560
  gridColumn,
@@ -2607,6 +2642,7 @@ var Box = react.forwardRef(function Box2({
2607
2642
  ...flexBasis && { flexBasis },
2608
2643
  ...flexGrow !== void 0 && { flexGrow },
2609
2644
  ...flexShrink !== void 0 && { flexShrink },
2645
+ ...fill && { flex: 1 },
2610
2646
  ...gridArea && { gridArea },
2611
2647
  ...gridRow && { gridRow },
2612
2648
  ...gridColumn && { gridColumn },
@@ -2871,20 +2907,12 @@ function Calendar({
2871
2907
  function Checkbox({ label, className, children, ...props }) {
2872
2908
  const isSelected = typeof props.value !== "undefined" ? !!props.value : void 0;
2873
2909
  const styles = checkbox();
2874
- return /* @__PURE__ */ jsxRuntime.jsx(
2875
- reactAriaComponents.Checkbox,
2876
- {
2877
- ...props,
2878
- isSelected,
2879
- className: cn(styles.root(), className),
2880
- children: ({ isIndeterminate, isSelected: isSelected2 }) => {
2881
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2882
- /* @__PURE__ */ jsxRuntime.jsx(Box, { className: styles.box(), children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: styles.icon(), size: "sm", children: isIndeterminate ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Minus, {}) : isSelected2 ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Check, {}) : null }) }),
2883
- children
2884
- ] });
2885
- }
2886
- }
2887
- );
2910
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Checkbox, { ...props, isSelected, className: cn(styles.root(), className), children: ({ isIndeterminate, isSelected: isSelected2 }) => {
2911
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2912
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { className: styles.box(), children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: styles.icon(), size: "sm", children: isIndeterminate ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Minus, {}) : isSelected2 ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Check, {}) : null }) }),
2913
+ children
2914
+ ] });
2915
+ } });
2888
2916
  }
2889
2917
  function Code({ className, children, ...props }) {
2890
2918
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -2903,7 +2931,12 @@ function useFieldId(id) {
2903
2931
  const generatedId = react.useId();
2904
2932
  return id ?? generatedId;
2905
2933
  }
2906
- function Label({ size = "base", weight = "semibold", lineHeight = "loose", ...props }) {
2934
+ function Label({
2935
+ size = "base",
2936
+ weight = "semibold",
2937
+ lineHeight = "loose",
2938
+ ...props
2939
+ }) {
2907
2940
  return /* @__PURE__ */ jsxRuntime.jsx(
2908
2941
  Text,
2909
2942
  {
@@ -2976,10 +3009,6 @@ function getHighlightColor(color) {
2976
3009
  }
2977
3010
  function List({
2978
3011
  id,
2979
- items = [],
2980
- idProperty = "id",
2981
- labelProperty = "label",
2982
- separatorProperty = "separator",
2983
3012
  highlightColor,
2984
3013
  showCheckmark = true,
2985
3014
  isFullscreen,
@@ -3011,7 +3040,6 @@ function List({
3011
3040
  ...props,
3012
3041
  selectedKeys: value || selectedKeys,
3013
3042
  defaultSelectedKeys: value || defaultSelectedKeys,
3014
- items,
3015
3043
  className: cn(
3016
3044
  "grid outline-none overflow-auto gap-1",
3017
3045
  isFullscreen && "block p-3 rounded-none fixed inset-0 overflow-auto z-[9999] bg-surface-base",
@@ -3019,14 +3047,7 @@ function List({
3019
3047
  ),
3020
3048
  onSelectionChange: handleSelectionChange,
3021
3049
  style: { ...style, ...getHighlightColor(highlightColor) },
3022
- children: children || items?.map((item) => {
3023
- const id2 = item[idProperty] || item.toString();
3024
- const label2 = item[labelProperty] || item.toString();
3025
- return /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
3026
- item[separatorProperty] && /* @__PURE__ */ jsxRuntime.jsx(ListSeparator, {}),
3027
- /* @__PURE__ */ jsxRuntime.jsx(ListItem, { id: id2, showCheckmark, children: label2 })
3028
- ] }, id2);
3029
- })
3050
+ children
3030
3051
  }
3031
3052
  )
3032
3053
  ] });
@@ -3083,7 +3104,6 @@ function Popover({ children, isFullscreen, className, ...props }) {
3083
3104
  );
3084
3105
  }
3085
3106
  function ComboBox({
3086
- items,
3087
3107
  className,
3088
3108
  renderEmptyState,
3089
3109
  listProps,
@@ -3120,11 +3140,17 @@ function ComboBox({
3120
3140
  ]
3121
3141
  }
3122
3142
  ),
3123
- /* @__PURE__ */ jsxRuntime.jsx(Popover, { ...popoverProps, children: /* @__PURE__ */ jsxRuntime.jsx(Box, { padding: "2", border: true, borderRadius: "md", shadow: "lg", className: "bg-surface-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(List, { items, renderEmptyState, ...listProps, children: children || items?.map((item) => /* @__PURE__ */ jsxRuntime.jsx(ListItem, { textValue: item, children: item }, item)) }) }) })
3143
+ /* @__PURE__ */ jsxRuntime.jsx(Popover, { ...popoverProps, children: /* @__PURE__ */ jsxRuntime.jsx(Box, { padding: "2", border: true, borderRadius: "md", shadow: "lg", className: "bg-surface-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(List, { renderEmptyState, ...listProps, children }) }) })
3124
3144
  ] });
3125
3145
  }
3126
3146
  var TIMEOUT = 2e3;
3127
- function CopyButton({ value, timeout = TIMEOUT, className, children, ...props }) {
3147
+ function CopyButton({
3148
+ value,
3149
+ timeout = TIMEOUT,
3150
+ className,
3151
+ children,
3152
+ ...props
3153
+ }) {
3128
3154
  const [copied, setCopied] = react.useState(false);
3129
3155
  const ref = react.useRef(timeout);
3130
3156
  const handleCopy = async () => {
@@ -3411,10 +3437,13 @@ function DataCard({ data = [], labelWidth = "auto", ...props }) {
3411
3437
  padding: "6",
3412
3438
  ...props,
3413
3439
  children: rows.map((row, index) => {
3414
- return /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
3415
- /* @__PURE__ */ jsxRuntime.jsx(Row, { paddingY: "3", border: "bottom", borderColor: "muted", paddingRight: "6", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { weight: "bold", children: row?.label }) }),
3416
- /* @__PURE__ */ jsxRuntime.jsx(Row, { paddingY: "3", border: "bottom", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { children: row?.value }) })
3417
- ] }, index);
3440
+ return (
3441
+ // biome-ignore lint/suspicious/noArrayIndexKey: rows are static display data
3442
+ /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
3443
+ /* @__PURE__ */ jsxRuntime.jsx(Row, { paddingY: "3", border: "bottom", borderColor: "muted", paddingRight: "6", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { weight: "bold", children: row?.label }) }),
3444
+ /* @__PURE__ */ jsxRuntime.jsx(Row, { paddingY: "3", border: "bottom", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { children: row?.value }) })
3445
+ ] }, index)
3446
+ );
3418
3447
  })
3419
3448
  }
3420
3449
  );
@@ -3530,25 +3559,28 @@ function DataTable({
3530
3559
  return /* @__PURE__ */ react.createElement(TableColumn, { ...columnProps, key: id, id }, label);
3531
3560
  }) }),
3532
3561
  /* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: rows.map((row, index) => {
3533
- return /* @__PURE__ */ jsxRuntime.jsx(TableRow, { style: { gridTemplateColumns: gridTemplateColumns2 }, children: columns?.map(({ id, as, hidden, className: className2, children: children2, ...cellProps }) => {
3534
- if (hidden) {
3535
- return null;
3536
- }
3537
- const value = typeof children2 === "function" ? children2(row, index) : children2 || row[id];
3538
- return /* @__PURE__ */ react.createElement(
3539
- TableCell,
3540
- {
3541
- ...cellProps,
3542
- key: id,
3543
- className: cn("items-center", className2)
3544
- },
3545
- as ? react.createElement(as, {}, value) : value
3546
- );
3547
- }) }, index);
3562
+ return (
3563
+ // biome-ignore lint/suspicious/noArrayIndexKey: row data may not have unique ids
3564
+ /* @__PURE__ */ jsxRuntime.jsx(TableRow, { style: { gridTemplateColumns: gridTemplateColumns2 }, children: columns?.map(({ id, as, hidden, className: className2, children: children2, ...cellProps }) => {
3565
+ if (hidden) {
3566
+ return null;
3567
+ }
3568
+ const value = typeof children2 === "function" ? children2(row, index) : children2 || row[id];
3569
+ return /* @__PURE__ */ react.createElement(
3570
+ TableCell,
3571
+ {
3572
+ ...cellProps,
3573
+ key: id,
3574
+ className: cn("items-center", className2)
3575
+ },
3576
+ as ? react.createElement(as, {}, value) : value
3577
+ );
3578
+ }) }, index)
3579
+ );
3548
3580
  }) })
3549
3581
  ] });
3550
3582
  }
3551
- function DataColumn(props) {
3583
+ function DataColumn(_props) {
3552
3584
  return null;
3553
3585
  }
3554
3586
  var sizeMap2 = {
@@ -3589,7 +3621,12 @@ function Tooltip({ children, className, showArrow, ...props }) {
3589
3621
  children
3590
3622
  ] });
3591
3623
  }
3592
- function TooltipBubble({ children, className, color: _color, ...props }) {
3624
+ function TooltipBubble({
3625
+ children,
3626
+ className,
3627
+ color: _color,
3628
+ ...props
3629
+ }) {
3593
3630
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { ...props, className, children });
3594
3631
  }
3595
3632
  function FloatingTooltip({ className, style, children, ...props }) {
@@ -3607,7 +3644,10 @@ function FloatingTooltip({ className, style, children, ...props }) {
3607
3644
  TooltipBubble,
3608
3645
  {
3609
3646
  ...props,
3610
- className: cn("fixed pointer-events-none z-[9999] -translate-x-1/2 -translate-y-[calc(100%+10px)]", className),
3647
+ className: cn(
3648
+ "fixed pointer-events-none z-[9999] -translate-x-1/2 -translate-y-[calc(100%+10px)]",
3649
+ className
3650
+ ),
3611
3651
  style: { ...style, left: position.x, top: position.y },
3612
3652
  children
3613
3653
  }
@@ -3754,7 +3794,12 @@ function FormFieldArray({
3754
3794
  children({ ...context, ...fieldProps })
3755
3795
  ] });
3756
3796
  }
3757
- function FormResetButton({ values = {}, children, onPress, ...props }) {
3797
+ function FormResetButton({
3798
+ values = {},
3799
+ children,
3800
+ onPress,
3801
+ ...props
3802
+ }) {
3758
3803
  const { reset } = reactHookForm.useFormContext();
3759
3804
  const handleReset = (e) => {
3760
3805
  reset(values);
@@ -4045,7 +4090,7 @@ function Toast({
4045
4090
  return /* @__PURE__ */ jsxRuntime.jsxs(Row, { ...props, className: cn(toast({ variant }), className), children: [
4046
4091
  /* @__PURE__ */ jsxRuntime.jsxs(Column, { flexGrow: 1, gap: "1", children: [
4047
4092
  title && /* @__PURE__ */ jsxRuntime.jsx(Text, { weight: "semibold", children: title }),
4048
- message && /* @__PURE__ */ jsxRuntime.jsx(Text, { color: "muted", children: message })
4093
+ message && /* @__PURE__ */ jsxRuntime.jsx(Text, { color: title ? "muted" : void 0, children: message })
4049
4094
  ] }),
4050
4095
  hasActions && actions.map((action) => {
4051
4096
  return /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", onPress: () => onClose?.(action), children: action }, action);
@@ -4065,13 +4110,13 @@ function Toast({
4065
4110
  }
4066
4111
  var positionClasses = {
4067
4112
  "top-left": "top-4 left-4 items-start",
4068
- "top": "top-4 left-1/2 -translate-x-1/2 items-center",
4113
+ top: "top-4 left-1/2 -translate-x-1/2 items-center",
4069
4114
  "top-right": "top-4 right-4 items-end",
4070
4115
  "bottom-left": "bottom-4 left-4 items-start",
4071
- "bottom": "bottom-4 left-1/2 -translate-x-1/2 items-center",
4116
+ bottom: "bottom-4 left-1/2 -translate-x-1/2 items-center",
4072
4117
  "bottom-right": "bottom-4 right-4 items-end",
4073
- "left": "top-1/2 left-4 -translate-y-1/2 items-start",
4074
- "right": "top-1/2 right-4 -translate-y-1/2 items-end"
4118
+ left: "top-1/2 left-4 -translate-y-1/2 items-start",
4119
+ right: "top-1/2 right-4 -translate-y-1/2 items-end"
4075
4120
  };
4076
4121
  var AnimatedBox = web.animated(Box);
4077
4122
  function Toaster({ duration = 0, position = "bottom-right" }) {
@@ -4389,6 +4434,11 @@ var PALETTE_LABELS = {
4389
4434
  };
4390
4435
  function PaletteSwitcher({ className }) {
4391
4436
  const { palette, setPalette } = useTheme();
4437
+ const [mounted, setMounted] = react.useState(false);
4438
+ react.useEffect(() => {
4439
+ setMounted(true);
4440
+ }, []);
4441
+ const currentPalette = mounted ? palette : "neutral";
4392
4442
  return /* @__PURE__ */ jsxRuntime.jsx(
4393
4443
  "div",
4394
4444
  {
@@ -4402,13 +4452,13 @@ function PaletteSwitcher({ className }) {
4402
4452
  type: "button",
4403
4453
  onClick: () => setPalette(p),
4404
4454
  "aria-label": PALETTE_LABELS[p],
4405
- "aria-pressed": palette === p,
4455
+ "aria-pressed": currentPalette === p,
4406
4456
  className: cn(
4407
4457
  "px-3 h-9 flex items-center justify-center cursor-pointer outline-none transition-colors text-sm",
4408
4458
  "[&:not(:first-child)]:border-l [&:not(:first-child)]:border-edge",
4409
4459
  "hover:bg-interactive",
4410
4460
  "focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset",
4411
- palette === p ? "bg-interactive text-foreground-primary" : "text-foreground-muted"
4461
+ currentPalette === p ? "bg-interactive text-foreground-primary" : "text-foreground-muted"
4412
4462
  ),
4413
4463
  children: PALETTE_LABELS[p]
4414
4464
  },
@@ -4417,7 +4467,7 @@ function PaletteSwitcher({ className }) {
4417
4467
  }
4418
4468
  );
4419
4469
  }
4420
- var SvgEyeSlash = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 256 256", ...props, children: [
4470
+ var SvgEye = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 256 256", ...props, children: [
4421
4471
  /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "none", d: "M0 0h256v256H0z" }),
4422
4472
  /* @__PURE__ */ jsxRuntime.jsx(
4423
4473
  "path",
@@ -4427,23 +4477,25 @@ var SvgEyeSlash = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "ht
4427
4477
  strokeLinecap: "round",
4428
4478
  strokeLinejoin: "round",
4429
4479
  strokeWidth: 16,
4430
- d: "m48 40 160 176M154.91 157.6a40 40 0 0 1-53.82-59.2M135.53 88.71a40 40 0 0 1 32.3 35.53"
4480
+ d: "M128 56c-80 0-112 72-112 72s32 72 112 72 112-72 112-72-32-72-112-72"
4431
4481
  }
4432
4482
  ),
4433
4483
  /* @__PURE__ */ jsxRuntime.jsx(
4434
- "path",
4484
+ "circle",
4435
4485
  {
4486
+ cx: 128,
4487
+ cy: 128,
4488
+ r: 40,
4436
4489
  fill: "none",
4437
4490
  stroke: "currentColor",
4438
4491
  strokeLinecap: "round",
4439
4492
  strokeLinejoin: "round",
4440
- strokeWidth: 16,
4441
- d: "M208.61 169.1C230.41 149.58 240 128 240 128s-32-72-112-72a126 126 0 0 0-20.68 1.68M74 68.6C33.23 89.24 16 128 16 128s32 72 112 72a118.05 118.05 0 0 0 54-12.6"
4493
+ strokeWidth: 16
4442
4494
  }
4443
4495
  )
4444
4496
  ] });
4445
- var EyeSlash_default = SvgEyeSlash;
4446
- var SvgEye = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 256 256", ...props, children: [
4497
+ var Eye_default = SvgEye;
4498
+ var SvgEyeSlash = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 256 256", ...props, children: [
4447
4499
  /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "none", d: "M0 0h256v256H0z" }),
4448
4500
  /* @__PURE__ */ jsxRuntime.jsx(
4449
4501
  "path",
@@ -4453,24 +4505,22 @@ var SvgEye = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://
4453
4505
  strokeLinecap: "round",
4454
4506
  strokeLinejoin: "round",
4455
4507
  strokeWidth: 16,
4456
- d: "M128 56c-80 0-112 72-112 72s32 72 112 72 112-72 112-72-32-72-112-72"
4508
+ d: "m48 40 160 176M154.91 157.6a40 40 0 0 1-53.82-59.2M135.53 88.71a40 40 0 0 1 32.3 35.53"
4457
4509
  }
4458
4510
  ),
4459
4511
  /* @__PURE__ */ jsxRuntime.jsx(
4460
- "circle",
4512
+ "path",
4461
4513
  {
4462
- cx: 128,
4463
- cy: 128,
4464
- r: 40,
4465
4514
  fill: "none",
4466
4515
  stroke: "currentColor",
4467
4516
  strokeLinecap: "round",
4468
4517
  strokeLinejoin: "round",
4469
- strokeWidth: 16
4518
+ strokeWidth: 16,
4519
+ d: "M208.61 169.1C230.41 149.58 240 128 240 128s-32-72-112-72a126 126 0 0 0-20.68 1.68M74 68.6C33.23 89.24 16 128 16 128s32 72 112 72a118.05 118.05 0 0 0 54-12.6"
4470
4520
  }
4471
4521
  )
4472
4522
  ] });
4473
- var Eye_default = SvgEye;
4523
+ var EyeSlash_default = SvgEyeSlash;
4474
4524
  function PasswordField({ label, className, ...props }) {
4475
4525
  const [show, setShow] = react.useState(false);
4476
4526
  const type = show ? "text" : "password";
@@ -4660,7 +4710,6 @@ function SearchField({
4660
4710
  ] });
4661
4711
  }
4662
4712
  function Select({
4663
- items = [],
4664
4713
  value,
4665
4714
  defaultValue,
4666
4715
  label,
@@ -4733,7 +4782,6 @@ function Select({
4733
4782
  List,
4734
4783
  {
4735
4784
  ...listProps,
4736
- items,
4737
4785
  isFullscreen,
4738
4786
  ...isFullscreen && {
4739
4787
  shouldSelectOnPressUp: true,
@@ -4856,6 +4904,20 @@ function Tab({ children, className, ...props }) {
4856
4904
  function TabPanel({ children, className, ...props }) {
4857
4905
  return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.TabPanel, { ...props, className, children });
4858
4906
  }
4907
+ function TagGroup({ label, children, className, ...props }) {
4908
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.TagGroup, { ...props, className: cn("flex flex-col gap-1", className), children: [
4909
+ label && /* @__PURE__ */ jsxRuntime.jsx(Label, { children: label }),
4910
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.TagList, { className: "flex flex-wrap gap-1", children })
4911
+ ] });
4912
+ }
4913
+ function Tag({ variant, children, className, ...props }) {
4914
+ const textValue = typeof children === "string" ? children : void 0;
4915
+ const styles = tag({ variant });
4916
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Tag, { ...props, textValue, className: cn(styles.base(), className), children: ({ allowsRemoving }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4917
+ children,
4918
+ allowsRemoving && /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Button, { slot: "remove", className: styles.removeButton(), children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: "xs", children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.X, {}) }) })
4919
+ ] }) });
4920
+ }
4859
4921
  function getElement(target) {
4860
4922
  return "current" in target ? target.current : target;
4861
4923
  }
@@ -5196,6 +5258,8 @@ exports.TableColumn = TableColumn;
5196
5258
  exports.TableHeader = TableHeader;
5197
5259
  exports.TableRow = TableRow;
5198
5260
  exports.Tabs = Tabs;
5261
+ exports.Tag = Tag;
5262
+ exports.TagGroup = TagGroup;
5199
5263
  exports.Text = Text;
5200
5264
  exports.TextField = TextField;
5201
5265
  exports.ThemeButton = ThemeButton;