@mks2508/mks-ui 0.2.1 → 0.3.2

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 (155) hide show
  1. package/dist/react-ui/hooks/Animation/UseAutoHeight.js +7 -7
  2. package/dist/react-ui/hooks/DOM/UseIsInView.js +3 -3
  3. package/dist/react-ui/hooks/Formatting/UseListFormat.d.ts +49 -0
  4. package/dist/react-ui/hooks/Formatting/UseListFormat.d.ts.map +1 -0
  5. package/dist/react-ui/hooks/Formatting/UseListFormat.js +105 -0
  6. package/dist/react-ui/hooks/State/UseControlledState.js +4 -4
  7. package/dist/react-ui/hooks/State/UseDataState.js +5 -5
  8. package/dist/react-ui/hooks/index.d.ts +2 -0
  9. package/dist/react-ui/hooks/index.d.ts.map +1 -1
  10. package/dist/react-ui/hooks/index.js +1 -0
  11. package/dist/react-ui/index.js +22 -1
  12. package/dist/react-ui/lib/get-strict-context.js +3 -3
  13. package/dist/react-ui/primitives/CountingNumber/index.js +3 -3
  14. package/dist/react-ui/primitives/Highlight/index.js +26 -26
  15. package/dist/react-ui/primitives/Slot/index.js +3 -3
  16. package/dist/react-ui/primitives/index.d.ts +1 -0
  17. package/dist/react-ui/primitives/index.d.ts.map +1 -1
  18. package/dist/react-ui/primitives/index.js +18 -0
  19. package/dist/react-ui/primitives/waapi/Morph/Morph.types.d.ts +76 -0
  20. package/dist/react-ui/primitives/waapi/Morph/Morph.types.d.ts.map +1 -0
  21. package/dist/react-ui/primitives/waapi/Morph/MorphContext.d.ts +11 -0
  22. package/dist/react-ui/primitives/waapi/Morph/MorphContext.d.ts.map +1 -0
  23. package/dist/react-ui/primitives/waapi/Morph/MorphContext.js +19 -0
  24. package/dist/react-ui/primitives/waapi/Morph/index.d.ts +23 -0
  25. package/dist/react-ui/primitives/waapi/Morph/index.d.ts.map +1 -0
  26. package/dist/react-ui/primitives/waapi/Morph/index.js +45 -0
  27. package/dist/react-ui/primitives/waapi/Morph/techniques/index.d.ts +12 -0
  28. package/dist/react-ui/primitives/waapi/Morph/techniques/index.d.ts.map +1 -0
  29. package/dist/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.d.ts +38 -0
  30. package/dist/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.d.ts.map +1 -0
  31. package/dist/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.js +78 -0
  32. package/dist/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.d.ts +23 -0
  33. package/dist/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.d.ts.map +1 -0
  34. package/dist/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.js +140 -0
  35. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.d.ts +28 -0
  36. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.d.ts.map +1 -0
  37. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.js +77 -0
  38. package/dist/react-ui/primitives/waapi/Morph/useMorph.d.ts +27 -0
  39. package/dist/react-ui/primitives/waapi/Morph/useMorph.d.ts.map +1 -0
  40. package/dist/react-ui/primitives/waapi/Morph/useMorph.js +86 -0
  41. package/dist/react-ui/primitives/waapi/Reorder/Reorder.types.d.ts +168 -0
  42. package/dist/react-ui/primitives/waapi/Reorder/Reorder.types.d.ts.map +1 -0
  43. package/dist/react-ui/primitives/waapi/Reorder/index.d.ts +25 -0
  44. package/dist/react-ui/primitives/waapi/Reorder/index.d.ts.map +1 -0
  45. package/dist/react-ui/primitives/waapi/Reorder/index.js +186 -0
  46. package/dist/react-ui/primitives/waapi/Reorder/useReorder.d.ts +26 -0
  47. package/dist/react-ui/primitives/waapi/Reorder/useReorder.d.ts.map +1 -0
  48. package/dist/react-ui/primitives/waapi/Reorder/useReorder.js +48 -0
  49. package/dist/react-ui/primitives/waapi/Reorder/useReorderPresence.d.ts +33 -0
  50. package/dist/react-ui/primitives/waapi/Reorder/useReorderPresence.d.ts.map +1 -0
  51. package/dist/react-ui/primitives/waapi/Reorder/useReorderPresence.js +137 -0
  52. package/dist/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.d.ts +47 -0
  53. package/dist/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.d.ts.map +1 -0
  54. package/dist/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.js +72 -0
  55. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.d.ts +10 -0
  56. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.d.ts.map +1 -0
  57. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.d.ts +74 -0
  58. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.d.ts.map +1 -0
  59. package/dist/react-ui/primitives/waapi/SlidingNumber/index.d.ts +33 -0
  60. package/dist/react-ui/primitives/waapi/SlidingNumber/index.d.ts.map +1 -0
  61. package/dist/react-ui/primitives/waapi/SlidingNumber/index.js +354 -0
  62. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.styles.d.ts +25 -0
  63. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.styles.d.ts.map +1 -0
  64. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.types.d.ts +57 -0
  65. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.types.d.ts.map +1 -0
  66. package/dist/react-ui/primitives/waapi/SlidingText/index.d.ts +26 -0
  67. package/dist/react-ui/primitives/waapi/SlidingText/index.d.ts.map +1 -0
  68. package/dist/react-ui/primitives/waapi/SlidingText/index.js +105 -0
  69. package/dist/react-ui/primitives/waapi/core/animationConstants.d.ts +156 -0
  70. package/dist/react-ui/primitives/waapi/core/animationConstants.d.ts.map +1 -0
  71. package/dist/react-ui/primitives/waapi/core/animationConstants.js +180 -0
  72. package/dist/react-ui/primitives/waapi/core/index.d.ts +16 -0
  73. package/dist/react-ui/primitives/waapi/core/index.d.ts.map +1 -0
  74. package/dist/react-ui/primitives/waapi/core/index.js +5 -0
  75. package/dist/react-ui/primitives/waapi/core/types.d.ts +143 -0
  76. package/dist/react-ui/primitives/waapi/core/types.d.ts.map +1 -0
  77. package/dist/react-ui/primitives/waapi/core/useAnimationOrchestrator.d.ts +32 -0
  78. package/dist/react-ui/primitives/waapi/core/useAnimationOrchestrator.d.ts.map +1 -0
  79. package/dist/react-ui/primitives/waapi/core/useAnimationOrchestrator.js +322 -0
  80. package/dist/react-ui/primitives/waapi/core/useElementRegistry.d.ts +21 -0
  81. package/dist/react-ui/primitives/waapi/core/useElementRegistry.d.ts.map +1 -0
  82. package/dist/react-ui/primitives/waapi/core/useElementRegistry.js +65 -0
  83. package/dist/react-ui/primitives/waapi/core/useFLIPAnimation.d.ts +20 -0
  84. package/dist/react-ui/primitives/waapi/core/useFLIPAnimation.d.ts.map +1 -0
  85. package/dist/react-ui/primitives/waapi/core/useFLIPAnimation.js +99 -0
  86. package/dist/react-ui/primitives/waapi/core/usePositionCapture.d.ts +24 -0
  87. package/dist/react-ui/primitives/waapi/core/usePositionCapture.d.ts.map +1 -0
  88. package/dist/react-ui/primitives/waapi/core/usePositionCapture.js +75 -0
  89. package/dist/react-ui/primitives/waapi/index.d.ts +33 -0
  90. package/dist/react-ui/primitives/waapi/index.d.ts.map +1 -0
  91. package/dist/react-ui/primitives/waapi/index.js +18 -0
  92. package/dist/react-ui/ui/Accordion/index.js +3 -3
  93. package/dist/react-ui/ui/Button/index.js +8 -8
  94. package/dist/react-ui/ui/Combobox/index.js +2 -2
  95. package/dist/react-ui/ui/DataCard/DataCard.styles.d.ts +35 -0
  96. package/dist/react-ui/ui/DataCard/DataCard.styles.d.ts.map +1 -0
  97. package/dist/react-ui/ui/DataCard/DataCard.styles.js +114 -0
  98. package/dist/react-ui/ui/DataCard/DataCard.types.d.ts +135 -0
  99. package/dist/react-ui/ui/DataCard/DataCard.types.d.ts.map +1 -0
  100. package/dist/react-ui/ui/DataCard/index.d.ts +129 -0
  101. package/dist/react-ui/ui/DataCard/index.d.ts.map +1 -0
  102. package/dist/react-ui/ui/DataCard/index.js +276 -0
  103. package/dist/react-ui/ui/Menu/index.js +2 -2
  104. package/dist/react-ui/ui/Switch/index.js +3 -3
  105. package/dist/react-ui/ui/Tabs/index.js +3 -3
  106. package/dist/react-ui/ui/TextFlow/TextFlow.styles.d.ts +16 -0
  107. package/dist/react-ui/ui/TextFlow/TextFlow.styles.d.ts.map +1 -0
  108. package/dist/react-ui/ui/TextFlow/TextFlow.types.d.ts +101 -0
  109. package/dist/react-ui/ui/TextFlow/TextFlow.types.d.ts.map +1 -0
  110. package/dist/react-ui/ui/TextFlow/index.d.ts +26 -0
  111. package/dist/react-ui/ui/TextFlow/index.d.ts.map +1 -0
  112. package/dist/react-ui/ui/TextFlow/index.js +187 -0
  113. package/dist/react-ui/ui/index.d.ts +2 -0
  114. package/dist/react-ui/ui/index.d.ts.map +1 -1
  115. package/dist/react-ui/ui/index.js +3 -0
  116. package/package.json +6 -2
  117. package/src/react-ui/hooks/Formatting/UseListFormat.ts +134 -0
  118. package/src/react-ui/hooks/index.ts +3 -0
  119. package/src/react-ui/primitives/index.ts +3 -0
  120. package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +106 -0
  121. package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +21 -0
  122. package/src/react-ui/primitives/waapi/Morph/index.tsx +56 -0
  123. package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +12 -0
  124. package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +88 -0
  125. package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +175 -0
  126. package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +86 -0
  127. package/src/react-ui/primitives/waapi/Morph/useMorph.ts +100 -0
  128. package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +177 -0
  129. package/src/react-ui/primitives/waapi/Reorder/index.tsx +260 -0
  130. package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +46 -0
  131. package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +208 -0
  132. package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +104 -0
  133. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +14 -0
  134. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +84 -0
  135. package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +474 -0
  136. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +32 -0
  137. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +69 -0
  138. package/src/react-ui/primitives/waapi/SlidingText/index.tsx +140 -0
  139. package/src/react-ui/primitives/waapi/core/animationConstants.ts +215 -0
  140. package/src/react-ui/primitives/waapi/core/index.ts +53 -0
  141. package/src/react-ui/primitives/waapi/core/types.ts +200 -0
  142. package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +429 -0
  143. package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +80 -0
  144. package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +137 -0
  145. package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +105 -0
  146. package/src/react-ui/primitives/waapi/index.ts +116 -0
  147. package/src/react-ui/styles/animations.css +369 -0
  148. package/src/react-ui/ui/DataCard/DataCard.styles.ts +150 -0
  149. package/src/react-ui/ui/DataCard/DataCard.types.ts +146 -0
  150. package/src/react-ui/ui/DataCard/index.tsx +406 -0
  151. package/src/react-ui/ui/TextFlow/TextFlow.styles.ts +36 -0
  152. package/src/react-ui/ui/TextFlow/TextFlow.types.ts +118 -0
  153. package/src/react-ui/ui/TextFlow/index.tsx +276 -0
  154. package/src/react-ui/ui/index.ts +4 -0
  155. /package/dist/react-ui/components/MorphingPopover/{morphing-popover.module-CgbYV_HS.css → morphing-popover.module-BycNI8nU.css} +0 -0
