@hellboy/ds 0.1.3 → 0.2.7

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 (298) hide show
  1. package/README.md +512 -162
  2. package/{src/style/components/badge → dist/components}/badge.css +9 -25
  3. package/dist/components/badge.d.mts +12 -0
  4. package/dist/components/badge.d.ts +12 -0
  5. package/dist/components/badge.js +42 -0
  6. package/dist/components/badge.mjs +15 -0
  7. package/dist/components/banner.css +280 -0
  8. package/dist/components/banner.d.mts +12 -0
  9. package/dist/components/banner.d.ts +12 -0
  10. package/dist/components/banner.js +184 -0
  11. package/dist/components/banner.mjs +147 -0
  12. package/dist/components/button-group.css +289 -0
  13. package/dist/components/button-group.d.mts +81 -0
  14. package/dist/components/button-group.d.ts +81 -0
  15. package/dist/components/button-group.js +180 -0
  16. package/dist/components/button-group.mjs +143 -0
  17. package/{src/style/components/button → dist/components}/button.css +59 -62
  18. package/dist/components/button.d.mts +57 -0
  19. package/dist/components/button.d.ts +57 -0
  20. package/dist/components/button.js +129 -0
  21. package/dist/components/button.mjs +92 -0
  22. package/{src/style/components/card → dist/components}/card.css +9 -30
  23. package/dist/components/card.d.mts +31 -0
  24. package/dist/components/card.d.ts +31 -0
  25. package/dist/components/card.js +59 -0
  26. package/dist/components/card.mjs +32 -0
  27. package/{src/style → dist}/components/checkbox.css +51 -43
  28. package/dist/components/checkbox.d.mts +31 -0
  29. package/dist/components/checkbox.d.ts +31 -0
  30. package/dist/components/checkbox.js +130 -0
  31. package/dist/components/checkbox.mjs +93 -0
  32. package/{src/style/components/code-block → dist/components}/code-block.css +3 -7
  33. package/dist/components/code-block.d.mts +24 -0
  34. package/dist/components/code-block.d.ts +24 -0
  35. package/dist/components/code-block.js +43 -0
  36. package/dist/components/code-block.mjs +16 -0
  37. package/dist/components/color-control.css +285 -0
  38. package/dist/components/color-control.d.mts +5 -0
  39. package/dist/components/color-control.d.ts +5 -0
  40. package/dist/components/color-control.js +534 -0
  41. package/dist/components/color-control.mjs +497 -0
  42. package/dist/components/dialog.css +930 -0
  43. package/dist/components/dialog.d.mts +32 -0
  44. package/dist/components/dialog.d.ts +32 -0
  45. package/dist/components/dialog.js +1111 -0
  46. package/dist/components/dialog.mjs +1074 -0
  47. package/dist/components/divider.css +356 -0
  48. package/dist/components/divider.d.mts +32 -0
  49. package/dist/components/divider.d.ts +32 -0
  50. package/dist/components/divider.js +344 -0
  51. package/dist/components/divider.mjs +307 -0
  52. package/{src/style/components/drag-handle → dist/components}/drag-handle.css +3 -18
  53. package/dist/components/drag-handle.d.mts +11 -0
  54. package/dist/components/drag-handle.d.ts +11 -0
  55. package/dist/components/drag-handle.js +103 -0
  56. package/dist/components/drag-handle.mjs +66 -0
  57. package/dist/components/drawer.css +1027 -0
  58. package/dist/components/drawer.d.mts +14 -0
  59. package/dist/components/drawer.d.ts +14 -0
  60. package/dist/components/drawer.js +1072 -0
  61. package/dist/components/drawer.mjs +1035 -0
  62. package/dist/components/floating-bar.css +17 -0
  63. package/dist/components/floating-bar.d.mts +25 -0
  64. package/dist/components/floating-bar.d.ts +25 -0
  65. package/dist/components/floating-bar.js +52 -0
  66. package/dist/components/floating-bar.mjs +25 -0
  67. package/dist/components/footer.css +40 -0
  68. package/dist/components/footer.d.mts +8 -0
  69. package/dist/components/footer.d.ts +8 -0
  70. package/dist/components/footer.js +44 -0
  71. package/dist/components/footer.mjs +17 -0
  72. package/dist/components/grid.css +47 -0
  73. package/dist/components/grid.d.mts +27 -0
  74. package/dist/components/grid.d.ts +27 -0
  75. package/dist/components/grid.js +52 -0
  76. package/dist/components/grid.mjs +25 -0
  77. package/dist/components/header.css +1075 -0
  78. package/dist/components/header.d.mts +35 -0
  79. package/dist/components/header.d.ts +35 -0
  80. package/dist/components/header.js +1402 -0
  81. package/dist/components/header.mjs +1365 -0
  82. package/dist/components/hero.css +121 -0
  83. package/dist/components/hero.d.mts +111 -0
  84. package/dist/components/hero.d.ts +111 -0
  85. package/dist/components/hero.js +285 -0
  86. package/dist/components/hero.mjs +248 -0
  87. package/{src/style/components/icons → dist/components}/icons.css +14 -15
  88. package/dist/components/icons.d.mts +104 -0
  89. package/dist/components/icons.d.ts +104 -0
  90. package/dist/components/icons.js +239 -0
  91. package/dist/components/icons.mjs +203 -0
  92. package/{src/style/components/input → dist/components}/input.css +189 -102
  93. package/dist/components/input.d.mts +114 -0
  94. package/dist/components/input.d.ts +114 -0
  95. package/dist/components/input.js +926 -0
  96. package/dist/components/input.mjs +879 -0
  97. package/dist/components/layout.css +551 -0
  98. package/dist/components/layout.d.mts +16 -0
  99. package/dist/components/layout.d.ts +16 -0
  100. package/dist/components/layout.js +387 -0
  101. package/dist/components/layout.mjs +352 -0
  102. package/{src/style/components/list → dist/components}/list.css +47 -41
  103. package/dist/components/list.d.mts +46 -0
  104. package/dist/components/list.d.ts +46 -0
  105. package/dist/components/list.js +124 -0
  106. package/dist/components/list.mjs +96 -0
  107. package/dist/components/navbar.css +706 -0
  108. package/dist/components/navbar.d.mts +56 -0
  109. package/dist/components/navbar.d.ts +56 -0
  110. package/dist/components/navbar.js +994 -0
  111. package/dist/components/navbar.mjs +952 -0
  112. package/{src/style/components/page-index → dist/components}/page-index.css +2 -47
  113. package/dist/components/page-index.d.mts +25 -0
  114. package/dist/components/page-index.d.ts +25 -0
  115. package/dist/components/page-index.js +239 -0
  116. package/dist/components/page-index.mjs +202 -0
  117. package/{src/style/components/page → dist/components}/page.css +4 -15
  118. package/dist/components/page.d.mts +30 -0
  119. package/dist/components/page.d.ts +30 -0
  120. package/dist/components/page.js +40 -0
  121. package/dist/components/page.mjs +13 -0
  122. package/dist/components/popover.css +87 -0
  123. package/dist/components/popover.d.mts +22 -0
  124. package/dist/components/popover.d.ts +22 -0
  125. package/dist/components/popover.js +243 -0
  126. package/dist/components/popover.mjs +206 -0
  127. package/{src/style → dist}/components/radio.css +8 -51
  128. package/dist/components/radio.d.mts +59 -0
  129. package/dist/components/radio.d.ts +59 -0
  130. package/dist/components/radio.js +133 -0
  131. package/dist/components/radio.mjs +95 -0
  132. package/dist/components/section.css +993 -0
  133. package/dist/components/section.d.mts +33 -0
  134. package/dist/components/section.d.ts +33 -0
  135. package/dist/components/section.js +1401 -0
  136. package/dist/components/section.mjs +1364 -0
  137. package/dist/components/select.css +391 -0
  138. package/dist/components/select.d.mts +63 -0
  139. package/dist/components/select.d.ts +63 -0
  140. package/dist/components/select.js +452 -0
  141. package/dist/components/select.mjs +415 -0
  142. package/{src/style/components/slider → dist/components}/slider.css +55 -33
  143. package/dist/components/slider.d.mts +69 -0
  144. package/dist/components/slider.d.ts +69 -0
  145. package/dist/components/slider.js +254 -0
  146. package/dist/components/slider.mjs +217 -0
  147. package/dist/components/switch.css +1081 -0
  148. package/dist/components/switch.d.mts +33 -0
  149. package/dist/components/switch.d.ts +33 -0
  150. package/dist/components/switch.js +1092 -0
  151. package/dist/components/switch.mjs +1055 -0
  152. package/{src/style/components/table → dist/components}/table.css +3 -28
  153. package/dist/components/table.d.mts +42 -0
  154. package/dist/components/table.d.ts +42 -0
  155. package/dist/components/table.js +108 -0
  156. package/dist/components/table.mjs +76 -0
  157. package/dist/components/tag.css +97 -0
  158. package/dist/components/tag.d.mts +12 -0
  159. package/dist/components/tag.d.ts +12 -0
  160. package/dist/components/tag.js +42 -0
  161. package/dist/components/tag.mjs +15 -0
  162. package/dist/components/textarea.css +1359 -0
  163. package/dist/components/textarea.d.mts +84 -0
  164. package/dist/components/textarea.d.ts +84 -0
  165. package/dist/components/textarea.js +1962 -0
  166. package/dist/components/textarea.mjs +1924 -0
  167. package/{src/style/components/theme-control → dist/components}/theme-control.css +3 -7
  168. package/dist/components/theme-control.d.mts +9 -0
  169. package/dist/components/theme-control.d.ts +9 -0
  170. package/dist/components/theme-control.js +235 -0
  171. package/dist/components/theme-control.mjs +200 -0
  172. package/{src/style/components/tooltip → dist/components}/tooltip.css +5 -13
  173. package/dist/components/tooltip.d.mts +12 -0
  174. package/dist/components/tooltip.d.ts +12 -0
  175. package/dist/components/tooltip.js +200 -0
  176. package/dist/components/tooltip.mjs +163 -0
  177. package/dist/icons-Czahnf-r.d.mts +15 -0
  178. package/dist/icons-Czahnf-r.d.ts +15 -0
  179. package/dist/index.css +2914 -2067
  180. package/dist/index.d.mts +144 -721
  181. package/dist/index.d.ts +144 -721
  182. package/dist/index.js +4076 -2282
  183. package/dist/index.mjs +4132 -2366
  184. package/dist/theme.css +34 -34
  185. package/package.json +27 -8
  186. package/dist/index.css.map +0 -1
  187. package/dist/index.js.map +0 -1
  188. package/dist/index.mjs.map +0 -1
  189. package/hellboy-ds-0.1.2.tgz +0 -0
  190. package/src/components/badge/Badge.tsx +0 -29
  191. package/src/components/badge/index.ts +0 -1
  192. package/src/components/banner/Banner.tsx +0 -48
  193. package/src/components/banner/banner.css +0 -44
  194. package/src/components/banner/index.ts +0 -1
  195. package/src/components/button/button.tsx +0 -127
  196. package/src/components/button/index.ts +0 -1
  197. package/src/components/card/card.tsx +0 -57
  198. package/src/components/card/index.ts +0 -1
  199. package/src/components/checkbox/Checkbox.tsx +0 -98
  200. package/src/components/checkbox/index.ts +0 -1
  201. package/src/components/code-block/code-block.tsx +0 -44
  202. package/src/components/code-block/index.ts +0 -1
  203. package/src/components/color-control/color-control.tsx +0 -322
  204. package/src/components/color-control/index.ts +0 -1
  205. package/src/components/drag-handle/DragHandle.tsx +0 -78
  206. package/src/components/drag-handle/index.ts +0 -1
  207. package/src/components/drawer/drawer.tsx +0 -82
  208. package/src/components/drawer/index.ts +0 -1
  209. package/src/components/floating-bar/floating-bar.tsx +0 -52
  210. package/src/components/floating-bar/index.ts +0 -2
  211. package/src/components/footer/footer.tsx +0 -28
  212. package/src/components/footer/index.ts +0 -1
  213. package/src/components/grid/Grid.tsx +0 -53
  214. package/src/components/grid/index.ts +0 -1
  215. package/src/components/header/header.tsx +0 -57
  216. package/src/components/header/index.ts +0 -1
  217. package/src/components/icons/icons.tsx +0 -44
  218. package/src/components/icons/index.ts +0 -1
  219. package/src/components/index.ts +0 -29
  220. package/src/components/input/DatePicker.tsx +0 -133
  221. package/src/components/input/Input.tsx +0 -220
  222. package/src/components/input/InputDate.tsx +0 -10
  223. package/src/components/input/InputDateTime.tsx +0 -10
  224. package/src/components/input/InputEmail.tsx +0 -10
  225. package/src/components/input/InputField.tsx +0 -137
  226. package/src/components/input/InputNumber.tsx +0 -10
  227. package/src/components/input/InputPassword.tsx +0 -10
  228. package/src/components/input/InputSearch.tsx +0 -10
  229. package/src/components/input/InputTel.tsx +0 -10
  230. package/src/components/input/InputText.tsx +0 -10
  231. package/src/components/input/InputTime.tsx +0 -10
  232. package/src/components/input/InputUrl.tsx +0 -10
  233. package/src/components/input/TimePicker.tsx +0 -151
  234. package/src/components/input/index.ts +0 -11
  235. package/src/components/layout/Layout.tsx +0 -244
  236. package/src/components/layout/index.ts +0 -1
  237. package/src/components/list/List.tsx +0 -159
  238. package/src/components/list/index.ts +0 -1
  239. package/src/components/navbar/MenuCategory.tsx +0 -20
  240. package/src/components/navbar/MenuGroup.tsx +0 -288
  241. package/src/components/navbar/MenuItem.tsx +0 -65
  242. package/src/components/navbar/Navbar.tsx +0 -23
  243. package/src/components/navbar/index.ts +0 -4
  244. package/src/components/page/index.ts +0 -1
  245. package/src/components/page/page.tsx +0 -46
  246. package/src/components/page-index/PageIndex.tsx +0 -275
  247. package/src/components/page-index/index.ts +0 -1
  248. package/src/components/popover/index.ts +0 -1
  249. package/src/components/popover/popover.tsx +0 -199
  250. package/src/components/radio/Radio.tsx +0 -176
  251. package/src/components/radio/index.ts +0 -1
  252. package/src/components/section/index.ts +0 -1
  253. package/src/components/section/section.tsx +0 -66
  254. package/src/components/select/Select.tsx +0 -212
  255. package/src/components/select/index.ts +0 -1
  256. package/src/components/slider/Slider.tsx +0 -267
  257. package/src/components/slider/index.ts +0 -1
  258. package/src/components/switch/index.ts +0 -1
  259. package/src/components/switch/switch.tsx +0 -99
  260. package/src/components/table/Table.tsx +0 -147
  261. package/src/components/table/index.ts +0 -1
  262. package/src/components/theme-control/index.ts +0 -1
  263. package/src/components/theme-control/theme-control.tsx +0 -78
  264. package/src/components/tooltip/index.ts +0 -1
  265. package/src/components/tooltip/tooltip.tsx +0 -207
  266. package/src/contexts/NavbarTooltipContext.tsx +0 -48
  267. package/src/contexts/index.ts +0 -1
  268. package/src/foundations/motion.md +0 -136
  269. package/src/index.ts +0 -40
  270. package/src/style/_shared/field.css +0 -69
  271. package/src/style/components/color-control/color-control.css +0 -126
  272. package/src/style/components/drawer/drawer.css +0 -210
  273. package/src/style/components/floating-bar/floating-bar.css +0 -39
  274. package/src/style/components/footer/footer.css +0 -108
  275. package/src/style/components/grid/grid.css +0 -33
  276. package/src/style/components/header/header.css +0 -44
  277. package/src/style/components/layout/layout.css +0 -205
  278. package/src/style/components/navbar/navbar.css +0 -342
  279. package/src/style/components/popover/popover.css +0 -44
  280. package/src/style/components/section/section.css +0 -67
  281. package/src/style/components/select/select.css +0 -143
  282. package/src/style/components/switch/switch.css +0 -267
  283. package/src/style/foundations/global.css +0 -316
  284. package/src/style/foundations/motion.css +0 -164
  285. package/src/style/foundations/spacing.css +0 -51
  286. package/src/style/foundations/typography.css +0 -39
  287. package/src/style/foundations/z-index.css +0 -81
  288. package/src/style/modes/dark.css +0 -146
  289. package/src/style/modes/light.css +0 -147
  290. package/src/style/semantic.css +0 -52
  291. package/src/style/styles.css +0 -51
  292. package/src/style/themes/theme.json +0 -37
  293. package/src/utils/README.md +0 -305
  294. package/src/utils/USER_PREFERENCES.md +0 -558
  295. package/src/utils/theme.ts +0 -127
  296. package/src/utils/user-preferences.ts +0 -577
  297. package/tsconfig.json +0 -25
  298. package/tsup.config.ts +0 -52
