@journ/bloom 0.1.1

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 (278) hide show
  1. package/DESIGN.md +287 -0
  2. package/LICENSE +21 -0
  3. package/README.md +59 -0
  4. package/dist/accordion-parts.d.ts +9 -0
  5. package/dist/accordion-parts.js +37 -0
  6. package/dist/accordion.d.ts +10 -0
  7. package/dist/accordion.js +10 -0
  8. package/dist/alert-dialog-parts.d.ts +16 -0
  9. package/dist/alert-dialog-parts.js +33 -0
  10. package/dist/alert-dialog.d.ts +15 -0
  11. package/dist/alert-dialog.js +15 -0
  12. package/dist/alert.d.ts +48 -0
  13. package/dist/alert.js +51 -0
  14. package/dist/animated-size.d.ts +6 -0
  15. package/dist/animated-size.js +12 -0
  16. package/dist/avatar-parts.d.ts +10 -0
  17. package/dist/avatar-parts.js +20 -0
  18. package/dist/avatar.d.ts +9 -0
  19. package/dist/avatar.js +9 -0
  20. package/dist/badge.d.ts +38 -0
  21. package/dist/badge.js +22 -0
  22. package/dist/breadcrumbs.d.ts +18 -0
  23. package/dist/breadcrumbs.js +44 -0
  24. package/dist/bulk-bar.d.ts +13 -0
  25. package/dist/bulk-bar.js +27 -0
  26. package/dist/button.d.ts +40 -0
  27. package/dist/button.js +41 -0
  28. package/dist/calendar-parts.d.ts +17 -0
  29. package/dist/calendar-parts.js +90 -0
  30. package/dist/calendar.d.ts +17 -0
  31. package/dist/calendar.js +17 -0
  32. package/dist/card.d.ts +51 -0
  33. package/dist/card.js +63 -0
  34. package/dist/carousel-parts.d.ts +13 -0
  35. package/dist/carousel-parts.js +53 -0
  36. package/dist/carousel.d.ts +11 -0
  37. package/dist/carousel.js +11 -0
  38. package/dist/checkbox-parts.d.ts +8 -0
  39. package/dist/checkbox-parts.js +21 -0
  40. package/dist/checkbox.d.ts +8 -0
  41. package/dist/checkbox.js +8 -0
  42. package/dist/chip.d.ts +45 -0
  43. package/dist/chip.js +55 -0
  44. package/dist/collapsible-parts.d.ts +8 -0
  45. package/dist/collapsible-parts.js +22 -0
  46. package/dist/collapsible.d.ts +9 -0
  47. package/dist/collapsible.js +9 -0
  48. package/dist/combobox-parts.d.ts +22 -0
  49. package/dist/combobox-parts.js +54 -0
  50. package/dist/combobox.d.ts +26 -0
  51. package/dist/combobox.js +21 -0
  52. package/dist/command-palette-parts.d.ts +13 -0
  53. package/dist/command-palette-parts.js +19 -0
  54. package/dist/command-palette.d.ts +17 -0
  55. package/dist/command-palette.js +17 -0
  56. package/dist/composer.d.ts +12 -0
  57. package/dist/composer.js +21 -0
  58. package/dist/context-menu-parts.d.ts +15 -0
  59. package/dist/context-menu-parts.js +10 -0
  60. package/dist/context-menu.d.ts +20 -0
  61. package/dist/context-menu.js +13 -0
  62. package/dist/currency-input-parts.d.ts +8 -0
  63. package/dist/currency-input-parts.js +13 -0
  64. package/dist/currency-input.d.ts +8 -0
  65. package/dist/currency-input.js +8 -0
  66. package/dist/data-table-parts.d.ts +10 -0
  67. package/dist/data-table-parts.js +65 -0
  68. package/dist/data-table.d.ts +12 -0
  69. package/dist/data-table.js +12 -0
  70. package/dist/date-input-parts.d.ts +7 -0
  71. package/dist/date-input-parts.js +12 -0
  72. package/dist/date-input.d.ts +8 -0
  73. package/dist/date-input.js +8 -0
  74. package/dist/date-picker-parts.d.ts +11 -0
  75. package/dist/date-picker-parts.js +8 -0
  76. package/dist/date-picker.d.ts +20 -0
  77. package/dist/date-picker.js +15 -0
  78. package/dist/date-range-picker-parts.d.ts +11 -0
  79. package/dist/date-range-picker-parts.js +8 -0
  80. package/dist/date-range-picker.d.ts +20 -0
  81. package/dist/date-range-picker.js +15 -0
  82. package/dist/description-list.d.ts +12 -0
  83. package/dist/description-list.js +23 -0
  84. package/dist/dialog-parts.d.ts +15 -0
  85. package/dist/dialog-parts.js +32 -0
  86. package/dist/dialog.d.ts +15 -0
  87. package/dist/dialog.js +15 -0
  88. package/dist/divider.d.ts +6 -0
  89. package/dist/divider.js +12 -0
  90. package/dist/drawer-parts.d.ts +13 -0
  91. package/dist/drawer-parts.js +31 -0
  92. package/dist/drawer.d.ts +15 -0
  93. package/dist/drawer.js +15 -0
  94. package/dist/dropdown-menu-parts.d.ts +15 -0
  95. package/dist/dropdown-menu-parts.js +10 -0
  96. package/dist/dropdown-menu.d.ts +20 -0
  97. package/dist/dropdown-menu.js +13 -0
  98. package/dist/empty-state.d.ts +16 -0
  99. package/dist/empty-state.js +40 -0
  100. package/dist/field-parts.d.ts +10 -0
  101. package/dist/field-parts.js +25 -0
  102. package/dist/field.d.ts +11 -0
  103. package/dist/field.js +11 -0
  104. package/dist/file-dropzone-parts.d.ts +12 -0
  105. package/dist/file-dropzone-parts.js +32 -0
  106. package/dist/file-dropzone.d.ts +10 -0
  107. package/dist/file-dropzone.js +10 -0
  108. package/dist/heading.d.ts +31 -0
  109. package/dist/heading.js +26 -0
  110. package/dist/hover-card-parts.d.ts +8 -0
  111. package/dist/hover-card-parts.js +20 -0
  112. package/dist/hover-card.d.ts +9 -0
  113. package/dist/hover-card.js +9 -0
  114. package/dist/icon-button.d.ts +44 -0
  115. package/dist/icon-button.js +39 -0
  116. package/dist/icon.d.ts +30 -0
  117. package/dist/icon.js +27 -0
  118. package/dist/index.d.ts +96 -0
  119. package/dist/index.js +89 -0
  120. package/dist/input.d.ts +7 -0
  121. package/dist/input.js +14 -0
  122. package/dist/lib/cn.d.ts +6 -0
  123. package/dist/lib/cn.js +7 -0
  124. package/dist/lib/icon-tile.d.ts +32 -0
  125. package/dist/lib/icon-tile.js +23 -0
  126. package/dist/lib/interactive.d.ts +11 -0
  127. package/dist/lib/interactive.js +19 -0
  128. package/dist/lib/menu-parts.d.ts +25 -0
  129. package/dist/lib/menu-parts.js +41 -0
  130. package/dist/lib/modal-content.d.ts +10 -0
  131. package/dist/lib/modal-content.js +17 -0
  132. package/dist/lib/modal-parts.d.ts +7 -0
  133. package/dist/lib/modal-parts.js +15 -0
  134. package/dist/lib/overlay.d.ts +41 -0
  135. package/dist/lib/overlay.js +22 -0
  136. package/dist/lib/picker.d.ts +18 -0
  137. package/dist/lib/picker.js +25 -0
  138. package/dist/lib/text-styles.d.ts +25 -0
  139. package/dist/lib/text-styles.js +25 -0
  140. package/dist/lib/theme.d.ts +43 -0
  141. package/dist/lib/theme.js +45 -0
  142. package/dist/lib/tones.d.ts +52 -0
  143. package/dist/lib/tones.js +55 -0
  144. package/dist/lib/tv.d.ts +2 -0
  145. package/dist/lib/tv.js +2 -0
  146. package/dist/lib/use-enter.d.ts +15 -0
  147. package/dist/lib/use-enter.js +54 -0
  148. package/dist/link.d.ts +8 -0
  149. package/dist/link.js +13 -0
  150. package/dist/markdown.d.ts +10 -0
  151. package/dist/markdown.js +70 -0
  152. package/dist/message.d.ts +15 -0
  153. package/dist/message.js +25 -0
  154. package/dist/month-picker-parts.d.ts +2 -0
  155. package/dist/month-picker-parts.js +3 -0
  156. package/dist/month-picker.d.ts +15 -0
  157. package/dist/month-picker.js +15 -0
  158. package/dist/month-stepper-parts.d.ts +11 -0
  159. package/dist/month-stepper-parts.js +37 -0
  160. package/dist/month-stepper.d.ts +10 -0
  161. package/dist/month-stepper.js +10 -0
  162. package/dist/multiple-selector-parts.d.ts +18 -0
  163. package/dist/multiple-selector-parts.js +28 -0
  164. package/dist/multiple-selector.d.ts +28 -0
  165. package/dist/multiple-selector.js +23 -0
  166. package/dist/nav-bar.d.ts +10 -0
  167. package/dist/nav-bar.js +23 -0
  168. package/dist/navigation-menu-parts.d.ts +12 -0
  169. package/dist/navigation-menu-parts.js +47 -0
  170. package/dist/navigation-menu.d.ts +12 -0
  171. package/dist/navigation-menu.js +12 -0
  172. package/dist/otp-input-parts.d.ts +8 -0
  173. package/dist/otp-input-parts.js +17 -0
  174. package/dist/otp-input.d.ts +9 -0
  175. package/dist/otp-input.js +9 -0
  176. package/dist/page-header.d.ts +12 -0
  177. package/dist/page-header.js +23 -0
  178. package/dist/page.d.ts +45 -0
  179. package/dist/page.js +41 -0
  180. package/dist/pagination.d.ts +18 -0
  181. package/dist/pagination.js +49 -0
  182. package/dist/pill-select.d.ts +5 -0
  183. package/dist/pill-select.js +21 -0
  184. package/dist/popover-parts.d.ts +9 -0
  185. package/dist/popover-parts.js +21 -0
  186. package/dist/popover.d.ts +10 -0
  187. package/dist/popover.js +10 -0
  188. package/dist/portal.d.ts +2 -0
  189. package/dist/portal.js +2 -0
  190. package/dist/progress-parts.d.ts +38 -0
  191. package/dist/progress-parts.js +25 -0
  192. package/dist/progress.d.ts +8 -0
  193. package/dist/progress.js +8 -0
  194. package/dist/quantity-input-parts.d.ts +11 -0
  195. package/dist/quantity-input-parts.js +36 -0
  196. package/dist/quantity-input.d.ts +10 -0
  197. package/dist/quantity-input.js +10 -0
  198. package/dist/radio-parts.d.ts +7 -0
  199. package/dist/radio-parts.js +19 -0
  200. package/dist/radio.d.ts +8 -0
  201. package/dist/radio.js +8 -0
  202. package/dist/scroll-area-parts.d.ts +9 -0
  203. package/dist/scroll-area-parts.js +23 -0
  204. package/dist/scroll-area.d.ts +10 -0
  205. package/dist/scroll-area.js +10 -0
  206. package/dist/select-parts.d.ts +13 -0
  207. package/dist/select-parts.js +46 -0
  208. package/dist/select.d.ts +14 -0
  209. package/dist/select.js +14 -0
  210. package/dist/sheet-parts.d.ts +33 -0
  211. package/dist/sheet-parts.js +41 -0
  212. package/dist/sheet.d.ts +16 -0
  213. package/dist/sheet.js +16 -0
  214. package/dist/sidebar.d.ts +24 -0
  215. package/dist/sidebar.js +58 -0
  216. package/dist/skeleton.d.ts +5 -0
  217. package/dist/skeleton.js +11 -0
  218. package/dist/slider-parts.d.ts +9 -0
  219. package/dist/slider-parts.js +26 -0
  220. package/dist/slider.d.ts +10 -0
  221. package/dist/slider.js +10 -0
  222. package/dist/spinner.d.ts +5 -0
  223. package/dist/spinner.js +10 -0
  224. package/dist/stack-parts.d.ts +39 -0
  225. package/dist/stack-parts.js +35 -0
  226. package/dist/stack.d.ts +10 -0
  227. package/dist/stack.js +10 -0
  228. package/dist/stat.d.ts +14 -0
  229. package/dist/stat.js +29 -0
  230. package/dist/step-button.d.ts +10 -0
  231. package/dist/step-button.js +14 -0
  232. package/dist/stepper-parts.d.ts +10 -0
  233. package/dist/stepper-parts.js +33 -0
  234. package/dist/stepper.d.ts +11 -0
  235. package/dist/stepper.js +11 -0
  236. package/dist/styles.css +2 -0
  237. package/dist/switch-parts.d.ts +7 -0
  238. package/dist/switch-parts.js +19 -0
  239. package/dist/switch.d.ts +8 -0
  240. package/dist/switch.js +8 -0
  241. package/dist/table.d.ts +20 -0
  242. package/dist/table.js +48 -0
  243. package/dist/tabs-parts.d.ts +9 -0
  244. package/dist/tabs-parts.js +25 -0
  245. package/dist/tabs.d.ts +10 -0
  246. package/dist/tabs.js +10 -0
  247. package/dist/tag-input-parts.d.ts +15 -0
  248. package/dist/tag-input-parts.js +24 -0
  249. package/dist/tag-input.d.ts +10 -0
  250. package/dist/tag-input.js +10 -0
  251. package/dist/text-morph.d.ts +6 -0
  252. package/dist/text-morph.js +14 -0
  253. package/dist/text-shimmer.d.ts +9 -0
  254. package/dist/text-shimmer.js +12 -0
  255. package/dist/text.d.ts +38 -0
  256. package/dist/text.js +32 -0
  257. package/dist/textarea.d.ts +5 -0
  258. package/dist/textarea.js +12 -0
  259. package/dist/time-range-parts.d.ts +10 -0
  260. package/dist/time-range-parts.js +22 -0
  261. package/dist/time-range.d.ts +10 -0
  262. package/dist/time-range.js +10 -0
  263. package/dist/toast-parts.d.ts +11 -0
  264. package/dist/toast-parts.js +39 -0
  265. package/dist/toast.d.ts +13 -0
  266. package/dist/toast.js +12 -0
  267. package/dist/toggle-group-parts.d.ts +7 -0
  268. package/dist/toggle-group-parts.js +17 -0
  269. package/dist/toggle-group.d.ts +8 -0
  270. package/dist/toggle-group.js +8 -0
  271. package/dist/tokens.css +64 -0
  272. package/dist/tooltip-parts.d.ts +9 -0
  273. package/dist/tooltip-parts.js +21 -0
  274. package/dist/tooltip.d.ts +10 -0
  275. package/dist/tooltip.js +10 -0
  276. package/dist/touch-target.d.ts +7 -0
  277. package/dist/touch-target.js +10 -0
  278. package/package.json +71 -0
