raft-ui 0.0.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 (134) hide show
  1. package/README.md +24 -0
  2. package/dist/cn.d.mts +2 -0
  3. package/dist/cn.mjs +2 -0
  4. package/dist/index.d.mts +2710 -0
  5. package/dist/index.mjs +4821 -0
  6. package/dist/label-DWq4ia5I.mjs +115 -0
  7. package/dist/styled-props-B3SNekJg.d.mts +16 -0
  8. package/dist/wip.d.mts +1238 -0
  9. package/dist/wip.mjs +1416 -0
  10. package/package.json +70 -0
  11. package/src/components/avatar/avatar.tsx +375 -0
  12. package/src/components/avatar/index.ts +17 -0
  13. package/src/components/badge/badge.tsx +393 -0
  14. package/src/components/badge/index.ts +2 -0
  15. package/src/components/banner/banner.tsx +269 -0
  16. package/src/components/banner/index.ts +8 -0
  17. package/src/components/bottom-sheet/bottom-sheet.tsx +152 -0
  18. package/src/components/bottom-sheet/index.ts +22 -0
  19. package/src/components/button/button.tsx +497 -0
  20. package/src/components/button/index.ts +2 -0
  21. package/src/components/checkbox/checkbox-indicator.tsx +128 -0
  22. package/src/components/checkbox/checkbox.tsx +350 -0
  23. package/src/components/checkbox/index.ts +2 -0
  24. package/src/components/combobox/combobox.tsx +603 -0
  25. package/src/components/combobox/index.ts +52 -0
  26. package/src/components/context-menu/context-menu.tsx +380 -0
  27. package/src/components/context-menu/index.ts +34 -0
  28. package/src/components/conversation-preview-card/conversation-preview-card.tsx +336 -0
  29. package/src/components/conversation-preview-card/index.ts +32 -0
  30. package/src/components/description-list/description-list.tsx +116 -0
  31. package/src/components/description-list/index.ts +14 -0
  32. package/src/components/dropdown-menu/dropdown-menu.tsx +405 -0
  33. package/src/components/dropdown-menu/index.ts +38 -0
  34. package/src/components/empty-state/empty-state.tsx +177 -0
  35. package/src/components/empty-state/index.ts +16 -0
  36. package/src/components/field/field.tsx +125 -0
  37. package/src/components/field/index.ts +18 -0
  38. package/src/components/inline-code/index.ts +2 -0
  39. package/src/components/inline-code/inline-code.tsx +33 -0
  40. package/src/components/input/index.ts +2 -0
  41. package/src/components/input/input.tsx +76 -0
  42. package/src/components/input-group/index.ts +7 -0
  43. package/src/components/input-group/input-group.tsx +215 -0
  44. package/src/components/kbd/index.ts +2 -0
  45. package/src/components/kbd/kbd.tsx +43 -0
  46. package/src/components/label/index.ts +7 -0
  47. package/src/components/label/label.tsx +99 -0
  48. package/src/components/lightbox/index.ts +24 -0
  49. package/src/components/lightbox/lightbox.tsx +245 -0
  50. package/src/components/list-item/index.ts +20 -0
  51. package/src/components/list-item/list-item.tsx +263 -0
  52. package/src/components/media-list-item/index.ts +20 -0
  53. package/src/components/media-list-item/media-list-item.tsx +169 -0
  54. package/src/components/notification-center/index.ts +39 -0
  55. package/src/components/notification-center/notification-center.tsx +558 -0
  56. package/src/components/panel-header/index.ts +22 -0
  57. package/src/components/panel-header/panel-header.tsx +199 -0
  58. package/src/components/popover/index.ts +30 -0
  59. package/src/components/popover/popover.tsx +248 -0
  60. package/src/components/preview-shell/index.ts +2 -0
  61. package/src/components/preview-shell/preview-shell.tsx +51 -0
  62. package/src/components/quoted-message-card/index.ts +36 -0
  63. package/src/components/quoted-message-card/quoted-message-card.tsx +391 -0
  64. package/src/components/radio-group/index.ts +6 -0
  65. package/src/components/radio-group/radio-group.tsx +119 -0
  66. package/src/components/section-header/index.ts +16 -0
  67. package/src/components/section-header/section-header.tsx +117 -0
  68. package/src/components/section-label/index.ts +2 -0
  69. package/src/components/section-label/section-label.tsx +38 -0
  70. package/src/components/segmented-control/index.ts +12 -0
  71. package/src/components/segmented-control/segmented-control.tsx +129 -0
  72. package/src/components/select/index.ts +40 -0
  73. package/src/components/select/select.tsx +382 -0
  74. package/src/components/spinner/index.ts +2 -0
  75. package/src/components/spinner/spinner.tsx +228 -0
  76. package/src/components/status/index.ts +2 -0
  77. package/src/components/status/status.tsx +152 -0
  78. package/src/components/tabs/index.ts +24 -0
  79. package/src/components/tabs/tabs.tsx +417 -0
  80. package/src/components/text/index.ts +2 -0
  81. package/src/components/text/text.tsx +130 -0
  82. package/src/components/textarea/index.ts +2 -0
  83. package/src/components/textarea/textarea.tsx +136 -0
  84. package/src/components/toggle-group/index.ts +12 -0
  85. package/src/components/toggle-group/toggle-group.tsx +111 -0
  86. package/src/components/tooltip/index.ts +14 -0
  87. package/src/components/tooltip/tooltip.tsx +186 -0
  88. package/src/fonts/brutal.css +2 -0
  89. package/src/index.ts +404 -0
  90. package/src/legacy/AttentionDot.tsx +28 -0
  91. package/src/legacy/AvatarListRow.tsx +87 -0
  92. package/src/legacy/AvatarSlot.tsx +157 -0
  93. package/src/legacy/Badge.tsx +95 -0
  94. package/src/legacy/Banner.tsx +74 -0
  95. package/src/legacy/BottomSheet.tsx +76 -0
  96. package/src/legacy/CheckMarker.tsx +72 -0
  97. package/src/legacy/Checkbox.tsx +81 -0
  98. package/src/legacy/ConversationPreviewCard.tsx +169 -0
  99. package/src/legacy/DismissBackdrop.tsx +68 -0
  100. package/src/legacy/EmptyState.tsx +63 -0
  101. package/src/legacy/ExperimentalBadge.tsx +19 -0
  102. package/src/legacy/FormField.tsx +106 -0
  103. package/src/legacy/KeyValueRow.tsx +67 -0
  104. package/src/legacy/Lightbox.tsx +119 -0
  105. package/src/legacy/NotificationCenter.tsx +217 -0
  106. package/src/legacy/PanelHeader.tsx +94 -0
  107. package/src/legacy/PreviewShell.tsx +40 -0
  108. package/src/legacy/QuotedMessageCard.tsx +181 -0
  109. package/src/legacy/ReorderablePanelTabs.tsx +151 -0
  110. package/src/legacy/SandboxedPreviewFrame.tsx +59 -0
  111. package/src/legacy/SearchInput.tsx +23 -0
  112. package/src/legacy/SectionEyebrow.tsx +60 -0
  113. package/src/legacy/SectionHeader.tsx +68 -0
  114. package/src/legacy/SegmentedControl.tsx +74 -0
  115. package/src/legacy/SlugInput.tsx +29 -0
  116. package/src/legacy/Spinner.tsx +89 -0
  117. package/src/legacy/StatusDot.tsx +51 -0
  118. package/src/legacy/SurfaceListItem.tsx +32 -0
  119. package/src/legacy/Textarea.tsx +137 -0
  120. package/src/legacy/button.tsx +100 -0
  121. package/src/legacy/context-menu-divider.tsx +12 -0
  122. package/src/legacy/menu-item.tsx +66 -0
  123. package/src/legacy/selection-popover.tsx +212 -0
  124. package/src/legacy/server-switcher-menu.tsx +203 -0
  125. package/src/legacy/source.css +240 -0
  126. package/src/lib/cn.ts +1 -0
  127. package/src/lib/styled-props.ts +11 -0
  128. package/src/lib/theme/theme-context.ts +28 -0
  129. package/src/lib/theme/theme-provider.tsx +181 -0
  130. package/src/lib/theme/use-theme.ts +12 -0
  131. package/src/lib/tv.ts +29 -0
  132. package/src/lib/without-children.ts +6 -0
  133. package/src/styles.css +467 -0
  134. package/src/wip.ts +255 -0
