@lindle/linoardo 1.0.16 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/ExpansionPanelItem-Bd6ZWGkR.d.cts +58 -0
  2. package/dist/ExpansionPanelItem-DOjgDeB6.d.ts +58 -0
  3. package/dist/button.cjs +214 -0
  4. package/dist/button.cjs.map +1 -0
  5. package/dist/button.d.cts +20 -0
  6. package/dist/button.d.ts +20 -0
  7. package/dist/button.js +4 -0
  8. package/dist/button.js.map +1 -0
  9. package/dist/card.cjs +87 -0
  10. package/dist/card.cjs.map +1 -0
  11. package/dist/card.d.cts +34 -0
  12. package/dist/card.d.ts +34 -0
  13. package/dist/card.js +3 -0
  14. package/dist/card.js.map +1 -0
  15. package/dist/chip.cjs +247 -0
  16. package/dist/chip.cjs.map +1 -0
  17. package/dist/chip.d.cts +368 -0
  18. package/dist/chip.d.ts +368 -0
  19. package/dist/chip.js +4 -0
  20. package/dist/chip.js.map +1 -0
  21. package/dist/chunk-32KFNI6K.js +114 -0
  22. package/dist/chunk-32KFNI6K.js.map +1 -0
  23. package/dist/chunk-5GY2JCBO.js +92 -0
  24. package/dist/chunk-5GY2JCBO.js.map +1 -0
  25. package/dist/chunk-AOHXZ7OM.js +126 -0
  26. package/dist/chunk-AOHXZ7OM.js.map +1 -0
  27. package/dist/chunk-E32P5AHO.js +125 -0
  28. package/dist/chunk-E32P5AHO.js.map +1 -0
  29. package/dist/chunk-GA6HSRN6.js +235 -0
  30. package/dist/chunk-GA6HSRN6.js.map +1 -0
  31. package/dist/chunk-IEILIKS2.js +8 -0
  32. package/dist/chunk-IEILIKS2.js.map +1 -0
  33. package/dist/chunk-N65GNKRG.js +143 -0
  34. package/dist/chunk-N65GNKRG.js.map +1 -0
  35. package/dist/chunk-PWK6MLZT.js +239 -0
  36. package/dist/chunk-PWK6MLZT.js.map +1 -0
  37. package/dist/chunk-PYG5SDNO.js +98 -0
  38. package/dist/chunk-PYG5SDNO.js.map +1 -0
  39. package/dist/chunk-QGQ66FJD.js +155 -0
  40. package/dist/chunk-QGQ66FJD.js.map +1 -0
  41. package/dist/chunk-SZU6OYLS.js +187 -0
  42. package/dist/chunk-SZU6OYLS.js.map +1 -0
  43. package/dist/chunk-U6NAIIDI.js +99 -0
  44. package/dist/chunk-U6NAIIDI.js.map +1 -0
  45. package/dist/chunk-V4BVJOSC.js +85 -0
  46. package/dist/chunk-V4BVJOSC.js.map +1 -0
  47. package/dist/chunk-XFPBICJG.js +127 -0
  48. package/dist/chunk-XFPBICJG.js.map +1 -0
  49. package/dist/dialog.cjs +121 -0
  50. package/dist/dialog.cjs.map +1 -0
  51. package/dist/dialog.d.cts +17 -0
  52. package/dist/dialog.d.ts +17 -0
  53. package/dist/dialog.js +3 -0
  54. package/dist/dialog.js.map +1 -0
  55. package/dist/expansion-panel/item.cjs +195 -0
  56. package/dist/expansion-panel/item.cjs.map +1 -0
  57. package/dist/expansion-panel/item.d.cts +3 -0
  58. package/dist/expansion-panel/item.d.ts +3 -0
  59. package/dist/expansion-panel/item.js +3 -0
  60. package/dist/expansion-panel/item.js.map +1 -0
  61. package/dist/expansion-panel.cjs +356 -0
  62. package/dist/expansion-panel.cjs.map +1 -0
  63. package/dist/expansion-panel.d.cts +8 -0
  64. package/dist/expansion-panel.d.ts +8 -0
  65. package/dist/expansion-panel.js +4 -0
  66. package/dist/expansion-panel.js.map +1 -0
  67. package/dist/global.types-E2uVLemv.d.cts +7 -0
  68. package/dist/global.types-E2uVLemv.d.ts +7 -0
  69. package/dist/index-Md3BuoGM.d.cts +32 -0
  70. package/dist/index-d_JuI06O.d.ts +32 -0
  71. package/dist/index.cjs +557 -160
  72. package/dist/index.cjs.map +1 -1
  73. package/dist/index.d.cts +15 -549
  74. package/dist/index.d.ts +15 -549
  75. package/dist/index.js +14 -1330
  76. package/dist/index.js.map +1 -1
  77. package/dist/input.cjs +106 -0
  78. package/dist/input.cjs.map +1 -0
  79. package/dist/input.d.cts +22 -0
  80. package/dist/input.d.ts +22 -0
  81. package/dist/input.js +4 -0
  82. package/dist/input.js.map +1 -0
  83. package/dist/list/item.cjs +149 -0
  84. package/dist/list/item.cjs.map +1 -0
  85. package/dist/list/item.d.cts +3 -0
  86. package/dist/list/item.d.ts +3 -0
  87. package/dist/list/item.js +3 -0
  88. package/dist/list/item.js.map +1 -0
  89. package/dist/list.cjs +235 -0
  90. package/dist/list.cjs.map +1 -0
  91. package/dist/list.d.cts +17 -0
  92. package/dist/list.d.ts +17 -0
  93. package/dist/list.js +4 -0
  94. package/dist/list.js.map +1 -0
  95. package/dist/menu.cjs +177 -0
  96. package/dist/menu.cjs.map +1 -0
  97. package/dist/menu.d.cts +20 -0
  98. package/dist/menu.d.ts +20 -0
  99. package/dist/menu.js +3 -0
  100. package/dist/menu.js.map +1 -0
  101. package/dist/slider.cjs +128 -0
  102. package/dist/slider.cjs.map +1 -0
  103. package/dist/slider.d.cts +42 -0
  104. package/dist/slider.d.ts +42 -0
  105. package/dist/slider.js +3 -0
  106. package/dist/slider.js.map +1 -0
  107. package/dist/styles.css +334 -44
  108. package/dist/switch.cjs +145 -0
  109. package/dist/switch.cjs.map +1 -0
  110. package/dist/switch.d.cts +16 -0
  111. package/dist/switch.d.ts +16 -0
  112. package/dist/switch.js +3 -0
  113. package/dist/switch.js.map +1 -0
  114. package/dist/tooltip.cjs +136 -0
  115. package/dist/tooltip.cjs.map +1 -0
  116. package/dist/tooltip.d.cts +19 -0
  117. package/dist/tooltip.d.ts +19 -0
  118. package/dist/tooltip.js +3 -0
  119. package/dist/tooltip.js.map +1 -0
  120. package/package.json +67 -2
