@karakuri-ui/react 0.2.2 → 0.2.4

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 (238) hide show
  1. package/README.md +9 -0
  2. package/dist/components/ui/accordion.d.mts +49 -0
  3. package/dist/components/ui/accordion.d.ts +49 -0
  4. package/dist/components/ui/accordion.js +220 -0
  5. package/dist/components/ui/accordion.js.map +1 -0
  6. package/dist/components/ui/accordion.mjs +181 -0
  7. package/dist/components/ui/accordion.mjs.map +1 -0
  8. package/dist/components/ui/alert.d.mts +47 -0
  9. package/dist/components/ui/alert.d.ts +47 -0
  10. package/dist/components/ui/alert.js +223 -0
  11. package/dist/components/ui/alert.js.map +1 -0
  12. package/dist/components/ui/alert.mjs +185 -0
  13. package/dist/components/ui/alert.mjs.map +1 -0
  14. package/dist/components/ui/avatar.d.mts +232 -0
  15. package/dist/components/ui/avatar.d.ts +232 -0
  16. package/dist/components/ui/avatar.js +250 -0
  17. package/dist/components/ui/avatar.js.map +1 -0
  18. package/dist/components/ui/avatar.mjs +209 -0
  19. package/dist/components/ui/avatar.mjs.map +1 -0
  20. package/dist/components/ui/badge.d.mts +31 -0
  21. package/dist/components/ui/badge.d.ts +31 -0
  22. package/dist/components/ui/badge.js +205 -0
  23. package/dist/components/ui/badge.js.map +1 -0
  24. package/dist/components/ui/badge.mjs +170 -0
  25. package/dist/components/ui/badge.mjs.map +1 -0
  26. package/dist/components/ui/breadcrumb.d.mts +57 -0
  27. package/dist/components/ui/breadcrumb.d.ts +57 -0
  28. package/dist/components/ui/breadcrumb.js +209 -0
  29. package/dist/components/ui/breadcrumb.js.map +1 -0
  30. package/dist/components/ui/breadcrumb.mjs +168 -0
  31. package/dist/components/ui/breadcrumb.mjs.map +1 -0
  32. package/dist/components/ui/button-group.d.mts +22 -0
  33. package/dist/components/ui/button-group.d.ts +22 -0
  34. package/dist/components/ui/button-group.js +107 -0
  35. package/dist/components/ui/button-group.js.map +1 -0
  36. package/dist/components/ui/button-group.mjs +72 -0
  37. package/dist/components/ui/button-group.mjs.map +1 -0
  38. package/dist/components/ui/button.d.mts +31 -0
  39. package/dist/components/ui/button.d.ts +31 -0
  40. package/dist/components/ui/button.js +176 -0
  41. package/dist/components/ui/button.js.map +1 -0
  42. package/dist/components/ui/button.mjs +141 -0
  43. package/dist/components/ui/button.mjs.map +1 -0
  44. package/dist/components/ui/card.d.mts +77 -0
  45. package/dist/components/ui/card.d.ts +77 -0
  46. package/dist/components/ui/card.js +370 -0
  47. package/dist/components/ui/card.js.map +1 -0
  48. package/dist/components/ui/card.mjs +328 -0
  49. package/dist/components/ui/card.mjs.map +1 -0
  50. package/dist/{chart.js → components/ui/chart.js} +29 -39
  51. package/dist/components/ui/chart.js.map +1 -0
  52. package/dist/{chart.mjs → components/ui/chart.mjs} +21 -31
  53. package/dist/components/ui/chart.mjs.map +1 -0
  54. package/dist/components/ui/checkbox.d.mts +24 -0
  55. package/dist/components/ui/checkbox.d.ts +24 -0
  56. package/dist/components/ui/checkbox.js +173 -0
  57. package/dist/components/ui/checkbox.js.map +1 -0
  58. package/dist/components/ui/checkbox.mjs +138 -0
  59. package/dist/components/ui/checkbox.mjs.map +1 -0
  60. package/dist/components/ui/divider.d.mts +27 -0
  61. package/dist/components/ui/divider.d.ts +27 -0
  62. package/dist/components/ui/divider.js +147 -0
  63. package/dist/components/ui/divider.js.map +1 -0
  64. package/dist/components/ui/divider.mjs +112 -0
  65. package/dist/components/ui/divider.mjs.map +1 -0
  66. package/dist/components/ui/drawer.d.mts +51 -0
  67. package/dist/components/ui/drawer.d.ts +51 -0
  68. package/dist/components/ui/drawer.js +225 -0
  69. package/dist/components/ui/drawer.js.map +1 -0
  70. package/dist/components/ui/drawer.mjs +178 -0
  71. package/dist/components/ui/drawer.mjs.map +1 -0
  72. package/dist/components/ui/dropdown.d.mts +59 -0
  73. package/dist/components/ui/dropdown.d.ts +59 -0
  74. package/dist/components/ui/dropdown.js +310 -0
  75. package/dist/components/ui/dropdown.js.map +1 -0
  76. package/dist/components/ui/dropdown.mjs +263 -0
  77. package/dist/components/ui/dropdown.mjs.map +1 -0
  78. package/dist/components/ui/field.d.mts +33 -0
  79. package/dist/components/ui/field.d.ts +33 -0
  80. package/dist/components/ui/field.js +146 -0
  81. package/dist/components/ui/field.js.map +1 -0
  82. package/dist/components/ui/field.mjs +108 -0
  83. package/dist/components/ui/field.mjs.map +1 -0
  84. package/dist/components/ui/icon-button.d.mts +20 -0
  85. package/dist/components/ui/icon-button.d.ts +20 -0
  86. package/dist/components/ui/icon-button.js +147 -0
  87. package/dist/components/ui/icon-button.js.map +1 -0
  88. package/dist/components/ui/icon-button.mjs +112 -0
  89. package/dist/components/ui/icon-button.mjs.map +1 -0
  90. package/dist/components/ui/index.d.mts +55 -0
  91. package/dist/components/ui/index.d.ts +55 -0
  92. package/dist/components/ui/index.js +476 -0
  93. package/dist/components/ui/index.js.map +1 -0
  94. package/dist/components/ui/index.mjs +246 -0
  95. package/dist/components/ui/index.mjs.map +1 -0
  96. package/dist/components/ui/input.d.mts +20 -0
  97. package/dist/components/ui/input.d.ts +20 -0
  98. package/dist/components/ui/input.js +250 -0
  99. package/dist/components/ui/input.js.map +1 -0
  100. package/dist/components/ui/input.mjs +215 -0
  101. package/dist/components/ui/input.mjs.map +1 -0
  102. package/dist/components/ui/metric-card.d.mts +53 -0
  103. package/dist/components/ui/metric-card.d.ts +53 -0
  104. package/dist/components/ui/metric-card.js +258 -0
  105. package/dist/components/ui/metric-card.js.map +1 -0
  106. package/dist/components/ui/metric-card.mjs +217 -0
  107. package/dist/components/ui/metric-card.mjs.map +1 -0
  108. package/dist/components/ui/modal.d.mts +77 -0
  109. package/dist/components/ui/modal.d.ts +77 -0
  110. package/dist/components/ui/modal.js +396 -0
  111. package/dist/components/ui/modal.js.map +1 -0
  112. package/dist/components/ui/modal.mjs +338 -0
  113. package/dist/components/ui/modal.mjs.map +1 -0
  114. package/dist/components/ui/navigation-menu.d.mts +139 -0
  115. package/dist/components/ui/navigation-menu.d.ts +139 -0
  116. package/dist/components/ui/navigation-menu.js +531 -0
  117. package/dist/components/ui/navigation-menu.js.map +1 -0
  118. package/dist/components/ui/navigation-menu.mjs +488 -0
  119. package/dist/components/ui/navigation-menu.mjs.map +1 -0
  120. package/dist/components/ui/pagination.d.mts +130 -0
  121. package/dist/components/ui/pagination.d.ts +130 -0
  122. package/dist/components/ui/pagination.js +495 -0
  123. package/dist/components/ui/pagination.js.map +1 -0
  124. package/dist/components/ui/pagination.mjs +449 -0
  125. package/dist/components/ui/pagination.mjs.map +1 -0
  126. package/dist/components/ui/popover.d.mts +41 -0
  127. package/dist/components/ui/popover.d.ts +41 -0
  128. package/dist/components/ui/popover.js +175 -0
  129. package/dist/components/ui/popover.js.map +1 -0
  130. package/dist/components/ui/popover.mjs +133 -0
  131. package/dist/components/ui/popover.mjs.map +1 -0
  132. package/dist/components/ui/progress.d.mts +35 -0
  133. package/dist/components/ui/progress.d.ts +35 -0
  134. package/dist/components/ui/progress.js +194 -0
  135. package/dist/components/ui/progress.js.map +1 -0
  136. package/dist/components/ui/progress.mjs +159 -0
  137. package/dist/components/ui/progress.mjs.map +1 -0
  138. package/dist/components/ui/radio-group.d.mts +40 -0
  139. package/dist/components/ui/radio-group.d.ts +40 -0
  140. package/dist/components/ui/radio-group.js +177 -0
  141. package/dist/components/ui/radio-group.js.map +1 -0
  142. package/dist/components/ui/radio-group.mjs +140 -0
  143. package/dist/components/ui/radio-group.mjs.map +1 -0
  144. package/dist/components/ui/segmented.d.mts +30 -0
  145. package/dist/components/ui/segmented.d.ts +30 -0
  146. package/dist/components/ui/segmented.js +241 -0
  147. package/dist/components/ui/segmented.js.map +1 -0
  148. package/dist/components/ui/segmented.mjs +204 -0
  149. package/dist/components/ui/segmented.mjs.map +1 -0
  150. package/dist/components/ui/select.d.mts +31 -0
  151. package/dist/components/ui/select.d.ts +31 -0
  152. package/dist/components/ui/select.js +317 -0
  153. package/dist/components/ui/select.js.map +1 -0
  154. package/dist/components/ui/select.mjs +276 -0
  155. package/dist/components/ui/select.mjs.map +1 -0
  156. package/dist/components/ui/skeleton.d.mts +26 -0
  157. package/dist/components/ui/skeleton.d.ts +26 -0
  158. package/dist/components/ui/skeleton.js +144 -0
  159. package/dist/components/ui/skeleton.js.map +1 -0
  160. package/dist/components/ui/skeleton.mjs +109 -0
  161. package/dist/components/ui/skeleton.mjs.map +1 -0
  162. package/dist/components/ui/slider.d.mts +38 -0
  163. package/dist/components/ui/slider.d.ts +38 -0
  164. package/dist/components/ui/slider.js +180 -0
  165. package/dist/components/ui/slider.js.map +1 -0
  166. package/dist/components/ui/slider.mjs +145 -0
  167. package/dist/components/ui/slider.mjs.map +1 -0
  168. package/dist/components/ui/spinner.d.mts +23 -0
  169. package/dist/components/ui/spinner.d.ts +23 -0
  170. package/dist/components/ui/spinner.js +471 -0
  171. package/dist/components/ui/spinner.js.map +1 -0
  172. package/dist/components/ui/spinner.mjs +436 -0
  173. package/dist/components/ui/spinner.mjs.map +1 -0
  174. package/dist/components/ui/switch.d.mts +22 -0
  175. package/dist/components/ui/switch.d.ts +22 -0
  176. package/dist/components/ui/switch.js +173 -0
  177. package/dist/components/ui/switch.js.map +1 -0
  178. package/dist/components/ui/switch.mjs +138 -0
  179. package/dist/components/ui/switch.mjs.map +1 -0
  180. package/dist/components/ui/table.d.mts +74 -0
  181. package/dist/components/ui/table.d.ts +74 -0
  182. package/dist/components/ui/table.js +240 -0
  183. package/dist/components/ui/table.js.map +1 -0
  184. package/dist/components/ui/table.mjs +199 -0
  185. package/dist/components/ui/table.mjs.map +1 -0
  186. package/dist/components/ui/tabs.d.mts +40 -0
  187. package/dist/components/ui/tabs.d.ts +40 -0
  188. package/dist/components/ui/tabs.js +238 -0
  189. package/dist/components/ui/tabs.js.map +1 -0
  190. package/dist/components/ui/tabs.mjs +199 -0
  191. package/dist/components/ui/tabs.mjs.map +1 -0
  192. package/dist/components/ui/textarea.d.mts +19 -0
  193. package/dist/components/ui/textarea.d.ts +19 -0
  194. package/dist/components/ui/textarea.js +181 -0
  195. package/dist/components/ui/textarea.js.map +1 -0
  196. package/dist/components/ui/textarea.mjs +146 -0
  197. package/dist/components/ui/textarea.mjs.map +1 -0
  198. package/dist/components/ui/toast.d.mts +93 -0
  199. package/dist/components/ui/toast.d.ts +93 -0
  200. package/dist/components/ui/toast.js +429 -0
  201. package/dist/components/ui/toast.js.map +1 -0
  202. package/dist/components/ui/toast.mjs +393 -0
  203. package/dist/components/ui/toast.mjs.map +1 -0
  204. package/dist/components/ui/toggle-group.d.mts +47 -0
  205. package/dist/components/ui/toggle-group.d.ts +47 -0
  206. package/dist/components/ui/toggle-group.js +186 -0
  207. package/dist/components/ui/toggle-group.js.map +1 -0
  208. package/dist/components/ui/toggle-group.mjs +149 -0
  209. package/dist/components/ui/toggle-group.mjs.map +1 -0
  210. package/dist/components/ui/toggle.d.mts +19 -0
  211. package/dist/components/ui/toggle.d.ts +19 -0
  212. package/dist/components/ui/toggle.js +194 -0
  213. package/dist/components/ui/toggle.js.map +1 -0
  214. package/dist/components/ui/toggle.mjs +159 -0
  215. package/dist/components/ui/toggle.mjs.map +1 -0
  216. package/dist/components/ui/tooltip.d.mts +37 -0
  217. package/dist/components/ui/tooltip.d.ts +37 -0
  218. package/dist/components/ui/tooltip.js +137 -0
  219. package/dist/components/ui/tooltip.js.map +1 -0
  220. package/dist/components/ui/tooltip.mjs +96 -0
  221. package/dist/components/ui/tooltip.mjs.map +1 -0
  222. package/dist/lib/utils.d.mts +10 -0
  223. package/dist/lib/utils.d.ts +10 -0
  224. package/dist/lib/utils.js +33 -0
  225. package/dist/lib/utils.js.map +1 -0
  226. package/dist/lib/utils.mjs +9 -0
  227. package/dist/lib/utils.mjs.map +1 -0
  228. package/package.json +11 -11
  229. package/dist/chart.js.map +0 -1
  230. package/dist/chart.mjs.map +0 -1
  231. package/dist/index.d.mts +0 -1636
  232. package/dist/index.d.ts +0 -1636
  233. package/dist/index.js +0 -7291
  234. package/dist/index.js.map +0 -1
  235. package/dist/index.mjs +0 -7048
  236. package/dist/index.mjs.map +0 -1
  237. /package/dist/{chart.d.mts → components/ui/chart.d.mts} +0 -0
  238. /package/dist/{chart.d.ts → components/ui/chart.d.ts} +0 -0
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var breadcrumb_exports = {};
31
+ __export(breadcrumb_exports, {
32
+ Breadcrumb: () => Breadcrumb,
33
+ BreadcrumbEllipsis: () => BreadcrumbEllipsis,
34
+ BreadcrumbItem: () => BreadcrumbItem,
35
+ BreadcrumbLink: () => BreadcrumbLink,
36
+ BreadcrumbList: () => BreadcrumbList,
37
+ BreadcrumbPage: () => BreadcrumbPage,
38
+ BreadcrumbSeparator: () => BreadcrumbSeparator,
39
+ breadcrumbSizeMap: () => breadcrumbSizeMap
40
+ });
41
+ module.exports = __toCommonJS(breadcrumb_exports);
42
+ var React = __toESM(require("react"));
43
+ var import_react_slot = require("@radix-ui/react-slot");
44
+ var import_utils = require("../../lib/utils");
45
+ const BreadcrumbContext = React.createContext({});
46
+ const useBreadcrumbContext = () => React.useContext(BreadcrumbContext);
47
+ function ChevronRightIcon({ className }) {
48
+ return /* @__PURE__ */ React.createElement(
49
+ "svg",
50
+ {
51
+ className,
52
+ fill: "none",
53
+ viewBox: "0 0 24 24",
54
+ stroke: "currentColor",
55
+ strokeWidth: 2
56
+ },
57
+ /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" })
58
+ );
59
+ }
60
+ function EllipsisIcon({ className }) {
61
+ return /* @__PURE__ */ React.createElement(
62
+ "svg",
63
+ {
64
+ className,
65
+ fill: "currentColor",
66
+ viewBox: "0 0 24 24"
67
+ },
68
+ /* @__PURE__ */ React.createElement("circle", { cx: "6", cy: "12", r: "1.5" }),
69
+ /* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "1.5" }),
70
+ /* @__PURE__ */ React.createElement("circle", { cx: "18", cy: "12", r: "1.5" })
71
+ );
72
+ }
73
+ const breadcrumbSizeMap = {
74
+ sm: { text: "text-xs", icon: "icon-xs", gap: "gap-1.5" },
75
+ default: { text: "text-sm", icon: "icon-xs", gap: "gap-2" },
76
+ lg: { text: "text-md", icon: "icon-sm", gap: "gap-2" }
77
+ };
78
+ const BreadcrumbRoot = React.forwardRef(
79
+ ({ className, separator, size = "default", ...props }, ref) => /* @__PURE__ */ React.createElement(BreadcrumbContext.Provider, { value: { size, separator } }, /* @__PURE__ */ React.createElement(
80
+ "nav",
81
+ {
82
+ ref,
83
+ "aria-label": "breadcrumb",
84
+ className: (0, import_utils.cn)("", className),
85
+ ...props
86
+ }
87
+ ))
88
+ );
89
+ BreadcrumbRoot.displayName = "Breadcrumb";
90
+ const BreadcrumbList = React.forwardRef(
91
+ ({ className, ...props }, ref) => {
92
+ const { size = "default" } = useBreadcrumbContext();
93
+ const sizeClass = breadcrumbSizeMap[size];
94
+ return /* @__PURE__ */ React.createElement(
95
+ "ol",
96
+ {
97
+ ref,
98
+ className: (0, import_utils.cn)(
99
+ "flex flex-wrap items-center",
100
+ sizeClass.gap,
101
+ sizeClass.text,
102
+ "text-text-muted",
103
+ className
104
+ ),
105
+ ...props
106
+ }
107
+ );
108
+ }
109
+ );
110
+ BreadcrumbList.displayName = "BreadcrumbList";
111
+ const BreadcrumbItem = React.forwardRef(
112
+ ({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
113
+ "li",
114
+ {
115
+ ref,
116
+ className: (0, import_utils.cn)("inline-flex items-center gap-1.5", className),
117
+ ...props
118
+ }
119
+ )
120
+ );
121
+ BreadcrumbItem.displayName = "BreadcrumbItem";
122
+ const BreadcrumbLink = React.forwardRef(
123
+ ({ asChild, className, ...props }, ref) => {
124
+ const Comp = asChild ? import_react_slot.Slot : "a";
125
+ return /* @__PURE__ */ React.createElement(
126
+ Comp,
127
+ {
128
+ ref,
129
+ className: (0, import_utils.cn)(
130
+ "transition-colors duration-fast hover:text-foreground",
131
+ className
132
+ ),
133
+ ...props
134
+ }
135
+ );
136
+ }
137
+ );
138
+ BreadcrumbLink.displayName = "BreadcrumbLink";
139
+ const BreadcrumbPage = React.forwardRef(
140
+ ({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
141
+ "span",
142
+ {
143
+ ref,
144
+ role: "link",
145
+ "aria-disabled": "true",
146
+ "aria-current": "page",
147
+ className: (0, import_utils.cn)("text-foreground", className),
148
+ ...props
149
+ }
150
+ )
151
+ );
152
+ BreadcrumbPage.displayName = "BreadcrumbPage";
153
+ const BreadcrumbSeparator = React.forwardRef(
154
+ ({ children, className, ...props }, ref) => {
155
+ const { separator, size = "default" } = useBreadcrumbContext();
156
+ const sizeClass = breadcrumbSizeMap[size];
157
+ return /* @__PURE__ */ React.createElement(
158
+ "li",
159
+ {
160
+ ref,
161
+ role: "presentation",
162
+ "aria-hidden": "true",
163
+ className: (0, import_utils.cn)("flex items-center text-text-subtle", className),
164
+ ...props
165
+ },
166
+ children ?? separator ?? /* @__PURE__ */ React.createElement(ChevronRightIcon, { className: sizeClass.icon })
167
+ );
168
+ }
169
+ );
170
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
171
+ const BreadcrumbEllipsis = React.forwardRef(
172
+ ({ className, ...props }, ref) => {
173
+ const { size = "default" } = useBreadcrumbContext();
174
+ const sizeClass = breadcrumbSizeMap[size];
175
+ return /* @__PURE__ */ React.createElement(
176
+ "span",
177
+ {
178
+ ref,
179
+ role: "presentation",
180
+ "aria-hidden": "true",
181
+ className: (0, import_utils.cn)("flex items-center justify-center", className),
182
+ ...props
183
+ },
184
+ /* @__PURE__ */ React.createElement(EllipsisIcon, { className: sizeClass.icon }),
185
+ /* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "More")
186
+ );
187
+ }
188
+ );
189
+ BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
190
+ const Breadcrumb = Object.assign(BreadcrumbRoot, {
191
+ List: BreadcrumbList,
192
+ Item: BreadcrumbItem,
193
+ Link: BreadcrumbLink,
194
+ Page: BreadcrumbPage,
195
+ Separator: BreadcrumbSeparator,
196
+ Ellipsis: BreadcrumbEllipsis
197
+ });
198
+ // Annotate the CommonJS export names for ESM import in node:
199
+ 0 && (module.exports = {
200
+ Breadcrumb,
201
+ BreadcrumbEllipsis,
202
+ BreadcrumbItem,
203
+ BreadcrumbLink,
204
+ BreadcrumbList,
205
+ BreadcrumbPage,
206
+ BreadcrumbSeparator,
207
+ breadcrumbSizeMap
208
+ });
209
+ //# sourceMappingURL=breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ui/breadcrumb.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\n// ─── Context ──────────────────────────────────────────────\n\ntype BreadcrumbContextValue = {\n size?: 'sm' | 'default' | 'lg'\n separator?: React.ReactNode\n}\n\nconst BreadcrumbContext = React.createContext<BreadcrumbContextValue>({})\nconst useBreadcrumbContext = () => React.useContext(BreadcrumbContext)\n\n// ─── Default Separator Icon ───────────────────────────────\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// ─── Ellipsis Icon ────────────────────────────────────────\n\nfunction EllipsisIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" />\n </svg>\n )\n}\n\n// ─── Breadcrumb (Root) ────────────────────────────────────\n\nconst breadcrumbSizeMap = {\n sm: { text: 'text-xs', icon: 'icon-xs', gap: 'gap-1.5' },\n default: { text: 'text-sm', icon: 'icon-xs', gap: 'gap-2' },\n lg: { text: 'text-md', icon: 'icon-sm', gap: 'gap-2' },\n} as const\n\nexport interface BreadcrumbProps extends React.ComponentPropsWithoutRef<'nav'> {\n /** Separator element between items */\n separator?: React.ReactNode\n /** Size of the breadcrumb */\n size?: 'sm' | 'default' | 'lg'\n /** Max items before collapsing (undefined = no collapse) */\n maxItems?: number\n /** Items visible before the ellipsis when collapsed */\n itemsBeforeCollapse?: number\n /** Items visible after the ellipsis when collapsed */\n itemsAfterCollapse?: number\n}\n\nconst BreadcrumbRoot = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, separator, size = 'default', ...props }, ref) => (\n <BreadcrumbContext.Provider value={{ size, separator }}>\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n className={cn('', className)}\n {...props}\n />\n </BreadcrumbContext.Provider>\n )\n)\nBreadcrumbRoot.displayName = 'Breadcrumb'\n\n// ─── BreadcrumbList ───────────────────────────────────────\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center',\n sizeClass.gap,\n sizeClass.text,\n 'text-text-muted',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbList.displayName = 'BreadcrumbList'\n\n// ─── BreadcrumbItem ───────────────────────────────────────\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n )\n)\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\n// ─── BreadcrumbLink ───────────────────────────────────────\n\nexport interface BreadcrumbLinkProps extends React.ComponentPropsWithoutRef<'a'> {\n /** Use Radix Slot to compose with custom link components */\n asChild?: boolean\n}\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n return (\n <Comp\n ref={ref}\n className={cn(\n 'transition-colors duration-fast hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\n// ─── BreadcrumbPage ───────────────────────────────────────\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground', className)}\n {...props}\n />\n )\n)\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\n// ─── BreadcrumbSeparator ──────────────────────────────────\n\nconst BreadcrumbSeparator = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ children, className, ...props }, ref) => {\n const { separator, size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center text-text-subtle', className)}\n {...props}\n >\n {children ?? separator ?? <ChevronRightIcon className={sizeClass.icon} />}\n </li>\n )\n }\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\n// ─── BreadcrumbEllipsis ───────────────────────────────────\n\nexport interface BreadcrumbEllipsisProps extends React.ComponentPropsWithoutRef<'span'> {}\n\nconst BreadcrumbEllipsis = React.forwardRef<HTMLSpanElement, BreadcrumbEllipsisProps>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center justify-center', className)}\n {...props}\n >\n <EllipsisIcon className={sizeClass.icon} />\n <span className=\"sr-only\">More</span>\n </span>\n )\n }\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis'\n\n// ─── Exports ──────────────────────────────────────────────\n\n// ─── Namespace ──────────────────────────────────────────\nconst Breadcrumb = Object.assign(BreadcrumbRoot, {\n List: BreadcrumbList,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n Page: BreadcrumbPage,\n Separator: BreadcrumbSeparator,\n Ellipsis: BreadcrumbEllipsis,\n})\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Breadcrumb {\n export type LinkProps = BreadcrumbLinkProps\n export type EllipsisProps = BreadcrumbEllipsisProps\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n breadcrumbSizeMap,\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,168 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { cn } from "../../lib/utils";
5
+ const BreadcrumbContext = React.createContext({});
6
+ const useBreadcrumbContext = () => React.useContext(BreadcrumbContext);
7
+ function ChevronRightIcon({ className }) {
8
+ return /* @__PURE__ */ React.createElement(
9
+ "svg",
10
+ {
11
+ className,
12
+ fill: "none",
13
+ viewBox: "0 0 24 24",
14
+ stroke: "currentColor",
15
+ strokeWidth: 2
16
+ },
17
+ /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" })
18
+ );
19
+ }
20
+ function EllipsisIcon({ className }) {
21
+ return /* @__PURE__ */ React.createElement(
22
+ "svg",
23
+ {
24
+ className,
25
+ fill: "currentColor",
26
+ viewBox: "0 0 24 24"
27
+ },
28
+ /* @__PURE__ */ React.createElement("circle", { cx: "6", cy: "12", r: "1.5" }),
29
+ /* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "1.5" }),
30
+ /* @__PURE__ */ React.createElement("circle", { cx: "18", cy: "12", r: "1.5" })
31
+ );
32
+ }
33
+ const breadcrumbSizeMap = {
34
+ sm: { text: "text-xs", icon: "icon-xs", gap: "gap-1.5" },
35
+ default: { text: "text-sm", icon: "icon-xs", gap: "gap-2" },
36
+ lg: { text: "text-md", icon: "icon-sm", gap: "gap-2" }
37
+ };
38
+ const BreadcrumbRoot = React.forwardRef(
39
+ ({ className, separator, size = "default", ...props }, ref) => /* @__PURE__ */ React.createElement(BreadcrumbContext.Provider, { value: { size, separator } }, /* @__PURE__ */ React.createElement(
40
+ "nav",
41
+ {
42
+ ref,
43
+ "aria-label": "breadcrumb",
44
+ className: cn("", className),
45
+ ...props
46
+ }
47
+ ))
48
+ );
49
+ BreadcrumbRoot.displayName = "Breadcrumb";
50
+ const BreadcrumbList = React.forwardRef(
51
+ ({ className, ...props }, ref) => {
52
+ const { size = "default" } = useBreadcrumbContext();
53
+ const sizeClass = breadcrumbSizeMap[size];
54
+ return /* @__PURE__ */ React.createElement(
55
+ "ol",
56
+ {
57
+ ref,
58
+ className: cn(
59
+ "flex flex-wrap items-center",
60
+ sizeClass.gap,
61
+ sizeClass.text,
62
+ "text-text-muted",
63
+ className
64
+ ),
65
+ ...props
66
+ }
67
+ );
68
+ }
69
+ );
70
+ BreadcrumbList.displayName = "BreadcrumbList";
71
+ const BreadcrumbItem = React.forwardRef(
72
+ ({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
73
+ "li",
74
+ {
75
+ ref,
76
+ className: cn("inline-flex items-center gap-1.5", className),
77
+ ...props
78
+ }
79
+ )
80
+ );
81
+ BreadcrumbItem.displayName = "BreadcrumbItem";
82
+ const BreadcrumbLink = React.forwardRef(
83
+ ({ asChild, className, ...props }, ref) => {
84
+ const Comp = asChild ? Slot : "a";
85
+ return /* @__PURE__ */ React.createElement(
86
+ Comp,
87
+ {
88
+ ref,
89
+ className: cn(
90
+ "transition-colors duration-fast hover:text-foreground",
91
+ className
92
+ ),
93
+ ...props
94
+ }
95
+ );
96
+ }
97
+ );
98
+ BreadcrumbLink.displayName = "BreadcrumbLink";
99
+ const BreadcrumbPage = React.forwardRef(
100
+ ({ className, ...props }, ref) => /* @__PURE__ */ React.createElement(
101
+ "span",
102
+ {
103
+ ref,
104
+ role: "link",
105
+ "aria-disabled": "true",
106
+ "aria-current": "page",
107
+ className: cn("text-foreground", className),
108
+ ...props
109
+ }
110
+ )
111
+ );
112
+ BreadcrumbPage.displayName = "BreadcrumbPage";
113
+ const BreadcrumbSeparator = React.forwardRef(
114
+ ({ children, className, ...props }, ref) => {
115
+ const { separator, size = "default" } = useBreadcrumbContext();
116
+ const sizeClass = breadcrumbSizeMap[size];
117
+ return /* @__PURE__ */ React.createElement(
118
+ "li",
119
+ {
120
+ ref,
121
+ role: "presentation",
122
+ "aria-hidden": "true",
123
+ className: cn("flex items-center text-text-subtle", className),
124
+ ...props
125
+ },
126
+ children ?? separator ?? /* @__PURE__ */ React.createElement(ChevronRightIcon, { className: sizeClass.icon })
127
+ );
128
+ }
129
+ );
130
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
131
+ const BreadcrumbEllipsis = React.forwardRef(
132
+ ({ className, ...props }, ref) => {
133
+ const { size = "default" } = useBreadcrumbContext();
134
+ const sizeClass = breadcrumbSizeMap[size];
135
+ return /* @__PURE__ */ React.createElement(
136
+ "span",
137
+ {
138
+ ref,
139
+ role: "presentation",
140
+ "aria-hidden": "true",
141
+ className: cn("flex items-center justify-center", className),
142
+ ...props
143
+ },
144
+ /* @__PURE__ */ React.createElement(EllipsisIcon, { className: sizeClass.icon }),
145
+ /* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "More")
146
+ );
147
+ }
148
+ );
149
+ BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
150
+ const Breadcrumb = Object.assign(BreadcrumbRoot, {
151
+ List: BreadcrumbList,
152
+ Item: BreadcrumbItem,
153
+ Link: BreadcrumbLink,
154
+ Page: BreadcrumbPage,
155
+ Separator: BreadcrumbSeparator,
156
+ Ellipsis: BreadcrumbEllipsis
157
+ });
158
+ export {
159
+ Breadcrumb,
160
+ BreadcrumbEllipsis,
161
+ BreadcrumbItem,
162
+ BreadcrumbLink,
163
+ BreadcrumbList,
164
+ BreadcrumbPage,
165
+ BreadcrumbSeparator,
166
+ breadcrumbSizeMap
167
+ };
168
+ //# sourceMappingURL=breadcrumb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ui/breadcrumb.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\n// ─── Context ──────────────────────────────────────────────\n\ntype BreadcrumbContextValue = {\n size?: 'sm' | 'default' | 'lg'\n separator?: React.ReactNode\n}\n\nconst BreadcrumbContext = React.createContext<BreadcrumbContextValue>({})\nconst useBreadcrumbContext = () => React.useContext(BreadcrumbContext)\n\n// ─── Default Separator Icon ───────────────────────────────\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// ─── Ellipsis Icon ────────────────────────────────────────\n\nfunction EllipsisIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" />\n </svg>\n )\n}\n\n// ─── Breadcrumb (Root) ────────────────────────────────────\n\nconst breadcrumbSizeMap = {\n sm: { text: 'text-xs', icon: 'icon-xs', gap: 'gap-1.5' },\n default: { text: 'text-sm', icon: 'icon-xs', gap: 'gap-2' },\n lg: { text: 'text-md', icon: 'icon-sm', gap: 'gap-2' },\n} as const\n\nexport interface BreadcrumbProps extends React.ComponentPropsWithoutRef<'nav'> {\n /** Separator element between items */\n separator?: React.ReactNode\n /** Size of the breadcrumb */\n size?: 'sm' | 'default' | 'lg'\n /** Max items before collapsing (undefined = no collapse) */\n maxItems?: number\n /** Items visible before the ellipsis when collapsed */\n itemsBeforeCollapse?: number\n /** Items visible after the ellipsis when collapsed */\n itemsAfterCollapse?: number\n}\n\nconst BreadcrumbRoot = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, separator, size = 'default', ...props }, ref) => (\n <BreadcrumbContext.Provider value={{ size, separator }}>\n <nav\n ref={ref}\n aria-label=\"breadcrumb\"\n className={cn('', className)}\n {...props}\n />\n </BreadcrumbContext.Provider>\n )\n)\nBreadcrumbRoot.displayName = 'Breadcrumb'\n\n// ─── BreadcrumbList ───────────────────────────────────────\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center',\n sizeClass.gap,\n sizeClass.text,\n 'text-text-muted',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbList.displayName = 'BreadcrumbList'\n\n// ─── BreadcrumbItem ───────────────────────────────────────\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n )\n)\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\n// ─── BreadcrumbLink ───────────────────────────────────────\n\nexport interface BreadcrumbLinkProps extends React.ComponentPropsWithoutRef<'a'> {\n /** Use Radix Slot to compose with custom link components */\n asChild?: boolean\n}\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n return (\n <Comp\n ref={ref}\n className={cn(\n 'transition-colors duration-fast hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n }\n)\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\n// ─── BreadcrumbPage ───────────────────────────────────────\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground', className)}\n {...props}\n />\n )\n)\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\n// ─── BreadcrumbSeparator ──────────────────────────────────\n\nconst BreadcrumbSeparator = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\n ({ children, className, ...props }, ref) => {\n const { separator, size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center text-text-subtle', className)}\n {...props}\n >\n {children ?? separator ?? <ChevronRightIcon className={sizeClass.icon} />}\n </li>\n )\n }\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\n// ─── BreadcrumbEllipsis ───────────────────────────────────\n\nexport interface BreadcrumbEllipsisProps extends React.ComponentPropsWithoutRef<'span'> {}\n\nconst BreadcrumbEllipsis = React.forwardRef<HTMLSpanElement, BreadcrumbEllipsisProps>(\n ({ className, ...props }, ref) => {\n const { size = 'default' } = useBreadcrumbContext()\n const sizeClass = breadcrumbSizeMap[size]\n return (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex items-center justify-center', className)}\n {...props}\n >\n <EllipsisIcon className={sizeClass.icon} />\n <span className=\"sr-only\">More</span>\n </span>\n )\n }\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis'\n\n// ─── Exports ──────────────────────────────────────────────\n\n// ─── Namespace ──────────────────────────────────────────\nconst Breadcrumb = Object.assign(BreadcrumbRoot, {\n List: BreadcrumbList,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n Page: BreadcrumbPage,\n Separator: BreadcrumbSeparator,\n Ellipsis: BreadcrumbEllipsis,\n})\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Breadcrumb {\n export type LinkProps = BreadcrumbLinkProps\n export type EllipsisProps = BreadcrumbEllipsisProps\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n breadcrumbSizeMap,\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+
3
+ type ButtonGroupContextValue = {
4
+ variant?: 'outline' | 'ghost';
5
+ size?: 'xs' | 'sm' | 'md' | 'default' | 'lg';
6
+ radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
7
+ fontWeight?: 'normal' | 'semibold';
8
+ disabled?: boolean;
9
+ };
10
+ declare function useButtonGroup(): ButtonGroupContextValue | null;
11
+ interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
12
+ orientation?: 'horizontal' | 'vertical';
13
+ attached?: boolean;
14
+ variant?: 'outline' | 'ghost';
15
+ size?: 'xs' | 'sm' | 'md' | 'default' | 'lg';
16
+ radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
17
+ fontWeight?: 'normal' | 'semibold';
18
+ disabled?: boolean;
19
+ }
20
+ declare const ButtonGroup: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;
21
+
22
+ export { ButtonGroup, type ButtonGroupProps, useButtonGroup };
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+
3
+ type ButtonGroupContextValue = {
4
+ variant?: 'outline' | 'ghost';
5
+ size?: 'xs' | 'sm' | 'md' | 'default' | 'lg';
6
+ radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
7
+ fontWeight?: 'normal' | 'semibold';
8
+ disabled?: boolean;
9
+ };
10
+ declare function useButtonGroup(): ButtonGroupContextValue | null;
11
+ interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
12
+ orientation?: 'horizontal' | 'vertical';
13
+ attached?: boolean;
14
+ variant?: 'outline' | 'ghost';
15
+ size?: 'xs' | 'sm' | 'md' | 'default' | 'lg';
16
+ radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
17
+ fontWeight?: 'normal' | 'semibold';
18
+ disabled?: boolean;
19
+ }
20
+ declare const ButtonGroup: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;
21
+
22
+ export { ButtonGroup, type ButtonGroupProps, useButtonGroup };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var button_group_exports = {};
31
+ __export(button_group_exports, {
32
+ ButtonGroup: () => ButtonGroup,
33
+ useButtonGroup: () => useButtonGroup
34
+ });
35
+ module.exports = __toCommonJS(button_group_exports);
36
+ var React = __toESM(require("react"));
37
+ var import_utils = require("../../lib/utils");
38
+ const ButtonGroupContext = React.createContext(null);
39
+ function useButtonGroup() {
40
+ return React.useContext(ButtonGroupContext);
41
+ }
42
+ const ButtonGroup = React.forwardRef(
43
+ ({
44
+ className,
45
+ orientation = "horizontal",
46
+ attached = true,
47
+ variant,
48
+ size,
49
+ radius,
50
+ fontWeight,
51
+ disabled,
52
+ children,
53
+ ...props
54
+ }, ref) => {
55
+ const contextValue = React.useMemo(() => ({
56
+ variant,
57
+ size,
58
+ radius,
59
+ fontWeight,
60
+ disabled
61
+ }), [variant, size, radius, fontWeight, disabled]);
62
+ return /* @__PURE__ */ React.createElement(ButtonGroupContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(
63
+ "div",
64
+ {
65
+ ref,
66
+ role: "group",
67
+ className: (0, import_utils.cn)(
68
+ "inline-flex",
69
+ orientation === "vertical" ? "flex-col" : "flex-row",
70
+ // Attached mode: use negative margin to overlap borders, raise z-index on hover/focus
71
+ attached && orientation === "horizontal" && [
72
+ "[&>*:not(:first-child)]:rounded-l-none",
73
+ "[&>*:not(:last-child)]:rounded-r-none",
74
+ "[&>*:not(:first-child)]:-ml-px",
75
+ "[&>*]:relative",
76
+ "[&>*:hover]:z-10",
77
+ "[&>*:focus-visible]:z-10",
78
+ "[&>*:active]:scale-none",
79
+ "[&>*:hover]:border-border-form"
80
+ ],
81
+ attached && orientation === "vertical" && [
82
+ "[&>*:not(:first-child)]:rounded-t-none",
83
+ "[&>*:not(:last-child)]:rounded-b-none",
84
+ "[&>*:not(:first-child)]:-mt-px",
85
+ "[&>*]:relative",
86
+ "[&>*]:w-full",
87
+ "[&>*:hover]:z-10",
88
+ "[&>*:focus-visible]:z-10",
89
+ "[&>*:active]:scale-none",
90
+ "[&>*:hover]:border-border-form"
91
+ ],
92
+ !attached && "gap-2",
93
+ className
94
+ ),
95
+ ...props
96
+ },
97
+ children
98
+ ));
99
+ }
100
+ );
101
+ ButtonGroup.displayName = "ButtonGroup";
102
+ // Annotate the CommonJS export names for ESM import in node:
103
+ 0 && (module.exports = {
104
+ ButtonGroup,
105
+ useButtonGroup
106
+ });
107
+ //# sourceMappingURL=button-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ui/button-group.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\n// ButtonGroup Context\ntype ButtonGroupContextValue = {\n variant?: 'outline' | 'ghost'\n size?: 'xs' | 'sm' | 'md' | 'default' | 'lg'\n radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n fontWeight?: 'normal' | 'semibold'\n disabled?: boolean\n}\n\nconst ButtonGroupContext = React.createContext<ButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup() {\n return React.useContext(ButtonGroupContext)\n}\n\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical'\n attached?: boolean\n variant?: 'outline' | 'ghost'\n size?: 'xs' | 'sm' | 'md' | 'default' | 'lg'\n radius?: 'none' | 'sm' | 'base' | 'default' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n fontWeight?: 'normal' | 'semibold'\n disabled?: boolean\n}\n\nconst ButtonGroup = React.forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({\n className,\n orientation = 'horizontal',\n attached = true,\n variant,\n size,\n radius,\n fontWeight,\n disabled,\n children,\n ...props\n }, ref) => {\n const contextValue = React.useMemo(() => ({\n variant,\n size,\n radius,\n fontWeight,\n disabled,\n }), [variant, size, radius, fontWeight, disabled])\n\n return (\n <ButtonGroupContext.Provider value={contextValue}>\n <div\n ref={ref}\n role=\"group\"\n className={cn(\n 'inline-flex',\n orientation === 'vertical' ? 'flex-col' : 'flex-row',\n // Attached mode: use negative margin to overlap borders, raise z-index on hover/focus\n attached && orientation === 'horizontal' && [\n '[&>*:not(:first-child)]:rounded-l-none',\n '[&>*:not(:last-child)]:rounded-r-none',\n '[&>*:not(:first-child)]:-ml-px',\n '[&>*]:relative',\n '[&>*:hover]:z-10',\n '[&>*:focus-visible]:z-10',\n '[&>*:active]:scale-none',\n '[&>*:hover]:border-border-form',\n ],\n attached && orientation === 'vertical' && [\n '[&>*:not(:first-child)]:rounded-t-none',\n '[&>*:not(:last-child)]:rounded-b-none',\n '[&>*:not(:first-child)]:-mt-px',\n '[&>*]:relative',\n '[&>*]:w-full',\n '[&>*:hover]:z-10',\n '[&>*:focus-visible]:z-10',\n '[&>*:active]:scale-none',\n '[&>*:hover]:border-border-form',\n ],\n !attached && 'gap-2',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </ButtonGroupContext.Provider>\n )\n }\n)\nButtonGroup.displayName = 'ButtonGroup'\n\nexport { ButtonGroup }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,YAAuB;AACvB,mBAAmB;AAWnB,MAAM,qBAAqB,MAAM,cAA8C,IAAI;AAE5E,SAAS,iBAAiB;AAC/B,SAAO,MAAM,WAAW,kBAAkB;AAC5C;AAYA,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC;AAAA,IACC;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GAAG,QAAQ;AACT,UAAM,eAAe,MAAM,QAAQ,OAAO;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,CAAC,SAAS,MAAM,QAAQ,YAAY,QAAQ,CAAC;AAEjD,WACE,oCAAC,mBAAmB,UAAnB,EAA4B,OAAO,gBAClC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,eAAW;AAAA,UACT;AAAA,UACA,gBAAgB,aAAa,aAAa;AAAA;AAAA,UAE1C,YAAY,gBAAgB,gBAAgB;AAAA,YAC1C;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,YAAY,gBAAgB,cAAc;AAAA,YACxC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,CAAC,YAAY;AAAA,UACb;AAAA,QACF;AAAA,QACC,GAAG;AAAA;AAAA,MAEH;AAAA,IACH,CACF;AAAA,EAEJ;AACF;AACA,YAAY,cAAc;","names":[]}
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ const ButtonGroupContext = React.createContext(null);
5
+ function useButtonGroup() {
6
+ return React.useContext(ButtonGroupContext);
7
+ }
8
+ const ButtonGroup = React.forwardRef(
9
+ ({
10
+ className,
11
+ orientation = "horizontal",
12
+ attached = true,
13
+ variant,
14
+ size,
15
+ radius,
16
+ fontWeight,
17
+ disabled,
18
+ children,
19
+ ...props
20
+ }, ref) => {
21
+ const contextValue = React.useMemo(() => ({
22
+ variant,
23
+ size,
24
+ radius,
25
+ fontWeight,
26
+ disabled
27
+ }), [variant, size, radius, fontWeight, disabled]);
28
+ return /* @__PURE__ */ React.createElement(ButtonGroupContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(
29
+ "div",
30
+ {
31
+ ref,
32
+ role: "group",
33
+ className: cn(
34
+ "inline-flex",
35
+ orientation === "vertical" ? "flex-col" : "flex-row",
36
+ // Attached mode: use negative margin to overlap borders, raise z-index on hover/focus
37
+ attached && orientation === "horizontal" && [
38
+ "[&>*:not(:first-child)]:rounded-l-none",
39
+ "[&>*:not(:last-child)]:rounded-r-none",
40
+ "[&>*:not(:first-child)]:-ml-px",
41
+ "[&>*]:relative",
42
+ "[&>*:hover]:z-10",
43
+ "[&>*:focus-visible]:z-10",
44
+ "[&>*:active]:scale-none",
45
+ "[&>*:hover]:border-border-form"
46
+ ],
47
+ attached && orientation === "vertical" && [
48
+ "[&>*:not(:first-child)]:rounded-t-none",
49
+ "[&>*:not(:last-child)]:rounded-b-none",
50
+ "[&>*:not(:first-child)]:-mt-px",
51
+ "[&>*]:relative",
52
+ "[&>*]:w-full",
53
+ "[&>*:hover]:z-10",
54
+ "[&>*:focus-visible]:z-10",
55
+ "[&>*:active]:scale-none",
56
+ "[&>*:hover]:border-border-form"
57
+ ],
58
+ !attached && "gap-2",
59
+ className
60
+ ),
61
+ ...props
62
+ },
63
+ children
64
+ ));
65
+ }
66
+ );
67
+ ButtonGroup.displayName = "ButtonGroup";
68
+ export {
69
+ ButtonGroup,
70
+ useButtonGroup
71
+ };
72
+ //# sourceMappingURL=button-group.mjs.map