@@ -0,0 +1,18 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ //#region src/pagination.d.ts
3
+ declare const Root: ({ className, ...props }: ComponentPropsWithRef<'nav'>) => import("react").JSX.Element;
4
+ declare const List: ({ className, ...props }: ComponentPropsWithRef<'div'>) => import("react").JSX.Element;
5
+ declare const Previous: ({ className, children, ...props }: ComponentPropsWithRef<'a'>) => import("react").JSX.Element;
6
+ declare const Next: ({ className, children, ...props }: ComponentPropsWithRef<'a'>) => import("react").JSX.Element;
7
+ declare const Page: ({ className, children, ...props }: ComponentPropsWithRef<'a'>) => import("react").JSX.Element;
8
+ declare const Gap: ({ className, ...props }: ComponentPropsWithRef<'span'>) => import("react").JSX.Element;
9
+ declare const Pagination: {
10
+ Root: typeof Root;
11
+ Previous: typeof Previous;
12
+ List: typeof List;
13
+ Page: typeof Page;
14
+ Gap: typeof Gap;
15
+ Next: typeof Next;
16
+ };
17
+ //#endregion
18
+ export { Pagination };
@@ -0,0 +1,49 @@
1
+ import { cn } from "./lib/cn.js";
2
+ import { interactive } from "./lib/interactive.js";
3
+ import { selectedWhenCurrent } from "./lib/text-styles.js";
4
+ import { TouchTarget } from "./touch-target.js";
5
+ import { ChevronLeft, ChevronRight } from "lucide-react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Pagination as Pagination$1 } from "@journ/nude/pagination";
8
+ //#region src/pagination.tsx
9
+ const control = cn(interactive, "inline-flex min-w-10 items-center justify-center gap-1.5 px-3 py-1.5 text-sm/6 font-medium tabular-nums");
10
+ const Root = ({ className, ...props }) => /* @__PURE__ */ jsx(Pagination$1.Root, {
11
+ "aria-label": "Pagination",
12
+ ...props,
13
+ className: cn("flex items-center justify-between gap-3", className)
14
+ });
15
+ const List = ({ className, ...props }) => /* @__PURE__ */ jsx(Pagination$1.List, {
16
+ ...props,
17
+ className: cn("flex items-center gap-1", className)
18
+ });
19
+ const Previous = ({ className, children = "Previous", ...props }) => /* @__PURE__ */ jsx(Pagination$1.Previous, {
20
+ ...props,
21
+ className: cn(control, className),
22
+ children: /* @__PURE__ */ jsxs(TouchTarget, { children: [/* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" }), children] })
23
+ });
24
+ const Next = ({ className, children = "Next", ...props }) => /* @__PURE__ */ jsx(Pagination$1.Next, {
25
+ ...props,
26
+ className: cn(control, className),
27
+ children: /* @__PURE__ */ jsxs(TouchTarget, { children: [children, /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })] })
28
+ });
29
+ const Page = ({ className, children, ...props }) => /* @__PURE__ */ jsx(Pagination$1.Page, {
30
+ ...props,
31
+ className: cn(control, selectedWhenCurrent, className),
32
+ children: /* @__PURE__ */ jsx(TouchTarget, { children })
33
+ });
34
+ const Gap = ({ className, ...props }) => /* @__PURE__ */ jsx(Pagination$1.Gap, {
35
+ "aria-hidden": true,
36
+ ...props,
37
+ className: cn("px-2 opacity-60", className),
38
+ children: "…"
39
+ });
40
+ const Pagination = {
41
+ Root,
42
+ Previous,
43
+ List,
44
+ Page,
45
+ Gap,
46
+ Next
47
+ };
48
+ //#endregion
49
+ export { Pagination };
@@ -0,0 +1,5 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ //#region src/pill-select.d.ts
3
+ declare const PillSelect: ({ className, children, ...props }: ComponentPropsWithRef<'select'>) => import("react").JSX.Element;
4
+ //#endregion
5
+ export { PillSelect };
@@ -0,0 +1,21 @@
1
+ import { cn } from "./lib/cn.js";
2
+ import { control, controlText } from "./lib/theme.js";
3
+ import { ChevronDown } from "lucide-react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { PillSelect as PillSelect$1 } from "@journ/nude/pill-select";
6
+ //#region src/pill-select.tsx
7
+ const PillSelect = ({ className, children, ...props }) => /* @__PURE__ */ jsxs("span", {
8
+ "data-slot": "pill-select",
9
+ className: "relative inline-block",
10
+ children: [/* @__PURE__ */ jsx(PillSelect$1, {
11
+ "data-slot": "pill-select-control",
12
+ ...props,
13
+ className: cn(control, "appearance-none rounded-bloom py-2.5 pr-9 pl-3 text-base/6 outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-bloom-sky disabled:opacity-50 sm:py-1.5 sm:text-sm/6", className),
14
+ children
15
+ }), /* @__PURE__ */ jsx(ChevronDown, {
16
+ "aria-hidden": true,
17
+ className: cn(controlText, "pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2")
18
+ })]
19
+ });
20
+ //#endregion
21
+ export { PillSelect };
@@ -0,0 +1,9 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ import * as Nude from "@journ/nude/popover-parts";
3
+ //#region src/popover-parts.d.ts
4
+ declare const Root: any;
5
+ declare const Trigger: any;
6
+ declare const Close: any;
7
+ declare const Content: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Content>) => import("react").JSX.Element;
8
+ //#endregion
9
+ export { Close, Content, Root, Trigger };
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { cn } from "./lib/cn.js";
3
+ import { usePopEnter } from "./lib/use-enter.js";
4
+ import { floatingCard } from "./lib/overlay.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import * as Nude from "@journ/nude/popover-parts";
7
+ //#region src/popover-parts.tsx
8
+ const Root = Nude.Root;
9
+ const Trigger = Nude.Trigger;
10
+ const Close = Nude.Close;
11
+ const Content = ({ className, ...props }) => {
12
+ const panel = usePopEnter();
13
+ return /* @__PURE__ */ jsx(Nude.Content, {
14
+ ref: panel,
15
+ sideOffset: 8,
16
+ ...props,
17
+ className: cn(floatingCard, className)
18
+ });
19
+ };
20
+ //#endregion
21
+ export { Close, Content, Root, Trigger };
@@ -0,0 +1,10 @@
1
+ import { Content } from "./popover-parts.js";
2
+ //#region src/popover.d.ts
3
+ declare const Popover: {
4
+ Root: any;
5
+ Trigger: any;
6
+ Content: typeof Content;
7
+ Close: any;
8
+ };
9
+ //#endregion
10
+ export { Popover };
@@ -0,0 +1,10 @@
1
+ import { Close, Content, Root, Trigger } from "./popover-parts.js";
2
+ //#region src/popover.tsx
3
+ const Popover = {
4
+ Root,
5
+ Trigger,
6
+ Content,
7
+ Close
8
+ };
9
+ //#endregion
10
+ export { Popover };
@@ -0,0 +1,2 @@
1
+ import { Portal, PortalProps } from "@journ/nude/portal";
2
+ export { Portal, type PortalProps };
package/dist/portal.js ADDED
@@ -0,0 +1,2 @@
1
+ import { Portal } from "@journ/nude/portal";
2
+ export { Portal };
@@ -0,0 +1,38 @@
1
+ import { VariantProps } from "./lib/tv.js";
2
+ import { ComponentPropsWithRef } from "react";
3
+ import * as Nude from "@journ/nude/progress-parts";
4
+ //#region src/progress-parts.d.ts
5
+ type RootProps = Nude.ProgressProps;
6
+ declare const Root: ({ className, ...props }: RootProps) => import("react").JSX.Element;
7
+ declare const indicator: import("tailwind-variants").TVReturnType<{
8
+ tone: {
9
+ readonly neutral: "bg-bloom-foreground dark:bg-bloom-foreground-dark";
10
+ readonly coral: 'bg-bloom-coral';
11
+ readonly yellow: 'bg-bloom-yellow';
12
+ readonly indigo: 'bg-bloom-indigo';
13
+ readonly mint: 'bg-bloom-mint';
14
+ readonly sky: 'bg-bloom-sky';
15
+ };
16
+ }, undefined, "size-full transition-transform duration-300 ease-out", {
17
+ tone: {
18
+ readonly neutral: "bg-bloom-foreground dark:bg-bloom-foreground-dark";
19
+ readonly coral: 'bg-bloom-coral';
20
+ readonly yellow: 'bg-bloom-yellow';
21
+ readonly indigo: 'bg-bloom-indigo';
22
+ readonly mint: 'bg-bloom-mint';
23
+ readonly sky: 'bg-bloom-sky';
24
+ };
25
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
26
+ tone: {
27
+ readonly neutral: "bg-bloom-foreground dark:bg-bloom-foreground-dark";
28
+ readonly coral: 'bg-bloom-coral';
29
+ readonly yellow: 'bg-bloom-yellow';
30
+ readonly indigo: 'bg-bloom-indigo';
31
+ readonly mint: 'bg-bloom-mint';
32
+ readonly sky: 'bg-bloom-sky';
33
+ };
34
+ }, undefined>>;
35
+ type IndicatorProps = ComponentPropsWithRef<typeof Nude.Indicator> & VariantProps<typeof indicator>;
36
+ declare const Indicator: ({ tone, className, ...props }: IndicatorProps) => import("react").JSX.Element;
37
+ //#endregion
38
+ export { Indicator, type RootProps as ProgressProps, Root };
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { tv } from "./lib/tv.js";
3
+ import { cn } from "./lib/cn.js";
4
+ import { fills } from "./lib/tones.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import * as Nude from "@journ/nude/progress-parts";
7
+ //#region src/progress-parts.tsx
8
+ const Root = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Root, {
9
+ ...props,
10
+ className: cn("relative h-4 w-full overflow-hidden bg-current/10", className)
11
+ });
12
+ const indicator = tv({
13
+ base: "size-full transition-transform duration-300 ease-out",
14
+ variants: { tone: fills },
15
+ defaultVariants: { tone: "neutral" }
16
+ });
17
+ const Indicator = ({ tone, className, ...props }) => /* @__PURE__ */ jsx(Nude.Indicator, {
18
+ ...props,
19
+ className: indicator({
20
+ tone,
21
+ class: className
22
+ })
23
+ });
24
+ //#endregion
25
+ export { Indicator, Root };
@@ -0,0 +1,8 @@
1
+ import { Indicator, Root } from "./progress-parts.js";
2
+ //#region src/progress.d.ts
3
+ declare const Progress: {
4
+ Root: typeof Root;
5
+ Indicator: typeof Indicator;
6
+ };
7
+ //#endregion
8
+ export { Progress };
@@ -0,0 +1,8 @@
1
+ import { Indicator, Root } from "./progress-parts.js";
2
+ //#region src/progress.tsx
3
+ const Progress = {
4
+ Root,
5
+ Indicator
6
+ };
7
+ //#endregion
8
+ export { Progress };
@@ -0,0 +1,11 @@
1
+ import { IconButtonProps } from "./icon-button.js";
2
+ import { ComponentPropsWithRef } from "react";
3
+ import * as Nude from "@journ/nude/quantity-input-parts";
4
+ //#region src/quantity-input-parts.d.ts
5
+ type RootProps = Nude.RootProps;
6
+ declare const Root: ({ className, ...props }: RootProps) => import("react").JSX.Element;
7
+ declare const Decrement: ({ tone, size, className, children, ...props }: IconButtonProps) => import("react").JSX.Element;
8
+ declare const Increment: ({ tone, size, className, children, ...props }: IconButtonProps) => import("react").JSX.Element;
9
+ declare const Field: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Field>) => import("react").JSX.Element;
10
+ //#endregion
11
+ export { Decrement, Field, Increment, Root, type RootProps };
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { cn } from "./lib/cn.js";
3
+ import { stepButton } from "./step-button.js";
4
+ import { composerInput, composerRoot } from "./composer.js";
5
+ import { Minus, Plus } from "lucide-react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import * as Nude from "@journ/nude/quantity-input-parts";
8
+ //#region src/quantity-input-parts.tsx
9
+ const Root = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Root, {
10
+ ...props,
11
+ className: composerRoot(className)
12
+ });
13
+ const Decrement = ({ tone, size, className, children, ...props }) => /* @__PURE__ */ jsx(Nude.Decrement, {
14
+ ...props,
15
+ ...stepButton(Minus, {
16
+ tone,
17
+ size,
18
+ className,
19
+ children
20
+ })
21
+ });
22
+ const Increment = ({ tone, size, className, children, ...props }) => /* @__PURE__ */ jsx(Nude.Increment, {
23
+ ...props,
24
+ ...stepButton(Plus, {
25
+ tone,
26
+ size,
27
+ className,
28
+ children
29
+ })
30
+ });
31
+ const Field = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Field, {
32
+ ...props,
33
+ className: composerInput(cn("text-center font-mono tabular-nums", className))
34
+ });
35
+ //#endregion
36
+ export { Decrement, Field, Increment, Root };
@@ -0,0 +1,10 @@
1
+ import { Decrement, Field, Increment, Root, RootProps } from "./quantity-input-parts.js";
2
+ //#region src/quantity-input.d.ts
3
+ declare const QuantityInput: {
4
+ Root: typeof Root;
5
+ Decrement: typeof Decrement;
6
+ Field: typeof Field;
7
+ Increment: typeof Increment;
8
+ };
9
+ //#endregion
10
+ export { QuantityInput, type RootProps as QuantityInputProps };
@@ -0,0 +1,10 @@
1
+ import { Decrement, Field, Increment, Root } from "./quantity-input-parts.js";
2
+ //#region src/quantity-input.tsx
3
+ const QuantityInput = {
4
+ Root,
5
+ Decrement,
6
+ Field,
7
+ Increment
8
+ };
9
+ //#endregion
10
+ export { QuantityInput };
@@ -0,0 +1,7 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ import * as Nude from "@journ/nude/radio-parts";
3
+ //#region src/radio-parts.d.ts
4
+ declare const Group: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Group>) => import("react").JSX.Element;
5
+ declare const Item: ({ className, ...props }: Omit<ComponentPropsWithRef<typeof Nude.Item>, 'classNames' | 'children'>) => import("react").JSX.Element;
6
+ //#endregion
7
+ export { Group, Item };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { cn } from "./lib/cn.js";
3
+ import { pressReset } from "./lib/interactive.js";
4
+ import { TouchTarget } from "./touch-target.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import * as Nude from "@journ/nude/radio-parts";
7
+ //#region src/radio-parts.tsx
8
+ const Group = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Group, {
9
+ ...props,
10
+ className: cn("flex flex-col gap-3", className)
11
+ });
12
+ const Item = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Item, {
13
+ ...props,
14
+ classNames: { indicator: "bg-current block size-2 rounded-full" },
15
+ className: cn(pressReset, "relative grid size-4 shrink-0 cursor-default place-items-center rounded-full border border-current outline-none transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-bloom-sky", "disabled:pointer-events-none disabled:opacity-50", className),
16
+ children: /* @__PURE__ */ jsx(TouchTarget, {})
17
+ });
18
+ //#endregion
19
+ export { Group, Item };
@@ -0,0 +1,8 @@
1
+ import { Group, Item } from "./radio-parts.js";
2
+ //#region src/radio.d.ts
3
+ declare const Radio: {
4
+ Group: typeof Group;
5
+ Item: typeof Item;
6
+ };
7
+ //#endregion
8
+ export { Radio };
package/dist/radio.js ADDED
@@ -0,0 +1,8 @@
1
+ import { Group, Item } from "./radio-parts.js";
2
+ //#region src/radio.tsx
3
+ const Radio = {
4
+ Group,
5
+ Item
6
+ };
7
+ //#endregion
8
+ export { Radio };
@@ -0,0 +1,9 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ import * as Nude from "@journ/nude/scroll-area-parts";
3
+ //#region src/scroll-area-parts.d.ts
4
+ declare const Root: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Root>) => import("react").JSX.Element;
5
+ declare const Viewport: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Viewport>) => import("react").JSX.Element;
6
+ declare const Scrollbar: ({ className, ...props }: Omit<ComponentPropsWithRef<typeof Nude.Scrollbar>, 'classNames' | 'children'>) => import("react").JSX.Element;
7
+ declare const Corner: any;
8
+ //#endregion
9
+ export { Corner, Root, Scrollbar, Viewport };
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { cn } from "./lib/cn.js";
3
+ import { TouchTarget } from "./touch-target.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import * as Nude from "@journ/nude/scroll-area-parts";
6
+ //#region src/scroll-area-parts.tsx
7
+ const Root = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Root, {
8
+ ...props,
9
+ className: cn("relative overflow-hidden", className)
10
+ });
11
+ const Viewport = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Viewport, {
12
+ ...props,
13
+ className: cn("size-full rounded-[inherit] outline-none focus-visible:outline-2 focus-visible:outline-bloom-sky", className)
14
+ });
15
+ const Scrollbar = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Scrollbar, {
16
+ ...props,
17
+ classNames: { thumb: "relative flex-1 bg-current/20 transition-colors hover:bg-current/40" },
18
+ className: cn("flex touch-none p-0.5 transition-opacity select-none data-[state=hidden]:opacity-0 data-[state=visible]:opacity-100", "data-[orientation=horizontal]:h-2.5 data-[orientation=horizontal]:flex-col data-[orientation=vertical]:w-2.5", className),
19
+ children: /* @__PURE__ */ jsx(TouchTarget, {})
20
+ });
21
+ const Corner = Nude.Corner;
22
+ //#endregion
23
+ export { Corner, Root, Scrollbar, Viewport };
@@ -0,0 +1,10 @@
1
+ import { Root, Scrollbar, Viewport } from "./scroll-area-parts.js";
2
+ //#region src/scroll-area.d.ts
3
+ declare const ScrollArea: {
4
+ Root: typeof Root;
5
+ Viewport: typeof Viewport;
6
+ Scrollbar: typeof Scrollbar;
7
+ Corner: any;
8
+ };
9
+ //#endregion
10
+ export { ScrollArea };
@@ -0,0 +1,10 @@
1
+ import { Corner, Root, Scrollbar, Viewport } from "./scroll-area-parts.js";
2
+ //#region src/scroll-area.tsx
3
+ const ScrollArea = {
4
+ Root,
5
+ Viewport,
6
+ Scrollbar,
7
+ Corner
8
+ };
9
+ //#endregion
10
+ export { ScrollArea };
@@ -0,0 +1,13 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ import * as Nude from "@journ/nude/select-parts";
3
+ //#region src/select-parts.d.ts
4
+ declare const Root: any;
5
+ declare const Group: any;
6
+ declare const Value: any;
7
+ declare const Trigger: ({ className, ...props }: Omit<ComponentPropsWithRef<typeof Nude.Trigger>, 'icon'>) => import("react").JSX.Element;
8
+ declare const Content: ({ className, ...props }: Omit<ComponentPropsWithRef<typeof Nude.Content>, 'classNames'>) => import("react").JSX.Element;
9
+ declare const Item: ({ className, ...props }: Omit<ComponentPropsWithRef<typeof Nude.Item>, 'indicator'>) => import("react").JSX.Element;
10
+ declare const Label: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Label>) => import("react").JSX.Element;
11
+ declare const Separator: ({ className, ...props }: ComponentPropsWithRef<typeof Nude.Separator>) => import("react").JSX.Element;
12
+ //#endregion
13
+ export { Content, Group, Item, Label, Root, Separator, Trigger, Value };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { cn } from "./lib/cn.js";
3
+ import { pressReset } from "./lib/interactive.js";
4
+ import { usePopEnter } from "./lib/use-enter.js";
5
+ import { control } from "./lib/theme.js";
6
+ import { floatingItem, floatingLabel, floatingSeparator, floatingSurface } from "./lib/overlay.js";
7
+ import { Check, ChevronDown } from "lucide-react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import * as Nude from "@journ/nude/select-parts";
10
+ //#region src/select-parts.tsx
11
+ const Root = Nude.Root;
12
+ const Group = Nude.Group;
13
+ const Value = Nude.Value;
14
+ const Trigger = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Trigger, {
15
+ ...props,
16
+ icon: /* @__PURE__ */ jsx(ChevronDown, {
17
+ "aria-hidden": true,
18
+ className: "size-4"
19
+ }),
20
+ className: cn(pressReset, control, "inline-flex items-center justify-between gap-3 rounded-bloom py-2.5 pr-3 pl-3 text-base/6 outline-none sm:py-1.5 sm:text-sm/6", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-bloom-sky data-disabled:opacity-50 data-placeholder:opacity-60", className)
21
+ });
22
+ const Content = ({ className, ...props }) => {
23
+ const panel = usePopEnter();
24
+ return /* @__PURE__ */ jsx(Nude.Content, {
25
+ ref: panel,
26
+ sideOffset: 6,
27
+ ...props,
28
+ classNames: { viewport: "scrollbar-bloom max-h-(--radix-select-content-available-height)" },
29
+ className: cn(floatingSurface, "min-w-(--radix-select-trigger-width)", className)
30
+ });
31
+ };
32
+ const Item = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Item, {
33
+ ...props,
34
+ indicator: /* @__PURE__ */ jsx(Check, {}),
35
+ className: cn(floatingItem, "justify-between", className)
36
+ });
37
+ const Label = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Label, {
38
+ ...props,
39
+ className: cn(floatingLabel, className)
40
+ });
41
+ const Separator = ({ className, ...props }) => /* @__PURE__ */ jsx(Nude.Separator, {
42
+ ...props,
43
+ className: cn(floatingSeparator, className)
44
+ });
45
+ //#endregion
46
+ export { Content, Group, Item, Label, Root, Separator, Trigger, Value };
@@ -0,0 +1,14 @@
1
+ import { Content, Item, Label, Separator, Trigger } from "./select-parts.js";
2
+ //#region src/select.d.ts
3
+ declare const Select: {
4
+ Root: any;
5
+ Trigger: typeof Trigger;
6
+ Value: any;
7
+ Content: typeof Content;
8
+ Group: any;
9
+ Label: typeof Label;
10
+ Item: typeof Item;
11
+ Separator: typeof Separator;
12
+ };
13
+ //#endregion
14
+ export { Select };
package/dist/select.js ADDED
@@ -0,0 +1,14 @@
1
+ import { Content, Group, Item, Label, Root, Separator, Trigger, Value } from "./select-parts.js";
2
+ //#region src/select.tsx
3
+ const Select = {
4
+ Root,
5
+ Trigger,
6
+ Value,
7
+ Content,
8
+ Group,
9
+ Label,
10
+ Item,
11
+ Separator
12
+ };
13
+ //#endregion
14
+ export { Select };
@@ -0,0 +1,33 @@
1
+ import { Actions, Body } from "./lib/modal-parts.js";
2
+ import { VariantProps } from "./lib/tv.js";
3
+ import { Close, Description, Root, Title, Trigger } from "./dialog-parts.js";
4
+ import { ComponentPropsWithRef } from "react";
5
+ import * as Nude from "@journ/nude/sheet-parts";
6
+ //#region src/sheet-parts.d.ts
7
+ type Side = Nude.SheetSide;
8
+ declare const sheetContent: import("tailwind-variants").TVReturnType<{
9
+ side: {
10
+ right: "inset-y-0 right-0 w-full max-w-lg md:inset-y-4 md:right-4";
11
+ left: "inset-y-0 left-0 w-full max-w-lg md:inset-y-4 md:left-4";
12
+ top: "inset-x-0 top-0 max-h-[85dvh] md:inset-x-4 md:top-4";
13
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] md:inset-x-4 md:bottom-4";
14
+ };
15
+ }, undefined, string[], {
16
+ side: {
17
+ right: "inset-y-0 right-0 w-full max-w-lg md:inset-y-4 md:right-4";
18
+ left: "inset-y-0 left-0 w-full max-w-lg md:inset-y-4 md:left-4";
19
+ top: "inset-x-0 top-0 max-h-[85dvh] md:inset-x-4 md:top-4";
20
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] md:inset-x-4 md:bottom-4";
21
+ };
22
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
23
+ side: {
24
+ right: "inset-y-0 right-0 w-full max-w-lg md:inset-y-4 md:right-4";
25
+ left: "inset-y-0 left-0 w-full max-w-lg md:inset-y-4 md:left-4";
26
+ top: "inset-x-0 top-0 max-h-[85dvh] md:inset-x-4 md:top-4";
27
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] md:inset-x-4 md:bottom-4";
28
+ };
29
+ }, undefined>>;
30
+ type ContentProps = Omit<ComponentPropsWithRef<typeof Nude.Content>, 'classNames' | 'overlayRef' | 'side'> & VariantProps<typeof sheetContent>;
31
+ declare const Content: ({ side, className, ...props }: ContentProps) => import("react").JSX.Element;
32
+ //#endregion
33
+ export { Actions, Body, Close, Content, Description, Root, type ContentProps as SheetContentProps, type Side as SheetSide, Title, Trigger };
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { tv } from "./lib/tv.js";
3
+ import { Actions, Body } from "./lib/modal-parts.js";
4
+ import { surface } from "./lib/theme.js";
5
+ import { ModalContent } from "./lib/modal-content.js";
6
+ import { Close, Description, Root, Title, Trigger } from "./dialog-parts.js";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import * as Nude from "@journ/nude/sheet-parts";
9
+ //#region src/sheet-parts.tsx
10
+ const sheetContent = tv({
11
+ base: [surface, "rounded-bloom fixed flex flex-col gap-4 p-6 outline-none"],
12
+ variants: { side: {
13
+ right: "inset-y-0 right-0 w-full max-w-lg md:inset-y-4 md:right-4",
14
+ left: "inset-y-0 left-0 w-full max-w-lg md:inset-y-4 md:left-4",
15
+ top: "inset-x-0 top-0 max-h-[85dvh] md:inset-x-4 md:top-4",
16
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] md:inset-x-4 md:bottom-4"
17
+ } },
18
+ defaultVariants: { side: "right" }
19
+ });
20
+ const slideFrom = {
21
+ right: { translateX: ["100%", "0%"] },
22
+ left: { translateX: ["-100%", "0%"] },
23
+ top: { translateY: ["-100%", "0%"] },
24
+ bottom: { translateY: ["100%", "0%"] }
25
+ };
26
+ const Content = ({ side = "right", className, ...props }) => /* @__PURE__ */ jsx(ModalContent, {
27
+ content: Nude.Content,
28
+ enter: {
29
+ ...slideFrom[side ?? "right"],
30
+ duration: 300,
31
+ ease: "outExpo"
32
+ },
33
+ side: side ?? "right",
34
+ ...props,
35
+ className: sheetContent({
36
+ side,
37
+ class: className
38
+ })
39
+ });
40
+ //#endregion
41
+ export { Actions, Body, Close, Content, Description, Root, Title, Trigger };
@@ -0,0 +1,16 @@
1
+ import { Actions, Body } from "./lib/modal-parts.js";
2
+ import { Description, Title } from "./dialog-parts.js";
3
+ import { Content, SheetContentProps as ContentProps, SheetSide as Side } from "./sheet-parts.js";
4
+ //#region src/sheet.d.ts
5
+ declare const Sheet: {
6
+ Root: any;
7
+ Trigger: any;
8
+ Close: any;
9
+ Content: typeof Content;
10
+ Title: typeof Title;
11
+ Description: typeof Description;
12
+ Body: typeof Body;
13
+ Actions: typeof Actions;
14
+ };
15
+ //#endregion
16
+ export { Sheet, type ContentProps as SheetContentProps, type Side as SheetSide };
package/dist/sheet.js ADDED
@@ -0,0 +1,16 @@
1
+ import { Actions, Body } from "./lib/modal-parts.js";
2
+ import { Close, Description, Root, Title, Trigger } from "./dialog-parts.js";
3
+ import { Content } from "./sheet-parts.js";
4
+ //#region src/sheet.tsx
5
+ const Sheet = {
6
+ Root,
7
+ Trigger,
8
+ Close,
9
+ Content,
10
+ Title,
11
+ Description,
12
+ Body,
13
+ Actions
14
+ };
15
+ //#endregion
16
+ export { Sheet };