@keboola/design 5.0.0 → 6.0.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
@@ -1,7 +1,7 @@
1
1
  import { Slot, Root as Root$1, Slottable } from '@radix-ui/react-slot';
2
2
  export { Slot } from '@radix-ui/react-slot';
3
3
  import * as lucide_react_star from 'lucide-react';
4
- import React26, { createContext, forwardRef, useMemo, useRef, useEffect, useImperativeHandle, Fragment, use, useState, useReducer, useCallback, useId, useLayoutEffect, Children, useContext, useInsertionEffect, isValidElement } from 'react';
4
+ import React26, { createContext, forwardRef, useMemo, useRef, useEffect, use, useImperativeHandle, Fragment, useState, useReducer, useCallback, useId, useLayoutEffect, Children, useContext, useInsertionEffect, isValidElement } from 'react';
5
5
  import { clsx } from 'clsx';
6
6
  import { extendTailwindMerge } from 'tailwind-merge';
7
7
  import { Root as Root$6, Trigger, Portal, Content, Provider } from '@radix-ui/react-tooltip';
@@ -1438,11 +1438,12 @@ var variants = cva(
1438
1438
  "tw-items-center",
1439
1439
  "tw-justify-center",
1440
1440
  "tw-gap-2",
1441
- // text
1441
+ // text — chrome weight/tracking are brand-overridable tokens
1442
+ // (`--font-weight-medium` / `--letter-spacing-chrome`); casing stays `tw-uppercase`.
1442
1443
  "tw-text-xs",
1443
1444
  "tw-leading-5",
1444
1445
  "tw-font-medium",
1445
- "tw-tracking-[1px]",
1446
+ "tw-tracking-chrome",
1446
1447
  "tw-uppercase",
1447
1448
  // border — legacy (non-argo) chrome uses a fixed radius, not the brand token.
1448
1449
  "tw-rounded",
@@ -9011,11 +9012,23 @@ var inputGroupVariants = cva(
9011
9012
  off: ["has-[:is(input,textarea):focus]:!tw-ring-0"]
9012
9013
  },
9013
9014
  variant: {
9014
- primary: ["tw-bg-white", "has-[:is(input,textarea):disabled]:tw-opacity-40"],
9015
+ primary: [
9016
+ "tw-bg-white",
9017
+ "has-[:is(input,textarea):disabled]:tw-opacity-40",
9018
+ // aria-invalid on the control surfaces the error chrome without a `state` prop — the
9019
+ // accessible path (mirrors the `state="error"` legacy tokens). Higher specificity than
9020
+ // the default focus selector, so it wins without `!important`.
9021
+ "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-error-500",
9022
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-error-500",
9023
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-error-200"
9024
+ ],
9015
9025
  secondary: [
9016
9026
  "tw-bg-neutral-100",
9017
9027
  "tw-border-neutral-100",
9018
- "has-[:is(input,textarea):disabled]:tw-opacity-40"
9028
+ "has-[:is(input,textarea):disabled]:tw-opacity-40",
9029
+ "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-error-500",
9030
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-error-500",
9031
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-error-200"
9019
9032
  ],
9020
9033
  argo: [
9021
9034
  // argo follows the brand radius token (overrides the static base)
@@ -9026,7 +9039,12 @@ var inputGroupVariants = cva(
9026
9039
  "tw-text-foreground",
9027
9040
  "has-[:is(input,textarea):disabled]:tw-opacity-50",
9028
9041
  // higher specificity than has-[:is(input,textarea):focus] — prevents focus border on readonly
9029
- "has-[:is(input,textarea)[readonly]:focus]:tw-border-neutral-150"
9042
+ "has-[:is(input,textarea)[readonly]:focus]:tw-border-neutral-150",
9043
+ // aria-invalid on the control surfaces the error chrome without a `state` prop — the
9044
+ // accessible path (uses the themeable `destructive` status token).
9045
+ "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-destructive",
9046
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-destructive",
9047
+ "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-destructive/20"
9030
9048
  ]
9031
9049
  },
9032
9050
  sizing: {
@@ -9981,23 +9999,23 @@ var TimePicker = ({
9981
9999
  )
9982
10000
  ] });
9983
10001
  };
9984
- var Optional = ({ className }) => /* @__PURE__ */ jsx("span", { className: cn("tw-text-muted-foreground", className), children: "(optional)" });
9985
- var Label2 = ({ className, children, id, htmlFor, ...rest }) => {
9986
- return /* @__PURE__ */ jsx(
9987
- RLabel.Root,
9988
- {
9989
- ...rest,
9990
- id: id?.toString(),
9991
- htmlFor: htmlFor?.toString(),
9992
- className: cn(
9993
- "tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50",
9994
- className
9995
- ),
9996
- children
9997
- }
9998
- );
9999
- };
10002
+ var Optional = ({ className, ...props }) => /* @__PURE__ */ jsx("span", { ...props, "aria-hidden": true, className: cn("tw-ml-0.5", "tw-text-muted-foreground", className), children: "(optional)" });
10003
+ var Required = ({ className, ...props }) => /* @__PURE__ */ jsx("span", { ...props, "aria-hidden": true, className: cn("tw-ml-0.5", "tw-text-primary", className), children: "*" });
10004
+ var Label2 = ({ className, children, id, htmlFor, ...rest }) => /* @__PURE__ */ jsx(
10005
+ RLabel.Root,
10006
+ {
10007
+ ...rest,
10008
+ id: id?.toString(),
10009
+ htmlFor: htmlFor?.toString(),
10010
+ className: cn(
10011
+ "tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50",
10012
+ className
10013
+ ),
10014
+ children
10015
+ }
10016
+ );
10000
10017
  Label2.Optional = Optional;
