@refine-studio/ui 0.0.0 → 0.2.0

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -2
  3. package/dist/components/accordion/accordion.d.ts +15 -0
  4. package/dist/components/accordion/accordion.js +58 -0
  5. package/dist/components/accordion/accordion.js.map +1 -0
  6. package/dist/components/alert/alert.d.ts +24 -0
  7. package/dist/components/alert/alert.js +98 -0
  8. package/dist/components/alert/alert.js.map +1 -0
  9. package/dist/components/alert-dialog/alert-dialog.d.ts +36 -0
  10. package/dist/components/alert-dialog/alert-dialog.js +112 -0
  11. package/dist/components/alert-dialog/alert-dialog.js.map +1 -0
  12. package/dist/components/app-shell/app-shell.d.ts +77 -0
  13. package/dist/components/app-shell/app-shell.js +224 -0
  14. package/dist/components/app-shell/app-shell.js.map +1 -0
  15. package/dist/components/avatar/avatar.d.ts +32 -0
  16. package/dist/components/avatar/avatar.js +83 -0
  17. package/dist/components/avatar/avatar.js.map +1 -0
  18. package/dist/components/badge/badge.d.ts +15 -0
  19. package/dist/components/badge/badge.js +50 -0
  20. package/dist/components/badge/badge.js.map +1 -0
  21. package/dist/components/breadcrumb/breadcrumb.d.ts +24 -0
  22. package/dist/components/breadcrumb/breadcrumb.js +82 -0
  23. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  24. package/dist/components/button/button.d.ts +15 -0
  25. package/dist/components/button/button.js +75 -0
  26. package/dist/components/button/button.js.map +1 -0
  27. package/dist/components/card/card.d.ts +46 -0
  28. package/dist/components/card/card.js +124 -0
  29. package/dist/components/card/card.js.map +1 -0
  30. package/dist/components/checkbox/checkbox.d.ts +6 -0
  31. package/dist/components/checkbox/checkbox.js +31 -0
  32. package/dist/components/checkbox/checkbox.js.map +1 -0
  33. package/dist/components/chip/chip.d.ts +25 -0
  34. package/dist/components/chip/chip.js +54 -0
  35. package/dist/components/chip/chip.js.map +1 -0
  36. package/dist/components/code/code.d.ts +15 -0
  37. package/dist/components/code/code.js +63 -0
  38. package/dist/components/code/code.js.map +1 -0
  39. package/dist/components/collapsible/collapsible.d.ts +14 -0
  40. package/dist/components/collapsible/collapsible.js +55 -0
  41. package/dist/components/collapsible/collapsible.js.map +1 -0
  42. package/dist/components/combobox/combobox.d.ts +33 -0
  43. package/dist/components/combobox/combobox.js +244 -0
  44. package/dist/components/combobox/combobox.js.map +1 -0
  45. package/dist/components/command-menu/command-menu.d.ts +35 -0
  46. package/dist/components/command-menu/command-menu.js +116 -0
  47. package/dist/components/command-menu/command-menu.js.map +1 -0
  48. package/dist/components/context-menu/context-menu.d.ts +45 -0
  49. package/dist/components/context-menu/context-menu.js +136 -0
  50. package/dist/components/context-menu/context-menu.js.map +1 -0
  51. package/dist/components/data-table/data-table.d.ts +49 -0
  52. package/dist/components/data-table/data-table.js +171 -0
  53. package/dist/components/data-table/data-table.js.map +1 -0
  54. package/dist/components/data-table/sort-rows.d.ts +6 -0
  55. package/dist/components/data-table/sort-rows.js +33 -0
  56. package/dist/components/data-table/sort-rows.js.map +1 -0
  57. package/dist/components/dialog/dialog.d.ts +42 -0
  58. package/dist/components/dialog/dialog.js +118 -0
  59. package/dist/components/dialog/dialog.js.map +1 -0
  60. package/dist/components/dropdown-menu/dropdown-menu.d.ts +45 -0
  61. package/dist/components/dropdown-menu/dropdown-menu.js +137 -0
  62. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -0
  63. package/dist/components/dropdown-menu/menu-styles.d.ts +10 -0
  64. package/dist/components/dropdown-menu/menu-styles.js +34 -0
  65. package/dist/components/dropdown-menu/menu-styles.js.map +1 -0
  66. package/dist/components/empty-state/empty-state.d.ts +12 -0
  67. package/dist/components/empty-state/empty-state.js +46 -0
  68. package/dist/components/empty-state/empty-state.js.map +1 -0
  69. package/dist/components/eyebrow/eyebrow.d.ts +9 -0
  70. package/dist/components/eyebrow/eyebrow.js +25 -0
  71. package/dist/components/eyebrow/eyebrow.js.map +1 -0
  72. package/dist/components/field/field.d.ts +56 -0
  73. package/dist/components/field/field.js +135 -0
  74. package/dist/components/field/field.js.map +1 -0
  75. package/dist/components/glow-border/glow-border.d.ts +9 -0
  76. package/dist/components/glow-border/glow-border.js +39 -0
  77. package/dist/components/glow-border/glow-border.js.map +1 -0
  78. package/dist/components/hex-field/hex-field.d.ts +12 -0
  79. package/dist/components/hex-field/hex-field.js +86 -0
  80. package/dist/components/hex-field/hex-field.js.map +1 -0
  81. package/dist/components/input/input.d.ts +14 -0
  82. package/dist/components/input/input.js +52 -0
  83. package/dist/components/input/input.js.map +1 -0
  84. package/dist/components/kbd/kbd.d.ts +9 -0
  85. package/dist/components/kbd/kbd.js +26 -0
  86. package/dist/components/kbd/kbd.js.map +1 -0
  87. package/dist/components/label/label.d.ts +6 -0
  88. package/dist/components/label/label.js +17 -0
  89. package/dist/components/label/label.js.map +1 -0
  90. package/dist/components/logo/logo-paths.d.ts +5 -0
  91. package/dist/components/logo/logo-paths.js +20 -0
  92. package/dist/components/logo/logo-paths.js.map +1 -0
  93. package/dist/components/logo/logo.d.ts +18 -0
  94. package/dist/components/logo/logo.js +94 -0
  95. package/dist/components/logo/logo.js.map +1 -0
  96. package/dist/components/marquee/marquee.d.ts +15 -0
  97. package/dist/components/marquee/marquee.js +54 -0
  98. package/dist/components/marquee/marquee.js.map +1 -0
  99. package/dist/components/page-header/page-header.d.ts +15 -0
  100. package/dist/components/page-header/page-header.js +50 -0
  101. package/dist/components/page-header/page-header.js.map +1 -0
  102. package/dist/components/pagination/pagination.d.ts +28 -0
  103. package/dist/components/pagination/pagination.js +95 -0
  104. package/dist/components/pagination/pagination.js.map +1 -0
  105. package/dist/components/popover/popover.d.ts +14 -0
  106. package/dist/components/popover/popover.js +48 -0
  107. package/dist/components/popover/popover.js.map +1 -0
  108. package/dist/components/progress/progress.d.ts +14 -0
  109. package/dist/components/progress/progress.js +41 -0
  110. package/dist/components/progress/progress.js.map +1 -0
  111. package/dist/components/radio-group/radio-group.d.ts +10 -0
  112. package/dist/components/radio-group/radio-group.js +33 -0
  113. package/dist/components/radio-group/radio-group.js.map +1 -0
  114. package/dist/components/section-heading/section-heading.d.ts +18 -0
  115. package/dist/components/section-heading/section-heading.js +57 -0
  116. package/dist/components/section-heading/section-heading.js.map +1 -0
  117. package/dist/components/select/select.d.ts +32 -0
  118. package/dist/components/select/select.js +100 -0
  119. package/dist/components/select/select.js.map +1 -0
  120. package/dist/components/separator/separator.d.ts +10 -0
  121. package/dist/components/separator/separator.js +37 -0
  122. package/dist/components/separator/separator.js.map +1 -0
  123. package/dist/components/sheet/sheet.d.ts +29 -0
  124. package/dist/components/sheet/sheet.js +130 -0
  125. package/dist/components/sheet/sheet.js.map +1 -0
  126. package/dist/components/skeleton/skeleton.d.ts +5 -0
  127. package/dist/components/skeleton/skeleton.js +18 -0
  128. package/dist/components/skeleton/skeleton.js.map +1 -0
  129. package/dist/components/slider/slider.d.ts +10 -0
  130. package/dist/components/slider/slider.js +36 -0
  131. package/dist/components/slider/slider.js.map +1 -0
  132. package/dist/components/spinner/spinner.d.ts +9 -0
  133. package/dist/components/spinner/spinner.js +40 -0
  134. package/dist/components/spinner/spinner.js.map +1 -0
  135. package/dist/components/spotlight/spotlight.d.ts +9 -0
  136. package/dist/components/spotlight/spotlight.js +32 -0
  137. package/dist/components/spotlight/spotlight.js.map +1 -0
  138. package/dist/components/starfield/starfield.d.ts +11 -0
  139. package/dist/components/starfield/starfield.js +76 -0
  140. package/dist/components/starfield/starfield.js.map +1 -0
  141. package/dist/components/stat/stat.d.ts +28 -0
  142. package/dist/components/stat/stat.js +100 -0
  143. package/dist/components/stat/stat.js.map +1 -0
  144. package/dist/components/switch/switch.d.ts +13 -0
  145. package/dist/components/switch/switch.js +44 -0
  146. package/dist/components/switch/switch.js.map +1 -0
  147. package/dist/components/table/table.d.ts +52 -0
  148. package/dist/components/table/table.js +96 -0
  149. package/dist/components/table/table.js.map +1 -0
  150. package/dist/components/tabs/tabs.d.ts +24 -0
  151. package/dist/components/tabs/tabs.js +89 -0
  152. package/dist/components/tabs/tabs.js.map +1 -0
  153. package/dist/components/textarea/textarea.d.ts +5 -0
  154. package/dist/components/textarea/textarea.js +20 -0
  155. package/dist/components/textarea/textarea.js.map +1 -0
  156. package/dist/components/theme-switcher/theme-switcher.d.ts +7 -0
  157. package/dist/components/theme-switcher/theme-switcher.js +57 -0
  158. package/dist/components/theme-switcher/theme-switcher.js.map +1 -0
  159. package/dist/components/toaster/toaster.d.ts +7 -0
  160. package/dist/components/toaster/toaster.js +43 -0
  161. package/dist/components/toaster/toaster.js.map +1 -0
  162. package/dist/components/toggle-group/toggle-group.d.ts +24 -0
  163. package/dist/components/toggle-group/toggle-group.js +84 -0
  164. package/dist/components/toggle-group/toggle-group.js.map +1 -0
  165. package/dist/components/tooltip/tooltip.d.ts +19 -0
  166. package/dist/components/tooltip/tooltip.js +49 -0
  167. package/dist/components/tooltip/tooltip.js.map +1 -0
  168. package/dist/fonts/geist-cyrillic-ext-wght-normal.woff2 +0 -0
  169. package/dist/fonts/geist-cyrillic-wght-normal.woff2 +0 -0
  170. package/dist/fonts/geist-latin-ext-wght-normal.woff2 +0 -0
  171. package/dist/fonts/geist-latin-wght-normal.woff2 +0 -0
  172. package/dist/fonts/geist-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  173. package/dist/fonts/geist-mono-cyrillic-wght-normal.woff2 +0 -0
  174. package/dist/fonts/geist-mono-latin-ext-wght-normal.woff2 +0 -0
  175. package/dist/fonts/geist-mono-latin-wght-normal.woff2 +0 -0
  176. package/dist/fonts/geist-mono-symbols2-wght-normal.woff2 +0 -0
  177. package/dist/fonts/geist-mono-vietnamese-wght-normal.woff2 +0 -0
  178. package/dist/fonts/geist-mono.LICENSE +93 -0
  179. package/dist/fonts/geist-vietnamese-wght-normal.woff2 +0 -0
  180. package/dist/fonts/geist.LICENSE +93 -0
  181. package/dist/icons/icon.d.ts +10 -0
  182. package/dist/icons/icon.js +13 -0
  183. package/dist/icons/icon.js.map +1 -0
  184. package/dist/icons/refine-icon-names.d.ts +5 -0
  185. package/dist/icons/refine-icon-names.js +16 -0
  186. package/dist/icons/refine-icon-names.js.map +1 -0
  187. package/dist/icons/refine-icons.d.ts +467 -0
  188. package/dist/icons/refine-icons.js +473 -0
  189. package/dist/icons/refine-icons.js.map +1 -0
  190. package/dist/icons/with-refine-weight.d.ts +11 -0
  191. package/dist/icons/with-refine-weight.js +25 -0
  192. package/dist/icons/with-refine-weight.js.map +1 -0
  193. package/dist/index.d.ts +61 -0
  194. package/dist/index.js +61 -0
  195. package/dist/lib/cn.d.ts +5 -0
  196. package/dist/lib/cn.js +49 -0
  197. package/dist/lib/cn.js.map +1 -0
  198. package/dist/lib/use-breakpoint.d.ts +16 -0
  199. package/dist/lib/use-breakpoint.js +52 -0
  200. package/dist/lib/use-breakpoint.js.map +1 -0
  201. package/dist/styles.css +697 -0
  202. package/dist/theme/theme-provider.d.ts +31 -0
  203. package/dist/theme/theme-provider.js +115 -0
  204. package/dist/theme/theme-provider.js.map +1 -0
  205. package/dist/theme/theme-scope.d.ts +12 -0
  206. package/dist/theme/theme-scope.js +22 -0
  207. package/dist/theme/theme-scope.js.map +1 -0
  208. package/dist/theme/theme.d.ts +20 -0
  209. package/dist/theme/theme.js +37 -0
  210. package/dist/theme/theme.js.map +1 -0
  211. package/package.json +91 -5