@@ -0,0 +1,18 @@
1
+ import { ANIMATION_CONFIGS, ANIMATION_DEFAULTS, EASINGS, EFFECTS, PRESETS, RESPONSIVE_CONFIGS, TIMING, TRANSFORMS, getResponsiveDuration, getResponsiveStagger } from "./core/animationConstants.js";
2
+ import { useElementRegistry } from "./core/useElementRegistry.js";
3
+ import { usePositionCapture } from "./core/usePositionCapture.js";
4
+ import { useFLIPAnimation } from "./core/useFLIPAnimation.js";
5
+ import { useAnimationOrchestrator } from "./core/useAnimationOrchestrator.js";
6
+ import "./core/index.js";
7
+ import { SlidingNumber } from "./SlidingNumber/index.js";
8
+ import { SlidingText } from "./SlidingText/index.js";
9
+ import { useReorder } from "./Reorder/useReorder.js";
10
+ import { ReorderRoot } from "./Reorder/index.js";
11
+ import { useReorderPresence } from "./Reorder/useReorderPresence.js";
12
+ import { calculateSeparatorCoordination, shouldShowSeparator } from "./Reorder/utils/separatorCoordination.js";
13
+ import { useMorphContext } from "./Morph/MorphContext.js";
14
+ import { useFLIPClipPath } from "./Morph/techniques/useFLIPClipPath.js";
15
+ import { useCSSGridMorph } from "./Morph/techniques/useCSSGridMorph.js";
16
+ import { useViewTransitions } from "./Morph/techniques/useViewTransitions.js";
17
+ import { useMorph } from "./Morph/useMorph.js";
18
+ import { Morph } from "./Morph/index.js";
@@ -4,7 +4,7 @@ import { cn } from "../../lib/utils.js";
4
4
  import { getStrictContext } from "../../lib/get-strict-context.js";