@@ -0,0 +1,147 @@
1
+ // src/components/icons/icons.tsx
2
+ import { Icon as IconifyIcon } from "@iconify/react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ var Icon = ({ name, size = 24, className, loading = false, ...rest }) => {
5
+ const iconName = name.includes(":") ? name : `heroicons:${name}`;
6
+ const classes = ["icon", className].filter(Boolean).join(" ");
7
+ if (loading) {
8
+ const style = { width: size, height: size };
9
+ return /* @__PURE__ */ jsx(
10
+ "span",
11
+ {
12
+ className: `${classes} icon--skeleton`,
13
+ style,
14
+ "aria-hidden": rest["aria-label"] ? "false" : "true",
15
+ ...rest["aria-label"] ? { "aria-label": rest["aria-label"] } : {}
16
+ }
17
+ );
18
+ }
19
+ return /* @__PURE__ */ jsx(
20
+ IconifyIcon,
21
+ {
22
+ icon: iconName,
23
+ width: size,
24
+ height: size,
25
+ className: classes,
26
+ ...rest
27
+ }
28
+ );
29
+ };
30
+
31
+ // src/components/icons/iconConstants.ts
32
+ var BANNER_TYPE_ICONS = {
33
+ info: "information-circle-16-solid",
34
+ warning: "exclamation-triangle-16-solid",
35
+ error: "x-circle-16-solid",
36
+ success: "check-circle-16-solid"
37
+ };
38
+ var ACTION_ICONS = {
39
+ close: "x-mark-solid",
40
+ back: "arrow-left-solid",
41
+ forward: "arrow-right-solid",
42
+ up: "arrow-up-solid",
43
+ down: "arrow-down-solid",
44
+ expand: "chevron-down-solid",
45
+ collapse: "chevron-up-solid",
46
+ menu: "bars-3-solid",
47
+ more: "ellipsis-horizontal-solid",
48
+ check: "check-solid",
49
+ cross: "x-mark-solid",
50
+ plus: "plus-solid",
51
+ minus: "minus-solid",
52
+ search: "magnifying-glass-solid",
53
+ clear: "x-mark-solid",
54
+ loading: "arrow-path-solid",
55
+ error: "exclamation-triangle-solid",
56
+ warning: "exclamation-triangle-solid",
57
+ info: "information-circle-solid",
58
+ success: "check-circle-solid"
59
+ };
60
+
61
+ // src/components/button/button.tsx
62
+ import React from "react";
63
+ import { Button as AriakitButton } from "@ariakit/react";
64
+ import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
65
+ var Button = React.forwardRef(
66
+ ({
67
+ variant = "primary",
68
+ size = "md",
69
+ children,
70
+ isLoading = false,
71
+ disabled = false,
72
+ fullWidth = false,
73
+ startIcon,
74
+ endIcon,
75
+ iconOnly = false,
76
+ href,
77
+ active = false,
78
+ className,
79
+ onClick,
80
+ ...props
81
+ }, ref) => {
82
+ const buttonClasses = [
83
+ "btn",
84
+ `btn--${variant}`,
85
+ `btn--${size}`,
86
+ fullWidth && "btn--full-width",
87
+ iconOnly && "btn--icon-only",
88
+ active && "btn--active",
89
+ className
90
+ ].filter(Boolean).join(" ");
91
+ const iconSize = size === "xs" ? 14 : size === "sm" ? 16 : size === "lg" ? 24 : 20;
92
+ const buttonContent = /* @__PURE__ */ jsxs(Fragment, { children: [
93
+ isLoading && /* @__PURE__ */ jsx2("span", { className: "btn__spinner" }),
94
+ startIcon && (isLoading ? /* @__PURE__ */ jsx2("span", { className: "btn__icon-placeholder", style: { width: iconSize, height: iconSize } }) : /* @__PURE__ */ jsx2(Icon, { name: startIcon, size: iconSize, className: "btn__icon" })),
95
+ !iconOnly && children,
96
+ endIcon && /* @__PURE__ */ jsx2(Icon, { name: endIcon, size: iconSize, className: "btn__icon" })
97
+ ] });
98
+ const handleClick = (e) => {
99
+ if (href && !isLoading && !disabled) {
100
+ window.location.href = href;
101
+ }
102
+ onClick?.(e);
103
+ };
104
+ return /* @__PURE__ */ jsx2(
105
+ AriakitButton,
106
+ {
107
+ ref,
108
+ disabled: disabled || isLoading,
109
+ className: buttonClasses,
110
+ onClick: handleClick,
111
+ ...props,
112
+ children: buttonContent
113
+ }
114
+ );
115
+ }
116
+ );
117
+ Button.displayName = "Button";
118
+
119
+ // src/components/banner/Banner.tsx
120
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
121
+ var Banner = ({
122
+ type = "info",
123
+ children,
124
+ icon,
125
+ onDismiss
126
+ }) => {
127
+ const displayIcon = icon || BANNER_TYPE_ICONS[type];
128
+ return /* @__PURE__ */ jsxs2("div", { className: `banner banner--${type}`, children: [
129
+ /* @__PURE__ */ jsxs2("div", { className: "banner__content", children: [
130
+ /* @__PURE__ */ jsx3(Icon, { name: displayIcon, size: 32 }),
131
+ /* @__PURE__ */ jsx3("div", { className: "banner__message", children })
132
+ ] }),
133
+ onDismiss && /* @__PURE__ */ jsx3(
134
+ Button,
135
+ {
136
+ variant: "ghost",
137
+ size: "xs",
138
+ onClick: onDismiss,
139
+ "aria-label": "Dismiss banner",
140
+ children: /* @__PURE__ */ jsx3(Icon, { name: ACTION_ICONS.close, size: 20 })
141
+ }
142
+ )
143
+ ] });
144
+ };
145
+ export {
146
+ Banner
147
+ };
@@ -0,0 +1,289 @@
1
+ /* src/style/components/icons/icons.css */
2
+ .icon {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ }
7
+ .icon--skeleton {
8
+ background:
9
+ linear-gradient(
10
+ 90deg,
11
+ rgba(0, 0, 0, 0.06) 0%,
12
+ rgba(0, 0, 0, 0.03) 50%,
13
+ rgba(0, 0, 0, 0.06) 100%);
14
+ border-radius: 4px;
15
+ animation: hb-skeleton 1.2s ease-in-out infinite;
16
+ }
17
+ @keyframes hb-skeleton {
18
+ 0% {
19
+ background-position: 200% 0;
20
+ }
21
+ 100% {
22
+ background-position: -200% 0;
23
+ }
24
+ }
25
+ .icon {
26
+ display: inline-block;
27
+ flex-shrink: 0;
28
+ transition: color var(--transition-base, 0.2s ease);
29
+ }
30
+ .icon--interactive {
31
+ cursor: pointer;
32
+ color: var(--color-foreground-1);
33
+ }
34
+ .icon--interactive:hover:not(:disabled) {
35
+ color: var(--color-action-primary-hover);
36
+ }
37
+ .icon--interactive:active:not(:disabled) {
38
+ color: var(--color-action-primary-active);
39
+ }
40
+ .icon--interactive:disabled {
41
+ cursor: not-allowed;
42
+ color: var(--color-foreground-2);
43
+ }
44
+
45
+ /* src/style/components/button-group/button-group.css */
46
+ .btn-group {
47
+ position: relative;
48
+ display: inline-flex;
49
+ gap: 0;
50
+ isolation: isolate;
51
+ }
52
+ .btn-group--horizontal {
53
+ flex-direction: row;
54
+ }
55
+ .btn-group--vertical {
56
+ flex-direction: column;
57
+ }
58
+ .btn-group--full-width {
59
+ width: 100%;
60
+ }
61
+ .btn-group--full-width .btn-group__button {
62
+ flex: 1;
63
+ }
64
+ .btn-group__button {
65
+ position: relative;
66
+ display: inline-flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ gap: var(--spacing-2);
70
+ white-space: nowrap;
71
+ text-decoration: none;
72
+ user-select: none;
73
+ border: 1px solid transparent;
74
+ font-family: var(--font-family-action);
75
+ font-weight: var(--font-weight-semibold);
76
+ line-height: var(--line-height-normal);
77
+ letter-spacing: var(--letter-spacing-normal);
78
+ transition: var(--motion-transition-hover-in), transform var(--motion-duration-fast) var(--motion-easing-linear);
79
+ cursor: pointer;
80
+ flex-shrink: 0;
81
+ }
82
+ .btn-group__button:not(:hover):not(:active) {
83
+ transition: var(--motion-transition-hover-out), transform var(--motion-duration-fast) var(--motion-easing-accelerate);
84
+ }
85
+ .btn-group--horizontal .btn-group__button {
86
+ border-radius: 0;
87
+ margin-left: -1px;
88
+ }
89
+ .btn-group--horizontal .btn-group__button:first-child {
90
+ border-top-left-radius: var(--radius-base);
91
+ border-bottom-left-radius: var(--radius-base);
92
+ margin-left: 0;
93
+ }
94
+ .btn-group--horizontal .btn-group__button:last-child {
95
+ border-top-right-radius: var(--radius-base);
96
+ border-bottom-right-radius: var(--radius-base);
97
+ }
98
+ .btn-group--vertical .btn-group__button {
99
+ border-radius: 0;
100
+ margin-top: -1px;
101
+ }
102
+ .btn-group--vertical .btn-group__button:first-child {
103
+ border-top-left-radius: var(--radius-base);
104
+ border-top-right-radius: var(--radius-base);
105
+ margin-top: 0;
106
+ }
107
+ .btn-group--vertical .btn-group__button:last-child {
108
+ border-bottom-left-radius: var(--radius-base);
109
+ border-bottom-right-radius: var(--radius-base);
110
+ }
111
+ .btn-group__button:hover:not(:disabled),
112
+ .btn-group__button:focus-visible:not(:disabled),
113
+ .btn-group__button--selected {
114
+ z-index: 1;
115
+ }
116
+ .btn-group--xs .btn-group__button {
117
+ padding: var(--spacing-1);
118
+ font-size: var(--font-size-xs);
119
+ }
120
+ .btn-group--sm .btn-group__button {
121
+ padding: var(--spacing-2) var(--spacing-3);
122
+ font-size: var(--font-size-sm);
123
+ min-height: 32px;
124
+ }
125
+ .btn-group--md .btn-group__button {
126
+ padding: var(--spacing-2) var(--spacing-4);
127
+ font-size: var(--font-size-base);
128
+ min-height: 40px;
129
+ }
130
+ .btn-group--lg .btn-group__button {
131
+ padding: var(--spacing-3) var(--spacing-6);
132
+ font-size: var(--font-size-lg);
133
+ min-height: 48px;
134
+ }
135
+ .btn-group--primary .btn-group__button {
136
+ background-color: var(--color-background-1);
137
+ color: var(--color-foreground-2);
138
+ border-color: var(--color-action-primary);
139
+ }
140
+ .btn-group--primary .btn-group__button:hover:not(:disabled):not(.btn-group__button--selected) {
141
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-hover), 0.1);
142
+ border-color: var(--color-action-primary-hover);
143
+ }
144
+ .btn-group--primary .btn-group__button:active:not(:disabled) {
145
+ transform: scale(0.98);
146
+ }
147
+ .btn-group--primary .btn-group__button--selected {
148
+ background-color: var(--color-action-primary);
149
+ color: var(--color-on-action-primary);
150
+ border-color: var(--color-action-primary);
151
+ }
152
+ .btn-group--primary .btn-group__button--selected:hover:not(:disabled) {
153
+ background-color: var(--color-action-primary-hover);
154
+ border-color: var(--color-action-primary-hover);
155
+ }
156
+ .btn-group--primary .btn-group__button:focus-visible:not(:disabled) {
157
+ outline: 2px solid var(--color-action-primary);
158
+ outline-offset: 2px;
159
+ }
160
+ .btn-group--secondary .btn-group__button {
161
+ background-color: var(--color-background-1);
162
+ color: var(--color-foreground-2);
163
+ border-color: var(--color-action-secondary);
164
+ }
165
+ .btn-group--secondary .btn-group__button:hover:not(:disabled):not(.btn-group__button--selected) {
166
+ background-color: var(--color-background-2);
167
+ border-color: var(--color-action-secondary-hover);
168
+ }
169
+ .btn-group--secondary .btn-group__button:active:not(:disabled) {
170
+ transform: scale(0.98);
171
+ }
172
+ .btn-group--secondary .btn-group__button--selected {
173
+ background-color: var(--color-action-secondary);
174
+ color: var(--color-on-action-secondary);
175
+ border-color: var(--color-action-secondary);
176
+ }
177
+ .btn-group--secondary .btn-group__button--selected:hover:not(:disabled) {
178
+ background-color: var(--color-action-secondary-hover);
179
+ border-color: var(--color-action-secondary-hover);
180
+ }
181
+ .btn-group--secondary .btn-group__button:focus-visible:not(:disabled) {
182
+ outline: 2px solid var(--color-action-secondary);
183
+ outline-offset: 2px;
184
+ }
185
+ .btn-group--tertiary .btn-group__button {
186
+ background-color: transparent;
187
+ color: var(--color-foreground-2);
188
+ border-color: var(--color-action-tertiary);
189
+ border-width: 2px;
190
+ margin-left: -2px;
191
+ }
192
+ .btn-group--tertiary .btn-group__button:first-child {
193
+ margin-left: 0;
194
+ }
195
+ .btn-group--vertical.btn-group--tertiary .btn-group__button {
196
+ margin-left: 0;
197
+ margin-top: -2px;
198
+ }
199
+ .btn-group--vertical.btn-group--tertiary .btn-group__button:first-child {
200
+ margin-top: 0;
201
+ }
202
+ .btn-group--tertiary .btn-group__button:hover:not(:disabled):not(.btn-group__button--selected) {
203
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-hover), 0.2);
204
+ border-color: var(--color-action-primary-hover);
205
+ color: var(--color-foreground-2);
206
+ }
207
+ .btn-group--tertiary .btn-group__button:active:not(:disabled) {
208
+ transform: scale(0.98);
209
+ }
210
+ .btn-group--tertiary .btn-group__button--selected {
211
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness), 0.2);
212
+ color: var(--color-action-primary);
213
+ border-color: var(--color-action-primary);
214
+ }
215
+ .btn-group--tertiary .btn-group__button--selected:hover:not(:disabled) {
216
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-hover), 0.3);
217
+ border-color: var(--color-action-primary-hover);
218
+ }
219
+ .btn-group--tertiary .btn-group__button:focus-visible:not(:disabled) {
220
+ outline: 2px solid var(--color-action-primary);
221
+ outline-offset: 2px;
222
+ }
223
+ .btn-group--ghost .btn-group__button {
224
+ background-color: transparent;
225
+ color: var(--color-foreground-2);
226
+ border-color: transparent;
227
+ border-width: 2px;
228
+ margin-left: -2px;
229
+ }
230
+ .btn-group--ghost .btn-group__button:first-child {
231
+ margin-left: 0;
232
+ }
233
+ .btn-group--vertical.btn-group--ghost .btn-group__button {
234
+ margin-left: 0;
235
+ margin-top: -2px;
236
+ }
237
+ .btn-group--vertical.btn-group--ghost .btn-group__button:first-child {
238
+ margin-top: 0;
239
+ }
240
+ .btn-group--ghost .btn-group__button:hover:not(:disabled):not(.btn-group__button--selected) {
241
+ background-color: transparent;
242
+ border-color: var(--color-action-primary-hover);
243
+ color: var(--color-foreground-2);
244
+ }
245
+ .btn-group--ghost .btn-group__button:active:not(:disabled) {
246
+ transform: scale(0.98);
247
+ }
248
+ .btn-group--ghost .btn-group__button--selected {
249
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness), 0.2);
250
+ color: var(--color-action-primary);
251
+ border-color: var(--color-action-primary);
252
+ }
253
+ .btn-group--ghost .btn-group__button--selected:hover:not(:disabled) {
254
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-hover), 0.3);
255
+ border-color: var(--color-action-primary-hover);
256
+ }
257
+ .btn-group--ghost .btn-group__button:focus-visible:not(:disabled) {
258
+ outline: 2px solid var(--color-action-primary);
259
+ outline-offset: 2px;
260
+ }
261
+ .btn-group__button--disabled,
262
+ .btn-group__button:disabled {
263
+ background-color: var(--color-primary-disabled);
264
+ color: var(--color-foreground-2);
265
+ cursor: not-allowed;
266
+ border-color: var(--color-primary-disabled);
267
+ opacity: 0.5;
268
+ }
269
+ .btn-group--disabled .btn-group__button {
270
+ cursor: not-allowed;
271
+ opacity: 0.5;
272
+ }
273
+ .btn-group__icon {
274
+ flex-shrink: 0;
275
+ }
276
+ @media (hover: none) and (pointer: coarse) {
277
+ .btn-group--primary .btn-group__button:active:not(:disabled) {
278
+ background-color: var(--color-action-primary-active);
279
+ }
280
+ .btn-group--secondary .btn-group__button:active:not(:disabled) {
281
+ background-color: var(--color-action-secondary-active);
282
+ }
283
+ .btn-group--tertiary .btn-group__button:active:not(:disabled) {
284
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-active), 0.2);
285
+ }
286
+ .btn-group--ghost .btn-group__button:active:not(:disabled) {
287
+ background-color: hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness-active), 0.2);
288
+ }
289
+ }
@@ -0,0 +1,81 @@
1
+ import React__default, { ReactNode } from 'react';
2
+ import { a as IconName } from '../icons-Czahnf-r.mjs';
3
+
4
+ type ButtonGroupVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost';
5
+ type ButtonGroupSize = 'xs' | 'sm' | 'md' | 'lg';
6
+ type ButtonGroupOrientation = 'horizontal' | 'vertical';
7
+ type ButtonGroupMode = 'single' | 'multiple';
8
+ interface ButtonGroupOption {
9
+ /**
10
+ * Unique value for this option
11
+ */
12
+ value: string;
13
+ /**
14
+ * Label text to display
15
+ */
16
+ label: ReactNode;
17
+ /**
18
+ * Optional icon to display
19
+ */
20
+ icon?: IconName;
21
+ /**
22
+ * Whether this option is disabled
23
+ * @default false
24
+ */
25
+ disabled?: boolean;
26
+ }
27
+ interface ButtonGroupProps {
28
+ /**
29
+ * Visual variant of the button group
30
+ * @default 'primary'
31
+ */
32
+ variant?: ButtonGroupVariant;
33
+ /**
34
+ * Size of the buttons
35
+ * @default 'md'
36
+ */
37
+ size?: ButtonGroupSize;
38
+ /**
39
+ * Orientation of the button group
40
+ * @default 'horizontal'
41
+ */
42
+ orientation?: ButtonGroupOrientation;
43
+ /**
44
+ * Selection mode
45
+ * @default 'single'
46
+ */
47
+ mode?: ButtonGroupMode;
48
+ /**
49
+ * Options to display
50
+ */
51
+ options: ButtonGroupOption[];
52
+ /**
53
+ * Currently selected value(s)
54
+ * - For single mode: string
55
+ * - For multiple mode: string[]
56
+ */
57
+ value?: string | string[];
58
+ /**
59
+ * Callback when selection changes
60
+ * - For single mode: (value: string) => void
61
+ * - For multiple mode: (values: string[]) => void
62
+ */
63
+ onChange?: (value: string | string[]) => void;
64
+ /**
65
+ * Full width button group
66
+ * @default false
67
+ */
68
+ fullWidth?: boolean;
69
+ /**
70
+ * Whether the button group is disabled
71
+ * @default false
72
+ */
73
+ disabled?: boolean;
74
+ /**
75
+ * Additional CSS class name
76
+ */
77
+ className?: string;
78
+ }
79
+ declare const ButtonGroup: React__default.ForwardRefExoticComponent<ButtonGroupProps & React__default.RefAttributes<HTMLDivElement>>;
80
+
81
+ export { ButtonGroup, type ButtonGroupMode, type ButtonGroupOption, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonGroupSize, type ButtonGroupVariant };
@@ -0,0 +1,81 @@
1
+ import React__default, { ReactNode } from 'react';
2
+ import { a as IconName } from '../icons-Czahnf-r.js';
3
+
4
+ type ButtonGroupVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost';
5
+ type ButtonGroupSize = 'xs' | 'sm' | 'md' | 'lg';
6
+ type ButtonGroupOrientation = 'horizontal' | 'vertical';
7
+ type ButtonGroupMode = 'single' | 'multiple';
8
+ interface ButtonGroupOption {
9
+ /**
10
+ * Unique value for this option
11
+ */
12
+ value: string;
13
+ /**
14
+ * Label text to display
15
+ */
16
+ label: ReactNode;
17
+ /**
18
+ * Optional icon to display
19
+ */
20
+ icon?: IconName;
21
+ /**
22
+ * Whether this option is disabled
23
+ * @default false
24
+ */
25
+ disabled?: boolean;
26
+ }
27
+ interface ButtonGroupProps {
28
+ /**
29
+ * Visual variant of the button group
30
+ * @default 'primary'
31
+ */
32
+ variant?: ButtonGroupVariant;
33
+ /**
34
+ * Size of the buttons
35
+ * @default 'md'
36
+ */
37
+ size?: ButtonGroupSize;
38
+ /**
39
+ * Orientation of the button group
40
+ * @default 'horizontal'
41
+ */
42
+ orientation?: ButtonGroupOrientation;
43
+ /**
44
+ * Selection mode
45
+ * @default 'single'
46
+ */
47
+ mode?: ButtonGroupMode;
48
+ /**
49
+ * Options to display
50
+ */
51
+ options: ButtonGroupOption[];
52
+ /**
53
+ * Currently selected value(s)
54
+ * - For single mode: string
55
+ * - For multiple mode: string[]
56
+ */
57
+ value?: string | string[];
58
+ /**
59
+ * Callback when selection changes
60
+ * - For single mode: (value: string) => void
61
+ * - For multiple mode: (values: string[]) => void
62
+ */
63
+ onChange?: (value: string | string[]) => void;
64
+ /**
65
+ * Full width button group
66
+ * @default false
67
+ */
68
+ fullWidth?: boolean;
69
+ /**
70
+ * Whether the button group is disabled
71
+ * @default false
72
+ */
73
+ disabled?: boolean;
74
+ /**
75
+ * Additional CSS class name
76
+ */
77
+ className?: string;
78
+ }
79
+ declare const ButtonGroup: React__default.ForwardRefExoticComponent<ButtonGroupProps & React__default.RefAttributes<HTMLDivElement>>;
80
+
81
+ export { ButtonGroup, type ButtonGroupMode, type ButtonGroupOption, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonGroupSize, type ButtonGroupVariant };