10018
+ Label2.Required = Required;
10001
10019
  var FieldBoxDescription = ({ className, ...props }) => /* @__PURE__ */ jsx(
10002
10020
  "span",
10003
10021
  {
@@ -11185,12 +11203,29 @@ var variants4 = cva(
11185
11203
  ],
11186
11204
  variants: {
11187
11205
  variant: {
11188
- primary: ["tw-bg-white", "disabled:tw-opacity-40", "aria-disabled:tw-opacity-40"],
11206
+ primary: [
11207
+ "tw-bg-white",
11208
+ "disabled:tw-opacity-40",
11209
+ "aria-disabled:tw-opacity-40",
11210
+ // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the
11211
+ // accessible path (mirrors the `state="error"` legacy tokens). The extra attribute
11212
+ // selector outranks the default focus/open state, so it wins without `!important`.
11213
+ "aria-[invalid=true]:tw-border-error-500",
11214
+ "aria-[invalid=true]:focus:tw-border-error-500",
11215
+ "aria-[invalid=true]:focus:tw-ring-error-200",
11216
+ "aria-[invalid=true]:data-[state=open]:tw-border-error-500",
11217
+ "aria-[invalid=true]:data-[state=open]:tw-ring-error-200"
11218
+ ],
11189
11219
  secondary: [
11190
11220
  "tw-bg-neutral-100",
11191
11221
  "tw-border-neutral-100",
11192
11222
  "disabled:tw-opacity-40",
11193
- "aria-disabled:tw-opacity-40"
11223
+ "aria-disabled:tw-opacity-40",
11224
+ "aria-[invalid=true]:tw-border-error-500",
11225
+ "aria-[invalid=true]:focus:tw-border-error-500",
11226
+ "aria-[invalid=true]:focus:tw-ring-error-200",
11227
+ "aria-[invalid=true]:data-[state=open]:tw-border-error-500",
11228
+ "aria-[invalid=true]:data-[state=open]:tw-ring-error-200"
11194
11229
  ],
11195
11230
  argo: [
11196
11231
  // muted filled input surface — gray, distinct from white containers; not the app-background token
@@ -11200,7 +11235,14 @@ var variants4 = cva(
11200
11235
  "tw-rounded-[var(--radius-lg,0.25rem)]",
11201
11236
  "tw-text-foreground",
11202
11237
  "disabled:tw-opacity-50",
11203
- "aria-disabled:tw-opacity-50"
11238
+ "aria-disabled:tw-opacity-50",
11239
+ // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the
11240
+ // accessible path (uses the themeable `destructive` status token).
11241
+ "aria-[invalid=true]:tw-border-destructive",
11242
+ "aria-[invalid=true]:focus:tw-border-destructive",
11243
+ "aria-[invalid=true]:focus:tw-ring-destructive/20",
11244
+ "aria-[invalid=true]:data-[state=open]:tw-border-destructive",
11245
+ "aria-[invalid=true]:data-[state=open]:tw-ring-destructive/20"
11204
11246
  ]
11205
11247
  },
11206
11248
  sizing: {
@@ -11252,7 +11294,7 @@ var SelectTrigger = ({
11252
11294
  ...props,
11253
11295
  children: [
11254
11296
  /* @__PURE__ */ jsx(SelectPrimitive.Value, { placeholder }),
11255
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(icons_exports.ChevronDown, { className: "tw-size-5 tw-text-muted-foreground" }) })
11297
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(icons_exports.ChevronDown, { className: "tw-size-4 tw-text-muted-foreground" }) })
11256
11298
  ]
11257
11299
  }
11258
11300
  );
@@ -11577,12 +11619,14 @@ var badgeRootVariants = cva(
11577
11619
  "tw-h-fit",
11578
11620
  "tw-shrink-0",
11579
11621
  "tw-overflow-hidden",
11580
- // text
11622
+ // text — chrome weight/tracking are brand-overridable tokens
11623
+ // (`--font-weight-medium` / `--letter-spacing-chrome`); casing lives on the
11624
+ // `default` variant below via `tw-uppercase`.
11581
11625
  "tw-whitespace-pre-wrap",
11582
11626
  "tw-break-normal",
11583
11627
  "tw-text-xs",
11584
11628
  "tw-font-medium",
11585
- "tw-tracking-[1px]",
11629
+ "tw-tracking-chrome",
11586
11630
  "tw-text-center",
11587
11631
  "tw-underline",
11588
11632
  // content
@@ -13029,18 +13073,12 @@ var TimeInput = ({
13029
13073
  }
13030
13074
  );
13031
13075
  };
13032
- var InputOtpVariantContext = createContext({
13033
- sizing: "md",
13034
- state: "default"
13035
- });
13036
- var useInputOtpVariant = () => use(InputOtpVariantContext);
13037
- var useInputOtpRenderContext = () => use(OTPInputContext);
13038
- var InputOtpGroup = ({
13076
+ var OtpInputGroup = ({
13039
13077
  ref,
13040
13078
  className,
13041
13079
  ...props
13042
13080
  }) => /* @__PURE__ */ jsx("div", { ref, className: cn("tw-flex tw-items-center tw-gap-2", className), ...props });
13043
- var InputOtpSeparator = ({
13081
+ var OtpInputSeparator = ({
13044
13082
  ref,
13045
13083
  children,
13046
13084
  className,
@@ -13056,61 +13094,46 @@ var InputOtpSeparator = ({
13056
13094
  children: children ?? /* @__PURE__ */ jsx(icons_exports.Minus, { className: "tw-size-4" })
13057
13095
  }
13058
13096
  );
13059
- var slotVariants = cva(
13060
- [
13061
- "tw-relative",
13062
- "tw-flex",
13063
- "tw-items-center",
13064
- "tw-justify-center",
13065
- "tw-border",
13066
- "tw-border-input",
13067
- // muted filled input surface — gray, distinct from white containers; not the app-background token
13068
- "tw-bg-muted",
13069
- "tw-text-foreground",
13070
- "tw-font-medium",
13071
- "tw-tabular-nums",
13072
- "tw-rounded-lg",
13073
- "tw-transition",
13074
- "tw-outline-none",
13075
- // active slot sits above its neighbours so its ring isn't clipped
13076
- "data-[active=true]:tw-z-10",
13077
- "data-[active=true]:tw-border-primary",
13078
- "data-[active=true]:tw-ring-2",
13079
- "data-[active=true]:tw-ring-ring/50"
13080
- ],
13081
- {
13082
- defaultVariants: {
13083
- sizing: "md",
13084
- state: "default"
13085
- },
13086
- variants: {
13087
- sizing: {
13088
- sm: ["tw-h-8", "tw-w-8", "tw-text-sm"],
13089
- md: ["tw-h-9", "tw-w-9", "tw-text-base"],
13090
- lg: ["tw-h-10", "tw-w-10", "tw-text-lg"]
13091
- },
13092
- // `!` forces the border colour over the base `tw-border-input` once tailwind-merge dedupes.
13093
- // Matches the pattern InputGroup uses for its argo error state.
13094
- state: {
13095
- default: [],
13096
- error: [
13097
- "!tw-border-destructive",
13098
- "tw-bg-destructive/5",
13099
- "data-[active=true]:!tw-border-destructive",
13100
- "data-[active=true]:tw-ring-destructive/40"
13101
- ]
13102
- }
13103
- }
13104
- }
13105
- );
13106
- var InputOtpSlot = ({
13097
+ var slotClassName = [
13098
+ // layout
13099
+ "tw-relative",
13100
+ "tw-flex",
13101
+ "tw-items-center",
13102
+ "tw-justify-center",
13103
+ "tw-font-medium",
13104
+ "tw-tabular-nums",
13105
+ "tw-outline-none",
13106
+ "tw-transition",
13107
+ // resting chrome — always-visible input border on a muted fill (matches InputGroup)
13108
+ "tw-border",
13109
+ "tw-border-solid",
13110
+ "tw-border-input",
13111
+ "tw-bg-muted",
13112
+ "tw-text-foreground",
13113
+ "tw-rounded-[var(--radius-lg,0.25rem)]",
13114
+ // focus — the active slot mirrors InputGroup's argo focus ring; z-10 so the ring isn't clipped
13115
+ "data-[active=true]:tw-z-10",
13116
+ "data-[active=true]:tw-border-primary",
13117
+ "data-[active=true]:tw-ring-4",
13118
+ "data-[active=true]:tw-ring-ring/50",
13119
+ // size — from `data-size` on the group/otp container
13120
+ "group-data-[size=sm]/otp:tw-h-8 group-data-[size=sm]/otp:tw-w-8 group-data-[size=sm]/otp:tw-text-sm",
13121
+ "group-data-[size=md]/otp:tw-h-9 group-data-[size=md]/otp:tw-w-9 group-data-[size=md]/otp:tw-text-base",
13122
+ "group-data-[size=lg]/otp:tw-h-10 group-data-[size=lg]/otp:tw-w-10 group-data-[size=lg]/otp:tw-text-lg",
13123
+ // error — from `aria-invalid` on the OTP input (mirrors InputGroup argo error chrome). `!` beats
13124
+ // the base/active border once tailwind-merge dedupes.
13125
+ "group-has-[input[aria-invalid=true]]/otp:!tw-border-destructive",
13126
+ "group-has-[input[aria-invalid=true]]/otp:data-[active=true]:!tw-border-destructive",
13127
+ "group-has-[input[aria-invalid=true]]/otp:data-[active=true]:tw-ring-destructive/20"
13128
+ ];
13129
+ var OtpInputSlot = ({
13107
13130
  ref,
13108
13131
  index,
13109
13132
  className,
13110
13133
  ...props
13111
13134
  }) => {
13112
- const { slots } = useInputOtpRenderContext();
13113
- const { sizing, state } = useInputOtpVariant();
13135
+ const { slots } = use(OTPInputContext);
13136
+ if (!slots) throw new Error("<OtpInput.Slot> must be rendered inside <OtpInput>.");
13114
13137
  const slot = slots[index];
13115
13138
  const char = slot?.char ?? null;
13116
13139
  const isActive = slot?.isActive ?? false;
@@ -13121,7 +13144,7 @@ var InputOtpSlot = ({
13121
13144
  ref,
13122
13145
  "data-active": isActive || void 0,
13123
13146
  "data-slot-index": index,
13124
- className: cn(slotVariants({ sizing, state }), className),
13147
+ className: cn(slotClassName, className),
13125
13148
  ...props,
13126
13149
  children: [
13127
13150
  char,
@@ -13140,19 +13163,19 @@ var InputOtpSlot = ({
13140
13163
  var Root23 = ({
13141
13164
  ref,
13142
13165
  sizing = "md",
13143
- state = "default",
13144
13166
  pattern = REGEXP_ONLY_DIGITS,
13145
13167
  containerClassName,
13146
13168
  className,
13147
13169
  children,
13170
+ "aria-invalid": ariaInvalid,
13148
13171
  ...rest
13149
- }) => /* @__PURE__ */ jsx(InputOtpVariantContext, { value: { sizing, state }, children: /* @__PURE__ */ jsx(
13172
+ }) => /* @__PURE__ */ jsx("div", { className: "tw-group/otp tw-w-fit", "data-size": sizing, children: /* @__PURE__ */ jsx(
13150
13173
  OTPInput,
13151
13174
  {
13152
13175
  ...rest,
13153
13176
  ref,
13154
13177
  pattern,
13155
- "aria-invalid": state === "error" || void 0,
13178
+ "aria-invalid": ariaInvalid,
13156
13179
  containerClassName: cn(
13157
13180
  "tw-flex tw-items-center tw-gap-2 has-[:disabled]:tw-opacity-50",
13158
13181
  containerClassName
@@ -13161,20 +13184,11 @@ var Root23 = ({
13161
13184
  children
13162
13185
  }
13163
13186
  ) });
13164
- var InputOtp = Object.assign(Root23, {
13165
- Group: InputOtpGroup,
13166
- Slot: InputOtpSlot,
13167
- Separator: InputOtpSeparator
13187
+ var OtpInput = Object.assign(Root23, {
13188
+ Group: OtpInputGroup,
13189
+ Slot: OtpInputSlot,
13190
+ Separator: OtpInputSeparator
13168
13191
  });
13169
-
13170
- // src/blocks/InputOtp/index.ts
13171
- var useInputOtpContext = () => {
13172
- const ctx = use(OTPInputContext);
13173
- if (!ctx.slots) {
13174
- throw new Error("useInputOtpContext must be used inside <InputOtp>.");
13175
- }
13176
- return ctx;
13177
- };
13178
13192
  var SearchInput = ({
13179
13193
  ref,
13180
13194
  // group props
@@ -15148,6 +15162,18 @@ var FormGroupColorInput = ({
15148
15162
  const { state } = useFormGroupContext();
15149
15163
  return /* @__PURE__ */ jsx(ColorInput, { state, ...props, ref });
15150
15164
  };
15165
+ var toMessage = (entry) => typeof entry === "string" ? entry : entry?.message;
15166
+ var FormGroupError = ({ children, className, errors, ...rest }) => {
15167
+ const content = useMemo(() => {
15168
+ if (children) return children;
15169
+ const messages = (errors ?? []).map(toMessage).filter((message2) => !!message2);
15170
+ if (messages.length === 0) return null;
15171
+ if (messages.length === 1) return messages[0];
15172
+ return /* @__PURE__ */ jsx("ul", { className: "tw-m-0 tw-flex tw-list-disc tw-flex-col tw-gap-0 tw-pl-4", children: messages.map((message2, index) => /* @__PURE__ */ jsx("li", { children: message2 }, index)) });
15173
+ }, [children, errors]);
15174
+ if (!content) return null;
15175
+ return /* @__PURE__ */ jsx("div", { ...rest, role: "alert", className: cn("tw-m-0 tw-text-xs tw-text-destructive", className), children: content });
15176
+ };
15151
15177
  var helpVariants = cva(["tw-m-0", "tw-text-xs"], {
15152
15178
  defaultVariants: {
15153
15179
  state: "default"
@@ -15155,18 +15181,17 @@ var helpVariants = cva(["tw-m-0", "tw-text-xs"], {
15155
15181
  variants: {
15156
15182
  state: {
15157
15183
  default: ["tw-text-muted-foreground"],
15158
- error: ["tw-text-destructive"],
15159
15184
  warning: ["tw-text-warning"]
15160
15185
  }
15161
15186
  }
15162
15187
  });
15163
- var HelpBlock = ({ children, className, state = "default", testId }) => {
15188
+ var HelpBlock = ({ children, className, state = "default", ...rest }) => {
15164
15189
  if (!children) return null;
15165
- return /* @__PURE__ */ jsx("p", { "data-testid": testId, className: helpVariants({ state, className }), children });
15190
+ return /* @__PURE__ */ jsx("p", { ...rest, className: helpVariants({ state, className }), children });
15166
15191
  };
15167
15192
  var FormGroupHelp = ({ children, ...rest }) => {
15168
15193
  const formGroupContext = useFormGroupContext();
15169
- return /* @__PURE__ */ jsx(HelpBlock, { state: formGroupContext.state, ...rest, children });
15194
+ return /* @__PURE__ */ jsx(HelpBlock, { state: formGroupContext.state === "warning" ? "warning" : "default", ...rest, children });
15170
15195
  };
15171
15196
  var FormGroupNumberInput = ({
15172
15197
  ref,
@@ -15186,10 +15211,11 @@ var FormGroupTextInput = ({
15186
15211
  const { state } = useFormGroupContext();
15187
15212
  return /* @__PURE__ */ jsx(TextInput, { state, ...props, ref });
15188
15213
  };
15189
- var FormGroup = ({ className, children, state, testId }) => {
15190
- return /* @__PURE__ */ jsx(FormGroupProvider, { value: { state }, children: /* @__PURE__ */ jsx("div", { "data-testid": testId, className: cn("tw-flex tw-flex-col tw-gap-1", className), children }) });
15214
+ var FormGroup = ({ className, children, state, ...rest }) => {
15215
+ return /* @__PURE__ */ jsx(FormGroupProvider, { value: { state }, children: /* @__PURE__ */ jsx("div", { ...rest, className: cn("tw-flex tw-flex-col tw-gap-1", className), children }) });
15191
15216
  };
15192
15217
  FormGroup.Help = FormGroupHelp;
15218
+ FormGroup.Error = FormGroupError;
15193
15219
  FormGroup.TextInput = FormGroupTextInput;
15194
15220
  FormGroup.NumberInput = FormGroupNumberInput;
15195
15221
  FormGroup.ColorInput = FormGroupColorInput;
@@ -15418,7 +15444,7 @@ var ANIMATION_CLASS_NAME = cn(
15418
15444
  "tw-relative",
15419
15445
  "tw-overflow-hidden",
15420
15446
  "tw-pointer-events-none",
15421
- "tw-bg-muted",
15447
+ "tw-bg-skeleton",
15422
15448
  // before
15423
15449
  'before:tw-content-[""]',
15424
15450
  "before:tw-opacity-100",
@@ -18412,6 +18438,11 @@ var tokensToCssVars = ({
18412
18438
  vars.set("--font-sans", typography?.fontFamily?.trim() || void 0);
18413
18439
  vars.set("--font-display", typography?.fontDisplay?.trim() || void 0);
18414
18440
  vars.set("--font-mono", typography?.fontMono?.trim() || void 0);
18441
+ vars.set("--font-weight-normal", typography?.weight?.normal);
18442
+ vars.set("--font-weight-medium", typography?.weight?.medium);
18443
+ vars.set("--font-weight-semibold", typography?.weight?.semibold);
18444
+ vars.set("--font-weight-bold", typography?.weight?.bold);
18445
+ vars.set("--letter-spacing-chrome", typography?.letterSpacing?.chrome);
18415
18446
  vars.set("--radius-sm", radii?.sm);
18416
18447
  vars.set("--radius-md", radii?.md);
18417
18448
  vars.set("--radius-lg", radii?.lg);
@@ -20910,13 +20941,29 @@ var BreadcrumbDropdownGroup = ({
20910
20941
  [parent, labelMatched, registerChild]
20911
20942
  );
20912
20943
  const isExpanded = !collapsible || expanded || filtering;
20944
+ const isEmpty = Children.count(children) === 0;
20913
20945
  return /* @__PURE__ */ jsxs(
20914
20946
  "div",
20915
20947
  {
20916
20948
  className: cn("tw-flex tw-flex-col", className),
20917
20949
  style: visible ? void 0 : { display: "none" },
20918
20950
  children: [
20919
- collapsible ? /* @__PURE__ */ jsxs(
20951
+ collapsible && isEmpty ? /* @__PURE__ */ jsxs(
20952
+ "span",
20953
+ {
20954
+ "aria-disabled": true,
20955
+ className: cn(
20956
+ headerClass,
20957
+ "tw-text-muted-foreground",
20958
+ // Fade just the leading chevron lighter than the label text.
20959
+ "[&>svg:first-child]:tw-opacity-50"
20960
+ ),
20961
+ children: [
20962
+ /* @__PURE__ */ jsx(icons_exports.ChevronRight, {}),
20963
+ label
20964
+ ]
20965
+ }
20966
+ ) : collapsible && !isEmpty ? /* @__PURE__ */ jsxs(
20920
20967
  "button",
20921
20968
  {
20922
20969
  type: "button",
@@ -20929,7 +20976,31 @@ var BreadcrumbDropdownGroup = ({
20929
20976
  ]
20930
20977
  }
20931
20978
  ) : /* @__PURE__ */ jsx("span", { className: headerClass, children: label }),
20932
- /* @__PURE__ */ jsx(BreadcrumbDropdownContext, { value: childContext, children: /* @__PURE__ */ jsx(
20979
+ /* @__PURE__ */ jsx(BreadcrumbDropdownContext, { value: childContext, children: collapsible && !isEmpty ? (
20980
+ // Animated expand / collapse via a CSS grid-rows transition (0fr ↔ 1fr). The children stay
20981
+ // mounted while collapsed so the filter registry keeps receiving their visibility; `inert`
20982
+ // + `aria-hidden` take the collapsed content out of the a11y tree and tab order. An active
20983
+ // filter query force-expands (`isExpanded` includes `filtering`).
20984
+ /* @__PURE__ */ jsx(
20985
+ "div",
20986
+ {
20987
+ className: cn(
20988
+ "tw-grid tw-transition-[grid-template-rows] tw-duration-200 tw-ease-out",
20989
+ "motion-reduce:tw-transition-none",
20990
+ isExpanded ? "tw-grid-rows-[1fr]" : "tw-grid-rows-[0fr]"
20991
+ ),
20992
+ children: /* @__PURE__ */ jsx(
20993
+ "div",
20994
+ {
20995
+ className: "tw-overflow-hidden",
20996
+ inert: !isExpanded,
20997
+ "aria-hidden": isExpanded ? void 0 : true,
20998
+ children: /* @__PURE__ */ jsx("div", { className: "tw-flex tw-flex-col tw-pl-6", children })
20999
+ }
21000
+ )
21001
+ }
21002
+ )
21003
+ ) : /* @__PURE__ */ jsx(
20933
21004
  "div",
20934
21005
  {
20935
21006
  className: "tw-flex tw-flex-col tw-pl-6",
@@ -21055,11 +21126,12 @@ var chevronButtonClass = cn(
21055
21126
  "tw-flex",
21056
21127
  "tw-items-center",
21057
21128
  "tw-justify-center",
21058
- "tw-rounded-sm",
21129
+ "tw-rounded-md",
21059
21130
  "tw-border-none",
21060
21131
  "tw-bg-transparent",
21061
21132
  "tw-cursor-pointer",
21062
- "tw-p-0.5",
21133
+ // Generous 24px hit target (was ~18px) — colour-only hover, no background box.
21134
+ "tw-size-6",
21063
21135
  "tw-text-muted-foreground",
21064
21136
  "tw-transition-colors",
21065
21137
  "hover:tw-text-foreground",
@@ -22912,84 +22984,179 @@ var SubmitButton = ({ children = "Submit", ...buttonProps }) => {
22912
22984
  }
22913
22985
  );
22914
22986
  };
22915
- var errorMessage = (field) => {
22916
- const first = field.state.meta.errors[0];
22917
- if (!first) return void 0;
22918
- if (typeof first === "string") return first;
22919
- if (typeof first === "object" && first !== null && "message" in first) {
22920
- const message2 = first.message;
22921
- return typeof message2 === "string" ? message2 : void 0;
22922
- }
22923
- return void 0;
22924
- };
22925
- var FieldShell = ({ field, label, required, help, className, children }) => {
22926
- const error = errorMessage(field);
22927
- const showError = field.state.meta.isTouched && !!error;
22928
- return /* @__PURE__ */ jsxs(FormGroup, { className, state: showError ? "error" : void 0, children: [
22929
- label && /* @__PURE__ */ jsxs(Label2, { htmlFor: field.name, children: [
22930
- label,
22931
- required && /* @__PURE__ */ jsx("span", { className: "tw-ml-0.5 tw-text-primary", children: "*" })
22987
+ var FieldItem = ({
22988
+ label,
22989
+ required,
22990
+ requiredMark = "required",
22991
+ help,
22992
+ tooltip,
22993
+ className,
22994
+ "aria-describedby": ariaDescribedBy,
22995
+ children
22996
+ }) => {
22997
+ const field = useFieldContext();
22998
+ const { errors, isTouched } = field.state.meta;
22999
+ const isInvalid = isTouched && errors.length > 0;
23000
+ const errorId = `${field.name}-error`;
23001
+ const descriptionId = `${field.name}-description`;
23002
+ const describedBy = [ariaDescribedBy, !!help && descriptionId, isInvalid && errorId].filter(Boolean).join(" ") || void 0;
23003
+ return /* @__PURE__ */ jsxs(FormGroup, { className, children: [
23004
+ label && /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-gap-1", children: [
23005
+ /* @__PURE__ */ jsxs(Label2, { htmlFor: field.name, children: [
23006
+ label,
23007
+ requiredMark === "required" && required && /* @__PURE__ */ jsx(Label2.Required, {}),
23008
+ requiredMark === "optional" && !required && /* @__PURE__ */ jsx(Label2.Optional, {})
23009
+ ] }),
23010
+ tooltip && /* @__PURE__ */ jsx(Tooltip, { tooltip, placement: "top", triggerAsChild: true, children: /* @__PURE__ */ jsx(
23011
+ "button",
23012
+ {
23013
+ type: "button",
23014
+ "aria-label": typeof label === "string" ? `More information about ${label}` : "More information",
23015
+ className: "tailwindcss-preflight tw-text-muted-foreground focus:tw-outline-none focus-visible:tw-text-primary",
23016
+ children: /* @__PURE__ */ jsx(icons_exports.Info, { className: "tw-size-3" })
23017
+ }
23018
+ ) })
22932
23019
  ] }),
22933
- children,
22934
- showError ? /* @__PURE__ */ jsx(FormGroup.Help, { children: error }) : help && /* @__PURE__ */ jsx(FormGroup.Help, { children: help })
23020
+ children({
23021
+ id: field.name,
23022
+ name: field.name,
23023
+ "aria-required": required || void 0,
23024
+ "aria-invalid": isInvalid || void 0,
23025
+ "aria-describedby": describedBy
23026
+ }),
23027
+ (help || isInvalid) && /* @__PURE__ */ jsxs("div", { children: [
23028
+ help && /* @__PURE__ */ jsx(FormGroup.Help, { id: descriptionId, children: help }),
23029
+ isInvalid && /* @__PURE__ */ jsx(FormGroup.Error, { id: errorId, errors })
23030
+ ] })
22935
23031
  ] });
22936
23032
  };
22937
- var CheckboxField = ({ label, help, className, children, ...checkboxProps }) => {
23033
+ var CheckboxField = ({ className, children, ...checkboxProps }) => {
22938
23034
  const field = useFieldContext();
22939
- return /* @__PURE__ */ jsx(FieldShell, { field, help, className, children: /* @__PURE__ */ jsx(
23035
+ return /* @__PURE__ */ jsx(FieldItem, { className, children: (control) => /* @__PURE__ */ jsx(
22940
23036
  Checkbox,
22941
23037
  {
22942
- id: field.name,
22943
- name: field.name,
23038
+ ...checkboxProps,
23039
+ ...control,
22944
23040
  checked: field.state.value ?? false,
22945
- onCheckedChange: (checked) => {
22946
- field.handleChange(checked === true);
22947
- },
23041
+ onCheckedChange: (checked) => field.handleChange(checked === true),
22948
23042
  onBlur: field.handleBlur,
22949
- ...checkboxProps,
22950
- children: children ?? label
23043
+ children
22951
23044
  }
22952
23045
  ) });
22953
23046
  };
22954
- var NumberField = ({ label, required, help, className, ...inputProps }) => {
23047
+ var NumberField = ({
23048
+ label,
23049
+ required,
23050
+ requiredMark,
23051
+ help,
23052
+ tooltip,
23053
+ className,
23054
+ "aria-describedby": ariaDescribedBy,
23055
+ ...inputProps
23056
+ }) => {
23057
+ const field = useFieldContext();
23058
+ return /* @__PURE__ */ jsx(
23059
+ FieldItem,
23060
+ {
23061
+ label,
23062
+ required,
23063
+ requiredMark,
23064
+ help,
23065
+ tooltip,
23066
+ className,
23067
+ "aria-describedby": ariaDescribedBy,
23068
+ children: (control) => /* @__PURE__ */ jsx(
23069
+ NumberInput,
23070
+ {
23071
+ ...inputProps,
23072
+ ...control,
23073
+ value: field.state.value ?? null,
23074
+ onValueChange: field.handleChange,
23075
+ onBlur: field.handleBlur
23076
+ }
23077
+ )
23078
+ }
23079
+ );
23080
+ };
23081
+ var OtpInputField = ({
23082
+ label,
23083
+ required,
23084
+ requiredMark,
23085
+ help,
23086
+ tooltip,
23087
+ className,
23088
+ "aria-describedby": ariaDescribedBy,
23089
+ maxLength,
23090
+ ...otpProps
23091
+ }) => {
22955
23092
  const field = useFieldContext();
22956
- return /* @__PURE__ */ jsx(FieldShell, { field, label, required, help, className, children: /* @__PURE__ */ jsx(
22957
- FormGroup.NumberInput,
23093
+ return /* @__PURE__ */ jsx(
23094
+ FieldItem,
22958
23095
  {
22959
- id: field.name,
22960
- name: field.name,
22961
- value: field.state.value ?? null,
22962
- onValueChange: (value) => {
22963
- field.handleChange(value);
22964
- },
22965
- onBlur: field.handleBlur,
22966
- ...inputProps
23096
+ label,
23097
+ required,
23098
+ requiredMark,
23099
+ help,
23100
+ tooltip,
23101
+ className,
23102
+ "aria-describedby": ariaDescribedBy,
23103
+ children: (control) => /* @__PURE__ */ jsx(
23104
+ OtpInput,
23105
+ {
23106
+ ...otpProps,
23107
+ ...control,
23108
+ maxLength,
23109
+ value: field.state.value ?? "",
23110
+ onChange: field.handleChange,
23111
+ onBlur: field.handleBlur,
23112
+ children: /* @__PURE__ */ jsx(OtpInput.Group, { children: Array.from({ length: maxLength }, (_, index) => /* @__PURE__ */ jsx(OtpInput.Slot, { index }, index)) })
23113
+ }
23114
+ )
22967
23115
  }
22968
- ) });
23116
+ );
22969
23117
  };
22970
- var PasswordField = ({ label, required, help, className, ...inputProps }) => {
23118
+ var PasswordField = ({
23119
+ label,
23120
+ required,
23121
+ requiredMark,
23122
+ help,
23123
+ tooltip,
23124
+ className,
23125
+ "aria-describedby": ariaDescribedBy,
23126
+ ...inputProps
23127
+ }) => {
22971
23128
  const field = useFieldContext();
22972
- const showError = field.state.meta.isTouched && field.state.meta.errors.length > 0;
22973
- return /* @__PURE__ */ jsx(FieldShell, { field, label, required, help, className, children: /* @__PURE__ */ jsx(
22974
- PasswordInput,
23129
+ return /* @__PURE__ */ jsx(
23130
+ FieldItem,
22975
23131
  {
22976
- id: field.name,
22977
- name: field.name,
22978
- value: field.state.value ?? "",
22979
- state: showError ? "error" : void 0,
22980
- onValueChange: (value) => {
22981
- field.handleChange(value);
22982
- },
22983
- onBlur: field.handleBlur,
22984
- ...inputProps
23132
+ label,
23133
+ required,
23134
+ requiredMark,
23135
+ help,
23136
+ tooltip,
23137
+ className,
23138
+ "aria-describedby": ariaDescribedBy,
23139
+ children: (control) => /* @__PURE__ */ jsx(
23140
+ PasswordInput,
23141
+ {
23142
+ ...inputProps,
23143
+ ...control,
23144
+ value: field.state.value ?? "",
23145
+ onValueChange: field.handleChange,
23146
+ onBlur: field.handleBlur
23147
+ }
23148
+ )
22985
23149
  }
22986
- ) });
23150
+ );
22987
23151
  };
22988
23152
  var SelectField = ({
22989
23153
  label,
22990
23154
  required,
23155
+ requiredMark,
22991
23156
  help,
23157
+ tooltip,
22992
23158
  className,
23159
+ "aria-describedby": ariaDescribedBy,
22993
23160
  items,
22994
23161
  options,
22995
23162
  placeholder,
@@ -23001,80 +23168,125 @@ var SelectField = ({
23001
23168
  }) => {
23002
23169
  const field = useFieldContext();
23003
23170
  const resolved = items ?? options ?? [];
23004
- return /* @__PURE__ */ jsx(FieldShell, { field, label, required, help, className, children: /* @__PURE__ */ jsxs(
23005
- Select2.Root,
23171
+ return /* @__PURE__ */ jsx(
23172
+ FieldItem,
23006
23173
  {
23007
- value: field.state.value ?? "",
23008
- onValueChange: (value) => {
23009
- field.handleChange(value);
23010
- },
23011
- ...rootProps,
23012
- children: [
23013
- /* @__PURE__ */ jsx(
23014
- Select2.Trigger,
23015
- {
23016
- id: field.name,
23017
- className: triggerClassName ?? "tw-w-full",
23018
- placeholder,
23019
- variant,
23020
- state,
23021
- sizing,
23022
- onBlur: field.handleBlur
23023
- }
23024
- ),
23025
- /* @__PURE__ */ jsx(Select2.Content, { children: resolved.map((option) => /* @__PURE__ */ jsx(Select2.Item, { value: option.value, children: option.label }, option.value)) })
23026
- ]
23174
+ label,
23175
+ required,
23176
+ requiredMark,
23177
+ help,
23178
+ tooltip,
23179
+ className,
23180
+ "aria-describedby": ariaDescribedBy,
23181
+ children: (control) => /* @__PURE__ */ jsxs(
23182
+ Select2.Root,
23183
+ {
23184
+ value: field.state.value ?? "",
23185
+ onValueChange: (value) => {
23186
+ field.handleChange(value);
23187
+ },
23188
+ ...rootProps,
23189
+ children: [
23190
+ /* @__PURE__ */ jsx(
23191
+ Select2.Trigger,
23192
+ {
23193
+ ...control,
23194
+ className: triggerClassName ?? "tw-w-full",
23195
+ placeholder,
23196
+ variant,
23197
+ state,
23198
+ sizing,
23199
+ onBlur: field.handleBlur
23200
+ }
23201
+ ),
23202
+ /* @__PURE__ */ jsx(Select2.Content, { children: resolved.map((option) => /* @__PURE__ */ jsx(Select2.Item, { value: option.value, children: option.label }, option.value)) })
23203
+ ]
23204
+ }
23205
+ )
23027
23206
  }
23028
- ) });
23207
+ );
23029
23208
  };
23030
- var SwitchField = ({ label, help, className, children, ...switchProps }) => {
23209
+ var SwitchField = ({ className, children, ...switchProps }) => {
23031
23210
  const field = useFieldContext();
23032
- return /* @__PURE__ */ jsx(FieldShell, { field, help, className, children: /* @__PURE__ */ jsx(
23211
+ return /* @__PURE__ */ jsx(FieldItem, { className, children: (control) => /* @__PURE__ */ jsx(
23033
23212
  Switch,
23034
23213
  {
23035
- id: field.name,
23036
- name: field.name,
23214
+ ...switchProps,
23215
+ ...control,
23037
23216
  checked: field.state.value ?? false,
23038
- onCheckedChange: (checked) => {
23039
- field.handleChange(checked);
23040
- },
23217
+ onCheckedChange: field.handleChange,
23041
23218
  onBlur: field.handleBlur,
23042
- ...switchProps,
23043
- children: children ?? label
23219
+ children
23044
23220
  }
23045
23221
  ) });
23046
23222
  };
23047
- var TextAreaField = ({ label, required, help, className, ...inputProps }) => {
23223
+ var TextareaField = ({
23224
+ label,
23225
+ required,
23226
+ requiredMark,
23227
+ help,
23228
+ tooltip,
23229
+ className,
23230
+ "aria-describedby": ariaDescribedBy,
23231
+ ...inputProps
23232
+ }) => {
23048
23233
  const field = useFieldContext();
23049
- return /* @__PURE__ */ jsx(FieldShell, { field, label, required, help, className, children: /* @__PURE__ */ jsx(
23050
- FormGroup.Textarea,
23234
+ return /* @__PURE__ */ jsx(
23235
+ FieldItem,
23051
23236
  {
23052
- id: field.name,
23053
- name: field.name,
23054
- value: field.state.value ?? "",
23055
- onValueChange: (value) => {
23056
- field.handleChange(value);
23057
- },
23058
- onBlur: field.handleBlur,
23059
- ...inputProps
23237
+ label,
23238
+ required,
23239
+ requiredMark,
23240
+ help,
23241
+ tooltip,
23242
+ className,
23243
+ "aria-describedby": ariaDescribedBy,
23244
+ children: (control) => /* @__PURE__ */ jsx(
23245
+ Textarea,
23246
+ {
23247
+ ...inputProps,
23248
+ ...control,
23249
+ value: field.state.value ?? "",
23250
+ onValueChange: field.handleChange,
23251
+ onBlur: field.handleBlur
23252
+ }
23253
+ )
23060
23254
  }
23061
- ) });
23255
+ );
23062
23256
  };
23063
- var TextField = ({ label, required, help, className, ...inputProps }) => {
23257
+ var TextField = ({
23258
+ label,
23259
+ required,
23260
+ requiredMark,
23261
+ help,
23262
+ tooltip,
23263
+ className,
23264
+ "aria-describedby": ariaDescribedBy,
23265
+ ...inputProps
23266
+ }) => {
23064
23267
  const field = useFieldContext();
23065
- return /* @__PURE__ */ jsx(FieldShell, { field, label, required, help, className, children: /* @__PURE__ */ jsx(
23066
- FormGroup.TextInput,
23268
+ return /* @__PURE__ */ jsx(
23269
+ FieldItem,
23067
23270
  {
23068
- id: field.name,
23069
- name: field.name,
23070
- value: field.state.value ?? "",
23071
- onChange: (e) => {
23072
- field.handleChange(e.target.value);
23073
- },
23074
- onBlur: field.handleBlur,
23075
- ...inputProps
23271
+ label,
23272
+ required,
23273
+ requiredMark,
23274
+ help,
23275
+ tooltip,
23276
+ className,
23277
+ "aria-describedby": ariaDescribedBy,
23278
+ children: (control) => /* @__PURE__ */ jsx(
23279
+ TextInput,
23280
+ {
23281
+ ...inputProps,
23282
+ ...control,
23283
+ value: field.state.value ?? "",
23284
+ onValueChange: field.handleChange,
23285
+ onBlur: field.handleBlur
23286
+ }
23287
+ )
23076
23288
  }
23077
- ) });
23289
+ );
23078
23290
  };
23079
23291
 
23080
23292
  // src/blocks/Form/formHook.ts
@@ -23085,10 +23297,11 @@ var { useAppForm, withForm } = createFormHook({
23085
23297
  TextField,
23086
23298
  NumberField,
23087
23299
  PasswordField,
23088
- TextAreaField,
23300
+ TextareaField,
23089
23301
  SelectField,
23090
23302
  CheckboxField,
23091
- SwitchField
23303
+ SwitchField,
23304
+ OtpInputField
23092
23305
  },
23093
23306
  formComponents: {
23094
23307
  FormBody,
@@ -23204,6 +23417,6 @@ object-assign/index.js:
23204
23417
  *)
23205
23418
  */
23206
23419
 
23207
- export { Alert, AlertModal, AnswerSummary, AppShell, ArgoDesignContext, AutoSaveTextarea, Avatar, Badge, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, Checkbox, Clipboard, ClipboardButton, ClipboardInline, Collapse, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, HelpBlock, HoverCard, InlineStepDetail, InlineStepLabel, InputGroup, InputOtp, Kbd, Label2 as Label, Link, Markdown, MarkedText, MessageBubble, Modal, MultiActionButtonGroup, MultiCombobox, Navbar, NumberInput, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, RadioGroup2 as RadioGroup, ResizableHandle, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, Select2 as Select, Separator2 as Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, SplitButton, SpotlightBackdrop, Stepper, SuggestedPrompt, Switch, Table, Tabs2 as Tabs, TabsContent, Tagger, TextInput, Textarea, ThemeProvider, ThinkingIndicator, TimeInput, TimePicker, Timeline, Toaster, Toggle, ToggleGroup, ToolCallApproval, ToolCallChip, Tooltip, TooltipProvider, Truncated, UsageStats, UsageStatsRing, ZoomableSvg, argoVariants, cn, computeDiffRows, computeLineInformation, copyToClipboard, isMac, kbdVariants, keys, mergeRefs, setServerFieldErrors, toast, useAppForm, useArgoDesign, useAutosizeInput, useInputOtpContext, useMergeDiff, useNotification, useScrollbarPosition, useSidebar, useTargetRect, useTheme, withForm };
23420
+ export { Alert, AlertModal, AnswerSummary, AppShell, ArgoDesignContext, AutoSaveTextarea, Avatar, Badge, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, Checkbox, Clipboard, ClipboardButton, ClipboardInline, Collapse, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, HelpBlock, HoverCard, InlineStepDetail, InlineStepLabel, InputGroup, Kbd, Label2 as Label, Link, Markdown, MarkedText, MessageBubble, Modal, MultiActionButtonGroup, MultiCombobox, Navbar, NumberInput, OtpInput, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, RadioGroup2 as RadioGroup, ResizableHandle, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, Select2 as Select, Separator2 as Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, SplitButton, SpotlightBackdrop, Stepper, SuggestedPrompt, Switch, Table, Tabs2 as Tabs, TabsContent, Tagger, TextInput, Textarea, ThemeProvider, ThinkingIndicator, TimeInput, TimePicker, Timeline, Toaster, Toggle, ToggleGroup, ToolCallApproval, ToolCallChip, Tooltip, TooltipProvider, Truncated, UsageStats, UsageStatsRing, ZoomableSvg, argoVariants, cn, computeDiffRows, computeLineInformation, copyToClipboard, isMac, kbdVariants, keys, mergeRefs, setServerFieldErrors, toast, useAppForm, useArgoDesign, useAutosizeInput, useMergeDiff, useNotification, useScrollbarPosition, useSidebar, useTargetRect, useTheme, withForm };
23208
23421
  //# sourceMappingURL=index.js.map
23209
23422
  //# sourceMappingURL=index.js.map