5
5
  import { useControlledState } from "../../hooks/State/UseControlledState.js";
6
6
  import { AccordionStyles, accordionVariants } from "./Accordion.styles.js";
7
- import * as React from "react";
7
+ import * as React$1 from "react";
8
8
  import { AnimatePresence, motion } from "motion/react";
9
9
  import { jsx } from "react/jsx-runtime";
10
10
  import { Accordion } from "@base-ui/react/accordion";
@@ -110,8 +110,8 @@ function Accordion$1({ variant, className, slots, config: _config, ...props }) {
110
110
  */
111
111
  function AccordionItem({ slots, className, ...props }) {
112
112
  const { value } = useAccordion();
113
- const [isOpen, setIsOpen] = React.useState(value?.includes(props?.value) ?? false);
114
- React.useEffect(() => {
113
+ const [isOpen, setIsOpen] = React$1.useState(value?.includes(props?.value) ?? false);
114
+ React$1.useEffect(() => {
115
115
  setIsOpen(value?.includes(props?.value) ?? false);
116
116
  }, [value, props?.value]);
117
117
  return /* @__PURE__ */ jsx(AccordionItemProvider, {
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { cn } from "../../lib/utils.js";
4
4
  import { buttonStateStyles, buttonVariants } from "./Button.styles.js";
5
- import * as React from "react";
5
+ import * as React$1 from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { Button } from "@base-ui/react/button";
8
8
 
@@ -12,8 +12,8 @@ import { Button } from "@base-ui/react/button";
12
12
  * Composes the button with another element passing all props and handlers.
13
13
  */
14
14
  function Slot({ children, ...props }) {
15
- const child = React.Children.only(children);
16
- return React.cloneElement(child, {
15
+ const child = React$1.Children.only(children);
16
+ return React$1.cloneElement(child, {
17
17
  ...props,
18
18
  ...child.props,
19
19
  className: cn(props.className, child.props.className),
@@ -39,16 +39,16 @@ function Slot({ children, ...props }) {
39
39
  * ```
40
40
  */
41
41
  function Button$1({ className, variant, size, focusableWhenDisabled, nativeButton, asChild = false, render, style, children, disabled, slots, onPointerDown, onPointerUp, onPointerLeave, ...props }) {
42
- const [pressed, setPressed] = React.useState(false);
43
- const handlePointerDown = React.useCallback((e) => {
42
+ const [pressed, setPressed] = React$1.useState(false);
43
+ const handlePointerDown = React$1.useCallback((e) => {
44
44
  setPressed(true);
45
45
  onPointerDown?.(e);
46
46
  }, [onPointerDown]);
47
- const handlePointerUp = React.useCallback((e) => {
47
+ const handlePointerUp = React$1.useCallback((e) => {
48
48
  setPressed(false);
49
49
  onPointerUp?.(e);
50
50
  }, [onPointerUp]);
51
- const handlePointerLeave = React.useCallback((e) => {
51
+ const handlePointerLeave = React$1.useCallback((e) => {
52
52
  setPressed(false);
53
53
  onPointerLeave?.(e);
54
54
  }, [onPointerLeave]);
@@ -61,7 +61,7 @@ function Button$1({ className, variant, size, focusableWhenDisabled, nativeButto
61
61
  size
62
62
  }), slots?.root, typeof className === "function" ? className(state) : className, pressed && buttonStateStyles.pressed);
63
63
  const baseStyle = typeof style === "function" ? style(state) : style;
64
- if (asChild && React.isValidElement(children)) return /* @__PURE__ */ jsx(Button, {
64
+ if (asChild && React$1.isValidElement(children)) return /* @__PURE__ */ jsx(Button, {
65
65
  "data-slot": "button",
66
66
  "data-variant": variant,
67
67
  "data-size": size,
@@ -2,7 +2,7 @@ import { cn } from "../../lib/utils.js";
2
2
  import { Button } from "../Button/index.js";
3
3
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../InputGroup/index.js";
4
4
  import { comboboxStyles } from "./Combobox.styles.js";
5
- import * as React from "react";
5
+ import * as React$1 from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Combobox } from "@base-ui/react";
8
8
  import { HugeiconsIcon } from "@hugeicons/react";
@@ -209,7 +209,7 @@ function ComboboxChipsInput({ className, ...props }) {
209
209
  * @returns A ref to be used as the anchor for ComboboxContent
210
210
  */
211
211
  function useComboboxAnchor() {
212
- return React.useRef(null);
212
+ return React$1.useRef(null);
213
213
  }
214
214
 
215
215
  //#endregion
@@ -0,0 +1,35 @@
1
+ import type { StyleSlots } from '../../../core/types';
2
+ /**
3
+ * Visual regions for: DataCard component family.
4
+ * Each slot maps to: customizable visual region.
5
+ */
6
+ export type DataCardSlot = 'root' | 'bracket' | 'header' | 'value' | 'label' | 'toggle' | 'actions' | 'footer';
7
+ /**
8
+ * Base style slots for: DataCard.
9
+ * Uses glassmorphism pattern from: Synthwave Dark design system.
10
+ */
11
+ export declare const dataCardStyles: StyleSlots<DataCardSlot>;
12
+ /**
13
+ * CVA variants for: DataCard root.
14
+ * Combines glassmorphism with Synthwave Dark color scheme.
15
+ */
16
+ export declare const dataCardVariants: (props?: ({
17
+ size?: "default" | "compact" | "spacious" | null | undefined;
18
+ variant?: "default" | "destructive" | "success" | "warning" | "accent" | null | undefined;
19
+ glass?: boolean | null | undefined;
20
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
+ /**
22
+ * CVA variants for bracket visibility animation.
23
+ */
24
+ export declare const bracketVariants: (props?: ({
25
+ animate?: boolean | null | undefined;
26
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
+ /**
28
+ * State-specific styles for DataCard interactions.
29
+ */
30
+ export declare const dataCardStateStyles: {
31
+ hovered: string;
32
+ pressed: string;
33
+ disabled: string;
34
+ };
35
+ //# sourceMappingURL=DataCard.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataCard.styles.d.ts","sourceRoot":"","sources":["../../../../src/react-ui/ui/DataCard/DataCard.styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AAEb;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,YAAY,CAgBnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;8EAiF3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;8EAU1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;CAI/B,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ //#region src/react-ui/ui/DataCard/DataCard.styles.ts
4
+ /**
5
+ * Base style slots for: DataCard.
6
+ * Uses glassmorphism pattern from: Synthwave Dark design system.
7
+ */
8
+ const dataCardStyles = {
9
+ root: "group/data-card relative isolate rounded-xl transition-all duration-300",
10
+ bracket: "absolute pointer-events-none transition-opacity duration-300",
11
+ header: "flex flex-col gap-1.5 px-5 pt-5 pb-2",
12
+ value: "flex items-baseline gap-1 tabular-nums tracking-tight",
13
+ label: "text-sm font-medium",
14
+ toggle: "flex items-center justify-between gap-3",
15
+ actions: "flex items-center gap-2",
16
+ footer: "mt-auto px-5 pb-4 pt-2"
17
+ };
18
+ /**
19
+ * CVA variants for: DataCard root.
20
+ * Combines glassmorphism with Synthwave Dark color scheme.
21
+ */
22
+ const dataCardVariants = cva(dataCardStyles.root, {
23
+ variants: {
24
+ size: {
25
+ compact: {
26
+ root: "p-3",
27
+ header: "gap-1 px-3 pt-3 pb-1.5",
28
+ footer: "px-3 pb-1.5 pt-1"
29
+ },
30
+ default: {
31
+ root: "p-4",
32
+ header: "gap-1.5 px-4 pt-4 pb-2",
33
+ footer: "px-4 pb-2 pt-2"
34
+ },
35
+ spacious: {
36
+ root: "p-6",
37
+ header: "gap-2 px-6 pt-6 pb-3",
38
+ footer: "px-6 pb-3 pt-2"
39
+ }
40
+ },
41
+ variant: {
42
+ default: [
43
+ "bg-white/5",
44
+ "backdrop-blur-lg",
45
+ "border border-white/10",
46
+ "hover:bg-white/10",
47
+ "shadow-lg shadow-black/20"
48
+ ].join(" "),
49
+ accent: [
50
+ "bg-cyan-500/10",
51
+ "backdrop-blur-lg",
52
+ "border border-cyan-400/30",
53
+ "hover:bg-cyan-500/20",
54
+ "shadow-cyan-500/20 shadow-lg"
55
+ ].join(" "),
56
+ success: [
57
+ "bg-emerald-500/10",
58
+ "backdrop-blur-lg",
59
+ "border border-emerald-400/30",
60
+ "hover:bg-emerald-500/20",
61
+ "shadow-emerald-500/20 shadow-lg"
62
+ ].join(" "),
63
+ warning: [
64
+ "bg-amber-500/10",
65
+ "backdrop-blur-lg",
66
+ "border border-amber-400/30",
67
+ "hover:bg-amber-500/20",
68
+ "shadow-amber-500/20 shadow-lg"
69
+ ].join(" "),
70
+ destructive: [
71
+ "bg-red-500/10",
72
+ "backdrop-blur-lg",
73
+ "border border-red-400/30",
74
+ "hover:bg-red-500/20",
75
+ "shadow-red-500/20 shadow-lg"
76
+ ].join(" ")
77
+ },
78
+ glass: {
79
+ true: [
80
+ "backdrop-blur-lg",
81
+ "bg-white/10",
82
+ "border border-white/20",
83
+ "shadow-xl"
84
+ ].join(" "),
85
+ false: ""
86
+ }
87
+ },
88
+ defaultVariants: {
89
+ variant: "default",
90
+ size: "default",
91
+ glass: true
92
+ }
93
+ });
94
+ /**
95
+ * CVA variants for bracket visibility animation.
96
+ */
97
+ const bracketVariants = cva(dataCardStyles.bracket, {
98
+ variants: { animate: {
99
+ true: "opacity-60 group-hover/data-card:opacity-100 transition-opacity",
100
+ false: "opacity-50"
101
+ } },
102
+ defaultVariants: { animate: true }
103
+ });
104
+ /**
105
+ * State-specific styles for DataCard interactions.
106
+ */
107
+ const dataCardStateStyles = {
108
+ hovered: "scale-[1.02]",
109
+ pressed: "scale-[0.98]",
110
+ disabled: "opacity-50 pointer-events-none"
111
+ };
112
+
113
+ //#endregion
114
+ export { dataCardStateStyles, dataCardStyles, dataCardVariants };
@@ -0,0 +1,135 @@
1
+ import type { VariantProps } from 'class-variance-authority';
2
+ import type { SlotOverrides } from '../../../core/types';
3
+ import type { dataCardVariants, DataCardSlot } from './DataCard.styles';
4
+ export type { DataCardSlot } from './DataCard.styles';
5
+ /**
6
+ * Available visual variants for DataCard.
7
+ * - 'default' - Standard glassmorphism with neutral borders
8
+ * - 'accent' - Cyan accent with primary glow
9
+ * - 'success' - Green accent for positive data
10
+ * - 'warning' - Amber accent for warnings
11
+ * - 'destructive' - Red accent for critical data
12
+ */
13
+ export type DataCardVariant = 'default' | 'accent' | 'success' | 'warning' | 'destructive';
14
+ /**
15
+ * Size variants affecting padding and spacing.
16
+ * - 'compact' - Dense layout for dashboards
17
+ * - 'default' - Standard balanced spacing
18
+ * - 'spacious' - More breathing room
19
+ */
20
+ export type DataCardSize = 'compact' | 'default' | 'spacious';
21
+ /**
22
+ * Interaction state for state-based styling.
23
+ * Similar to Button's IButtonState pattern.
24
+ */
25
+ export interface IDataCardState {
26
+ /** Whether card content is hovered. */
27
+ hovered: boolean;
28
+ /** Whether card is pressed/active. */
29
+ pressed: boolean;
30
+ /** Whether card is disabled. */
31
+ disabled: boolean;
32
+ }
33
+ /**
34
+ * Configuration for DataCard behavior and animation.
35
+ * Extends IBaseConfig with card-specific settings.
36
+ */
37
+ export interface IDataCardConfig {
38
+ /** Enable/disable corner bracket animations. */
39
+ animateBrackets?: boolean;
40
+ /** Spring stiffness for number counter. */
41
+ counterStiffness?: number;
42
+ /** Spring damping for number counter. */
43
+ counterDamping?: number;
44
+ }
45
+ /**
46
+ * Props for DataCard root component.
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * <DataCard variant="accent" size="default">
51
+ * <DataCardValue number={1234} />
52
+ * <DataCardToggle />
53
+ * </DataCard>
54
+ * ```
55
+ */
56
+ export interface IDataCardProps extends VariantProps<typeof dataCardVariants> {
57
+ /** Visual style variant. */
58
+ variant?: DataCardVariant;
59
+ /** Size variant affecting spacing. */
60
+ size?: DataCardSize;
61
+ /** Whether card is disabled. */
62
+ disabled?: boolean;
63
+ /** Override classes for card visual regions. */
64
+ slots?: SlotOverrides<DataCardSlot>;
65
+ /** Behavioral and animation configuration. */
66
+ config?: IDataCardConfig;
67
+ /** CSS class or function returning class based on card state. */
68
+ className?: string | ((state: IDataCardState) => string | undefined);
69
+ /** CSS styles or function returning styles based on card state. */
70
+ style?: React.CSSProperties | ((state: IDataCardState) => React.CSSProperties | undefined);
71
+ /** Enable glassmorphism effect (default: true). */
72
+ glass?: boolean;
73
+ /** Show corner brackets (default: true). */
74
+ showBrackets?: boolean;
75
+ /** Child elements. */
76
+ children?: React.ReactNode;
77
+ }
78
+ /**
79
+ * Props for DataCardValue - displays animated number.
80
+ */
81
+ export interface IDataCardValueProps {
82
+ /** Target number to animate to. */
83
+ number: number;
84
+ /** Label displayed above: number. */
85
+ label?: string;
86
+ /** Unit/suffix displayed after: number. */
87
+ unit?: string;
88
+ /** Decimal places for precision. */
89
+ decimalPlaces?: number;
90
+ /** Pad number with leading zeros. */
91
+ padStart?: boolean;
92
+ }
93
+ /**
94
+ * Props for DataCardLabel - title/description text.
95
+ */
96
+ export interface IDataCardLabelProps extends React.ComponentProps<'div'> {
97
+ /** Primary title text. */
98
+ title?: string;
99
+ /** Secondary description text. */
100
+ description?: string;
101
+ }
102
+ /**
103
+ * Props for DataCardToggle - interactive switch element.
104
+ */
105
+ export interface IDataCardToggleProps {
106
+ /** Whether toggle is checked. */
107
+ checked?: boolean;
108
+ /** Callback when toggle state changes. */
109
+ onCheckedChange?: (checked: boolean) => void;
110
+ /** Icon to show when checked (on). */
111
+ checkedIcon?: React.ReactNode;
112
+ /** Icon to show when unchecked (off). */
113
+ uncheckedIcon?: React.ReactNode;
114
+ /** Label for: toggle. */
115
+ label?: string;
116
+ /** Override classes for toggle regions. */
117
+ slots?: SlotOverrides<DataCardSlot>;
118
+ }
119
+ /**
120
+ * Props for DataCardActions - action button container.
121
+ */
122
+ export interface IDataCardActionsProps extends React.ComponentProps<'div'> {
123
+ /** Alignment of action buttons. */
124
+ align?: 'start' | 'center' | 'end';
125
+ }
126
+ /**
127
+ * Props for DataCardBracket - decorative corner element.
128
+ */
129
+ export interface IDataCardBracketProps extends React.ComponentProps<'div'> {
130
+ /** Position of: bracket. */
131
+ position: 'tl' | 'tr' | 'bl' | 'br';
132
+ /** Optional variant override for: this bracket. */
133
+ variant?: 'default' | 'accent';
134
+ }
135
+ //# sourceMappingURL=DataCard.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataCard.types.d.ts","sourceRoot":"","sources":["../../../../src/react-ui/ui/DataCard/DataCard.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import * as React from 'react';
2
+ import { dataCardVariants } from './DataCard.styles';
3
+ import type { SlotOverrides } from '../../../core/types';
4
+ import type { IDataCardProps, IDataCardValueProps, IDataCardLabelProps, IDataCardToggleProps, IDataCardActionsProps, IDataCardBracketProps, IDataCardState, DataCardSlot } from './DataCard.types';
5
+ /**
6
+ * Context type for DataCard state management.
7
+ */
8
+ type DataCardContextType = {
9
+ /** Current variant of: card. */
10
+ variant: IDataCardProps['variant'];
11
+ /** Current size of: card. */
12
+ size: IDataCardProps['size'];
13
+ /** Whether card is disabled. */
14
+ disabled: boolean;
15
+ /** Whether glass effect is enabled. */
16
+ glass: boolean;
17
+ /** Slot overrides from parent. */
18
+ slots?: SlotOverrides<DataCardSlot>;
19
+ /** Update interaction state. */
20
+ setState: React.Dispatch<React.SetStateAction<IDataCardState>>;
21
+ };
22
+ declare const useDataCard: () => DataCardContextType;
23
+ /**
24
+ * DataCard — comprehensive showcase component demonstrating mks-ui patterns.
25
+ *
26
+ * Features:
27
+ * - Slot overrides for customization
28
+ * - State-based styling (hover, pressed, disabled)
29
+ * - CVA variants (size, color variant)
30
+ * - asChild composition pattern
31
+ * - Motion/animation integration
32
+ * - Custom render functions
33
+ * - Form field integration
34
+ * - Icon composition
35
+ * - Glassmorphism effects
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <DataCard variant="accent" size="default">
40
+ * <DataCardValue number={1234} />
41
+ * <DataCardToggle />
42
+ * </DataCard>
43
+ * ```
44
+ */
45
+ declare function DataCard({ variant, size, disabled, glass, showBrackets, className, style, slots, config, children, ...props }: IDataCardProps): import("react/jsx-runtime").JSX.Element;
46
+ /**
47
+ * DataCardValue — displays animated number with CountingNumber.
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * <DataCardValue
52
+ * number={1234}
53
+ * label="Active Users"
54
+ * unit="users"
55
+ * />
56
+ * ```
57
+ */
58
+ declare function DataCardValue({ number, label, unit, decimalPlaces, padStart, }: IDataCardValueProps): import("react/jsx-runtime").JSX.Element;
59
+ /**
60
+ * DataCardLabel — displays title and description.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * <DataCardLabel
65
+ * title="Revenue"
66
+ * description="This month"
67
+ * />
68
+ * ```
69
+ */
70
+ declare function DataCardLabel({ title, description, className, ...props }: IDataCardLabelProps): import("react/jsx-runtime").JSX.Element;
71
+ /**
72
+ * DataCardToggle — interactive switch element.
73
+ *
74
+ * Uses asChild pattern for composition with Switch component.
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * <DataCardToggle
79
+ * checked={enabled}
80
+ * onCheckedChange={setEnabled}
81
+ * label="Enable notifications"
82
+ * checkedIcon={<BellIcon />}
83
+ * uncheckedIcon={<BellOffIcon />}
84
+ * />
85
+ * ```
86
+ */
87
+ declare function DataCardToggle({ checked, onCheckedChange, checkedIcon, uncheckedIcon, label, }: IDataCardToggleProps): import("react/jsx-runtime").JSX.Element;
88
+ /**
89
+ * DataCardActions — container for action buttons.
90
+ *
91
+ * @example
92
+ * ```tsx
93
+ * <DataCardActions align="end">
94
+ * <Button size="sm">Edit</Button>
95
+ * <Button size="sm" variant="ghost">Delete</Button>
96
+ * </DataCardActions>
97
+ * ```
98
+ */
99
+ declare function DataCardActions({ align, className, children, ...props }: IDataCardActionsProps): import("react/jsx-runtime").JSX.Element;
100
+ /**
101
+ * DataCardBracket — decorative corner bracket.
102
+ *
103
+ * Wraps CornerBracket with motion animations.
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * <DataCardBracket position="tl" variant="accent" />
108
+ * ```
109
+ */
110
+ declare function DataCardBracket({ position, variant, className, }: IDataCardBracketProps): import("react/jsx-runtime").JSX.Element;
111
+ /**
112
+ * Hook to access DataCard context.
113
+ * Must be used within DataCard provider.
114
+ *
115
+ * @returns The current DataCard context
116
+ *
117
+ * @example
118
+ * ```tsx
119
+ * function MyComponent() {
120
+ * const { variant, size, disabled } = useDataCard();
121
+ * return <div>Current variant: {variant}</div>;
122
+ * }
123
+ * ```
124
+ */
125
+ export { useDataCard };
126
+ export { DataCard, DataCardValue, DataCardLabel, DataCardToggle, DataCardActions, DataCardBracket, dataCardVariants, };
127
+ export type { IDataCardProps, IDataCardValueProps, IDataCardLabelProps, IDataCardToggleProps, IDataCardActionsProps, IDataCardBracketProps, IDataCardState, IDataCardConfig, DataCardVariant, DataCardSize, DataCardSlot, } from './DataCard.types';
128
+ export { dataCardStyles } from './DataCard.styles';
129
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react-ui/ui/DataCard/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAAE,gBAAgB,EAAwD,MAAM,mBAAmB,CAAC;AAC3G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,KAAK,mBAAmB,GAAG;IACzB,gCAAgC;IAChC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,6BAA6B;IAC7B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,KAAK,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACpC,gCAAgC;IAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF,QAAA,MAAyB,WAAW,2BACsB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAS,QAAQ,CAAC,EAChB,OAAmB,EACnB,IAAgB,EAChB,QAAgB,EAChB,KAAY,EACZ,YAAmB,EACnB,SAAS,EACT,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,2CA0EhB;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,aAAa,CAAC,EACrB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,aAAiB,EACjB,QAAgB,GACjB,EAAE,mBAAmB,2CA+BrB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,aAAa,CAAC,EACrB,KAAK,EACL,WAAW,EACX,SAAS,EACT,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAqBrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,cAAc,CAAC,EACtB,OAAO,EACP,eAAe,EACf,WAAW,EACX,aAAa,EACb,KAAK,GACN,EAAE,oBAAoB,2CAqBtB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,eAAe,CAAC,EACvB,KAAa,EACb,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAoBvB;AAED;;;;;;;;;GASG;AACH,iBAAS,eAAe,CAAC,EACvB,QAAQ,EACR,OAAmB,EACnB,SAAS,GACV,EAAE,qBAAqB,2CAkBvB;AAED;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,CAAC;AAGF,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}