@refraction-ui/react 0.12.3 → 0.13.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.cjs CHANGED
@@ -36105,19 +36105,33 @@ function InlineEditor({
36105
36105
  InlineEditor.displayName = "InlineEditor";
36106
36106
 
36107
36107
  // ../input/dist/index.js
36108
+ function resolveAriaInvalid(ariaInvalid, validationState) {
36109
+ if (ariaInvalid !== void 0) {
36110
+ return ariaInvalid;
36111
+ }
36112
+ if (validationState === "invalid") {
36113
+ return true;
36114
+ }
36115
+ if (validationState === "valid") {
36116
+ return false;
36117
+ }
36118
+ return void 0;
36119
+ }
36108
36120
  function createInput(props = {}) {
36109
36121
  const {
36110
36122
  disabled = false,
36111
36123
  readOnly = false,
36112
36124
  required = false,
36113
- "aria-invalid": ariaInvalid
36125
+ "aria-invalid": ariaInvalid,
36126
+ validationState
36114
36127
  } = props;
36128
+ const resolvedInvalid = resolveAriaInvalid(ariaInvalid, validationState);
36115
36129
  const ariaProps = {};
36116
36130
  if (disabled) {
36117
36131
  ariaProps["aria-disabled"] = true;
36118
36132
  }
36119
- if (ariaInvalid) {
36120
- ariaProps["aria-invalid"] = true;
36133
+ if (resolvedInvalid !== void 0) {
36134
+ ariaProps["aria-invalid"] = resolvedInvalid;
36121
36135
  }
36122
36136
  if (required) {
36123
36137
  ariaProps["aria-required"] = true;
@@ -36129,7 +36143,7 @@ function createInput(props = {}) {
36129
36143
  if (readOnly) {
36130
36144
  dataAttributes["data-readonly"] = "";
36131
36145
  }
36132
- if (ariaInvalid) {
36146
+ if (resolvedInvalid === true) {
36133
36147
  dataAttributes["data-invalid"] = "";
36134
36148
  }
36135
36149
  return {
@@ -36144,22 +36158,58 @@ var inputVariants = cva({
36144
36158
  sm: "h-8 text-xs",
36145
36159
  default: "h-9",
36146
36160
  lg: "h-10 text-base"
36161
+ },
36162
+ validationState: {
36163
+ valid: "border-green-500 focus-visible:ring-green-500",
36164
+ invalid: "border-destructive focus-visible:ring-destructive"
36147
36165
  }
36148
36166
  },
36149
36167
  defaultVariants: {
36150
36168
  size: "default"
36151
36169
  }
36152
36170
  });
36171
+ var CheckIcon = /* @__PURE__ */ jsxRuntime.jsx(
36172
+ "svg",
36173
+ {
36174
+ "aria-hidden": "true",
36175
+ viewBox: "0 0 24 24",
36176
+ fill: "none",
36177
+ stroke: "currentColor",
36178
+ strokeWidth: "2",
36179
+ strokeLinecap: "round",
36180
+ strokeLinejoin: "round",
36181
+ className: "pointer-events-none absolute right-3 top-1/2 size-4 -translate-y-1/2 text-green-500",
36182
+ children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" })
36183
+ }
36184
+ );
36153
36185
  var Input = React11__namespace.forwardRef(
36154
- ({ type = "text", size, className, disabled, readOnly, required, "aria-invalid": ariaInvalid, ...props }, ref) => {
36186
+ ({
36187
+ type = "text",
36188
+ size,
36189
+ className,
36190
+ disabled,
36191
+ readOnly,
36192
+ required,
36193
+ validationState,
36194
+ leadingIcon,
36195
+ "aria-invalid": ariaInvalid,
36196
+ ...props
36197
+ }, ref) => {
36155
36198
  const api = createInput({
36156
36199
  disabled,
36157
36200
  readOnly,
36158
36201
  required,
36159
- "aria-invalid": ariaInvalid === true ? true : void 0
36202
+ "aria-invalid": ariaInvalid === void 0 ? void 0 : ariaInvalid === true || ariaInvalid === "true",
36203
+ validationState
36160
36204
  });
36161
- const classes = cn(inputVariants({ size }), className);
36162
- return /* @__PURE__ */ jsxRuntime.jsx(
36205
+ const hasWrapper = leadingIcon != null || validationState != null;
36206
+ const classes = cn(
36207
+ inputVariants({ size, validationState }),
36208
+ leadingIcon != null && "pl-9",
36209
+ validationState === "valid" && "pr-9",
36210
+ className
36211
+ );
36212
+ const inputEl = /* @__PURE__ */ jsxRuntime.jsx(
36163
36213
  "input",
36164
36214
  {
36165
36215
  ref,
@@ -36173,6 +36223,21 @@ var Input = React11__namespace.forwardRef(
36173
36223
  ...props
36174
36224
  }
36175
36225
  );
36226
+ if (!hasWrapper) {
36227
+ return inputEl;
36228
+ }
36229
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
36230
+ leadingIcon != null && /* @__PURE__ */ jsxRuntime.jsx(
36231
+ "span",
36232
+ {
36233
+ "aria-hidden": "true",
36234
+ className: "pointer-events-none absolute left-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-muted-foreground",
36235
+ children: leadingIcon
36236
+ }
36237
+ ),
36238
+ inputEl,
36239
+ validationState === "valid" && CheckIcon
36240
+ ] });
36176
36241
  }
36177
36242
  );
36178
36243
  Input.displayName = "Input";
@@ -47081,6 +47146,590 @@ function useTrackEvent(options) {
47081
47146
  [analytics]
47082
47147
  );
47083
47148
  }
47149
+
47150
+ // ../segmented-control/dist/index.js
47151
+ function createSegmentedControl(props = {}) {
47152
+ const { value, size = "md" } = props;
47153
+ const ariaProps = {
47154
+ role: "radiogroup"
47155
+ };
47156
+ const dataAttributes = {
47157
+ "data-size": size
47158
+ };
47159
+ if (value !== void 0) {
47160
+ dataAttributes["data-value"] = value;
47161
+ }
47162
+ return { ariaProps, dataAttributes };
47163
+ }
47164
+ function getNextSegmentIndex(current, key, count) {
47165
+ if (count <= 0) return current;
47166
+ switch (key) {
47167
+ case "ArrowRight":
47168
+ case "ArrowDown":
47169
+ return (current + 1) % count;
47170
+ case "ArrowLeft":
47171
+ case "ArrowUp":
47172
+ return (current - 1 + count) % count;
47173
+ case "Home":
47174
+ return 0;
47175
+ case "End":
47176
+ return count - 1;
47177
+ default:
47178
+ return current;
47179
+ }
47180
+ }
47181
+ var segmentedControlVariants = cva({
47182
+ base: "inline-flex items-center gap-1 rounded-lg bg-muted p-1",
47183
+ variants: {
47184
+ size: {
47185
+ sm: "",
47186
+ md: ""
47187
+ }
47188
+ },
47189
+ defaultVariants: {
47190
+ size: "md"
47191
+ }
47192
+ });
47193
+ var segmentedControlItemVariants = cva({
47194
+ base: [
47195
+ "inline-flex items-center justify-center gap-1.5 rounded-md font-medium",
47196
+ "whitespace-nowrap transition-colors",
47197
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
47198
+ "focus-visible:ring-offset-2 focus-visible:ring-offset-muted"
47199
+ ].join(" "),
47200
+ variants: {
47201
+ size: {
47202
+ sm: "px-2.5 py-1 text-xs",
47203
+ md: "px-3 py-1.5 text-sm"
47204
+ },
47205
+ state: {
47206
+ checked: "bg-background text-foreground shadow-sm",
47207
+ unchecked: "text-muted-foreground hover:text-foreground"
47208
+ }
47209
+ },
47210
+ defaultVariants: {
47211
+ size: "md",
47212
+ state: "unchecked"
47213
+ }
47214
+ });
47215
+ var SegmentedControlContext = React11__namespace.createContext(null);
47216
+ function useSegmentedControlContext(component) {
47217
+ const ctx = React11__namespace.useContext(SegmentedControlContext);
47218
+ if (!ctx) {
47219
+ throw new Error(`<${component}> must be used within <SegmentedControl>`);
47220
+ }
47221
+ return ctx;
47222
+ }
47223
+ var SegmentedControl = React11__namespace.forwardRef(
47224
+ ({
47225
+ value: valueProp,
47226
+ defaultValue,
47227
+ onValueChange,
47228
+ size = "md",
47229
+ className,
47230
+ children,
47231
+ ...props
47232
+ }, ref) => {
47233
+ const isControlled = valueProp !== void 0;
47234
+ const [internalValue, setInternalValue] = React11__namespace.useState(defaultValue);
47235
+ const value = isControlled ? valueProp : internalValue;
47236
+ const itemsRef = React11__namespace.useRef([]);
47237
+ const select = React11__namespace.useCallback(
47238
+ (next) => {
47239
+ if (!isControlled) setInternalValue(next);
47240
+ onValueChange?.(next);
47241
+ },
47242
+ [isControlled, onValueChange]
47243
+ );
47244
+ const register = React11__namespace.useCallback((itemValue, focus) => {
47245
+ const entry = { value: itemValue, focus };
47246
+ itemsRef.current.push(entry);
47247
+ return () => {
47248
+ itemsRef.current = itemsRef.current.filter((e2) => e2 !== entry);
47249
+ };
47250
+ }, []);
47251
+ const move = React11__namespace.useCallback(
47252
+ (from, key) => {
47253
+ const items = itemsRef.current;
47254
+ const currentIndex = items.findIndex((e2) => e2.value === from);
47255
+ if (currentIndex === -1) return;
47256
+ const targetIndex = getNextSegmentIndex(currentIndex, key, items.length);
47257
+ if (targetIndex === currentIndex) return;
47258
+ const target = items[targetIndex];
47259
+ select(target.value);
47260
+ target.focus();
47261
+ },
47262
+ [select]
47263
+ );
47264
+ const ctx = React11__namespace.useMemo(
47265
+ () => ({ value, size, select, register, move }),
47266
+ [value, size, select, register, move]
47267
+ );
47268
+ const api = createSegmentedControl({ value, size });
47269
+ return /* @__PURE__ */ jsxRuntime.jsx(SegmentedControlContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
47270
+ "div",
47271
+ {
47272
+ ref,
47273
+ className: cn(segmentedControlVariants({ size }), className),
47274
+ ...api.ariaProps,
47275
+ ...api.dataAttributes,
47276
+ ...props,
47277
+ children
47278
+ }
47279
+ ) });
47280
+ }
47281
+ );
47282
+ SegmentedControl.displayName = "SegmentedControl";
47283
+ var SegmentedControlItem = React11__namespace.forwardRef(({ value, className, children, onKeyDown, onClick, ...props }, ref) => {
47284
+ const ctx = useSegmentedControlContext("SegmentedControlItem");
47285
+ const selected = ctx.value === value;
47286
+ const internalRef = React11__namespace.useRef(null);
47287
+ const mergedRef = React11__namespace.useCallback(
47288
+ (node) => {
47289
+ internalRef.current = node;
47290
+ if (typeof ref === "function") ref(node);
47291
+ else if (ref) ref.current = node;
47292
+ },
47293
+ [ref]
47294
+ );
47295
+ React11__namespace.useEffect(() => {
47296
+ return ctx.register(value, () => internalRef.current?.focus());
47297
+ }, [ctx, value]);
47298
+ const handleKeyDown = (event) => {
47299
+ onKeyDown?.(event);
47300
+ if (event.defaultPrevented) return;
47301
+ switch (event.key) {
47302
+ case "ArrowRight":
47303
+ case "ArrowDown":
47304
+ case "ArrowLeft":
47305
+ case "ArrowUp":
47306
+ case "Home":
47307
+ case "End":
47308
+ event.preventDefault();
47309
+ ctx.move(value, event.key);
47310
+ break;
47311
+ case " ":
47312
+ case "Enter":
47313
+ event.preventDefault();
47314
+ ctx.select(value);
47315
+ break;
47316
+ }
47317
+ };
47318
+ const handleClick = (event) => {
47319
+ onClick?.(event);
47320
+ if (event.defaultPrevented) return;
47321
+ ctx.select(value);
47322
+ };
47323
+ return /* @__PURE__ */ jsxRuntime.jsx(
47324
+ "button",
47325
+ {
47326
+ ref: mergedRef,
47327
+ type: "button",
47328
+ role: "radio",
47329
+ "aria-checked": selected,
47330
+ tabIndex: selected ? 0 : -1,
47331
+ "data-state": selected ? "checked" : "unchecked",
47332
+ className: cn(
47333
+ segmentedControlItemVariants({
47334
+ size: ctx.size,
47335
+ state: selected ? "checked" : "unchecked"
47336
+ }),
47337
+ className
47338
+ ),
47339
+ onKeyDown: handleKeyDown,
47340
+ onClick: handleClick,
47341
+ ...props,
47342
+ children
47343
+ }
47344
+ );
47345
+ });
47346
+ SegmentedControlItem.displayName = "SegmentedControlItem";
47347
+
47348
+ // ../password-input/dist/index.js
47349
+ var DEFAULT_REVEAL_LABEL = "Show password";
47350
+ var DEFAULT_HIDE_LABEL = "Hide password";
47351
+ function createPasswordInput(props = {}) {
47352
+ const {
47353
+ revealed = false,
47354
+ revealLabel = DEFAULT_REVEAL_LABEL,
47355
+ hideLabel = DEFAULT_HIDE_LABEL
47356
+ } = props;
47357
+ return {
47358
+ inputType: revealed ? "text" : "password",
47359
+ toggleLabel: revealed ? hideLabel : revealLabel,
47360
+ togglePressed: revealed
47361
+ };
47362
+ }
47363
+ var passwordToggleVariants = cva({
47364
+ base: "absolute right-2 top-1/2 flex size-7 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
47365
+ });
47366
+ var EyeIcon = /* @__PURE__ */ jsxRuntime.jsxs(
47367
+ "svg",
47368
+ {
47369
+ "aria-hidden": "true",
47370
+ viewBox: "0 0 24 24",
47371
+ fill: "none",
47372
+ stroke: "currentColor",
47373
+ strokeWidth: "2",
47374
+ strokeLinecap: "round",
47375
+ strokeLinejoin: "round",
47376
+ className: "size-4",
47377
+ children: [
47378
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" }),
47379
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" })
47380
+ ]
47381
+ }
47382
+ );
47383
+ var EyeOffIcon = /* @__PURE__ */ jsxRuntime.jsxs(
47384
+ "svg",
47385
+ {
47386
+ "aria-hidden": "true",
47387
+ viewBox: "0 0 24 24",
47388
+ fill: "none",
47389
+ stroke: "currentColor",
47390
+ strokeWidth: "2",
47391
+ strokeLinecap: "round",
47392
+ strokeLinejoin: "round",
47393
+ className: "size-4",
47394
+ children: [
47395
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }),
47396
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }),
47397
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }),
47398
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "2", x2: "22", y1: "2", y2: "22" })
47399
+ ]
47400
+ }
47401
+ );
47402
+ var PasswordInput = React11__namespace.forwardRef(
47403
+ ({ revealLabel = "Show password", hideLabel = "Hide password", className, ...props }, ref) => {
47404
+ const [revealed, setRevealed] = React11__namespace.useState(false);
47405
+ const { inputType, toggleLabel, togglePressed } = createPasswordInput({
47406
+ revealed,
47407
+ revealLabel,
47408
+ hideLabel
47409
+ });
47410
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
47411
+ /* @__PURE__ */ jsxRuntime.jsx(
47412
+ Input,
47413
+ {
47414
+ ref,
47415
+ type: inputType,
47416
+ className: cn("pr-10", className),
47417
+ ...props
47418
+ }
47419
+ ),
47420
+ /* @__PURE__ */ jsxRuntime.jsx(
47421
+ "button",
47422
+ {
47423
+ type: "button",
47424
+ "aria-label": toggleLabel,
47425
+ "aria-pressed": togglePressed,
47426
+ onClick: () => setRevealed((v2) => !v2),
47427
+ className: passwordToggleVariants(),
47428
+ children: revealed ? EyeOffIcon : EyeIcon
47429
+ }
47430
+ )
47431
+ ] });
47432
+ }
47433
+ );
47434
+ PasswordInput.displayName = "PasswordInput";
47435
+
47436
+ // ../social-auth-button/dist/index.js
47437
+ var PROVIDER_LABELS = {
47438
+ google: "Continue with Google",
47439
+ github: "Continue with GitHub",
47440
+ microsoft: "Continue with Microsoft",
47441
+ apple: "Continue with Apple"
47442
+ };
47443
+ var PROVIDER_MONO = {
47444
+ google: false,
47445
+ github: true,
47446
+ microsoft: false,
47447
+ apple: true
47448
+ };
47449
+ function createSocialAuthButton(props) {
47450
+ const { provider } = props;
47451
+ return {
47452
+ dataAttributes: { "data-provider": provider },
47453
+ label: PROVIDER_LABELS[provider],
47454
+ mono: PROVIDER_MONO[provider]
47455
+ };
47456
+ }
47457
+ var socialAuthButtonVariants = cva({
47458
+ base: "relative"
47459
+ });
47460
+ var socialAuthRowVariants = cva({
47461
+ base: "grid grid-cols-1 sm:grid-cols-2 gap-3"
47462
+ });
47463
+ var lastUsedBadgeVariants = cva({
47464
+ base: "absolute -top-2 -right-2 rounded-full bg-primary text-primary-foreground text-[10px] px-1.5"
47465
+ });
47466
+ var baseProps = {
47467
+ width: 18,
47468
+ height: 18,
47469
+ viewBox: "0 0 24 24",
47470
+ xmlns: "http://www.w3.org/2000/svg",
47471
+ "aria-hidden": true
47472
+ };
47473
+ function GoogleIcon({ mono, ...props }) {
47474
+ if (mono) {
47475
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...baseProps, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
47476
+ "path",
47477
+ {
47478
+ fill: "currentColor",
47479
+ d: "M21.35 11.1H12v2.92h5.35c-.23 1.4-1.65 4.1-5.35 4.1a5.99 5.99 0 0 1 0-11.98c1.71 0 2.86.73 3.52 1.36l2.4-2.31C16.46 3.7 14.43 2.8 12 2.8a9.2 9.2 0 1 0 0 18.4c5.31 0 8.82-3.73 8.82-8.99 0-.6-.07-1.06-.17-1.51Z"
47480
+ }
47481
+ ) });
47482
+ }
47483
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...baseProps, ...props, children: [
47484
+ /* @__PURE__ */ jsxRuntime.jsx(
47485
+ "path",
47486
+ {
47487
+ fill: "#4285F4",
47488
+ d: "M21.35 11.1H12v2.92h5.35c-.23 1.4-1.65 4.1-5.35 4.1a5.99 5.99 0 0 1 0-11.98c1.71 0 2.86.73 3.52 1.36l2.4-2.31C16.46 3.7 14.43 2.8 12 2.8a9.2 9.2 0 0 0 0 18.4c5.31 0 8.82-3.73 8.82-8.99 0-.6-.07-1.06-.17-1.51Z"
47489
+ }
47490
+ ),
47491
+ /* @__PURE__ */ jsxRuntime.jsx(
47492
+ "path",
47493
+ {
47494
+ fill: "#34A853",
47495
+ d: "M3.88 7.55l2.41 1.77C6.93 7.76 8.32 6.74 10 6.4l-.34-2.85C7.06 4.02 4.93 5.5 3.88 7.55Z",
47496
+ opacity: 0
47497
+ }
47498
+ ),
47499
+ /* @__PURE__ */ jsxRuntime.jsx(
47500
+ "path",
47501
+ {
47502
+ fill: "#FBBC05",
47503
+ d: "M12 21.2c2.43 0 4.46-.8 5.95-2.18l-2.74-2.13c-.74.5-1.74.86-3.21.86-2.66 0-4.92-1.79-5.73-4.2l-2.84 2.18A9.2 9.2 0 0 0 12 21.2Z",
47504
+ opacity: 0
47505
+ }
47506
+ )
47507
+ ] });
47508
+ }
47509
+ function GitHubIcon({ mono: _mono, ...props }) {
47510
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...baseProps, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
47511
+ "path",
47512
+ {
47513
+ fill: "currentColor",
47514
+ d: "M12 2a10 10 0 0 0-3.16 19.49c.5.09.68-.22.68-.48l-.01-1.7c-2.78.6-3.37-1.34-3.37-1.34-.45-1.16-1.11-1.46-1.11-1.46-.91-.62.07-.61.07-.61 1 .07 1.53 1.03 1.53 1.03.9 1.53 2.36 1.09 2.94.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.65 0 0 .84-.27 2.75 1.02a9.6 9.6 0 0 1 5 0c1.91-1.29 2.75-1.02 2.75-1.02.55 1.38.2 2.4.1 2.65.64.7 1.03 1.59 1.03 2.68 0 3.84-2.34 4.69-4.57 4.94.36.31.68.92.68 1.85l-.01 2.74c0 .27.18.58.69.48A10 10 0 0 0 12 2Z"
47515
+ }
47516
+ ) });
47517
+ }
47518
+ function MicrosoftIcon({ mono, ...props }) {
47519
+ if (mono) {
47520
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...baseProps, ...props, children: [
47521
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "currentColor", d: "M3 3h8v8H3z" }),
47522
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "currentColor", d: "M13 3h8v8h-8z", opacity: 0.7 }),
47523
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "currentColor", d: "M3 13h8v8H3z", opacity: 0.7 }),
47524
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "currentColor", d: "M13 13h8v8h-8z", opacity: 0.4 })
47525
+ ] });
47526
+ }
47527
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...baseProps, ...props, children: [
47528
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "#F25022", d: "M3 3h8v8H3z" }),
47529
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "#7FBA00", d: "M13 3h8v8h-8z" }),
47530
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "#00A4EF", d: "M3 13h8v8H3z" }),
47531
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "#FFB900", d: "M13 13h8v8h-8z" })
47532
+ ] });
47533
+ }
47534
+ function AppleIcon({ mono: _mono, ...props }) {
47535
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...baseProps, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
47536
+ "path",
47537
+ {
47538
+ fill: "currentColor",
47539
+ d: "M16.37 12.78c-.03-2.62 2.14-3.88 2.24-3.94-1.22-1.79-3.12-2.03-3.79-2.06-1.61-.16-3.15.95-3.97.95-.82 0-2.08-.93-3.42-.9-1.76.03-3.39 1.02-4.29 2.6-1.83 3.18-.47 7.88 1.31 10.46.87 1.26 1.91 2.67 3.27 2.62 1.31-.05 1.81-.85 3.4-.85 1.58 0 2.03.85 3.42.82 1.41-.02 2.31-1.28 3.17-2.55.99-1.46 1.4-2.88 1.42-2.95-.03-.01-2.73-1.05-2.76-4.15M13.9 5.1c.72-.88 1.21-2.09 1.08-3.3-1.04.04-2.3.69-3.04 1.56-.66.77-1.24 2.01-1.09 3.19 1.16.09 2.34-.59 3.05-1.45"
47540
+ }
47541
+ ) });
47542
+ }
47543
+ var PROVIDER_ICONS = {
47544
+ google: GoogleIcon,
47545
+ github: GitHubIcon,
47546
+ microsoft: MicrosoftIcon,
47547
+ apple: AppleIcon
47548
+ };
47549
+ var SocialAuthButton = React11__namespace.forwardRef(({ provider, lastUsed, loading, disabled, className, ...props }, ref) => {
47550
+ const { label, mono, dataAttributes } = createSocialAuthButton({ provider });
47551
+ const Icon = PROVIDER_ICONS[provider];
47552
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: socialAuthButtonVariants(), children: [
47553
+ /* @__PURE__ */ jsxRuntime.jsxs(
47554
+ Button,
47555
+ {
47556
+ ref,
47557
+ variant: "outline",
47558
+ loading,
47559
+ disabled,
47560
+ className: cn("w-full justify-center gap-2", className),
47561
+ ...dataAttributes,
47562
+ ...props,
47563
+ children: [
47564
+ !loading && /* @__PURE__ */ jsxRuntime.jsx(Icon, { mono, className: "shrink-0" }),
47565
+ label
47566
+ ]
47567
+ }
47568
+ ),
47569
+ lastUsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: lastUsedBadgeVariants(), children: "Last used" })
47570
+ ] });
47571
+ });
47572
+ SocialAuthButton.displayName = "SocialAuthButton";
47573
+ var SocialAuthRow = React11__namespace.forwardRef(
47574
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
47575
+ "div",
47576
+ {
47577
+ ref,
47578
+ className: cn(socialAuthRowVariants(), className),
47579
+ ...props,
47580
+ children
47581
+ }
47582
+ )
47583
+ );
47584
+ SocialAuthRow.displayName = "SocialAuthRow";
47585
+
47586
+ // ../separator/dist/index.js
47587
+ function createSeparator(props = {}) {
47588
+ const { orientation = "horizontal", decorative = true } = props;
47589
+ const ariaProps = decorative ? { role: "none" } : { role: "separator", "aria-orientation": orientation };
47590
+ const dataAttributes = {
47591
+ "data-orientation": orientation
47592
+ };
47593
+ return {
47594
+ ariaProps,
47595
+ dataAttributes
47596
+ };
47597
+ }
47598
+ var separatorVariants = cva({
47599
+ base: "",
47600
+ variants: {
47601
+ orientation: {
47602
+ horizontal: "h-px w-full bg-border",
47603
+ vertical: "w-px h-full bg-border"
47604
+ },
47605
+ labeled: {
47606
+ true: "flex items-center",
47607
+ false: ""
47608
+ }
47609
+ },
47610
+ defaultVariants: {
47611
+ orientation: "horizontal",
47612
+ labeled: "false"
47613
+ }
47614
+ });
47615
+ var separatorLineClass = "h-px flex-1 bg-border";
47616
+ var separatorLabelClass = "px-3 text-xs uppercase tracking-wide text-muted-foreground";
47617
+ var Separator = React11__namespace.forwardRef(
47618
+ ({
47619
+ orientation = "horizontal",
47620
+ label,
47621
+ decorative = true,
47622
+ className,
47623
+ ...props
47624
+ }, ref) => {
47625
+ if (orientation === "horizontal" && label != null) {
47626
+ return /* @__PURE__ */ jsxRuntime.jsxs(
47627
+ "div",
47628
+ {
47629
+ ref,
47630
+ role: "none",
47631
+ className: cn(separatorVariants({ labeled: "true" }), className),
47632
+ ...props,
47633
+ children: [
47634
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorLineClass }),
47635
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorLabelClass, children: label }),
47636
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorLineClass })
47637
+ ]
47638
+ }
47639
+ );
47640
+ }
47641
+ const { ariaProps, dataAttributes } = createSeparator({
47642
+ orientation,
47643
+ decorative
47644
+ });
47645
+ return /* @__PURE__ */ jsxRuntime.jsx(
47646
+ "div",
47647
+ {
47648
+ ref,
47649
+ className: cn(separatorVariants({ orientation }), className),
47650
+ ...ariaProps,
47651
+ ...dataAttributes,
47652
+ ...props
47653
+ }
47654
+ );
47655
+ }
47656
+ );
47657
+ Separator.displayName = "Separator";
47658
+
47659
+ // ../empty-state/dist/index.js
47660
+ function createEmptyState(options = {}) {
47661
+ const { tone = "neutral" } = options;
47662
+ const dataAttributes = {
47663
+ "data-tone": tone
47664
+ };
47665
+ return {
47666
+ dataAttributes
47667
+ };
47668
+ }
47669
+ var emptyStateVariants = cva({
47670
+ base: "flex flex-col items-center text-center gap-3 p-8",
47671
+ variants: {
47672
+ bordered: {
47673
+ true: "rounded-xl border border-border bg-card",
47674
+ false: ""
47675
+ }
47676
+ },
47677
+ defaultVariants: {
47678
+ bordered: "false"
47679
+ }
47680
+ });
47681
+ var emptyStateIconChipVariants = cva({
47682
+ base: "flex size-12 items-center justify-center rounded-full",
47683
+ variants: {
47684
+ tone: {
47685
+ neutral: "bg-muted text-muted-foreground",
47686
+ success: "bg-green-500/10 text-green-600",
47687
+ warning: "bg-yellow-500/10 text-yellow-600",
47688
+ danger: "bg-destructive/10 text-destructive"
47689
+ }
47690
+ },
47691
+ defaultVariants: {
47692
+ tone: "neutral"
47693
+ }
47694
+ });
47695
+ var emptyStateTitleClass = "text-lg font-semibold text-foreground";
47696
+ var emptyStateDescriptionClass = "text-sm text-muted-foreground";
47697
+ var emptyStateActionsClass = "flex items-center justify-center gap-2";
47698
+ var EmptyState = React11__namespace.forwardRef(
47699
+ ({
47700
+ icon,
47701
+ tone = "neutral",
47702
+ title,
47703
+ description,
47704
+ actions,
47705
+ bordered = false,
47706
+ className,
47707
+ ...props
47708
+ }, ref) => {
47709
+ const api = createEmptyState({ tone });
47710
+ return /* @__PURE__ */ jsxRuntime.jsxs(
47711
+ "div",
47712
+ {
47713
+ ref,
47714
+ className: cn(
47715
+ emptyStateVariants({ bordered: bordered ? "true" : "false" }),
47716
+ className
47717
+ ),
47718
+ ...api.dataAttributes,
47719
+ ...props,
47720
+ children: [
47721
+ icon != null && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: emptyStateIconChipVariants({ tone }), children: icon }),
47722
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: emptyStateTitleClass, children: title }),
47723
+ description != null && /* @__PURE__ */ jsxRuntime.jsx("p", { className: emptyStateDescriptionClass, children: description }),
47724
+ actions != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: emptyStateActionsClass, children: actions })
47725
+ ]
47726
+ }
47727
+ );
47728
+ }
47729
+ );
47730
+ EmptyState.displayName = "EmptyState";
47731
+ var ConfirmationCard = React11__namespace.forwardRef(({ bordered = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(EmptyState, { ref, bordered, ...props }));
47732
+ ConfirmationCard.displayName = "ConfirmationCard";
47084
47733
  /*! Bundled license information:
47085
47734
 
47086
47735
  @nevware21/ts-utils/dist/es5/mod/ts-utils.js:
@@ -47157,6 +47806,7 @@ exports.CommandItem = CommandItem;
47157
47806
  exports.CommandList = CommandList;
47158
47807
  exports.CommandSeparator = CommandSeparator;
47159
47808
  exports.Composer = Composer;
47809
+ exports.ConfirmationCard = ConfirmationCard;
47160
47810
  exports.ContentProtection = ContentProtection;
47161
47811
  exports.CookieConsent = CookieConsent;
47162
47812
  exports.DEFAULT_CATEGORIES = DEFAULT_CATEGORIES;
@@ -47188,6 +47838,7 @@ exports.DropdownMenuTrigger = DropdownMenuTrigger;
47188
47838
  exports.EMOJI_CATEGORIES = EMOJI_CATEGORIES;
47189
47839
  exports.EMOJI_DATA = EMOJI_DATA;
47190
47840
  exports.EmojiPicker = EmojiPicker;
47841
+ exports.EmptyState = EmptyState;
47191
47842
  exports.FeedbackButton = FeedbackButton;
47192
47843
  exports.FeedbackDialog = FeedbackDialog;
47193
47844
  exports.FileTree = FileTree;
@@ -47214,6 +47865,7 @@ exports.OtpInput = OtpInput;
47214
47865
  exports.PRESENCE_STATUS_COLORS = STATUS_COLORS;
47215
47866
  exports.PRESENCE_STATUS_LABELS = STATUS_LABELS;
47216
47867
  exports.Pagination = Pagination;
47868
+ exports.PasswordInput = PasswordInput;
47217
47869
  exports.Payment = Payment;
47218
47870
  exports.Popover = Popover;
47219
47871
  exports.PopoverClose = PopoverClose;
@@ -47233,10 +47885,13 @@ exports.STATUS_LABELS = STATUS_INDICATOR_LABELS;
47233
47885
  exports.SearchBar = SearchBar;
47234
47886
  exports.SearchResultItem = SearchResultItem;
47235
47887
  exports.SearchResults = SearchResults;
47888
+ exports.SegmentedControl = SegmentedControl;
47889
+ exports.SegmentedControlItem = SegmentedControlItem;
47236
47890
  exports.Select = Select;
47237
47891
  exports.SelectContent = SelectContent;
47238
47892
  exports.SelectItem = SelectItem;
47239
47893
  exports.SelectTrigger = SelectTrigger;
47894
+ exports.Separator = Separator;
47240
47895
  exports.Sheet = Sheet;
47241
47896
  exports.SheetClose = SheetClose;
47242
47897
  exports.SheetContent = SheetContent;
@@ -47256,6 +47911,8 @@ exports.Skeleton = Skeleton;
47256
47911
  exports.SkeletonText = SkeletonText;
47257
47912
  exports.SkipToContent = SkipToContent;
47258
47913
  exports.SlideViewer = SlideViewer;
47914
+ exports.SocialAuthButton = SocialAuthButton;
47915
+ exports.SocialAuthRow = SocialAuthRow;
47259
47916
  exports.StatsGrid = StatsGrid;
47260
47917
  exports.StatusIndicator = StatusIndicator;
47261
47918
  exports.Step = Step;
@@ -47344,6 +48001,7 @@ exports.createIntensitySamples = createIntensitySamples;
47344
48001
  exports.createPostHogClientSdkSink = createPostHogClientSdkSink;
47345
48002
  exports.createPostHogHttpSink = createPostHogHttpSink;
47346
48003
  exports.createPostHogSink = createPostHogSink;
48004
+ exports.createSegmentedControl = createSegmentedControl;
47347
48005
  exports.createSilentSamples = createSilentSamples;
47348
48006
  exports.createTelemetry = createTelemetry;
47349
48007
  exports.createVoicePill = createVoicePill;
@@ -47369,6 +48027,7 @@ exports.formatTimestamp = formatTimestamp;
47369
48027
  exports.getAssignableRoles = getAssignableRoles;
47370
48028
  exports.getDefaultPortal = getDefaultPortal;
47371
48029
  exports.getInitials = getInitials;
48030
+ exports.getNextSegmentIndex = getNextSegmentIndex;
47372
48031
  exports.getReplyCount = getReplyCount;
47373
48032
  exports.getVoicePillAriaLabel = getVoicePillAriaLabel;
47374
48033
  exports.getVoicePillInitials = getVoicePillInitials;
@@ -47436,6 +48095,8 @@ exports.rowVariants = rowVariants;
47436
48095
  exports.scaleWaveformSamples = scaleWaveformSamples;
47437
48096
  exports.searchBarVariants = searchBarVariants;
47438
48097
  exports.searchResultVariants = searchResultVariants;
48098
+ exports.segmentedControlItemVariants = segmentedControlItemVariants;
48099
+ exports.segmentedControlVariants = segmentedControlVariants;
47439
48100
  exports.selectContentVariants = selectContentVariants;
47440
48101
  exports.selectItemVariants = selectItemVariants;
47441
48102
  exports.selectMainTimeline = selectMainTimeline;