analytica-frontend-lib 1.0.50 → 1.0.52

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.mjs CHANGED
@@ -779,7 +779,7 @@ var SIZE_CLASSES4 = {
779
779
  textSize: "sm",
780
780
  spacing: "gap-1.5",
781
781
  borderWidth: "border-2",
782
- dotSize: "w-2 h-2",
782
+ dotSize: "w-2.5 h-2.5",
783
783
  labelHeight: "h-5"
784
784
  },
785
785
  medium: {
@@ -787,7 +787,7 @@ var SIZE_CLASSES4 = {
787
787
  textSize: "md",
788
788
  spacing: "gap-2",
789
789
  borderWidth: "border-2",
790
- dotSize: "w-2.5 h-2.5",
790
+ dotSize: "w-3 h-3",
791
791
  labelHeight: "h-6"
792
792
  },
793
793
  large: {
@@ -795,7 +795,7 @@ var SIZE_CLASSES4 = {
795
795
  textSize: "lg",
796
796
  spacing: "gap-2",
797
797
  borderWidth: "border-2",
798
- dotSize: "w-3 h-3",
798
+ dotSize: "w-3.5 h-3.5",
799
799
  labelHeight: "h-7"
800
800
  },
801
801
  extraLarge: {
@@ -803,7 +803,7 @@ var SIZE_CLASSES4 = {
803
803
  textSize: "xl",
804
804
  spacing: "gap-3",
805
805
  borderWidth: "border-2",
806
- dotSize: "w-3.5 h-3.5",
806
+ dotSize: "w-4 h-4",
807
807
  labelHeight: "h-8"
808
808
  }
809
809
  };
@@ -3312,19 +3312,33 @@ import {
3312
3312
  forwardRef as forwardRef10,
3313
3313
  isValidElement as isValidElement2,
3314
3314
  Children as Children2,
3315
- cloneElement as cloneElement2
3315
+ cloneElement as cloneElement2,
3316
+ useId as useId5
3316
3317
  } from "react";
3317
- import { CaretDown, Check as Check4 } from "phosphor-react";
3318
+ import { CaretDown, Check as Check4, WarningCircle as WarningCircle4 } from "phosphor-react";
3318
3319
  import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
3319
3320
  var VARIANT_CLASSES4 = {
3320
- outlined: "border rounded-sm focus:border-primary-950",
3321
+ outlined: "border rounded-lg focus:border-primary-950",
3321
3322
  underlined: "border-b focus:border-primary-950",
3322
- rounded: "border rounded-4xl focus:border-primary-950"
3323
+ rounded: "border rounded-full focus:border-primary-950"
3323
3324
  };
3324
3325
  var SIZE_CLASSES11 = {
3325
3326
  small: "text-sm",
3326
3327
  medium: "text-md",
3327
- large: "text-lg"
3328
+ large: "text-lg",
3329
+ "extra-large": "text-lg"
3330
+ };
3331
+ var HEIGHT_CLASSES = {
3332
+ small: "h-8",
3333
+ medium: "h-9",
3334
+ large: "h-10",
3335
+ "extra-large": "h-12"
3336
+ };
3337
+ var PADDING_CLASSES = {
3338
+ small: "px-2 py-1",
3339
+ medium: "px-3 py-2",
3340
+ large: "px-4 py-3",
3341
+ "extra-large": "px-5 py-4"
3328
3342
  };
3329
3343
  var SIDE_CLASSES2 = {
3330
3344
  top: "bottom-full -translate-y-1",
@@ -3337,14 +3351,15 @@ var ALIGN_CLASSES2 = {
3337
3351
  center: "left-1/2 -translate-x-1/2",
3338
3352
  end: "right-0"
3339
3353
  };
3340
- function createSelectStore() {
3354
+ function createSelectStore(onValueChange) {
3341
3355
  return create3((set) => ({
3342
3356
  open: false,
3343
3357
  setOpen: (open) => set({ open }),
3344
3358
  value: "",
3345
3359
  setValue: (value) => set({ value }),
3346
3360
  selectedLabel: "",
3347
- setSelectedLabel: (label) => set({ selectedLabel: label })
3361
+ setSelectedLabel: (label) => set({ selectedLabel: label }),
3362
+ onValueChange
3348
3363
  }));
3349
3364
  }
3350
3365
  var useSelectStore = (externalStore) => {
@@ -3363,15 +3378,24 @@ function getLabelAsNode(children) {
3363
3378
  if (flattened.length === 1) return flattened[0];
3364
3379
  return /* @__PURE__ */ jsx24(Fragment3, { children: flattened });
3365
3380
  }
3366
- var injectStore2 = (children, store) => {
3381
+ var injectStore2 = (children, store, size, selectId) => {
3367
3382
  return Children2.map(children, (child) => {
3368
3383
  if (isValidElement2(child)) {
3369
3384
  const typedChild = child;
3370
3385
  const newProps = {
3371
3386
  store
3372
3387
  };
3388
+ if (typedChild.type === SelectTrigger) {
3389
+ newProps.size = size;
3390
+ newProps.selectId = selectId;
3391
+ }
3373
3392
  if (typedChild.props.children) {
3374
- newProps.children = injectStore2(typedChild.props.children, store);
3393
+ newProps.children = injectStore2(
3394
+ typedChild.props.children,
3395
+ store,
3396
+ size,
3397
+ selectId
3398
+ );
3375
3399
  }
3376
3400
  return cloneElement2(typedChild, newProps);
3377
3401
  }
@@ -3383,16 +3407,19 @@ var Select = ({
3383
3407
  defaultValue = "",
3384
3408
  value: propValue,
3385
3409
  onValueChange,
3386
- size = "small"
3410
+ size = "small",
3411
+ label,
3412
+ helperText,
3413
+ errorMessage,
3414
+ id
3387
3415
  }) => {
3388
3416
  const storeRef = useRef3(null);
3389
- storeRef.current ??= createSelectStore();
3417
+ storeRef.current ??= createSelectStore(onValueChange);
3390
3418
  const store = storeRef.current;
3391
3419
  const selectRef = useRef3(null);
3392
- const { open, setOpen, setValue, value, selectedLabel } = useStore2(
3393
- store,
3394
- (s) => s
3395
- );
3420
+ const { open, setOpen, setValue, selectedLabel } = useStore2(store, (s) => s);
3421
+ const generatedId = useId5();
3422
+ const selectId = id ?? `select-${generatedId}`;
3396
3423
  const findLabelForValue = (children2, targetValue) => {
3397
3424
  let found = null;
3398
3425
  const search = (nodes) => {
@@ -3412,8 +3439,8 @@ var Select = ({
3412
3439
  };
3413
3440
  useEffect4(() => {
3414
3441
  if (!selectedLabel && defaultValue) {
3415
- const label = findLabelForValue(children, defaultValue);
3416
- if (label) store.setState({ selectedLabel: label });
3442
+ const label2 = findLabelForValue(children, defaultValue);
3443
+ if (label2) store.setState({ selectedLabel: label2 });
3417
3444
  }
3418
3445
  }, [children, defaultValue, selectedLabel]);
3419
3446
  useEffect4(() => {
@@ -3451,19 +3478,33 @@ var Select = ({
3451
3478
  document.removeEventListener("keydown", handleArrowKeys);
3452
3479
  };
3453
3480
  }, [open]);
3454
- useEffect4(() => {
3455
- setValue(value);
3456
- onValueChange?.(value);
3457
- }, [value, onValueChange]);
3458
3481
  useEffect4(() => {
3459
3482
  if (propValue) {
3460
3483
  setValue(propValue);
3461
- const label = findLabelForValue(children, propValue);
3462
- if (label) store.setState({ selectedLabel: label });
3484
+ const label2 = findLabelForValue(children, propValue);
3485
+ if (label2) store.setState({ selectedLabel: label2 });
3463
3486
  }
3464
3487
  }, [propValue]);
3465
3488
  const sizeClasses = SIZE_CLASSES11[size];
3466
- return /* @__PURE__ */ jsx24("div", { className: `relative ${sizeClasses}`, ref: selectRef, children: injectStore2(children, store) });
3489
+ return /* @__PURE__ */ jsxs19("div", { className: "w-full", children: [
3490
+ label && /* @__PURE__ */ jsx24(
3491
+ "label",
3492
+ {
3493
+ htmlFor: selectId,
3494
+ className: `block font-bold text-text-900 mb-1.5 ${sizeClasses}`,
3495
+ children: label
3496
+ }
3497
+ ),
3498
+ /* @__PURE__ */ jsx24("div", { className: `relative ${sizeClasses}`, ref: selectRef, children: injectStore2(children, store, size, selectId) }),
3499
+ /* @__PURE__ */ jsxs19("div", { className: "mt-1.5 gap-1.5", children: [
3500
+ helperText && /* @__PURE__ */ jsx24("p", { className: "text-sm text-text-500", children: helperText }),
3501
+ errorMessage && /* @__PURE__ */ jsxs19("p", { className: "flex gap-1 items-center text-sm text-indicator-error", children: [
3502
+ /* @__PURE__ */ jsx24(WarningCircle4, { size: 16 }),
3503
+ " ",
3504
+ errorMessage
3505
+ ] })
3506
+ ] })
3507
+ ] });
3467
3508
  };
3468
3509
  var SelectValue = ({
3469
3510
  placeholder,
@@ -3481,18 +3522,24 @@ var SelectTrigger = forwardRef10(
3481
3522
  variant = "outlined",
3482
3523
  store: externalStore,
3483
3524
  disabled,
3525
+ size = "medium",
3526
+ selectId,
3484
3527
  ...props
3485
3528
  }, ref) => {
3486
3529
  const store = useSelectStore(externalStore);
3487
3530
  const open = useStore2(store, (s) => s.open);
3488
3531
  const toggleOpen = () => store.setState({ open: !open });
3489
3532
  const variantClasses = VARIANT_CLASSES4[variant];
3533
+ const heightClasses = HEIGHT_CLASSES[size];
3534
+ const paddingClasses = PADDING_CLASSES[size];
3490
3535
  return /* @__PURE__ */ jsxs19(
3491
3536
  "button",
3492
3537
  {
3493
3538
  ref,
3539
+ id: selectId,
3494
3540
  className: `
3495
- flex h-9 min-w-[220px] w-full items-center justify-between border-border-300 px-3 py-2
3541
+ flex min-w-[220px] w-full items-center justify-between border-border-300
3542
+ ${heightClasses} ${paddingClasses}
3496
3543
  ${invalid && `${variant == "underlined" ? "border-b-2" : "border-2"} border-indicator-error text-text-600`}
3497
3544
  ${disabled ? "cursor-not-allowed text-text-400 pointer-events-none opacity-50" : "cursor-pointer hover:bg-background-50 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground"}
3498
3545
  ${!invalid && !disabled ? "text-text-700" : ""}
@@ -3558,7 +3605,8 @@ var SelectItem = forwardRef10(
3558
3605
  value: selectedValue,
3559
3606
  setValue,
3560
3607
  setOpen,
3561
- setSelectedLabel
3608
+ setSelectedLabel,
3609
+ onValueChange
3562
3610
  } = useStore2(store, (s) => s);
3563
3611
  const handleClick = (e) => {
3564
3612
  const labelNode = getLabelAsNode(children);
@@ -3566,6 +3614,7 @@ var SelectItem = forwardRef10(
3566
3614
  setValue(value);
3567
3615
  setSelectedLabel(labelNode);
3568
3616
  setOpen(false);
3617
+ onValueChange?.(value);
3569
3618
  }
3570
3619
  props.onClick?.(e);
3571
3620
  };