package/dist/index.cjs CHANGED
@@ -151,6 +151,13 @@ var sizeClasses = {
151
151
  large: "px-6 py-3 text-lg",
152
152
  "x-large": "px-7 py-3.5 text-xl"
153
153
  };
154
+ var iconOnlySizeClasses = {
155
+ "x-small": "p-2 text-xs aspect-square",
156
+ small: "p-2.5 text-sm aspect-square",
157
+ medium: "p-3 text-base aspect-square",
158
+ large: "p-3.5 text-lg aspect-square",
159
+ "x-large": "p-4 text-xl aspect-square"
160
+ };
154
161
  var Button = React3__namespace.forwardRef(
155
162
  ({
156
163
  variant = "solid",
@@ -160,6 +167,7 @@ var Button = React3__namespace.forwardRef(
160
167
  loading = false,
161
168
  loadingText,
162
169
  icon,
170
+ iconOnly = false,
163
171
  className,
164
172
  children,
165
173
  disabled,
@@ -167,14 +175,14 @@ var Button = React3__namespace.forwardRef(
167
175
  ...rest
168
176
  }, ref) => {
169
177
  const variantClass = resolveVariantClass(variant, color);
170
- const sizeClass = sizeClasses[size] ?? sizeClasses.medium;
178
+ const sizeClass = iconOnly ? iconOnlySizeClasses[size] ?? iconOnlySizeClasses.medium : sizeClasses[size] ?? sizeClasses.medium;
171
179
  const blockClass = block ? "w-full" : null;
172
180
  const isDisabled = disabled || loading;
173
181
  const cursor = onClick && !isDisabled ? "cursor-pointer" : "cursor-default";
174
182
  const resolvedIconClass = resolveIconClassName(icon);
175
183
  const shouldRenderIcon = Boolean(resolvedIconClass && !loading);
176
184
  const isLoadingTextProvided = loadingText !== void 0 && loadingText !== null;
177
- const content = loading && isLoadingTextProvided ? loadingText : children;
185
+ const content = iconOnly ? null : loading && isLoadingTextProvided ? loadingText : children;
178
186
  const hasDecorators = (loading || shouldRenderIcon) && Boolean(content);
179
187
  const gapClass = hasDecorators ? "gap-2" : void 0;
180
188
  const loadingIconClass = loading ? tailwindMerge.twMerge("mdi mdi-loading mdi-spin", "leading-none") : void 0;
@@ -487,20 +495,20 @@ var ListItem = React3__namespace.forwardRef((props, ref) => {
487
495
  const sharp = sharpOverride ?? false;
488
496
  const accent = accentClasses[color] ?? accentClasses.primary;
489
497
  const shapeClass = divided || sharp ? "rounded-none" : "rounded-lg";
490
- const Component2 = component ?? (href ? "a" : "div");
491
- const interactive = typeof rest.onClick === "function" || Component2 === "a" || Component2 === "button";
498
+ const Component = component ?? (href ? "a" : "div");
499
+ const interactive = typeof rest.onClick === "function" || Component === "a" || Component === "button";
492
500
  const resolvedRole = role ?? "listitem";
493
- const resolvedTabIndex = disabled ? -1 : tabIndex ?? (interactive && Component2 === "div" ? 0 : void 0);
494
- const resolvedRel = Component2 === "a" ? rel : void 0;
495
- const resolvedTarget = Component2 === "a" ? target : void 0;
496
- const resolvedHref = Component2 === "a" ? href : void 0;
497
- const resolvedType = Component2 === "button" ? type ?? "button" : void 0;
501
+ const resolvedTabIndex = disabled ? -1 : tabIndex ?? (interactive && Component === "div" ? 0 : void 0);
502
+ const resolvedRel = Component === "a" ? rel : void 0;
503
+ const resolvedTarget = Component === "a" ? target : void 0;
504
+ const resolvedHref = Component === "a" ? href : void 0;
505
+ const resolvedType = Component === "button" ? type ?? "button" : void 0;
498
506
  const disabledClass = disabled ? "pointer-events-none opacity-60" : "cursor-pointer";
499
507
  const navPaddingClass = nav ? "pl-5" : void 0;
500
508
  const insetClass = inset ? "pl-12" : void 0;
501
509
  const activeClasses = active ? accent.bg : void 0;
502
510
  return /* @__PURE__ */ jsxRuntime.jsxs(
503
- Component2,
511
+ Component,
504
512
  {
505
513
  ...rest,
506
514
  ref,
@@ -663,20 +671,39 @@ var Menu = React3__namespace.forwardRef((props, ref) => {
663
671
  className,
664
672
  ...rest
665
673
  } = props;
674
+ const { onMouseEnter, onMouseLeave, onFocus, onBlur, ...restProps } = rest;
666
675
  const hasContent = children !== void 0 && children !== null;
667
- const manual = typeof open === "boolean";
668
- const visible = Boolean(open);
669
- const shouldRenderContent = hasContent && (keepMounted || visible || !manual && (openOnHover || openOnFocus));
676
+ const isControlled = typeof open === "boolean";
677
+ const [uncontrolledOpen, setUncontrolledOpen] = React3__namespace.useState(false);
678
+ const closeTimer = React3__namespace.useRef(null);
679
+ const visible = isControlled ? Boolean(open) : uncontrolledOpen;
680
+ const shouldRenderContent = hasContent && (keepMounted || visible || !isControlled && (openOnHover || openOnFocus));
670
681
  const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
671
- const visibilityClasses = (() => {
672
- if (manual) {
673
- return visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
682
+ const clearCloseTimer = () => {
683
+ if (closeTimer.current !== null) {
684
+ window.clearTimeout(closeTimer.current);
685
+ closeTimer.current = null;
674
686
  }
675
- const base2 = "pointer-events-none opacity-0 scale-95";
676
- const hover = openOnHover ? " group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : "";
677
- const focus = openOnFocus ? " group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : "";
678
- return `${base2}${hover}${focus}`;
679
- })();
687
+ };
688
+ const openMenu = () => {
689
+ clearCloseTimer();
690
+ if (!isControlled) {
691
+ setUncontrolledOpen(true);
692
+ }
693
+ };
694
+ const scheduleClose = () => {
695
+ clearCloseTimer();
696
+ if (!isControlled) {
697
+ closeTimer.current = window.setTimeout(() => {
698
+ setUncontrolledOpen(false);
699
+ closeTimer.current = null;
700
+ }, 120);
701
+ }
702
+ };
703
+ React3__namespace.useEffect(() => {
704
+ return () => clearCloseTimer();
705
+ }, []);
706
+ const visibilityClasses = visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
680
707
  const {
681
708
  className: contentExtraClassName,
682
709
  style: contentStyle,
@@ -690,10 +717,34 @@ var Menu = React3__namespace.forwardRef((props, ref) => {
690
717
  /* @__PURE__ */ jsxRuntime.jsxs(
691
718
  "div",
692
719
  {
693
- ...rest,
720
+ ...restProps,
694
721
  ref,
695
722
  className: tailwindMerge.twMerge("relative inline-flex min-w-0 group/menu", className),
696
723
  "data-open": visible || void 0,
724
+ onMouseEnter: (event) => {
725
+ if (openOnHover) {
726
+ openMenu();
727
+ }
728
+ onMouseEnter?.(event);
729
+ },
730
+ onMouseLeave: (event) => {
731
+ if (openOnHover) {
732
+ scheduleClose();
733
+ }
734
+ onMouseLeave?.(event);
735
+ },
736
+ onFocus: (event) => {
737
+ if (openOnFocus) {
738
+ openMenu();
739
+ }
740
+ onFocus?.(event);
741
+ },
742
+ onBlur: (event) => {
743
+ if (openOnFocus) {
744
+ scheduleClose();
745
+ }
746
+ onBlur?.(event);
747
+ },
697
748
  children: [
698
749
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex w-full min-w-0", children: activator }),
699
750
  shouldRenderContent ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -713,6 +764,18 @@ var Menu = React3__namespace.forwardRef((props, ref) => {
713
764
  role: contentRole ?? "menu",
714
765
  tabIndex: contentTabIndex ?? -1,
715
766
  style: contentStyle,
767
+ onMouseEnter: (event) => {
768
+ if (openOnHover) {
769
+ openMenu();
770
+ }
771
+ restContentProps?.onMouseEnter?.(event);
772
+ },
773
+ onMouseLeave: (event) => {
774
+ if (openOnHover) {
775
+ scheduleClose();
776
+ }
777
+ restContentProps?.onMouseLeave?.(event);
778
+ },
716
779
  children
717
780
  }
718
781
  ) : null
@@ -802,144 +865,148 @@ var accentClasses2 = {
802
865
  };
803
866
  var uniqueIdCounter = 0;
804
867
  var generateId = (prefix) => `${prefix}-${++uniqueIdCounter}`;
805
- var ExpansionPanelItemInner = class extends React3.Component {
806
- constructor(props) {
807
- super(props);
808
- this.getContext = () => this.props.__expansionPanelContext ?? null;
809
- this.handleToggle = () => {
810
- const { disabled = false } = this.props;
811
- if (disabled) {
812
- return;
813
- }
814
- const context = this.getContext();
815
- const panelValue = this.props.value ?? this.generatedValue;
816
- if (context) {
817
- context.toggle(panelValue, disabled);
818
- return;
819
- }
820
- this.setState((prev) => ({ standaloneExpanded: !prev.standaloneExpanded }));
821
- };
822
- this.state = { standaloneExpanded: false };
823
- this.generatedValue = generateId("expansion-panel-value");
824
- this.headerId = generateId("expansion-panel-header");
825
- this.contentId = generateId("expansion-panel-content");
868
+ var ExpansionPanelItemInner = (props) => {
869
+ const {
870
+ value,
871
+ title,
872
+ subtitle,
873
+ text,
874
+ prepend,
875
+ append,
876
+ expandIcon,
877
+ collapseIcon,
878
+ hideToggleIcon = false,
879
+ headerClassName,
880
+ contentClassName,
881
+ className,
882
+ disabled = false,
883
+ children,
884
+ color: colorOverride,
885
+ forwardedRef,
886
+ __expansionPanelContext,
887
+ ...rest
888
+ } = props;
889
+ const [standaloneExpanded, setStandaloneExpanded] = React3.useState(false);
890
+ const generatedValueRef = React3.useRef(null);
891
+ if (generatedValueRef.current === null) {
892
+ generatedValueRef.current = generateId("expansion-panel-value");
826
893
  }
827
- render() {
828
- const {
829
- value,
830
- title,
831
- subtitle,
832
- text,
833
- prepend,
834
- append,
835
- expandIcon,
836
- collapseIcon,
837
- hideToggleIcon = false,
838
- headerClassName,
839
- contentClassName,
840
- className,
841
- disabled = false,
842
- children,
843
- color: colorOverride,
844
- forwardedRef,
845
- ...rest
846
- } = this.props;
847
- const context = this.getContext();
848
- const panelValue = value ?? this.generatedValue;
849
- const density = context?.density ?? "default";
850
- const color = colorOverride ?? context?.color ?? "primary";
851
- const divider = context?.divider ?? true;
852
- const variant = context?.variant ?? "elevated";
853
- const rounded = context?.rounded ?? "lg";
854
- const accent = accentClasses2[color] ?? accentClasses2.primary;
855
- const isExpanded = context ? context.expandedValues.includes(panelValue) : this.state.standaloneExpanded;
856
- const rootSurface = divider ? "bg-transparent border-0 shadow-none" : itemVariantClasses[variant];
857
- const shapeClass = divider ? void 0 : roundedClasses[rounded] ?? roundedClasses.lg;
858
- const densityPadding = densityClasses2[density] ?? densityClasses2.default;
859
- const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
860
- const titleClass = isExpanded ? accent.text : void 0;
861
- const activeBorderClass = tailwindMerge.twMerge("border-l-2 border-transparent", isExpanded ? accent.border : void 0);
862
- const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200", "aria-hidden": true });
863
- const hasContent = Boolean(children ?? text);
864
- const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
865
- const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
866
- const shouldRotateDefaultIcon = !expandIcon && !collapseIcon && !hideToggleIcon;
867
- const toggleWrapperClass = tailwindMerge.twMerge(
868
- "ml-3 flex h-6 w-6 items-center justify-center text-gray-500 transition-transform duration-200",
869
- shouldRotateDefaultIcon && isExpanded ? "rotate-180" : void 0
870
- );
871
- return /* @__PURE__ */ jsxRuntime.jsxs(
872
- "div",
873
- {
874
- ...rest,
875
- ref: forwardedRef,
876
- className: tailwindMerge.twMerge(
877
- "expansion-panel-item flex flex-col overflow-hidden transition-colors duration-200",
878
- rootSurface,
879
- shapeClass,
880
- className
881
- ),
882
- "data-state": isExpanded ? "open" : "closed",
883
- "data-disabled": disabled || void 0,
884
- children: [
885
- /* @__PURE__ */ jsxRuntime.jsxs(
886
- "button",
887
- {
888
- type: "button",
889
- id: this.headerId,
890
- onClick: this.handleToggle,
891
- disabled,
892
- "aria-expanded": isExpanded,
893
- "aria-controls": hasContent ? this.contentId : void 0,
894
- className: tailwindMerge.twMerge(
895
- "flex w-full items-center gap-4 px-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
896
- densityPadding,
897
- disabledClass,
898
- isExpanded ? accent.bg : void 0,
899
- headerClassName
900
- ),
901
- "data-state": isExpanded ? "open" : "closed",
902
- children: [
903
- prepend && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 items-center justify-center text-gray-500", children: prepend }),
904
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5 text-left", children: [
905
- title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("truncate font-medium text-gray-900", titleClass), children: title }),
906
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle })
907
- ] }),
908
- append && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto flex items-center gap-2 text-sm text-gray-500", children: append }),
909
- !hideToggleIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: toggleWrapperClass, children: toggleIconNode })
910
- ]
911
- }
912
- ),
913
- hasContent && /* @__PURE__ */ jsxRuntime.jsx(
914
- "div",
915
- {
916
- className: "grid overflow-hidden border-t border-gray-100 transition-all duration-200 ease-in-out",
917
- style: { gridTemplateRows: isExpanded ? "1fr" : "0fr" },
918
- "aria-hidden": isExpanded ? void 0 : true,
919
- "data-state": isExpanded ? "open" : "closed",
920
- children: /* @__PURE__ */ jsxRuntime.jsx(
921
- "div",
922
- {
923
- id: this.contentId,
924
- role: "region",
925
- "aria-labelledby": this.headerId,
926
- "data-state": isExpanded ? "open" : "closed",
927
- className: tailwindMerge.twMerge(
928
- "min-h-0 px-4 pt-0 text-sm text-gray-600 transition-all duration-200",
929
- activeBorderClass,
930
- contentAnimationClass,
931
- isExpanded ? "pointer-events-auto" : "pointer-events-none",
932
- contentClassName
933
- ),
934
- children: children ?? text
935
- }
936
- )
937
- }
938
- )
939
- ]
940
- }
941
- );
894
+ const generatedValue = generatedValueRef.current;
895
+ const headerIdRef = React3.useRef(null);
896
+ if (!headerIdRef.current) {
897
+ headerIdRef.current = generateId("expansion-panel-header");
898
+ }
899
+ const headerId = headerIdRef.current;
900
+ const contentIdRef = React3.useRef(null);
901
+ if (!contentIdRef.current) {
902
+ contentIdRef.current = generateId("expansion-panel-content");
942
903
  }
904
+ const contentId = contentIdRef.current;
905
+ const context = __expansionPanelContext ?? null;
906
+ const panelValue = value ?? generatedValue;
907
+ const density = context?.density ?? "default";
908
+ const color = colorOverride ?? context?.color ?? "primary";
909
+ const divider = context?.divider ?? true;
910
+ const variant = context?.variant ?? "elevated";
911
+ const rounded = context?.rounded ?? "lg";
912
+ const accent = accentClasses2[color] ?? accentClasses2.primary;
913
+ const isExpanded = context ? context.expandedValues.includes(panelValue) : standaloneExpanded;
914
+ const rootSurface = divider ? "bg-transparent border-0 shadow-none" : itemVariantClasses[variant];
915
+ const shapeClass = divider ? void 0 : roundedClasses[rounded] ?? roundedClasses.lg;
916
+ const densityPadding = densityClasses2[density] ?? densityClasses2.default;
917
+ const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
918
+ const titleClass = isExpanded ? accent.text : void 0;
919
+ const activeBorderClass = tailwindMerge.twMerge("border-l-2 border-transparent", isExpanded ? accent.border : void 0);
920
+ const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200", "aria-hidden": true });
921
+ const hasContent = Boolean(children ?? text);
922
+ const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
923
+ const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
924
+ const shouldRotateDefaultIcon = !expandIcon && !collapseIcon && !hideToggleIcon;
925
+ const toggleWrapperClass = tailwindMerge.twMerge(
926
+ "ml-3 flex h-6 w-6 items-center justify-center text-gray-500 transition-transform duration-200",
927
+ shouldRotateDefaultIcon && isExpanded ? "rotate-180" : void 0
928
+ );
929
+ const handleToggle = () => {
930
+ if (disabled) {
931
+ return;
932
+ }
933
+ if (context) {
934
+ context.toggle(panelValue, disabled);
935
+ return;
936
+ }
937
+ setStandaloneExpanded((prev) => !prev);
938
+ };
939
+ return /* @__PURE__ */ jsxRuntime.jsxs(
940
+ "div",
941
+ {
942
+ ...rest,
943
+ ref: forwardedRef,
944
+ className: tailwindMerge.twMerge(
945
+ "expansion-panel-item flex flex-col overflow-hidden transition-colors duration-200",
946
+ rootSurface,
947
+ shapeClass,
948
+ className
949
+ ),
950
+ "data-state": isExpanded ? "open" : "closed",
951
+ "data-disabled": disabled || void 0,
952
+ children: [
953
+ /* @__PURE__ */ jsxRuntime.jsxs(
954
+ "button",
955
+ {
956
+ type: "button",
957
+ id: headerId,
958
+ onClick: handleToggle,
959
+ disabled,
960
+ "aria-expanded": isExpanded,
961
+ "aria-controls": hasContent ? contentId : void 0,
962
+ className: tailwindMerge.twMerge(
963
+ "flex w-full items-center gap-4 px-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
964
+ densityPadding,
965
+ disabledClass,
966
+ isExpanded ? accent.bg : void 0,
967
+ headerClassName
968
+ ),
969
+ "data-state": isExpanded ? "open" : "closed",
970
+ children: [
971
+ prepend && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 items-center justify-center text-gray-500", children: prepend }),
972
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5 text-left", children: [
973
+ title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("truncate font-medium text-gray-900", titleClass), children: title }),
974
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle })
975
+ ] }),
976
+ append && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto flex items-center gap-2 text-sm text-gray-500", children: append }),
977
+ !hideToggleIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: toggleWrapperClass, children: toggleIconNode })
978
+ ]
979
+ }
980
+ ),
981
+ hasContent && /* @__PURE__ */ jsxRuntime.jsx(
982
+ "div",
983
+ {
984
+ className: "grid overflow-hidden border-t border-gray-100 transition-all duration-200 ease-in-out",
985
+ style: { gridTemplateRows: isExpanded ? "1fr" : "0fr" },
986
+ "aria-hidden": isExpanded ? void 0 : true,
987
+ "data-state": isExpanded ? "open" : "closed",
988
+ children: /* @__PURE__ */ jsxRuntime.jsx(
989
+ "div",
990
+ {
991
+ id: contentId,
992
+ role: "region",
993
+ "aria-labelledby": headerId,
994
+ "data-state": isExpanded ? "open" : "closed",
995
+ className: tailwindMerge.twMerge(
996
+ "min-h-0 px-4 pt-0 text-sm text-gray-600 transition-all duration-200",
997
+ activeBorderClass,
998
+ contentAnimationClass,
999
+ isExpanded ? "pointer-events-auto" : "pointer-events-none",
1000
+ contentClassName
1001
+ ),
1002
+ children: children ?? text
1003
+ }
1004
+ )
1005
+ }
1006
+ )
1007
+ ]
1008
+ }
1009
+ );
943
1010
  };
944
1011
  var ExpansionPanelItem = React3.forwardRef((props, ref) => /* @__PURE__ */ jsxRuntime.jsx(ExpansionPanelItemInner, { ...props, forwardedRef: ref }));
945
1012
  ExpansionPanelItem.displayName = "ExpansionPanelItem";
@@ -1256,6 +1323,82 @@ var ToolTip = React3__namespace.forwardRef((props, forwardedRef) => {
1256
1323
  });
1257
1324
  ToolTip.displayName = "ToolTip";
1258
1325
  var ToolTip_default = ToolTip;
1326
+ var paddingClasses = {
1327
+ none: "p-0",
1328
+ sm: "p-3",
1329
+ md: "p-4",
1330
+ lg: "p-6"
1331
+ };
1332
+ var cardBase = "card-base relative w-full overflow-hidden bg-white text-gray-900 transition-colors";
1333
+ var variantClasses = {
1334
+ solid: "rounded-2xl border border-gray-200 bg-white shadow-lg shadow-gray-200/55",
1335
+ outline: "rounded-2xl border border-gray-300 bg-white shadow-none",
1336
+ text: "rounded-2xl border border-transparent bg-transparent shadow-none",
1337
+ ghost: "rounded-2xl border border-transparent bg-gray-50 shadow-none",
1338
+ filled: "rounded-2xl border border-gray-200 bg-gray-50 shadow-sm",
1339
+ underlined: "rounded-2xl border border-transparent border-b border-b-gray-200 shadow-none",
1340
+ rounded: "rounded-3xl border border-gray-200 bg-white shadow-md",
1341
+ sharp: "rounded-none border border-gray-200 bg-white shadow-md"
1342
+ };
1343
+ var CardRoot = React3.forwardRef(function Card({ className, children, variant = "solid", padding = "md", interactive = false, ...rest }, ref) {
1344
+ const variantClass = variantClasses[variant] ?? variantClasses.solid;
1345
+ const paddingClass = paddingClasses[padding] ?? paddingClasses.md;
1346
+ const interactiveClass = interactive ? "transition-all duration-200 hover:-translate-y-0.5 hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2" : void 0;
1347
+ const tabIndexValue = interactive && rest.tabIndex === void 0 ? 0 : rest.tabIndex;
1348
+ return /* @__PURE__ */ jsxRuntime.jsx(
1349
+ "div",
1350
+ {
1351
+ ...rest,
1352
+ ref,
1353
+ tabIndex: tabIndexValue,
1354
+ className: tailwindMerge.twMerge(cardBase, variantClass, paddingClass, interactiveClass, className),
1355
+ children
1356
+ }
1357
+ );
1358
+ });
1359
+ var CardHeader = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1360
+ "div",
1361
+ {
1362
+ ...rest,
1363
+ className: tailwindMerge.twMerge("card-header mb-2 flex flex-col gap-1 border-b border-gray-100 pb-3", className)
1364
+ }
1365
+ );
1366
+ var CardBody = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, className: tailwindMerge.twMerge("card-body flex flex-col gap-3", className) });
1367
+ var CardFooter = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1368
+ "div",
1369
+ {
1370
+ ...rest,
1371
+ className: tailwindMerge.twMerge("card-footer mt-3 flex flex-wrap items-center gap-3 border-t border-gray-100 pt-3", className)
1372
+ }
1373
+ );
1374
+ var CardTitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("h3", { ...rest, className: tailwindMerge.twMerge("card-title text-lg font-semibold text-gray-900", className) });
1375
+ var CardSubtitle = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("p", { ...rest, className: tailwindMerge.twMerge("card-subtitle text-sm font-medium text-gray-600", className) });
1376
+ var CardText = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("p", { ...rest, className: tailwindMerge.twMerge("card-text text-sm text-gray-700", className) });
1377
+ var CardMedia = ({ className, rounded = false, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1378
+ "img",
1379
+ {
1380
+ ...rest,
1381
+ className: tailwindMerge.twMerge(
1382
+ "card-media w-full object-cover",
1383
+ rounded ? "rounded-xl" : "rounded-none",
1384
+ rest.height || rest.style ? "block" : "block max-h-60",
1385
+ className
1386
+ ),
1387
+ loading: rest.loading ?? "lazy"
1388
+ }
1389
+ );
1390
+ var CardActions = ({ className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, className: tailwindMerge.twMerge("card-actions flex flex-wrap gap-2", className) });
1391
+ var Card2 = Object.assign(CardRoot, {
1392
+ Header: CardHeader,
1393
+ Body: CardBody,
1394
+ Footer: CardFooter,
1395
+ Title: CardTitle,
1396
+ Subtitle: CardSubtitle,
1397
+ Text: CardText,
1398
+ Media: CardMedia,
1399
+ Actions: CardActions
1400
+ });
1401
+ var Card_default = Card2;
1259
1402
 
1260
1403
  // src/Form/Input/states.input.ts
1261
1404
  var resolveIconClassName3 = (icon) => {
@@ -1305,7 +1448,7 @@ var Input = ({
1305
1448
  ...props
1306
1449
  }) => {
1307
1450
  const classBase = "input-base px-3 py-2 focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full";
1308
- const variantClasses = {
1451
+ const variantClasses2 = {
1309
1452
  solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1310
1453
  sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1311
1454
  outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
@@ -1326,7 +1469,7 @@ var Input = ({
1326
1469
  warn: "text-amber-600",
1327
1470
  success: "text-emerald-600"
1328
1471
  };
1329
- const variantClass = variantClasses[variant] ?? variantClasses.outline;
1472
+ const variantClass = variantClasses2[variant] ?? variantClasses2.outline;
1330
1473
  const toneClass = status ? statusClasses[status.tone] : void 0;
1331
1474
  const prependIconClass = resolveIconClassName3(icon);
1332
1475
  const prependPadding = prependIconClass ? "pl-10" : void 0;
@@ -1347,8 +1490,260 @@ var Input = ({
1347
1490
  ] });
1348
1491
  };
1349
1492
  var Input_default = Input;
1493
+ var paletteValues = {
1494
+ primary: { fill: "var(--color-primary, #6366f1)", ring: "rgba(99, 102, 241, 0.28)", thumbBorder: "#6366f1" },
1495
+ neutral: { fill: "#4b5563", ring: "rgba(75, 85, 99, 0.28)", thumbBorder: "#4b5563" },
1496
+ info: { fill: "#0284c7", ring: "rgba(2, 132, 199, 0.28)", thumbBorder: "#0284c7" },
1497
+ success: { fill: "#059669", ring: "rgba(5, 150, 105, 0.24)", thumbBorder: "#059669" },
1498
+ warning: { fill: "#d97706", ring: "rgba(217, 119, 6, 0.24)", thumbBorder: "#d97706" },
1499
+ danger: { fill: "#dc2626", ring: "rgba(220, 38, 38, 0.24)", thumbBorder: "#dc2626" },
1500
+ surface: { fill: "#0f172a", ring: "rgba(15, 23, 42, 0.22)", thumbBorder: "#0f172a" },
1501
+ bw: { fill: "#000000", ring: "rgba(0, 0, 0, 0.26)", thumbBorder: "#000000" }
1502
+ };
1503
+ var sizeTokens = {
1504
+ small: { trackHeight: "0.375rem", thumbSize: "1.1rem", trackClass: "h-1.5", valueClass: "text-xs" },
1505
+ medium: { trackHeight: "0.5rem", thumbSize: "1.25rem", trackClass: "h-2", valueClass: "text-sm" },
1506
+ large: { trackHeight: "0.6rem", thumbSize: "1.4rem", trackClass: "h-[0.65rem]", valueClass: "text-base" }
1507
+ };
1508
+ var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
1509
+ var toNumber = (value, fallback) => {
1510
+ if (typeof value === "number" && Number.isFinite(value)) {
1511
+ return value;
1512
+ }
1513
+ const parsed = Number(value);
1514
+ return Number.isFinite(parsed) ? parsed : fallback;
1515
+ };
1516
+ var Slider = ({
1517
+ color = "primary",
1518
+ size = "medium",
1519
+ label,
1520
+ hint,
1521
+ showValue = true,
1522
+ valueLabel,
1523
+ wrapperClassName,
1524
+ className,
1525
+ trackColor,
1526
+ onChange,
1527
+ disabled,
1528
+ min = 0,
1529
+ max = 100,
1530
+ step = 1,
1531
+ ...rest
1532
+ }) => {
1533
+ const palette = paletteValues[color] ?? paletteValues.primary;
1534
+ const sizeToken = sizeTokens[size] ?? sizeTokens.medium;
1535
+ const { value, defaultValue, ...inputProps } = rest;
1536
+ const resolvedMin = toNumber(min, 0);
1537
+ const resolvedMax = toNumber(max, resolvedMin < 100 ? 100 : resolvedMin);
1538
+ const resolvedStep = toNumber(step, 1);
1539
+ const isControlled = typeof value === "number";
1540
+ const [internalValue, setInternalValue] = React3.useState(
1541
+ clamp(
1542
+ typeof value === "number" ? value : typeof defaultValue === "number" ? defaultValue : resolvedMin,
1543
+ resolvedMin,
1544
+ resolvedMax
1545
+ )
1546
+ );
1547
+ React3.useEffect(() => {
1548
+ if (isControlled && typeof value === "number") {
1549
+ setInternalValue(clamp(value, resolvedMin, resolvedMax));
1550
+ }
1551
+ }, [isControlled, value, resolvedMin, resolvedMax]);
1552
+ React3.useEffect(() => {
1553
+ if (!isControlled) {
1554
+ setInternalValue((prev) => clamp(prev, resolvedMin, resolvedMax));
1555
+ }
1556
+ }, [isControlled, resolvedMin, resolvedMax]);
1557
+ const currentValue = isControlled && typeof value === "number" ? clamp(value, resolvedMin, resolvedMax) : internalValue;
1558
+ const percentage = resolvedMax === resolvedMin ? 0 : (currentValue - resolvedMin) / (resolvedMax - resolvedMin) * 100;
1559
+ const cssVars = {
1560
+ "--slider-color": palette.fill,
1561
+ "--slider-ring-color": palette.ring,
1562
+ "--slider-thumb-border": palette.thumbBorder,
1563
+ "--slider-track-color": trackColor ?? "#e5e7eb",
1564
+ "--slider-track-height": sizeToken.trackHeight,
1565
+ "--slider-thumb-size": sizeToken.thumbSize,
1566
+ "--slider-percentage": `${percentage}%`
1567
+ };
1568
+ if (disabled) {
1569
+ cssVars["--slider-disabled-fill"] = "#d1d5db";
1570
+ cssVars["--slider-thumb-border"] = "#d1d5db";
1571
+ cssVars["--slider-track-color-disabled"] = "#e5e7eb";
1572
+ }
1573
+ const handleChange = (event) => {
1574
+ const nextValue = Number(event.target.value);
1575
+ if (!isControlled) {
1576
+ setInternalValue(nextValue);
1577
+ }
1578
+ onChange?.(nextValue, event);
1579
+ };
1580
+ const displayValue = valueLabel ? valueLabel(currentValue) : currentValue;
1581
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("flex flex-col gap-2", wrapperClassName), children: [
1582
+ (label || showValue) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
1583
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: label }),
1584
+ showValue && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("tabular-nums text-gray-900", sizeToken.valueClass), children: displayValue })
1585
+ ] }),
1586
+ /* @__PURE__ */ jsxRuntime.jsx(
1587
+ "input",
1588
+ {
1589
+ ...inputProps,
1590
+ type: "range",
1591
+ min: resolvedMin,
1592
+ max: resolvedMax,
1593
+ step: resolvedStep,
1594
+ value: currentValue,
1595
+ onChange: handleChange,
1596
+ disabled,
1597
+ className: tailwindMerge.twMerge(
1598
+ "slider-control focus-visible:outline-none rounded-full",
1599
+ sizeToken.trackClass,
1600
+ disabled ? "cursor-not-allowed opacity-70" : "cursor-pointer",
1601
+ className
1602
+ ),
1603
+ style: cssVars
1604
+ }
1605
+ ),
1606
+ hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-600", children: hint })
1607
+ ] });
1608
+ };
1609
+ var Slider_default = Slider;
1610
+ var trackSizes = {
1611
+ small: "w-10 h-6",
1612
+ medium: "w-12 h-7",
1613
+ large: "w-14 h-8"
1614
+ };
1615
+ var thumbSizes = {
1616
+ small: "w-5 h-5",
1617
+ medium: "w-6 h-6",
1618
+ large: "w-7 h-7"
1619
+ };
1620
+ var thumbTranslate = {
1621
+ small: "translate-x-4",
1622
+ medium: "translate-x-5",
1623
+ large: "translate-x-6"
1624
+ };
1625
+ var paletteTrackClasses = {
1626
+ primary: { active: "bg-primary", inactive: "bg-gray-300" },
1627
+ neutral: { active: "bg-gray-600", inactive: "bg-gray-300" },
1628
+ info: { active: "bg-sky-500", inactive: "bg-gray-300" },
1629
+ success: { active: "bg-emerald-500", inactive: "bg-gray-300" },
1630
+ warning: { active: "bg-amber-500", inactive: "bg-gray-300" },
1631
+ danger: { active: "bg-red-500", inactive: "bg-gray-300" },
1632
+ surface: { active: "bg-gray-900", inactive: "bg-gray-300" },
1633
+ bw: { active: "bg-black", inactive: "bg-gray-200" }
1634
+ };
1635
+ var focusRingClasses = {
1636
+ primary: "peer-focus-visible:ring-primary/40",
1637
+ neutral: "peer-focus-visible:ring-gray-400",
1638
+ info: "peer-focus-visible:ring-sky-400",
1639
+ success: "peer-focus-visible:ring-emerald-400",
1640
+ warning: "peer-focus-visible:ring-amber-400",
1641
+ danger: "peer-focus-visible:ring-red-400",
1642
+ surface: "peer-focus-visible:ring-gray-800/70",
1643
+ bw: "peer-focus-visible:ring-black/50"
1644
+ };
1645
+ var thumbActiveClasses = {
1646
+ primary: "border-primary shadow-[0_4px_12px_rgba(99,102,241,0.35)]",
1647
+ neutral: "border-gray-600 shadow-[0_4px_12px_rgba(75,85,99,0.35)]",
1648
+ info: "border-sky-500 shadow-[0_4px_12px_rgba(2,132,199,0.32)]",
1649
+ success: "border-emerald-500 shadow-[0_4px_12px_rgba(16,185,129,0.32)]",
1650
+ warning: "border-amber-500 shadow-[0_4px_12px_rgba(245,158,11,0.32)]",
1651
+ danger: "border-red-500 shadow-[0_4px_12px_rgba(239,68,68,0.32)]",
1652
+ surface: "border-gray-900 shadow-[0_4px_12px_rgba(15,23,42,0.32)]",
1653
+ bw: "border-black shadow-[0_4px_12px_rgba(0,0,0,0.32)]"
1654
+ };
1655
+ var Switch = React3.forwardRef(
1656
+ ({
1657
+ color = "primary",
1658
+ size = "medium",
1659
+ label,
1660
+ description,
1661
+ wrapperClassName,
1662
+ className,
1663
+ labelClassName,
1664
+ disabled,
1665
+ onChange,
1666
+ checked,
1667
+ defaultChecked,
1668
+ ...rest
1669
+ }, ref) => {
1670
+ const paletteTrack = paletteTrackClasses[color] ?? paletteTrackClasses.primary;
1671
+ const focusClass = focusRingClasses[color] ?? focusRingClasses.primary;
1672
+ const thumbActive = thumbActiveClasses[color] ?? thumbActiveClasses.primary;
1673
+ const isControlled = checked !== void 0;
1674
+ const [internalChecked, setInternalChecked] = React3.useState(
1675
+ Boolean((isControlled ? checked : defaultChecked) ?? false)
1676
+ );
1677
+ React3.useEffect(() => {
1678
+ if (isControlled) {
1679
+ setInternalChecked(Boolean(checked));
1680
+ }
1681
+ }, [checked, isControlled]);
1682
+ const currentChecked = isControlled ? Boolean(checked) : internalChecked;
1683
+ const handleChange = (event) => {
1684
+ if (!isControlled) {
1685
+ setInternalChecked(event.target.checked);
1686
+ }
1687
+ onChange?.(event);
1688
+ };
1689
+ const sizeTrackClass = trackSizes[size] ?? trackSizes.medium;
1690
+ const sizeThumbClass = thumbSizes[size] ?? thumbSizes.medium;
1691
+ const thumbShiftClass = thumbTranslate[size] ?? thumbTranslate.medium;
1692
+ const pointerClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
1693
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: tailwindMerge.twMerge("flex items-center gap-3 select-none", pointerClass, wrapperClassName), children: [
1694
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex items-center", children: [
1695
+ /* @__PURE__ */ jsxRuntime.jsx(
1696
+ "input",
1697
+ {
1698
+ ...rest,
1699
+ type: "checkbox",
1700
+ ref,
1701
+ checked: currentChecked,
1702
+ onChange: handleChange,
1703
+ disabled,
1704
+ className: "peer sr-only"
1705
+ }
1706
+ ),
1707
+ /* @__PURE__ */ jsxRuntime.jsx(
1708
+ "span",
1709
+ {
1710
+ className: tailwindMerge.twMerge(
1711
+ "block rounded-full border border-transparent transition-all duration-200",
1712
+ sizeTrackClass,
1713
+ currentChecked ? paletteTrack.active : paletteTrack.inactive,
1714
+ disabled && "bg-gray-200",
1715
+ "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
1716
+ focusClass,
1717
+ className
1718
+ ),
1719
+ "aria-hidden": true,
1720
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1721
+ "span",
1722
+ {
1723
+ className: tailwindMerge.twMerge(
1724
+ "absolute left-0.5 top-0.5 rounded-full bg-white shadow-md border border-gray-200 transition-transform duration-200",
1725
+ sizeThumbClass,
1726
+ currentChecked && thumbShiftClass,
1727
+ currentChecked && thumbActive,
1728
+ disabled && "border-gray-300"
1729
+ )
1730
+ }
1731
+ )
1732
+ }
1733
+ )
1734
+ ] }),
1735
+ (label || description) && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge("flex flex-col leading-tight", labelClassName), children: [
1736
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: label }),
1737
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: description })
1738
+ ] })
1739
+ ] });
1740
+ }
1741
+ );
1742
+ Switch.displayName = "Switch";
1743
+ var Switch_default = Switch;
1350
1744
 
1351
1745
  exports.Button = Button_default;
1746
+ exports.Card = Card_default;
1352
1747
  exports.Chip = Chip_default;
1353
1748
  exports.Dialog = Dialog_default;
1354
1749
  exports.ExpansionPanel = ExpansionPanel_default;
@@ -1357,6 +1752,8 @@ exports.Input = Input_default;
1357
1752
  exports.List = List_default;
1358
1753
  exports.ListItem = Item_default;
1359
1754
  exports.Menu = Menu_default;
1755
+ exports.Slider = Slider_default;
1756
+ exports.Switch = Switch_default;
1360
1757
  exports.ToolTip = ToolTip_default;
1361
1758
  //# sourceMappingURL=index.cjs.map
1362
1759
  //# sourceMappingURL=index.cjs.map