@@ -0,0 +1,115 @@
1
+ import { cn } from "cnfast";
2
+ import { tv } from "tailwind-variants/lite";
3
+ import { createContext, use } from "react";
4
+ import { mergeProps } from "@base-ui/react/merge-props";
5
+ import { useRender } from "@base-ui/react/use-render";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/lib/tv.ts
8
+ const tv$1 = ((options) => {
9
+ const recipe = tv(options);
10
+ const wrappedRecipe = ((props) => {
11
+ const result = recipe(props);
12
+ if (typeof result === "string") return cn(result);
13
+ return Object.fromEntries(Object.entries(result).map(([slotName, slot]) => [slotName, (slotProps) => cn(slot(slotProps))]));
14
+ });
15
+ return Object.assign(wrappedRecipe, recipe);
16
+ });
17
+ //#endregion
18
+ //#region src/lib/theme/theme-context.ts
19
+ const ThemeContext = createContext("brutal");
20
+ const ThemeStateContext = createContext({
21
+ theme: "brutal",
22
+ setTheme: () => void 0,
23
+ mode: "light",
24
+ resolvedMode: "light"
25
+ });
26
+ //#endregion
27
+ //#region src/lib/theme/use-theme.ts
28
+ /** Read the active style family for theme-aware component recipes. */
29
+ function useThemeFamily() {
30
+ return use(ThemeContext);
31
+ }
32
+ /** Read and update the application-level RUI theme selection. */
33
+ function useTheme() {
34
+ return use(ThemeStateContext);
35
+ }
36
+ //#endregion
37
+ //#region src/components/label/label.tsx
38
+ const label = tv$1({
39
+ slots: {
40
+ root: [
41
+ "group/label inline-flex w-fit items-center gap-1",
42
+ "cursor-pointer select-none",
43
+ "text-sm leading-none",
44
+ "aria-disabled:cursor-not-allowed aria-disabled:text-foreground-disabled"
45
+ ],
46
+ asterisk: ["text-accent-400", "group-aria-disabled/label:text-foreground-disabled"],
47
+ sub: ["font-normal normal-case", "group-aria-disabled/label:text-foreground-disabled"]
48
+ },
49
+ variants: {
50
+ theme: {
51
+ brutal: {
52
+ root: "font-bold text-foreground-strong",
53
+ sub: "font-bold tracking-wide text-black/40"
54
+ },
55
+ elegant: {
56
+ root: "font-medium text-foreground",
57
+ sub: "text-foreground/40"
58
+ }
59
+ },
60
+ size: {
61
+ sm: { root: "text-xs" },
62
+ md: { root: "text-sm" }
63
+ }
64
+ },
65
+ defaultVariants: { size: "md" }
66
+ });
67
+ function LabelRoot({ size, disabled, className, render, ...props }) {
68
+ const { root } = label({
69
+ theme: useThemeFamily(),
70
+ size
71
+ });
72
+ return useRender({
73
+ defaultTagName: "label",
74
+ render,
75
+ props: mergeProps({
76
+ "aria-disabled": disabled ? true : void 0,
77
+ className: root({ className })
78
+ }, props),
79
+ state: {
80
+ slot: "label",
81
+ disabled: disabled ?? false
82
+ }
83
+ });
84
+ }
85
+ function LabelAsterisk({ className, children = "*", ...props }) {
86
+ const { asterisk } = label({ theme: useThemeFamily() });
87
+ return /* @__PURE__ */ jsx("span", {
88
+ "data-slot": "label-asterisk",
89
+ className: asterisk({ className }),
90
+ ...props,
91
+ children
92
+ });
93
+ }
94
+ function LabelSub({ className, ...props }) {
95
+ const { sub } = label({ theme: useThemeFamily() });
96
+ return /* @__PURE__ */ jsx("span", {
97
+ "data-slot": "label-sub",
98
+ className: sub({ className }),
99
+ ...props
100
+ });
101
+ }
102
+ function LabelOptional({ children = "(optional)", ...props }) {
103
+ return /* @__PURE__ */ jsx(LabelSub, {
104
+ "data-slot": "label-optional",
105
+ ...props,
106
+ children
107
+ });
108
+ }
109
+ const Label = Object.assign(LabelRoot, {
110
+ Asterisk: LabelAsterisk,
111
+ Optional: LabelOptional,
112
+ Sub: LabelSub
113
+ });
114
+ //#endregion
115
+ export { useTheme as a, ThemeStateContext as c, LabelSub as i, tv$1 as l, LabelAsterisk as n, useThemeFamily as o, LabelOptional as r, ThemeContext as s, Label as t };
@@ -0,0 +1,16 @@
1
+ import { VariantProps } from "tailwind-variants/lite";
2
+
3
+ //#region src/lib/styled-props.d.ts
4
+ /**
5
+ * Base UI components type `className` as `string | ((state) => string)`, but our
6
+ * tv() recipes only accept a plain string. `StyledProps` narrows a Base UI
7
+ * component's props to a string `className` so they can flow into a recipe.
8
+ *
9
+ * The state-callback form is intentionally dropped: our components express every
10
+ * state through `data-*` variants in the recipe, so a caller never needs it.
11
+ */
12
+ type StyledProps<P> = Omit<P, "className"> & {
13
+ className?: string;
14
+ };
15
+ //#endregion
16
+ export { VariantProps as n, StyledProps as t };