@zentauri-ui/zentauri-components 1.7.0 → 1.7.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 (136) hide show
  1. package/README.md +11 -5
  2. package/cli/index.mjs +1 -0
  3. package/cli/registry.json +3 -0
  4. package/dist/chunk-6QQUQLPB.js +107 -0
  5. package/dist/chunk-6QQUQLPB.js.map +1 -0
  6. package/dist/chunk-BC6M42HQ.mjs +251 -0
  7. package/dist/chunk-BC6M42HQ.mjs.map +1 -0
  8. package/dist/chunk-K6IZANTI.mjs +80 -0
  9. package/dist/chunk-K6IZANTI.mjs.map +1 -0
  10. package/dist/chunk-MTTXLC2V.mjs +100 -0
  11. package/dist/chunk-MTTXLC2V.mjs.map +1 -0
  12. package/dist/chunk-PHEUJ4EF.js +84 -0
  13. package/dist/chunk-PHEUJ4EF.js.map +1 -0
  14. package/dist/chunk-QSPXPU72.js +259 -0
  15. package/dist/chunk-QSPXPU72.js.map +1 -0
  16. package/dist/design-system/checkbox.d.ts +32 -0
  17. package/dist/design-system/checkbox.d.ts.map +1 -0
  18. package/dist/design-system/index.d.ts +3 -0
  19. package/dist/design-system/index.d.ts.map +1 -1
  20. package/dist/design-system/popover.d.ts +40 -0
  21. package/dist/design-system/popover.d.ts.map +1 -0
  22. package/dist/design-system/radio-group.d.ts +37 -0
  23. package/dist/design-system/radio-group.d.ts.map +1 -0
  24. package/dist/ui/checkbox/animated/animations.d.ts +32 -0
  25. package/dist/ui/checkbox/animated/animations.d.ts.map +1 -0
  26. package/dist/ui/checkbox/animated/checkbox-animated.d.ts +6 -0
  27. package/dist/ui/checkbox/animated/checkbox-animated.d.ts.map +1 -0
  28. package/dist/ui/checkbox/animated/index.d.ts +4 -0
  29. package/dist/ui/checkbox/animated/index.d.ts.map +1 -0
  30. package/dist/ui/checkbox/animated/types.d.ts +8 -0
  31. package/dist/ui/checkbox/animated/types.d.ts.map +1 -0
  32. package/dist/ui/checkbox/animated.js +153 -0
  33. package/dist/ui/checkbox/animated.js.map +1 -0
  34. package/dist/ui/checkbox/animated.mjs +150 -0
  35. package/dist/ui/checkbox/animated.mjs.map +1 -0
  36. package/dist/ui/checkbox/checkbox-base.d.ts +6 -0
  37. package/dist/ui/checkbox/checkbox-base.d.ts.map +1 -0
  38. package/dist/ui/checkbox/checkbox.d.ts +6 -0
  39. package/dist/ui/checkbox/checkbox.d.ts.map +1 -0
  40. package/dist/ui/checkbox/index.d.ts +4 -0
  41. package/dist/ui/checkbox/index.d.ts.map +1 -0
  42. package/dist/ui/checkbox/types.d.ts +19 -0
  43. package/dist/ui/checkbox/types.d.ts.map +1 -0
  44. package/dist/ui/checkbox/variants.d.ts +11 -0
  45. package/dist/ui/checkbox/variants.d.ts.map +1 -0
  46. package/dist/ui/checkbox.js +150 -0
  47. package/dist/ui/checkbox.js.map +1 -0
  48. package/dist/ui/checkbox.mjs +137 -0
  49. package/dist/ui/checkbox.mjs.map +1 -0
  50. package/dist/ui/popover/animated/animations.d.ts +3 -0
  51. package/dist/ui/popover/animated/animations.d.ts.map +1 -0
  52. package/dist/ui/popover/animated/index.d.ts +4 -0
  53. package/dist/ui/popover/animated/index.d.ts.map +1 -0
  54. package/dist/ui/popover/animated/popover-content-animated.d.ts +3 -0
  55. package/dist/ui/popover/animated/popover-content-animated.d.ts.map +1 -0
  56. package/dist/ui/popover/animated/types.d.ts +9 -0
  57. package/dist/ui/popover/animated/types.d.ts.map +1 -0
  58. package/dist/ui/popover/animated.js +67 -0
  59. package/dist/ui/popover/animated.js.map +1 -0
  60. package/dist/ui/popover/animated.mjs +64 -0
  61. package/dist/ui/popover/animated.mjs.map +1 -0
  62. package/dist/ui/popover/index.d.ts +4 -0
  63. package/dist/ui/popover/index.d.ts.map +1 -0
  64. package/dist/ui/popover/popover-base.d.ts +8 -0
  65. package/dist/ui/popover/popover-base.d.ts.map +1 -0
  66. package/dist/ui/popover/popover.d.ts +2 -0
  67. package/dist/ui/popover/popover.d.ts.map +1 -0
  68. package/dist/ui/popover/types.d.ts +34 -0
  69. package/dist/ui/popover/types.d.ts.map +1 -0
  70. package/dist/ui/popover/variants.d.ts +6 -0
  71. package/dist/ui/popover/variants.d.ts.map +1 -0
  72. package/dist/ui/popover.js +34 -0
  73. package/dist/ui/popover.js.map +1 -0
  74. package/dist/ui/popover.mjs +5 -0
  75. package/dist/ui/popover.mjs.map +1 -0
  76. package/dist/ui/radio-group/animated/animations.d.ts +32 -0
  77. package/dist/ui/radio-group/animated/animations.d.ts.map +1 -0
  78. package/dist/ui/radio-group/animated/index.d.ts +4 -0
  79. package/dist/ui/radio-group/animated/index.d.ts.map +1 -0
  80. package/dist/ui/radio-group/animated/radio-group-animated.d.ts +10 -0
  81. package/dist/ui/radio-group/animated/radio-group-animated.d.ts.map +1 -0
  82. package/dist/ui/radio-group/animated/types.d.ts +11 -0
  83. package/dist/ui/radio-group/animated/types.d.ts.map +1 -0
  84. package/dist/ui/radio-group/animated.js +177 -0
  85. package/dist/ui/radio-group/animated.js.map +1 -0
  86. package/dist/ui/radio-group/animated.mjs +173 -0
  87. package/dist/ui/radio-group/animated.mjs.map +1 -0
  88. package/dist/ui/radio-group/index.d.ts +4 -0
  89. package/dist/ui/radio-group/index.d.ts.map +1 -0
  90. package/dist/ui/radio-group/radio-group-context.d.ts +13 -0
  91. package/dist/ui/radio-group/radio-group-context.d.ts.map +1 -0
  92. package/dist/ui/radio-group/radio-group.d.ts +10 -0
  93. package/dist/ui/radio-group/radio-group.d.ts.map +1 -0
  94. package/dist/ui/radio-group/types.d.ts +26 -0
  95. package/dist/ui/radio-group/types.d.ts.map +1 -0
  96. package/dist/ui/radio-group/variants.d.ts +14 -0
  97. package/dist/ui/radio-group/variants.d.ts.map +1 -0
  98. package/dist/ui/radio-group.js +171 -0
  99. package/dist/ui/radio-group.js.map +1 -0
  100. package/dist/ui/radio-group.mjs +153 -0
  101. package/dist/ui/radio-group.mjs.map +1 -0
  102. package/package.json +1 -1
  103. package/src/design-system/checkbox.ts +47 -0
  104. package/src/design-system/index.ts +3 -0
  105. package/src/design-system/popover.ts +66 -0
  106. package/src/design-system/radio-group.ts +54 -0
  107. package/src/ui/checkbox/animated/animations.ts +12 -0
  108. package/src/ui/checkbox/animated/checkbox-animated.tsx +145 -0
  109. package/src/ui/checkbox/animated/index.ts +9 -0
  110. package/src/ui/checkbox/animated/types.ts +9 -0
  111. package/src/ui/checkbox/checkbox-base.tsx +134 -0
  112. package/src/ui/checkbox/checkbox.test.tsx +53 -0
  113. package/src/ui/checkbox/checkbox.tsx +8 -0
  114. package/src/ui/checkbox/index.ts +15 -0
  115. package/src/ui/checkbox/types.ts +40 -0
  116. package/src/ui/checkbox/variants.ts +50 -0
  117. package/src/ui/popover/animated/animations.ts +15 -0
  118. package/src/ui/popover/animated/index.ts +10 -0
  119. package/src/ui/popover/animated/popover-content-animated.tsx +54 -0
  120. package/src/ui/popover/animated/types.ts +18 -0
  121. package/src/ui/popover/index.ts +18 -0
  122. package/src/ui/popover/popover-base.tsx +261 -0
  123. package/src/ui/popover/popover.test.tsx +84 -0
  124. package/src/ui/popover/popover.tsx +8 -0
  125. package/src/ui/popover/types.ts +38 -0
  126. package/src/ui/popover/variants.ts +21 -0
  127. package/src/ui/radio-group/animated/animations.ts +12 -0
  128. package/src/ui/radio-group/animated/index.ts +10 -0
  129. package/src/ui/radio-group/animated/radio-group-animated.tsx +173 -0
  130. package/src/ui/radio-group/animated/types.ts +13 -0
  131. package/src/ui/radio-group/index.ts +19 -0
  132. package/src/ui/radio-group/radio-group-context.ts +23 -0
  133. package/src/ui/radio-group/radio-group.test.tsx +61 -0
  134. package/src/ui/radio-group/radio-group.tsx +159 -0
  135. package/src/ui/radio-group/types.ts +62 -0
  136. package/src/ui/radio-group/variants.ts +61 -0