@@ -0,0 +1,137 @@
1
+ "use client";
2
+ import { cn } from "../../lib/cn.js";
3
+ import { RefineIconCheck, RefineIconChevronRight, RefineIconCircleFilled } from "../../icons/refine-icons.js";
4
+ import { MENU_CONTENT_CLASS_NAME, MENU_INDICATOR_CLASS_NAME, MENU_INDICATOR_ITEM_CLASS_NAME, MENU_LABEL_CLASS_NAME, MENU_SEPARATOR_CLASS_NAME, MENU_SHORTCUT_CLASS_NAME, menuItemVariants } from "./menu-styles.js";
5
+ import { DropdownMenu } from "radix-ui";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ // src/components/dropdown-menu/dropdown-menu.tsx
8
+ /**
9
+ * Holds the open state of a menu of actions opened from a trigger.
10
+ */
11
+ var DropdownMenu$1 = (props) => {
12
+ return /* @__PURE__ */ jsx(DropdownMenu.Root, {
13
+ "data-slot": "dropdown-menu",
14
+ ...props
15
+ });
16
+ };
17
+ var DropdownMenuTrigger = (props) => {
18
+ return /* @__PURE__ */ jsx(DropdownMenu.Trigger, {
19
+ "data-slot": "dropdown-menu-trigger",
20
+ ...props
21
+ });
22
+ };
23
+ var DropdownMenuGroup = (props) => {
24
+ return /* @__PURE__ */ jsx(DropdownMenu.Group, {
25
+ "data-slot": "dropdown-menu-group",
26
+ ...props
27
+ });
28
+ };
29
+ var DropdownMenuRadioGroup = (props) => {
30
+ return /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, {
31
+ "data-slot": "dropdown-menu-radio-group",
32
+ ...props
33
+ });
34
+ };
35
+ var DropdownMenuSub = (props) => {
36
+ return /* @__PURE__ */ jsx(DropdownMenu.Sub, {
37
+ "data-slot": "dropdown-menu-sub",
38
+ ...props
39
+ });
40
+ };
41
+ /**
42
+ * Portals the menu panel next to its trigger.
43
+ */
44
+ var DropdownMenuContent = ({ className, sideOffset = 6, ...props }) => {
45
+ return /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu.Content, {
46
+ className: cn(MENU_CONTENT_CLASS_NAME, "origin-(--radix-dropdown-menu-content-transform-origin)", className),
47
+ "data-slot": "dropdown-menu-content",
48
+ sideOffset,
49
+ ...props
50
+ }) });
51
+ };
52
+ /**
53
+ * Runs an action; the `danger` variant marks destructive ones.
54
+ */
55
+ var DropdownMenuItem = ({ className, inset, variant, ...props }) => {
56
+ return /* @__PURE__ */ jsx(DropdownMenu.Item, {
57
+ className: cn(menuItemVariants({
58
+ inset,
59
+ variant
60
+ }), className),
61
+ "data-slot": "dropdown-menu-item",
62
+ ...props
63
+ });
64
+ };
65
+ /**
66
+ * Toggles a setting and shows a check while it is on.
67
+ */
68
+ var DropdownMenuCheckboxItem = ({ children, className, ...props }) => {
69
+ return /* @__PURE__ */ jsxs(DropdownMenu.CheckboxItem, {
70
+ className: cn(MENU_INDICATOR_ITEM_CLASS_NAME, className),
71
+ "data-slot": "dropdown-menu-checkbox-item",
72
+ ...props,
73
+ children: [/* @__PURE__ */ jsx("span", {
74
+ className: MENU_INDICATOR_CLASS_NAME,
75
+ children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(RefineIconCheck, { className: "size-4 text-gem-ink" }) })
76
+ }), children]
77
+ });
78
+ };
79
+ /**
80
+ * Picks one option of its radio group and marks it with a dot.
81
+ */
82
+ var DropdownMenuRadioItem = ({ children, className, ...props }) => {
83
+ return /* @__PURE__ */ jsxs(DropdownMenu.RadioItem, {
84
+ className: cn(MENU_INDICATOR_ITEM_CLASS_NAME, className),
85
+ "data-slot": "dropdown-menu-radio-item",
86
+ ...props,
87
+ children: [/* @__PURE__ */ jsx("span", {
88
+ className: MENU_INDICATOR_CLASS_NAME,
89
+ children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(RefineIconCircleFilled, { className: "size-2 text-gem-ink" }) })
90
+ }), children]
91
+ });
92
+ };
93
+ var DropdownMenuLabel = ({ className, inset, ...props }) => {
94
+ return /* @__PURE__ */ jsx(DropdownMenu.Label, {
95
+ className: cn(MENU_LABEL_CLASS_NAME, { "pl-8": inset }, className),
96
+ "data-slot": "dropdown-menu-label",
97
+ ...props
98
+ });
99
+ };
100
+ var DropdownMenuSeparator = ({ className, ...props }) => {
101
+ return /* @__PURE__ */ jsx(DropdownMenu.Separator, {
102
+ className: cn(MENU_SEPARATOR_CLASS_NAME, className),
103
+ "data-slot": "dropdown-menu-separator",
104
+ ...props
105
+ });
106
+ };
107
+ /**
108
+ * Right-aligns a keyboard shortcut hint inside an item.
109
+ */
110
+ var DropdownMenuShortcut = ({ className, ...props }) => {
111
+ return /* @__PURE__ */ jsx("span", {
112
+ className: cn(MENU_SHORTCUT_CLASS_NAME, className),
113
+ "data-slot": "dropdown-menu-shortcut",
114
+ ...props
115
+ });
116
+ };
117
+ /**
118
+ * Opens a nested menu and points at it with a chevron.
119
+ */
120
+ var DropdownMenuSubTrigger = ({ children, className, inset, ...props }) => {
121
+ return /* @__PURE__ */ jsxs(DropdownMenu.SubTrigger, {
122
+ className: cn(menuItemVariants({ inset }), className),
123
+ "data-slot": "dropdown-menu-sub-trigger",
124
+ ...props,
125
+ children: [children, /* @__PURE__ */ jsx(RefineIconChevronRight, { className: "ml-auto size-4" })]
126
+ });
127
+ };
128
+ var DropdownMenuSubContent = ({ className, ...props }) => {
129
+ return /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu.SubContent, {
130
+ className: cn(MENU_CONTENT_CLASS_NAME, "origin-(--radix-dropdown-menu-content-transform-origin)", className),
131
+ "data-slot": "dropdown-menu-sub-content",
132
+ ...props
133
+ }) });
134
+ };
135
+ export { DropdownMenu$1 as DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
136
+
137
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","names":["DropdownMenu","DropdownMenuPrimitive"],"sources":["../../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["'use client';\n\nimport type { VariantProps } from 'class-variance-authority';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\n\nimport { cn } from '../../lib/cn';\nimport {\n MENU_CONTENT_CLASS_NAME,\n MENU_INDICATOR_CLASS_NAME,\n MENU_INDICATOR_ITEM_CLASS_NAME,\n MENU_LABEL_CLASS_NAME,\n MENU_SEPARATOR_CLASS_NAME,\n MENU_SHORTCUT_CLASS_NAME,\n menuItemVariants,\n} from './menu-styles';\nimport { RefineIconCheck, RefineIconChevronRight, RefineIconCircleFilled } from '../../icons/refine-icons';\n\n/**\n * Holds the open state of a menu of actions opened from a trigger.\n */\nexport const DropdownMenu = (props: ComponentProps<typeof DropdownMenuPrimitive.Root>) => {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n};\n\nexport const DropdownMenuTrigger = (props: ComponentProps<typeof DropdownMenuPrimitive.Trigger>) => {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n};\n\nexport const DropdownMenuGroup = (props: ComponentProps<typeof DropdownMenuPrimitive.Group>) => {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n};\n\nexport const DropdownMenuRadioGroup = (props: ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) => {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n};\n\nexport const DropdownMenuSub = (props: ComponentProps<typeof DropdownMenuPrimitive.Sub>) => {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n};\n\n/**\n * Portals the menu panel next to its trigger.\n */\nexport const DropdownMenuContent = ({\n className,\n sideOffset = 6,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) => {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n className={cn(MENU_CONTENT_CLASS_NAME, 'origin-(--radix-dropdown-menu-content-transform-origin)', className)}\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n};\n\ntype DropdownMenuItemProps = ComponentProps<typeof DropdownMenuPrimitive.Item> & VariantProps<typeof menuItemVariants>;\n\n/**\n * Runs an action; the `danger` variant marks destructive ones.\n */\nexport const DropdownMenuItem = ({ className, inset, variant, ...props }: DropdownMenuItemProps) => {\n return (\n <DropdownMenuPrimitive.Item\n className={cn(menuItemVariants({ inset, variant }), className)}\n data-slot=\"dropdown-menu-item\"\n {...props}\n />\n );\n};\n\n/**\n * Toggles a setting and shows a check while it is on.\n */\nexport const DropdownMenuCheckboxItem = ({\n children,\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) => {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n className={cn(MENU_INDICATOR_ITEM_CLASS_NAME, className)}\n data-slot=\"dropdown-menu-checkbox-item\"\n {...props}\n >\n <span className={MENU_INDICATOR_CLASS_NAME}>\n <DropdownMenuPrimitive.ItemIndicator>\n <RefineIconCheck className=\"size-4 text-gem-ink\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n};\n\n/**\n * Picks one option of its radio group and marks it with a dot.\n */\nexport const DropdownMenuRadioItem = ({\n children,\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) => {\n return (\n <DropdownMenuPrimitive.RadioItem\n className={cn(MENU_INDICATOR_ITEM_CLASS_NAME, className)}\n data-slot=\"dropdown-menu-radio-item\"\n {...props}\n >\n <span className={MENU_INDICATOR_CLASS_NAME}>\n <DropdownMenuPrimitive.ItemIndicator>\n <RefineIconCircleFilled className=\"size-2 text-gem-ink\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n};\n\nexport const DropdownMenuLabel = ({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) => {\n return (\n <DropdownMenuPrimitive.Label\n className={cn(MENU_LABEL_CLASS_NAME, { 'pl-8': inset }, className)}\n data-slot=\"dropdown-menu-label\"\n {...props}\n />\n );\n};\n\nexport const DropdownMenuSeparator = ({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) => {\n return (\n <DropdownMenuPrimitive.Separator\n className={cn(MENU_SEPARATOR_CLASS_NAME, className)}\n data-slot=\"dropdown-menu-separator\"\n {...props}\n />\n );\n};\n\n/**\n * Right-aligns a keyboard shortcut hint inside an item.\n */\nexport const DropdownMenuShortcut = ({ className, ...props }: ComponentProps<'span'>) => {\n return <span className={cn(MENU_SHORTCUT_CLASS_NAME, className)} data-slot=\"dropdown-menu-shortcut\" {...props} />;\n};\n\n/**\n * Opens a nested menu and points at it with a chevron.\n */\nexport const DropdownMenuSubTrigger = ({\n children,\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) => {\n return (\n <DropdownMenuPrimitive.SubTrigger\n className={cn(menuItemVariants({ inset }), className)}\n data-slot=\"dropdown-menu-sub-trigger\"\n {...props}\n >\n {children}\n <RefineIconChevronRight className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n};\n\nexport const DropdownMenuSubContent = ({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubContent>) => {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n className={cn(MENU_CONTENT_CLASS_NAME, 'origin-(--radix-dropdown-menu-content-transform-origin)', className)}\n data-slot=\"dropdown-menu-sub-content\"\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n};\n"],"mappings":";;;;;;;;;;AAqBA,IAAaA,kBAAgB,UAA6D;CACxF,OAAO,oBAACC,aAAsB,MAAvB;EAA4B,aAAU;EAAgB,GAAI;CAAQ,CAAA;AAC3E;AAEA,IAAa,uBAAuB,UAAgE;CAClG,OAAO,oBAACA,aAAsB,SAAvB;EAA+B,aAAU;EAAwB,GAAI;CAAQ,CAAA;AACtF;AAEA,IAAa,qBAAqB,UAA8D;CAC9F,OAAO,oBAACA,aAAsB,OAAvB;EAA6B,aAAU;EAAsB,GAAI;CAAQ,CAAA;AAClF;AAEA,IAAa,0BAA0B,UAAmE;CACxG,OAAO,oBAACA,aAAsB,YAAvB;EAAkC,aAAU;EAA4B,GAAI;CAAQ,CAAA;AAC7F;AAEA,IAAa,mBAAmB,UAA4D;CAC1F,OAAO,oBAACA,aAAsB,KAAvB;EAA2B,aAAU;EAAoB,GAAI;CAAQ,CAAA;AAC9E;;;;AAKA,IAAa,uBAAuB,EAClC,WACA,aAAa,GACb,GAAG,YACuD;CAC1D,OACE,oBAACA,aAAsB,QAAvB,EAAA,UACE,oBAACA,aAAsB,SAAvB;EACE,WAAW,GAAG,yBAAyB,2DAA2D,SAAS;EAC3G,aAAU;EACE;EACZ,GAAI;CACL,CAAA,EAC2B,CAAA;AAElC;;;;AAOA,IAAa,oBAAoB,EAAE,WAAW,OAAO,SAAS,GAAG,YAAmC;CAClG,OACE,oBAACA,aAAsB,MAAvB;EACE,WAAW,GAAG,iBAAiB;GAAE;GAAO;EAAQ,CAAC,GAAG,SAAS;EAC7D,aAAU;EACV,GAAI;CACL,CAAA;AAEL;;;;AAKA,IAAa,4BAA4B,EACvC,UACA,WACA,GAAG,YAC4D;CAC/D,OACE,qBAACA,aAAsB,cAAvB;EACE,WAAW,GAAG,gCAAgC,SAAS;EACvD,aAAU;EACV,GAAI;EAHN,UAAA,CAKE,oBAAC,QAAD;GAAM,WAAW;GACf,UAAA,oBAACA,aAAsB,eAAvB,EAAA,UACE,oBAAC,iBAAD,EAAiB,WAAU,sBAAuB,CAAA,EACf,CAAA;EACjC,CAAA,GACL,QACiC;;AAExC;;;;AAKA,IAAa,yBAAyB,EACpC,UACA,WACA,GAAG,YACyD;CAC5D,OACE,qBAACA,aAAsB,WAAvB;EACE,WAAW,GAAG,gCAAgC,SAAS;EACvD,aAAU;EACV,GAAI;EAHN,UAAA,CAKE,oBAAC,QAAD;GAAM,WAAW;GACf,UAAA,oBAACA,aAAsB,eAAvB,EAAA,UACE,oBAAC,wBAAD,EAAwB,WAAU,sBAAuB,CAAA,EACtB,CAAA;EACjC,CAAA,GACL,QAC8B;;AAErC;AAEA,IAAa,qBAAqB,EAChC,WACA,OACA,GAAG,YAGC;CACJ,OACE,oBAACA,aAAsB,OAAvB;EACE,WAAW,GAAG,uBAAuB,EAAE,QAAQ,MAAM,GAAG,SAAS;EACjE,aAAU;EACV,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,yBAAyB,EACpC,WACA,GAAG,YACyD;CAC5D,OACE,oBAACA,aAAsB,WAAvB;EACE,WAAW,GAAG,2BAA2B,SAAS;EAClD,aAAU;EACV,GAAI;CACL,CAAA;AAEL;;;;AAKA,IAAa,wBAAwB,EAAE,WAAW,GAAG,YAAoC;CACvF,OAAO,oBAAC,QAAD;EAAM,WAAW,GAAG,0BAA0B,SAAS;EAAG,aAAU;EAAyB,GAAI;CAAQ,CAAA;AAClH;;;;AAKA,IAAa,0BAA0B,EACrC,UACA,WACA,OACA,GAAG,YAGC;CACJ,OACE,qBAACA,aAAsB,YAAvB;EACE,WAAW,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,aAAU;EACV,GAAI;EAHN,UAAA,CAKG,UACD,oBAAC,wBAAD,EAAwB,WAAU,iBAAkB,CAAA,CACpB;;AAEtC;AAEA,IAAa,0BAA0B,EACrC,WACA,GAAG,YAC0D;CAC7D,OACE,oBAACA,aAAsB,QAAvB,EAAA,UACE,oBAACA,aAAsB,YAAvB;EACE,WAAW,GAAG,yBAAyB,2DAA2D,SAAS;EAC3G,aAAU;EACV,GAAI;CACL,CAAA,EAC2B,CAAA;AAElC"}
@@ -0,0 +1,10 @@
1
+ export declare const MENU_CONTENT_CLASS_NAME: string;
2
+ export declare const menuItemVariants: (props?: ({
3
+ variant?: "danger" | "default" | null | undefined;
4
+ inset?: boolean | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export declare const MENU_INDICATOR_ITEM_CLASS_NAME: string;
7
+ export declare const MENU_INDICATOR_CLASS_NAME = "absolute left-2 flex size-4 items-center justify-center";
8
+ export declare const MENU_LABEL_CLASS_NAME = "px-2 pt-2 pb-1 eyebrow text-subtle";
9
+ export declare const MENU_SEPARATOR_CLASS_NAME = "-mx-1 my-1 h-px bg-border";
10
+ export declare const MENU_SHORTCUT_CLASS_NAME = "ml-auto pl-4 font-mono text-caption tracking-wide text-subtle";
@@ -0,0 +1,34 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { FLOATING_ANIMATION_CLASS_NAME } from "../popover/popover.js";
3
+ import { cva } from "class-variance-authority";
4
+ // src/components/dropdown-menu/menu-styles.ts
5
+ var MENU_CONTENT_CLASS_NAME = cn("z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-48 overflow-x-hidden overflow-y-auto rounded-card border bg-popover p-1 text-popover-foreground shadow-float outline-none", FLOATING_ANIMATION_CLASS_NAME);
6
+ var menuItemVariants = cva([
7
+ "relative flex cursor-default items-center gap-2.5 rounded-control px-2 py-1.5 text-body-sm outline-none select-none",
8
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
9
+ "focus:bg-hover data-[state=open]:bg-hover",
10
+ "data-disabled:pointer-events-none data-disabled:opacity-45"
11
+ ], {
12
+ variants: {
13
+ variant: {
14
+ default: "",
15
+ danger: "text-danger-ink focus:bg-danger-soft [&_svg:not([class*=\"text-\"])]:text-danger-ink"
16
+ },
17
+ inset: {
18
+ true: "pl-8",
19
+ false: ""
20
+ }
21
+ },
22
+ defaultVariants: {
23
+ variant: "default",
24
+ inset: false
25
+ }
26
+ });
27
+ var MENU_INDICATOR_ITEM_CLASS_NAME = cn(menuItemVariants(), "pl-8");
28
+ var MENU_INDICATOR_CLASS_NAME = "absolute left-2 flex size-4 items-center justify-center";
29
+ var MENU_LABEL_CLASS_NAME = "px-2 pt-2 pb-1 eyebrow text-subtle";
30
+ var MENU_SEPARATOR_CLASS_NAME = "-mx-1 my-1 h-px bg-border";
31
+ var MENU_SHORTCUT_CLASS_NAME = "ml-auto pl-4 font-mono text-caption tracking-wide text-subtle";
32
+ export { MENU_CONTENT_CLASS_NAME, MENU_INDICATOR_CLASS_NAME, MENU_INDICATOR_ITEM_CLASS_NAME, MENU_LABEL_CLASS_NAME, MENU_SEPARATOR_CLASS_NAME, MENU_SHORTCUT_CLASS_NAME, menuItemVariants };
33
+
34
+ //# sourceMappingURL=menu-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-styles.js","names":[],"sources":["../../../src/components/dropdown-menu/menu-styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nimport { cn } from '../../lib/cn';\nimport { FLOATING_ANIMATION_CLASS_NAME } from '../popover/popover';\n\nexport const MENU_CONTENT_CLASS_NAME = cn(\n // base\n 'z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-48 overflow-x-hidden overflow-y-auto rounded-card border bg-popover p-1 text-popover-foreground shadow-float outline-none',\n // animation\n FLOATING_ANIMATION_CLASS_NAME,\n);\n\nexport const menuItemVariants = cva(\n [\n // base\n 'relative flex cursor-default items-center gap-2.5 rounded-control px-2 py-1.5 text-body-sm outline-none select-none',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n // hover\n 'focus:bg-hover data-[state=open]:bg-hover',\n // disabled\n 'data-disabled:pointer-events-none data-disabled:opacity-45',\n ],\n {\n variants: {\n variant: {\n default: '',\n danger: 'text-danger-ink focus:bg-danger-soft [&_svg:not([class*=\"text-\"])]:text-danger-ink',\n },\n inset: {\n true: 'pl-8',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n inset: false,\n },\n },\n);\n\nexport const MENU_INDICATOR_ITEM_CLASS_NAME = cn(menuItemVariants(), 'pl-8');\n\nexport const MENU_INDICATOR_CLASS_NAME = 'absolute left-2 flex size-4 items-center justify-center';\n\nexport const MENU_LABEL_CLASS_NAME = 'px-2 pt-2 pb-1 eyebrow text-subtle';\n\nexport const MENU_SEPARATOR_CLASS_NAME = '-mx-1 my-1 h-px bg-border';\n\nexport const MENU_SHORTCUT_CLASS_NAME = 'ml-auto pl-4 font-mono text-caption tracking-wide text-subtle';\n"],"mappings":";;;;AAKA,IAAa,0BAA0B,GAErC,+LAEA,6BACF;AAEA,IAAa,mBAAmB,IAC9B;CAEE;CACA;CAEA;CAEA;AACF,GACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,QAAQ;EACV;EACA,OAAO;GACL,MAAM;GACN,OAAO;EACT;CACF;CACA,iBAAiB;EACf,SAAS;EACT,OAAO;CACT;AACF,CACF;AAEA,IAAa,iCAAiC,GAAG,iBAAiB,GAAG,MAAM;AAE3E,IAAa,4BAA4B;AAEzC,IAAa,wBAAwB;AAErC,IAAa,4BAA4B;AAEzC,IAAa,2BAA2B"}
@@ -0,0 +1,12 @@
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ interface EmptyStateProps extends Omit<ComponentProps<'div'>, 'title'> {
3
+ actions?: ReactNode;
4
+ description?: ReactNode;
5
+ icon?: ReactNode;
6
+ title: ReactNode;
7
+ }
8
+ /**
9
+ * Explains why a view has nothing to show and what to do next, over a faint hex field from the refine.studio backdrop.
10
+ */
11
+ export declare const EmptyState: ({ actions, className, description, icon, title, ...props }: EmptyStateProps) => import("react").JSX.Element;
12
+ export {};
@@ -0,0 +1,46 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ // src/components/empty-state/empty-state.tsx
4
+ /**
5
+ * Explains why a view has nothing to show and what to do next, over a faint hex field from the refine.studio backdrop.
6
+ */
7
+ var EmptyState = ({ actions, className, description, icon, title, ...props }) => {
8
+ return /* @__PURE__ */ jsxs("div", {
9
+ className: cn("relative isolate flex flex-col items-center justify-center gap-4 overflow-hidden rounded-card border border-dashed px-6 py-12 text-center", className),
10
+ "data-slot": "empty-state",
11
+ ...props,
12
+ children: [
13
+ /* @__PURE__ */ jsx("div", {
14
+ "aria-hidden": true,
15
+ className: "absolute inset-0 -z-10 pattern-hex text-foreground/6",
16
+ role: "presentation"
17
+ }),
18
+ /* @__PURE__ */ jsx("div", {
19
+ "aria-hidden": true,
20
+ className: "absolute inset-0 -z-10 bg-radial from-transparent from-30% to-background to-75%",
21
+ role: "presentation"
22
+ }),
23
+ icon && /* @__PURE__ */ jsx("div", {
24
+ className: "flex size-12 items-center justify-center rounded-card border bg-card text-gem-ink shadow-soft [&_svg:not([class*='size-'])]:size-6",
25
+ children: icon
26
+ }),
27
+ /* @__PURE__ */ jsxs("div", {
28
+ className: "flex max-w-sm flex-col gap-1.5",
29
+ children: [/* @__PURE__ */ jsx("h3", {
30
+ className: "text-headline-sm",
31
+ children: title
32
+ }), description && /* @__PURE__ */ jsx("p", {
33
+ className: "text-body-sm text-pretty text-muted-foreground",
34
+ children: description
35
+ })]
36
+ }),
37
+ actions && /* @__PURE__ */ jsx("div", {
38
+ className: "flex flex-wrap items-center justify-center gap-3",
39
+ children: actions
40
+ })
41
+ ]
42
+ });
43
+ };
44
+ export { EmptyState };
45
+
46
+ //# sourceMappingURL=empty-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.js","names":[],"sources":["../../../src/components/empty-state/empty-state.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { cn } from '../../lib/cn';\n\ninterface EmptyStateProps extends Omit<ComponentProps<'div'>, 'title'> {\n actions?: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n title: ReactNode;\n}\n\n/**\n * Explains why a view has nothing to show and what to do next, over a faint hex field from the refine.studio backdrop.\n */\nexport const EmptyState = ({ actions, className, description, icon, title, ...props }: EmptyStateProps) => {\n return (\n <div\n className={cn(\n 'relative isolate flex flex-col items-center justify-center gap-4 overflow-hidden rounded-card border border-dashed px-6 py-12 text-center',\n className,\n )}\n data-slot=\"empty-state\"\n {...props}\n >\n <div\n aria-hidden\n className=\"absolute inset-0 -z-10 pattern-hex text-foreground/6\"\n role=\"presentation\"\n />\n <div\n aria-hidden\n className=\"absolute inset-0 -z-10 bg-radial from-transparent from-30% to-background to-75%\"\n role=\"presentation\"\n />\n {icon && (\n <div className=\"flex size-12 items-center justify-center rounded-card border bg-card text-gem-ink shadow-soft [&_svg:not([class*='size-'])]:size-6\">\n {icon}\n </div>\n )}\n <div className=\"flex max-w-sm flex-col gap-1.5\">\n <h3 className=\"text-headline-sm\">{title}</h3>\n {description && <p className=\"text-body-sm text-pretty text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex flex-wrap items-center justify-center gap-3\">{actions}</div>}\n </div>\n );\n};\n"],"mappings":";;;;;;AAcA,IAAa,cAAc,EAAE,SAAS,WAAW,aAAa,MAAM,OAAO,GAAG,YAA6B;CACzG,OACE,qBAAC,OAAD;EACE,WAAW,GACT,6IACA,SACF;EACA,aAAU;EACV,GAAI;EANN,UAAA;GAQE,oBAAC,OAAD;IACE,eAAA;IACA,WAAU;IACV,MAAK;GACN,CAAA;GACD,oBAAC,OAAD;IACE,eAAA;IACA,WAAU;IACV,MAAK;GACN,CAAA;GACA,QACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA;GAEP,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,MAAD;KAAI,WAAU;KAAoB,UAAA;IAAU,CAAA,GAC3C,eAAe,oBAAC,KAAD;KAAG,WAAU;KAAkD,UAAA;IAAe,CAAA,CAC3F;;GACJ,WAAW,oBAAC,OAAD;IAAK,WAAU;IAAoD,UAAA;GAAa,CAAA;EACzF;;AAET"}
@@ -0,0 +1,9 @@
1
+ import type { ComponentProps } from 'react';
2
+ interface EyebrowProps extends ComponentProps<'p'> {
3
+ number?: number | string;
4
+ }
5
+ /**
6
+ * Renders the website's mono label, prefixing a zero-padded `number` and a dash when one is given ("01 — Services").
7
+ */
8
+ export declare const Eyebrow: ({ children, className, number, ...props }: EyebrowProps) => import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,25 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ // src/components/eyebrow/eyebrow.tsx
4
+ /**
5
+ * Renders the website's mono label, prefixing a zero-padded `number` and a dash when one is given ("01 — Services").
6
+ */
7
+ var Eyebrow = ({ children, className, number, ...props }) => {
8
+ const formattedNumber = typeof number === "number" ? number.toString().padStart(2, "0") : number;
9
+ return /* @__PURE__ */ jsxs("p", {
10
+ className: cn("eyebrow inline-flex items-center gap-2 text-muted-foreground", className),
11
+ "data-slot": "eyebrow",
12
+ ...props,
13
+ children: [formattedNumber !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
14
+ className: "text-gem-ink tabular-nums",
15
+ children: formattedNumber
16
+ }), /* @__PURE__ */ jsx("span", {
17
+ "aria-hidden": true,
18
+ className: "h-px w-5 bg-current opacity-40",
19
+ role: "presentation"
20
+ })] }), children]
21
+ });
22
+ };
23
+ export { Eyebrow };
24
+
25
+ //# sourceMappingURL=eyebrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyebrow.js","names":["_Fragment"],"sources":["../../../src/components/eyebrow/eyebrow.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { cn } from '../../lib/cn';\n\ninterface EyebrowProps extends ComponentProps<'p'> {\n number?: number | string;\n}\n\n/**\n * Renders the website's mono label, prefixing a zero-padded `number` and a dash when one is given (\"01 — Services\").\n */\nexport const Eyebrow = ({ children, className, number, ...props }: EyebrowProps) => {\n const formattedNumber = typeof number === 'number' ? number.toString().padStart(2, '0') : number;\n\n return (\n <p className={cn('eyebrow inline-flex items-center gap-2 text-muted-foreground', className)} data-slot=\"eyebrow\" {...props}>\n {formattedNumber !== undefined && (\n <>\n <span className=\"text-gem-ink tabular-nums\">{formattedNumber}</span>\n <span aria-hidden className=\"h-px w-5 bg-current opacity-40\" role=\"presentation\" />\n </>\n )}\n {children}\n </p>\n );\n};\n"],"mappings":";;;;;;AAWA,IAAa,WAAW,EAAE,UAAU,WAAW,QAAQ,GAAG,YAA0B;CAClF,MAAM,kBAAkB,OAAO,WAAW,WAAW,OAAO,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG,IAAI;CAE1F,OACE,qBAAC,KAAD;EAAG,WAAW,GAAG,gEAAgE,SAAS;EAAG,aAAU;EAAU,GAAI;EAArH,UAAA,CACG,oBAAoB,KAAA,KACnB,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GAAM,WAAU;GAA6B,UAAA;EAAsB,CAAA,GACnE,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;GAAiC,MAAK;EAAgB,CAAA,CAClF,EAAA,CAAA,GAEH,QACA;;AAEP"}
@@ -0,0 +1,56 @@
1
+ import { Label as LabelPrimitive } from 'radix-ui';
2
+ import { type ComponentProps } from 'react';
3
+ interface FieldContextValue {
4
+ controlId: string;
5
+ descriptionId: string;
6
+ disabled: boolean;
7
+ errorId: string;
8
+ hasDescription: boolean;
9
+ hasError: boolean;
10
+ invalid: boolean;
11
+ labelId: string;
12
+ required: boolean;
13
+ setHasDescription: (hasDescription: boolean) => void;
14
+ setHasError: (hasError: boolean) => void;
15
+ }
16
+ interface FieldProps extends ComponentProps<'div'> {
17
+ disabled?: boolean;
18
+ invalid?: boolean;
19
+ required?: boolean;
20
+ }
21
+ /**
22
+ * Groups a label, a control, a description and an error, and wires their ids and ARIA state together through context.
23
+ */
24
+ export declare const Field: ({ className, disabled, invalid, required, ...props }: FieldProps) => import("react").JSX.Element;
25
+ /**
26
+ * Returns the surrounding field's state, or null outside a `Field`.
27
+ */
28
+ export declare const useField: () => FieldContextValue | null;
29
+ interface FieldControlProps {
30
+ 'aria-describedby'?: string;
31
+ 'aria-errormessage'?: string;
32
+ 'aria-invalid'?: boolean | 'false' | 'true' | 'grammar' | 'spelling';
33
+ disabled?: boolean;
34
+ id?: string;
35
+ required?: boolean;
36
+ }
37
+ /**
38
+ * Merges a control's own props with the surrounding field's id, description, error and disabled state; explicit props win.
39
+ */
40
+ export declare const useFieldControl: <TProps extends FieldControlProps>(props: TProps) => TProps;
41
+ interface FieldLabelProps extends ComponentProps<typeof LabelPrimitive.Root> {
42
+ optional?: boolean;
43
+ }
44
+ /**
45
+ * Labels the field's control and marks it as required or optional.
46
+ */
47
+ export declare const FieldLabel: ({ children, className, optional, ...props }: FieldLabelProps) => import("react").JSX.Element;
48
+ /**
49
+ * Adds help text under the control and links it through `aria-describedby`.
50
+ */
51
+ export declare const FieldDescription: ({ className, ...props }: ComponentProps<"p">) => import("react").JSX.Element;
52
+ /**
53
+ * Shows the validation message, marks the field invalid and links the message through `aria-errormessage`; renders nothing when empty.
54
+ */
55
+ export declare const FieldError: ({ children, className, ...props }: ComponentProps<"p">) => import("react").JSX.Element | null;
56
+ export {};
@@ -0,0 +1,135 @@
1
+ "use client";
2
+ import { cn } from "../../lib/cn.js";
3
+ import { Label } from "radix-ui";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { createContext, use, useEffect, useId, useState } from "react";
6
+ // src/components/field/field.tsx
7
+ var FieldContext = createContext(null);
8
+ /**
9
+ * Groups a label, a control, a description and an error, and wires their ids and ARIA state together through context.
10
+ */
11
+ var Field = ({ className, disabled = false, invalid = false, required = false, ...props }) => {
12
+ const id = useId();
13
+ const [hasDescription, setHasDescription] = useState(false);
14
+ const [hasError, setHasError] = useState(false);
15
+ return /* @__PURE__ */ jsx(FieldContext, {
16
+ value: {
17
+ controlId: `${id}-control`,
18
+ descriptionId: `${id}-description`,
19
+ disabled,
20
+ errorId: `${id}-error`,
21
+ hasDescription,
22
+ hasError,
23
+ invalid: invalid || hasError,
24
+ labelId: `${id}-label`,
25
+ required,
26
+ setHasDescription,
27
+ setHasError
28
+ },
29
+ children: /* @__PURE__ */ jsx("div", {
30
+ className: cn("group/field flex flex-col gap-1.5", className),
31
+ "data-disabled": disabled || void 0,
32
+ "data-invalid": invalid || hasError || void 0,
33
+ "data-slot": "field",
34
+ ...props
35
+ })
36
+ });
37
+ };
38
+ /**
39
+ * Returns the surrounding field's state, or null outside a `Field`.
40
+ */
41
+ var useField = () => {
42
+ return use(FieldContext);
43
+ };
44
+ /**
45
+ * Merges a control's own props with the surrounding field's id, description, error and disabled state; explicit props win.
46
+ */
47
+ var useFieldControl = (props) => {
48
+ const field = useField();
49
+ if (!field) return props;
50
+ const describedBy = [
51
+ props["aria-describedby"],
52
+ field.hasDescription ? field.descriptionId : void 0,
53
+ field.hasError ? field.errorId : void 0
54
+ ].filter(Boolean).join(" ");
55
+ return {
56
+ ...props,
57
+ "aria-describedby": describedBy || void 0,
58
+ "aria-errormessage": props["aria-errormessage"] ?? (field.hasError ? field.errorId : void 0),
59
+ "aria-invalid": props["aria-invalid"] ?? (field.invalid || void 0),
60
+ disabled: props.disabled ?? (field.disabled || void 0),
61
+ id: props.id ?? field.controlId,
62
+ required: props.required ?? (field.required || void 0)
63
+ };
64
+ };
65
+ /**
66
+ * Labels the field's control and marks it as required or optional.
67
+ */
68
+ var FieldLabel = ({ children, className, optional = false, ...props }) => {
69
+ const field = useField();
70
+ return /* @__PURE__ */ jsxs(Label.Root, {
71
+ className: cn("inline-flex items-center gap-1 text-body-sm font-medium text-foreground select-none", "group-data-disabled/field:opacity-50", className),
72
+ "data-slot": "field-label",
73
+ htmlFor: field?.controlId,
74
+ id: field?.labelId,
75
+ ...props,
76
+ children: [
77
+ children,
78
+ field?.required && /* @__PURE__ */ jsx("span", {
79
+ "aria-hidden": true,
80
+ className: "text-danger-ink",
81
+ role: "presentation",
82
+ children: "*"
83
+ }),
84
+ optional && /* @__PURE__ */ jsx("span", {
85
+ className: "font-normal text-muted-foreground",
86
+ children: "(optional)"
87
+ })
88
+ ]
89
+ });
90
+ };
91
+ /**
92
+ * Registers a piece of field state on mount and clears it on unmount.
93
+ */
94
+ var useRegister = (register, isPresent) => {
95
+ useEffect(() => {
96
+ if (!register) return;
97
+ register(isPresent);
98
+ return () => {
99
+ register(false);
100
+ };
101
+ }, [register, isPresent]);
102
+ };
103
+ /**
104
+ * Adds help text under the control and links it through `aria-describedby`.
105
+ */
106
+ var FieldDescription = ({ className, ...props }) => {
107
+ const field = useField();
108
+ useRegister(field?.setHasDescription, true);
109
+ return /* @__PURE__ */ jsx("p", {
110
+ className: cn("text-body-sm text-muted-foreground", className),
111
+ "data-slot": "field-description",
112
+ id: field?.descriptionId,
113
+ ...props
114
+ });
115
+ };
116
+ /**
117
+ * Shows the validation message, marks the field invalid and links the message through `aria-errormessage`; renders nothing when empty.
118
+ */
119
+ var FieldError = ({ children, className, ...props }) => {
120
+ const field = useField();
121
+ const hasMessage = Boolean(children);
122
+ useRegister(field?.setHasError, hasMessage);
123
+ if (!hasMessage) return null;
124
+ return /* @__PURE__ */ jsx("p", {
125
+ className: cn("text-body-sm font-medium text-danger-ink", className),
126
+ "data-slot": "field-error",
127
+ id: field?.errorId,
128
+ role: "alert",
129
+ ...props,
130
+ children
131
+ });
132
+ };
133
+ export { Field, FieldDescription, FieldError, FieldLabel, useField, useFieldControl };
134
+
135
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","names":["LabelPrimitive"],"sources":["../../../src/components/field/field.tsx"],"sourcesContent":["'use client';\n\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { type ComponentProps, createContext, use, useEffect, useId, useState } from 'react';\n\nimport { cn } from '../../lib/cn';\n\ninterface FieldContextValue {\n controlId: string;\n descriptionId: string;\n disabled: boolean;\n errorId: string;\n hasDescription: boolean;\n hasError: boolean;\n invalid: boolean;\n labelId: string;\n required: boolean;\n setHasDescription: (hasDescription: boolean) => void;\n setHasError: (hasError: boolean) => void;\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null);\n\ninterface FieldProps extends ComponentProps<'div'> {\n disabled?: boolean;\n invalid?: boolean;\n required?: boolean;\n}\n\n/**\n * Groups a label, a control, a description and an error, and wires their ids and ARIA state together through context.\n */\nexport const Field = ({ className, disabled = false, invalid = false, required = false, ...props }: FieldProps) => {\n const id = useId();\n const [hasDescription, setHasDescription] = useState(false);\n const [hasError, setHasError] = useState(false);\n\n return (\n <FieldContext\n value={{\n controlId: `${id}-control`,\n descriptionId: `${id}-description`,\n disabled,\n errorId: `${id}-error`,\n hasDescription,\n hasError,\n invalid: invalid || hasError,\n labelId: `${id}-label`,\n required,\n setHasDescription,\n setHasError,\n }}\n >\n <div\n className={cn('group/field flex flex-col gap-1.5', className)}\n data-disabled={disabled || undefined}\n data-invalid={invalid || hasError || undefined}\n data-slot=\"field\"\n {...props}\n />\n </FieldContext>\n );\n};\n\n/**\n * Returns the surrounding field's state, or null outside a `Field`.\n */\nexport const useField = () => {\n return use(FieldContext);\n};\n\ninterface FieldControlProps {\n 'aria-describedby'?: string;\n 'aria-errormessage'?: string;\n 'aria-invalid'?: boolean | 'false' | 'true' | 'grammar' | 'spelling';\n disabled?: boolean;\n id?: string;\n required?: boolean;\n}\n\n/**\n * Merges a control's own props with the surrounding field's id, description, error and disabled state; explicit props win.\n */\nexport const useFieldControl = <TProps extends FieldControlProps>(props: TProps) => {\n const field = useField();\n if (!field) return props;\n\n const describedBy = [\n props['aria-describedby'],\n field.hasDescription ? field.descriptionId : undefined,\n field.hasError ? field.errorId : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n return {\n ...props,\n 'aria-describedby': describedBy || undefined,\n 'aria-errormessage': props['aria-errormessage'] ?? (field.hasError ? field.errorId : undefined),\n 'aria-invalid': props['aria-invalid'] ?? (field.invalid || undefined),\n disabled: props.disabled ?? (field.disabled || undefined),\n id: props.id ?? field.controlId,\n required: props.required ?? (field.required || undefined),\n };\n};\n\ninterface FieldLabelProps extends ComponentProps<typeof LabelPrimitive.Root> {\n optional?: boolean;\n}\n\n/**\n * Labels the field's control and marks it as required or optional.\n */\nexport const FieldLabel = ({ children, className, optional = false, ...props }: FieldLabelProps) => {\n const field = useField();\n\n return (\n <LabelPrimitive.Root\n className={cn(\n 'inline-flex items-center gap-1 text-body-sm font-medium text-foreground select-none',\n 'group-data-disabled/field:opacity-50',\n className,\n )}\n data-slot=\"field-label\"\n htmlFor={field?.controlId}\n id={field?.labelId}\n {...props}\n >\n {children}\n {field?.required && (\n <span aria-hidden className=\"text-danger-ink\" role=\"presentation\">\n *\n </span>\n )}\n {optional && <span className=\"font-normal text-muted-foreground\">(optional)</span>}\n </LabelPrimitive.Root>\n );\n};\n\n/**\n * Registers a piece of field state on mount and clears it on unmount.\n */\nconst useRegister = (register: ((isPresent: boolean) => void) | undefined, isPresent: boolean) => {\n useEffect(() => {\n if (!register) return;\n register(isPresent);\n\n return () => {\n register(false);\n };\n }, [register, isPresent]);\n};\n\n/**\n * Adds help text under the control and links it through `aria-describedby`.\n */\nexport const FieldDescription = ({ className, ...props }: ComponentProps<'p'>) => {\n const field = useField();\n useRegister(field?.setHasDescription, true);\n\n return (\n <p\n className={cn('text-body-sm text-muted-foreground', className)}\n data-slot=\"field-description\"\n id={field?.descriptionId}\n {...props}\n />\n );\n};\n\n/**\n * Shows the validation message, marks the field invalid and links the message through `aria-errormessage`; renders nothing when empty.\n */\nexport const FieldError = ({ children, className, ...props }: ComponentProps<'p'>) => {\n const field = useField();\n const hasMessage = Boolean(children);\n useRegister(field?.setHasError, hasMessage);\n\n if (!hasMessage) return null;\n\n return (\n <p\n className={cn('text-body-sm font-medium text-danger-ink', className)}\n data-slot=\"field-error\"\n id={field?.errorId}\n role=\"alert\"\n {...props}\n >\n {children}\n </p>\n );\n};\n"],"mappings":";;;;;;AAqBA,IAAM,eAAe,cAAwC,IAAI;;;;AAWjE,IAAa,SAAS,EAAE,WAAW,WAAW,OAAO,UAAU,OAAO,WAAW,OAAO,GAAG,YAAwB;CACjH,MAAM,KAAK,MAAM;CACjB,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAE9C,OACE,oBAAC,cAAD;EACE,OAAO;GACL,WAAW,GAAG,GAAG;GACjB,eAAe,GAAG,GAAG;GACrB;GACA,SAAS,GAAG,GAAG;GACf;GACA;GACA,SAAS,WAAW;GACpB,SAAS,GAAG,GAAG;GACf;GACA;GACA;EACF;EAEA,UAAA,oBAAC,OAAD;GACE,WAAW,GAAG,qCAAqC,SAAS;GAC5D,iBAAe,YAAY,KAAA;GAC3B,gBAAc,WAAW,YAAY,KAAA;GACrC,aAAU;GACV,GAAI;EACL,CAAA;CACW,CAAA;AAElB;;;;AAKA,IAAa,iBAAiB;CAC5B,OAAO,IAAI,YAAY;AACzB;;;;AAcA,IAAa,mBAAqD,UAAkB;CAClF,MAAM,QAAQ,SAAS;CACvB,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,cAAc;EAClB,MAAM;EACN,MAAM,iBAAiB,MAAM,gBAAgB,KAAA;EAC7C,MAAM,WAAW,MAAM,UAAU,KAAA;CACnC,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OAAO;EACL,GAAG;EACH,oBAAoB,eAAe,KAAA;EACnC,qBAAqB,MAAM,yBAAyB,MAAM,WAAW,MAAM,UAAU,KAAA;EACrF,gBAAgB,MAAM,oBAAoB,MAAM,WAAW,KAAA;EAC3D,UAAU,MAAM,aAAa,MAAM,YAAY,KAAA;EAC/C,IAAI,MAAM,MAAM,MAAM;EACtB,UAAU,MAAM,aAAa,MAAM,YAAY,KAAA;CACjD;AACF;;;;AASA,IAAa,cAAc,EAAE,UAAU,WAAW,WAAW,OAAO,GAAG,YAA6B;CAClG,MAAM,QAAQ,SAAS;CAEvB,OACE,qBAACA,MAAe,MAAhB;EACE,WAAW,GACT,uFACA,wCACA,SACF;EACA,aAAU;EACV,SAAS,OAAO;EAChB,IAAI,OAAO;EACX,GAAI;EATN,UAAA;GAWG;GACA,OAAO,YACN,oBAAC,QAAD;IAAM,eAAA;IAAY,WAAU;IAAkB,MAAK;IAAe,UAAA;GAE5D,CAAA;GAEP,YAAY,oBAAC,QAAD;IAAM,WAAU;IAAoC,UAAA;GAAgB,CAAA;EAC9D;;AAEzB;;;;AAKA,IAAM,eAAe,UAAsD,cAAuB;CAChG,gBAAgB;EACd,IAAI,CAAC,UAAU;EACf,SAAS,SAAS;EAElB,aAAa;GACX,SAAS,KAAK;EAChB;CACF,GAAG,CAAC,UAAU,SAAS,CAAC;AAC1B;;;;AAKA,IAAa,oBAAoB,EAAE,WAAW,GAAG,YAAiC;CAChF,MAAM,QAAQ,SAAS;CACvB,YAAY,OAAO,mBAAmB,IAAI;CAE1C,OACE,oBAAC,KAAD;EACE,WAAW,GAAG,sCAAsC,SAAS;EAC7D,aAAU;EACV,IAAI,OAAO;EACX,GAAI;CACL,CAAA;AAEL;;;;AAKA,IAAa,cAAc,EAAE,UAAU,WAAW,GAAG,YAAiC;CACpF,MAAM,QAAQ,SAAS;CACvB,MAAM,aAAa,QAAQ,QAAQ;CACnC,YAAY,OAAO,aAAa,UAAU;CAE1C,IAAI,CAAC,YAAY,OAAO;CAExB,OACE,oBAAC,KAAD;EACE,WAAW,GAAG,4CAA4C,SAAS;EACnE,aAAU;EACV,IAAI,OAAO;EACX,MAAK;EACL,GAAI;EAEH;CACA,CAAA;AAEP"}
@@ -0,0 +1,9 @@
1
+ import type { ComponentProps } from 'react';
2
+ interface GlowBorderProps extends ComponentProps<'div'> {
3
+ glow?: boolean;
4
+ }
5
+ /**
6
+ * Frames a "moment" surface with a rotating gem gradient border, optionally haloed; with reduced motion the border holds still.
7
+ */
8
+ export declare const GlowBorder: ({ children, className, glow, ...props }: GlowBorderProps) => import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,39 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ // src/components/glow-border/glow-border.tsx
4
+ var CONIC_GRADIENT_CLASSES = [
5
+ "pointer-events-none absolute top-1/2 left-1/2 aspect-square w-[300%] -translate-x-1/2 -translate-y-1/2",
6
+ "bg-[conic-gradient(from_0deg,transparent_0deg,oklch(0.775_var(--gem-c)_var(--gem-h))_60deg,oklch(0.6_var(--gem-c)_calc(var(--gem-h)+40))_120deg,transparent_180deg,transparent_360deg)]",
7
+ "motion-safe:animate-spin motion-safe:[animation-duration:5s]"
8
+ ];
9
+ /**
10
+ * Frames a "moment" surface with a rotating gem gradient border, optionally haloed; with reduced motion the border holds still.
11
+ */
12
+ var GlowBorder = ({ children, className, glow = true, ...props }) => {
13
+ return /* @__PURE__ */ jsxs("div", {
14
+ className: cn("relative isolate rounded-card", className),
15
+ "data-slot": "glow-border",
16
+ ...props,
17
+ children: [
18
+ glow && /* @__PURE__ */ jsx("div", {
19
+ "aria-hidden": true,
20
+ className: "absolute -inset-1 -z-10 overflow-hidden rounded-card opacity-60 blur-xl",
21
+ role: "presentation",
22
+ children: /* @__PURE__ */ jsx("div", { className: cn(CONIC_GRADIENT_CLASSES) })
23
+ }),
24
+ /* @__PURE__ */ jsx("div", {
25
+ "aria-hidden": true,
26
+ className: "absolute inset-0 overflow-hidden rounded-card bg-border",
27
+ role: "presentation",
28
+ children: /* @__PURE__ */ jsx("div", { className: cn(CONIC_GRADIENT_CLASSES) })
29
+ }),
30
+ /* @__PURE__ */ jsx("div", {
31
+ className: "relative m-px rounded-[calc(var(--radius-card)-1px)] bg-card text-card-foreground",
32
+ children
33
+ })
34
+ ]
35
+ });
36
+ };
37
+ export { GlowBorder };
38
+
39
+ //# sourceMappingURL=glow-border.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glow-border.js","names":[],"sources":["../../../src/components/glow-border/glow-border.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { cn } from '../../lib/cn';\n\nconst CONIC_GRADIENT_CLASSES = [\n 'pointer-events-none absolute top-1/2 left-1/2 aspect-square w-[300%] -translate-x-1/2 -translate-y-1/2',\n 'bg-[conic-gradient(from_0deg,transparent_0deg,oklch(0.775_var(--gem-c)_var(--gem-h))_60deg,oklch(0.6_var(--gem-c)_calc(var(--gem-h)+40))_120deg,transparent_180deg,transparent_360deg)]',\n 'motion-safe:animate-spin motion-safe:[animation-duration:5s]',\n];\n\ninterface GlowBorderProps extends ComponentProps<'div'> {\n glow?: boolean;\n}\n\n/**\n * Frames a \"moment\" surface with a rotating gem gradient border, optionally haloed; with reduced motion the border holds still.\n */\nexport const GlowBorder = ({ children, className, glow = true, ...props }: GlowBorderProps) => {\n return (\n <div className={cn('relative isolate rounded-card', className)} data-slot=\"glow-border\" {...props}>\n {glow && (\n <div aria-hidden className=\"absolute -inset-1 -z-10 overflow-hidden rounded-card opacity-60 blur-xl\" role=\"presentation\">\n <div className={cn(CONIC_GRADIENT_CLASSES)} />\n </div>\n )}\n <div aria-hidden className=\"absolute inset-0 overflow-hidden rounded-card bg-border\" role=\"presentation\">\n <div className={cn(CONIC_GRADIENT_CLASSES)} />\n </div>\n <div className=\"relative m-px rounded-[calc(var(--radius-card)-1px)] bg-card text-card-foreground\">{children}</div>\n </div>\n );\n};\n"],"mappings":";;;AAIA,IAAM,yBAAyB;CAC7B;CACA;CACA;AACF;;;;AASA,IAAa,cAAc,EAAE,UAAU,WAAW,OAAO,MAAM,GAAG,YAA6B;CAC7F,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,iCAAiC,SAAS;EAAG,aAAU;EAAc,GAAI;EAA5F,UAAA;GACG,QACC,oBAAC,OAAD;IAAK,eAAA;IAAY,WAAU;IAA0E,MAAK;IACxG,UAAA,oBAAC,OAAD,EAAK,WAAW,GAAG,sBAAsB,EAAI,CAAA;GAC1C,CAAA;GAEP,oBAAC,OAAD;IAAK,eAAA;IAAY,WAAU;IAA0D,MAAK;IACxF,UAAA,oBAAC,OAAD,EAAK,WAAW,GAAG,sBAAsB,EAAI,CAAA;GAC1C,CAAA;GACL,oBAAC,OAAD;IAAK,WAAU;IAAqF;GAAc,CAAA;EAC/G;;AAET"}
@@ -0,0 +1,12 @@
1
+ import type { ComponentProps } from 'react';
2
+ interface HexFieldProps extends Omit<ComponentProps<'svg'>, 'children'> {
3
+ animated?: boolean;
4
+ columns?: number;
5
+ fade?: 'bottom' | 'none' | 'radial';
6
+ rows?: number;
7
+ }
8
+ /**
9
+ * Draws refine.studio's hex grid as light SVG in `currentColor`, three-toned and swept by a slow diagonal wave.
10
+ */
11
+ export declare const HexField: ({ animated, className, columns, fade, rows, ...props }: HexFieldProps) => import("react").JSX.Element;
12
+ export {};