@@ -0,0 +1,171 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunk6QQUQLPB_js = require('../chunk-6QQUQLPB.js');
5
+ var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
6
+ var react = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function RadioGroup(props) {
10
+ const {
11
+ className,
12
+ value,
13
+ defaultValue,
14
+ name,
15
+ disabled,
16
+ required,
17
+ onValueChange,
18
+ orientation,
19
+ appearance,
20
+ size,
21
+ children,
22
+ ref,
23
+ ...rest
24
+ } = props;
25
+ const generatedName = react.useId();
26
+ const isControlled = value !== void 0;
27
+ const [uncontrolled, setUncontrolled] = react.useState(defaultValue);
28
+ const resolvedValue = isControlled ? value : uncontrolled;
29
+ const setValue = react.useCallback(
30
+ (next) => {
31
+ if (!isControlled) {
32
+ setUncontrolled(next);
33
+ }
34
+ onValueChange?.(next);
35
+ },
36
+ [isControlled, onValueChange]
37
+ );
38
+ return /* @__PURE__ */ jsxRuntime.jsx(
39
+ chunk6QQUQLPB_js.RadioGroupContext.Provider,
40
+ {
41
+ value: {
42
+ value: resolvedValue,
43
+ name: name ?? generatedName,
44
+ disabled,
45
+ required,
46
+ appearance: appearance ?? void 0,
47
+ size: size ?? void 0,
48
+ onValueChange: setValue
49
+ },
50
+ children: /* @__PURE__ */ jsxRuntime.jsx(
51
+ "div",
52
+ {
53
+ ref,
54
+ role: "radiogroup",
55
+ "data-slot": "radio-group",
56
+ "data-orientation": orientation ?? "vertical",
57
+ className: chunkZS5756ZC_js.cn(chunk6QQUQLPB_js.radioGroupRootVariants({ orientation }), className),
58
+ ...rest,
59
+ children
60
+ }
61
+ )
62
+ }
63
+ );
64
+ }
65
+ RadioGroup.displayName = "RadioGroup";
66
+ function RadioGroupItem(props) {
67
+ const {
68
+ className,
69
+ rootClassName,
70
+ controlClassName,
71
+ indicatorClassName,
72
+ value,
73
+ appearance: appearanceProp,
74
+ size: sizeProp,
75
+ disabled: disabledProp,
76
+ required: requiredProp,
77
+ children,
78
+ label,
79
+ id,
80
+ ref,
81
+ "aria-label": ariaLabel,
82
+ ...rest
83
+ } = props;
84
+ const generatedId = react.useId();
85
+ const context = chunk6QQUQLPB_js.useRadioGroupContext();
86
+ const controlId = id ?? generatedId;
87
+ const checked = context?.value === value;
88
+ const disabled = disabledProp ?? context?.disabled;
89
+ const required = requiredProp ?? context?.required;
90
+ const appearance = appearanceProp ?? context?.appearance;
91
+ const size = sizeProp ?? context?.size;
92
+ const labelContent = label ?? children;
93
+ const hasVisibleLabel = labelContent !== void 0 && labelContent !== null && labelContent !== false;
94
+ return /* @__PURE__ */ jsxRuntime.jsxs(
95
+ "label",
96
+ {
97
+ className: chunkZS5756ZC_js.cn(chunk6QQUQLPB_js.radioGroupItemVariants({ size }), rootClassName, className),
98
+ "data-disabled": disabled ? "true" : void 0,
99
+ "data-state": checked ? "checked" : "unchecked",
100
+ htmlFor: controlId,
101
+ children: [
102
+ /* @__PURE__ */ jsxRuntime.jsx(
103
+ "input",
104
+ {
105
+ ref,
106
+ id: controlId,
107
+ type: "radio",
108
+ "data-slot": "radio-group-item",
109
+ className: "peer sr-only",
110
+ name: context?.name,
111
+ value,
112
+ checked,
113
+ disabled,
114
+ required,
115
+ "aria-label": ariaLabel ?? (hasVisibleLabel ? void 0 : value),
116
+ onChange: (event) => {
117
+ if (event.currentTarget.checked) {
118
+ context?.onValueChange(value);
119
+ }
120
+ },
121
+ ...rest
122
+ }
123
+ ),
124
+ /* @__PURE__ */ jsxRuntime.jsx(
125
+ "span",
126
+ {
127
+ "aria-hidden": "true",
128
+ className: chunkZS5756ZC_js.cn(
129
+ chunk6QQUQLPB_js.radioGroupControlVariants({ appearance, size }),
130
+ controlClassName
131
+ ),
132
+ "data-slot": "radio-group-control",
133
+ children: /* @__PURE__ */ jsxRuntime.jsx(
134
+ "span",
135
+ {
136
+ className: chunkZS5756ZC_js.cn(
137
+ chunk6QQUQLPB_js.radioGroupIndicatorVariants({ size }),
138
+ indicatorClassName
139
+ ),
140
+ "data-slot": "radio-group-indicator"
141
+ }
142
+ )
143
+ }
144
+ ),
145
+ hasVisibleLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 leading-6", "data-slot": "radio-group-label", children: labelContent })
146
+ ]
147
+ }
148
+ );
149
+ }
150
+ RadioGroupItem.displayName = "RadioGroupItem";
151
+
152
+ Object.defineProperty(exports, "radioGroupControlVariants", {
153
+ enumerable: true,
154
+ get: function () { return chunk6QQUQLPB_js.radioGroupControlVariants; }
155
+ });
156
+ Object.defineProperty(exports, "radioGroupIndicatorVariants", {
157
+ enumerable: true,
158
+ get: function () { return chunk6QQUQLPB_js.radioGroupIndicatorVariants; }
159
+ });
160
+ Object.defineProperty(exports, "radioGroupItemVariants", {
161
+ enumerable: true,
162
+ get: function () { return chunk6QQUQLPB_js.radioGroupItemVariants; }
163
+ });
164
+ Object.defineProperty(exports, "radioGroupRootVariants", {
165
+ enumerable: true,
166
+ get: function () { return chunk6QQUQLPB_js.radioGroupRootVariants; }
167
+ });
168
+ exports.RadioGroup = RadioGroup;
169
+ exports.RadioGroupItem = RadioGroupItem;
170
+ //# sourceMappingURL=radio-group.js.map
171
+ //# sourceMappingURL=radio-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/radio-group/radio-group.tsx"],"names":["useId","useState","useCallback","jsx","RadioGroupContext","cn","radioGroupRootVariants","useRadioGroupContext","jsxs","radioGroupItemVariants","radioGroupControlVariants","radioGroupIndicatorVariants"],"mappings":"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","file":"radio-group.js","sourcesContent":["\"use client\";\n\nimport { useCallback, useId, useState } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport {\n RadioGroupContext,\n useRadioGroupContext,\n} from \"./radio-group-context\";\nimport type { RadioGroupItemProps, RadioGroupProps } from \"./types\";\nimport {\n radioGroupControlVariants,\n radioGroupIndicatorVariants,\n radioGroupItemVariants,\n radioGroupRootVariants,\n} from \"./variants\";\n\nexport function RadioGroup(props: RadioGroupProps) {\n const {\n className,\n value,\n defaultValue,\n name,\n disabled,\n required,\n onValueChange,\n orientation,\n appearance,\n size,\n children,\n ref,\n ...rest\n } = props;\n const generatedName = useId();\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultValue);\n const resolvedValue = isControlled ? value : uncontrolled;\n\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) {\n setUncontrolled(next);\n }\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n return (\n <RadioGroupContext.Provider\n value={{\n value: resolvedValue,\n name: name ?? generatedName,\n disabled,\n required,\n appearance: appearance ?? undefined,\n size: size ?? undefined,\n onValueChange: setValue,\n }}\n >\n <div\n ref={ref}\n role=\"radiogroup\"\n data-slot=\"radio-group\"\n data-orientation={orientation ?? \"vertical\"}\n className={cn(radioGroupRootVariants({ orientation }), className)}\n {...rest}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport function RadioGroupItem(props: RadioGroupItemProps) {\n const {\n className,\n rootClassName,\n controlClassName,\n indicatorClassName,\n value,\n appearance: appearanceProp,\n size: sizeProp,\n disabled: disabledProp,\n required: requiredProp,\n children,\n label,\n id,\n ref,\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const generatedId = useId();\n const context = useRadioGroupContext();\n const controlId = id ?? generatedId;\n const checked = context?.value === value;\n const disabled = disabledProp ?? context?.disabled;\n const required = requiredProp ?? context?.required;\n const appearance = appearanceProp ?? context?.appearance;\n const size = sizeProp ?? context?.size;\n const labelContent = label ?? children;\n const hasVisibleLabel =\n labelContent !== undefined && labelContent !== null && labelContent !== false;\n\n return (\n <label\n className={cn(radioGroupItemVariants({ size }), rootClassName, className)}\n data-disabled={disabled ? \"true\" : undefined}\n data-state={checked ? \"checked\" : \"unchecked\"}\n htmlFor={controlId}\n >\n <input\n ref={ref}\n id={controlId}\n type=\"radio\"\n data-slot=\"radio-group-item\"\n className=\"peer sr-only\"\n name={context?.name}\n value={value}\n checked={checked}\n disabled={disabled}\n required={required}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : value)}\n onChange={(event) => {\n if (event.currentTarget.checked) {\n context?.onValueChange(value);\n }\n }}\n {...rest}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n radioGroupControlVariants({ appearance, size }),\n controlClassName,\n )}\n data-slot=\"radio-group-control\"\n >\n <span\n className={cn(\n radioGroupIndicatorVariants({ size }),\n indicatorClassName,\n )}\n data-slot=\"radio-group-indicator\"\n />\n </span>\n {hasVisibleLabel && (\n <span className=\"min-w-0 leading-6\" data-slot=\"radio-group-label\">\n {labelContent}\n </span>\n )}\n </label>\n );\n}\n\nRadioGroupItem.displayName = \"RadioGroupItem\";\n"]}
@@ -0,0 +1,153 @@
1
+ "use client";
2
+ import { RadioGroupContext, radioGroupRootVariants, useRadioGroupContext, radioGroupIndicatorVariants, radioGroupControlVariants, radioGroupItemVariants } from '../chunk-MTTXLC2V.mjs';
3
+ export { radioGroupControlVariants, radioGroupIndicatorVariants, radioGroupItemVariants, radioGroupRootVariants } from '../chunk-MTTXLC2V.mjs';
4
+ import { cn } from '../chunk-4D54YOL6.mjs';
5
+ import { useId, useState, useCallback } from 'react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function RadioGroup(props) {
9
+ const {
10
+ className,
11
+ value,
12
+ defaultValue,
13
+ name,
14
+ disabled,
15
+ required,
16
+ onValueChange,
17
+ orientation,
18
+ appearance,
19
+ size,
20
+ children,
21
+ ref,
22
+ ...rest
23
+ } = props;
24
+ const generatedName = useId();
25
+ const isControlled = value !== void 0;
26
+ const [uncontrolled, setUncontrolled] = useState(defaultValue);
27
+ const resolvedValue = isControlled ? value : uncontrolled;
28
+ const setValue = useCallback(
29
+ (next) => {
30
+ if (!isControlled) {
31
+ setUncontrolled(next);
32
+ }
33
+ onValueChange?.(next);
34
+ },
35
+ [isControlled, onValueChange]
36
+ );
37
+ return /* @__PURE__ */ jsx(
38
+ RadioGroupContext.Provider,
39
+ {
40
+ value: {
41
+ value: resolvedValue,
42
+ name: name ?? generatedName,
43
+ disabled,
44
+ required,
45
+ appearance: appearance ?? void 0,
46
+ size: size ?? void 0,
47
+ onValueChange: setValue
48
+ },
49
+ children: /* @__PURE__ */ jsx(
50
+ "div",
51
+ {
52
+ ref,
53
+ role: "radiogroup",
54
+ "data-slot": "radio-group",
55
+ "data-orientation": orientation ?? "vertical",
56
+ className: cn(radioGroupRootVariants({ orientation }), className),
57
+ ...rest,
58
+ children
59
+ }
60
+ )
61
+ }
62
+ );
63
+ }
64
+ RadioGroup.displayName = "RadioGroup";
65
+ function RadioGroupItem(props) {
66
+ const {
67
+ className,
68
+ rootClassName,
69
+ controlClassName,
70
+ indicatorClassName,
71
+ value,
72
+ appearance: appearanceProp,
73
+ size: sizeProp,
74
+ disabled: disabledProp,
75
+ required: requiredProp,
76
+ children,
77
+ label,
78
+ id,
79
+ ref,
80
+ "aria-label": ariaLabel,
81
+ ...rest
82
+ } = props;
83
+ const generatedId = useId();
84
+ const context = useRadioGroupContext();
85
+ const controlId = id ?? generatedId;
86
+ const checked = context?.value === value;
87
+ const disabled = disabledProp ?? context?.disabled;
88
+ const required = requiredProp ?? context?.required;
89
+ const appearance = appearanceProp ?? context?.appearance;
90
+ const size = sizeProp ?? context?.size;
91
+ const labelContent = label ?? children;
92
+ const hasVisibleLabel = labelContent !== void 0 && labelContent !== null && labelContent !== false;
93
+ return /* @__PURE__ */ jsxs(
94
+ "label",
95
+ {
96
+ className: cn(radioGroupItemVariants({ size }), rootClassName, className),
97
+ "data-disabled": disabled ? "true" : void 0,
98
+ "data-state": checked ? "checked" : "unchecked",
99
+ htmlFor: controlId,
100
+ children: [
101
+ /* @__PURE__ */ jsx(
102
+ "input",
103
+ {
104
+ ref,
105
+ id: controlId,
106
+ type: "radio",
107
+ "data-slot": "radio-group-item",
108
+ className: "peer sr-only",
109
+ name: context?.name,
110
+ value,
111
+ checked,
112
+ disabled,
113
+ required,
114
+ "aria-label": ariaLabel ?? (hasVisibleLabel ? void 0 : value),
115
+ onChange: (event) => {
116
+ if (event.currentTarget.checked) {
117
+ context?.onValueChange(value);
118
+ }
119
+ },
120
+ ...rest
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsx(
124
+ "span",
125
+ {
126
+ "aria-hidden": "true",
127
+ className: cn(
128
+ radioGroupControlVariants({ appearance, size }),
129
+ controlClassName
130
+ ),
131
+ "data-slot": "radio-group-control",
132
+ children: /* @__PURE__ */ jsx(
133
+ "span",
134
+ {
135
+ className: cn(
136
+ radioGroupIndicatorVariants({ size }),
137
+ indicatorClassName
138
+ ),
139
+ "data-slot": "radio-group-indicator"
140
+ }
141
+ )
142
+ }
143
+ ),
144
+ hasVisibleLabel && /* @__PURE__ */ jsx("span", { className: "min-w-0 leading-6", "data-slot": "radio-group-label", children: labelContent })
145
+ ]
146
+ }
147
+ );
148
+ }
149
+ RadioGroupItem.displayName = "RadioGroupItem";
150
+
151
+ export { RadioGroup, RadioGroupItem };
152
+ //# sourceMappingURL=radio-group.mjs.map
153
+ //# sourceMappingURL=radio-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/radio-group/radio-group.tsx"],"names":[],"mappings":";;;;;;AAkBO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AACJ,EAAA,MAAM,gBAAgB,KAAA,EAAM;AAC5B,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,YAAY,CAAA;AAC7D,EAAA,MAAM,aAAA,GAAgB,eAAe,KAAA,GAAQ,YAAA;AAE7C,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,MAAA,aAAA,GAAgB,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,cAAc,aAAa;AAAA,GAC9B;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,iBAAA,CAAkB,QAAA;AAAA,IAAlB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,MAAM,IAAA,IAAQ,aAAA;AAAA,QACd,QAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAY,UAAA,IAAc,MAAA;AAAA,QAC1B,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,aAAA,EAAe;AAAA,OACjB;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,YAAA;AAAA,UACL,WAAA,EAAU,aAAA;AAAA,UACV,oBAAkB,WAAA,IAAe,UAAA;AAAA,UACjC,WAAW,EAAA,CAAG,sBAAA,CAAuB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,UAC/D,GAAG,IAAA;AAAA,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAElB,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,EAAY,cAAA;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,YAAA;AAAA,IACV,QAAA,EAAU,YAAA;AAAA,IACV,QAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA,EAAc,SAAA;AAAA,IACd,GAAG;AAAA,GACL,GAAI,KAAA;AACJ,EAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,EAAA,MAAM,UAAU,oBAAA,EAAqB;AACrC,EAAA,MAAM,YAAY,EAAA,IAAM,WAAA;AACxB,EAAA,MAAM,OAAA,GAAU,SAAS,KAAA,KAAU,KAAA;AACnC,EAAA,MAAM,QAAA,GAAW,gBAAgB,OAAA,EAAS,QAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,gBAAgB,OAAA,EAAS,QAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,kBAAkB,OAAA,EAAS,UAAA;AAC9C,EAAA,MAAM,IAAA,GAAO,YAAY,OAAA,EAAS,IAAA;AAClC,EAAA,MAAM,eAAe,KAAA,IAAS,QAAA;AAC9B,EAAA,MAAM,eAAA,GACJ,YAAA,KAAiB,MAAA,IAAa,YAAA,KAAiB,QAAQ,YAAA,KAAiB,KAAA;AAE1E,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,sBAAA,CAAuB,EAAE,MAAM,CAAA,EAAG,eAAe,SAAS,CAAA;AAAA,MACxE,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MACnC,YAAA,EAAY,UAAU,SAAA,GAAY,WAAA;AAAA,MAClC,OAAA,EAAS,SAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,EAAA,EAAI,SAAA;AAAA,YACJ,IAAA,EAAK,OAAA;AAAA,YACL,WAAA,EAAU,kBAAA;AAAA,YACV,SAAA,EAAU,cAAA;AAAA,YACV,MAAM,OAAA,EAAS,IAAA;AAAA,YACf,KAAA;AAAA,YACA,OAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,YAAA,EAAY,SAAA,KAAc,eAAA,GAAkB,MAAA,GAAY,KAAA,CAAA;AAAA,YACxD,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,cAAA,IAAI,KAAA,CAAM,cAAc,OAAA,EAAS;AAC/B,gBAAA,OAAA,EAAS,cAAc,KAAK,CAAA;AAAA,cAC9B;AAAA,YACF,CAAA;AAAA,YACC,GAAG;AAAA;AAAA,SACN;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,EAAA;AAAA,cACT,yBAAA,CAA0B,EAAE,UAAA,EAAY,IAAA,EAAM,CAAA;AAAA,cAC9C;AAAA,aACF;AAAA,YACA,WAAA,EAAU,qBAAA;AAAA,YAEV,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,2BAAA,CAA4B,EAAE,IAAA,EAAM,CAAA;AAAA,kBACpC;AAAA,iBACF;AAAA,gBACA,WAAA,EAAU;AAAA;AAAA;AACZ;AAAA,SACF;AAAA,QACC,mCACC,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAoB,WAAA,EAAU,qBAC3C,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"radio-group.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useId, useState } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport {\n RadioGroupContext,\n useRadioGroupContext,\n} from \"./radio-group-context\";\nimport type { RadioGroupItemProps, RadioGroupProps } from \"./types\";\nimport {\n radioGroupControlVariants,\n radioGroupIndicatorVariants,\n radioGroupItemVariants,\n radioGroupRootVariants,\n} from \"./variants\";\n\nexport function RadioGroup(props: RadioGroupProps) {\n const {\n className,\n value,\n defaultValue,\n name,\n disabled,\n required,\n onValueChange,\n orientation,\n appearance,\n size,\n children,\n ref,\n ...rest\n } = props;\n const generatedName = useId();\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultValue);\n const resolvedValue = isControlled ? value : uncontrolled;\n\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) {\n setUncontrolled(next);\n }\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n return (\n <RadioGroupContext.Provider\n value={{\n value: resolvedValue,\n name: name ?? generatedName,\n disabled,\n required,\n appearance: appearance ?? undefined,\n size: size ?? undefined,\n onValueChange: setValue,\n }}\n >\n <div\n ref={ref}\n role=\"radiogroup\"\n data-slot=\"radio-group\"\n data-orientation={orientation ?? \"vertical\"}\n className={cn(radioGroupRootVariants({ orientation }), className)}\n {...rest}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport function RadioGroupItem(props: RadioGroupItemProps) {\n const {\n className,\n rootClassName,\n controlClassName,\n indicatorClassName,\n value,\n appearance: appearanceProp,\n size: sizeProp,\n disabled: disabledProp,\n required: requiredProp,\n children,\n label,\n id,\n ref,\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const generatedId = useId();\n const context = useRadioGroupContext();\n const controlId = id ?? generatedId;\n const checked = context?.value === value;\n const disabled = disabledProp ?? context?.disabled;\n const required = requiredProp ?? context?.required;\n const appearance = appearanceProp ?? context?.appearance;\n const size = sizeProp ?? context?.size;\n const labelContent = label ?? children;\n const hasVisibleLabel =\n labelContent !== undefined && labelContent !== null && labelContent !== false;\n\n return (\n <label\n className={cn(radioGroupItemVariants({ size }), rootClassName, className)}\n data-disabled={disabled ? \"true\" : undefined}\n data-state={checked ? \"checked\" : \"unchecked\"}\n htmlFor={controlId}\n >\n <input\n ref={ref}\n id={controlId}\n type=\"radio\"\n data-slot=\"radio-group-item\"\n className=\"peer sr-only\"\n name={context?.name}\n value={value}\n checked={checked}\n disabled={disabled}\n required={required}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : value)}\n onChange={(event) => {\n if (event.currentTarget.checked) {\n context?.onValueChange(value);\n }\n }}\n {...rest}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n radioGroupControlVariants({ appearance, size }),\n controlClassName,\n )}\n data-slot=\"radio-group-control\"\n >\n <span\n className={cn(\n radioGroupIndicatorVariants({ size }),\n indicatorClassName,\n )}\n data-slot=\"radio-group-indicator\"\n />\n </span>\n {hasVisibleLabel && (\n <span className=\"min-w-0 leading-6\" data-slot=\"radio-group-label\">\n {labelContent}\n </span>\n )}\n </label>\n );\n}\n\nRadioGroupItem.displayName = \"RadioGroupItem\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentauri-ui/zentauri-components",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "React + Tailwind UI kit with charts, ESM/CJS builds, per-entry exports, and a zentauri-components / zentauri-ui CLI to vendor UI or hook source into your app",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -0,0 +1,47 @@
1
+ export const zuiCheckboxRootBase =
2
+ "group inline-flex w-fit items-start gap-2.5 text-sm font-medium text-[color:var(--zui-checkbox-label-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-checkbox-label-fg-dark,oklch(98.4%_0.003_247.858))] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50";
3
+
4
+ export const zuiCheckboxControlBase =
5
+ "grid shrink-0 place-items-center rounded-md border-2 border-[color:var(--zui-checkbox-border,#0000004d)] bg-[var(--zui-checkbox-bg,transparent)] text-[color:var(--zui-checkbox-fg,oklch(44.6%_0.043_257.281))] transition-[background-color,border-color,color,box-shadow] peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-[var(--zui-checkbox-ring-focus,oklch(44.6%_0.043_257.281_/_0.7))] peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-[var(--zui-checkbox-ring-offset-focus,oklch(98.4%_0.003_247.858))] dark:border-[color:var(--zui-checkbox-border-dark,#ffffff4d)] dark:text-[color:var(--zui-checkbox-fg-dark,oklch(92.9%_0.013_255.508))] dark:peer-focus-visible:ring-[var(--zui-checkbox-ring-focus-dark,oklch(86.9%_0.022_252.894_/_0.7))] dark:peer-focus-visible:ring-offset-[var(--zui-checkbox-ring-offset-focus-dark,oklch(12.9%_0.042_264.695))] group-data-[disabled=true]:cursor-not-allowed";
6
+
7
+ export const zuiCheckboxIndicatorBase =
8
+ "pointer-events-none opacity-0 transition-opacity duration-150 stroke-white group-data-[state=checked]:opacity-100 group-data-[state=indeterminate]:opacity-100";
9
+
10
+ export const zuiCheckboxSizes = {
11
+ sm: {
12
+ root: "text-xs",
13
+ control: "mt-0.5 size-4 rounded-[0.35rem]",
14
+ indicator: "size-3",
15
+ },
16
+ md: {
17
+ root: "text-sm",
18
+ control: "mt-0.5 size-5",
19
+ indicator: "size-3.5",
20
+ },
21
+ lg: {
22
+ root: "text-base",
23
+ control: "mt-0.5 size-6",
24
+ indicator: "size-4",
25
+ },
26
+ } as const;
27
+
28
+ export const zuiCheckboxAppearances = {
29
+ default:
30
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-default-border-checked,oklch(44.6%_0.043_257.281))] group-data-[state=checked]:bg-[var(--zui-checkbox-default-bg-checked,oklch(44.6%_0.043_257.281))] group-data-[state=checked]:text-[color:var(--zui-checkbox-default-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-default-border-checked,oklch(44.6%_0.043_257.281))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-default-bg-checked,oklch(44.6%_0.043_257.281))] group-data-[state=indeterminate]:text-[color:var(--zui-checkbox-default-fg-checked,#ffffff)]",
31
+ success:
32
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-success-border-checked,oklch(59.6%_0.145_163.225))] group-data-[state=checked]:bg-[var(--zui-checkbox-success-bg-checked,oklch(59.6%_0.145_163.225))] group-data-[state=checked]:text-[color:var(--zui-checkbox-success-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-success-border-checked,oklch(59.6%_0.145_163.225))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-success-bg-checked,oklch(59.6%_0.145_163.225))]",
33
+ warning:
34
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-warning-border-checked,oklch(68.1%_0.162_75.834))] group-data-[state=checked]:bg-[var(--zui-checkbox-warning-bg-checked,oklch(68.1%_0.162_75.834))] group-data-[state=checked]:text-[color:var(--zui-checkbox-warning-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-warning-border-checked,oklch(68.1%_0.162_75.834))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-warning-bg-checked,oklch(68.1%_0.162_75.834))]",
35
+ error:
36
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-error-border-checked,oklch(58.6%_0.253_17.585))] group-data-[state=checked]:bg-[var(--zui-checkbox-error-bg-checked,oklch(58.6%_0.253_17.585))] group-data-[state=checked]:text-[color:var(--zui-checkbox-error-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-error-border-checked,oklch(58.6%_0.253_17.585))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-error-bg-checked,oklch(58.6%_0.253_17.585))]",
37
+ info:
38
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-info-border-checked,oklch(54.6%_0.245_262.881))] group-data-[state=checked]:bg-[var(--zui-checkbox-info-bg-checked,oklch(54.6%_0.245_262.881))] group-data-[state=checked]:text-[color:var(--zui-checkbox-info-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-info-border-checked,oklch(54.6%_0.245_262.881))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-info-bg-checked,oklch(54.6%_0.245_262.881))]",
39
+ violet:
40
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-violet-border-checked,oklch(54.1%_0.281_293.009))] group-data-[state=checked]:bg-[var(--zui-checkbox-violet-bg-checked,oklch(54.1%_0.281_293.009))] group-data-[state=checked]:text-[color:var(--zui-checkbox-violet-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-violet-border-checked,oklch(54.1%_0.281_293.009))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-violet-bg-checked,oklch(54.1%_0.281_293.009))]",
41
+ amber:
42
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-amber-border-checked,oklch(66.6%_0.179_58.318))] group-data-[state=checked]:bg-[var(--zui-checkbox-amber-bg-checked,oklch(66.6%_0.179_58.318))] group-data-[state=checked]:text-[color:var(--zui-checkbox-amber-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-amber-border-checked,oklch(66.6%_0.179_58.318))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-amber-bg-checked,oklch(66.6%_0.179_58.318))]",
43
+ pink:
44
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-pink-border-checked,oklch(59.2%_0.249_0.584))] group-data-[state=checked]:bg-[var(--zui-checkbox-pink-bg-checked,oklch(59.2%_0.249_0.584))] group-data-[state=checked]:text-[color:var(--zui-checkbox-pink-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-pink-border-checked,oklch(59.2%_0.249_0.584))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-pink-bg-checked,oklch(59.2%_0.249_0.584))]",
45
+ indigo:
46
+ "group-data-[state=checked]:border-[color:var(--zui-checkbox-indigo-border-checked,oklch(51.1%_0.262_276.966))] group-data-[state=checked]:bg-[var(--zui-checkbox-indigo-bg-checked,oklch(51.1%_0.262_276.966))] group-data-[state=checked]:text-[color:var(--zui-checkbox-indigo-fg-checked,#ffffff)] group-data-[state=indeterminate]:border-[color:var(--zui-checkbox-indigo-border-checked,oklch(51.1%_0.262_276.966))] group-data-[state=indeterminate]:bg-[var(--zui-checkbox-indigo-bg-checked,oklch(51.1%_0.262_276.966))]",
47
+ } as const;
@@ -5,6 +5,7 @@ export * from "./badge";
5
5
  export * from "./breadcrumb";
6
6
  export * from "./button";
7
7
  export * from "./card";
8
+ export * from "./checkbox";
8
9
  export * from "./divider";
9
10
  export * from "./drawer";
10
11
  export * from "./dropdown";
@@ -14,7 +15,9 @@ export * from "./file-upload";
14
15
  export * from "./inputs";
15
16
  export * from "./modal";
16
17
  export * from "./pagination";
18
+ export * from "./popover";
17
19
  export * from "./progress";
20
+ export * from "./radio-group";
18
21
  export * from "./select";
19
22
  export * from "./skeleton";
20
23
  export * from "./slider";
@@ -0,0 +1,66 @@
1
+ export const zuiPopoverContentBase =
2
+ "absolute z-50 rounded-lg border shadow-lg transition-all duration-200 outline-none";
3
+
4
+ export const zuiPopoverContentVariants = {
5
+ default:
6
+ "border-[color:var(--zui-popover-default-border,oklch(20.8%_0.042_265.755_/_0.1))] dark:border-[color:var(--zui-popover-default-border-dark,#ffffff1a)] bg-[var(--zui-popover-default-bg,#ffffff)] dark:bg-[var(--zui-popover-default-bg-dark,oklch(20.8%_0.042_265.755))] text-[color:var(--zui-popover-default-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-popover-default-fg-dark,oklch(96.8%_0.007_247.896))]",
7
+ outline:
8
+ "border-[color:var(--zui-popover-outline-border,oklch(37.3%_0.034_259.733))] dark:border-[color:var(--zui-popover-outline-border-dark,oklch(87.2%_0.01_258.338))] bg-[var(--zui-popover-outline-bg,#ffffff)] dark:bg-[var(--zui-popover-outline-bg-dark,#000000)] text-[color:var(--zui-popover-outline-fg,oklch(21%_0.034_264.665))] dark:text-[color:var(--zui-popover-outline-fg-dark,#ffffff)]",
9
+ ghost:
10
+ "border-transparent bg-[var(--zui-popover-ghost-bg,oklch(96.7%_0.003_264.542))] dark:bg-[var(--zui-popover-ghost-bg-dark,oklch(27.8%_0.033_256.848))] text-[color:var(--zui-popover-ghost-fg,oklch(21%_0.034_264.665))] dark:text-[color:var(--zui-popover-ghost-fg-dark,#ffffffe6)]",
11
+ glass:
12
+ "border-[color:var(--zui-popover-glass-border,#00000026)] dark:border-[color:var(--zui-popover-glass-border-dark,#ffffff26)] bg-[var(--zui-popover-glass-bg,#ffffffb3)] dark:bg-[var(--zui-popover-glass-bg-dark,#020617b3)] text-[color:var(--zui-popover-glass-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-popover-glass-fg-dark,#ffffff)] backdrop-blur-md",
13
+ emerald:
14
+ "border-[color:var(--zui-popover-emerald-border,oklch(43.2%_0.095_166.913_/_0.35))] bg-[var(--zui-popover-emerald-bg,oklch(90.5%_0.093_164.15))] text-[color:var(--zui-popover-emerald-fg,oklch(37.8%_0.077_168.94))] dark:bg-[var(--zui-popover-emerald-bg-dark,oklch(26.2%_0.051_172.552))] dark:text-[color:var(--zui-popover-emerald-fg-dark,oklch(90.5%_0.093_164.15))]",
15
+ indigo:
16
+ "border-[color:var(--zui-popover-indigo-border,oklch(39.8%_0.195_277.366_/_0.35))] bg-[var(--zui-popover-indigo-bg,oklch(87%_0.065_274.039))] text-[color:var(--zui-popover-indigo-fg,oklch(35.9%_0.144_278.697))] dark:bg-[var(--zui-popover-indigo-bg-dark,oklch(25.7%_0.09_281.288))] dark:text-[color:var(--zui-popover-indigo-fg-dark,oklch(87%_0.065_274.039))]",
17
+ purple:
18
+ "border-[color:var(--zui-popover-purple-border,oklch(43.8%_0.218_303.724_/_0.35))] bg-[var(--zui-popover-purple-bg,oklch(90.2%_0.063_306.703))] text-[color:var(--zui-popover-purple-fg,oklch(38.1%_0.176_304.987))] dark:bg-[var(--zui-popover-purple-bg-dark,oklch(29.1%_0.149_302.717))] dark:text-[color:var(--zui-popover-purple-fg-dark,oklch(90.2%_0.063_306.703))]",
19
+ pink:
20
+ "border-[color:var(--zui-popover-pink-border,oklch(45.9%_0.187_3.815_/_0.35))] bg-[var(--zui-popover-pink-bg,oklch(89.9%_0.061_343.231))] text-[color:var(--zui-popover-pink-fg,oklch(40.8%_0.153_2.432))] dark:bg-[var(--zui-popover-pink-bg-dark,oklch(28.4%_0.109_3.907))] dark:text-[color:var(--zui-popover-pink-fg-dark,oklch(89.9%_0.061_343.231))]",
21
+ rose:
22
+ "border-[color:var(--zui-popover-rose-border,oklch(45.5%_0.188_13.697_/_0.35))] bg-[var(--zui-popover-rose-bg,oklch(89.2%_0.058_10.001))] text-[color:var(--zui-popover-rose-fg,oklch(41%_0.159_10.272))] dark:bg-[var(--zui-popover-rose-bg-dark,oklch(27.1%_0.105_12.094))] dark:text-[color:var(--zui-popover-rose-fg-dark,oklch(89.2%_0.058_10.001))]",
23
+ sky:
24
+ "border-[color:var(--zui-popover-sky-border,oklch(44.3%_0.11_240.79_/_0.35))] bg-[var(--zui-popover-sky-bg,oklch(90.1%_0.058_230.902))] text-[color:var(--zui-popover-sky-fg,oklch(39.1%_0.09_240.876))] dark:bg-[var(--zui-popover-sky-bg-dark,oklch(29.3%_0.066_243.157))] dark:text-[color:var(--zui-popover-sky-fg-dark,oklch(90.1%_0.058_230.902))]",
25
+ teal:
26
+ "border-[color:var(--zui-popover-teal-border,oklch(43.7%_0.078_188.216_/_0.35))] bg-[var(--zui-popover-teal-bg,oklch(91%_0.096_180.426))] text-[color:var(--zui-popover-teal-fg,oklch(38.6%_0.063_188.416))] dark:bg-[var(--zui-popover-teal-bg-dark,oklch(27.7%_0.046_192.524))] dark:text-[color:var(--zui-popover-teal-fg-dark,oklch(91%_0.096_180.426))]",
27
+ yellow:
28
+ "border-[color:var(--zui-popover-yellow-border,oklch(47.6%_0.114_61.907_/_0.35))] bg-[var(--zui-popover-yellow-bg,oklch(94.5%_0.129_101.54))] text-[color:var(--zui-popover-yellow-fg,oklch(42.1%_0.095_57.708))] dark:bg-[var(--zui-popover-yellow-bg-dark,oklch(28.6%_0.066_53.813))] dark:text-[color:var(--zui-popover-yellow-fg-dark,oklch(94.5%_0.129_101.54))]",
29
+ orange:
30
+ "border-[color:var(--zui-popover-orange-border,oklch(47%_0.157_37.304_/_0.35))] bg-[var(--zui-popover-orange-bg,oklch(90.1%_0.076_70.697))] text-[color:var(--zui-popover-orange-fg,oklch(40.8%_0.123_38.172))] dark:bg-[var(--zui-popover-orange-bg-dark,oklch(26.6%_0.079_36.259))] dark:text-[color:var(--zui-popover-orange-fg-dark,oklch(90.1%_0.076_70.697))]",
31
+ green:
32
+ "border-[color:var(--zui-popover-green-border,oklch(44.8%_0.119_151.328_/_0.35))] bg-[var(--zui-popover-green-bg,oklch(92.5%_0.084_155.995))] text-[color:var(--zui-popover-green-fg,oklch(39.3%_0.095_152.535))] dark:bg-[var(--zui-popover-green-bg-dark,oklch(26.6%_0.065_152.934))] dark:text-[color:var(--zui-popover-green-fg-dark,oklch(92.5%_0.084_155.995))]",
33
+ "gradient-blue":
34
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-blue-from,oklch(42.4%_0.199_265.638))] to-[var(--zui-popover-gradient-blue-to,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-popover-gradient-blue-fg,#ffffff)]",
35
+ "gradient-green":
36
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-green-from,oklch(44.8%_0.119_151.328))] to-[var(--zui-popover-gradient-green-to,oklch(45.3%_0.124_130.933))] text-[color:var(--zui-popover-gradient-green-fg,#ffffff)]",
37
+ "gradient-red":
38
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-red-from,oklch(44.4%_0.177_26.899))] to-[var(--zui-popover-gradient-red-to,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-popover-gradient-red-fg,#ffffff)]",
39
+ "gradient-yellow":
40
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-yellow-from,oklch(47.6%_0.114_61.907))] to-[var(--zui-popover-gradient-yellow-to,oklch(47%_0.157_37.304))] text-[color:var(--zui-popover-gradient-yellow-fg,#ffffff)]",
41
+ "gradient-purple":
42
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-purple-from,oklch(43.8%_0.218_303.724))] to-[var(--zui-popover-gradient-purple-to,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-popover-gradient-purple-fg,#ffffff)]",
43
+ "gradient-teal":
44
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-teal-from,oklch(43.7%_0.078_188.216))] to-[var(--zui-popover-gradient-teal-to,oklch(45%_0.085_224.283))] text-[color:var(--zui-popover-gradient-teal-fg,#ffffff)]",
45
+ "gradient-indigo":
46
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-indigo-from,oklch(39.8%_0.195_277.366))] to-[var(--zui-popover-gradient-indigo-to,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-popover-gradient-indigo-fg,#ffffff)]",
47
+ "gradient-pink":
48
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-pink-from,oklch(45.9%_0.187_3.815))] to-[var(--zui-popover-gradient-pink-to,oklch(45.5%_0.188_13.697))] text-[color:var(--zui-popover-gradient-pink-fg,#ffffff)]",
49
+ "gradient-orange":
50
+ "border-transparent bg-linear-to-r from-[var(--zui-popover-gradient-orange-from,oklch(47%_0.157_37.304))] to-[var(--zui-popover-gradient-orange-to,oklch(44.4%_0.177_26.899))] text-[color:var(--zui-popover-gradient-orange-fg,#ffffff)]",
51
+ } as const;
52
+
53
+ export const zuiPopoverContentSizes = {
54
+ sm: "p-3 text-sm",
55
+ md: "p-4 text-sm",
56
+ lg: "p-5 text-base",
57
+ } as const;
58
+
59
+ export const zuiPopoverContentWidths = {
60
+ xs: "min-w-50 md:min-w-xs",
61
+ sm: "min-w-50 md:min-w-sm",
62
+ md: "min-w-50 md:min-w-md",
63
+ lg: "min-w-50 md:min-w-lg",
64
+ xl: "min-w-50 md:min-w-xl",
65
+ "2xl": "min-w-50 md:min-w-2xl",
66
+ } as const;
@@ -0,0 +1,54 @@
1
+ export const zuiRadioGroupRootBase = "grid gap-2";
2
+
3
+ export const zuiRadioGroupItemBase =
4
+ "group inline-flex w-fit items-start gap-2.5 text-sm font-medium text-[color:var(--zui-radio-label-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-radio-label-fg-dark,oklch(98.4%_0.003_247.858))] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50";
5
+
6
+ export const zuiRadioGroupControlBase =
7
+ "grid shrink-0 place-items-center rounded-full border-2 border-[color:var(--zui-radio-border,#0000004d)] bg-[var(--zui-radio-bg,transparent)] transition-[background-color,border-color,box-shadow] peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-[var(--zui-radio-ring-focus,oklch(44.6%_0.043_257.281_/_0.7))] peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-[var(--zui-radio-ring-offset-focus,oklch(98.4%_0.003_247.858))] dark:border-[color:var(--zui-radio-border-dark,#ffffff4d)] dark:peer-focus-visible:ring-[var(--zui-radio-ring-focus-dark,oklch(86.9%_0.022_252.894_/_0.7))] dark:peer-focus-visible:ring-offset-[var(--zui-radio-ring-offset-focus-dark,oklch(12.9%_0.042_264.695))] group-data-[disabled=true]:cursor-not-allowed";
8
+
9
+ export const zuiRadioGroupIndicatorBase =
10
+ "pointer-events-none block rounded-full opacity-0 transition-opacity duration-150 group-data-[state=checked]:opacity-100";
11
+
12
+ export const zuiRadioGroupSizes = {
13
+ sm: {
14
+ item: "text-xs",
15
+ control: "mt-0.5 size-4",
16
+ indicator: "size-1.5",
17
+ },
18
+ md: {
19
+ item: "text-sm",
20
+ control: "mt-0.5 size-5",
21
+ indicator: "size-2",
22
+ },
23
+ lg: {
24
+ item: "text-base",
25
+ control: "mt-0.5 size-6",
26
+ indicator: "size-2.5",
27
+ },
28
+ } as const;
29
+
30
+ export const zuiRadioGroupAppearances = {
31
+ default:
32
+ "group-data-[state=checked]:border-[color:var(--zui-radio-default-border-checked,oklch(44.6%_0.043_257.281))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-default-indicator-bg,oklch(44.6%_0.043_257.281))]",
33
+ success:
34
+ "group-data-[state=checked]:border-[color:var(--zui-radio-success-border-checked,oklch(59.6%_0.145_163.225))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-success-indicator-bg,oklch(59.6%_0.145_163.225))]",
35
+ warning:
36
+ "group-data-[state=checked]:border-[color:var(--zui-radio-warning-border-checked,oklch(68.1%_0.162_75.834))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-warning-indicator-bg,oklch(68.1%_0.162_75.834))]",
37
+ error:
38
+ "group-data-[state=checked]:border-[color:var(--zui-radio-error-border-checked,oklch(58.6%_0.253_17.585))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-error-indicator-bg,oklch(58.6%_0.253_17.585))]",
39
+ info:
40
+ "group-data-[state=checked]:border-[color:var(--zui-radio-info-border-checked,oklch(54.6%_0.245_262.881))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-info-indicator-bg,oklch(54.6%_0.245_262.881))]",
41
+ violet:
42
+ "group-data-[state=checked]:border-[color:var(--zui-radio-violet-border-checked,oklch(54.1%_0.281_293.009))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-violet-indicator-bg,oklch(54.1%_0.281_293.009))]",
43
+ amber:
44
+ "group-data-[state=checked]:border-[color:var(--zui-radio-amber-border-checked,oklch(66.6%_0.179_58.318))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-amber-indicator-bg,oklch(66.6%_0.179_58.318))]",
45
+ pink:
46
+ "group-data-[state=checked]:border-[color:var(--zui-radio-pink-border-checked,oklch(59.2%_0.249_0.584))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-pink-indicator-bg,oklch(59.2%_0.249_0.584))]",
47
+ indigo:
48
+ "group-data-[state=checked]:border-[color:var(--zui-radio-indigo-border-checked,oklch(51.1%_0.262_276.966))] [&_[data-slot=radio-group-indicator]]:bg-[var(--zui-radio-indigo-indicator-bg,oklch(51.1%_0.262_276.966))]",
49
+ } as const;
50
+
51
+ export const zuiRadioGroupOrientations = {
52
+ vertical: "grid gap-2",
53
+ horizontal: "flex flex-wrap gap-x-5 gap-y-2",
54
+ } as const;
@@ -0,0 +1,12 @@
1
+ export const checkboxAnimationPresets = {
2
+ draw: {
3
+ initial: { pathLength: 0, opacity: 0 },
4
+ animate: { pathLength: 1, opacity: 1 },
5
+ transition: { duration: 0.2, ease: "easeOut" },
6
+ },
7
+ spring: {
8
+ initial: { scale: 0.7, opacity: 0 },
9
+ animate: { scale: 1, opacity: 1 },
10
+ transition: { type: "spring", stiffness: 520, damping: 30 },
11
+ },
12
+ } as const;